xref: /openbmc/qemu/configure (revision 0577e84d374572344bb1cc87c9778357597a3fad)
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"
817d13299dSbellard
82da1d85e3SGerd Hoffmannrm -f config.log
839ac81bbbSmalc
84b48e3611SPeter Maydell# Print a helpful header at the top of config.log
85b48e3611SPeter Maydellecho "# QEMU configure log $(date)" >> config.log
86979ae168SPeter Maydellprintf "# Configured with:" >> config.log
87979ae168SPeter Maydellprintf " '%s'" "$0" "$@" >> config.log
88979ae168SPeter Maydellecho >> config.log
89b48e3611SPeter Maydellecho "#" >> config.log
90b48e3611SPeter Maydell
91835af899SPaolo Bonziniquote_sh() {
92835af899SPaolo Bonzini    printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
93835af899SPaolo Bonzini}
94835af899SPaolo Bonzini
95d880a3baSPaolo Bonziniprint_error() {
96d880a3baSPaolo Bonzini    (echo
9776ad07a4SPeter Maydell    echo "ERROR: $1"
9876ad07a4SPeter Maydell    while test -n "$2"; do
9976ad07a4SPeter Maydell        echo "       $2"
10076ad07a4SPeter Maydell        shift
10176ad07a4SPeter Maydell    done
102d880a3baSPaolo Bonzini    echo) >&2
103d880a3baSPaolo Bonzini}
104d880a3baSPaolo Bonzini
105d880a3baSPaolo Bonzinierror_exit() {
106d880a3baSPaolo Bonzini    print_error "$@"
10776ad07a4SPeter Maydell    exit 1
10876ad07a4SPeter Maydell}
10976ad07a4SPeter Maydell
1109c83ffd8SPeter Maydelldo_compiler() {
1119c83ffd8SPeter Maydell    # Run the compiler, capturing its output to the log. First argument
1129c83ffd8SPeter Maydell    # is compiler binary to execute.
113630d86b7SDavid CARLIER    compiler="$1"
1149c83ffd8SPeter Maydell    shift
1158bbe05d7SIan Jackson    if test -n "$BASH_VERSION"; then eval '
1168bbe05d7SIan Jackson        echo >>config.log "
1178bbe05d7SIan Jacksonfuncs: ${FUNCNAME[*]}
1188bbe05d7SIan Jacksonlines: ${BASH_LINENO[*]}"
1198bbe05d7SIan Jackson    '; fi
1209c83ffd8SPeter Maydell    echo $compiler "$@" >> config.log
1219c83ffd8SPeter Maydell    $compiler "$@" >> config.log 2>&1 || return $?
1228dc38a78SPeter Maydell    # Test passed. If this is an --enable-werror build, rerun
1238dc38a78SPeter Maydell    # the test with -Werror and bail out if it fails. This
1248dc38a78SPeter Maydell    # makes warning-generating-errors in configure test code
1258dc38a78SPeter Maydell    # obvious to developers.
1268dc38a78SPeter Maydell    if test "$werror" != "yes"; then
1278dc38a78SPeter Maydell        return 0
1288dc38a78SPeter Maydell    fi
1298dc38a78SPeter Maydell    # Don't bother rerunning the compile if we were already using -Werror
1308dc38a78SPeter Maydell    case "$*" in
1318dc38a78SPeter Maydell        *-Werror*)
1328dc38a78SPeter Maydell           return 0
1338dc38a78SPeter Maydell        ;;
1348dc38a78SPeter Maydell    esac
1359c83ffd8SPeter Maydell    echo $compiler -Werror "$@" >> config.log
1369c83ffd8SPeter Maydell    $compiler -Werror "$@" >> config.log 2>&1 && return $?
13776ad07a4SPeter Maydell    error_exit "configure test passed without -Werror but failed with -Werror." \
13876ad07a4SPeter Maydell        "This is probably a bug in the configure script. The failing command" \
13976ad07a4SPeter Maydell        "will be at the bottom of config.log." \
14076ad07a4SPeter Maydell        "You can run configure with --disable-werror to bypass this check."
1418dc38a78SPeter Maydell}
1428dc38a78SPeter Maydell
1439c83ffd8SPeter Maydelldo_cc() {
1444dba2789SPaolo Bonzini    do_compiler "$cc" $CPU_CFLAGS "$@"
1459c83ffd8SPeter Maydell}
1469c83ffd8SPeter Maydell
1479c83ffd8SPeter Maydelldo_cxx() {
1484dba2789SPaolo Bonzini    do_compiler "$cxx" $CPU_CFLAGS "$@"
1499c83ffd8SPeter Maydell}
1509c83ffd8SPeter Maydell
15100849b92SRichard Henderson# Append $2 to the variable named $1, with space separation
15200849b92SRichard Hendersonadd_to() {
15300849b92SRichard Henderson    eval $1=\${$1:+\"\$$1 \"}\$2
15400849b92SRichard Henderson}
15500849b92SRichard Henderson
1569c83ffd8SPeter Maydellupdate_cxxflags() {
1579c83ffd8SPeter Maydell    # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
1589c83ffd8SPeter Maydell    # options which some versions of GCC's C++ compiler complain about
1599c83ffd8SPeter Maydell    # because they only make sense for C programs.
160de38c0ccSPaolo Bonzini    QEMU_CXXFLAGS="-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
1618a9d3d56SRichard Henderson    CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-std=gnu++11/)
1629c83ffd8SPeter Maydell    for arg in $QEMU_CFLAGS; do
1639c83ffd8SPeter Maydell        case $arg in
1649c83ffd8SPeter Maydell            -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
1659c83ffd8SPeter Maydell            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
1669c83ffd8SPeter Maydell                ;;
1679c83ffd8SPeter Maydell            *)
1689c83ffd8SPeter Maydell                QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
1699c83ffd8SPeter Maydell                ;;
1709c83ffd8SPeter Maydell        esac
1719c83ffd8SPeter Maydell    done
1729c83ffd8SPeter Maydell}
1739c83ffd8SPeter Maydell
17452166aa0SJuan Quintelacompile_object() {
175fd0e6053SJohn Snow  local_cflags="$1"
176a2866660SPaolo Bonzini  do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
17752166aa0SJuan Quintela}
17852166aa0SJuan Quintela
17952166aa0SJuan Quintelacompile_prog() {
18052166aa0SJuan Quintela  local_cflags="$1"
18152166aa0SJuan Quintela  local_ldflags="$2"
182a2866660SPaolo Bonzini  do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
183a2866660SPaolo Bonzini      $LDFLAGS $EXTRA_LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
18452166aa0SJuan Quintela}
18552166aa0SJuan Quintela
18611568d6dSPaolo Bonzini# symbolically link $1 to $2.  Portable version of "ln -sf".
18711568d6dSPaolo Bonzinisymlink() {
18872b8b5a1SStefan Weil  rm -rf "$2"
189ec5b06d7SAnthony Liguori  mkdir -p "$(dirname "$2")"
19072b8b5a1SStefan Weil  ln -s "$1" "$2"
19111568d6dSPaolo Bonzini}
19211568d6dSPaolo Bonzini
1930dba6195SLoïc Minier# check whether a command is available to this shell (may be either an
1940dba6195SLoïc Minier# executable or a builtin)
1950dba6195SLoïc Minierhas() {
1960dba6195SLoïc Minier    type "$1" >/dev/null 2>&1
1970dba6195SLoïc Minier}
1980dba6195SLoïc Minier
1990a01d76fSMarc-André Lureauversion_ge () {
2002df52b9bSAlex Bennée    local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
2012df52b9bSAlex Bennée    local_ver2=$(echo "$2" | tr . ' ')
2020a01d76fSMarc-André Lureau    while true; do
2030a01d76fSMarc-André Lureau        set x $local_ver1
2040a01d76fSMarc-André Lureau        local_first=${2-0}
205c44a33e2SStefano Garzarella        # 'shift 2' if $2 is set, or 'shift' if $2 is not set
206c44a33e2SStefano Garzarella        shift ${2:+2}
2070a01d76fSMarc-André Lureau        local_ver1=$*
2080a01d76fSMarc-André Lureau        set x $local_ver2
2090a01d76fSMarc-André Lureau        # the second argument finished, the first must be greater or equal
2100a01d76fSMarc-André Lureau        test $# = 1 && return 0
2110a01d76fSMarc-André Lureau        test $local_first -lt $2 && return 1
2120a01d76fSMarc-André Lureau        test $local_first -gt $2 && return 0
213c44a33e2SStefano Garzarella        shift ${2:+2}
2140a01d76fSMarc-André Lureau        local_ver2=$*
2150a01d76fSMarc-André Lureau    done
2160a01d76fSMarc-André Lureau}
2170a01d76fSMarc-André Lureau
2183b6b7550SPaolo Bonziniglob() {
2193b6b7550SPaolo Bonzini    eval test -z '"${1#'"$2"'}"'
2203b6b7550SPaolo Bonzini}
2213b6b7550SPaolo Bonzini
222e9a3591fSChristian Borntraegerld_has() {
223e9a3591fSChristian Borntraeger    $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
224e9a3591fSChristian Borntraeger}
225e9a3591fSChristian Borntraeger
2264ace32e2SAntonio Ospiteif printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
2274ace32e2SAntonio Ospitethen
2284ace32e2SAntonio Ospite  error_exit "main directory cannot contain spaces nor colons"
2294ace32e2SAntonio Ospitefi
2304ace32e2SAntonio Ospite
23114211825SAntonio Ospite# default parameters
2322ff6b91eSJuan Quintelacpu=""
233a31a8642SMichael S. Tsirkiniasl="iasl"
2341e43adfcSbellardinterp_prefix="/usr/gnemul/qemu-%M"
23543ce4dfeSbellardstatic="no"
2363812c0c4SJoelle van Dynecross_compile="no"
2377d13299dSbellardcross_prefix=""
23887430d5bSPaolo Bonziniaudio_drv_list="default"
239b64ec4e4SFam Zhengblock_drv_rw_whitelist=""
240b64ec4e4SFam Zhengblock_drv_ro_whitelist=""
241e5f05f8cSKevin Wolfblock_drv_whitelist_tools="no"
242e49d021eSPeter Maydellhost_cc="cc"
243957f1f99SMichael Rothlibs_qga=""
2445bc62e01SGerd Hoffmanndebug_info="yes"
245cdad781dSDaniele Buonolto="false"
24663678e17SSteven Noonanstack_protector=""
2471e4f6065SDaniele Buonosafe_stack=""
248afc3a8f9SAlex Bennéeuse_containers="yes"
249f2385398SAlex Bennéegdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
250ac0df51dSaliguori
25192712822SDaniel P. Berrangeif test -e "$source_path/.git"
25292712822SDaniel P. Berrangethen
2537d7dbf9dSDan Streetman    git_submodules_action="update"
25492712822SDaniel P. Berrangeelse
2557d7dbf9dSDan Streetman    git_submodules_action="ignore"
25692712822SDaniel P. Berrangefi
2572d652f24SPaolo Bonzini
2582d652f24SPaolo Bonzinigit_submodules="ui/keycodemapdb"
259cc84d63aSDaniel P. Berrangegit="git"
260ac0df51dSaliguori
261afb63ebdSStefan Weil# Don't accept a target_list environment variable.
262afb63ebdSStefan Weilunset target_list
263447e133fSAlex Bennéeunset target_list_exclude
264377529c0SPaolo Bonzini
265377529c0SPaolo Bonzini# Default value for a variable defining feature "foo".
266377529c0SPaolo Bonzini#  * foo="no"  feature will only be used if --enable-foo arg is given
267377529c0SPaolo Bonzini#  * foo=""    feature will be searched for, and if found, will be used
268377529c0SPaolo Bonzini#              unless --disable-foo is given
269377529c0SPaolo Bonzini#  * foo="yes" this value will only be set by --enable-foo flag.
270377529c0SPaolo Bonzini#              feature will searched for,
271377529c0SPaolo Bonzini#              if not found, configure exits with error
272377529c0SPaolo Bonzini#
273377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args.
274377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it
275377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found.
276377529c0SPaolo Bonzini
277c87ea116SAlex Bennéedefault_feature=""
278c87ea116SAlex Bennée# parse CC options second
279c87ea116SAlex Bennéefor opt do
280c87ea116SAlex Bennée  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
281c87ea116SAlex Bennée  case "$opt" in
282c87ea116SAlex Bennée      --without-default-features)
283c87ea116SAlex Bennée          default_feature="no"
284c87ea116SAlex Bennée  ;;
285c87ea116SAlex Bennée  esac
286c87ea116SAlex Bennéedone
287c87ea116SAlex Bennée
288a2866660SPaolo BonziniEXTRA_CFLAGS=""
289a2866660SPaolo BonziniEXTRA_CXXFLAGS=""
290a2866660SPaolo BonziniEXTRA_LDFLAGS=""
291a2866660SPaolo Bonzini
292c87ea116SAlex Bennéexen_ctrl_version="$default_feature"
293c87ea116SAlex Bennéemembarrier="$default_feature"
2940848f8acSThomas Huthvhost_kernel="$default_feature"
295c87ea116SAlex Bennéevhost_net="$default_feature"
296c87ea116SAlex Bennéevhost_crypto="$default_feature"
297c87ea116SAlex Bennéevhost_scsi="$default_feature"
298c87ea116SAlex Bennéevhost_vsock="$default_feature"
299d88618f7SStefan Hajnoczivhost_user="no"
300c87ea116SAlex Bennéevhost_user_fs="$default_feature"
3010848f8acSThomas Huthvhost_vdpa="$default_feature"
302c87ea116SAlex Bennéerdma="$default_feature"
303c87ea116SAlex Bennéepvrdma="$default_feature"
304377529c0SPaolo Bonzinigprof="no"
305377529c0SPaolo Bonzinidebug_tcg="no"
306377529c0SPaolo Bonzinidebug="no"
307247724cbSMarc-André Lureausanitizers="no"
3080aebab04SLingfeng Yangtsan="no"
309c87ea116SAlex Bennéefortify_source="$default_feature"
3101d728c39SBlue Swirlgcov="no"
311c7328271SMiroslav RezaninaEXESUF=""
31217969268SFam Zhengmodules="no"
313bd83c861SChristian Ehrhardtmodule_upgrades="no"
314377529c0SPaolo Bonziniprefix="/usr/local"
31510ff82d1SMarc-André Lureauqemu_suffix="qemu"
316377529c0SPaolo Bonziniprofiler="no"
317377529c0SPaolo Bonzinisoftmmu="yes"
318b915a2f1SPaolo Bonzinilinux_user=""
319b915a2f1SPaolo Bonzinibsd_user=""
320377529c0SPaolo Bonzinipkgversion=""
32140d6444eSAvi Kivitypie=""
3223556c233SPaolo Bonziniqom_cast_debug="yes"
323baf86d6bSPaolo Bonzinitrace_backends="log"
324377529c0SPaolo Bonzinitrace_file="trace"
325c87ea116SAlex Bennéeopengl="$default_feature"
3265dd89908SRichard Hendersoncpuid_h="no"
327c87ea116SAlex Bennéeavx2_opt="$default_feature"
328c87ea116SAlex Bennéeguest_agent="$default_feature"
329c87ea116SAlex Bennéevss_win32_sdk="$default_feature"
330d9840e25STomoki Sekiyamawin_sdk="no"
331c87ea116SAlex Bennéewant_tools="$default_feature"
332519175a2SAlex Barcelocoroutine=""
333c87ea116SAlex Bennéecoroutine_pool="$default_feature"
3347d992e4dSPeter Lievendebug_stack_usage="no"
335f0d92b56SLongpeng(Mike)crypto_afalg="no"
336a1c5e949SDaniel P. Berrangetls_priority="NORMAL"
337c87ea116SAlex Bennéetpm="$default_feature"
338c87ea116SAlex Bennéelive_block_migration=${default_feature:-yes}
339c87ea116SAlex Bennéenuma="$default_feature"
340c87ea116SAlex Bennéereplication=${default_feature:-yes}
341c87ea116SAlex Bennéebochs=${default_feature:-yes}
342c87ea116SAlex Bennéecloop=${default_feature:-yes}
343c87ea116SAlex Bennéedmg=${default_feature:-yes}
344c87ea116SAlex Bennéeqcow1=${default_feature:-yes}
345c87ea116SAlex Bennéevdi=${default_feature:-yes}
346c87ea116SAlex Bennéevvfat=${default_feature:-yes}
347c87ea116SAlex Bennéeqed=${default_feature:-yes}
348c87ea116SAlex Bennéeparallels=${default_feature:-yes}
349ba59fb77SPaolo Bonzinidebug_mutex="no"
350ba4dd2aaSAlex Bennéeplugins="$default_feature"
351b767d257SMarek Marczykowski-Góreckirng_none="no"
352c87ea116SAlex Bennéesecret_keyring="$default_feature"
353a5665051SPaolo Bonzinimeson=""
3543b4da132SPaolo Bonzinimeson_args=""
35548328880SPaolo Bonzinininja=""
3563b4da132SPaolo Bonzinigio="$default_feature"
357a5665051SPaolo Bonziniskip_meson=no
358b8e0c493SJoelle van Dyneslirp_smbd="$default_feature"
359377529c0SPaolo Bonzini
3603b4da132SPaolo Bonzini# The following Meson options are handled manually (still they
3613b4da132SPaolo Bonzini# are included in the automatically generated help message)
3623b4da132SPaolo Bonzini
3633b4da132SPaolo Bonzini# 1. Track which submodules are needed
364*0577e84dSThomas Huthif test "$default_feature" = no ; then
365*0577e84dSThomas Huth  capstone="disabled"
366*0577e84dSThomas Huth  slirp="disabled"
367*0577e84dSThomas Huthelse
3683b4da132SPaolo Bonzini  capstone="auto"
3693b4da132SPaolo Bonzini  slirp="auto"
370*0577e84dSThomas Huthfi
371*0577e84dSThomas Huthfdt="auto"
3723b4da132SPaolo Bonzini
3733b4da132SPaolo Bonzini# 2. Support --with/--without option
3743b4da132SPaolo Bonzinidefault_devices="true"
3753b4da132SPaolo Bonzini
3763b4da132SPaolo Bonzini# 3. Automatically enable/disable other options
3773b4da132SPaolo Bonzinitcg="enabled"
3783b4da132SPaolo Bonzinicfi="false"
3793b4da132SPaolo Bonzini
3803b4da132SPaolo Bonzini# 4. Detection partly done in configure
3813b4da132SPaolo Bonzinixen=${default_feature:+disabled}
382898be3e0SPeter Maydell
383c87ea116SAlex Bennée# parse CC options second
384ac0df51dSaliguorifor opt do
38589138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
386ac0df51dSaliguori  case "$opt" in
387ac0df51dSaliguori  --cross-prefix=*) cross_prefix="$optarg"
3883812c0c4SJoelle van Dyne                    cross_compile="yes"
389ac0df51dSaliguori  ;;
3903d8df640SPaolo Bonzini  --cc=*) CC="$optarg"
391ac0df51dSaliguori  ;;
39283f73fceSTomoki Sekiyama  --cxx=*) CXX="$optarg"
39383f73fceSTomoki Sekiyama  ;;
3942ff6b91eSJuan Quintela  --cpu=*) cpu="$optarg"
3952ff6b91eSJuan Quintela  ;;
396a2866660SPaolo Bonzini  --extra-cflags=*)
397a2866660SPaolo Bonzini    EXTRA_CFLAGS="$EXTRA_CFLAGS $optarg"
398a2866660SPaolo Bonzini    EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
399e2a2ed06SJuan Quintela    ;;
400a2866660SPaolo Bonzini  --extra-cxxflags=*) EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
40111cde1c8SBruno Dominguez  ;;
402a2866660SPaolo Bonzini  --extra-ldflags=*) EXTRA_LDFLAGS="$EXTRA_LDFLAGS $optarg"
403e2a2ed06SJuan Quintela  ;;
4045bc62e01SGerd Hoffmann  --enable-debug-info) debug_info="yes"
4055bc62e01SGerd Hoffmann  ;;
4065bc62e01SGerd Hoffmann  --disable-debug-info) debug_info="no"
4075bc62e01SGerd Hoffmann  ;;
408d75402b5SAlex Bennée  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
409d75402b5SAlex Bennée  ;;
410479ca4ccSMatheus Ferst  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-cflags-}; cc_arch=${cc_arch%%=*}
411d422b2bcSAlex Bennée                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
4122038f8c8SPaolo Bonzini                      cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
413d422b2bcSAlex Bennée  ;;
414d75402b5SAlex Bennée  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
4152038f8c8SPaolo Bonzini                cc_archs="$cc_archs $cc_arch"
416d75402b5SAlex Bennée                eval "cross_cc_${cc_arch}=\$optarg"
4172038f8c8SPaolo Bonzini                cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
418d75402b5SAlex Bennée  ;;
419ac0df51dSaliguori  esac
420ac0df51dSaliguoridone
421ac0df51dSaliguori# OS specific
422ac0df51dSaliguori# Using uname is really, really broken.  Once we have the right set of checks
42393148aa5SStefan Weil# we can eliminate its usage altogether.
424ac0df51dSaliguori
425e49d021eSPeter Maydell# Preferred compiler:
426e49d021eSPeter Maydell#  ${CC} (if set)
427e49d021eSPeter Maydell#  ${cross_prefix}gcc (if cross-prefix specified)
428e49d021eSPeter Maydell#  system compiler
429e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then
430e49d021eSPeter Maydell  cc="$host_cc"
431e49d021eSPeter Maydellelse
432b3198cc2SStuart Yoder  cc="${CC-${cross_prefix}gcc}"
433e49d021eSPeter Maydellfi
434e49d021eSPeter Maydell
43583f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then
43683f73fceSTomoki Sekiyama  cxx="c++"
43783f73fceSTomoki Sekiyamaelse
43883f73fceSTomoki Sekiyama  cxx="${CXX-${cross_prefix}g++}"
43983f73fceSTomoki Sekiyamafi
44083f73fceSTomoki Sekiyama
441b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}"
442cdbd727cSRichard Hendersonas="${AS-${cross_prefix}as}"
4435f6f0e27SRichard Hendersonccas="${CCAS-$cc}"
4443dd46c78SBlue Swirlcpp="${CPP-$cc -E}"
445b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}"
446b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}"
4479f81aeb5SAlistair Francisranlib="${RANLIB-${cross_prefix}ranlib}"
4484852ee95SStefan Weilnm="${NM-${cross_prefix}nm}"
449b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}"
450b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}"
45117884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
45217884d7bSSergei Trofimovichquery_pkg_config() {
45317884d7bSSergei Trofimovich    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
45417884d7bSSergei Trofimovich}
45517884d7bSSergei Trofimovichpkg_config=query_pkg_config
45647c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
457ac0df51dSaliguori
458be17dc90SMichael S. Tsirkin# default flags for all hosts
4592d31515bSPeter Maydell# We use -fwrapv to tell the compiler that we require a C dialect where
4602d31515bSPeter Maydell# left shift of signed integers is well defined and has the expected
4612d31515bSPeter Maydell# 2s-complement style results. (Both clang and gcc agree that it
4622d31515bSPeter Maydell# provides these semantics.)
463de38c0ccSPaolo BonziniQEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv"
464086d5f75SPaolo BonziniQEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
465c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
466be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
4675770e8afSPaolo Bonzini
468de38c0ccSPaolo BonziniQEMU_LDFLAGS=
469de38c0ccSPaolo Bonzini
4705770e8afSPaolo Bonzini# Flags that are needed during configure but later taken care of by Meson
4718a9d3d56SRichard HendersonCONFIGURE_CFLAGS="-std=gnu11 -Wall"
4725770e8afSPaolo BonziniCONFIGURE_LDFLAGS=
473086d5f75SPaolo Bonzini
474be17dc90SMichael S. Tsirkin
475ac0df51dSaliguoricheck_define() {
476ac0df51dSaliguoricat > $TMPC <<EOF
477ac0df51dSaliguori#if !defined($1)
478fd786e1aSPeter Maydell#error $1 not defined
479ac0df51dSaliguori#endif
480ac0df51dSaliguoriint main(void) { return 0; }
481ac0df51dSaliguoriEOF
48252166aa0SJuan Quintela  compile_object
483ac0df51dSaliguori}
484ac0df51dSaliguori
485307119e7SGerd Hoffmanncheck_include() {
486307119e7SGerd Hoffmanncat > $TMPC <<EOF
487307119e7SGerd Hoffmann#include <$1>
488307119e7SGerd Hoffmannint main(void) { return 0; }
489307119e7SGerd HoffmannEOF
490307119e7SGerd Hoffmann  compile_object
491307119e7SGerd Hoffmann}
492307119e7SGerd Hoffmann
49393b25869SJohn Snowwrite_c_skeleton() {
49493b25869SJohn Snow    cat > $TMPC <<EOF
49593b25869SJohn Snowint main(void) { return 0; }
49693b25869SJohn SnowEOF
49793b25869SJohn Snow}
49893b25869SJohn Snow
499bbea4050SPeter Maydellif check_define __linux__ ; then
500ba7c60c2SPaolo Bonzini  targetos=linux
501bbea4050SPeter Maydellelif check_define _WIN32 ; then
502ba7c60c2SPaolo Bonzini  targetos=windows
503bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then
504ba7c60c2SPaolo Bonzini  targetos=openbsd
505bbea4050SPeter Maydellelif check_define __sun__ ; then
506ba7c60c2SPaolo Bonzini  targetos=sunos
507bbea4050SPeter Maydellelif check_define __HAIKU__ ; then
508ba7c60c2SPaolo Bonzini  targetos=haiku
509951fedfcSPeter Maydellelif check_define __FreeBSD__ ; then
510ba7c60c2SPaolo Bonzini  targetos=freebsd
511951fedfcSPeter Maydellelif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
512ba7c60c2SPaolo Bonzini  targetos=gnu/kfreebsd
513951fedfcSPeter Maydellelif check_define __DragonFly__ ; then
514ba7c60c2SPaolo Bonzini  targetos=dragonfly
515951fedfcSPeter Maydellelif check_define __NetBSD__; then
516ba7c60c2SPaolo Bonzini  targetos=netbsd
517951fedfcSPeter Maydellelif check_define __APPLE__; then
518ba7c60c2SPaolo Bonzini  targetos=darwin
519bbea4050SPeter Maydellelse
520951fedfcSPeter Maydell  # This is a fatal error, but don't report it yet, because we
521951fedfcSPeter Maydell  # might be going to just print the --help text, or it might
522951fedfcSPeter Maydell  # be the result of a missing compiler.
523ba7c60c2SPaolo Bonzini  targetos=bogus
524bbea4050SPeter Maydellfi
525bbea4050SPeter Maydell
52665eff01bSPaolo Bonzini# OS specific
52765eff01bSPaolo Bonzini
5283b0d8643SPaolo Bonzinimingw32="no"
5293b0d8643SPaolo Bonzinibsd="no"
5303b0d8643SPaolo Bonzinilinux="no"
5313b0d8643SPaolo Bonzinisolaris="no"
53265eff01bSPaolo Bonzinicase $targetos in
53365eff01bSPaolo Bonziniwindows)
53465eff01bSPaolo Bonzini  mingw32="yes"
53565eff01bSPaolo Bonzini  plugins="no"
53665eff01bSPaolo Bonzini  pie="no"
53765eff01bSPaolo Bonzini;;
53865eff01bSPaolo Bonzinignu/kfreebsd)
53965eff01bSPaolo Bonzini  bsd="yes"
54065eff01bSPaolo Bonzini;;
54165eff01bSPaolo Bonzinifreebsd)
54265eff01bSPaolo Bonzini  bsd="yes"
54365eff01bSPaolo Bonzini  make="${MAKE-gmake}"
54465eff01bSPaolo Bonzini  # needed for kinfo_getvmmap(3) in libutil.h
54565eff01bSPaolo Bonzini;;
54665eff01bSPaolo Bonzinidragonfly)
54765eff01bSPaolo Bonzini  bsd="yes"
54865eff01bSPaolo Bonzini  make="${MAKE-gmake}"
54965eff01bSPaolo Bonzini;;
55065eff01bSPaolo Bonzininetbsd)
55165eff01bSPaolo Bonzini  bsd="yes"
55265eff01bSPaolo Bonzini  make="${MAKE-gmake}"
55365eff01bSPaolo Bonzini;;
55465eff01bSPaolo Bonziniopenbsd)
55565eff01bSPaolo Bonzini  bsd="yes"
55665eff01bSPaolo Bonzini  make="${MAKE-gmake}"
55765eff01bSPaolo Bonzini;;
55865eff01bSPaolo Bonzinidarwin)
55965eff01bSPaolo Bonzini  bsd="yes"
56065eff01bSPaolo Bonzini  darwin="yes"
56165eff01bSPaolo Bonzini  # Disable attempts to use ObjectiveC features in os/object.h since they
56265eff01bSPaolo Bonzini  # won't work when we're compiling with gcc as a C compiler.
56365eff01bSPaolo Bonzini  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
56465eff01bSPaolo Bonzini;;
56565eff01bSPaolo Bonzinisunos)
56665eff01bSPaolo Bonzini  solaris="yes"
56765eff01bSPaolo Bonzini  make="${MAKE-gmake}"
56865eff01bSPaolo Bonzini  smbd="${SMBD-/usr/sfw/sbin/smbd}"
56965eff01bSPaolo Bonzini# needed for CMSG_ macros in sys/socket.h
57065eff01bSPaolo Bonzini  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
57165eff01bSPaolo Bonzini# needed for TIOCWIN* defines in termios.h
57265eff01bSPaolo Bonzini  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
57365eff01bSPaolo Bonzini  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
57465eff01bSPaolo Bonzini  # Note that this check is broken for cross-compilation: if you're
575bbea4050SPeter Maydell  # cross-compiling to one of these OSes then you'll need to specify
576bbea4050SPeter Maydell  # the correct CPU with the --cpu option.
577bbea4050SPeter Maydell  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
578bbea4050SPeter Maydell    cpu="x86_64"
579bbea4050SPeter Maydell  fi
58065eff01bSPaolo Bonzini;;
58165eff01bSPaolo Bonzinihaiku)
58265eff01bSPaolo Bonzini  pie="no"
58365eff01bSPaolo Bonzini  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS"
58465eff01bSPaolo Bonzini;;
58565eff01bSPaolo Bonzinilinux)
58665eff01bSPaolo Bonzini  linux="yes"
58765eff01bSPaolo Bonzini  vhost_user=${default_feature:-yes}
58865eff01bSPaolo Bonzini;;
589bbea4050SPeter Maydellesac
590bbea4050SPeter Maydell
5912ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then
5922ff6b91eSJuan Quintela  # command line argument
5932ff6b91eSJuan Quintela  :
5942ff6b91eSJuan Quintelaelif check_define __i386__ ; then
595ac0df51dSaliguori  cpu="i386"
596ac0df51dSaliguorielif check_define __x86_64__ ; then
597c72b26ecSRichard Henderson  if check_define __ILP32__ ; then
598c72b26ecSRichard Henderson    cpu="x32"
599c72b26ecSRichard Henderson  else
600ac0df51dSaliguori    cpu="x86_64"
601c72b26ecSRichard Henderson  fi
6023aa9bd6cSblueswir1elif check_define __sparc__ ; then
6033aa9bd6cSblueswir1  if check_define __arch64__ ; then
6043aa9bd6cSblueswir1    cpu="sparc64"
6053aa9bd6cSblueswir1  else
6063aa9bd6cSblueswir1    cpu="sparc"
6073aa9bd6cSblueswir1  fi
608fdf7ed96Smalcelif check_define _ARCH_PPC ; then
609fdf7ed96Smalc  if check_define _ARCH_PPC64 ; then
610f8378accSRichard Henderson    if check_define _LITTLE_ENDIAN ; then
611f8378accSRichard Henderson      cpu="ppc64le"
612f8378accSRichard Henderson    else
613fdf7ed96Smalc      cpu="ppc64"
614f8378accSRichard Henderson    fi
615ac0df51dSaliguori  else
616fdf7ed96Smalc    cpu="ppc"
617fdf7ed96Smalc  fi
618afa05235SAurelien Jarnoelif check_define __mips__ ; then
619afa05235SAurelien Jarno  cpu="mips"
620d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then
621d66ed0eaSAurelien Jarno  if check_define __s390x__ ; then
622d66ed0eaSAurelien Jarno    cpu="s390x"
623d66ed0eaSAurelien Jarno  else
624d66ed0eaSAurelien Jarno    cpu="s390"
625d66ed0eaSAurelien Jarno  fi
626c4f80543SAlistair Franciselif check_define __riscv ; then
627ba0e7333SRichard Henderson  cpu="riscv"
62821d89f84SPeter Maydellelif check_define __arm__ ; then
62921d89f84SPeter Maydell  cpu="arm"
6301f080313SClaudio Fontanaelif check_define __aarch64__ ; then
6311f080313SClaudio Fontana  cpu="aarch64"
632dfcf900bSWANG Xueruielif check_define __loongarch64 ; then
633dfcf900bSWANG Xuerui  cpu="loongarch64"
634fdf7ed96Smalcelse
63589138857SStefan Weil  cpu=$(uname -m)
636ac0df51dSaliguorifi
637ac0df51dSaliguori
638823eb013SPaolo Bonzini# Normalise host CPU name, set multilib cflags
639359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests.
6407d13299dSbellardcase "$cpu" in
641e4da0e39SPaolo Bonzini  armv*b|armv*l|arm)
642e4da0e39SPaolo Bonzini    cpu="arm" ;;
643e4da0e39SPaolo Bonzini
6447d13299dSbellard  i386|i486|i586|i686|i86pc|BePC)
64597a847bcSbellard    cpu="i386"
646e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m32" ;;
647e4da0e39SPaolo Bonzini  x32)
6484da270beSPaolo Bonzini    cpu="x86_64"
649e4da0e39SPaolo Bonzini    CPU_CFLAGS="-mx32" ;;
650aaa5fa14Saurel32  x86_64|amd64)
651aaa5fa14Saurel32    cpu="x86_64"
652e4da0e39SPaolo Bonzini    # ??? Only extremely old AMD cpus do not have cmpxchg16b.
653e4da0e39SPaolo Bonzini    # If we truly care, we should simply detect this case at
654e4da0e39SPaolo Bonzini    # runtime and generate the fallback to serial emulation.
655e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m64 -mcx16" ;;
656e4da0e39SPaolo Bonzini
657afa05235SAurelien Jarno  mips*)
658e4da0e39SPaolo Bonzini    cpu="mips" ;;
659e4da0e39SPaolo Bonzini
660e4da0e39SPaolo Bonzini  ppc)
661e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m32" ;;
662e4da0e39SPaolo Bonzini  ppc64)
663d8ff892dSPaolo Bonzini    CPU_CFLAGS="-m64 -mbig" ;;
664e4da0e39SPaolo Bonzini  ppc64le)
665d8ff892dSPaolo Bonzini    cpu="ppc64"
666d8ff892dSPaolo Bonzini    CPU_CFLAGS="-m64 -mlittle" ;;
667e4da0e39SPaolo Bonzini
668e4da0e39SPaolo Bonzini  s390)
669823eb013SPaolo Bonzini    CPU_CFLAGS="-m31" ;;
670e4da0e39SPaolo Bonzini  s390x)
671e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m64" ;;
672e4da0e39SPaolo Bonzini
6733142255cSblueswir1  sparc|sun4[cdmuv])
674ae228531Sbellard    cpu="sparc"
675e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" ;;
676e4da0e39SPaolo Bonzini  sparc64)
677e4da0e39SPaolo Bonzini    CPU_CFLAGS="-m64 -mcpu=ultrasparc" ;;
6787d13299dSbellardesac
679e2d52ad3SJuan Quintela
6800db4a067SPaolo Bonzini: ${make=${MAKE-make}}
681b6daf4d3SPaolo Bonzini
682faf44142SDaniel P. Berrangé# We prefer python 3.x. A bare 'python' is traditionally
683faf44142SDaniel P. Berrangé# python 2.x, but some distros have it as python 3.x, so
684ddf90699SEduardo Habkost# we check that too
685faf44142SDaniel P. Berrangépython=
6860a01d76fSMarc-André Lureauexplicit_python=no
687ddf90699SEduardo Habkostfor binary in "${PYTHON-python3}" python
688faf44142SDaniel P. Berrangédo
689faf44142SDaniel P. Berrangé    if has "$binary"
690faf44142SDaniel P. Berrangé    then
69195c5f2deSPaolo Bonzini        python=$(command -v "$binary")
692faf44142SDaniel P. Berrangé        break
693faf44142SDaniel P. Berrangé    fi
694faf44142SDaniel P. Berrangédone
695903458c8SMarkus Armbruster
696903458c8SMarkus Armbruster
69739d87c8cSAlex Bennée# Check for ancillary tools used in testing
69839d87c8cSAlex Bennéegenisoimage=
6993df437c7SAlex Bennéefor binary in genisoimage mkisofs
70039d87c8cSAlex Bennéedo
70139d87c8cSAlex Bennée    if has $binary
70239d87c8cSAlex Bennée    then
70339d87c8cSAlex Bennée        genisoimage=$(command -v "$binary")
70439d87c8cSAlex Bennée        break
70539d87c8cSAlex Bennée    fi
70639d87c8cSAlex Bennéedone
70739d87c8cSAlex Bennée
7083c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC
7093c4a4d0dSPeter Maydellif has clang; then
7103c4a4d0dSPeter Maydell  objcc=clang
7113c4a4d0dSPeter Maydellelse
7123c4a4d0dSPeter Maydell  objcc="$cc"
7133c4a4d0dSPeter Maydellfi
7143c4a4d0dSPeter Maydell
7153457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then
7163457a3f8SJuan Quintela  EXESUF=".exe"
71778e9d4adSStefan Weil  # MinGW needs -mthreads for TLS and macro _MT.
7185770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
71993b25869SJohn Snow  write_c_skeleton;
720d17f305aSPaolo Bonzini  prefix="/qemu"
72177433a5fSMarc-André Lureau  qemu_suffix=""
722105fad6bSBishara AbuHattoum  libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
7233457a3f8SJuan Quintelafi
7243457a3f8SJuan Quintela
725487fefdbSAnthony Liguoriwerror=""
72685aa5189Sbellard
72761d63097SPaolo Bonzini. $source_path/scripts/meson-buildoptions.sh
72861d63097SPaolo Bonzini
72961d63097SPaolo Bonzinimeson_options=
73061d63097SPaolo Bonzinimeson_option_parse() {
73161d63097SPaolo Bonzini  meson_options="$meson_options $(_meson_option_parse "$@")"
73261d63097SPaolo Bonzini  if test $? -eq 1; then
73361d63097SPaolo Bonzini    echo "ERROR: unknown option $1"
73461d63097SPaolo Bonzini    echo "Try '$0 --help' for more information"
73561d63097SPaolo Bonzini    exit 1
73661d63097SPaolo Bonzini  fi
73761d63097SPaolo Bonzini}
73861d63097SPaolo Bonzini
7397d13299dSbellardfor opt do
74089138857SStefan Weil  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
7417d13299dSbellard  case "$opt" in
7422efc3265Sbellard  --help|-h) show_help=yes
7432efc3265Sbellard  ;;
74499123e13SMike Frysinger  --version|-V) exec cat $source_path/VERSION
74599123e13SMike Frysinger  ;;
746b1a550a0Spbrook  --prefix=*) prefix="$optarg"
7477d13299dSbellard  ;;
748b1a550a0Spbrook  --interp-prefix=*) interp_prefix="$optarg"
74932ce6337Sbellard  ;;
750ac0df51dSaliguori  --cross-prefix=*)
7517d13299dSbellard  ;;
752ac0df51dSaliguori  --cc=*)
7537d13299dSbellard  ;;
754b1a550a0Spbrook  --host-cc=*) host_cc="$optarg"
75583469015Sbellard  ;;
75683f73fceSTomoki Sekiyama  --cxx=*)
75783f73fceSTomoki Sekiyama  ;;
758e007dbecSMichael S. Tsirkin  --iasl=*) iasl="$optarg"
759e007dbecSMichael S. Tsirkin  ;;
7603c4a4d0dSPeter Maydell  --objcc=*) objcc="$optarg"
7613c4a4d0dSPeter Maydell  ;;
762b1a550a0Spbrook  --make=*) make="$optarg"
7637d13299dSbellard  ;;
764b6daf4d3SPaolo Bonzini  --install=*)
7656a882643Spbrook  ;;
7660a01d76fSMarc-André Lureau  --python=*) python="$optarg" ; explicit_python=yes
767c886edfbSBlue Swirl  ;;
7682eb054c2SPeter Maydell  --sphinx-build=*) sphinx_build="$optarg"
7692eb054c2SPeter Maydell  ;;
770a5665051SPaolo Bonzini  --skip-meson) skip_meson=yes
771a5665051SPaolo Bonzini  ;;
772a5665051SPaolo Bonzini  --meson=*) meson="$optarg"
773a5665051SPaolo Bonzini  ;;
77448328880SPaolo Bonzini  --ninja=*) ninja="$optarg"
77548328880SPaolo Bonzini  ;;
776e2d8830eSBrad  --smbd=*) smbd="$optarg"
777e2d8830eSBrad  ;;
778e2a2ed06SJuan Quintela  --extra-cflags=*)
7797d13299dSbellard  ;;
78011cde1c8SBruno Dominguez  --extra-cxxflags=*)
78111cde1c8SBruno Dominguez  ;;
782e2a2ed06SJuan Quintela  --extra-ldflags=*)
7837d13299dSbellard  ;;
7845bc62e01SGerd Hoffmann  --enable-debug-info)
7855bc62e01SGerd Hoffmann  ;;
7865bc62e01SGerd Hoffmann  --disable-debug-info)
7875bc62e01SGerd Hoffmann  ;;
788d75402b5SAlex Bennée  --cross-cc-*)
789d75402b5SAlex Bennée  ;;
79017969268SFam Zheng  --enable-modules)
79117969268SFam Zheng      modules="yes"
79217969268SFam Zheng  ;;
7933aa88b31SStefan Hajnoczi  --disable-modules)
7943aa88b31SStefan Hajnoczi      modules="no"
7953aa88b31SStefan Hajnoczi  ;;
796bd83c861SChristian Ehrhardt  --disable-module-upgrades) module_upgrades="no"
797bd83c861SChristian Ehrhardt  ;;
798bd83c861SChristian Ehrhardt  --enable-module-upgrades) module_upgrades="yes"
799bd83c861SChristian Ehrhardt  ;;
8002ff6b91eSJuan Quintela  --cpu=*)
8017d13299dSbellard  ;;
802b1a550a0Spbrook  --target-list=*) target_list="$optarg"
803447e133fSAlex Bennée                   if test "$target_list_exclude"; then
804447e133fSAlex Bennée                       error_exit "Can't mix --target-list with --target-list-exclude"
805447e133fSAlex Bennée                   fi
806447e133fSAlex Bennée  ;;
807447e133fSAlex Bennée  --target-list-exclude=*) target_list_exclude="$optarg"
808447e133fSAlex Bennée                   if test "$target_list"; then
809447e133fSAlex Bennée                       error_exit "Can't mix --target-list-exclude with --target-list"
810447e133fSAlex Bennée                   fi
811de83cd02Sbellard  ;;
81274242e0fSPaolo Bonzini  --with-trace-file=*) trace_file="$optarg"
8139410b56cSPrerna Saxena  ;;
8147bc3ca7fSPaolo Bonzini  --with-default-devices) default_devices="true"
815f3494749SPaolo Bonzini  ;;
8167bc3ca7fSPaolo Bonzini  --without-default-devices) default_devices="false"
817f3494749SPaolo Bonzini  ;;
818d1d5e9eeSAlex Bennée  --with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
819d1d5e9eeSAlex Bennée  ;;
820d1d5e9eeSAlex Bennée  --with-devices-*) device_arch=${opt#--with-devices-};
821d1d5e9eeSAlex Bennée                    device_arch=${device_arch%%=*}
822d1d5e9eeSAlex Bennée                    cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
823d1d5e9eeSAlex Bennée                    if test -f "$cf"; then
824d1d5e9eeSAlex Bennée                        device_archs="$device_archs $device_arch"
825d1d5e9eeSAlex Bennée                        eval "devices_${device_arch}=\$optarg"
826d1d5e9eeSAlex Bennée                    else
827d1d5e9eeSAlex Bennée                        error_exit "File $cf does not exist"
828d1d5e9eeSAlex Bennée                    fi
829d1d5e9eeSAlex Bennée  ;;
830c87ea116SAlex Bennée  --without-default-features) # processed above
831c87ea116SAlex Bennée  ;;
8327d13299dSbellard  --enable-gprof) gprof="yes"
8337d13299dSbellard  ;;
8341d728c39SBlue Swirl  --enable-gcov) gcov="yes"
8351d728c39SBlue Swirl  ;;
83679427693SLoïc Minier  --static)
83779427693SLoïc Minier    static="yes"
83817884d7bSSergei Trofimovich    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
83943ce4dfeSbellard  ;;
8400b24e75fSPaolo Bonzini  --mandir=*) mandir="$optarg"
8410b24e75fSPaolo Bonzini  ;;
8420b24e75fSPaolo Bonzini  --bindir=*) bindir="$optarg"
8430b24e75fSPaolo Bonzini  ;;
8443aa5d2beSAlon Levy  --libdir=*) libdir="$optarg"
8453aa5d2beSAlon Levy  ;;
8468bf188aaSMichael Tokarev  --libexecdir=*) libexecdir="$optarg"
8478bf188aaSMichael Tokarev  ;;
8480f94d6daSAlon Levy  --includedir=*) includedir="$optarg"
8490f94d6daSAlon Levy  ;;
850528ae5b8SEduardo Habkost  --datadir=*) datadir="$optarg"
8510b24e75fSPaolo Bonzini  ;;
85277433a5fSMarc-André Lureau  --with-suffix=*) qemu_suffix="$optarg"
853023d3d67SEduardo Habkost  ;;
854c6502638SBruce Rogers  --docdir=*) docdir="$optarg"
8550b24e75fSPaolo Bonzini  ;;
856fe0038beSPaolo Bonzini  --localedir=*) localedir="$optarg"
857fe0038beSPaolo Bonzini  ;;
858ca2fb938SAndre Przywara  --sysconfdir=*) sysconfdir="$optarg"
85907381cc1SAnthony Liguori  ;;
860785c23aeSLuiz Capitulino  --localstatedir=*) local_statedir="$optarg"
861785c23aeSLuiz Capitulino  ;;
8623d5eecabSGerd Hoffmann  --firmwarepath=*) firmwarepath="$optarg"
8633d5eecabSGerd Hoffmann  ;;
864181ce1d0SOlaf Hering  --host=*|--build=*|\
865181ce1d0SOlaf Hering  --disable-dependency-tracking|\
866785c23aeSLuiz Capitulino  --sbindir=*|--sharedstatedir=*|\
867fe0038beSPaolo Bonzini  --oldincludedir=*|--datarootdir=*|--infodir=*|\
868023ddd74SMax Filippov  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
869023ddd74SMax Filippov    # These switches are silently ignored, for compatibility with
870023ddd74SMax Filippov    # autoconf-generated configure scripts. This allows QEMU's
871023ddd74SMax Filippov    # configure to be used by RPM and similar macros that set
872023ddd74SMax Filippov    # lots of directory switches by default.
873023ddd74SMax Filippov  ;;
8743556c233SPaolo Bonzini  --disable-qom-cast-debug) qom_cast_debug="no"
8753556c233SPaolo Bonzini  ;;
8763556c233SPaolo Bonzini  --enable-qom-cast-debug) qom_cast_debug="yes"
8773556c233SPaolo Bonzini  ;;
8780c58ac1cSmalc  --audio-drv-list=*) audio_drv_list="$optarg"
8790c58ac1cSmalc  ;;
88089138857SStefan Weil  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
881b64ec4e4SFam Zheng  ;;
88289138857SStefan Weil  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
883eb852011SMarkus Armbruster  ;;
884e5f05f8cSKevin Wolf  --enable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="yes"
885e5f05f8cSKevin Wolf  ;;
886e5f05f8cSKevin Wolf  --disable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="no"
887e5f05f8cSKevin Wolf  ;;
888f8393946Saurel32  --enable-debug-tcg) debug_tcg="yes"
889f8393946Saurel32  ;;
890f8393946Saurel32  --disable-debug-tcg) debug_tcg="no"
891f8393946Saurel32  ;;
892f3d08ee6SPaul Brook  --enable-debug)
893f3d08ee6SPaul Brook      # Enable debugging options that aren't excessively noisy
894f3d08ee6SPaul Brook      debug_tcg="yes"
8951fcc6d42SPeter Xu      debug_mutex="yes"
896f3d08ee6SPaul Brook      debug="yes"
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  ;;
9074d34a86bSPaolo Bonzini  --disable-slirp) slirp="disabled"
908c20709aaSbellard  ;;
909fd6fc214SPaolo Bonzini  --enable-slirp) slirp="enabled"
910fd6fc214SPaolo Bonzini  ;;
9114d34a86bSPaolo Bonzini  --enable-slirp=git) slirp="internal"
9127c57bdd8SMarc-André Lureau  ;;
91303a3c0b3SPaolo Bonzini  --enable-slirp=*) slirp="$optarg"
914675b9b53SMarc-André Lureau  ;;
9151badb709SPaolo Bonzini  --disable-xen) xen="disabled"
916e37630caSaliguori  ;;
9171badb709SPaolo Bonzini  --enable-xen) xen="enabled"
918fc321b4bSJuan Quintela  ;;
9191badb709SPaolo Bonzini  --disable-tcg) tcg="disabled"
920d1a14257SAlex Bennée                 plugins="no"
921b3f6ea7eSPaolo Bonzini  ;;
9221badb709SPaolo Bonzini  --enable-tcg) tcg="enabled"
923b3f6ea7eSPaolo Bonzini  ;;
92405c2a3e7Sbellard  --enable-profiler) profiler="yes"
92505c2a3e7Sbellard  ;;
926cad25d69Spbrook  --disable-system) softmmu="no"
9270a8e90f4Spbrook  ;;
928cad25d69Spbrook  --enable-system) softmmu="yes"
9290a8e90f4Spbrook  ;;
9300953a80fSZachary Amsden  --disable-user)
9310953a80fSZachary Amsden      linux_user="no" ;
9320953a80fSZachary Amsden      bsd_user="no" ;
9330953a80fSZachary Amsden  ;;
9340953a80fSZachary Amsden  --enable-user) ;;
935831b7825Sths  --disable-linux-user) linux_user="no"
9360a8e90f4Spbrook  ;;
937831b7825Sths  --enable-linux-user) linux_user="yes"
938831b7825Sths  ;;
93984778508Sblueswir1  --disable-bsd-user) bsd_user="no"
94084778508Sblueswir1  ;;
94184778508Sblueswir1  --enable-bsd-user) bsd_user="yes"
94284778508Sblueswir1  ;;
94340d6444eSAvi Kivity  --enable-pie) pie="yes"
94434005a00SKirill A. Shutemov  ;;
94540d6444eSAvi Kivity  --disable-pie) pie="no"
94634005a00SKirill A. Shutemov  ;;
94785aa5189Sbellard  --enable-werror) werror="yes"
94885aa5189Sbellard  ;;
94985aa5189Sbellard  --disable-werror) werror="no"
95085aa5189Sbellard  ;;
951cdad781dSDaniele Buono  --enable-lto) lto="true"
952cdad781dSDaniele Buono  ;;
953cdad781dSDaniele Buono  --disable-lto) lto="false"
954cdad781dSDaniele Buono  ;;
95563678e17SSteven Noonan  --enable-stack-protector) stack_protector="yes"
95663678e17SSteven Noonan  ;;
95763678e17SSteven Noonan  --disable-stack-protector) stack_protector="no"
95863678e17SSteven Noonan  ;;
9591e4f6065SDaniele Buono  --enable-safe-stack) safe_stack="yes"
9601e4f6065SDaniele Buono  ;;
9611e4f6065SDaniele Buono  --disable-safe-stack) safe_stack="no"
9621e4f6065SDaniele Buono  ;;
9639e62ba48SDaniele Buono  --enable-cfi)
9649e62ba48SDaniele Buono      cfi="true";
9659e62ba48SDaniele Buono      lto="true";
9669e62ba48SDaniele Buono  ;;
9679e62ba48SDaniele Buono  --disable-cfi) cfi="false"
9689e62ba48SDaniele Buono  ;;
969fbb4121dSPaolo Bonzini  --disable-fdt) fdt="disabled"
9702df87df7SJuan Quintela  ;;
971fbb4121dSPaolo Bonzini  --enable-fdt) fdt="enabled"
972fbb4121dSPaolo Bonzini  ;;
973fbb4121dSPaolo Bonzini  --enable-fdt=git) fdt="internal"
974fbb4121dSPaolo Bonzini  ;;
97503a3c0b3SPaolo Bonzini  --enable-fdt=*) fdt="$optarg"
9762df87df7SJuan Quintela  ;;
977a40161cbSPaolo Bonzini  --disable-membarrier) membarrier="no"
978a40161cbSPaolo Bonzini  ;;
979a40161cbSPaolo Bonzini  --enable-membarrier) membarrier="yes"
980a40161cbSPaolo Bonzini  ;;
9817e563bfbSThomas Huth  --with-pkgversion=*) pkgversion="$optarg"
9824a19f1ecSpbrook  ;;
983519175a2SAlex Barcelo  --with-coroutine=*) coroutine="$optarg"
984519175a2SAlex Barcelo  ;;
98570c60c08SStefan Hajnoczi  --disable-coroutine-pool) coroutine_pool="no"
98670c60c08SStefan Hajnoczi  ;;
98770c60c08SStefan Hajnoczi  --enable-coroutine-pool) coroutine_pool="yes"
98870c60c08SStefan Hajnoczi  ;;
9897d992e4dSPeter Lieven  --enable-debug-stack-usage) debug_stack_usage="yes"
9907d992e4dSPeter Lieven  ;;
991f0d92b56SLongpeng(Mike)  --enable-crypto-afalg) crypto_afalg="yes"
992f0d92b56SLongpeng(Mike)  ;;
993f0d92b56SLongpeng(Mike)  --disable-crypto-afalg) crypto_afalg="no"
994f0d92b56SLongpeng(Mike)  ;;
995d5970055SMichael S. Tsirkin  --disable-vhost-net) vhost_net="no"
996d5970055SMichael S. Tsirkin  ;;
997d5970055SMichael S. Tsirkin  --enable-vhost-net) vhost_net="yes"
998d5970055SMichael S. Tsirkin  ;;
999042cea27SGonglei  --disable-vhost-crypto) vhost_crypto="no"
1000042cea27SGonglei  ;;
1001299e6f19SPaolo Bonzini  --enable-vhost-crypto) vhost_crypto="yes"
1002042cea27SGonglei  ;;
10035e9be92dSNicholas Bellinger  --disable-vhost-scsi) vhost_scsi="no"
10045e9be92dSNicholas Bellinger  ;;
10055e9be92dSNicholas Bellinger  --enable-vhost-scsi) vhost_scsi="yes"
10065e9be92dSNicholas Bellinger  ;;
1007fc0b9b0eSStefan Hajnoczi  --disable-vhost-vsock) vhost_vsock="no"
1008fc0b9b0eSStefan Hajnoczi  ;;
1009fc0b9b0eSStefan Hajnoczi  --enable-vhost-vsock) vhost_vsock="yes"
1010fc0b9b0eSStefan Hajnoczi  ;;
101198fc1adaSDr. David Alan Gilbert  --disable-vhost-user-fs) vhost_user_fs="no"
101298fc1adaSDr. David Alan Gilbert  ;;
101398fc1adaSDr. David Alan Gilbert  --enable-vhost-user-fs) vhost_user_fs="yes"
101498fc1adaSDr. David Alan Gilbert  ;;
1015da076ffeSGerd Hoffmann  --disable-opengl) opengl="no"
101620ff075bSMichael Walle  ;;
1017da076ffeSGerd Hoffmann  --enable-opengl) opengl="yes"
101820ff075bSMichael Walle  ;;
10191ffb3bbbSPaolo Bonzini  --disable-zlib-test)
10201ece9905SAlon Levy  ;;
1021d138cee9SMichael Roth  --enable-guest-agent) guest_agent="yes"
1022d138cee9SMichael Roth  ;;
1023d138cee9SMichael Roth  --disable-guest-agent) guest_agent="no"
1024d138cee9SMichael Roth  ;;
1025d9840e25STomoki Sekiyama  --with-vss-sdk) vss_win32_sdk=""
1026d9840e25STomoki Sekiyama  ;;
1027d9840e25STomoki Sekiyama  --with-vss-sdk=*) vss_win32_sdk="$optarg"
1028d9840e25STomoki Sekiyama  ;;
1029d9840e25STomoki Sekiyama  --without-vss-sdk) vss_win32_sdk="no"
1030d9840e25STomoki Sekiyama  ;;
1031d9840e25STomoki Sekiyama  --with-win-sdk) win_sdk=""
1032d9840e25STomoki Sekiyama  ;;
1033d9840e25STomoki Sekiyama  --with-win-sdk=*) win_sdk="$optarg"
1034d9840e25STomoki Sekiyama  ;;
1035d9840e25STomoki Sekiyama  --without-win-sdk) win_sdk="no"
1036d9840e25STomoki Sekiyama  ;;
10374b1c11fdSDaniel P. Berrange  --enable-tools) want_tools="yes"
10384b1c11fdSDaniel P. Berrange  ;;
10394b1c11fdSDaniel P. Berrange  --disable-tools) want_tools="no"
10404b1c11fdSDaniel P. Berrange  ;;
104186583a07SLiam Merwick  --disable-avx2) avx2_opt="no"
104286583a07SLiam Merwick  ;;
104386583a07SLiam Merwick  --enable-avx2) avx2_opt="yes"
104486583a07SLiam Merwick  ;;
10456b8cd447SRobert Hoo  --disable-avx512f) avx512f_opt="no"
10466b8cd447SRobert Hoo  ;;
10476b8cd447SRobert Hoo  --enable-avx512f) avx512f_opt="yes"
10486b8cd447SRobert Hoo  ;;
104952b53c04SFam Zheng  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
105052b53c04SFam Zheng      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1051583f6e7bSStefan Hajnoczi  ;;
1052cb6414dfSFam Zheng  --enable-vhdx|--disable-vhdx)
1053cb6414dfSFam Zheng      echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1054cb6414dfSFam Zheng  ;;
1055315d3184SFam Zheng  --enable-uuid|--disable-uuid)
1056315d3184SFam Zheng      echo "$0: $opt is obsolete, UUID support is always built" >&2
1057315d3184SFam Zheng  ;;
1058a1c5e949SDaniel P. Berrange  --tls-priority=*) tls_priority="$optarg"
1059a1c5e949SDaniel P. Berrange  ;;
10602da776dbSMichael R. Hines  --enable-rdma) rdma="yes"
10612da776dbSMichael R. Hines  ;;
10622da776dbSMichael R. Hines  --disable-rdma) rdma="no"
10632da776dbSMichael R. Hines  ;;
106421ab34c9SMarcel Apfelbaum  --enable-pvrdma) pvrdma="yes"
106521ab34c9SMarcel Apfelbaum  ;;
106621ab34c9SMarcel Apfelbaum  --disable-pvrdma) pvrdma="no"
106721ab34c9SMarcel Apfelbaum  ;;
1068e91c793cSCole Robinson  --disable-tpm) tpm="no"
1069e91c793cSCole Robinson  ;;
1070ab214c29SStefan Berger  --enable-tpm) tpm="yes"
1071ab214c29SStefan Berger  ;;
1072ed1701c6SDr. David Alan Gilbert  --disable-live-block-migration) live_block_migration="no"
1073ed1701c6SDr. David Alan Gilbert  ;;
1074ed1701c6SDr. David Alan Gilbert  --enable-live-block-migration) live_block_migration="yes"
1075ed1701c6SDr. David Alan Gilbert  ;;
1076a99d57bbSWanlong Gao  --disable-numa) numa="no"
1077a99d57bbSWanlong Gao  ;;
1078a99d57bbSWanlong Gao  --enable-numa) numa="yes"
1079a99d57bbSWanlong Gao  ;;
1080a6b1d4c0SChanglong Xie  --disable-replication) replication="no"
1081a6b1d4c0SChanglong Xie  ;;
1082a6b1d4c0SChanglong Xie  --enable-replication) replication="yes"
1083a6b1d4c0SChanglong Xie  ;;
10842f740136SJeff Cody  --disable-bochs) bochs="no"
10852f740136SJeff Cody  ;;
10862f740136SJeff Cody  --enable-bochs) bochs="yes"
10872f740136SJeff Cody  ;;
10882f740136SJeff Cody  --disable-cloop) cloop="no"
10892f740136SJeff Cody  ;;
10902f740136SJeff Cody  --enable-cloop) cloop="yes"
10912f740136SJeff Cody  ;;
10922f740136SJeff Cody  --disable-dmg) dmg="no"
10932f740136SJeff Cody  ;;
10942f740136SJeff Cody  --enable-dmg) dmg="yes"
10952f740136SJeff Cody  ;;
10962f740136SJeff Cody  --disable-qcow1) qcow1="no"
10972f740136SJeff Cody  ;;
10982f740136SJeff Cody  --enable-qcow1) qcow1="yes"
10992f740136SJeff Cody  ;;
11002f740136SJeff Cody  --disable-vdi) vdi="no"
11012f740136SJeff Cody  ;;
11022f740136SJeff Cody  --enable-vdi) vdi="yes"
11032f740136SJeff Cody  ;;
11042f740136SJeff Cody  --disable-vvfat) vvfat="no"
11052f740136SJeff Cody  ;;
11062f740136SJeff Cody  --enable-vvfat) vvfat="yes"
11072f740136SJeff Cody  ;;
11082f740136SJeff Cody  --disable-qed) qed="no"
11092f740136SJeff Cody  ;;
11102f740136SJeff Cody  --enable-qed) qed="yes"
11112f740136SJeff Cody  ;;
11122f740136SJeff Cody  --disable-parallels) parallels="no"
11132f740136SJeff Cody  ;;
11142f740136SJeff Cody  --enable-parallels) parallels="yes"
11152f740136SJeff Cody  ;;
1116e6a74868SMarc-André Lureau  --disable-vhost-user) vhost_user="no"
1117e6a74868SMarc-André Lureau  ;;
1118299e6f19SPaolo Bonzini  --enable-vhost-user) vhost_user="yes"
1119299e6f19SPaolo Bonzini  ;;
1120108a6481SCindy Lu  --disable-vhost-vdpa) vhost_vdpa="no"
1121108a6481SCindy Lu  ;;
1122108a6481SCindy Lu  --enable-vhost-vdpa) vhost_vdpa="yes"
1123108a6481SCindy Lu  ;;
1124299e6f19SPaolo Bonzini  --disable-vhost-kernel) vhost_kernel="no"
1125299e6f19SPaolo Bonzini  ;;
1126299e6f19SPaolo Bonzini  --enable-vhost-kernel) vhost_kernel="yes"
1127e6a74868SMarc-André Lureau  ;;
11288b18cdbfSRichard Henderson  --disable-capstone) capstone="disabled"
11298ca80760SRichard Henderson  ;;
11308b18cdbfSRichard Henderson  --enable-capstone) capstone="enabled"
11318ca80760SRichard Henderson  ;;
11328b18cdbfSRichard Henderson  --enable-capstone=git) capstone="internal"
1133e219c499SRichard Henderson  ;;
113403a3c0b3SPaolo Bonzini  --enable-capstone=*) capstone="$optarg"
1135e219c499SRichard Henderson  ;;
1136cc84d63aSDaniel P. Berrange  --with-git=*) git="$optarg"
1137cc84d63aSDaniel P. Berrange  ;;
11387d7dbf9dSDan Streetman  --with-git-submodules=*)
11397d7dbf9dSDan Streetman      git_submodules_action="$optarg"
1140f62bbee5SDaniel P. Berrange  ;;
1141ba59fb77SPaolo Bonzini  --enable-debug-mutex) debug_mutex=yes
1142ba59fb77SPaolo Bonzini  ;;
1143ba59fb77SPaolo Bonzini  --disable-debug-mutex) debug_mutex=no
1144ba59fb77SPaolo Bonzini  ;;
11459b8e4298SAlex Bennée  --enable-plugins) if test "$mingw32" = "yes"; then
11469b8e4298SAlex Bennée                        error_exit "TCG plugins not currently supported on Windows platforms"
11479b8e4298SAlex Bennée                    else
11489b8e4298SAlex Bennée                        plugins="yes"
11499b8e4298SAlex Bennée                    fi
115040e8c6f4SAlex Bennée  ;;
115140e8c6f4SAlex Bennée  --disable-plugins) plugins="no"
115240e8c6f4SAlex Bennée  ;;
1153afc3a8f9SAlex Bennée  --enable-containers) use_containers="yes"
1154afc3a8f9SAlex Bennée  ;;
1155afc3a8f9SAlex Bennée  --disable-containers) use_containers="no"
1156afc3a8f9SAlex Bennée  ;;
1157f48e590aSAlex Bennée  --gdb=*) gdb_bin="$optarg"
1158f48e590aSAlex Bennée  ;;
1159b767d257SMarek Marczykowski-Górecki  --enable-rng-none) rng_none=yes
1160b767d257SMarek Marczykowski-Górecki  ;;
1161b767d257SMarek Marczykowski-Górecki  --disable-rng-none) rng_none=no
1162b767d257SMarek Marczykowski-Górecki  ;;
116354e7aac0SAlexey Krasikov  --enable-keyring) secret_keyring="yes"
116454e7aac0SAlexey Krasikov  ;;
116554e7aac0SAlexey Krasikov  --disable-keyring) secret_keyring="no"
116654e7aac0SAlexey Krasikov  ;;
116720cf7b8eSDenis Plotnikov  --enable-gio) gio=yes
116820cf7b8eSDenis Plotnikov  ;;
116920cf7b8eSDenis Plotnikov  --disable-gio) gio=no
117020cf7b8eSDenis Plotnikov  ;;
1171b8e0c493SJoelle van Dyne  --enable-slirp-smbd) slirp_smbd=yes
1172b8e0c493SJoelle van Dyne  ;;
1173b8e0c493SJoelle van Dyne  --disable-slirp-smbd) slirp_smbd=no
1174b8e0c493SJoelle van Dyne  ;;
11753b4da132SPaolo Bonzini  # backwards compatibility options
11763b4da132SPaolo Bonzini  --enable-trace-backend=*) meson_option_parse "--enable-trace-backends=$optarg" "$optarg"
11773b4da132SPaolo Bonzini  ;;
11783b4da132SPaolo Bonzini  --disable-blobs) meson_option_parse --disable-install-blobs ""
11793b4da132SPaolo Bonzini  ;;
11803b4da132SPaolo Bonzini  --enable-tcmalloc) meson_option_parse --enable-malloc=tcmalloc tcmalloc
11813b4da132SPaolo Bonzini  ;;
11823b4da132SPaolo Bonzini  --enable-jemalloc) meson_option_parse --enable-malloc=jemalloc jemalloc
11833b4da132SPaolo Bonzini  ;;
11843b4da132SPaolo Bonzini  # everything else has the same name in configure and meson
118561d63097SPaolo Bonzini  --enable-* | --disable-*) meson_option_parse "$opt" "$optarg"
118661d63097SPaolo Bonzini  ;;
11872d2ad6d0SFam Zheng  *)
11882d2ad6d0SFam Zheng      echo "ERROR: unknown option $opt"
11892d2ad6d0SFam Zheng      echo "Try '$0 --help' for more information"
11902d2ad6d0SFam Zheng      exit 1
11917f1559c6Sbalrog  ;;
11927d13299dSbellard  esac
11937d13299dSbellarddone
11947d13299dSbellard
1195d1a14257SAlex Bennée# test for any invalid configuration combinations
1196d1a14257SAlex Bennéeif test "$plugins" = "yes" -a "$tcg" = "disabled"; then
1197d1a14257SAlex Bennée    error_exit "Can't enable plugins on non-TCG builds"
1198d1a14257SAlex Bennéefi
1199d1a14257SAlex Bennée
12007d7dbf9dSDan Streetmancase $git_submodules_action in
12017d7dbf9dSDan Streetman    update|validate)
12027d7dbf9dSDan Streetman        if test ! -e "$source_path/.git"; then
12037d7dbf9dSDan Streetman            echo "ERROR: cannot $git_submodules_action git submodules without .git"
12047d7dbf9dSDan Streetman            exit 1
12057d7dbf9dSDan Streetman        fi
12067d7dbf9dSDan Streetman    ;;
12077d7dbf9dSDan Streetman    ignore)
1208b80fd281SPaolo Bonzini        if ! test -f "$source_path/ui/keycodemapdb/README"
1209b80fd281SPaolo Bonzini        then
1210b80fd281SPaolo Bonzini            echo
1211b80fd281SPaolo Bonzini            echo "ERROR: missing GIT submodules"
1212b80fd281SPaolo Bonzini            echo
1213b80fd281SPaolo Bonzini            if test -e "$source_path/.git"; then
1214b80fd281SPaolo Bonzini                echo "--with-git-submodules=ignore specified but submodules were not"
1215b80fd281SPaolo Bonzini                echo "checked out.  Please initialize and update submodules."
1216b80fd281SPaolo Bonzini            else
1217b80fd281SPaolo Bonzini                echo "This is not a GIT checkout but module content appears to"
1218b80fd281SPaolo Bonzini                echo "be missing. Do not use 'git archive' or GitHub download links"
1219b80fd281SPaolo Bonzini                echo "to acquire QEMU source archives. Non-GIT builds are only"
1220b80fd281SPaolo Bonzini                echo "supported with source archives linked from:"
1221b80fd281SPaolo Bonzini                echo
1222b80fd281SPaolo Bonzini                echo "  https://www.qemu.org/download/#source"
1223b80fd281SPaolo Bonzini                echo
1224b80fd281SPaolo Bonzini                echo "Developers working with GIT can use scripts/archive-source.sh"
1225b80fd281SPaolo Bonzini                echo "if they need to create valid source archives."
1226b80fd281SPaolo Bonzini            fi
1227b80fd281SPaolo Bonzini            echo
1228b80fd281SPaolo Bonzini            exit 1
1229b80fd281SPaolo Bonzini        fi
12307d7dbf9dSDan Streetman    ;;
12317d7dbf9dSDan Streetman    *)
12327d7dbf9dSDan Streetman        echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
12337d7dbf9dSDan Streetman        exit 1
12347d7dbf9dSDan Streetman    ;;
12357d7dbf9dSDan Streetmanesac
12367d7dbf9dSDan Streetman
123722a87800SMarc-André Lureaulibdir="${libdir:-$prefix/lib}"
123822a87800SMarc-André Lureaulibexecdir="${libexecdir:-$prefix/libexec}"
123922a87800SMarc-André Lureauincludedir="${includedir:-$prefix/include}"
124022a87800SMarc-André Lureau
124122a87800SMarc-André Lureauif test "$mingw32" = "yes" ; then
124215588a62SJoshua Watt    bindir="${bindir:-$prefix}"
124322a87800SMarc-André Lureauelse
124415588a62SJoshua Watt    bindir="${bindir:-$prefix/bin}"
124515588a62SJoshua Wattfi
124622a87800SMarc-André Lureaumandir="${mandir:-$prefix/share/man}"
124722a87800SMarc-André Lureaudatadir="${datadir:-$prefix/share}"
1248ca8c0909SMarc-André Lureaudocdir="${docdir:-$prefix/share/doc}"
124922a87800SMarc-André Lureausysconfdir="${sysconfdir:-$prefix/etc}"
125022a87800SMarc-André Lureaulocal_statedir="${local_statedir:-$prefix/var}"
125116bf7a33SPaolo Bonzinifirmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
125216bf7a33SPaolo Bonzinilocaledir="${localedir:-$datadir/locale}"
125322a87800SMarc-André Lureau
12549557af9cSAlex Bennéeif eval test -z "\${cross_cc_$cpu}"; then
1255b1aa4de1SAlex Bennée    eval "cross_cc_${cpu}=\$cc"
12562038f8c8SPaolo Bonzini    cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
12579557af9cSAlex Bennéefi
125879f3b12fSPeter Crosthwaite
125960e0df25SPeter Maydelldefault_target_list=""
12606e92f823SPeter Maydellmak_wilds=""
12616e92f823SPeter Maydell
1262b915a2f1SPaolo Bonziniif [ "$linux_user" != no ]; then
1263b915a2f1SPaolo Bonzini    if [ "$targetos" = linux ] && [ -d $source_path/linux-user/include/host/$cpu ]; then
1264b915a2f1SPaolo Bonzini        linux_user=yes
1265b915a2f1SPaolo Bonzini    elif [ "$linux_user" = yes ]; then
1266b915a2f1SPaolo Bonzini        error_exit "linux-user not supported on this architecture"
1267b915a2f1SPaolo Bonzini    fi
1268b915a2f1SPaolo Bonzinifi
1269b915a2f1SPaolo Bonziniif [ "$bsd_user" != no ]; then
1270b915a2f1SPaolo Bonzini    if [ "$bsd_user" = "" ]; then
1271b915a2f1SPaolo Bonzini        test $targetos = freebsd && bsd_user=yes
1272b915a2f1SPaolo Bonzini    fi
1273b915a2f1SPaolo Bonzini    if [ "$bsd_user" = yes ] && ! [ -d $source_path/bsd-user/$targetos ]; then
1274b915a2f1SPaolo Bonzini        error_exit "bsd-user not supported on this host OS"
1275b915a2f1SPaolo Bonzini    fi
1276b915a2f1SPaolo Bonzinifi
127760e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then
1278812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
127960e0df25SPeter Maydellfi
128060e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then
1281812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
128260e0df25SPeter Maydellfi
128360e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then
1284812b31d3SAlex Bennée    mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
128560e0df25SPeter Maydellfi
128660e0df25SPeter Maydell
1287447e133fSAlex Bennéefor config in $mak_wilds; do
1288447e133fSAlex Bennée    target="$(basename "$config" .mak)"
128998db9a06SAlex Bennée    if echo "$target_list_exclude" | grep -vq "$target"; then
1290447e133fSAlex Bennée        default_target_list="${default_target_list} $target"
1291447e133fSAlex Bennée    fi
1292447e133fSAlex Bennéedone
12936e92f823SPeter Maydell
1294af5db58eSpbrookif test x"$show_help" = x"yes" ; then
1295af5db58eSpbrookcat << EOF
1296af5db58eSpbrook
1297af5db58eSpbrookUsage: configure [options]
1298af5db58eSpbrookOptions: [defaults in brackets after descriptions]
1299af5db58eSpbrook
130008fb77edSStefan WeilStandard options:
130108fb77edSStefan Weil  --help                   print this message
130208fb77edSStefan Weil  --prefix=PREFIX          install in PREFIX [$prefix]
130308fb77edSStefan Weil  --interp-prefix=PREFIX   where to find shared libraries, etc.
130408fb77edSStefan Weil                           use %M for cpu name [$interp_prefix]
130574154d7eSThomas Huth  --target-list=LIST       set target list (default: build all)
130608fb77edSStefan Weil$(echo Available targets: $default_target_list | \
130708fb77edSStefan Weil  fold -s -w 53 | sed -e 's/^/                           /')
1308447e133fSAlex Bennée  --target-list-exclude=LIST exclude a set of targets from the default target-list
130908fb77edSStefan Weil
131008fb77edSStefan WeilAdvanced options (experts only):
13113812c0c4SJoelle van Dyne  --cross-prefix=PREFIX    use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
131208fb77edSStefan Weil  --cc=CC                  use C compiler CC [$cc]
131308fb77edSStefan Weil  --iasl=IASL              use ACPI compiler IASL [$iasl]
131408fb77edSStefan Weil  --host-cc=CC             use C compiler CC [$host_cc] for code run at
131508fb77edSStefan Weil                           build time
131608fb77edSStefan Weil  --cxx=CXX                use C++ compiler CXX [$cxx]
131708fb77edSStefan Weil  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1318a2866660SPaolo Bonzini  --extra-cflags=CFLAGS    append extra C compiler flags CFLAGS
1319a2866660SPaolo Bonzini  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags CXXFLAGS
132008fb77edSStefan Weil  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1321d75402b5SAlex Bennée  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1322479ca4ccSMatheus Ferst  --cross-cc-cflags-ARCH=  use compiler flags when building ARCH guest tests
132308fb77edSStefan Weil  --make=MAKE              use specified make [$make]
132408fb77edSStefan Weil  --python=PYTHON          use specified python [$python]
13252eb054c2SPeter Maydell  --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1326a5665051SPaolo Bonzini  --meson=MESON            use specified meson [$meson]
132748328880SPaolo Bonzini  --ninja=NINJA            use specified ninja [$ninja]
132808fb77edSStefan Weil  --smbd=SMBD              use specified smbd [$smbd]
1329db1b5f13SThomas Huth  --with-git=GIT           use specified git [$git]
13307d7dbf9dSDan Streetman  --with-git-submodules=update   update git submodules (default if .git dir exists)
13317d7dbf9dSDan Streetman  --with-git-submodules=validate fail if git submodules are not up to date
13327d7dbf9dSDan Streetman  --with-git-submodules=ignore   do not update or check git submodules (default if no .git dir)
133308fb77edSStefan Weil  --static                 enable static build [$static]
133408fb77edSStefan Weil  --mandir=PATH            install man pages in PATH
133510ff82d1SMarc-André Lureau  --datadir=PATH           install firmware in PATH/$qemu_suffix
1336fe0038beSPaolo Bonzini  --localedir=PATH         install translation in PATH/$qemu_suffix
133710ff82d1SMarc-André Lureau  --docdir=PATH            install documentation in PATH/$qemu_suffix
133808fb77edSStefan Weil  --bindir=PATH            install binaries in PATH
133908fb77edSStefan Weil  --libdir=PATH            install libraries in PATH
1340db1b5f13SThomas Huth  --libexecdir=PATH        install helper binaries in PATH
134110ff82d1SMarc-André Lureau  --sysconfdir=PATH        install config in PATH/$qemu_suffix
134208fb77edSStefan Weil  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
13433d5eecabSGerd Hoffmann  --firmwarepath=PATH      search PATH for firmware files
134413336606SRobert Foley  --efi-aarch64=PATH       PATH of efi file to use for aarch64 VMs.
1345ca8c0909SMarc-André Lureau  --with-suffix=SUFFIX     suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1346db1b5f13SThomas Huth  --with-pkgversion=VERS   use specified string as sub-version of the package
1347c035c8d6SPaolo Bonzini  --without-default-features default all --enable-* options to "disabled"
1348c035c8d6SPaolo Bonzini  --without-default-devices  do not include any device that is not needed to
1349c035c8d6SPaolo Bonzini                           start the emulator (only use if you are including
1350d1d5e9eeSAlex Bennée                           desired devices in configs/devices/)
1351d1d5e9eeSAlex Bennée  --with-devices-ARCH=NAME override default configs/devices
135208fb77edSStefan Weil  --enable-debug           enable common debug build options
1353247724cbSMarc-André Lureau  --enable-sanitizers      enable default sanitizers
13540aebab04SLingfeng Yang  --enable-tsan            enable thread sanitizer
135508fb77edSStefan Weil  --disable-werror         disable compilation abort on warning
135663678e17SSteven Noonan  --disable-stack-protector disable compiler-provided stack protection
135716bfbc70SPaolo Bonzini  --audio-drv-list=LIST    set audio drivers to try if -audiodev is not used
135808fb77edSStefan Weil  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
135908fb77edSStefan Weil  --block-drv-rw-whitelist=L
136008fb77edSStefan Weil                           set block driver read-write whitelist
1361e5f05f8cSKevin Wolf                           (by default affects only QEMU, not tools like qemu-img)
136208fb77edSStefan Weil  --block-drv-ro-whitelist=L
136308fb77edSStefan Weil                           set block driver read-only whitelist
1364e5f05f8cSKevin Wolf                           (by default affects only QEMU, not tools like qemu-img)
1365e5f05f8cSKevin Wolf  --enable-block-drv-whitelist-in-tools
1366e5f05f8cSKevin Wolf                           use block whitelist also in tools instead of only QEMU
136708fb77edSStefan Weil  --with-trace-file=NAME   Full PATH,NAME of file to store traces
136808fb77edSStefan Weil                           Default:trace-<pid>
1369c23f23b9SMichael Tokarev  --cpu=CPU                Build for host CPU [$cpu]
137008fb77edSStefan Weil  --with-coroutine=BACKEND coroutine backend. Supported options:
137133c53c54SDaniel P. Berrange                           ucontext, sigaltstack, windows
137208fb77edSStefan Weil  --enable-gcov            enable test coverage analysis with gcov
1373c23f23b9SMichael Tokarev  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1374c23f23b9SMichael Tokarev  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1375a1c5e949SDaniel P. Berrange  --tls-priority           default TLS protocol/cipher priority string
1376c12d66aaSLin Ma  --enable-gprof           QEMU profiling with gprof
1377c12d66aaSLin Ma  --enable-profiler        profiler support
1378c12d66aaSLin Ma  --enable-debug-stack-usage
1379c12d66aaSLin Ma                           track the maximum stack usage of stacks created by qemu_alloc_stack
138040e8c6f4SAlex Bennée  --enable-plugins
138140e8c6f4SAlex Bennée                           enable plugins via shared library loading
1382afc3a8f9SAlex Bennée  --disable-containers     don't use containers for cross-building
1383f48e590aSAlex Bennée  --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
138461d63097SPaolo BonziniEOF
138561d63097SPaolo Bonzini  meson_options_help
138661d63097SPaolo Bonzinicat << EOF
1387c23f23b9SMichael Tokarev  system          all system emulation targets
1388c23f23b9SMichael Tokarev  user            supported user emulation targets
1389c23f23b9SMichael Tokarev  linux-user      all linux usermode emulation targets
1390c23f23b9SMichael Tokarev  bsd-user        all BSD usermode emulation targets
1391c23f23b9SMichael Tokarev  guest-agent     build the QEMU Guest Agent
1392c23f23b9SMichael Tokarev  pie             Position Independent Executables
139321e709aaSMarc-André Lureau  modules         modules support (non-Windows)
1394bd83c861SChristian Ehrhardt  module-upgrades try to load modules from alternate paths for upgrades
1395c23f23b9SMichael Tokarev  debug-tcg       TCG debugging (default is disabled)
1396c23f23b9SMichael Tokarev  debug-info      debugging information
1397cdad781dSDaniele Buono  lto             Enable Link-Time Optimization.
13981e4f6065SDaniele Buono  safe-stack      SafeStack Stack Smash Protection. Depends on
13991e4f6065SDaniele Buono                  clang/llvm >= 3.7 and requires coroutine backend ucontext.
1400a40161cbSPaolo Bonzini  membarrier      membarrier system call (for Linux 4.14+ or Windows)
140121ab34c9SMarcel Apfelbaum  rdma            Enable RDMA-based migration
140221ab34c9SMarcel Apfelbaum  pvrdma          Enable PVRDMA support
1403299e6f19SPaolo Bonzini  vhost-net       vhost-net kernel acceleration support
1404299e6f19SPaolo Bonzini  vhost-vsock     virtio sockets device support
1405299e6f19SPaolo Bonzini  vhost-scsi      vhost-scsi kernel target support
1406299e6f19SPaolo Bonzini  vhost-crypto    vhost-user-crypto backend support
1407299e6f19SPaolo Bonzini  vhost-kernel    vhost kernel backend support
1408299e6f19SPaolo Bonzini  vhost-user      vhost-user backend support
1409108a6481SCindy Lu  vhost-vdpa      vhost-vdpa kernel backend support
1410ed1701c6SDr. David Alan Gilbert  live-block-migration   Block migration in the main migration stream
1411c23f23b9SMichael Tokarev  coroutine-pool  coroutine freelist (better performance)
1412c23f23b9SMichael Tokarev  tpm             TPM support
1413c23f23b9SMichael Tokarev  numa            libnuma support
141486583a07SLiam Merwick  avx2            AVX2 optimization support
14156b8cd447SRobert Hoo  avx512f         AVX512F optimization support
1416a6b1d4c0SChanglong Xie  replication     replication support
1417c12d66aaSLin Ma  opengl          opengl support
1418c12d66aaSLin Ma  qom-cast-debug  cast debugging support
14198de73fa8SCleber Rosa  tools           build qemu-io, qemu-nbd and qemu-img tools
14202f740136SJeff Cody  bochs           bochs image format support
14212f740136SJeff Cody  cloop           cloop image format support
14222f740136SJeff Cody  dmg             dmg image format support
14232f740136SJeff Cody  qcow1           qcow v1 image format support
14242f740136SJeff Cody  vdi             vdi image format support
14252f740136SJeff Cody  vvfat           vvfat image format support
14262f740136SJeff Cody  qed             qed image format support
14272f740136SJeff Cody  parallels       parallels image format support
1428f0d92b56SLongpeng(Mike)  crypto-afalg    Linux AF_ALG crypto backend driver
1429ba59fb77SPaolo Bonzini  debug-mutex     mutex debugging support
1430b767d257SMarek Marczykowski-Górecki  rng-none        dummy RNG, avoid using /dev/(u)random and getrandom()
143120cf7b8eSDenis Plotnikov  gio             libgio support
1432b8e0c493SJoelle van Dyne  slirp-smbd      use smbd (at path --smbd=*) in slirp networking
143308fb77edSStefan Weil
143408fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched
1435af5db58eSpbrookEOF
14362d2ad6d0SFam Zhengexit 0
1437af5db58eSpbrookfi
1438af5db58eSpbrook
14399c790242SThomas Huth# Remove old dependency files to make sure that they get properly regenerated
1440bb768f71SThomas Huthrm -f */config-devices.mak.d
14419c790242SThomas Huth
1442faf44142SDaniel P. Berrangéif test -z "$python"
1443faf44142SDaniel P. Berrangéthen
1444c53eeaf7SStefan Hajnoczi    error_exit "Python not found. Use --python=/path/to/python"
1445c53eeaf7SStefan Hajnoczifi
14468e2c76bdSRoman Bolshakovif ! has "$make"
14478e2c76bdSRoman Bolshakovthen
14488e2c76bdSRoman Bolshakov    error_exit "GNU make ($make) not found"
14498e2c76bdSRoman Bolshakovfi
1450c53eeaf7SStefan Hajnoczi
1451c53eeaf7SStefan Hajnoczi# Note that if the Python conditional here evaluates True we will exit
1452c53eeaf7SStefan Hajnoczi# with status 1 which is a shell 'false' value.
14531b11f28dSThomas Huthif ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
14541b11f28dSThomas Huth  error_exit "Cannot use '$python', Python >= 3.6 is required." \
1455c53eeaf7SStefan Hajnoczi      "Use --python=/path/to/python to specify a supported Python."
1456c53eeaf7SStefan Hajnoczifi
1457c53eeaf7SStefan Hajnoczi
1458755ee70fSCleber Rosa# Preserve python version since some functionality is dependent on it
1459406ab2f3SCleber 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)
1460755ee70fSCleber Rosa
1461c53eeaf7SStefan Hajnoczi# Suppress writing compiled files
1462c53eeaf7SStefan Hajnoczipython="$python -B"
1463c53eeaf7SStefan Hajnoczi
14640a01d76fSMarc-André Lureauif test -z "$meson"; then
14656638cae5SPaolo Bonzini    if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.59.3; then
14660a01d76fSMarc-André Lureau        meson=meson
14677d7dbf9dSDan Streetman    elif test $git_submodules_action != 'ignore' ; then
14680a01d76fSMarc-André Lureau        meson=git
14690a01d76fSMarc-André Lureau    elif test -e "${source_path}/meson/meson.py" ; then
14700a01d76fSMarc-André Lureau        meson=internal
14710a01d76fSMarc-André Lureau    else
14720a01d76fSMarc-André Lureau        if test "$explicit_python" = yes; then
14730a01d76fSMarc-André Lureau            error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
14740a01d76fSMarc-André Lureau        else
1475a5665051SPaolo Bonzini            error_exit "Meson not found.  Use --meson=/path/to/meson"
1476a5665051SPaolo Bonzini        fi
14770a01d76fSMarc-André Lureau    fi
14780a01d76fSMarc-André Lureauelse
14790a01d76fSMarc-André Lureau    # Meson uses its own Python interpreter to invoke other Python scripts,
14800a01d76fSMarc-André Lureau    # but the user wants to use the one they specified with --python.
14810a01d76fSMarc-André Lureau    #
14820a01d76fSMarc-André Lureau    # We do not want to override the distro Python interpreter (and sometimes
14830a01d76fSMarc-André Lureau    # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
14840a01d76fSMarc-André Lureau    # just require --meson=git|internal together with --python.
14850a01d76fSMarc-André Lureau    if test "$explicit_python" = yes; then
14860a01d76fSMarc-André Lureau        case "$meson" in
14870a01d76fSMarc-André Lureau            git | internal) ;;
14880a01d76fSMarc-André Lureau            *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
14890a01d76fSMarc-André Lureau        esac
14900a01d76fSMarc-André Lureau    fi
14910a01d76fSMarc-André Lureaufi
1492a5665051SPaolo Bonzini
14930a01d76fSMarc-André Lureauif test "$meson" = git; then
14940a01d76fSMarc-André Lureau    git_submodules="${git_submodules} meson"
14950a01d76fSMarc-André Lureaufi
14960a01d76fSMarc-André Lureau
14970a01d76fSMarc-André Lureaucase "$meson" in
14980a01d76fSMarc-André Lureau    git | internal)
14990a01d76fSMarc-André Lureau        meson="$python ${source_path}/meson/meson.py"
15000a01d76fSMarc-André Lureau        ;;
150184ec0c24SPaolo Bonzini    *) meson=$(command -v "$meson") ;;
15020a01d76fSMarc-André Lureauesac
15030a01d76fSMarc-André Lureau
150409e93326SPaolo Bonzini# Probe for ninja
150548328880SPaolo Bonzini
150648328880SPaolo Bonziniif test -z "$ninja"; then
150748328880SPaolo Bonzini    for c in ninja ninja-build samu; do
150848328880SPaolo Bonzini        if has $c; then
150948328880SPaolo Bonzini            ninja=$(command -v "$c")
151048328880SPaolo Bonzini            break
151148328880SPaolo Bonzini        fi
151248328880SPaolo Bonzini    done
151309e93326SPaolo Bonzini    if test -z "$ninja"; then
151409e93326SPaolo Bonzini      error_exit "Cannot find Ninja"
151509e93326SPaolo Bonzini    fi
151648328880SPaolo Bonzinifi
1517a5665051SPaolo Bonzini
15189aae6e54SDaniel Henrique Barboza# Check that the C compiler works. Doing this here before testing
15199aae6e54SDaniel Henrique Barboza# the host CPU ensures that we had a valid CC to autodetect the
15209aae6e54SDaniel Henrique Barboza# $cpu var (and we should bail right here if that's not the case).
15219aae6e54SDaniel Henrique Barboza# It also allows the help message to be printed without a CC.
15229aae6e54SDaniel Henrique Barbozawrite_c_skeleton;
15239aae6e54SDaniel Henrique Barbozaif compile_object ; then
15249aae6e54SDaniel Henrique Barboza  : C compiler works ok
15259aae6e54SDaniel Henrique Barbozaelse
15269aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" either does not exist or does not work"
15279aae6e54SDaniel Henrique Barbozafi
15289aae6e54SDaniel Henrique Barbozaif ! compile_prog ; then
15299aae6e54SDaniel Henrique Barboza    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
15309aae6e54SDaniel Henrique Barbozafi
15319aae6e54SDaniel Henrique Barboza
15329c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror
15339c83ffd8SPeter Maydell# by default.  Only enable by default for git builds
15349c83ffd8SPeter Maydellif test -z "$werror" ; then
15357d7dbf9dSDan Streetman    if test "$git_submodules_action" != "ignore" && \
1536e633a5c6SEric Blake        { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
15379c83ffd8SPeter Maydell        werror="yes"
15389c83ffd8SPeter Maydell    else
15399c83ffd8SPeter Maydell        werror="no"
15409c83ffd8SPeter Maydell    fi
15419c83ffd8SPeter Maydellfi
15429c83ffd8SPeter Maydell
1543975ff037SPaolo Bonziniif test "$targetos" = "bogus"; then
1544fb59dabdSPeter Maydell    # Now that we know that we're not printing the help and that
1545fb59dabdSPeter Maydell    # the compiler works (so the results of the check_defines we used
1546fb59dabdSPeter Maydell    # to identify the OS are reliable), if we didn't recognize the
1547fb59dabdSPeter Maydell    # host OS we should stop now.
1548951fedfcSPeter Maydell    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1549fb59dabdSPeter Maydellfi
1550fb59dabdSPeter Maydell
1551efc6c070SThomas Huth# Check whether the compiler matches our minimum requirements:
1552efc6c070SThomas Huthcat > $TMPC << EOF
1553efc6c070SThomas Huth#if defined(__clang_major__) && defined(__clang_minor__)
1554efc6c070SThomas Huth# ifdef __apple_build_version__
15552a85a08cSDaniel P. Berrangé#  if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
15562a85a08cSDaniel P. Berrangé#   error You need at least XCode Clang v10.0 to compile QEMU
1557efc6c070SThomas Huth#  endif
1558efc6c070SThomas Huth# else
15592a85a08cSDaniel P. Berrangé#  if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0)
15602a85a08cSDaniel P. Berrangé#   error You need at least Clang v6.0 to compile QEMU
1561efc6c070SThomas Huth#  endif
1562efc6c070SThomas Huth# endif
1563efc6c070SThomas Huth#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
15643830df5fSnia# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4)
15653830df5fSnia#  error You need at least GCC v7.4.0 to compile QEMU
1566efc6c070SThomas Huth# endif
1567efc6c070SThomas Huth#else
1568efc6c070SThomas Huth# error You either need GCC or Clang to compiler QEMU
1569efc6c070SThomas Huth#endif
1570efc6c070SThomas Huthint main (void) { return 0; }
1571efc6c070SThomas HuthEOF
1572efc6c070SThomas Huthif ! compile_prog "" "" ; then
15733830df5fSnia    error_exit "You need at least GCC v7.4 or Clang v6.0 (or XCode Clang v10.0)"
1574efc6c070SThomas Huthfi
1575efc6c070SThomas Huth
157600849b92SRichard Henderson# Accumulate -Wfoo and -Wno-bar separately.
157700849b92SRichard Henderson# We will list all of the enable flags first, and the disable flags second.
157800849b92SRichard Henderson# Note that we do not add -Werror, because that would enable it for all
157900849b92SRichard Henderson# configure tests. If a configure test failed due to -Werror this would
158000849b92SRichard Henderson# just silently disable some features, so it's too error prone.
158100849b92SRichard Henderson
158200849b92SRichard Hendersonwarn_flags=
158300849b92SRichard Hendersonadd_to warn_flags -Wold-style-declaration
158400849b92SRichard Hendersonadd_to warn_flags -Wold-style-definition
158500849b92SRichard Hendersonadd_to warn_flags -Wtype-limits
158600849b92SRichard Hendersonadd_to warn_flags -Wformat-security
158700849b92SRichard Hendersonadd_to warn_flags -Wformat-y2k
158800849b92SRichard Hendersonadd_to warn_flags -Winit-self
158900849b92SRichard Hendersonadd_to warn_flags -Wignored-qualifiers
159000849b92SRichard Hendersonadd_to warn_flags -Wempty-body
159100849b92SRichard Hendersonadd_to warn_flags -Wnested-externs
159200849b92SRichard Hendersonadd_to warn_flags -Wendif-labels
159300849b92SRichard Hendersonadd_to warn_flags -Wexpansion-to-defined
15940a2ebce9SThomas Huthadd_to warn_flags -Wimplicit-fallthrough=2
159500849b92SRichard Henderson
159600849b92SRichard Hendersonnowarn_flags=
159700849b92SRichard Hendersonadd_to nowarn_flags -Wno-initializer-overrides
159800849b92SRichard Hendersonadd_to nowarn_flags -Wno-missing-include-dirs
159900849b92SRichard Hendersonadd_to nowarn_flags -Wno-shift-negative-value
160000849b92SRichard Hendersonadd_to nowarn_flags -Wno-string-plus-int
160100849b92SRichard Hendersonadd_to nowarn_flags -Wno-typedef-redefinition
1602aabab967SRichard Hendersonadd_to nowarn_flags -Wno-tautological-type-limit-compare
1603bac8d222SRichard Hendersonadd_to nowarn_flags -Wno-psabi
160400849b92SRichard Henderson
160500849b92SRichard Hendersongcc_flags="$warn_flags $nowarn_flags"
160693b25869SJohn Snow
160793b25869SJohn Snowcc_has_warning_flag() {
160893b25869SJohn Snow    write_c_skeleton;
160993b25869SJohn Snow
1610a1d29d6cSPeter Maydell    # Use the positive sense of the flag when testing for -Wno-wombat
1611a1d29d6cSPeter Maydell    # support (gcc will happily accept the -Wno- form of unknown
1612a1d29d6cSPeter Maydell    # warning options).
161393b25869SJohn Snow    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
161493b25869SJohn Snow    compile_prog "-Werror $optflag" ""
161593b25869SJohn Snow}
161693b25869SJohn Snow
161793b25869SJohn Snowfor flag in $gcc_flags; do
161893b25869SJohn Snow    if cc_has_warning_flag $flag ; then
16198d05095cSPaolo Bonzini        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
16208d05095cSPaolo Bonzini    fi
16218d05095cSPaolo Bonzinidone
16228d05095cSPaolo Bonzini
162363678e17SSteven Noonanif test "$stack_protector" != "no"; then
1624fccd35a0SRodrigo Rebello  cat > $TMPC << EOF
1625fccd35a0SRodrigo Rebelloint main(int argc, char *argv[])
1626fccd35a0SRodrigo Rebello{
1627fccd35a0SRodrigo Rebello    char arr[64], *p = arr, *c = argv[0];
1628fccd35a0SRodrigo Rebello    while (*c) {
1629fccd35a0SRodrigo Rebello        *p++ = *c++;
1630fccd35a0SRodrigo Rebello    }
1631fccd35a0SRodrigo Rebello    return 0;
1632fccd35a0SRodrigo Rebello}
1633fccd35a0SRodrigo RebelloEOF
163463678e17SSteven Noonan  gcc_flags="-fstack-protector-strong -fstack-protector-all"
16353b463a3fSMiroslav Rezanina  sp_on=0
163663678e17SSteven Noonan  for flag in $gcc_flags; do
1637590e5dd9SPeter Maydell    # We need to check both a compile and a link, since some compiler
1638590e5dd9SPeter Maydell    # setups fail only on a .c->.o compile and some only at link time
1639086d5f75SPaolo Bonzini    if compile_object "-Werror $flag" &&
1640590e5dd9SPeter Maydell       compile_prog "-Werror $flag" ""; then
164163678e17SSteven Noonan      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1642db5adeaaSPaolo Bonzini      QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
16433b463a3fSMiroslav Rezanina      sp_on=1
164463678e17SSteven Noonan      break
164563678e17SSteven Noonan    fi
164663678e17SSteven Noonan  done
16473b463a3fSMiroslav Rezanina  if test "$stack_protector" = yes; then
16483b463a3fSMiroslav Rezanina    if test $sp_on = 0; then
16493b463a3fSMiroslav Rezanina      error_exit "Stack protector not supported"
16503b463a3fSMiroslav Rezanina    fi
16513b463a3fSMiroslav Rezanina  fi
165237746c5eSMarc-André Lureaufi
165337746c5eSMarc-André Lureau
165420bc94a2SPaolo Bonzini# Disable -Wmissing-braces on older compilers that warn even for
165520bc94a2SPaolo Bonzini# the "universal" C zero initializer {0}.
165620bc94a2SPaolo Bonzinicat > $TMPC << EOF
165720bc94a2SPaolo Bonzinistruct {
165820bc94a2SPaolo Bonzini  int a[2];
165920bc94a2SPaolo Bonzini} x = {0};
166020bc94a2SPaolo BonziniEOF
166120bc94a2SPaolo Bonziniif compile_object "-Werror" "" ; then
166220bc94a2SPaolo Bonzini  :
166320bc94a2SPaolo Bonzinielse
166420bc94a2SPaolo Bonzini  QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
166520bc94a2SPaolo Bonzinifi
166620bc94a2SPaolo Bonzini
166721e709aaSMarc-André Lureau# Our module code doesn't support Windows
166821e709aaSMarc-André Lureauif test "$modules" = "yes" && test "$mingw32" = "yes" ; then
166921e709aaSMarc-André Lureau  error_exit "Modules are not available for Windows"
167021e709aaSMarc-André Lureaufi
167121e709aaSMarc-André Lureau
1672bd83c861SChristian Ehrhardt# module_upgrades is only reasonable if modules are enabled
1673bd83c861SChristian Ehrhardtif test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
1674bd83c861SChristian Ehrhardt  error_exit "Can't enable module-upgrades as Modules are not enabled"
1675bd83c861SChristian Ehrhardtfi
1676bd83c861SChristian Ehrhardt
16775f2453acSAlex Bennée# Static linking is not possible with plugins, modules or PIE
167840d6444eSAvi Kivityif test "$static" = "yes" ; then
1679aa0d1f44SPaolo Bonzini  if test "$modules" = "yes" ; then
1680aa0d1f44SPaolo Bonzini    error_exit "static and modules are mutually incompatible"
1681aa0d1f44SPaolo Bonzini  fi
16825f2453acSAlex Bennée  if test "$plugins" = "yes"; then
16835f2453acSAlex Bennée    error_exit "static and plugins are mutually incompatible"
1684ba4dd2aaSAlex Bennée  else
1685ba4dd2aaSAlex Bennée    plugins="no"
16865f2453acSAlex Bennée  fi
168740d6444eSAvi Kivityfi
168837650689SPaolo Bonzinitest "$plugins" = "" && plugins=yes
168940d6444eSAvi Kivity
169040d6444eSAvi Kivitycat > $TMPC << EOF
169121d4a791SAvi Kivity
169221d4a791SAvi Kivity#ifdef __linux__
169321d4a791SAvi Kivity#  define THREAD __thread
169421d4a791SAvi Kivity#else
169521d4a791SAvi Kivity#  define THREAD
169621d4a791SAvi Kivity#endif
169721d4a791SAvi Kivitystatic THREAD int tls_var;
169821d4a791SAvi Kivityint main(void) { return tls_var; }
169940d6444eSAvi KivityEOF
1700b2634124SRichard Henderson
1701ffd205efSJessica Clarke# Check we support -fno-pie and -no-pie first; we will need the former for
1702ffd205efSJessica Clarke# building ROMs, and both for everything if --disable-pie is passed.
1703412aeacdSAlex Bennéeif compile_prog "-Werror -fno-pie" "-no-pie"; then
1704412aeacdSAlex Bennée  CFLAGS_NOPIE="-fno-pie"
1705ffd205efSJessica Clarke  LDFLAGS_NOPIE="-no-pie"
1706412aeacdSAlex Bennéefi
1707412aeacdSAlex Bennée
170812781462SRichard Hendersonif test "$static" = "yes"; then
1709eca7a8e6SRichard Henderson  if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
17105770e8afSPaolo Bonzini    CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
171112781462SRichard Henderson    QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
171212781462SRichard Henderson    pie="yes"
171312781462SRichard Henderson  elif test "$pie" = "yes"; then
171412781462SRichard Henderson    error_exit "-static-pie not available due to missing toolchain support"
171512781462SRichard Henderson  else
171612781462SRichard Henderson    QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
171712781462SRichard Henderson    pie="no"
171812781462SRichard Henderson  fi
171912781462SRichard Hendersonelif test "$pie" = "no"; then
17205770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
1721ffd205efSJessica Clarke  CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS"
1722eca7a8e6SRichard Hendersonelif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
17235770e8afSPaolo Bonzini  CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
17245770e8afSPaolo Bonzini  CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
172540d6444eSAvi Kivity  pie="yes"
17262c674109SRichard Hendersonelif test "$pie" = "yes"; then
172776ad07a4SPeter Maydell  error_exit "PIE not available due to missing toolchain support"
172840d6444eSAvi Kivityelse
172940d6444eSAvi Kivity  echo "Disabling PIE due to missing toolchain support"
173040d6444eSAvi Kivity  pie="no"
173140d6444eSAvi Kivityfi
173240d6444eSAvi Kivity
1733e6cbd751SRichard Henderson# Detect support for PT_GNU_RELRO + DT_BIND_NOW.
1734e6cbd751SRichard Henderson# The combination is known as "full relro", because .got.plt is read-only too.
1735e6cbd751SRichard Hendersonif compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1736e6cbd751SRichard Henderson  QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
1737e6cbd751SRichard Hendersonfi
1738e6cbd751SRichard Henderson
173909dada40SPaolo Bonzini##########################################
174009dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains
174109dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit
174209dada40SPaolo Bonzini# specification is necessary
174309dada40SPaolo Bonzini
174409dada40SPaolo Bonziniif test "$cpu" = "i386"; then
174509dada40SPaolo Bonzini  cat > $TMPC << EOF
174609dada40SPaolo Bonzinistatic int sfaa(int *ptr)
174709dada40SPaolo Bonzini{
174809dada40SPaolo Bonzini  return __sync_fetch_and_and(ptr, 0);
174909dada40SPaolo Bonzini}
175009dada40SPaolo Bonzini
175109dada40SPaolo Bonziniint main(void)
175209dada40SPaolo Bonzini{
175309dada40SPaolo Bonzini  int val = 42;
17541405b629SStefan Weil  val = __sync_val_compare_and_swap(&val, 0, 1);
175509dada40SPaolo Bonzini  sfaa(&val);
175609dada40SPaolo Bonzini  return val;
175709dada40SPaolo Bonzini}
175809dada40SPaolo BonziniEOF
175909dada40SPaolo Bonzini  if ! compile_prog "" "" ; then
176009dada40SPaolo Bonzini    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
176109dada40SPaolo Bonzini  fi
176209dada40SPaolo Bonzinifi
176309dada40SPaolo Bonzini
176456267b62SPhilippe Mathieu-Daudéif test "$tcg" = "enabled"; then
176556267b62SPhilippe Mathieu-Daudé    git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
176656267b62SPhilippe Mathieu-Daudé    git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
176756267b62SPhilippe Mathieu-Daudéfi
176856267b62SPhilippe Mathieu-Daudé
1769afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then
1770fdb75aefSPaolo Bonzini    default_targets=yes
1771d880a3baSPaolo Bonzini    for target in $default_target_list; do
1772d880a3baSPaolo Bonzini        target_list="$target_list $target"
1773d880a3baSPaolo Bonzini    done
1774d880a3baSPaolo Bonzini    target_list="${target_list# }"
1775121afa9eSAnthony Liguorielse
1776fdb75aefSPaolo Bonzini    default_targets=no
177789138857SStefan Weil    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1778d880a3baSPaolo Bonzini    for target in $target_list; do
177925b48338SPeter Maydell        # Check that we recognised the target name; this allows a more
178025b48338SPeter Maydell        # friendly error message than if we let it fall through.
178125b48338SPeter Maydell        case " $default_target_list " in
178225b48338SPeter Maydell            *" $target "*)
178325b48338SPeter Maydell                ;;
178425b48338SPeter Maydell            *)
178525b48338SPeter Maydell                error_exit "Unknown target name '$target'"
178625b48338SPeter Maydell                ;;
178725b48338SPeter Maydell        esac
178825b48338SPeter Maydell    done
1789d880a3baSPaolo Bonzinifi
179025b48338SPeter Maydell
1791f55fe278SPaolo Bonzini# see if system emulation was really requested
1792f55fe278SPaolo Bonzinicase " $target_list " in
1793f55fe278SPaolo Bonzini  *"-softmmu "*) softmmu=yes
1794f55fe278SPaolo Bonzini  ;;
1795f55fe278SPaolo Bonzini  *) softmmu=no
1796f55fe278SPaolo Bonzini  ;;
1797f55fe278SPaolo Bonziniesac
17985327cf48Sbellard
1799249247c9SJuan Quintelafeature_not_found() {
1800249247c9SJuan Quintela  feature=$1
180121684af0SStewart Smith  remedy=$2
1802249247c9SJuan Quintela
180376ad07a4SPeter Maydell  error_exit "User requested feature $feature" \
180421684af0SStewart Smith      "configure was not able to find it." \
180521684af0SStewart Smith      "$remedy"
1806249247c9SJuan Quintela}
1807249247c9SJuan Quintela
18087d13299dSbellard# ---
18097d13299dSbellard# big/little endian test
18107d13299dSbellardcat > $TMPC << EOF
1811659eb157SThomas Huth#include <stdio.h>
181261cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
181361cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1814659eb157SThomas Huthint main(int argc, char *argv[])
1815659eb157SThomas Huth{
1816659eb157SThomas Huth    return printf("%s %s\n", (char *)big_endian, (char *)little_endian);
18177d13299dSbellard}
18187d13299dSbellardEOF
18197d13299dSbellard
1820659eb157SThomas Huthif compile_prog ; then
1821659eb157SThomas Huth    if strings -a $TMPE | grep -q BiGeNdIaN ; then
182261cc919fSMike Frysinger        bigendian="yes"
1823659eb157SThomas Huth    elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then
182461cc919fSMike Frysinger        bigendian="no"
18257d13299dSbellard    else
18267d13299dSbellard        echo big/little test failed
1827659eb157SThomas Huth        exit 1
18287d13299dSbellard    fi
18297d13299dSbellardelse
183061cc919fSMike Frysinger    echo big/little test failed
1831659eb157SThomas Huth    exit 1
18327d13299dSbellardfi
18337d13299dSbellard
1834b0a47e79SJuan Quintela##########################################
1835e10ee3f5SPhilippe Mathieu-Daudé# system tools
1836e10ee3f5SPhilippe Mathieu-Daudéif test -z "$want_tools"; then
1837e10ee3f5SPhilippe Mathieu-Daudé    if test "$softmmu" = "no"; then
1838e10ee3f5SPhilippe Mathieu-Daudé        want_tools=no
1839e10ee3f5SPhilippe Mathieu-Daudé    else
1840e10ee3f5SPhilippe Mathieu-Daudé        want_tools=yes
1841e10ee3f5SPhilippe Mathieu-Daudé    fi
1842e10ee3f5SPhilippe Mathieu-Daudéfi
1843e10ee3f5SPhilippe Mathieu-Daudé
1844299e6f19SPaolo Bonzini#########################################
1845299e6f19SPaolo Bonzini# vhost interdependencies and host support
1846299e6f19SPaolo Bonzini
1847299e6f19SPaolo Bonzini# vhost backends
1848d88618f7SStefan Hajnocziif test "$vhost_user" = "yes" && test "$linux" != "yes"; then
1849d88618f7SStefan Hajnoczi  error_exit "vhost-user is only available on Linux"
1850299e6f19SPaolo Bonzinifi
1851108a6481SCindy Lutest "$vhost_vdpa" = "" && vhost_vdpa=$linux
1852108a6481SCindy Luif test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
1853108a6481SCindy Lu  error_exit "vhost-vdpa is only available on Linux"
1854108a6481SCindy Lufi
1855299e6f19SPaolo Bonzinitest "$vhost_kernel" = "" && vhost_kernel=$linux
1856299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
1857299e6f19SPaolo Bonzini  error_exit "vhost-kernel is only available on Linux"
1858299e6f19SPaolo Bonzinifi
1859299e6f19SPaolo Bonzini
1860299e6f19SPaolo Bonzini# vhost-kernel devices
1861299e6f19SPaolo Bonzinitest "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
1862299e6f19SPaolo Bonziniif test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
1863299e6f19SPaolo Bonzini  error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
1864299e6f19SPaolo Bonzinifi
1865299e6f19SPaolo Bonzinitest "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
1866299e6f19SPaolo Bonziniif test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
1867299e6f19SPaolo Bonzini  error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
1868299e6f19SPaolo Bonzinifi
1869299e6f19SPaolo Bonzini
1870299e6f19SPaolo Bonzini# vhost-user backends
1871299e6f19SPaolo Bonzinitest "$vhost_net_user" = "" && vhost_net_user=$vhost_user
1872299e6f19SPaolo Bonziniif test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
1873299e6f19SPaolo Bonzini  error_exit "--enable-vhost-net-user requires --enable-vhost-user"
1874299e6f19SPaolo Bonzinifi
1875299e6f19SPaolo Bonzinitest "$vhost_crypto" = "" && vhost_crypto=$vhost_user
1876299e6f19SPaolo Bonziniif test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
1877299e6f19SPaolo Bonzini  error_exit "--enable-vhost-crypto requires --enable-vhost-user"
1878299e6f19SPaolo Bonzinifi
187998fc1adaSDr. David Alan Gilberttest "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
188098fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
188198fc1adaSDr. David Alan Gilbert  error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
188298fc1adaSDr. David Alan Gilbertfi
1883108a6481SCindy Lu#vhost-vdpa backends
1884108a6481SCindy Lutest "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
1885108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
1886108a6481SCindy Lu  error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
1887108a6481SCindy Lufi
1888299e6f19SPaolo Bonzini
188940bc0ca9SLaurent Vivier# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
1890299e6f19SPaolo Bonziniif test "$vhost_net" = ""; then
1891299e6f19SPaolo Bonzini  test "$vhost_net_user" = "yes" && vhost_net=yes
189240bc0ca9SLaurent Vivier  test "$vhost_net_vdpa" = "yes" && vhost_net=yes
1893299e6f19SPaolo Bonzini  test "$vhost_kernel" = "yes" && vhost_net=yes
1894299e6f19SPaolo Bonzinifi
1895299e6f19SPaolo Bonzini
1896015a33bdSGonglei##########################################
1897779ab5e3SStefan Weil# pkg-config probe
1898779ab5e3SStefan Weil
1899779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then
190076ad07a4SPeter Maydell  error_exit "pkg-config binary '$pkg_config_exe' not found"
1901779ab5e3SStefan Weilfi
1902779ab5e3SStefan Weil
1903779ab5e3SStefan Weil##########################################
1904e37630caSaliguori# xen probe
1905e37630caSaliguori
19061badb709SPaolo Bonziniif test "$xen" != "disabled" ; then
1907c1cdd9d5SJuergen Gross  # Check whether Xen library path is specified via --extra-ldflags to avoid
1908c1cdd9d5SJuergen Gross  # overriding this setting with pkg-config output. If not, try pkg-config
1909c1cdd9d5SJuergen Gross  # to obtain all needed flags.
1910c1cdd9d5SJuergen Gross
1911c1cdd9d5SJuergen Gross  if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
1912c1cdd9d5SJuergen Gross     $pkg_config --exists xencontrol ; then
1913c1cdd9d5SJuergen Gross    xen_ctrl_version="$(printf '%d%02d%02d' \
1914c1cdd9d5SJuergen Gross      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
19151badb709SPaolo Bonzini    xen=enabled
19165b6a8f43SMichael Tokarev    xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
1917c1cdd9d5SJuergen Gross    xen_pc="$xen_pc xenevtchn xendevicemodel"
191858ea9a7aSAnthony PERARD    if $pkg_config --exists xentoolcore; then
191958ea9a7aSAnthony PERARD      xen_pc="$xen_pc xentoolcore"
192058ea9a7aSAnthony PERARD    fi
1921582ea95fSMarc-André Lureau    xen_cflags="$($pkg_config --cflags $xen_pc)"
1922582ea95fSMarc-André Lureau    xen_libs="$($pkg_config --libs $xen_pc)"
1923c1cdd9d5SJuergen Gross  else
1924c1cdd9d5SJuergen Gross
19255b6a8f43SMichael Tokarev    xen_libs="-lxenstore -lxenctrl"
1926d9506cabSAnthony PERARD    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
1927d5b93ddfSAnthony PERARD
192850ced5b3SStefan Weil    # First we test whether Xen headers and libraries are available.
192950ced5b3SStefan Weil    # If no, we are done and there is no Xen support.
193050ced5b3SStefan Weil    # If yes, more tests are run to detect the Xen version.
193150ced5b3SStefan Weil
193250ced5b3SStefan Weil    # Xen (any)
193350ced5b3SStefan Weil    cat > $TMPC <<EOF
193450ced5b3SStefan Weil#include <xenctrl.h>
193550ced5b3SStefan Weilint main(void) {
193650ced5b3SStefan Weil  return 0;
193750ced5b3SStefan Weil}
193850ced5b3SStefan WeilEOF
193950ced5b3SStefan Weil    if ! compile_prog "" "$xen_libs" ; then
194050ced5b3SStefan Weil      # Xen not found
19411badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
194221684af0SStewart Smith        feature_not_found "xen" "Install xen devel"
194350ced5b3SStefan Weil      fi
19441badb709SPaolo Bonzini      xen=disabled
194550ced5b3SStefan Weil
1946d5b93ddfSAnthony PERARD    # Xen unstable
194769deef08SPeter Maydell    elif
194869deef08SPeter Maydell        cat > $TMPC <<EOF &&
19492cbf8903SRoss Lagerwall#undef XC_WANT_COMPAT_DEVICEMODEL_API
19502cbf8903SRoss Lagerwall#define __XEN_TOOLS__
19512cbf8903SRoss Lagerwall#include <xendevicemodel.h>
1952d3c49ebbSPaul Durrant#include <xenforeignmemory.h>
19532cbf8903SRoss Lagerwallint main(void) {
19542cbf8903SRoss Lagerwall  xendevicemodel_handle *xd;
1955d3c49ebbSPaul Durrant  xenforeignmemory_handle *xfmem;
19562cbf8903SRoss Lagerwall
19572cbf8903SRoss Lagerwall  xd = xendevicemodel_open(0, 0);
19582cbf8903SRoss Lagerwall  xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
19592cbf8903SRoss Lagerwall
1960d3c49ebbSPaul Durrant  xfmem = xenforeignmemory_open(0, 0);
1961d3c49ebbSPaul Durrant  xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
1962d3c49ebbSPaul Durrant
19632cbf8903SRoss Lagerwall  return 0;
19642cbf8903SRoss Lagerwall}
19652cbf8903SRoss LagerwallEOF
19662cbf8903SRoss Lagerwall        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
19672cbf8903SRoss Lagerwall      then
19682cbf8903SRoss Lagerwall      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
19692cbf8903SRoss Lagerwall      xen_ctrl_version=41100
19701badb709SPaolo Bonzini      xen=enabled
19712cbf8903SRoss Lagerwall    elif
19722cbf8903SRoss Lagerwall        cat > $TMPC <<EOF &&
19735ba3d756SIgor Druzhinin#undef XC_WANT_COMPAT_MAP_FOREIGN_API
19745ba3d756SIgor Druzhinin#include <xenforeignmemory.h>
197558ea9a7aSAnthony PERARD#include <xentoolcore.h>
19765ba3d756SIgor Druzhininint main(void) {
19775ba3d756SIgor Druzhinin  xenforeignmemory_handle *xfmem;
19785ba3d756SIgor Druzhinin
19795ba3d756SIgor Druzhinin  xfmem = xenforeignmemory_open(0, 0);
19805ba3d756SIgor Druzhinin  xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
198158ea9a7aSAnthony PERARD  xentoolcore_restrict_all(0);
19825ba3d756SIgor Druzhinin
19835ba3d756SIgor Druzhinin  return 0;
19845ba3d756SIgor Druzhinin}
19855ba3d756SIgor DruzhininEOF
198658ea9a7aSAnthony PERARD        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
19875ba3d756SIgor Druzhinin      then
198858ea9a7aSAnthony PERARD      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
19895ba3d756SIgor Druzhinin      xen_ctrl_version=41000
19901badb709SPaolo Bonzini      xen=enabled
19915ba3d756SIgor Druzhinin    elif
19925ba3d756SIgor Druzhinin        cat > $TMPC <<EOF &&
1993da8090ccSPaul Durrant#undef XC_WANT_COMPAT_DEVICEMODEL_API
1994da8090ccSPaul Durrant#define __XEN_TOOLS__
1995da8090ccSPaul Durrant#include <xendevicemodel.h>
1996da8090ccSPaul Durrantint main(void) {
1997da8090ccSPaul Durrant  xendevicemodel_handle *xd;
1998da8090ccSPaul Durrant
1999da8090ccSPaul Durrant  xd = xendevicemodel_open(0, 0);
2000da8090ccSPaul Durrant  xendevicemodel_close(xd);
2001da8090ccSPaul Durrant
2002da8090ccSPaul Durrant  return 0;
2003da8090ccSPaul Durrant}
2004da8090ccSPaul DurrantEOF
2005da8090ccSPaul Durrant        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2006da8090ccSPaul Durrant      then
2007da8090ccSPaul Durrant      xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2008f1167ee6SJuergen Gross      xen_ctrl_version=40900
20091badb709SPaolo Bonzini      xen=enabled
2010da8090ccSPaul Durrant    elif
2011da8090ccSPaul Durrant        cat > $TMPC <<EOF &&
20125eeb39c2SIan Campbell/*
20135eeb39c2SIan Campbell * If we have stable libs the we don't want the libxc compat
20145eeb39c2SIan Campbell * layers, regardless of what CFLAGS we may have been given.
2015b6eb9b45SPaulina Szubarczyk *
2016b6eb9b45SPaulina Szubarczyk * Also, check if xengnttab_grant_copy_segment_t is defined and
2017b6eb9b45SPaulina Szubarczyk * grant copy operation is implemented.
2018b6eb9b45SPaulina Szubarczyk */
2019b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_EVTCHN_API
2020b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_GNTTAB_API
2021b6eb9b45SPaulina Szubarczyk#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2022b6eb9b45SPaulina Szubarczyk#include <xenctrl.h>
2023b6eb9b45SPaulina Szubarczyk#include <xenstore.h>
2024b6eb9b45SPaulina Szubarczyk#include <xenevtchn.h>
2025b6eb9b45SPaulina Szubarczyk#include <xengnttab.h>
2026b6eb9b45SPaulina Szubarczyk#include <xenforeignmemory.h>
2027b6eb9b45SPaulina Szubarczyk#include <stdint.h>
2028b6eb9b45SPaulina Szubarczyk#include <xen/hvm/hvm_info_table.h>
2029b6eb9b45SPaulina Szubarczyk#if !defined(HVM_MAX_VCPUS)
2030b6eb9b45SPaulina Szubarczyk# error HVM_MAX_VCPUS not defined
2031b6eb9b45SPaulina Szubarczyk#endif
2032b6eb9b45SPaulina Szubarczykint main(void) {
2033b6eb9b45SPaulina Szubarczyk  xc_interface *xc = NULL;
2034b6eb9b45SPaulina Szubarczyk  xenforeignmemory_handle *xfmem;
2035b6eb9b45SPaulina Szubarczyk  xenevtchn_handle *xe;
2036b6eb9b45SPaulina Szubarczyk  xengnttab_handle *xg;
2037b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy_segment_t* seg = NULL;
2038b6eb9b45SPaulina Szubarczyk
2039b6eb9b45SPaulina Szubarczyk  xs_daemon_open();
2040b6eb9b45SPaulina Szubarczyk
2041b6eb9b45SPaulina Szubarczyk  xc = xc_interface_open(0, 0, 0);
2042b6eb9b45SPaulina Szubarczyk  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2043b6eb9b45SPaulina Szubarczyk  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2044b6eb9b45SPaulina Szubarczyk  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2045b6eb9b45SPaulina Szubarczyk  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2046b6eb9b45SPaulina Szubarczyk
2047b6eb9b45SPaulina Szubarczyk  xfmem = xenforeignmemory_open(0, 0);
2048b6eb9b45SPaulina Szubarczyk  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2049b6eb9b45SPaulina Szubarczyk
2050b6eb9b45SPaulina Szubarczyk  xe = xenevtchn_open(0, 0);
2051b6eb9b45SPaulina Szubarczyk  xenevtchn_fd(xe);
2052b6eb9b45SPaulina Szubarczyk
2053b6eb9b45SPaulina Szubarczyk  xg = xengnttab_open(0, 0);
2054b6eb9b45SPaulina Szubarczyk  xengnttab_grant_copy(xg, 0, seg);
2055b6eb9b45SPaulina Szubarczyk
2056b6eb9b45SPaulina Szubarczyk  return 0;
2057b6eb9b45SPaulina Szubarczyk}
2058b6eb9b45SPaulina SzubarczykEOF
2059b6eb9b45SPaulina Szubarczyk        compile_prog "" "$xen_libs $xen_stable_libs"
2060b6eb9b45SPaulina Szubarczyk      then
2061f1167ee6SJuergen Gross      xen_ctrl_version=40800
20621badb709SPaolo Bonzini      xen=enabled
2063b6eb9b45SPaulina Szubarczyk    elif
2064b6eb9b45SPaulina Szubarczyk        cat > $TMPC <<EOF &&
2065b6eb9b45SPaulina Szubarczyk/*
2066b6eb9b45SPaulina Szubarczyk * If we have stable libs the we don't want the libxc compat
2067b6eb9b45SPaulina Szubarczyk * layers, regardless of what CFLAGS we may have been given.
20685eeb39c2SIan Campbell */
20695eeb39c2SIan Campbell#undef XC_WANT_COMPAT_EVTCHN_API
20705eeb39c2SIan Campbell#undef XC_WANT_COMPAT_GNTTAB_API
20715eeb39c2SIan Campbell#undef XC_WANT_COMPAT_MAP_FOREIGN_API
20725eeb39c2SIan Campbell#include <xenctrl.h>
20735eeb39c2SIan Campbell#include <xenstore.h>
20745eeb39c2SIan Campbell#include <xenevtchn.h>
20755eeb39c2SIan Campbell#include <xengnttab.h>
20765eeb39c2SIan Campbell#include <xenforeignmemory.h>
20775eeb39c2SIan Campbell#include <stdint.h>
20785eeb39c2SIan Campbell#include <xen/hvm/hvm_info_table.h>
20795eeb39c2SIan Campbell#if !defined(HVM_MAX_VCPUS)
20805eeb39c2SIan Campbell# error HVM_MAX_VCPUS not defined
20815eeb39c2SIan Campbell#endif
20825eeb39c2SIan Campbellint main(void) {
20835eeb39c2SIan Campbell  xc_interface *xc = NULL;
20845eeb39c2SIan Campbell  xenforeignmemory_handle *xfmem;
20855eeb39c2SIan Campbell  xenevtchn_handle *xe;
20865eeb39c2SIan Campbell  xengnttab_handle *xg;
20875eeb39c2SIan Campbell
20885eeb39c2SIan Campbell  xs_daemon_open();
20895eeb39c2SIan Campbell
20905eeb39c2SIan Campbell  xc = xc_interface_open(0, 0, 0);
20915eeb39c2SIan Campbell  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
20925eeb39c2SIan Campbell  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
20935eeb39c2SIan Campbell  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
20945eeb39c2SIan Campbell  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
20955eeb39c2SIan Campbell
20965eeb39c2SIan Campbell  xfmem = xenforeignmemory_open(0, 0);
20975eeb39c2SIan Campbell  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
20985eeb39c2SIan Campbell
20995eeb39c2SIan Campbell  xe = xenevtchn_open(0, 0);
21005eeb39c2SIan Campbell  xenevtchn_fd(xe);
21015eeb39c2SIan Campbell
21025eeb39c2SIan Campbell  xg = xengnttab_open(0, 0);
21035eeb39c2SIan Campbell  xengnttab_map_grant_ref(xg, 0, 0, 0);
21045eeb39c2SIan Campbell
21055eeb39c2SIan Campbell  return 0;
21065eeb39c2SIan Campbell}
21075eeb39c2SIan CampbellEOF
21085eeb39c2SIan Campbell        compile_prog "" "$xen_libs $xen_stable_libs"
21095eeb39c2SIan Campbell      then
2110f1167ee6SJuergen Gross      xen_ctrl_version=40701
21111badb709SPaolo Bonzini      xen=enabled
2112cdadde39SRoger Pau Monne
2113cdadde39SRoger Pau Monne    # Xen 4.6
2114cdadde39SRoger Pau Monne    elif
2115cdadde39SRoger Pau Monne        cat > $TMPC <<EOF &&
2116cdadde39SRoger Pau Monne#include <xenctrl.h>
2117e108a3c1SAnthony PERARD#include <xenstore.h>
2118d5b93ddfSAnthony PERARD#include <stdint.h>
2119d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h>
2120d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS)
2121d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined
2122d5b93ddfSAnthony PERARD#endif
2123d5b93ddfSAnthony PERARDint main(void) {
2124d5b93ddfSAnthony PERARD  xc_interface *xc;
2125d5b93ddfSAnthony PERARD  xs_daemon_open();
2126d5b93ddfSAnthony PERARD  xc = xc_interface_open(0, 0, 0);
2127d5b93ddfSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2128d5b93ddfSAnthony PERARD  xc_gnttab_open(NULL, 0);
2129b87de24eSAnthony PERARD  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
21308688e065SStefano Stabellini  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2131d8b441a3SJan Beulich  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
213220a544c7SKonrad Rzeszutek Wilk  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2133d8b441a3SJan Beulich  return 0;
2134d8b441a3SJan Beulich}
2135d8b441a3SJan BeulichEOF
2136d8b441a3SJan Beulich        compile_prog "" "$xen_libs"
2137d8b441a3SJan Beulich      then
2138f1167ee6SJuergen Gross      xen_ctrl_version=40600
21391badb709SPaolo Bonzini      xen=enabled
2140d8b441a3SJan Beulich
2141d8b441a3SJan Beulich    # Xen 4.5
2142d8b441a3SJan Beulich    elif
2143d8b441a3SJan Beulich        cat > $TMPC <<EOF &&
2144d8b441a3SJan Beulich#include <xenctrl.h>
2145d8b441a3SJan Beulich#include <xenstore.h>
2146d8b441a3SJan Beulich#include <stdint.h>
2147d8b441a3SJan Beulich#include <xen/hvm/hvm_info_table.h>
2148d8b441a3SJan Beulich#if !defined(HVM_MAX_VCPUS)
2149d8b441a3SJan Beulich# error HVM_MAX_VCPUS not defined
2150d8b441a3SJan Beulich#endif
2151d8b441a3SJan Beulichint main(void) {
2152d8b441a3SJan Beulich  xc_interface *xc;
2153d8b441a3SJan Beulich  xs_daemon_open();
2154d8b441a3SJan Beulich  xc = xc_interface_open(0, 0, 0);
2155d8b441a3SJan Beulich  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2156d8b441a3SJan Beulich  xc_gnttab_open(NULL, 0);
2157d8b441a3SJan Beulich  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2158d8b441a3SJan Beulich  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
21593996e85cSPaul Durrant  xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
21603996e85cSPaul Durrant  return 0;
21613996e85cSPaul Durrant}
21623996e85cSPaul DurrantEOF
21633996e85cSPaul Durrant        compile_prog "" "$xen_libs"
21643996e85cSPaul Durrant      then
2165f1167ee6SJuergen Gross      xen_ctrl_version=40500
21661badb709SPaolo Bonzini      xen=enabled
21673996e85cSPaul Durrant
21683996e85cSPaul Durrant    elif
21693996e85cSPaul Durrant        cat > $TMPC <<EOF &&
21703996e85cSPaul Durrant#include <xenctrl.h>
21713996e85cSPaul Durrant#include <xenstore.h>
21723996e85cSPaul Durrant#include <stdint.h>
21733996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h>
21743996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS)
21753996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined
21763996e85cSPaul Durrant#endif
21773996e85cSPaul Durrantint main(void) {
21783996e85cSPaul Durrant  xc_interface *xc;
21793996e85cSPaul Durrant  xs_daemon_open();
21803996e85cSPaul Durrant  xc = xc_interface_open(0, 0, 0);
21813996e85cSPaul Durrant  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
21823996e85cSPaul Durrant  xc_gnttab_open(NULL, 0);
21833996e85cSPaul Durrant  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
21843996e85cSPaul Durrant  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
21858688e065SStefano Stabellini  return 0;
21868688e065SStefano Stabellini}
21878688e065SStefano StabelliniEOF
21888688e065SStefano Stabellini        compile_prog "" "$xen_libs"
218969deef08SPeter Maydell      then
2190f1167ee6SJuergen Gross      xen_ctrl_version=40200
21911badb709SPaolo Bonzini      xen=enabled
21928688e065SStefano Stabellini
2193e37630caSaliguori    else
21941badb709SPaolo Bonzini      if test "$xen" = "enabled" ; then
2195edfb07edSIan Campbell        feature_not_found "xen (unsupported version)" \
2196edfb07edSIan Campbell                          "Install a supported xen (xen 4.2 or newer)"
2197fc321b4bSJuan Quintela      fi
21981badb709SPaolo Bonzini      xen=disabled
2199e37630caSaliguori    fi
2200d5b93ddfSAnthony PERARD
22011badb709SPaolo Bonzini    if test "$xen" = enabled; then
2202f1167ee6SJuergen Gross      if test $xen_ctrl_version -ge 40701  ; then
2203582ea95fSMarc-André Lureau        xen_libs="$xen_libs $xen_stable_libs "
22045eeb39c2SIan Campbell      fi
2205d5b93ddfSAnthony PERARD    fi
2206e37630caSaliguori  fi
2207c1cdd9d5SJuergen Grossfi
2208e37630caSaliguori
2209d661d9a4SJustin Terry (VM)##########################################
22102da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries
22112da776dbSMichael R. Hinesif test "$rdma" != "no" ; then
22122da776dbSMichael R. Hines  cat > $TMPC <<EOF
22132da776dbSMichael R. Hines#include <rdma/rdma_cma.h>
22142da776dbSMichael R. Hinesint main(void) { return 0; }
22152da776dbSMichael R. HinesEOF
2216ef6d4ccdSYuval Shaia  rdma_libs="-lrdmacm -libverbs -libumad"
22172da776dbSMichael R. Hines  if compile_prog "" "$rdma_libs" ; then
22182da776dbSMichael R. Hines    rdma="yes"
22192da776dbSMichael R. Hines  else
22202da776dbSMichael R. Hines    if test "$rdma" = "yes" ; then
22212da776dbSMichael R. Hines        error_exit \
2222ef6d4ccdSYuval Shaia            " OpenFabrics librdmacm/libibverbs/libibumad not present." \
22232da776dbSMichael R. Hines            " Your options:" \
2224ef6d4ccdSYuval Shaia            "  (1) Fast: Install infiniband packages (devel) from your distro." \
22252da776dbSMichael R. Hines            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
22262da776dbSMichael R. Hines            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
22272da776dbSMichael R. Hines    fi
22282da776dbSMichael R. Hines    rdma="no"
22292da776dbSMichael R. Hines  fi
22302da776dbSMichael R. Hinesfi
22312da776dbSMichael R. Hines
223221ab34c9SMarcel Apfelbaum##########################################
223321ab34c9SMarcel Apfelbaum# PVRDMA detection
223421ab34c9SMarcel Apfelbaum
223521ab34c9SMarcel Apfelbaumcat > $TMPC <<EOF &&
223621ab34c9SMarcel Apfelbaum#include <sys/mman.h>
223721ab34c9SMarcel Apfelbaum
223821ab34c9SMarcel Apfelbaumint
223921ab34c9SMarcel Apfelbaummain(void)
224021ab34c9SMarcel Apfelbaum{
224121ab34c9SMarcel Apfelbaum    char buf = 0;
224221ab34c9SMarcel Apfelbaum    void *addr = &buf;
224321ab34c9SMarcel Apfelbaum    addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
224421ab34c9SMarcel Apfelbaum
224521ab34c9SMarcel Apfelbaum    return 0;
224621ab34c9SMarcel Apfelbaum}
224721ab34c9SMarcel ApfelbaumEOF
224821ab34c9SMarcel Apfelbaum
224921ab34c9SMarcel Apfelbaumif test "$rdma" = "yes" ; then
225021ab34c9SMarcel Apfelbaum    case "$pvrdma" in
225121ab34c9SMarcel Apfelbaum    "")
225221ab34c9SMarcel Apfelbaum        if compile_prog "" ""; then
225321ab34c9SMarcel Apfelbaum            pvrdma="yes"
225421ab34c9SMarcel Apfelbaum        else
225521ab34c9SMarcel Apfelbaum            pvrdma="no"
225621ab34c9SMarcel Apfelbaum        fi
225721ab34c9SMarcel Apfelbaum        ;;
225821ab34c9SMarcel Apfelbaum    "yes")
225921ab34c9SMarcel Apfelbaum        if ! compile_prog "" ""; then
226021ab34c9SMarcel Apfelbaum            error_exit "PVRDMA is not supported since mremap is not implemented"
226121ab34c9SMarcel Apfelbaum        fi
226221ab34c9SMarcel Apfelbaum        pvrdma="yes"
226321ab34c9SMarcel Apfelbaum        ;;
226421ab34c9SMarcel Apfelbaum    "no")
226521ab34c9SMarcel Apfelbaum        pvrdma="no"
226621ab34c9SMarcel Apfelbaum        ;;
226721ab34c9SMarcel Apfelbaum    esac
226821ab34c9SMarcel Apfelbaumelse
226921ab34c9SMarcel Apfelbaum    if test "$pvrdma" = "yes" ; then
227021ab34c9SMarcel Apfelbaum        error_exit "PVRDMA requires rdma suppport"
227121ab34c9SMarcel Apfelbaum    fi
227221ab34c9SMarcel Apfelbaum    pvrdma="no"
227321ab34c9SMarcel Apfelbaumfi
227495c6bff3SBenoît Canet
2275ee108585SYuval Shaia# Let's see if enhanced reg_mr is supported
2276ee108585SYuval Shaiaif test "$pvrdma" = "yes" ; then
2277ee108585SYuval Shaia
2278ee108585SYuval Shaiacat > $TMPC <<EOF &&
2279ee108585SYuval Shaia#include <infiniband/verbs.h>
2280ee108585SYuval Shaia
2281ee108585SYuval Shaiaint
2282ee108585SYuval Shaiamain(void)
2283ee108585SYuval Shaia{
2284ee108585SYuval Shaia    struct ibv_mr *mr;
2285ee108585SYuval Shaia    struct ibv_pd *pd = NULL;
2286ee108585SYuval Shaia    size_t length = 10;
2287ee108585SYuval Shaia    uint64_t iova = 0;
2288ee108585SYuval Shaia    int access = 0;
2289ee108585SYuval Shaia    void *addr = NULL;
2290ee108585SYuval Shaia
2291ee108585SYuval Shaia    mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
2292ee108585SYuval Shaia
2293ee108585SYuval Shaia    ibv_dereg_mr(mr);
2294ee108585SYuval Shaia
2295ee108585SYuval Shaia    return 0;
2296ee108585SYuval Shaia}
2297ee108585SYuval ShaiaEOF
2298ee108585SYuval Shaia    if ! compile_prog "" "-libverbs"; then
2299ee108585SYuval Shaia        QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
2300ee108585SYuval Shaia    fi
2301ee108585SYuval Shaiafi
2302ee108585SYuval Shaia
230395c6bff3SBenoît Canet##########################################
2304e18df141SAnthony Liguori# glib support probe
2305a52d28afSPaolo Bonzini
2306b4c6036fSDaniel P. Berrangéglib_req_ver=2.56
2307aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0
2308aa0d1f44SPaolo Bonziniif test "$modules" = yes; then
2309a88afc64SGerd Hoffmann    glib_modules="$glib_modules gmodule-export-2.0"
2310b906acacSPaolo Bonzinielif test "$plugins" = "yes"; then
2311b906acacSPaolo Bonzini    glib_modules="$glib_modules gmodule-no-export-2.0"
231254cb65d8SEmilio G. Cotafi
2313e26110cfSFam Zheng
2314aa0d1f44SPaolo Bonzinifor i in $glib_modules; do
2315e26110cfSFam Zheng    if $pkg_config --atleast-version=$glib_req_ver $i; then
231689138857SStefan Weil        glib_cflags=$($pkg_config --cflags $i)
231789138857SStefan Weil        glib_libs=$($pkg_config --libs $i)
2318e18df141SAnthony Liguori    else
2319e26110cfSFam Zheng        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2320e26110cfSFam Zheng    fi
2321e26110cfSFam Zhengdone
2322e26110cfSFam Zheng
2323215b0c2fSPaolo Bonzini# This workaround is required due to a bug in pkg-config file for glib as it
2324215b0c2fSPaolo Bonzini# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
2325215b0c2fSPaolo Bonzini
2326215b0c2fSPaolo Bonziniif test "$static" = yes && test "$mingw32" = yes; then
2327215b0c2fSPaolo Bonzini    glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
2328215b0c2fSPaolo Bonzinifi
2329215b0c2fSPaolo Bonzini
233020cf7b8eSDenis Plotnikovif ! test "$gio" = "no"; then
233120cf7b8eSDenis Plotnikov    pass=no
2332f876b765SMarc-André Lureau    if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
2333f876b765SMarc-André Lureau        gio_cflags=$($pkg_config --cflags gio-2.0)
2334f876b765SMarc-André Lureau        gio_libs=$($pkg_config --libs gio-2.0)
233525a97a56SMarc-André Lureau        gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
23365ecfb76cSPaolo Bonzini        if ! has "$gdbus_codegen"; then
23370dba4897SMarc-André Lureau            gdbus_codegen=
23380dba4897SMarc-André Lureau        fi
233976346b62SPeter Maydell        # Check that the libraries actually work -- Ubuntu 18.04 ships
234076346b62SPeter Maydell        # with pkg-config --static --libs data for gio-2.0 that is missing
234176346b62SPeter Maydell        # -lblkid and will give a link error.
234213ceae66SPeter Maydell        cat > $TMPC <<EOF
234313ceae66SPeter Maydell#include <gio/gio.h>
234413ceae66SPeter Maydellint main(void)
234513ceae66SPeter Maydell{
234613ceae66SPeter Maydell    g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
234713ceae66SPeter Maydell    return 0;
234813ceae66SPeter Maydell}
234913ceae66SPeter MaydellEOF
235013ceae66SPeter Maydell        if compile_prog "$gio_cflags" "$gio_libs" ; then
235120cf7b8eSDenis Plotnikov            pass=yes
235276346b62SPeter Maydell        else
235320cf7b8eSDenis Plotnikov            pass=no
2354f876b765SMarc-André Lureau        fi
2355f876b765SMarc-André Lureau
235620cf7b8eSDenis Plotnikov        if test "$pass" = "yes" &&
235720cf7b8eSDenis Plotnikov            $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
235825a97a56SMarc-André Lureau            gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
235925a97a56SMarc-André Lureau            gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
236025a97a56SMarc-André Lureau        fi
236120cf7b8eSDenis Plotnikov    fi
236220cf7b8eSDenis Plotnikov
236320cf7b8eSDenis Plotnikov    if test "$pass" = "no"; then
236420cf7b8eSDenis Plotnikov        if test "$gio" = "yes"; then
236520cf7b8eSDenis Plotnikov            feature_not_found "gio" "Install libgio >= 2.0"
236620cf7b8eSDenis Plotnikov        else
236720cf7b8eSDenis Plotnikov            gio=no
236820cf7b8eSDenis Plotnikov        fi
236920cf7b8eSDenis Plotnikov    else
237020cf7b8eSDenis Plotnikov        gio=yes
237120cf7b8eSDenis Plotnikov    fi
237220cf7b8eSDenis Plotnikovfi
237325a97a56SMarc-André Lureau
2374977a82abSDaniel P. Berrange# Sanity check that the current size_t matches the
2375977a82abSDaniel P. Berrange# size that glib thinks it should be. This catches
2376977a82abSDaniel P. Berrange# problems on multi-arch where people try to build
2377977a82abSDaniel P. Berrange# 32-bit QEMU while pointing at 64-bit glib headers
2378977a82abSDaniel P. Berrangecat > $TMPC <<EOF
2379977a82abSDaniel P. Berrange#include <glib.h>
2380977a82abSDaniel P. Berrange#include <unistd.h>
2381977a82abSDaniel P. Berrange
2382977a82abSDaniel P. Berrange#define QEMU_BUILD_BUG_ON(x) \
2383977a82abSDaniel P. Berrange  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
2384977a82abSDaniel P. Berrange
2385977a82abSDaniel P. Berrangeint main(void) {
2386977a82abSDaniel P. Berrange   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
2387977a82abSDaniel P. Berrange   return 0;
2388977a82abSDaniel P. Berrange}
2389977a82abSDaniel P. BerrangeEOF
2390977a82abSDaniel P. Berrange
2391215b0c2fSPaolo Bonziniif ! compile_prog "$glib_cflags" "$glib_libs" ; then
2392977a82abSDaniel P. Berrange    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
2393977a82abSDaniel P. Berrange               "You probably need to set PKG_CONFIG_LIBDIR"\
2394977a82abSDaniel P. Berrange	       "to point to the right pkg-config files for your"\
2395977a82abSDaniel P. Berrange	       "build target"
2396977a82abSDaniel P. Berrangefi
2397977a82abSDaniel P. Berrange
23989bda600bSEric Blake# Silence clang warnings triggered by glib < 2.57.2
23999bda600bSEric Blakecat > $TMPC << EOF
24009bda600bSEric Blake#include <glib.h>
24019bda600bSEric Blaketypedef struct Foo {
24029bda600bSEric Blake    int i;
24039bda600bSEric Blake} Foo;
24049bda600bSEric Blakestatic void foo_free(Foo *f)
24059bda600bSEric Blake{
24069bda600bSEric Blake    g_free(f);
24079bda600bSEric Blake}
24089bda600bSEric BlakeG_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
24099bda600bSEric Blakeint main(void) { return 0; }
24109bda600bSEric BlakeEOF
24119bda600bSEric Blakeif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
24129bda600bSEric Blake    if cc_has_warning_flag "-Wno-unused-function"; then
24139bda600bSEric Blake        glib_cflags="$glib_cflags -Wno-unused-function"
24145770e8afSPaolo Bonzini        CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
24159bda600bSEric Blake    fi
24169bda600bSEric Blakefi
24179bda600bSEric Blake
2418e26110cfSFam Zheng##########################################
2419e26110cfSFam Zheng# SHA command probe for modules
2420e26110cfSFam Zhengif test "$modules" = yes; then
2421e26110cfSFam Zheng    shacmd_probe="sha1sum sha1 shasum"
2422e26110cfSFam Zheng    for c in $shacmd_probe; do
24238ccefb91SFam Zheng        if has $c; then
2424e26110cfSFam Zheng            shacmd="$c"
2425e26110cfSFam Zheng            break
2426e26110cfSFam Zheng        fi
2427e26110cfSFam Zheng    done
2428e26110cfSFam Zheng    if test "$shacmd" = ""; then
2429e26110cfSFam Zheng        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2430e26110cfSFam Zheng    fi
2431e18df141SAnthony Liguorifi
2432e18df141SAnthony Liguori
2433e18df141SAnthony Liguori##########################################
24347aaa6a16SPaolo Bonzini# TPM emulation is only on POSIX
24353b8acc11SPaolo Bonzini
24367aaa6a16SPaolo Bonziniif test "$tpm" = ""; then
24377aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes"; then
24387aaa6a16SPaolo Bonzini    tpm=no
24393b8acc11SPaolo Bonzini  else
24407aaa6a16SPaolo Bonzini    tpm=yes
24417aaa6a16SPaolo Bonzini  fi
24427aaa6a16SPaolo Bonzinielif test "$tpm" = "yes"; then
24437aaa6a16SPaolo Bonzini  if test "$mingw32" = "yes" ; then
24447aaa6a16SPaolo Bonzini    error_exit "TPM emulation only available on POSIX systems"
24457aaa6a16SPaolo Bonzini  fi
24463b8acc11SPaolo Bonzinifi
24473b8acc11SPaolo Bonzini
24483b8acc11SPaolo Bonzini##########################################
2449f652e6afSaurel32# fdt probe
2450e169e1e1SPeter Maydell
2451fbb4121dSPaolo Bonzinicase "$fdt" in
2452fbb4121dSPaolo Bonzini  auto | enabled | internal)
2453fbb4121dSPaolo Bonzini    # Simpler to always update submodule, even if not needed.
2454aef45d51SDaniel P. Berrange    git_submodules="${git_submodules} dtc"
2455fbb4121dSPaolo Bonzini    ;;
2456fbb4121dSPaolo Bonziniesac
2457f652e6afSaurel32
245820ff075bSMichael Walle##########################################
24599d49bcf6SMarkus Armbruster# opengl probe (for sdl2, gtk)
2460b1546f32SGerd Hoffmann
2461da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then
2462bc6a3565SAkihiko Odaki  epoxy=no
2463bc6a3565SAkihiko Odaki  if $pkg_config epoxy; then
2464bc6a3565SAkihiko Odaki    cat > $TMPC << EOF
2465bc6a3565SAkihiko Odaki#include <epoxy/egl.h>
2466bc6a3565SAkihiko Odakiint main(void) { return 0; }
2467bc6a3565SAkihiko OdakiEOF
2468bc6a3565SAkihiko Odaki    if compile_prog "" "" ; then
2469bc6a3565SAkihiko Odaki      epoxy=yes
2470bc6a3565SAkihiko Odaki    fi
2471bc6a3565SAkihiko Odaki  fi
2472bc6a3565SAkihiko Odaki
2473bc6a3565SAkihiko Odaki  if test "$epoxy" = "yes" ; then
2474bc6a3565SAkihiko Odaki    opengl_cflags="$($pkg_config --cflags epoxy)"
2475bc6a3565SAkihiko Odaki    opengl_libs="$($pkg_config --libs epoxy)"
2476da076ffeSGerd Hoffmann    opengl=yes
247720ff075bSMichael Walle  else
2478da076ffeSGerd Hoffmann    if test "$opengl" = "yes" ; then
2479bc6a3565SAkihiko Odaki      feature_not_found "opengl" "Please install epoxy with EGL"
248020ff075bSMichael Walle    fi
2481f676c67eSJeremy White    opengl_cflags=""
2482da076ffeSGerd Hoffmann    opengl_libs=""
2483da076ffeSGerd Hoffmann    opengl=no
248420ff075bSMichael Walle  fi
248520ff075bSMichael Wallefi
248620ff075bSMichael Walle
2487dcc38d1cSMarcelo Tosatti##########################################
2488a99d57bbSWanlong Gao# libnuma probe
2489a99d57bbSWanlong Gao
2490a99d57bbSWanlong Gaoif test "$numa" != "no" ; then
2491a99d57bbSWanlong Gao  cat > $TMPC << EOF
2492a99d57bbSWanlong Gao#include <numa.h>
2493a99d57bbSWanlong Gaoint main(void) { return numa_available(); }
2494a99d57bbSWanlong GaoEOF
2495a99d57bbSWanlong Gao
2496a99d57bbSWanlong Gao  if compile_prog "" "-lnuma" ; then
2497a99d57bbSWanlong Gao    numa=yes
2498ab318051SMarc-André Lureau    numa_libs="-lnuma"
2499a99d57bbSWanlong Gao  else
2500a99d57bbSWanlong Gao    if test "$numa" = "yes" ; then
2501a99d57bbSWanlong Gao      feature_not_found "numa" "install numactl devel"
2502a99d57bbSWanlong Gao    fi
2503a99d57bbSWanlong Gao    numa=no
2504a99d57bbSWanlong Gao  fi
2505a99d57bbSWanlong Gaofi
2506a99d57bbSWanlong Gao
2507955727d2SCortland Tölva# check for usbfs
2508955727d2SCortland Tölvahave_usbfs=no
2509955727d2SCortland Tölvaif test "$linux_user" = "yes"; then
251096566d09SThomas Petazzoni  cat > $TMPC << EOF
251196566d09SThomas Petazzoni#include <linux/usbdevice_fs.h>
251296566d09SThomas Petazzoni
251396566d09SThomas Petazzoni#ifndef USBDEVFS_GET_CAPABILITIES
251496566d09SThomas Petazzoni#error "USBDEVFS_GET_CAPABILITIES undefined"
251596566d09SThomas Petazzoni#endif
251696566d09SThomas Petazzoni
251796566d09SThomas Petazzoni#ifndef USBDEVFS_DISCONNECT_CLAIM
251896566d09SThomas Petazzoni#error "USBDEVFS_DISCONNECT_CLAIM undefined"
251996566d09SThomas Petazzoni#endif
252096566d09SThomas Petazzoni
252196566d09SThomas Petazzoniint main(void)
252296566d09SThomas Petazzoni{
252396566d09SThomas Petazzoni    return 0;
252496566d09SThomas Petazzoni}
252596566d09SThomas PetazzoniEOF
252696566d09SThomas Petazzoni  if compile_prog "" ""; then
2527955727d2SCortland Tölva    have_usbfs=yes
2528955727d2SCortland Tölva  fi
2529955727d2SCortland Tölvafi
2530751bcc39SMarc-André Lureau
2531de5071c5SBlue Swirl##########################################
2532d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win
2533d9840e25STomoki Sekiyama
25343b0d8643SPaolo Bonziniguest_agent_with_vss="no"
2535e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
2536e633a5c6SEric Blake        test "$vss_win32_sdk" != "no" ; then
2537d9840e25STomoki Sekiyama  case "$vss_win32_sdk" in
2538690604f6SMichael Roth    "")   vss_win32_include="-isystem $source_path" ;;
2539d9840e25STomoki Sekiyama    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
2540d9840e25STomoki Sekiyama          # handle path with spaces. So we symlink the headers into ".sdk/vss".
2541690604f6SMichael Roth          vss_win32_include="-isystem $source_path/.sdk/vss"
2542d9840e25STomoki Sekiyama	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
2543d9840e25STomoki Sekiyama	  ;;
2544690604f6SMichael Roth    *)    vss_win32_include="-isystem $vss_win32_sdk"
2545d9840e25STomoki Sekiyama  esac
2546d9840e25STomoki Sekiyama  cat > $TMPC << EOF
2547d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__
2548d9840e25STomoki Sekiyama#include <inc/win2003/vss.h>
2549d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; }
2550d9840e25STomoki SekiyamaEOF
2551d9840e25STomoki Sekiyama  if compile_prog "$vss_win32_include" "" ; then
2552d9840e25STomoki Sekiyama    guest_agent_with_vss="yes"
2553d9840e25STomoki Sekiyama    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
2554315d3184SFam Zheng    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
2555f33ca81fSMichael Roth    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
2556d9840e25STomoki Sekiyama  else
2557d9840e25STomoki Sekiyama    if test "$vss_win32_sdk" != "" ; then
2558d9840e25STomoki Sekiyama      echo "ERROR: Please download and install Microsoft VSS SDK:"
2559d9840e25STomoki Sekiyama      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
2560d9840e25STomoki Sekiyama      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
2561d9840e25STomoki Sekiyama      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
2562d9840e25STomoki Sekiyama      echo "ERROR: The headers are extracted in the directory \`inc'."
2563d9840e25STomoki Sekiyama      feature_not_found "VSS support"
2564d9840e25STomoki Sekiyama    fi
2565d9840e25STomoki Sekiyama  fi
2566d9840e25STomoki Sekiyamafi
2567d9840e25STomoki Sekiyama
2568d9840e25STomoki Sekiyama##########################################
2569d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified)
2570d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent
2571d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the
2572d9840e25STomoki Sekiyama# pre-compiled .tlb file is included.
2573d9840e25STomoki Sekiyama
2574e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
2575e633a5c6SEric Blake        test "$guest_agent_with_vss" = "yes" ; then
2576d9840e25STomoki Sekiyama  if test -z "$win_sdk"; then
2577d9840e25STomoki Sekiyama    programfiles="$PROGRAMFILES"
2578d9840e25STomoki Sekiyama    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
2579d9840e25STomoki Sekiyama    if test -n "$programfiles"; then
2580d9840e25STomoki Sekiyama      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
2581d9840e25STomoki Sekiyama    else
2582d9840e25STomoki Sekiyama      feature_not_found "Windows SDK"
2583d9840e25STomoki Sekiyama    fi
2584d9840e25STomoki Sekiyama  elif test "$win_sdk" = "no"; then
2585d9840e25STomoki Sekiyama    win_sdk=""
2586d9840e25STomoki Sekiyama  fi
2587d9840e25STomoki Sekiyamafi
2588d9840e25STomoki Sekiyama
2589d9840e25STomoki Sekiyama##########################################
259050cbebb9SMichael Roth# check if mingw environment provides a recent ntddscsi.h
25913b0d8643SPaolo Bonziniguest_agent_ntddscsi="no"
2592e633a5c6SEric Blakeif test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
259350cbebb9SMichael Roth  cat > $TMPC << EOF
259450cbebb9SMichael Roth#include <windows.h>
259550cbebb9SMichael Roth#include <ntddscsi.h>
259650cbebb9SMichael Rothint main(void) {
259750cbebb9SMichael Roth#if !defined(IOCTL_SCSI_GET_ADDRESS)
259850cbebb9SMichael Roth#error Missing required ioctl definitions
259950cbebb9SMichael Roth#endif
260050cbebb9SMichael Roth  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
260150cbebb9SMichael Roth  return addr.Lun;
260250cbebb9SMichael Roth}
260350cbebb9SMichael RothEOF
260450cbebb9SMichael Roth  if compile_prog "" "" ; then
260550cbebb9SMichael Roth    guest_agent_ntddscsi=yes
2606996b9cdcSMatt Hines    libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
260750cbebb9SMichael Roth  fi
260850cbebb9SMichael Rothfi
260950cbebb9SMichael Roth
261050cbebb9SMichael Roth##########################################
26118ca80760SRichard Henderson# capstone
26128ca80760SRichard Henderson
2613e219c499SRichard Hendersoncase "$capstone" in
26148b18cdbfSRichard Henderson  auto | enabled | internal)
26158b18cdbfSRichard Henderson    # Simpler to always update submodule, even if not needed.
2616e219c499SRichard Henderson    git_submodules="${git_submodules} capstone"
2617e219c499SRichard Henderson    ;;
2618e219c499SRichard Hendersonesac
26198ca80760SRichard Henderson
26208ca80760SRichard Henderson##########################################
2621519175a2SAlex Barcelo# check and set a backend for coroutine
2622d0e2fce5SAneesh Kumar K.V
26237c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback
262433c53c54SDaniel P. Berrange# is sigcontext. On Windows the only valid backend is the Windows
262533c53c54SDaniel P. Berrange# specific one.
26267c2acc70SPeter Maydell
26277c2acc70SPeter Maydellucontext_works=no
2628d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then
2629d0e2fce5SAneesh Kumar K.V  cat > $TMPC << EOF
2630d0e2fce5SAneesh Kumar K.V#include <ucontext.h>
2631cdf84806SPeter Maydell#ifdef __stub_makecontext
2632cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail
2633cdf84806SPeter Maydell#endif
263475cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; }
2635d0e2fce5SAneesh Kumar K.VEOF
2636d0e2fce5SAneesh Kumar K.V  if compile_prog "" "" ; then
26377c2acc70SPeter Maydell    ucontext_works=yes
2638d0e2fce5SAneesh Kumar K.V  fi
2639519175a2SAlex Barcelofi
26407c2acc70SPeter Maydell
26417c2acc70SPeter Maydellif test "$coroutine" = ""; then
26427c2acc70SPeter Maydell  if test "$mingw32" = "yes"; then
26437c2acc70SPeter Maydell    coroutine=win32
26447c2acc70SPeter Maydell  elif test "$ucontext_works" = "yes"; then
26457c2acc70SPeter Maydell    coroutine=ucontext
2646519175a2SAlex Barcelo  else
26477c2acc70SPeter Maydell    coroutine=sigaltstack
26487c2acc70SPeter Maydell  fi
26497c2acc70SPeter Maydellelse
26507c2acc70SPeter Maydell  case $coroutine in
26517c2acc70SPeter Maydell  windows)
26527c2acc70SPeter Maydell    if test "$mingw32" != "yes"; then
26537c2acc70SPeter Maydell      error_exit "'windows' coroutine backend only valid for Windows"
26547c2acc70SPeter Maydell    fi
26557c2acc70SPeter Maydell    # Unfortunately the user visible backend name doesn't match the
26567c2acc70SPeter Maydell    # coroutine-*.c filename for this case, so we have to adjust it here.
26577c2acc70SPeter Maydell    coroutine=win32
26587c2acc70SPeter Maydell    ;;
26597c2acc70SPeter Maydell  ucontext)
26607c2acc70SPeter Maydell    if test "$ucontext_works" != "yes"; then
26617c2acc70SPeter Maydell      feature_not_found "ucontext"
26627c2acc70SPeter Maydell    fi
26637c2acc70SPeter Maydell    ;;
266433c53c54SDaniel P. Berrange  sigaltstack)
26657c2acc70SPeter Maydell    if test "$mingw32" = "yes"; then
26667c2acc70SPeter Maydell      error_exit "only the 'windows' coroutine backend is valid for Windows"
26677c2acc70SPeter Maydell    fi
26687c2acc70SPeter Maydell    ;;
26697c2acc70SPeter Maydell  *)
267076ad07a4SPeter Maydell    error_exit "unknown coroutine backend $coroutine"
26717c2acc70SPeter Maydell    ;;
26727c2acc70SPeter Maydell  esac
2673d0e2fce5SAneesh Kumar K.Vfi
2674d0e2fce5SAneesh Kumar K.V
267570c60c08SStefan Hajnocziif test "$coroutine_pool" = ""; then
267670c60c08SStefan Hajnoczi  coroutine_pool=yes
267770c60c08SStefan Hajnoczifi
267870c60c08SStefan Hajnoczi
26797d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes"; then
26807d992e4dSPeter Lieven  if test "$coroutine_pool" = "yes"; then
26817d992e4dSPeter Lieven    echo "WARN: disabling coroutine pool for stack usage debugging"
26827d992e4dSPeter Lieven    coroutine_pool=no
26837d992e4dSPeter Lieven  fi
26847d992e4dSPeter Lievenfi
26857d992e4dSPeter Lieven
26861e4f6065SDaniele Buono##################################################
26871e4f6065SDaniele Buono# SafeStack
26881e4f6065SDaniele Buono
26891e4f6065SDaniele Buono
26901e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
26911e4f6065SDaniele Buonocat > $TMPC << EOF
26921e4f6065SDaniele Buonoint main(int argc, char *argv[])
26931e4f6065SDaniele Buono{
26941e4f6065SDaniele Buono#if ! __has_feature(safe_stack)
26951e4f6065SDaniele Buono#error SafeStack Disabled
26961e4f6065SDaniele Buono#endif
26971e4f6065SDaniele Buono    return 0;
26981e4f6065SDaniele Buono}
26991e4f6065SDaniele BuonoEOF
27001e4f6065SDaniele Buono  flag="-fsanitize=safe-stack"
27011e4f6065SDaniele Buono  # Check that safe-stack is supported and enabled.
27021e4f6065SDaniele Buono  if compile_prog "-Werror $flag" "$flag"; then
27031e4f6065SDaniele Buono    # Flag needed both at compilation and at linking
27041e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
27051e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
27061e4f6065SDaniele Buono  else
27071e4f6065SDaniele Buono    error_exit "SafeStack not supported by your compiler"
27081e4f6065SDaniele Buono  fi
27091e4f6065SDaniele Buono  if test "$coroutine" != "ucontext"; then
27101e4f6065SDaniele Buono    error_exit "SafeStack is only supported by the coroutine backend ucontext"
27111e4f6065SDaniele Buono  fi
27121e4f6065SDaniele Buonoelse
27131e4f6065SDaniele Buonocat > $TMPC << EOF
27141e4f6065SDaniele Buonoint main(int argc, char *argv[])
27151e4f6065SDaniele Buono{
27161e4f6065SDaniele Buono#if defined(__has_feature)
27171e4f6065SDaniele Buono#if __has_feature(safe_stack)
27181e4f6065SDaniele Buono#error SafeStack Enabled
27191e4f6065SDaniele Buono#endif
27201e4f6065SDaniele Buono#endif
27211e4f6065SDaniele Buono    return 0;
27221e4f6065SDaniele Buono}
27231e4f6065SDaniele BuonoEOF
27241e4f6065SDaniele Buonoif test "$safe_stack" = "no"; then
27251e4f6065SDaniele Buono  # Make sure that safe-stack is disabled
27261e4f6065SDaniele Buono  if ! compile_prog "-Werror" ""; then
27271e4f6065SDaniele Buono    # SafeStack was already enabled, try to explicitly remove the feature
27281e4f6065SDaniele Buono    flag="-fno-sanitize=safe-stack"
27291e4f6065SDaniele Buono    if ! compile_prog "-Werror $flag" "$flag"; then
27301e4f6065SDaniele Buono      error_exit "Configure cannot disable SafeStack"
27311e4f6065SDaniele Buono    fi
27321e4f6065SDaniele Buono    QEMU_CFLAGS="$QEMU_CFLAGS $flag"
27331e4f6065SDaniele Buono    QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
27341e4f6065SDaniele Buono  fi
27351e4f6065SDaniele Buonoelse # "$safe_stack" = ""
27361e4f6065SDaniele Buono  # Set safe_stack to yes or no based on pre-existing flags
27371e4f6065SDaniele Buono  if compile_prog "-Werror" ""; then
27381e4f6065SDaniele Buono    safe_stack="no"
27391e4f6065SDaniele Buono  else
27401e4f6065SDaniele Buono    safe_stack="yes"
27411e4f6065SDaniele Buono    if test "$coroutine" != "ucontext"; then
27421e4f6065SDaniele Buono      error_exit "SafeStack is only supported by the coroutine backend ucontext"
27431e4f6065SDaniele Buono    fi
27441e4f6065SDaniele Buono  fi
27451e4f6065SDaniele Buonofi
27461e4f6065SDaniele Buonofi
27477d992e4dSPeter Lieven
274876a347e1SRichard Henderson########################################
274976a347e1SRichard Henderson# check if cpuid.h is usable.
275076a347e1SRichard Henderson
275176a347e1SRichard Hendersoncat > $TMPC << EOF
275276a347e1SRichard Henderson#include <cpuid.h>
275376a347e1SRichard Hendersonint main(void) {
2754774d566cSPeter Maydell    unsigned a, b, c, d;
27552a728de1SMichael S. Tsirkin    unsigned max = __get_cpuid_max(0, 0);
2756774d566cSPeter Maydell
2757774d566cSPeter Maydell    if (max >= 1) {
2758774d566cSPeter Maydell        __cpuid(1, a, b, c, d);
2759774d566cSPeter Maydell    }
2760774d566cSPeter Maydell
2761774d566cSPeter Maydell    if (max >= 7) {
2762774d566cSPeter Maydell        __cpuid_count(7, 0, a, b, c, d);
2763774d566cSPeter Maydell    }
2764774d566cSPeter Maydell
276576a347e1SRichard Henderson    return 0;
276676a347e1SRichard Henderson}
276776a347e1SRichard HendersonEOF
276876a347e1SRichard Hendersonif compile_prog "" "" ; then
276976a347e1SRichard Henderson    cpuid_h=yes
277076a347e1SRichard Hendersonfi
277176a347e1SRichard Henderson
27725dd89908SRichard Henderson##########################################
27735dd89908SRichard Henderson# avx2 optimization requirement check
27745dd89908SRichard Henderson#
27755dd89908SRichard Henderson# There is no point enabling this if cpuid.h is not usable,
27765dd89908SRichard Henderson# since we won't be able to select the new routines.
27775dd89908SRichard Henderson
2778e633a5c6SEric Blakeif test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
27795dd89908SRichard Henderson  cat > $TMPC << EOF
27805dd89908SRichard Henderson#pragma GCC push_options
27815dd89908SRichard Henderson#pragma GCC target("avx2")
27825dd89908SRichard Henderson#include <cpuid.h>
27835dd89908SRichard Henderson#include <immintrin.h>
27845dd89908SRichard Hendersonstatic int bar(void *a) {
27855dd89908SRichard Henderson    __m256i x = *(__m256i *)a;
27865dd89908SRichard Henderson    return _mm256_testz_si256(x, x);
27875dd89908SRichard Henderson}
27885dd89908SRichard Hendersonint main(int argc, char *argv[]) { return bar(argv[0]); }
27895dd89908SRichard HendersonEOF
27905b945f23SRichard Henderson  if compile_object "-Werror" ; then
27915dd89908SRichard Henderson    avx2_opt="yes"
279286583a07SLiam Merwick  else
279386583a07SLiam Merwick    avx2_opt="no"
27945dd89908SRichard Henderson  fi
27955dd89908SRichard Hendersonfi
27965dd89908SRichard Henderson
27976b8cd447SRobert Hoo##########################################
27986b8cd447SRobert Hoo# avx512f optimization requirement check
27996b8cd447SRobert Hoo#
28006b8cd447SRobert Hoo# There is no point enabling this if cpuid.h is not usable,
28016b8cd447SRobert Hoo# since we won't be able to select the new routines.
28026b8cd447SRobert Hoo# by default, it is turned off.
28036b8cd447SRobert Hoo# if user explicitly want to enable it, check environment
28046b8cd447SRobert Hoo
28056b8cd447SRobert Hooif test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
28066b8cd447SRobert Hoo  cat > $TMPC << EOF
28076b8cd447SRobert Hoo#pragma GCC push_options
28086b8cd447SRobert Hoo#pragma GCC target("avx512f")
28096b8cd447SRobert Hoo#include <cpuid.h>
28106b8cd447SRobert Hoo#include <immintrin.h>
28116b8cd447SRobert Hoostatic int bar(void *a) {
28126b8cd447SRobert Hoo    __m512i x = *(__m512i *)a;
28136b8cd447SRobert Hoo    return _mm512_test_epi64_mask(x, x);
28146b8cd447SRobert Hoo}
28156b8cd447SRobert Hooint main(int argc, char *argv[])
28166b8cd447SRobert Hoo{
28176b8cd447SRobert Hoo	return bar(argv[0]);
28186b8cd447SRobert Hoo}
28196b8cd447SRobert HooEOF
28205b945f23SRichard Henderson  if ! compile_object "-Werror" ; then
28216b8cd447SRobert Hoo    avx512f_opt="no"
28226b8cd447SRobert Hoo  fi
28236b8cd447SRobert Hooelse
28246b8cd447SRobert Hoo  avx512f_opt="no"
28256b8cd447SRobert Hoofi
28266b8cd447SRobert Hoo
2827f540166bSRichard Henderson########################################
2828f540166bSRichard Henderson# check if __[u]int128_t is usable.
2829f540166bSRichard Henderson
2830f540166bSRichard Hendersonint128=no
2831f540166bSRichard Hendersoncat > $TMPC << EOF
2832f540166bSRichard Henderson__int128_t a;
2833f540166bSRichard Henderson__uint128_t b;
2834f540166bSRichard Hendersonint main (void) {
2835f540166bSRichard Henderson  a = a + b;
2836f540166bSRichard Henderson  b = a * b;
2837464e3671SPeter Maydell  a = a * a;
2838f540166bSRichard Henderson  return 0;
2839f540166bSRichard Henderson}
2840f540166bSRichard HendersonEOF
2841f540166bSRichard Hendersonif compile_prog "" "" ; then
2842f540166bSRichard Henderson    int128=yes
2843f540166bSRichard Hendersonfi
284476a347e1SRichard Henderson
28457ebee43eSRichard Henderson#########################################
28467ebee43eSRichard Henderson# See if 128-bit atomic operations are supported.
28477ebee43eSRichard Henderson
28487ebee43eSRichard Hendersonatomic128=no
28497ebee43eSRichard Hendersonif test "$int128" = "yes"; then
28507ebee43eSRichard Henderson  cat > $TMPC << EOF
28517ebee43eSRichard Hendersonint main(void)
28527ebee43eSRichard Henderson{
28537ebee43eSRichard Henderson  unsigned __int128 x = 0, y = 0;
2854bceac547SThomas Huth  y = __atomic_load(&x, 0);
2855bceac547SThomas Huth  __atomic_store(&x, y, 0);
2856bceac547SThomas Huth  __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
28577ebee43eSRichard Henderson  return 0;
28587ebee43eSRichard Henderson}
28597ebee43eSRichard HendersonEOF
28607ebee43eSRichard Henderson  if compile_prog "" "" ; then
28617ebee43eSRichard Henderson    atomic128=yes
28627ebee43eSRichard Henderson  fi
28637ebee43eSRichard Hendersonfi
28647ebee43eSRichard Henderson
2865e6cd4bb5SRichard Hendersoncmpxchg128=no
2866e633a5c6SEric Blakeif test "$int128" = yes && test "$atomic128" = no; then
2867e6cd4bb5SRichard Henderson  cat > $TMPC << EOF
2868e6cd4bb5SRichard Hendersonint main(void)
2869e6cd4bb5SRichard Henderson{
2870e6cd4bb5SRichard Henderson  unsigned __int128 x = 0, y = 0;
2871e6cd4bb5SRichard Henderson  __sync_val_compare_and_swap_16(&x, y, x);
2872e6cd4bb5SRichard Henderson  return 0;
2873e6cd4bb5SRichard Henderson}
2874e6cd4bb5SRichard HendersonEOF
2875e6cd4bb5SRichard Henderson  if compile_prog "" "" ; then
2876e6cd4bb5SRichard Henderson    cmpxchg128=yes
2877e6cd4bb5SRichard Henderson  fi
2878e6cd4bb5SRichard Hendersonfi
2879e6cd4bb5SRichard Henderson
2880fd0e6053SJohn Snow########################################
2881fd0e6053SJohn Snow# check if ccache is interfering with
2882fd0e6053SJohn Snow# semantic analysis of macros
2883fd0e6053SJohn Snow
28845e4dfd3dSJohn Snowunset CCACHE_CPP2
2885fd0e6053SJohn Snowccache_cpp2=no
2886fd0e6053SJohn Snowcat > $TMPC << EOF
2887fd0e6053SJohn Snowstatic const int Z = 1;
2888fd0e6053SJohn Snow#define fn() ({ Z; })
2889fd0e6053SJohn Snow#define TAUT(X) ((X) == Z)
2890fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y)
2891fd0e6053SJohn Snow#define ID(X) (X)
2892fd0e6053SJohn Snowint main(int argc, char *argv[])
2893fd0e6053SJohn Snow{
2894fd0e6053SJohn Snow    int x = 0, y = 0;
2895fd0e6053SJohn Snow    x = ID(x);
2896fd0e6053SJohn Snow    x = fn();
2897fd0e6053SJohn Snow    fn();
2898fd0e6053SJohn Snow    if (PAREN(x, y)) return 0;
2899fd0e6053SJohn Snow    if (TAUT(Z)) return 0;
2900fd0e6053SJohn Snow    return 0;
2901fd0e6053SJohn Snow}
2902fd0e6053SJohn SnowEOF
2903fd0e6053SJohn Snow
2904fd0e6053SJohn Snowif ! compile_object "-Werror"; then
2905fd0e6053SJohn Snow    ccache_cpp2=yes
2906fd0e6053SJohn Snowfi
2907fd0e6053SJohn Snow
2908b553a042SJohn Snow#################################################
2909b553a042SJohn Snow# clang does not support glibc + FORTIFY_SOURCE.
2910b553a042SJohn Snow
2911b553a042SJohn Snowif test "$fortify_source" != "no"; then
2912b553a042SJohn Snow  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
2913b553a042SJohn Snow    fortify_source="no";
2914e189091fSPeter Maydell  elif test -n "$cxx" && has $cxx &&
2915cfcc7c14SJohn Snow       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
2916b553a042SJohn Snow    fortify_source="no";
2917b553a042SJohn Snow  else
2918b553a042SJohn Snow    fortify_source="yes"
2919b553a042SJohn Snow  fi
2920b553a042SJohn Snowfi
2921b553a042SJohn Snow
2922d2042378SAneesh Kumar K.V##########################################
2923a40161cbSPaolo Bonzini# check for usable membarrier system call
2924a40161cbSPaolo Bonziniif test "$membarrier" = "yes"; then
2925a40161cbSPaolo Bonzini    have_membarrier=no
2926a40161cbSPaolo Bonzini    if test "$mingw32" = "yes" ; then
2927a40161cbSPaolo Bonzini        have_membarrier=yes
2928a40161cbSPaolo Bonzini    elif test "$linux" = "yes" ; then
2929a40161cbSPaolo Bonzini        cat > $TMPC << EOF
2930a40161cbSPaolo Bonzini    #include <linux/membarrier.h>
2931a40161cbSPaolo Bonzini    #include <sys/syscall.h>
2932a40161cbSPaolo Bonzini    #include <unistd.h>
2933a40161cbSPaolo Bonzini    #include <stdlib.h>
2934a40161cbSPaolo Bonzini    int main(void) {
2935a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
2936a40161cbSPaolo Bonzini        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
2937a40161cbSPaolo Bonzini	exit(0);
2938a40161cbSPaolo Bonzini    }
2939a40161cbSPaolo BonziniEOF
2940a40161cbSPaolo Bonzini        if compile_prog "" "" ; then
2941a40161cbSPaolo Bonzini            have_membarrier=yes
2942a40161cbSPaolo Bonzini        fi
2943a40161cbSPaolo Bonzini    fi
2944a40161cbSPaolo Bonzini    if test "$have_membarrier" = "no"; then
2945a40161cbSPaolo Bonzini      feature_not_found "membarrier" "membarrier system call not available"
2946a40161cbSPaolo Bonzini    fi
2947a40161cbSPaolo Bonzinielse
2948a40161cbSPaolo Bonzini    # Do not enable it by default even for Mingw32, because it doesn't
2949a40161cbSPaolo Bonzini    # work on Wine.
2950a40161cbSPaolo Bonzini    membarrier=no
2951a40161cbSPaolo Bonzinifi
2952a40161cbSPaolo Bonzini
2953a40161cbSPaolo Bonzini##########################################
2954f0d92b56SLongpeng(Mike)# check for usable AF_ALG environment
29554f67366eSThomas Huthhave_afalg=no
2956f0d92b56SLongpeng(Mike)cat > $TMPC << EOF
2957f0d92b56SLongpeng(Mike)#include <errno.h>
2958f0d92b56SLongpeng(Mike)#include <sys/types.h>
2959f0d92b56SLongpeng(Mike)#include <sys/socket.h>
2960f0d92b56SLongpeng(Mike)#include <linux/if_alg.h>
2961f0d92b56SLongpeng(Mike)int main(void) {
2962f0d92b56SLongpeng(Mike)    int sock;
2963f0d92b56SLongpeng(Mike)    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
2964f0d92b56SLongpeng(Mike)    return sock;
2965f0d92b56SLongpeng(Mike)}
2966f0d92b56SLongpeng(Mike)EOF
2967f0d92b56SLongpeng(Mike)if compile_prog "" "" ; then
2968f0d92b56SLongpeng(Mike)    have_afalg=yes
2969f0d92b56SLongpeng(Mike)fi
2970f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes"
2971f0d92b56SLongpeng(Mike)then
2972f0d92b56SLongpeng(Mike)    if test "$have_afalg" != "yes"
2973f0d92b56SLongpeng(Mike)    then
2974f0d92b56SLongpeng(Mike)	error_exit "AF_ALG requested but could not be detected"
2975f0d92b56SLongpeng(Mike)    fi
2976f0d92b56SLongpeng(Mike)fi
2977f0d92b56SLongpeng(Mike)
2978f0d92b56SLongpeng(Mike)
2979db1ed1abSRichard Henderson##########################################
2980247724cbSMarc-André Lureau# checks for sanitizers
2981247724cbSMarc-André Lureau
2982247724cbSMarc-André Lureauhave_asan=no
2983247724cbSMarc-André Lureauhave_ubsan=no
2984d83414e1SMarc-André Lureauhave_asan_iface_h=no
2985d83414e1SMarc-André Lureauhave_asan_iface_fiber=no
2986247724cbSMarc-André Lureau
2987247724cbSMarc-André Lureauif test "$sanitizers" = "yes" ; then
2988b9f44da2SMarc-André Lureau  write_c_skeleton
2989247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
2990247724cbSMarc-André Lureau      have_asan=yes
2991247724cbSMarc-André Lureau  fi
2992b9f44da2SMarc-André Lureau
2993b9f44da2SMarc-André Lureau  # we could use a simple skeleton for flags checks, but this also
2994b9f44da2SMarc-André Lureau  # detect the static linking issue of ubsan, see also:
2995b9f44da2SMarc-André Lureau  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
2996b9f44da2SMarc-André Lureau  cat > $TMPC << EOF
2997b9f44da2SMarc-André Lureau#include <stdlib.h>
2998b9f44da2SMarc-André Lureauint main(void) {
2999b9f44da2SMarc-André Lureau    void *tmp = malloc(10);
3000f2dfe54cSLeonid Bloch    if (tmp != NULL) {
3001b9f44da2SMarc-André Lureau        return *(int *)(tmp + 2);
3002b9f44da2SMarc-André Lureau    }
3003d1abf3fcSOlaf Hering    return 1;
3004f2dfe54cSLeonid Bloch}
3005b9f44da2SMarc-André LureauEOF
3006247724cbSMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
3007247724cbSMarc-André Lureau      have_ubsan=yes
3008247724cbSMarc-André Lureau  fi
3009d83414e1SMarc-André Lureau
3010d83414e1SMarc-André Lureau  if check_include "sanitizer/asan_interface.h" ; then
3011d83414e1SMarc-André Lureau      have_asan_iface_h=yes
3012d83414e1SMarc-André Lureau  fi
3013d83414e1SMarc-André Lureau
3014d83414e1SMarc-André Lureau  cat > $TMPC << EOF
3015d83414e1SMarc-André Lureau#include <sanitizer/asan_interface.h>
3016d83414e1SMarc-André Lureauint main(void) {
3017d83414e1SMarc-André Lureau  __sanitizer_start_switch_fiber(0, 0, 0);
3018d83414e1SMarc-André Lureau  return 0;
3019d83414e1SMarc-André Lureau}
3020d83414e1SMarc-André LureauEOF
3021d83414e1SMarc-André Lureau  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
3022d83414e1SMarc-André Lureau      have_asan_iface_fiber=yes
3023d83414e1SMarc-André Lureau  fi
3024247724cbSMarc-André Lureaufi
3025247724cbSMarc-André Lureau
30260aebab04SLingfeng Yang# Thread sanitizer is, for now, much noisier than the other sanitizers;
30270aebab04SLingfeng Yang# keep it separate until that is not the case.
30280aebab04SLingfeng Yangif test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
30290aebab04SLingfeng Yang  error_exit "TSAN is not supported with other sanitiziers."
30300aebab04SLingfeng Yangfi
30310aebab04SLingfeng Yanghave_tsan=no
30320aebab04SLingfeng Yanghave_tsan_iface_fiber=no
30330aebab04SLingfeng Yangif test "$tsan" = "yes" ; then
30340aebab04SLingfeng Yang  write_c_skeleton
30350aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
30360aebab04SLingfeng Yang      have_tsan=yes
30370aebab04SLingfeng Yang  fi
30380aebab04SLingfeng Yang  cat > $TMPC << EOF
30390aebab04SLingfeng Yang#include <sanitizer/tsan_interface.h>
30400aebab04SLingfeng Yangint main(void) {
30410aebab04SLingfeng Yang  __tsan_create_fiber(0);
30420aebab04SLingfeng Yang  return 0;
30430aebab04SLingfeng Yang}
30440aebab04SLingfeng YangEOF
30450aebab04SLingfeng Yang  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
30460aebab04SLingfeng Yang      have_tsan_iface_fiber=yes
30470aebab04SLingfeng Yang  fi
30480aebab04SLingfeng Yangfi
30490aebab04SLingfeng Yang
3050adc28027SAlexander Bulekov##########################################
3051675b9b53SMarc-André Lureau# check for slirp
3052675b9b53SMarc-André Lureau
3053675b9b53SMarc-André Lureaucase "$slirp" in
30544d34a86bSPaolo Bonzini  auto | enabled | internal)
30554d34a86bSPaolo Bonzini    # Simpler to always update submodule, even if not needed.
30567c57bdd8SMarc-André Lureau    git_submodules="${git_submodules} slirp"
3057675b9b53SMarc-André Lureau    ;;
3058675b9b53SMarc-André Lureauesac
3059675b9b53SMarc-André Lureau
3060b8e0c493SJoelle van Dyne# Check for slirp smbd dupport
3061b8e0c493SJoelle van Dyne: ${smbd=${SMBD-/usr/sbin/smbd}}
3062b8e0c493SJoelle van Dyneif test "$slirp_smbd" != "no" ; then
3063b8e0c493SJoelle van Dyne  if test "$mingw32" = "yes" ; then
3064b8e0c493SJoelle van Dyne    if test "$slirp_smbd" = "yes" ; then
3065b8e0c493SJoelle van Dyne      error_exit "Host smbd not supported on this platform."
3066b8e0c493SJoelle van Dyne    fi
3067b8e0c493SJoelle van Dyne    slirp_smbd=no
3068b8e0c493SJoelle van Dyne  else
3069b8e0c493SJoelle van Dyne    slirp_smbd=yes
3070b8e0c493SJoelle van Dyne  fi
3071b8e0c493SJoelle van Dynefi
3072b8e0c493SJoelle van Dyne
307354e7aac0SAlexey Krasikov##########################################
307454e7aac0SAlexey Krasikov# check for usable __NR_keyctl syscall
307554e7aac0SAlexey Krasikov
307654e7aac0SAlexey Krasikovif test "$linux" = "yes" ; then
307754e7aac0SAlexey Krasikov
307854e7aac0SAlexey Krasikov    have_keyring=no
307954e7aac0SAlexey Krasikov    cat > $TMPC << EOF
308054e7aac0SAlexey Krasikov#include <errno.h>
308154e7aac0SAlexey Krasikov#include <asm/unistd.h>
308254e7aac0SAlexey Krasikov#include <linux/keyctl.h>
308354e7aac0SAlexey Krasikov#include <unistd.h>
308454e7aac0SAlexey Krasikovint main(void) {
308554e7aac0SAlexey Krasikov    return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
308654e7aac0SAlexey Krasikov}
308754e7aac0SAlexey KrasikovEOF
308854e7aac0SAlexey Krasikov    if compile_prog "" "" ; then
308954e7aac0SAlexey Krasikov        have_keyring=yes
309054e7aac0SAlexey Krasikov    fi
309154e7aac0SAlexey Krasikovfi
309254e7aac0SAlexey Krasikovif test "$secret_keyring" != "no"
309354e7aac0SAlexey Krasikovthen
3094b418d265SDavid Edmondson    if test "$have_keyring" = "yes"
309554e7aac0SAlexey Krasikov    then
309654e7aac0SAlexey Krasikov	secret_keyring=yes
309754e7aac0SAlexey Krasikov    else
309854e7aac0SAlexey Krasikov	if test "$secret_keyring" = "yes"
309954e7aac0SAlexey Krasikov	then
310054e7aac0SAlexey Krasikov	    error_exit "syscall __NR_keyctl requested, \
310154e7aac0SAlexey Krasikovbut not implemented on your system"
310254e7aac0SAlexey Krasikov	else
310354e7aac0SAlexey Krasikov	    secret_keyring=no
310454e7aac0SAlexey Krasikov	fi
310554e7aac0SAlexey Krasikov    fi
310654e7aac0SAlexey Krasikovfi
310754e7aac0SAlexey Krasikov
310892500362SAlexey Krasikov##########################################
3109e86ecd4bSJuan Quintela# End of CC checks
3110e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs
3111e86ecd4bSJuan Quintela
3112d83414e1SMarc-André Lureauwrite_c_skeleton
3113d83414e1SMarc-André Lureau
31141d728c39SBlue Swirlif test "$gcov" = "yes" ; then
3115bf0e56a3SMarc-André Lureau  :
3116b553a042SJohn Snowelif test "$fortify_source" = "yes" ; then
3117086d5f75SPaolo Bonzini  QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
3118086d5f75SPaolo Bonzini  debug=no
3119086d5f75SPaolo Bonzinifi
3120086d5f75SPaolo Bonzini
3121086d5f75SPaolo Bonzinicase "$ARCH" in
3122086d5f75SPaolo Bonzinialpha)
3123086d5f75SPaolo Bonzini  # Ensure there's only a single GP
3124086d5f75SPaolo Bonzini  QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
3125086d5f75SPaolo Bonzini;;
3126086d5f75SPaolo Bonziniesac
3127086d5f75SPaolo Bonzini
3128086d5f75SPaolo Bonziniif test "$gprof" = "yes" ; then
3129086d5f75SPaolo Bonzini  QEMU_CFLAGS="-p $QEMU_CFLAGS"
3130086d5f75SPaolo Bonzini  QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
3131086d5f75SPaolo Bonzinifi
3132a316e378SJuan Quintela
3133247724cbSMarc-André Lureauif test "$have_asan" = "yes"; then
3134db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
3135db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
3136d83414e1SMarc-André Lureau  if test "$have_asan_iface_h" = "no" ; then
3137d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header missing." \
3138d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
3139d83414e1SMarc-André Lureau  elif test "$have_asan_iface_fiber" = "no" ; then
3140d83414e1SMarc-André Lureau      echo "ASAN build enabled, but ASAN header is too old." \
3141d83414e1SMarc-André Lureau           "Without code annotation, the report may be inferior."
3142d83414e1SMarc-André Lureau  fi
3143247724cbSMarc-André Lureaufi
31440aebab04SLingfeng Yangif test "$have_tsan" = "yes" ; then
31450aebab04SLingfeng Yang  if test "$have_tsan_iface_fiber" = "yes" ; then
31460aebab04SLingfeng Yang    QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
31470aebab04SLingfeng Yang    QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
31480aebab04SLingfeng Yang  else
31490aebab04SLingfeng Yang    error_exit "Cannot enable TSAN due to missing fiber annotation interface."
31500aebab04SLingfeng Yang  fi
31510aebab04SLingfeng Yangelif test "$tsan" = "yes" ; then
31520aebab04SLingfeng Yang  error_exit "Cannot enable TSAN due to missing sanitize thread interface."
31530aebab04SLingfeng Yangfi
3154247724cbSMarc-André Lureauif test "$have_ubsan" = "yes"; then
3155db5adeaaSPaolo Bonzini  QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
3156db5adeaaSPaolo Bonzini  QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
3157247724cbSMarc-André Lureaufi
3158247724cbSMarc-André Lureau
31596542aa9cSPeter Lieven##########################################
31603efac6ebSTomáš Golembiovský
31610aebab04SLingfeng Yang# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
31620aebab04SLingfeng Yangif test "$solaris" = "no" && test "$tsan" = "no"; then
3163e86ecd4bSJuan Quintela    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
3164db5adeaaSPaolo Bonzini        QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
3165e86ecd4bSJuan Quintela    fi
3166e86ecd4bSJuan Quintelafi
3167e86ecd4bSJuan Quintela
3168952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available
3169952afb71SBlue Swirlif test "$mingw32" = "yes" ; then
3170cb8baa77SMark Cave-Ayland    flags="--no-seh --nxcompat"
3171cb8baa77SMark Cave-Ayland
3172cb8baa77SMark Cave-Ayland    # Disable ASLR for debug builds to allow debugging with gdb
3173cb8baa77SMark Cave-Ayland    if test "$debug" = "no" ; then
3174cb8baa77SMark Cave-Ayland        flags="--dynamicbase $flags"
3175cb8baa77SMark Cave-Ayland    fi
3176cb8baa77SMark Cave-Ayland
3177cb8baa77SMark Cave-Ayland    for flag in $flags; do
3178e9a3591fSChristian Borntraeger        if ld_has $flag ; then
3179db5adeaaSPaolo Bonzini            QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
3180952afb71SBlue Swirl        fi
3181952afb71SBlue Swirl    done
3182952afb71SBlue Swirlfi
3183952afb71SBlue Swirl
31849d6bc27bSMichael Roth# Probe for guest agent support/options
31859d6bc27bSMichael Roth
3186e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then
3187a5125905SLaurent Vivier  if [ "$softmmu" = no -a "$want_tools" = no ] ; then
3188a5125905SLaurent Vivier      guest_agent=no
3189a5125905SLaurent Vivier  elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
3190e8ef31a3SMichael Tokarev      guest_agent=yes
3191e8ef31a3SMichael Tokarev  elif [ "$guest_agent" != yes ]; then
3192e8ef31a3SMichael Tokarev      guest_agent=no
3193e8ef31a3SMichael Tokarev  else
3194e8ef31a3SMichael Tokarev      error_exit "Guest agent is not supported on this platform"
3195ca35f780SPaolo Bonzini  fi
31964b1c11fdSDaniel P. Berrangefi
3197ca35f780SPaolo Bonzini
3198b846ab7cSPaolo Bonzini# Guest agent Windows MSI package
31999d6bc27bSMichael Roth
32009d6bc27bSMichael Rothif test "$QEMU_GA_MANUFACTURER" = ""; then
32019d6bc27bSMichael Roth  QEMU_GA_MANUFACTURER=QEMU
32029d6bc27bSMichael Rothfi
32039d6bc27bSMichael Rothif test "$QEMU_GA_DISTRO" = ""; then
32049d6bc27bSMichael Roth  QEMU_GA_DISTRO=Linux
32059d6bc27bSMichael Rothfi
32069d6bc27bSMichael Rothif test "$QEMU_GA_VERSION" = ""; then
320789138857SStefan Weil    QEMU_GA_VERSION=$(cat $source_path/VERSION)
32089d6bc27bSMichael Rothfi
32099d6bc27bSMichael Roth
3210b846ab7cSPaolo BonziniQEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
32119d6bc27bSMichael Roth
3212ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler
3213ca35f780SPaolo Bonziniroms=
3214e633a5c6SEric Blakeif { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
3215ba7c60c2SPaolo Bonzini        test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
3216ba7c60c2SPaolo Bonzini        test "$targetos" != "haiku" && test "$softmmu" = yes ; then
3217e57218b6SPeter Maydell    # Different host OS linkers have different ideas about the name of the ELF
3218c65d5e4eSBrad Smith    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
3219c65d5e4eSBrad Smith    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
3220c65d5e4eSBrad Smith    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
3221e57218b6SPeter Maydell        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
3222e57218b6SPeter Maydell            ld_i386_emulation="$emu"
3223ca35f780SPaolo Bonzini            roms="optionrom"
3224e57218b6SPeter Maydell            break
3225e57218b6SPeter Maydell        fi
3226e57218b6SPeter Maydell    done
3227ca35f780SPaolo Bonzinifi
3228ca35f780SPaolo Bonzini
32292e33c3f8SThomas Huth# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
3230a5b2afd5SThomas Huth# or -march=z10 (which is the lowest architecture level that Clang supports)
32319933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then
32322e33c3f8SThomas Huth  write_c_skeleton
3233a5b2afd5SThomas Huth  compile_prog "-march=z900" ""
3234a5b2afd5SThomas Huth  has_z900=$?
32353af448b3SThomas Huth  if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then
3236a5b2afd5SThomas Huth    if [ $has_z900 != 0 ]; then
3237a5b2afd5SThomas Huth      echo "WARNING: Your compiler does not support the z900!"
3238a5b2afd5SThomas Huth      echo "         The s390-ccw bios will only work with guest CPUs >= z10."
3239a5b2afd5SThomas Huth    fi
32409933c305SChristian Borntraeger    roms="$roms s390-ccw"
32411ef6bfc2SPhilippe Mathieu-Daudé    # SLOF is required for building the s390-ccw firmware on s390x,
32421ef6bfc2SPhilippe Mathieu-Daudé    # since it is using the libnet code from SLOF for network booting.
32431ef6bfc2SPhilippe Mathieu-Daudé    git_submodules="${git_submodules} roms/SLOF"
32441ef6bfc2SPhilippe Mathieu-Daudé  fi
32459933c305SChristian Borntraegerfi
32469933c305SChristian Borntraeger
324711cde1c8SBruno Dominguez# Check that the C++ compiler exists and works with the C compiler.
324811cde1c8SBruno 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.
324911cde1c8SBruno Dominguezif has $cxx; then
325011cde1c8SBruno Dominguez    cat > $TMPC <<EOF
325111cde1c8SBruno Dominguezint c_function(void);
325211cde1c8SBruno Dominguezint main(void) { return c_function(); }
325311cde1c8SBruno DominguezEOF
325411cde1c8SBruno Dominguez
325511cde1c8SBruno Dominguez    compile_object
325611cde1c8SBruno Dominguez
325711cde1c8SBruno Dominguez    cat > $TMPCXX <<EOF
325811cde1c8SBruno Dominguezextern "C" {
325911cde1c8SBruno Dominguez   int c_function(void);
326011cde1c8SBruno Dominguez}
326111cde1c8SBruno Dominguezint c_function(void) { return 42; }
326211cde1c8SBruno DominguezEOF
326311cde1c8SBruno Dominguez
326411cde1c8SBruno Dominguez    update_cxxflags
326511cde1c8SBruno Dominguez
3266a2866660SPaolo Bonzini    if do_cxx $CXXFLAGS $EXTRA_CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
326711cde1c8SBruno Dominguez        # C++ compiler $cxx works ok with C compiler $cc
326811cde1c8SBruno Dominguez        :
326911cde1c8SBruno Dominguez    else
327011cde1c8SBruno Dominguez        echo "C++ compiler $cxx does not work with C compiler $cc"
327111cde1c8SBruno Dominguez        echo "Disabling C++ specific optional code"
327211cde1c8SBruno Dominguez        cxx=
327311cde1c8SBruno Dominguez    fi
327411cde1c8SBruno Dominguezelse
327511cde1c8SBruno Dominguez    echo "No C++ compiler available; disabling C++ specific optional code"
327611cde1c8SBruno Dominguez    cxx=
327711cde1c8SBruno Dominguezfi
327811cde1c8SBruno Dominguez
32797d7dbf9dSDan Streetmanif !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
32807d7dbf9dSDan Streetman    exit 1
32815d91a2edSYonggang Luofi
32825d91a2edSYonggang Luo
328398ec69acSJuan Quintelaconfig_host_mak="config-host.mak"
328497a847bcSbellard
328598ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak
328698ec69acSJuan Quintelaecho >> $config_host_mak
328798ec69acSJuan Quintela
3288e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak
3289cc84d63aSDaniel P. Berrangeecho "GIT=$git" >> $config_host_mak
3290aef45d51SDaniel P. Berrangeecho "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
32917d7dbf9dSDan Streetmanecho "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
3292804edf29SJuan Quintela
3293f8393946Saurel32if test "$debug_tcg" = "yes" ; then
32942358a494SJuan Quintela  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
3295f8393946Saurel32fi
329667b915a5Sbellardif test "$mingw32" = "yes" ; then
329798ec69acSJuan Quintela  echo "CONFIG_WIN32=y" >> $config_host_mak
3298d9840e25STomoki Sekiyama  if test "$guest_agent_with_vss" = "yes" ; then
3299d9840e25STomoki Sekiyama    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
3300f33ca81fSMichael Roth    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
3301d9840e25STomoki Sekiyama    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
3302d9840e25STomoki Sekiyama  fi
330350cbebb9SMichael Roth  if test "$guest_agent_ntddscsi" = "yes" ; then
330476dc75caSTomáš Golembiovský    echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
330550cbebb9SMichael Roth  fi
33069dacf32dSYossi Hindin  echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
33079dacf32dSYossi Hindin  echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
33089dacf32dSYossi Hindin  echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
33099dacf32dSYossi Hindin  echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
3310210fa556Spbrookelse
331135f4df27SJuan Quintela  echo "CONFIG_POSIX=y" >> $config_host_mak
3312210fa556Spbrookfi
3313128ab2ffSblueswir1
3314dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then
3315dffcb71cSMark McLoughlin  echo "CONFIG_LINUX=y" >> $config_host_mak
3316dffcb71cSMark McLoughlinfi
3317dffcb71cSMark McLoughlin
331883fb7adfSbellardif test "$darwin" = "yes" ; then
331998ec69acSJuan Quintela  echo "CONFIG_DARWIN=y" >> $config_host_mak
332083fb7adfSbellardfi
3321b29fe3edSmalc
3322ec530c81Sbellardif test "$solaris" = "yes" ; then
332398ec69acSJuan Quintela  echo "CONFIG_SOLARIS=y" >> $config_host_mak
3324ec530c81Sbellardfi
332597a847bcSbellardif test "$static" = "yes" ; then
332698ec69acSJuan Quintela  echo "CONFIG_STATIC=y" >> $config_host_mak
332797a847bcSbellardfi
33281ba16968SStefan Weilif test "$profiler" = "yes" ; then
33292358a494SJuan Quintela  echo "CONFIG_PROFILER=y" >> $config_host_mak
333005c2a3e7Sbellardfi
3331c932ce31SPaolo Bonziniif test "$want_tools" = "yes" ; then
3332c932ce31SPaolo Bonzini  echo "CONFIG_TOOLS=y" >> $config_host_mak
3333c932ce31SPaolo Bonzinifi
3334f15bff25SPaolo Bonziniif test "$guest_agent" = "yes" ; then
3335f15bff25SPaolo Bonzini  echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
3336f15bff25SPaolo Bonzinifi
3337b8e0c493SJoelle van Dyneif test "$slirp_smbd" = "yes" ; then
3338b8e0c493SJoelle van Dyne  echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
3339e2d8830eSBrad  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
3340b8e0c493SJoelle van Dynefi
33414cc600d2SPaolo Bonziniif test "$gprof" = "yes" ; then
33424cc600d2SPaolo Bonzini  echo "CONFIG_GPROF=y" >> $config_host_mak
33434cc600d2SPaolo Bonzinifi
3344b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
3345b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
3346e5f05f8cSKevin Wolfif test "$block_drv_whitelist_tools" = "yes" ; then
3347e5f05f8cSKevin Wolf  echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
3348e5f05f8cSKevin Wolffi
334989138857SStefan Weilqemu_version=$(head $source_path/VERSION)
33502358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak
335198ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak
33522b1f35b9SAlex Bennéeecho "TARGET_DIRS=$target_list" >> $config_host_mak
335317969268SFam Zhengif test "$modules" = "yes"; then
3354e26110cfSFam Zheng  # $shacmd can generate a hash started with digit, which the compiler doesn't
3355e26110cfSFam Zheng  # like as an symbol. So prefix it with an underscore
335689138857SStefan Weil  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
335717969268SFam Zheng  echo "CONFIG_MODULES=y" >> $config_host_mak
335817969268SFam Zhengfi
3359bd83c861SChristian Ehrhardtif test "$module_upgrades" = "yes"; then
3360bd83c861SChristian Ehrhardt  echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
3361bd83c861SChristian Ehrhardtfi
3362955727d2SCortland Tölvaif test "$have_usbfs" = "yes" ; then
3363955727d2SCortland Tölva  echo "CONFIG_USBFS=y" >> $config_host_mak
3364955727d2SCortland Tölvafi
3365f876b765SMarc-André Lureauif test "$gio" = "yes" ; then
3366f876b765SMarc-André Lureau    echo "CONFIG_GIO=y" >> $config_host_mak
3367f876b765SMarc-André Lureau    echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
3368f876b765SMarc-André Lureau    echo "GIO_LIBS=$gio_libs" >> $config_host_mak
33695ecfb76cSPaolo Bonzinifi
33705ecfb76cSPaolo Bonziniif test "$gdbus_codegen" != "" ; then
337125a97a56SMarc-André Lureau    echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
3372f876b765SMarc-André Lureaufi
3373a1c5e949SDaniel P. Berrangeecho "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
3374277abf15SJan Vesely
33751badb709SPaolo Bonziniif test "$xen" = "enabled" ; then
33766dbd588aSJan Kiszka  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
3377d5b93ddfSAnthony PERARD  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
3378582ea95fSMarc-André Lureau  echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
3379582ea95fSMarc-André Lureau  echo "XEN_LIBS=$xen_libs" >> $config_host_mak
3380e37630caSaliguorifi
33815e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then
33825e9be92dSNicholas Bellinger  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
33835e9be92dSNicholas Bellingerfi
3384af3bba76SPaolo Bonziniif test "$vhost_net" = "yes" ; then
3385af3bba76SPaolo Bonzini  echo "CONFIG_VHOST_NET=y" >> $config_host_mak
3386af3bba76SPaolo Bonzinifi
3387af3bba76SPaolo Bonziniif test "$vhost_net_user" = "yes" ; then
338856f41de7SPaolo Bonzini  echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
338903ce5744SNikolay Nikolaevfi
3390108a6481SCindy Luif test "$vhost_net_vdpa" = "yes" ; then
3391108a6481SCindy Lu  echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
3392108a6481SCindy Lufi
3393042cea27SGongleiif test "$vhost_crypto" = "yes" ; then
3394042cea27SGonglei  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
3395042cea27SGongleifi
3396fc0b9b0eSStefan Hajnocziif test "$vhost_vsock" = "yes" ; then
3397fc0b9b0eSStefan Hajnoczi  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
33985fe97d88SStefano Garzarella  if test "$vhost_user" = "yes" ; then
33995fe97d88SStefano Garzarella    echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
34005fe97d88SStefano Garzarella  fi
3401fc0b9b0eSStefan Hajnoczifi
3402299e6f19SPaolo Bonziniif test "$vhost_kernel" = "yes" ; then
3403299e6f19SPaolo Bonzini  echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
3404299e6f19SPaolo Bonzinifi
3405e6a74868SMarc-André Lureauif test "$vhost_user" = "yes" ; then
3406e6a74868SMarc-André Lureau  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
3407e6a74868SMarc-André Lureaufi
3408108a6481SCindy Luif test "$vhost_vdpa" = "yes" ; then
3409108a6481SCindy Lu  echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
3410108a6481SCindy Lufi
341198fc1adaSDr. David Alan Gilbertif test "$vhost_user_fs" = "yes" ; then
341298fc1adaSDr. David Alan Gilbert  echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
341398fc1adaSDr. David Alan Gilbertfi
3414a40161cbSPaolo Bonziniif test "$membarrier" = "yes" ; then
3415a40161cbSPaolo Bonzini  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
3416a40161cbSPaolo Bonzinifi
3417e5b46549SRichard Hendersonif test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
3418e5b46549SRichard Henderson  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
3419e5b46549SRichard Hendersonfi
342058d3f3ffSGerd Hoffmann
3421da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then
3422da076ffeSGerd Hoffmann  echo "CONFIG_OPENGL=y" >> $config_host_mak
3423de2d3005SPaolo Bonzini  echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
3424da076ffeSGerd Hoffmann  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
342520ff075bSMichael Wallefi
342620ff075bSMichael Walle
342799f2dbd3SLiang Liif test "$avx2_opt" = "yes" ; then
342899f2dbd3SLiang Li  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
342999f2dbd3SLiang Lifi
343099f2dbd3SLiang Li
34316b8cd447SRobert Hooif test "$avx512f_opt" = "yes" ; then
34326b8cd447SRobert Hoo  echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
34336b8cd447SRobert Hoofi
34346b8cd447SRobert Hoo
343583fb7adfSbellard# XXX: suppress that
34367d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
34372358a494SJuan Quintela  echo "CONFIG_BSD=y" >> $config_host_mak
34387d3505c5Sbellardfi
34397d3505c5Sbellard
34403556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then
34413556c233SPaolo Bonzini  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
34423556c233SPaolo Bonzinifi
344320ff6c80SAnthony Liguori
34447c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
344570c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then
344670c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
344770c60c08SStefan Hajnoczielse
344870c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
344970c60c08SStefan Hajnoczifi
3450d0e2fce5SAneesh Kumar K.V
34517d992e4dSPeter Lievenif test "$debug_stack_usage" = "yes" ; then
34527d992e4dSPeter Lieven  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
34537d992e4dSPeter Lievenfi
34547d992e4dSPeter Lieven
3455f0d92b56SLongpeng(Mike)if test "$crypto_afalg" = "yes" ; then
3456f0d92b56SLongpeng(Mike)  echo "CONFIG_AF_ALG=y" >> $config_host_mak
3457f0d92b56SLongpeng(Mike)fi
3458f0d92b56SLongpeng(Mike)
3459d83414e1SMarc-André Lureauif test "$have_asan_iface_fiber" = "yes" ; then
3460d83414e1SMarc-André Lureau    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
3461d83414e1SMarc-André Lureaufi
3462d83414e1SMarc-André Lureau
34630aebab04SLingfeng Yangif test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
34640aebab04SLingfeng Yang    echo "CONFIG_TSAN=y" >> $config_host_mak
34650aebab04SLingfeng Yangfi
34660aebab04SLingfeng Yang
346776a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then
346876a347e1SRichard Henderson  echo "CONFIG_CPUID_H=y" >> $config_host_mak
346976a347e1SRichard Hendersonfi
347076a347e1SRichard Henderson
3471f540166bSRichard Hendersonif test "$int128" = "yes" ; then
3472f540166bSRichard Henderson  echo "CONFIG_INT128=y" >> $config_host_mak
3473f540166bSRichard Hendersonfi
3474f540166bSRichard Henderson
34757ebee43eSRichard Hendersonif test "$atomic128" = "yes" ; then
34767ebee43eSRichard Henderson  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
34777ebee43eSRichard Hendersonfi
34787ebee43eSRichard Henderson
3479e6cd4bb5SRichard Hendersonif test "$cmpxchg128" = "yes" ; then
3480e6cd4bb5SRichard Henderson  echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
3481e6cd4bb5SRichard Hendersonfi
3482e6cd4bb5SRichard Henderson
3483ed1701c6SDr. David Alan Gilbertif test "$live_block_migration" = "yes" ; then
3484ed1701c6SDr. David Alan Gilbert  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
3485ed1701c6SDr. David Alan Gilbertfi
3486ed1701c6SDr. David Alan Gilbert
34873b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then
34883cae16dbSPaolo Bonzini  echo 'CONFIG_TPM=y' >> $config_host_mak
34893b8acc11SPaolo Bonzinifi
34903b8acc11SPaolo Bonzini
34912da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then
34922da776dbSMichael R. Hines  echo "CONFIG_RDMA=y" >> $config_host_mak
3493392fb643SFam Zheng  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
34942da776dbSMichael R. Hinesfi
34952da776dbSMichael R. Hines
349621ab34c9SMarcel Apfelbaumif test "$pvrdma" = "yes" ; then
349721ab34c9SMarcel Apfelbaum  echo "CONFIG_PVRDMA=y" >> $config_host_mak
349821ab34c9SMarcel Apfelbaumfi
349921ab34c9SMarcel Apfelbaum
3500a6b1d4c0SChanglong Xieif test "$replication" = "yes" ; then
3501a6b1d4c0SChanglong Xie  echo "CONFIG_REPLICATION=y" >> $config_host_mak
3502a6b1d4c0SChanglong Xiefi
3503a6b1d4c0SChanglong Xie
3504ba59fb77SPaolo Bonziniif test "$debug_mutex" = "yes" ; then
3505ba59fb77SPaolo Bonzini  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
3506ba59fb77SPaolo Bonzinifi
3507e0580342SKamil Rytarowski
35082f740136SJeff Codyif test "$bochs" = "yes" ; then
35092f740136SJeff Cody  echo "CONFIG_BOCHS=y" >> $config_host_mak
35102f740136SJeff Codyfi
35112f740136SJeff Codyif test "$cloop" = "yes" ; then
35122f740136SJeff Cody  echo "CONFIG_CLOOP=y" >> $config_host_mak
35132f740136SJeff Codyfi
35142f740136SJeff Codyif test "$dmg" = "yes" ; then
35152f740136SJeff Cody  echo "CONFIG_DMG=y" >> $config_host_mak
35162f740136SJeff Codyfi
35172f740136SJeff Codyif test "$qcow1" = "yes" ; then
35182f740136SJeff Cody  echo "CONFIG_QCOW1=y" >> $config_host_mak
35192f740136SJeff Codyfi
35202f740136SJeff Codyif test "$vdi" = "yes" ; then
35212f740136SJeff Cody  echo "CONFIG_VDI=y" >> $config_host_mak
35222f740136SJeff Codyfi
35232f740136SJeff Codyif test "$vvfat" = "yes" ; then
35242f740136SJeff Cody  echo "CONFIG_VVFAT=y" >> $config_host_mak
35252f740136SJeff Codyfi
35262f740136SJeff Codyif test "$qed" = "yes" ; then
35272f740136SJeff Cody  echo "CONFIG_QED=y" >> $config_host_mak
35282f740136SJeff Codyfi
35292f740136SJeff Codyif test "$parallels" = "yes" ; then
35302f740136SJeff Cody  echo "CONFIG_PARALLELS=y" >> $config_host_mak
35312f740136SJeff Codyfi
35322f740136SJeff Cody
353340e8c6f4SAlex Bennéeif test "$plugins" = "yes" ; then
353440e8c6f4SAlex Bennée    echo "CONFIG_PLUGIN=y" >> $config_host_mak
353540e8c6f4SAlex Bennéefi
353640e8c6f4SAlex Bennée
3537f48e590aSAlex Bennéeif test -n "$gdb_bin"; then
3538b1863cccSAlex Bennée    gdb_version=$($gdb_bin --version | head -n 1)
3539d6a66c81SAlex Bennée    if version_ge ${gdb_version##* } 9.1; then
3540f48e590aSAlex Bennée        echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
3541f48e590aSAlex Bennée    fi
3542b1863cccSAlex Bennéefi
3543f48e590aSAlex Bennée
354454e7aac0SAlexey Krasikovif test "$secret_keyring" = "yes" ; then
354554e7aac0SAlexey Krasikov  echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
354654e7aac0SAlexey Krasikovfi
354754e7aac0SAlexey Krasikov
354898ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak
3549804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak
3550c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak
355139d87c8cSAlex Bennéeecho "GENISOIMAGE=$genisoimage" >> $config_host_mak
3552a5665051SPaolo Bonziniecho "MESON=$meson" >> $config_host_mak
355309e93326SPaolo Bonziniecho "NINJA=$ninja" >> $config_host_mak
3554804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak
3555433de74cSBastian Koppelmannecho "HOST_CC=$host_cc" >> $config_host_mak
3556a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then
3557859aef02SPaolo Bonzini  echo "CONFIG_IASL=$iasl" >> $config_host_mak
3558a31a8642SMichael S. Tsirkinfi
3559804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak
3560cdbd727cSRichard Hendersonecho "AS=$as" >> $config_host_mak
35615f6f0e27SRichard Hendersonecho "CCAS=$ccas" >> $config_host_mak
35623dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak
3563804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak
3564804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak
356546eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
3566a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
356711cde1c8SBruno Dominguezecho "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
3568a81df1b6SPaolo Bonziniecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
3569a81df1b6SPaolo Bonziniecho "GLIB_LIBS=$glib_libs" >> $config_host_mak
3570d83acfd0SMarc-André Lureauecho "GLIB_VERSION=$(pkg-config --modversion glib-2.0)" >> $config_host_mak
35718a99e9a3SPhilippe Mathieu-Daudéecho "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
3572e57218b6SPeter Maydellecho "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
3573a70248dbSPaolo Bonziniecho "STRIP=$strip" >> $config_host_mak
3574804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak
3575f15bff25SPaolo Bonziniecho "LIBS_QGA=$libs_qga" >> $config_host_mak
3576804edf29SJuan Quintela
3577b767d257SMarek Marczykowski-Góreckiif test "$rng_none" = "yes"; then
3578b767d257SMarek Marczykowski-Górecki  echo "CONFIG_RNG_NONE=y" >> $config_host_mak
3579b767d257SMarek Marczykowski-Góreckifi
3580b767d257SMarek Marczykowski-Górecki
35816efd7517SPeter Maydell# use included Linux headers
35826efd7517SPeter Maydellif test "$linux" = "yes" ; then
3583a307beb6SAndreas Färber  mkdir -p linux-headers
35846efd7517SPeter Maydell  case "$cpu" in
35854da270beSPaolo Bonzini  i386|x86_64)
358608312a63SPeter Maydell    linux_arch=x86
35876efd7517SPeter Maydell    ;;
3588d8ff892dSPaolo Bonzini  ppc|ppc64)
358908312a63SPeter Maydell    linux_arch=powerpc
35906efd7517SPeter Maydell    ;;
35916efd7517SPeter Maydell  s390x)
359208312a63SPeter Maydell    linux_arch=s390
359308312a63SPeter Maydell    ;;
35941f080313SClaudio Fontana  aarch64)
35951f080313SClaudio Fontana    linux_arch=arm64
35961f080313SClaudio Fontana    ;;
3597dfcf900bSWANG Xuerui  loongarch*)
3598dfcf900bSWANG Xuerui    linux_arch=loongarch
3599dfcf900bSWANG Xuerui    ;;
3600222e7d11SSanjay Lal  mips64)
3601222e7d11SSanjay Lal    linux_arch=mips
3602222e7d11SSanjay Lal    ;;
360308312a63SPeter Maydell  *)
360408312a63SPeter Maydell    # For most CPUs the kernel architecture name and QEMU CPU name match.
360508312a63SPeter Maydell    linux_arch="$cpu"
36066efd7517SPeter Maydell    ;;
36076efd7517SPeter Maydell  esac
360808312a63SPeter Maydell    # For non-KVM architectures we will not have asm headers
360908312a63SPeter Maydell    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
361008312a63SPeter Maydell      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
361108312a63SPeter Maydell    fi
36126efd7517SPeter Maydellfi
36136efd7517SPeter Maydell
361497a847bcSbellardfor target in $target_list; do
361597a847bcSbellard    target_dir="$target"
361657a93f16SPhilippe Mathieu-Daudé    target_name=$(echo $target | cut -d '-' -f 1)$EXESUF
361797a847bcSbellard    mkdir -p $target_dir
3618fdb75aefSPaolo Bonzini    case $target in
3619fdb75aefSPaolo Bonzini        *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
3620fdb75aefSPaolo Bonzini        *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
36212408a527Saurel32    esac
362256aebc89Spbrookdone
36237d13299dSbellard
3624765686d6SPaolo Bonziniecho "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
3625fdb75aefSPaolo Bonziniif test "$default_targets" = "yes"; then
3626fdb75aefSPaolo Bonzini  echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
3627fdb75aefSPaolo Bonzinifi
3628a540f158SPeter Crosthwaite
3629a99d57bbSWanlong Gaoif test "$numa" = "yes"; then
3630a99d57bbSWanlong Gao  echo "CONFIG_NUMA=y" >> $config_host_mak
3631ab318051SMarc-André Lureau  echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
3632a99d57bbSWanlong Gaofi
3633a99d57bbSWanlong Gao
3634fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then
3635fd0e6053SJohn Snow  echo "export CCACHE_CPP2=y" >> $config_host_mak
3636fd0e6053SJohn Snowfi
3637fd0e6053SJohn Snow
36381e4f6065SDaniele Buonoif test "$safe_stack" = "yes"; then
36391e4f6065SDaniele Buono  echo "CONFIG_SAFESTACK=y" >> $config_host_mak
36401e4f6065SDaniele Buonofi
36411e4f6065SDaniele Buono
3642e29e5c6eSPeter Maydell# If we're using a separate build tree, set it up now.
3643e29e5c6eSPeter Maydell# LINKS are things to symlink back into the source tree
3644e29e5c6eSPeter Maydell# (these can be both files and directories).
3645e29e5c6eSPeter Maydell# Caution: do not add files or directories here using wildcards. This
3646e29e5c6eSPeter Maydell# will result in problems later if a new file matching the wildcard is
3647e29e5c6eSPeter Maydell# added to the source tree -- nothing will cause configure to be rerun
3648e29e5c6eSPeter Maydell# so the build tree will be missing the link back to the new file, and
3649e29e5c6eSPeter Maydell# tests might fail. Prefer to keep the relevant files in their own
3650e29e5c6eSPeter Maydell# directory and symlink the directory instead.
36512038f8c8SPaolo BonziniLINKS="Makefile"
36523941996bSPaolo BonziniLINKS="$LINKS tests/tcg/Makefile.target"
3653ddcf607fSGerd HoffmannLINKS="$LINKS pc-bios/optionrom/Makefile"
3654e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/s390-ccw/Makefile"
36558db2a4fdSGerd HoffmannLINKS="$LINKS roms/seabios/Makefile"
3656e29e5c6eSPeter MaydellLINKS="$LINKS pc-bios/qemu-icon.bmp"
3657e29e5c6eSPeter MaydellLINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
3658bbbd9b6eSWillian RampazzoLINKS="$LINKS tests/avocado tests/data"
365939950353SPeter MaydellLINKS="$LINKS tests/qemu-iotests/check"
36608f8fd9edSCleber RosaLINKS="$LINKS python"
3661c17a386bSAlex BennéeLINKS="$LINKS contrib/plugins/Makefile "
3662753d11f2SRichard Hendersonfor bios_file in \
3663753d11f2SRichard Henderson    $source_path/pc-bios/*.bin \
36643a631b8eSBin Meng    $source_path/pc-bios/*.elf \
3665225a9ab8SAlexey Kardashevskiy    $source_path/pc-bios/*.lid \
3666753d11f2SRichard Henderson    $source_path/pc-bios/*.rom \
3667753d11f2SRichard Henderson    $source_path/pc-bios/*.dtb \
3668e89e33e1SDominik Dingel    $source_path/pc-bios/*.img \
3669753d11f2SRichard Henderson    $source_path/pc-bios/openbios-* \
36704e73c781SAlexander Graf    $source_path/pc-bios/u-boot.* \
3671cd946e5cSJohn Arbuckle    $source_path/pc-bios/palcode-* \
3672cd946e5cSJohn Arbuckle    $source_path/pc-bios/qemu_vga.ndrv
3673cd946e5cSJohn Arbuckle
3674753d11f2SRichard Hendersondo
3675e29e5c6eSPeter Maydell    LINKS="$LINKS pc-bios/$(basename $bios_file)"
36767ea78b74SJan Kiszkadone
3677e29e5c6eSPeter Maydellfor f in $LINKS ; do
36780f4d8894SPaolo Bonzini    if [ -e "$source_path/$f" ]; then
36795dce7b8dSPaolo Bonzini        mkdir -p `dirname ./$f`
3680f9245e10SPeter Maydell        symlink "$source_path/$f" "$f"
3681f9245e10SPeter Maydell    fi
36827d13299dSbellarddone
36831ad2134fSPaul Brook
36842038f8c8SPaolo Bonzini(for i in $cross_cc_vars; do
36852038f8c8SPaolo Bonzini  export $i
36862038f8c8SPaolo Bonzinidone
3687fd0f79d7SRichard Hendersonexport target_list source_path use_containers cpu
36882038f8c8SPaolo Bonzini$source_path/tests/tcg/configure.sh)
36892038f8c8SPaolo Bonzini
3690c34ebfdcSAnthony Liguori# temporary config to build submodules
3691bb7cb3adSPaolo Bonziniif test -f $source_path/roms/seabios/Makefile; then
36928db2a4fdSGerd Hoffmann  for rom in seabios; do
3693c34ebfdcSAnthony Liguori    config_mak=roms/$rom/config.mak
369437116c89SStefan Weil    echo "# Automatically generated by configure - do not modify" > $config_mak
3695c34ebfdcSAnthony Liguori    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
3696cdbd727cSRichard Henderson    echo "AS=$as" >> $config_mak
36975f6f0e27SRichard Henderson    echo "CCAS=$ccas" >> $config_mak
3698c34ebfdcSAnthony Liguori    echo "CC=$cc" >> $config_mak
3699c34ebfdcSAnthony Liguori    echo "BCC=bcc" >> $config_mak
37003dd46c78SBlue Swirl    echo "CPP=$cpp" >> $config_mak
3701c34ebfdcSAnthony Liguori    echo "OBJCOPY=objcopy" >> $config_mak
3702a31a8642SMichael S. Tsirkin    echo "IASL=$iasl" >> $config_mak
3703c34ebfdcSAnthony Liguori    echo "LD=$ld" >> $config_mak
37049f81aeb5SAlistair Francis    echo "RANLIB=$ranlib" >> $config_mak
3705c34ebfdcSAnthony Liguori  done
3706bb7cb3adSPaolo Bonzinifi
3707c34ebfdcSAnthony Liguori
370898409991SHelge Konetzkaconfig_mak=pc-bios/optionrom/config.mak
370998409991SHelge Konetzkaecho "# Automatically generated by configure - do not modify" > $config_mak
371098409991SHelge Konetzkaecho "TOPSRC_DIR=$source_path" >> $config_mak
371198409991SHelge Konetzka
3712a5665051SPaolo Bonziniif test "$skip_meson" = no; then
3713fc929892SMarc-André Lureau  cross="config-meson.cross.new"
3714fc929892SMarc-André Lureau  meson_quote() {
3715ac7ebcc5SPaolo Bonzini    test $# = 0 && return
371647b30835SPaolo Bonzini    echo "'$(echo $* | sed "s/ /','/g")'"
3717fc929892SMarc-André Lureau  }
3718fc929892SMarc-André Lureau
3719fc929892SMarc-André Lureau  echo "# Automatically generated by configure - do not modify" > $cross
3720fc929892SMarc-André Lureau  echo "[properties]" >> $cross
3721d1d5e9eeSAlex Bennée
3722d1d5e9eeSAlex Bennée  # unroll any custom device configs
3723d1d5e9eeSAlex Bennée  for a in $device_archs; do
3724d1d5e9eeSAlex Bennée      eval "c=\$devices_${a}"
3725d1d5e9eeSAlex Bennée      echo "${a}-softmmu = '$c'" >> $cross
3726d1d5e9eeSAlex Bennée  done
3727d1d5e9eeSAlex Bennée
3728fc929892SMarc-André Lureau  test -z "$cxx" && echo "link_language = 'c'" >> $cross
372947b30835SPaolo Bonzini  echo "[built-in options]" >> $cross
3730a2866660SPaolo Bonzini  echo "c_args = [$(meson_quote $CFLAGS $EXTRA_CFLAGS)]" >> $cross
3731a2866660SPaolo Bonzini  echo "cpp_args = [$(meson_quote $CXXFLAGS $EXTRA_CXXFLAGS)]" >> $cross
3732a2866660SPaolo Bonzini  echo "c_link_args = [$(meson_quote $CFLAGS $LDFLAGS $EXTRA_CFLAGS $EXTRA_LDFLAGS)]" >> $cross
3733a2866660SPaolo Bonzini  echo "cpp_link_args = [$(meson_quote $CXXFLAGS $LDFLAGS $EXTRA_CXXFLAGS $EXTRA_LDFLAGS)]" >> $cross
3734fc929892SMarc-André Lureau  echo "[binaries]" >> $cross
37354dba2789SPaolo Bonzini  echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
37364dba2789SPaolo Bonzini  test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
37374dba2789SPaolo Bonzini  test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross
373847b30835SPaolo Bonzini  echo "ar = [$(meson_quote $ar)]" >> $cross
373947b30835SPaolo Bonzini  echo "nm = [$(meson_quote $nm)]" >> $cross
374047b30835SPaolo Bonzini  echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
374147b30835SPaolo Bonzini  echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
3742e8178514SPaolo Bonzini  if has $sdl2_config; then
374347b30835SPaolo Bonzini    echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
3744e8178514SPaolo Bonzini  fi
374547b30835SPaolo Bonzini  echo "strip = [$(meson_quote $strip)]" >> $cross
374647b30835SPaolo Bonzini  echo "windres = [$(meson_quote $windres)]" >> $cross
37473812c0c4SJoelle van Dyne  if test "$cross_compile" = "yes"; then
3748fc929892SMarc-André Lureau    cross_arg="--cross-file config-meson.cross"
3749fc929892SMarc-André Lureau    echo "[host_machine]" >> $cross
3750ba7c60c2SPaolo Bonzini    echo "system = '$targetos'" >> $cross
3751823eb013SPaolo Bonzini    case "$cpu" in
3752f6bca9dfSJoelle van Dyne        i386)
3753fc929892SMarc-André Lureau            echo "cpu_family = 'x86'" >> $cross
3754fc929892SMarc-André Lureau            ;;
3755fc929892SMarc-André Lureau        *)
3756823eb013SPaolo Bonzini            echo "cpu_family = '$cpu'" >> $cross
3757fc929892SMarc-André Lureau            ;;
3758fc929892SMarc-André Lureau    esac
3759fc929892SMarc-André Lureau    echo "cpu = '$cpu'" >> $cross
3760fc929892SMarc-André Lureau    if test "$bigendian" = "yes" ; then
3761fc929892SMarc-André Lureau        echo "endian = 'big'" >> $cross
3762fc929892SMarc-André Lureau    else
3763fc929892SMarc-André Lureau        echo "endian = 'little'" >> $cross
3764fc929892SMarc-André Lureau    fi
3765fc929892SMarc-André Lureau  else
3766fc929892SMarc-André Lureau    cross_arg="--native-file config-meson.cross"
3767fc929892SMarc-André Lureau  fi
3768fc929892SMarc-André Lureau  mv $cross config-meson.cross
3769fc929892SMarc-André Lureau
3770a5665051SPaolo Bonzini  rm -rf meson-private meson-info meson-logs
377161d63097SPaolo Bonzini  run_meson() {
377209e93326SPaolo Bonzini    NINJA=$ninja $meson setup \
3773d17f305aSPaolo Bonzini        --prefix "$prefix" \
3774d17f305aSPaolo Bonzini        --libdir "$libdir" \
3775d17f305aSPaolo Bonzini        --libexecdir "$libexecdir" \
3776d17f305aSPaolo Bonzini        --bindir "$bindir" \
3777d17f305aSPaolo Bonzini        --includedir "$includedir" \
3778d17f305aSPaolo Bonzini        --datadir "$datadir" \
3779d17f305aSPaolo Bonzini        --mandir "$mandir" \
3780d17f305aSPaolo Bonzini        --sysconfdir "$sysconfdir" \
378116bf7a33SPaolo Bonzini        --localedir "$localedir" \
3782d17f305aSPaolo Bonzini        --localstatedir "$local_statedir" \
37833b4da132SPaolo Bonzini        -Daudio_drv_list=$audio_drv_list \
37843b4da132SPaolo Bonzini        -Ddefault_devices=$default_devices \
3785d17f305aSPaolo Bonzini        -Ddocdir="$docdir" \
378616bf7a33SPaolo Bonzini        -Dqemu_firmwarepath="$firmwarepath" \
378773f3aa37SMarc-André Lureau        -Dqemu_suffix="$qemu_suffix" \
37883b4da132SPaolo Bonzini        -Dsphinx_build="$sphinx_build" \
37893b4da132SPaolo Bonzini        -Dtrace_file="$trace_file" \
3790a5665051SPaolo Bonzini        -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
3791a5665051SPaolo Bonzini        -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
3792a5665051SPaolo Bonzini        -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
3793da6d48b9SMarc-André Lureau        -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
3794bf0e56a3SMarc-André Lureau        -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
37953b4da132SPaolo Bonzini        -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
37963b4da132SPaolo Bonzini        -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
3797537b7248SPaolo Bonzini        $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
3798332008e0SThomas Huth        $(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
379961d63097SPaolo Bonzini        "$@" $cross_arg "$PWD" "$source_path"
380061d63097SPaolo Bonzini  }
380161d63097SPaolo Bonzini  eval run_meson $meson_options
3802a5665051SPaolo Bonzini  if test "$?" -ne 0 ; then
3803a5665051SPaolo Bonzini      error_exit "meson setup failed"
3804a5665051SPaolo Bonzini  fi
3805699d3884SPaolo Bonzinielse
3806699d3884SPaolo Bonzini  if test -f meson-private/cmd_line.txt; then
3807699d3884SPaolo Bonzini    # Adjust old command line options whose type was changed
3808699d3884SPaolo Bonzini    # Avoids having to use "setup --wipe" when Meson is upgraded
3809699d3884SPaolo Bonzini    perl -i -ne '
3810699d3884SPaolo Bonzini      s/^gettext = true$/gettext = auto/;
3811699d3884SPaolo Bonzini      s/^gettext = false$/gettext = disabled/;
3812654d6b04SPaolo Bonzini      /^b_staticpic/ && next;
3813699d3884SPaolo Bonzini      print;' meson-private/cmd_line.txt
3814699d3884SPaolo Bonzini  fi
3815a5665051SPaolo Bonzinifi
3816a5665051SPaolo Bonzini
3817dc655404SMichael S. Tsirkin# Save the configure command line for later reuse.
3818dc655404SMichael S. Tsirkincat <<EOD >config.status
3819dc655404SMichael S. Tsirkin#!/bin/sh
3820dc655404SMichael S. Tsirkin# Generated by configure.
3821dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration.
3822dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging
3823dc655404SMichael S. Tsirkin# configure, is in config.log if it exists.
3824dc655404SMichael S. TsirkinEOD
3825e811da7fSDaniel P. Berrangé
3826e811da7fSDaniel P. Berrangépreserve_env() {
3827e811da7fSDaniel P. Berrangé    envname=$1
3828e811da7fSDaniel P. Berrangé
3829e811da7fSDaniel P. Berrangé    eval envval=\$$envname
3830e811da7fSDaniel P. Berrangé
3831e811da7fSDaniel P. Berrangé    if test -n "$envval"
3832e811da7fSDaniel P. Berrangé    then
3833e811da7fSDaniel P. Berrangé	echo "$envname='$envval'" >> config.status
3834e811da7fSDaniel P. Berrangé	echo "export $envname" >> config.status
3835e811da7fSDaniel P. Berrangé    else
3836e811da7fSDaniel P. Berrangé	echo "unset $envname" >> config.status
3837e811da7fSDaniel P. Berrangé    fi
3838e811da7fSDaniel P. Berrangé}
3839e811da7fSDaniel P. Berrangé
3840e811da7fSDaniel P. Berrangé# Preserve various env variables that influence what
3841e811da7fSDaniel P. Berrangé# features/build target configure will detect
3842e811da7fSDaniel P. Berrangépreserve_env AR
3843e811da7fSDaniel P. Berrangépreserve_env AS
3844e811da7fSDaniel P. Berrangépreserve_env CC
3845e811da7fSDaniel P. Berrangépreserve_env CPP
38468009da03SPaolo Bonzinipreserve_env CFLAGS
3847e811da7fSDaniel P. Berrangépreserve_env CXX
38488009da03SPaolo Bonzinipreserve_env CXXFLAGS
3849e811da7fSDaniel P. Berrangépreserve_env INSTALL
3850e811da7fSDaniel P. Berrangépreserve_env LD
38518009da03SPaolo Bonzinipreserve_env LDFLAGS
3852e811da7fSDaniel P. Berrangépreserve_env LD_LIBRARY_PATH
3853e811da7fSDaniel P. Berrangépreserve_env LIBTOOL
3854e811da7fSDaniel P. Berrangépreserve_env MAKE
3855e811da7fSDaniel P. Berrangépreserve_env NM
3856e811da7fSDaniel P. Berrangépreserve_env OBJCOPY
3857e811da7fSDaniel P. Berrangépreserve_env PATH
3858e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG
3859e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_LIBDIR
3860e811da7fSDaniel P. Berrangépreserve_env PKG_CONFIG_PATH
3861e811da7fSDaniel P. Berrangépreserve_env PYTHON
3862e811da7fSDaniel P. Berrangépreserve_env SDL2_CONFIG
3863e811da7fSDaniel P. Berrangépreserve_env SMBD
3864e811da7fSDaniel P. Berrangépreserve_env STRIP
3865e811da7fSDaniel P. Berrangépreserve_env WINDRES
3866e811da7fSDaniel P. Berrangé
3867dc655404SMichael S. Tsirkinprintf "exec" >>config.status
3868a5665051SPaolo Bonzinifor i in "$0" "$@"; do
3869835af899SPaolo Bonzini  test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
3870a5665051SPaolo Bonzinidone
3871cf7cc929SDr. David Alan Gilbertecho ' "$@"' >>config.status
3872dc655404SMichael S. Tsirkinchmod +x config.status
3873dc655404SMichael S. Tsirkin
38748cd05ab6SPeter Maydellrm -r "$TMPDIR1"
3875