xref: /openbmc/qemu/configure (revision ddbb0d09)
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
118cd05ab6SPeter Maydell# Temporary directory used for files created while
128cd05ab6SPeter Maydell# configure runs. Since it is in the build directory
138cd05ab6SPeter Maydell# we can safely blow away any previous version of it
148cd05ab6SPeter Maydell# (and we need not jump through hoops to try to delete
158cd05ab6SPeter Maydell# it when configure exits.)
168cd05ab6SPeter MaydellTMPDIR1="config-temp"
178cd05ab6SPeter Maydellrm -rf "${TMPDIR1}"
188cd05ab6SPeter Maydellmkdir -p "${TMPDIR1}"
198cd05ab6SPeter Maydellif [ $? -ne 0 ]; then
208cd05ab6SPeter Maydell    echo "ERROR: failed to create temporary directory"
218cd05ab6SPeter Maydell    exit 1
227d13299dSbellardfi
237d13299dSbellard
248cd05ab6SPeter MaydellTMPB="qemu-conf"
258cd05ab6SPeter MaydellTMPC="${TMPDIR1}/${TMPB}.c"
2666518bf6SDon SlutzTMPO="${TMPDIR1}/${TMPB}.o"
279c83ffd8SPeter MaydellTMPCXX="${TMPDIR1}/${TMPB}.cxx"
2866518bf6SDon SlutzTMPL="${TMPDIR1}/${TMPB}.lo"
2966518bf6SDon SlutzTMPA="${TMPDIR1}/lib${TMPB}.la"
308cd05ab6SPeter MaydellTMPE="${TMPDIR1}/${TMPB}.exe"
317d13299dSbellard
32da1d85e3SGerd Hoffmannrm -f config.log
339ac81bbbSmalc
34b48e3611SPeter Maydell# Print a helpful header at the top of config.log
35b48e3611SPeter Maydellecho "# QEMU configure log $(date)" >> config.log
36979ae168SPeter Maydellprintf "# Configured with:" >> config.log
37979ae168SPeter Maydellprintf " '%s'" "$0" "$@" >> config.log
38979ae168SPeter Maydellecho >> config.log
39b48e3611SPeter Maydellecho "#" >> config.log
40b48e3611SPeter Maydell
4176ad07a4SPeter Maydellerror_exit() {
4276ad07a4SPeter Maydell    echo
4376ad07a4SPeter Maydell    echo "ERROR: $1"
4476ad07a4SPeter Maydell    while test -n "$2"; do
4576ad07a4SPeter Maydell        echo "       $2"
4676ad07a4SPeter Maydell        shift
4776ad07a4SPeter Maydell    done
4876ad07a4SPeter Maydell    echo
4976ad07a4SPeter Maydell    exit 1
5076ad07a4SPeter Maydell}
5176ad07a4SPeter Maydell
529c83ffd8SPeter Maydelldo_compiler() {
539c83ffd8SPeter Maydell    # Run the compiler, capturing its output to the log. First argument
549c83ffd8SPeter Maydell    # is compiler binary to execute.
559c83ffd8SPeter Maydell    local compiler="$1"
569c83ffd8SPeter Maydell    shift
579c83ffd8SPeter Maydell    echo $compiler "$@" >> config.log
589c83ffd8SPeter Maydell    $compiler "$@" >> config.log 2>&1 || return $?
598dc38a78SPeter Maydell    # Test passed. If this is an --enable-werror build, rerun
608dc38a78SPeter Maydell    # the test with -Werror and bail out if it fails. This
618dc38a78SPeter Maydell    # makes warning-generating-errors in configure test code
628dc38a78SPeter Maydell    # obvious to developers.
638dc38a78SPeter Maydell    if test "$werror" != "yes"; then
648dc38a78SPeter Maydell        return 0
658dc38a78SPeter Maydell    fi
668dc38a78SPeter Maydell    # Don't bother rerunning the compile if we were already using -Werror
678dc38a78SPeter Maydell    case "$*" in
688dc38a78SPeter Maydell        *-Werror*)
698dc38a78SPeter Maydell           return 0
708dc38a78SPeter Maydell        ;;
718dc38a78SPeter Maydell    esac
729c83ffd8SPeter Maydell    echo $compiler -Werror "$@" >> config.log
739c83ffd8SPeter Maydell    $compiler -Werror "$@" >> config.log 2>&1 && return $?
7476ad07a4SPeter Maydell    error_exit "configure test passed without -Werror but failed with -Werror." \
7576ad07a4SPeter Maydell        "This is probably a bug in the configure script. The failing command" \
7676ad07a4SPeter Maydell        "will be at the bottom of config.log." \
7776ad07a4SPeter Maydell        "You can run configure with --disable-werror to bypass this check."
788dc38a78SPeter Maydell}
798dc38a78SPeter Maydell
809c83ffd8SPeter Maydelldo_cc() {
819c83ffd8SPeter Maydell    do_compiler "$cc" "$@"
829c83ffd8SPeter Maydell}
839c83ffd8SPeter Maydell
849c83ffd8SPeter Maydelldo_cxx() {
859c83ffd8SPeter Maydell    do_compiler "$cxx" "$@"
869c83ffd8SPeter Maydell}
879c83ffd8SPeter Maydell
889c83ffd8SPeter Maydellupdate_cxxflags() {
899c83ffd8SPeter Maydell    # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
909c83ffd8SPeter Maydell    # options which some versions of GCC's C++ compiler complain about
919c83ffd8SPeter Maydell    # because they only make sense for C programs.
929c83ffd8SPeter Maydell    QEMU_CXXFLAGS=
939c83ffd8SPeter Maydell    for arg in $QEMU_CFLAGS; do
949c83ffd8SPeter Maydell        case $arg in
959c83ffd8SPeter Maydell            -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
969c83ffd8SPeter Maydell            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
979c83ffd8SPeter Maydell                ;;
989c83ffd8SPeter Maydell            *)
999c83ffd8SPeter Maydell                QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
1009c83ffd8SPeter Maydell                ;;
1019c83ffd8SPeter Maydell        esac
1029c83ffd8SPeter Maydell    done
1039c83ffd8SPeter Maydell}
1049c83ffd8SPeter Maydell
10552166aa0SJuan Quintelacompile_object() {
106fd0e6053SJohn Snow  local_cflags="$1"
107fd0e6053SJohn Snow  do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
10852166aa0SJuan Quintela}
10952166aa0SJuan Quintela
11052166aa0SJuan Quintelacompile_prog() {
11152166aa0SJuan Quintela  local_cflags="$1"
11252166aa0SJuan Quintela  local_ldflags="$2"
1138dc38a78SPeter Maydell  do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
11452166aa0SJuan Quintela}
11552166aa0SJuan Quintela
11666518bf6SDon Slutzdo_libtool() {
11766518bf6SDon Slutz    local mode=$1
11866518bf6SDon Slutz    shift
11966518bf6SDon Slutz    # Run the compiler, capturing its output to the log.
12066518bf6SDon Slutz    echo $libtool $mode --tag=CC $cc "$@" >> config.log
12166518bf6SDon Slutz    $libtool $mode --tag=CC $cc "$@" >> config.log 2>&1 || return $?
12266518bf6SDon Slutz    # Test passed. If this is an --enable-werror build, rerun
12366518bf6SDon Slutz    # the test with -Werror and bail out if it fails. This
12466518bf6SDon Slutz    # makes warning-generating-errors in configure test code
12566518bf6SDon Slutz    # obvious to developers.
12666518bf6SDon Slutz    if test "$werror" != "yes"; then
12766518bf6SDon Slutz        return 0
12866518bf6SDon Slutz    fi
12966518bf6SDon Slutz    # Don't bother rerunning the compile if we were already using -Werror
13066518bf6SDon Slutz    case "$*" in
13166518bf6SDon Slutz        *-Werror*)
13266518bf6SDon Slutz           return 0
13366518bf6SDon Slutz        ;;
13466518bf6SDon Slutz    esac
13566518bf6SDon Slutz    echo $libtool $mode --tag=CC $cc -Werror "$@" >> config.log
13666518bf6SDon Slutz    $libtool $mode --tag=CC $cc -Werror "$@" >> config.log 2>&1 && return $?
13766518bf6SDon Slutz    error_exit "configure test passed without -Werror but failed with -Werror." \
13866518bf6SDon Slutz        "This is probably a bug in the configure script. The failing command" \
13966518bf6SDon Slutz        "will be at the bottom of config.log." \
14066518bf6SDon Slutz        "You can run configure with --disable-werror to bypass this check."
14166518bf6SDon Slutz}
14266518bf6SDon Slutz
14366518bf6SDon Slutzlibtool_prog() {
14466518bf6SDon Slutz    do_libtool --mode=compile $QEMU_CFLAGS -c -fPIE -DPIE -o $TMPO $TMPC || return $?
14566518bf6SDon Slutz    do_libtool --mode=link $LDFLAGS -o $TMPA $TMPL -rpath /usr/local/lib
14666518bf6SDon Slutz}
14766518bf6SDon Slutz
14811568d6dSPaolo Bonzini# symbolically link $1 to $2.  Portable version of "ln -sf".
14911568d6dSPaolo Bonzinisymlink() {
15072b8b5a1SStefan Weil  rm -rf "$2"
151ec5b06d7SAnthony Liguori  mkdir -p "$(dirname "$2")"
15272b8b5a1SStefan Weil  ln -s "$1" "$2"
15311568d6dSPaolo Bonzini}
15411568d6dSPaolo Bonzini
1550dba6195SLoïc Minier# check whether a command is available to this shell (may be either an
1560dba6195SLoïc Minier# executable or a builtin)
1570dba6195SLoïc Minierhas() {
1580dba6195SLoïc Minier    type "$1" >/dev/null 2>&1
1590dba6195SLoïc Minier}
1600dba6195SLoïc Minier
1610dba6195SLoïc Minier# search for an executable in PATH
1620dba6195SLoïc Minierpath_of() {
1630dba6195SLoïc Minier    local_command="$1"
1640dba6195SLoïc Minier    local_ifs="$IFS"
1650dba6195SLoïc Minier    local_dir=""
1660dba6195SLoïc Minier
1670dba6195SLoïc Minier    # pathname has a dir component?
1680dba6195SLoïc Minier    if [ "${local_command#*/}" != "$local_command" ]; then
1690dba6195SLoïc Minier        if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
1700dba6195SLoïc Minier            echo "$local_command"
1710dba6195SLoïc Minier            return 0
1720dba6195SLoïc Minier        fi
1730dba6195SLoïc Minier    fi
1740dba6195SLoïc Minier    if [ -z "$local_command" ]; then
1750dba6195SLoïc Minier        return 1
1760dba6195SLoïc Minier    fi
1770dba6195SLoïc Minier
1780dba6195SLoïc Minier    IFS=:
1790dba6195SLoïc Minier    for local_dir in $PATH; do
1800dba6195SLoïc Minier        if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
1810dba6195SLoïc Minier            echo "$local_dir/$local_command"
1820dba6195SLoïc Minier            IFS="${local_ifs:-$(printf ' \t\n')}"
1830dba6195SLoïc Minier            return 0
1840dba6195SLoïc Minier        fi
1850dba6195SLoïc Minier    done
1860dba6195SLoïc Minier    # not found
1870dba6195SLoïc Minier    IFS="${local_ifs:-$(printf ' \t\n')}"
1880dba6195SLoïc Minier    return 1
1890dba6195SLoïc Minier}
1900dba6195SLoïc Minier
1915b808275SLluís Vilanovahave_backend () {
1925b808275SLluís Vilanova    echo "$trace_backends" | grep "$1" >/dev/null
1935b808275SLluís Vilanova}
1945b808275SLluís Vilanova
1957d13299dSbellard# default parameters
196ca4deeb1SPaolo Bonzinisource_path=`dirname "$0"`
1972ff6b91eSJuan Quintelacpu=""
198a31a8642SMichael S. Tsirkiniasl="iasl"
1991e43adfcSbellardinterp_prefix="/usr/gnemul/qemu-%M"
20043ce4dfeSbellardstatic="no"
2017d13299dSbellardcross_prefix=""
2020c58ac1cSmalcaudio_drv_list=""
203b64ec4e4SFam Zhengblock_drv_rw_whitelist=""
204b64ec4e4SFam Zhengblock_drv_ro_whitelist=""
205e49d021eSPeter Maydellhost_cc="cc"
20673da375eSJuan Quintelalibs_softmmu=""
2073e2e0e6bSJuan Quintelalibs_tools=""
20867f86e8eSJuan Quintelaaudio_pt_int=""
209d5631638Smalcaudio_win_int=""
2102b2e59e6SPaolo Bonzinicc_i386=i386-pc-linux-gnu-gcc
211957f1f99SMichael Rothlibs_qga=""
2125bc62e01SGerd Hoffmanndebug_info="yes"
21363678e17SSteven Noonanstack_protector=""
214ac0df51dSaliguori
215afb63ebdSStefan Weil# Don't accept a target_list environment variable.
216afb63ebdSStefan Weilunset target_list
217377529c0SPaolo Bonzini
218377529c0SPaolo Bonzini# Default value for a variable defining feature "foo".
219377529c0SPaolo Bonzini#  * foo="no"  feature will only be used if --enable-foo arg is given
220377529c0SPaolo Bonzini#  * foo=""    feature will be searched for, and if found, will be used
221377529c0SPaolo Bonzini#              unless --disable-foo is given
222377529c0SPaolo Bonzini#  * foo="yes" this value will only be set by --enable-foo flag.
223377529c0SPaolo Bonzini#              feature will searched for,
224377529c0SPaolo Bonzini#              if not found, configure exits with error
225377529c0SPaolo Bonzini#
226377529c0SPaolo Bonzini# Always add --enable-foo and --disable-foo command line args.
227377529c0SPaolo Bonzini# Distributions want to ensure that several features are compiled in, and it
228377529c0SPaolo Bonzini# is impossible without a --enable-foo that exits if a feature is not found.
229377529c0SPaolo Bonzini
230377529c0SPaolo Bonzinibluez=""
231377529c0SPaolo Bonzinibrlapi=""
232377529c0SPaolo Bonzinicurl=""
233377529c0SPaolo Bonzinicurses=""
234377529c0SPaolo Bonzinidocs=""
235377529c0SPaolo Bonzinifdt=""
23658952137SVincenzo Maffionenetmap="no"
237e2134eb9SGerd Hoffmannpixman=""
238377529c0SPaolo Bonzinisdl=""
23947c03744SDave Airliesdlabi="1.2"
240983eef5aSMeador Ingevirtfs=""
241821601eaSJes Sorensenvnc="yes"
242377529c0SPaolo Bonzinisparse="no"
243377529c0SPaolo Bonziniuuid=""
244377529c0SPaolo Bonzinivde=""
245377529c0SPaolo Bonzinivnc_tls=""
246377529c0SPaolo Bonzinivnc_sasl=""
247377529c0SPaolo Bonzinivnc_jpeg=""
248377529c0SPaolo Bonzinivnc_png=""
2497536ee4bSTim Hardeckvnc_ws=""
250377529c0SPaolo Bonzinixen=""
251d5b93ddfSAnthony PERARDxen_ctrl_version=""
252eb6fda0fSAnthony PERARDxen_pci_passthrough=""
253377529c0SPaolo Bonzinilinux_aio=""
25447e98658SCorey Bryantcap_ng=""
255377529c0SPaolo Bonziniattr=""
2564f26f2b6SAvi Kivitylibattr=""
257377529c0SPaolo Bonzinixfs=""
258377529c0SPaolo Bonzini
259d41a75a2SBradvhost_net="no"
2605e9be92dSNicholas Bellingervhost_scsi="no"
261d41a75a2SBradkvm="no"
2622da776dbSMichael R. Hinesrdma=""
263377529c0SPaolo Bonzinigprof="no"
264377529c0SPaolo Bonzinidebug_tcg="no"
265377529c0SPaolo Bonzinidebug="no"
266377529c0SPaolo Bonzinistrip_opt="yes"
2679195b2c2SStefan Weiltcg_interpreter="no"
268377529c0SPaolo Bonzinibigendian="no"
269377529c0SPaolo Bonzinimingw32="no"
2701d728c39SBlue Swirlgcov="no"
2711d728c39SBlue Swirlgcov_tool="gcov"
272377529c0SPaolo BonziniEXESUF=""
27317969268SFam ZhengDSOSUF=".so"
27417969268SFam ZhengLDFLAGS_SHARED="-shared"
27517969268SFam Zhengmodules="no"
276377529c0SPaolo Bonziniprefix="/usr/local"
277377529c0SPaolo Bonzinimandir="\${prefix}/share/man"
278528ae5b8SEduardo Habkostdatadir="\${prefix}/share"
279850da188SEduardo Habkostqemu_docdir="\${prefix}/share/doc/qemu"
280377529c0SPaolo Bonzinibindir="\${prefix}/bin"
2813aa5d2beSAlon Levylibdir="\${prefix}/lib"
2828bf188aaSMichael Tokarevlibexecdir="\${prefix}/libexec"
2830f94d6daSAlon Levyincludedir="\${prefix}/include"
284377529c0SPaolo Bonzinisysconfdir="\${prefix}/etc"
285785c23aeSLuiz Capitulinolocal_statedir="\${prefix}/var"
286377529c0SPaolo Bonziniconfsuffix="/qemu"
287377529c0SPaolo Bonzinislirp="yes"
288377529c0SPaolo Bonzinioss_lib=""
289377529c0SPaolo Bonzinibsd="no"
290377529c0SPaolo Bonzinilinux="no"
291377529c0SPaolo Bonzinisolaris="no"
292377529c0SPaolo Bonziniprofiler="no"
293377529c0SPaolo Bonzinicocoa="no"
294377529c0SPaolo Bonzinisoftmmu="yes"
295377529c0SPaolo Bonzinilinux_user="no"
296377529c0SPaolo Bonzinibsd_user="no"
29730163d89SPeter Maydellguest_base="yes"
298377529c0SPaolo Bonziniaix="no"
299377529c0SPaolo Bonziniblobs="yes"
300377529c0SPaolo Bonzinipkgversion=""
30140d6444eSAvi Kivitypie=""
302377529c0SPaolo Bonzinizero_malloc=""
3033556c233SPaolo Bonziniqom_cast_debug="yes"
3045b808275SLluís Vilanovatrace_backends="nop"
305377529c0SPaolo Bonzinitrace_file="trace"
306377529c0SPaolo Bonzinispice=""
307377529c0SPaolo Bonzinirbd=""
308111a38b0SRobert Relyeasmartcard_nss=""
3092b2325ffSGerd Hoffmannlibusb=""
31069354a83SHans de Goedeusb_redir=""
311da076ffeSGerd Hoffmannopengl=""
3121ece9905SAlon Levyzlib="yes"
313b25c9dffSStefan Weillzo=""
314b25c9dffSStefan Weilsnappy=""
3156b383c08SPeter Wubzip2=""
316e8ef31a3SMichael Tokarevguest_agent=""
317d9840e25STomoki Sekiyamaguest_agent_with_vss="no"
3189dacf32dSYossi Hindinguest_agent_msi=""
319d9840e25STomoki Sekiyamavss_win32_sdk=""
320d9840e25STomoki Sekiyamawin_sdk="no"
3214b1c11fdSDaniel P. Berrangewant_tools="yes"
322c589b249SRonnie Sahlberglibiscsi=""
3236542aa9cSPeter Lievenlibnfs=""
324519175a2SAlex Barcelocoroutine=""
32570c60c08SStefan Hajnoczicoroutine_pool=""
326f794573eSEduardo Otuboseccomp=""
327eb100396SBharata B Raoglusterfs=""
3280c14fb47SBharata B Raoglusterfs_discard="no"
3297c815372SBharata B Raoglusterfs_zerofill="no"
3306a460ed1SStefan Hajnocziarchipelago="no"
331a4ccabcfSAnthony Liguorigtk=""
3329e04c683SStefan Weilgtkabi=""
333*ddbb0d09SDaniel P. Berrangegnutls=""
334*ddbb0d09SDaniel P. Berrangegnutls_hash=""
335bbbf9bfbSStefan Weilvte=""
336e91c793cSCole Robinsontpm="yes"
3370a12ec87SRichard W.M. Joneslibssh2=""
3384f18b782SJeff Codyvhdx=""
339b25c9dffSStefan Weilquorum=""
340a99d57bbSWanlong Gaonuma=""
3412847b469SFam Zhengtcmalloc="no"
342377529c0SPaolo Bonzini
343ac0df51dSaliguori# parse CC options first
344ac0df51dSaliguorifor opt do
345ac0df51dSaliguori  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
346ac0df51dSaliguori  case "$opt" in
347ac0df51dSaliguori  --cross-prefix=*) cross_prefix="$optarg"
348ac0df51dSaliguori  ;;
3493d8df640SPaolo Bonzini  --cc=*) CC="$optarg"
350ac0df51dSaliguori  ;;
35183f73fceSTomoki Sekiyama  --cxx=*) CXX="$optarg"
35283f73fceSTomoki Sekiyama  ;;
353ca4deeb1SPaolo Bonzini  --source-path=*) source_path="$optarg"
354ca4deeb1SPaolo Bonzini  ;;
3552ff6b91eSJuan Quintela  --cpu=*) cpu="$optarg"
3562ff6b91eSJuan Quintela  ;;
357de385287SAlex Bennée  --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
358f9943cd5SGerd Hoffmann                    EXTRA_CFLAGS="$optarg"
359e2a2ed06SJuan Quintela  ;;
360a4969e90SAlex Bennée  --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
361f9943cd5SGerd Hoffmann                     EXTRA_LDFLAGS="$optarg"
362e2a2ed06SJuan Quintela  ;;
3635bc62e01SGerd Hoffmann  --enable-debug-info) debug_info="yes"
3645bc62e01SGerd Hoffmann  ;;
3655bc62e01SGerd Hoffmann  --disable-debug-info) debug_info="no"
3665bc62e01SGerd Hoffmann  ;;
367ac0df51dSaliguori  esac
368ac0df51dSaliguoridone
369ac0df51dSaliguori# OS specific
370ac0df51dSaliguori# Using uname is really, really broken.  Once we have the right set of checks
37193148aa5SStefan Weil# we can eliminate its usage altogether.
372ac0df51dSaliguori
373e49d021eSPeter Maydell# Preferred compiler:
374e49d021eSPeter Maydell#  ${CC} (if set)
375e49d021eSPeter Maydell#  ${cross_prefix}gcc (if cross-prefix specified)
376e49d021eSPeter Maydell#  system compiler
377e49d021eSPeter Maydellif test -z "${CC}${cross_prefix}"; then
378e49d021eSPeter Maydell  cc="$host_cc"
379e49d021eSPeter Maydellelse
380b3198cc2SStuart Yoder  cc="${CC-${cross_prefix}gcc}"
381e49d021eSPeter Maydellfi
382e49d021eSPeter Maydell
38383f73fceSTomoki Sekiyamaif test -z "${CXX}${cross_prefix}"; then
38483f73fceSTomoki Sekiyama  cxx="c++"
38583f73fceSTomoki Sekiyamaelse
38683f73fceSTomoki Sekiyama  cxx="${CXX-${cross_prefix}g++}"
38783f73fceSTomoki Sekiyamafi
38883f73fceSTomoki Sekiyama
389b3198cc2SStuart Yoderar="${AR-${cross_prefix}ar}"
3903dd46c78SBlue Swirlas="${AS-${cross_prefix}as}"
3913dd46c78SBlue Swirlcpp="${CPP-$cc -E}"
392b3198cc2SStuart Yoderobjcopy="${OBJCOPY-${cross_prefix}objcopy}"
393b3198cc2SStuart Yoderld="${LD-${cross_prefix}ld}"
3943f534581SBradlibtool="${LIBTOOL-${cross_prefix}libtool}"
3954852ee95SStefan Weilnm="${NM-${cross_prefix}nm}"
396b3198cc2SStuart Yoderstrip="${STRIP-${cross_prefix}strip}"
397b3198cc2SStuart Yoderwindres="${WINDRES-${cross_prefix}windres}"
39817884d7bSSergei Trofimovichpkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
39917884d7bSSergei Trofimovichquery_pkg_config() {
40017884d7bSSergei Trofimovich    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
40117884d7bSSergei Trofimovich}
40217884d7bSSergei Trofimovichpkg_config=query_pkg_config
403b3198cc2SStuart Yodersdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
40447c03744SDave Airliesdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
405ac0df51dSaliguori
40645d285abSPeter Maydell# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
40745d285abSPeter MaydellARFLAGS="${ARFLAGS-rv}"
40845d285abSPeter Maydell
409be17dc90SMichael S. Tsirkin# default flags for all hosts
4104c288acbSPeter MaydellQEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
411f9188227SMike FrysingerQEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
412c95e3080SKevin WolfQEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
413be17dc90SMichael S. TsirkinQEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
4146b4c305cSPaolo BonziniQEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
4155bc62e01SGerd Hoffmannif test "$debug_info" = "yes"; then
4165bc62e01SGerd Hoffmann    CFLAGS="-g $CFLAGS"
417be17dc90SMichael S. Tsirkin    LDFLAGS="-g $LDFLAGS"
4185bc62e01SGerd Hoffmannfi
419be17dc90SMichael S. Tsirkin
420ca4deeb1SPaolo Bonzini# make source path absolute
421ca4deeb1SPaolo Bonzinisource_path=`cd "$source_path"; pwd`
422ca4deeb1SPaolo Bonzini
423cab00a5aSMichael S. Tsirkin# running configure in the source tree?
424cab00a5aSMichael S. Tsirkin# we know that's the case if configure is there.
425cab00a5aSMichael S. Tsirkinif test -f "./configure"; then
426cab00a5aSMichael S. Tsirkin    pwd_is_source_path="y"
427cab00a5aSMichael S. Tsirkinelse
428cab00a5aSMichael S. Tsirkin    pwd_is_source_path="n"
429cab00a5aSMichael S. Tsirkinfi
430cab00a5aSMichael S. Tsirkin
431ac0df51dSaliguoricheck_define() {
432ac0df51dSaliguoricat > $TMPC <<EOF
433ac0df51dSaliguori#if !defined($1)
434fd786e1aSPeter Maydell#error $1 not defined
435ac0df51dSaliguori#endif
436ac0df51dSaliguoriint main(void) { return 0; }
437ac0df51dSaliguoriEOF
43852166aa0SJuan Quintela  compile_object
439ac0df51dSaliguori}
440ac0df51dSaliguori
441307119e7SGerd Hoffmanncheck_include() {
442307119e7SGerd Hoffmanncat > $TMPC <<EOF
443307119e7SGerd Hoffmann#include <$1>
444307119e7SGerd Hoffmannint main(void) { return 0; }
445307119e7SGerd HoffmannEOF
446307119e7SGerd Hoffmann  compile_object
447307119e7SGerd Hoffmann}
448307119e7SGerd Hoffmann
44993b25869SJohn Snowwrite_c_skeleton() {
45093b25869SJohn Snow    cat > $TMPC <<EOF
45193b25869SJohn Snowint main(void) { return 0; }
45293b25869SJohn SnowEOF
45393b25869SJohn Snow}
45493b25869SJohn Snow
455bbea4050SPeter Maydellif check_define __linux__ ; then
456bbea4050SPeter Maydell  targetos="Linux"
457bbea4050SPeter Maydellelif check_define _WIN32 ; then
458bbea4050SPeter Maydell  targetos='MINGW32'
459bbea4050SPeter Maydellelif check_define __OpenBSD__ ; then
460bbea4050SPeter Maydell  targetos='OpenBSD'
461bbea4050SPeter Maydellelif check_define __sun__ ; then
462bbea4050SPeter Maydell  targetos='SunOS'
463bbea4050SPeter Maydellelif check_define __HAIKU__ ; then
464bbea4050SPeter Maydell  targetos='Haiku'
465bbea4050SPeter Maydellelse
466bbea4050SPeter Maydell  targetos=`uname -s`
467bbea4050SPeter Maydellfi
468bbea4050SPeter Maydell
469bbea4050SPeter Maydell# Some host OSes need non-standard checks for which CPU to use.
470bbea4050SPeter Maydell# Note that these checks are broken for cross-compilation: if you're
471bbea4050SPeter Maydell# cross-compiling to one of these OSes then you'll need to specify
472bbea4050SPeter Maydell# the correct CPU with the --cpu option.
473bbea4050SPeter Maydellcase $targetos in
474bbea4050SPeter MaydellDarwin)
475bbea4050SPeter Maydell  # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
476bbea4050SPeter Maydell  # run 64-bit userspace code.
477bbea4050SPeter Maydell  # If the user didn't specify a CPU explicitly and the kernel says this is
478bbea4050SPeter Maydell  # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
479bbea4050SPeter Maydell  if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
480bbea4050SPeter Maydell    cpu="x86_64"
481bbea4050SPeter Maydell  fi
482bbea4050SPeter Maydell  ;;
483bbea4050SPeter MaydellSunOS)
484bbea4050SPeter Maydell  # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
485bbea4050SPeter Maydell  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
486bbea4050SPeter Maydell    cpu="x86_64"
487bbea4050SPeter Maydell  fi
488bbea4050SPeter Maydellesac
489bbea4050SPeter Maydell
4902ff6b91eSJuan Quintelaif test ! -z "$cpu" ; then
4912ff6b91eSJuan Quintela  # command line argument
4922ff6b91eSJuan Quintela  :
4932ff6b91eSJuan Quintelaelif check_define __i386__ ; then
494ac0df51dSaliguori  cpu="i386"
495ac0df51dSaliguorielif check_define __x86_64__ ; then
496c72b26ecSRichard Henderson  if check_define __ILP32__ ; then
497c72b26ecSRichard Henderson    cpu="x32"
498c72b26ecSRichard Henderson  else
499ac0df51dSaliguori    cpu="x86_64"
500c72b26ecSRichard Henderson  fi
5013aa9bd6cSblueswir1elif check_define __sparc__ ; then
5023aa9bd6cSblueswir1  if check_define __arch64__ ; then
5033aa9bd6cSblueswir1    cpu="sparc64"
5043aa9bd6cSblueswir1  else
5053aa9bd6cSblueswir1    cpu="sparc"
5063aa9bd6cSblueswir1  fi
507fdf7ed96Smalcelif check_define _ARCH_PPC ; then
508fdf7ed96Smalc  if check_define _ARCH_PPC64 ; then
509fdf7ed96Smalc    cpu="ppc64"
510ac0df51dSaliguori  else
511fdf7ed96Smalc    cpu="ppc"
512fdf7ed96Smalc  fi
513afa05235SAurelien Jarnoelif check_define __mips__ ; then
514afa05235SAurelien Jarno  cpu="mips"
515477ba620SAurelien Jarnoelif check_define __ia64__ ; then
516477ba620SAurelien Jarno  cpu="ia64"
517d66ed0eaSAurelien Jarnoelif check_define __s390__ ; then
518d66ed0eaSAurelien Jarno  if check_define __s390x__ ; then
519d66ed0eaSAurelien Jarno    cpu="s390x"
520d66ed0eaSAurelien Jarno  else
521d66ed0eaSAurelien Jarno    cpu="s390"
522d66ed0eaSAurelien Jarno  fi
52321d89f84SPeter Maydellelif check_define __arm__ ; then
52421d89f84SPeter Maydell  cpu="arm"
5251f080313SClaudio Fontanaelif check_define __aarch64__ ; then
5261f080313SClaudio Fontana  cpu="aarch64"
527f28ffed5SBradelif check_define __hppa__ ; then
528f28ffed5SBrad  cpu="hppa"
529fdf7ed96Smalcelse
530fdf7ed96Smalc  cpu=`uname -m`
531ac0df51dSaliguorifi
532ac0df51dSaliguori
533359bc95dSPeter MaydellARCH=
534359bc95dSPeter Maydell# Normalise host CPU name and set ARCH.
535359bc95dSPeter Maydell# Note that this case should only have supported host CPUs, not guests.
5367d13299dSbellardcase "$cpu" in
537c72b26ecSRichard Henderson  ia64|ppc|ppc64|s390|s390x|sparc64|x32)
538ea8f20f8SJuan Quintela    cpu="$cpu"
539ea8f20f8SJuan Quintela  ;;
5407d13299dSbellard  i386|i486|i586|i686|i86pc|BePC)
54197a847bcSbellard    cpu="i386"
5427d13299dSbellard  ;;
543aaa5fa14Saurel32  x86_64|amd64)
544aaa5fa14Saurel32    cpu="x86_64"
545aaa5fa14Saurel32  ;;
54621d89f84SPeter Maydell  armv*b|armv*l|arm)
54721d89f84SPeter Maydell    cpu="arm"
5487d13299dSbellard  ;;
5491f080313SClaudio Fontana  aarch64)
5501f080313SClaudio Fontana    cpu="aarch64"
5511f080313SClaudio Fontana  ;;
552afa05235SAurelien Jarno  mips*)
553afa05235SAurelien Jarno    cpu="mips"
554afa05235SAurelien Jarno  ;;
5553142255cSblueswir1  sparc|sun4[cdmuv])
556ae228531Sbellard    cpu="sparc"
557ae228531Sbellard  ;;
5587d13299dSbellard  *)
559359bc95dSPeter Maydell    # This will result in either an error or falling back to TCI later
560359bc95dSPeter Maydell    ARCH=unknown
5617d13299dSbellard  ;;
5627d13299dSbellardesac
563359bc95dSPeter Maydellif test -z "$ARCH"; then
564359bc95dSPeter Maydell  ARCH="$cpu"
565359bc95dSPeter Maydellfi
566e2d52ad3SJuan Quintela
5677d13299dSbellard# OS specific
5680dbfc675SJuan Quintela
569adfc3e91SStacey Son# host *BSD for user mode
570adfc3e91SStacey SonHOST_VARIANT_DIR=""
571adfc3e91SStacey Son
5727d13299dSbellardcase $targetos in
573c326e0afSbellardCYGWIN*)
574c326e0afSbellard  mingw32="yes"
575a558ee17SJuan Quintela  QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
5763cec7cc2SKővágó, Zoltán  audio_possible_drivers="sdl"
5773cec7cc2SKővágó, Zoltán  audio_drv_list="sdl"
578c326e0afSbellard;;
57967b915a5SbellardMINGW32*)
58067b915a5Sbellard  mingw32="yes"
5813cec7cc2SKővágó, Zoltán  audio_possible_drivers="dsound sdl"
582307119e7SGerd Hoffmann  if check_include dsound.h; then
5833cec7cc2SKővágó, Zoltán    audio_drv_list="dsound"
584307119e7SGerd Hoffmann  else
585307119e7SGerd Hoffmann    audio_drv_list=""
586307119e7SGerd Hoffmann  fi
58767b915a5Sbellard;;
5885c40d2bdSthsGNU/kFreeBSD)
589a167ba50SAurelien Jarno  bsd="yes"
5900c58ac1cSmalc  audio_drv_list="oss"
5910bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
5925c40d2bdSths;;
5937d3505c5SbellardFreeBSD)
5947d3505c5Sbellard  bsd="yes"
5950db4a067SPaolo Bonzini  make="${MAKE-gmake}"
5960c58ac1cSmalc  audio_drv_list="oss"
5970bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
598f01576f1SJuergen Lock  # needed for kinfo_getvmmap(3) in libutil.h
599f01576f1SJuergen Lock  LIBS="-lutil $LIBS"
60058952137SVincenzo Maffione  netmap=""  # enable netmap autodetect
601adfc3e91SStacey Son  HOST_VARIANT_DIR="freebsd"
6027d3505c5Sbellard;;
603c5e97233Sblueswir1DragonFly)
604c5e97233Sblueswir1  bsd="yes"
6050db4a067SPaolo Bonzini  make="${MAKE-gmake}"
606c5e97233Sblueswir1  audio_drv_list="oss"
6070bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl pa"
608adfc3e91SStacey Son  HOST_VARIANT_DIR="dragonfly"
609c5e97233Sblueswir1;;
6107d3505c5SbellardNetBSD)
6117d3505c5Sbellard  bsd="yes"
6120db4a067SPaolo Bonzini  make="${MAKE-gmake}"
6130c58ac1cSmalc  audio_drv_list="oss"
6140bac1111SKővágó, Zoltán  audio_possible_drivers="oss sdl"
6158ef92a88Sblueswir1  oss_lib="-lossaudio"
616adfc3e91SStacey Son  HOST_VARIANT_DIR="netbsd"
6177d3505c5Sbellard;;
6187d3505c5SbellardOpenBSD)
6197d3505c5Sbellard  bsd="yes"
6200db4a067SPaolo Bonzini  make="${MAKE-gmake}"
6214f6ab397SBrad Smith  audio_drv_list="sdl"
6220bac1111SKővágó, Zoltán  audio_possible_drivers="sdl"
623adfc3e91SStacey Son  HOST_VARIANT_DIR="openbsd"
6247d3505c5Sbellard;;
62583fb7adfSbellardDarwin)
62683fb7adfSbellard  bsd="yes"
62783fb7adfSbellard  darwin="yes"
62817969268SFam Zheng  LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
6291b0f9cc2Saliguori  if [ "$cpu" = "x86_64" ] ; then
630a558ee17SJuan Quintela    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
6310c439cbfSJuan Quintela    LDFLAGS="-arch x86_64 $LDFLAGS"
6321b0f9cc2Saliguori  fi
633fd677642Sths  cocoa="yes"
6340c58ac1cSmalc  audio_drv_list="coreaudio"
63514382605SKővágó, Zoltán  audio_possible_drivers="coreaudio sdl"
6360c439cbfSJuan Quintela  LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
6377973f21cSJuan Quintela  libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
638a0b7cf6bSPeter Maydell  # Disable attempts to use ObjectiveC features in os/object.h since they
639a0b7cf6bSPeter Maydell  # won't work when we're compiling with gcc as a C compiler.
640a0b7cf6bSPeter Maydell  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
641adfc3e91SStacey Son  HOST_VARIANT_DIR="darwin"
64283fb7adfSbellard;;
643ec530c81SbellardSunOS)
644ec530c81Sbellard  solaris="yes"
6450db4a067SPaolo Bonzini  make="${MAKE-gmake}"
6460db4a067SPaolo Bonzini  install="${INSTALL-ginstall}"
647fa58948dSBlue Swirl  ld="gld"
648e2d8830eSBrad  smbd="${SMBD-/usr/sfw/sbin/smbd}"
6490475a5caSths  needs_libsunmath="no"
650c2b84fabSths  solarisrev=`uname -r | cut -f2 -d.`
651c2b84fabSths  if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
6520475a5caSths    if test "$solarisrev" -le 9 ; then
6530475a5caSths      if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
6540475a5caSths        needs_libsunmath="yes"
655f14bfdf9SJuan Quintela        QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
656f14bfdf9SJuan Quintela        LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
657f14bfdf9SJuan Quintela        LIBS="-lsunmath $LIBS"
6580475a5caSths      else
65976ad07a4SPeter Maydell        error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
66076ad07a4SPeter Maydell            "libsunmath from the Sun Studio compilers tools, due to a lack of" \
66176ad07a4SPeter Maydell            "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
66276ad07a4SPeter Maydell            "Studio 11 can be downloaded from www.sun.com."
6630475a5caSths      fi
6640475a5caSths    fi
66586b2bd93Sths  fi
6666b4d2ba1Sths  if test -f /usr/include/sys/soundcard.h ; then
6670c58ac1cSmalc    audio_drv_list="oss"
6686b4d2ba1Sths  fi
669c2de5c91Smalc  audio_possible_drivers="oss sdl"
670d741429aSBlue Swirl# needed for CMSG_ macros in sys/socket.h
671d741429aSBlue Swirl  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
672d741429aSBlue Swirl# needed for TIOCWIN* defines in termios.h
673d741429aSBlue Swirl  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
674a558ee17SJuan Quintela  QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
675560d375fSAndreas Färber  solarisnetlibs="-lsocket -lnsl -lresolv"
676560d375fSAndreas Färber  LIBS="$solarisnetlibs $LIBS"
677560d375fSAndreas Färber  libs_qga="$solarisnetlibs $libs_qga"
678ec530c81Sbellard;;
679b29fe3edSmalcAIX)
680b29fe3edSmalc  aix="yes"
6810db4a067SPaolo Bonzini  make="${MAKE-gmake}"
682b29fe3edSmalc;;
683179cf400SAndreas FärberHaiku)
684179cf400SAndreas Färber  haiku="yes"
685179cf400SAndreas Färber  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
686179cf400SAndreas Färber  LIBS="-lposix_error_mapper -lnetwork $LIBS"
687179cf400SAndreas Färber;;
688fb065187Sbellard*)
6890c58ac1cSmalc  audio_drv_list="oss"
6900bac1111SKővágó, Zoltán  audio_possible_drivers="oss alsa sdl pa"
6915327cf48Sbellard  linux="yes"
692831b7825Sths  linux_user="yes"
693af2be207SJan Kiszka  kvm="yes"
694af2be207SJan Kiszka  vhost_net="yes"
6955e9be92dSNicholas Bellinger  vhost_scsi="yes"
696a585140dSAlexey Kardashevskiy  QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
697fb065187Sbellard;;
6987d13299dSbellardesac
6997d13299dSbellard
7007d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
701b1a550a0Spbrook  if [ "$darwin" != "yes" ] ; then
70284778508Sblueswir1    bsd_user="yes"
7037d3505c5Sbellard  fi
70408de3949SAndreas Färberfi
7057d3505c5Sbellard
7060db4a067SPaolo Bonzini: ${make=${MAKE-make}}
7070db4a067SPaolo Bonzini: ${install=${INSTALL-install}}
70852510f8bSStefan Weil: ${python=${PYTHON-python}}
709e2d8830eSBrad: ${smbd=${SMBD-/usr/sbin/smbd}}
7100db4a067SPaolo Bonzini
7113c4a4d0dSPeter Maydell# Default objcc to clang if available, otherwise use CC
7123c4a4d0dSPeter Maydellif has clang; then
7133c4a4d0dSPeter Maydell  objcc=clang
7143c4a4d0dSPeter Maydellelse
7153c4a4d0dSPeter Maydell  objcc="$cc"
7163c4a4d0dSPeter Maydellfi
7173c4a4d0dSPeter Maydell
7183457a3f8SJuan Quintelaif test "$mingw32" = "yes" ; then
7193457a3f8SJuan Quintela  EXESUF=".exe"
72017969268SFam Zheng  DSOSUF=".dll"
721a558ee17SJuan Quintela  QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
722e94a7936SStefan Weil  # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
723e94a7936SStefan Weil  QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
724f7cf5d5bSStefan Weil  LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
72593b25869SJohn Snow  write_c_skeleton;
726f7cf5d5bSStefan Weil  if compile_prog "" "-liberty" ; then
727f7cf5d5bSStefan Weil    LIBS="-liberty $LIBS"
728f7cf5d5bSStefan Weil  fi
729c5ec15eaSStefan Weil  prefix="c:/Program Files/QEMU"
730683035deSPaolo Bonzini  mandir="\${prefix}"
731528ae5b8SEduardo Habkost  datadir="\${prefix}"
732850da188SEduardo Habkost  qemu_docdir="\${prefix}"
733683035deSPaolo Bonzini  bindir="\${prefix}"
734683035deSPaolo Bonzini  sysconfdir="\${prefix}"
7355a699bbbSLaszlo Ersek  local_statedir=
736683035deSPaolo Bonzini  confsuffix=""
737368542b8SStefan Hajnoczi  libs_qga="-lws2_32 -lwinmm -lpowrprof $libs_qga"
7383457a3f8SJuan Quintelafi
7393457a3f8SJuan Quintela
740487fefdbSAnthony Liguoriwerror=""
74185aa5189Sbellard
7427d13299dSbellardfor opt do
743a46e4035Spbrook  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
7447d13299dSbellard  case "$opt" in
7452efc3265Sbellard  --help|-h) show_help=yes
7462efc3265Sbellard  ;;
74799123e13SMike Frysinger  --version|-V) exec cat $source_path/VERSION
74899123e13SMike Frysinger  ;;
749b1a550a0Spbrook  --prefix=*) prefix="$optarg"
7507d13299dSbellard  ;;
751b1a550a0Spbrook  --interp-prefix=*) interp_prefix="$optarg"
75232ce6337Sbellard  ;;
753ca4deeb1SPaolo Bonzini  --source-path=*)
7547d13299dSbellard  ;;
755ac0df51dSaliguori  --cross-prefix=*)
7567d13299dSbellard  ;;
757ac0df51dSaliguori  --cc=*)
7587d13299dSbellard  ;;
759b1a550a0Spbrook  --host-cc=*) host_cc="$optarg"
76083469015Sbellard  ;;
76183f73fceSTomoki Sekiyama  --cxx=*)
76283f73fceSTomoki Sekiyama  ;;
763e007dbecSMichael S. Tsirkin  --iasl=*) iasl="$optarg"
764e007dbecSMichael S. Tsirkin  ;;
7653c4a4d0dSPeter Maydell  --objcc=*) objcc="$optarg"
7663c4a4d0dSPeter Maydell  ;;
767b1a550a0Spbrook  --make=*) make="$optarg"
7687d13299dSbellard  ;;
7696a882643Spbrook  --install=*) install="$optarg"
7706a882643Spbrook  ;;
771c886edfbSBlue Swirl  --python=*) python="$optarg"
772c886edfbSBlue Swirl  ;;
7731d728c39SBlue Swirl  --gcov=*) gcov_tool="$optarg"
7741d728c39SBlue Swirl  ;;
775e2d8830eSBrad  --smbd=*) smbd="$optarg"
776e2d8830eSBrad  ;;
777e2a2ed06SJuan Quintela  --extra-cflags=*)
7787d13299dSbellard  ;;
779e2a2ed06SJuan Quintela  --extra-ldflags=*)
7807d13299dSbellard  ;;
7815bc62e01SGerd Hoffmann  --enable-debug-info)
7825bc62e01SGerd Hoffmann  ;;
7835bc62e01SGerd Hoffmann  --disable-debug-info)
7845bc62e01SGerd Hoffmann  ;;
78517969268SFam Zheng  --enable-modules)
78617969268SFam Zheng      modules="yes"
78717969268SFam Zheng  ;;
7882ff6b91eSJuan Quintela  --cpu=*)
7897d13299dSbellard  ;;
790b1a550a0Spbrook  --target-list=*) target_list="$optarg"
791de83cd02Sbellard  ;;
7925b808275SLluís Vilanova  --enable-trace-backends=*) trace_backends="$optarg"
7935b808275SLluís Vilanova  ;;
7945b808275SLluís Vilanova  # XXX: backwards compatibility
7955b808275SLluís Vilanova  --enable-trace-backend=*) trace_backends="$optarg"
79694a420b1SStefan Hajnoczi  ;;
79774242e0fSPaolo Bonzini  --with-trace-file=*) trace_file="$optarg"
7989410b56cSPrerna Saxena  ;;
7997d13299dSbellard  --enable-gprof) gprof="yes"
8007d13299dSbellard  ;;
8011d728c39SBlue Swirl  --enable-gcov) gcov="yes"
8021d728c39SBlue Swirl  ;;
80379427693SLoïc Minier  --static)
80479427693SLoïc Minier    static="yes"
80579427693SLoïc Minier    LDFLAGS="-static $LDFLAGS"
80617884d7bSSergei Trofimovich    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
80743ce4dfeSbellard  ;;
8080b24e75fSPaolo Bonzini  --mandir=*) mandir="$optarg"
8090b24e75fSPaolo Bonzini  ;;
8100b24e75fSPaolo Bonzini  --bindir=*) bindir="$optarg"
8110b24e75fSPaolo Bonzini  ;;
8123aa5d2beSAlon Levy  --libdir=*) libdir="$optarg"
8133aa5d2beSAlon Levy  ;;
8148bf188aaSMichael Tokarev  --libexecdir=*) libexecdir="$optarg"
8158bf188aaSMichael Tokarev  ;;
8160f94d6daSAlon Levy  --includedir=*) includedir="$optarg"
8170f94d6daSAlon Levy  ;;
818528ae5b8SEduardo Habkost  --datadir=*) datadir="$optarg"
8190b24e75fSPaolo Bonzini  ;;
820023d3d67SEduardo Habkost  --with-confsuffix=*) confsuffix="$optarg"
821023d3d67SEduardo Habkost  ;;
822850da188SEduardo Habkost  --docdir=*) qemu_docdir="$optarg"
8230b24e75fSPaolo Bonzini  ;;
824ca2fb938SAndre Przywara  --sysconfdir=*) sysconfdir="$optarg"
82507381cc1SAnthony Liguori  ;;
826785c23aeSLuiz Capitulino  --localstatedir=*) local_statedir="$optarg"
827785c23aeSLuiz Capitulino  ;;
828785c23aeSLuiz Capitulino  --sbindir=*|--sharedstatedir=*|\
829023ddd74SMax Filippov  --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
830023ddd74SMax Filippov  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
831023ddd74SMax Filippov    # These switches are silently ignored, for compatibility with
832023ddd74SMax Filippov    # autoconf-generated configure scripts. This allows QEMU's
833023ddd74SMax Filippov    # configure to be used by RPM and similar macros that set
834023ddd74SMax Filippov    # lots of directory switches by default.
835023ddd74SMax Filippov  ;;
836e2134eb9SGerd Hoffmann  --with-system-pixman) pixman="system"
837e2134eb9SGerd Hoffmann  ;;
838e2134eb9SGerd Hoffmann  --without-system-pixman) pixman="internal"
839e2134eb9SGerd Hoffmann  ;;
84074880fe2SRobert Schiele  --without-pixman) pixman="none"
84174880fe2SRobert Schiele  ;;
84297a847bcSbellard  --disable-sdl) sdl="no"
84397a847bcSbellard  ;;
844c4198157SJuan Quintela  --enable-sdl) sdl="yes"
845c4198157SJuan Quintela  ;;
84647c03744SDave Airlie  --with-sdlabi=*) sdlabi="$optarg"
84747c03744SDave Airlie  ;;
8483556c233SPaolo Bonzini  --disable-qom-cast-debug) qom_cast_debug="no"
8493556c233SPaolo Bonzini  ;;
8503556c233SPaolo Bonzini  --enable-qom-cast-debug) qom_cast_debug="yes"
8513556c233SPaolo Bonzini  ;;
852983eef5aSMeador Inge  --disable-virtfs) virtfs="no"
853983eef5aSMeador Inge  ;;
854983eef5aSMeador Inge  --enable-virtfs) virtfs="yes"
855983eef5aSMeador Inge  ;;
856821601eaSJes Sorensen  --disable-vnc) vnc="no"
857821601eaSJes Sorensen  ;;
858821601eaSJes Sorensen  --enable-vnc) vnc="yes"
859821601eaSJes Sorensen  ;;
8602f6a1ab0Sblueswir1  --oss-lib=*) oss_lib="$optarg"
8612f6a1ab0Sblueswir1  ;;
8620c58ac1cSmalc  --audio-drv-list=*) audio_drv_list="$optarg"
8630c58ac1cSmalc  ;;
864b64ec4e4SFam Zheng  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
865b64ec4e4SFam Zheng  ;;
866b64ec4e4SFam Zheng  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
867eb852011SMarkus Armbruster  ;;
868f8393946Saurel32  --enable-debug-tcg) debug_tcg="yes"
869f8393946Saurel32  ;;
870f8393946Saurel32  --disable-debug-tcg) debug_tcg="no"
871f8393946Saurel32  ;;
872f3d08ee6SPaul Brook  --enable-debug)
873f3d08ee6SPaul Brook      # Enable debugging options that aren't excessively noisy
874f3d08ee6SPaul Brook      debug_tcg="yes"
875f3d08ee6SPaul Brook      debug="yes"
876f3d08ee6SPaul Brook      strip_opt="no"
877f3d08ee6SPaul Brook  ;;
87803b4fe7dSaliguori  --enable-sparse) sparse="yes"
87903b4fe7dSaliguori  ;;
88003b4fe7dSaliguori  --disable-sparse) sparse="no"
88103b4fe7dSaliguori  ;;
8821625af87Saliguori  --disable-strip) strip_opt="no"
8831625af87Saliguori  ;;
8848d5d2d4cSths  --disable-vnc-tls) vnc_tls="no"
8858d5d2d4cSths  ;;
8861be10ad2SJuan Quintela  --enable-vnc-tls) vnc_tls="yes"
8871be10ad2SJuan Quintela  ;;
8882f9606b3Saliguori  --disable-vnc-sasl) vnc_sasl="no"
8892f9606b3Saliguori  ;;
890ea784e3bSJuan Quintela  --enable-vnc-sasl) vnc_sasl="yes"
891ea784e3bSJuan Quintela  ;;
8922f6f5c7aSCorentin Chary  --disable-vnc-jpeg) vnc_jpeg="no"
8932f6f5c7aSCorentin Chary  ;;
8942f6f5c7aSCorentin Chary  --enable-vnc-jpeg) vnc_jpeg="yes"
8952f6f5c7aSCorentin Chary  ;;
896efe556adSCorentin Chary  --disable-vnc-png) vnc_png="no"
897efe556adSCorentin Chary  ;;
898efe556adSCorentin Chary  --enable-vnc-png) vnc_png="yes"
899efe556adSCorentin Chary  ;;
9007536ee4bSTim Hardeck  --disable-vnc-ws) vnc_ws="no"
9017536ee4bSTim Hardeck  ;;
9027536ee4bSTim Hardeck  --enable-vnc-ws) vnc_ws="yes"
9037536ee4bSTim Hardeck  ;;
904443f1376Sbellard  --disable-slirp) slirp="no"
905c20709aaSbellard  ;;
906ee682d27SStefan Weil  --disable-uuid) uuid="no"
907ee682d27SStefan Weil  ;;
908ee682d27SStefan Weil  --enable-uuid) uuid="yes"
909ee682d27SStefan Weil  ;;
910e0e6c8c0Saliguori  --disable-vde) vde="no"
9118a16d273Sths  ;;
912dfb278bdSJuan Quintela  --enable-vde) vde="yes"
913dfb278bdSJuan Quintela  ;;
91458952137SVincenzo Maffione  --disable-netmap) netmap="no"
91558952137SVincenzo Maffione  ;;
91658952137SVincenzo Maffione  --enable-netmap) netmap="yes"
91758952137SVincenzo Maffione  ;;
918e37630caSaliguori  --disable-xen) xen="no"
919e37630caSaliguori  ;;
920fc321b4bSJuan Quintela  --enable-xen) xen="yes"
921fc321b4bSJuan Quintela  ;;
922eb6fda0fSAnthony PERARD  --disable-xen-pci-passthrough) xen_pci_passthrough="no"
923eb6fda0fSAnthony PERARD  ;;
924eb6fda0fSAnthony PERARD  --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
925eb6fda0fSAnthony PERARD  ;;
9262e4d9fb1Saurel32  --disable-brlapi) brlapi="no"
9272e4d9fb1Saurel32  ;;
9284ffcedb6SJuan Quintela  --enable-brlapi) brlapi="yes"
9294ffcedb6SJuan Quintela  ;;
930fb599c9aSbalrog  --disable-bluez) bluez="no"
931fb599c9aSbalrog  ;;
932a20a6f46SJuan Quintela  --enable-bluez) bluez="yes"
933a20a6f46SJuan Quintela  ;;
9347ba1e619Saliguori  --disable-kvm) kvm="no"
9357ba1e619Saliguori  ;;
936b31a0277SJuan Quintela  --enable-kvm) kvm="yes"
937b31a0277SJuan Quintela  ;;
9389195b2c2SStefan Weil  --disable-tcg-interpreter) tcg_interpreter="no"
9399195b2c2SStefan Weil  ;;
9409195b2c2SStefan Weil  --enable-tcg-interpreter) tcg_interpreter="yes"
9419195b2c2SStefan Weil  ;;
94247e98658SCorey Bryant  --disable-cap-ng)  cap_ng="no"
94347e98658SCorey Bryant  ;;
94447e98658SCorey Bryant  --enable-cap-ng) cap_ng="yes"
94547e98658SCorey Bryant  ;;
946cd4ec0b4SGerd Hoffmann  --disable-spice) spice="no"
947cd4ec0b4SGerd Hoffmann  ;;
948cd4ec0b4SGerd Hoffmann  --enable-spice) spice="yes"
949cd4ec0b4SGerd Hoffmann  ;;
950c589b249SRonnie Sahlberg  --disable-libiscsi) libiscsi="no"
951c589b249SRonnie Sahlberg  ;;
952c589b249SRonnie Sahlberg  --enable-libiscsi) libiscsi="yes"
953c589b249SRonnie Sahlberg  ;;
9546542aa9cSPeter Lieven  --disable-libnfs) libnfs="no"
9556542aa9cSPeter Lieven  ;;
9566542aa9cSPeter Lieven  --enable-libnfs) libnfs="yes"
9576542aa9cSPeter Lieven  ;;
95805c2a3e7Sbellard  --enable-profiler) profiler="yes"
95905c2a3e7Sbellard  ;;
96014821030SPavel Borzenkov  --disable-cocoa) cocoa="no"
96114821030SPavel Borzenkov  ;;
962c2de5c91Smalc  --enable-cocoa)
963c2de5c91Smalc      cocoa="yes" ;
964c2de5c91Smalc      sdl="no" ;
965c2de5c91Smalc      audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
9665b0753e0Sbellard  ;;
967cad25d69Spbrook  --disable-system) softmmu="no"
9680a8e90f4Spbrook  ;;
969cad25d69Spbrook  --enable-system) softmmu="yes"
9700a8e90f4Spbrook  ;;
9710953a80fSZachary Amsden  --disable-user)
9720953a80fSZachary Amsden      linux_user="no" ;
9730953a80fSZachary Amsden      bsd_user="no" ;
9740953a80fSZachary Amsden  ;;
9750953a80fSZachary Amsden  --enable-user) ;;
976831b7825Sths  --disable-linux-user) linux_user="no"
9770a8e90f4Spbrook  ;;
978831b7825Sths  --enable-linux-user) linux_user="yes"
979831b7825Sths  ;;
98084778508Sblueswir1  --disable-bsd-user) bsd_user="no"
98184778508Sblueswir1  ;;
98284778508Sblueswir1  --enable-bsd-user) bsd_user="yes"
98384778508Sblueswir1  ;;
984379f6698SPaul Brook  --enable-guest-base) guest_base="yes"
985379f6698SPaul Brook  ;;
986379f6698SPaul Brook  --disable-guest-base) guest_base="no"
987379f6698SPaul Brook  ;;
98840d6444eSAvi Kivity  --enable-pie) pie="yes"
98934005a00SKirill A. Shutemov  ;;
99040d6444eSAvi Kivity  --disable-pie) pie="no"
99134005a00SKirill A. Shutemov  ;;
99285aa5189Sbellard  --enable-werror) werror="yes"
99385aa5189Sbellard  ;;
99485aa5189Sbellard  --disable-werror) werror="no"
99585aa5189Sbellard  ;;
99663678e17SSteven Noonan  --enable-stack-protector) stack_protector="yes"
99763678e17SSteven Noonan  ;;
99863678e17SSteven Noonan  --disable-stack-protector) stack_protector="no"
99963678e17SSteven Noonan  ;;
10004d3b6f6eSbalrog  --disable-curses) curses="no"
10014d3b6f6eSbalrog  ;;
1002c584a6d0SJuan Quintela  --enable-curses) curses="yes"
1003c584a6d0SJuan Quintela  ;;
1004769ce76dSAlexander Graf  --disable-curl) curl="no"
1005769ce76dSAlexander Graf  ;;
1006788c8196SJuan Quintela  --enable-curl) curl="yes"
1007788c8196SJuan Quintela  ;;
10082df87df7SJuan Quintela  --disable-fdt) fdt="no"
10092df87df7SJuan Quintela  ;;
10102df87df7SJuan Quintela  --enable-fdt) fdt="yes"
10112df87df7SJuan Quintela  ;;
10125c6c3a6cSChristoph Hellwig  --disable-linux-aio) linux_aio="no"
10135c6c3a6cSChristoph Hellwig  ;;
10145c6c3a6cSChristoph Hellwig  --enable-linux-aio) linux_aio="yes"
10155c6c3a6cSChristoph Hellwig  ;;
1016758e8e38SVenkateswararao Jujjuri (JV)  --disable-attr) attr="no"
1017758e8e38SVenkateswararao Jujjuri (JV)  ;;
1018758e8e38SVenkateswararao Jujjuri (JV)  --enable-attr) attr="yes"
1019758e8e38SVenkateswararao Jujjuri (JV)  ;;
102077755340Sths  --disable-blobs) blobs="no"
102177755340Sths  ;;
10224a19f1ecSpbrook  --with-pkgversion=*) pkgversion=" ($optarg)"
10234a19f1ecSpbrook  ;;
1024519175a2SAlex Barcelo  --with-coroutine=*) coroutine="$optarg"
1025519175a2SAlex Barcelo  ;;
102670c60c08SStefan Hajnoczi  --disable-coroutine-pool) coroutine_pool="no"
102770c60c08SStefan Hajnoczi  ;;
102870c60c08SStefan Hajnoczi  --enable-coroutine-pool) coroutine_pool="yes"
102970c60c08SStefan Hajnoczi  ;;
1030a25dba17SJuan Quintela  --disable-docs) docs="no"
103170ec5dc0SAnthony Liguori  ;;
1032a25dba17SJuan Quintela  --enable-docs) docs="yes"
103383a3ab8bSJuan Quintela  ;;
1034d5970055SMichael S. Tsirkin  --disable-vhost-net) vhost_net="no"
1035d5970055SMichael S. Tsirkin  ;;
1036d5970055SMichael S. Tsirkin  --enable-vhost-net) vhost_net="yes"
1037d5970055SMichael S. Tsirkin  ;;
10385e9be92dSNicholas Bellinger  --disable-vhost-scsi) vhost_scsi="no"
10395e9be92dSNicholas Bellinger  ;;
10405e9be92dSNicholas Bellinger  --enable-vhost-scsi) vhost_scsi="yes"
10415e9be92dSNicholas Bellinger  ;;
1042da076ffeSGerd Hoffmann  --disable-opengl) opengl="no"
104320ff075bSMichael Walle  ;;
1044da076ffeSGerd Hoffmann  --enable-opengl) opengl="yes"
104520ff075bSMichael Walle  ;;
1046f27aaf4bSChristian Brunner  --disable-rbd) rbd="no"
1047f27aaf4bSChristian Brunner  ;;
1048f27aaf4bSChristian Brunner  --enable-rbd) rbd="yes"
1049f27aaf4bSChristian Brunner  ;;
10508c84cf11SSergei Trofimovich  --disable-xfsctl) xfs="no"
10518c84cf11SSergei Trofimovich  ;;
10528c84cf11SSergei Trofimovich  --enable-xfsctl) xfs="yes"
10538c84cf11SSergei Trofimovich  ;;
1054111a38b0SRobert Relyea  --disable-smartcard-nss) smartcard_nss="no"
1055111a38b0SRobert Relyea  ;;
1056111a38b0SRobert Relyea  --enable-smartcard-nss) smartcard_nss="yes"
1057111a38b0SRobert Relyea  ;;
10582b2325ffSGerd Hoffmann  --disable-libusb) libusb="no"
10592b2325ffSGerd Hoffmann  ;;
10602b2325ffSGerd Hoffmann  --enable-libusb) libusb="yes"
10612b2325ffSGerd Hoffmann  ;;
106269354a83SHans de Goede  --disable-usb-redir) usb_redir="no"
106369354a83SHans de Goede  ;;
106469354a83SHans de Goede  --enable-usb-redir) usb_redir="yes"
106569354a83SHans de Goede  ;;
10661ece9905SAlon Levy  --disable-zlib-test) zlib="no"
10671ece9905SAlon Levy  ;;
1068b25c9dffSStefan Weil  --disable-lzo) lzo="no"
1069b25c9dffSStefan Weil  ;;
1070607dacd0Sqiaonuohan  --enable-lzo) lzo="yes"
1071607dacd0Sqiaonuohan  ;;
1072b25c9dffSStefan Weil  --disable-snappy) snappy="no"
1073b25c9dffSStefan Weil  ;;
1074607dacd0Sqiaonuohan  --enable-snappy) snappy="yes"
1075607dacd0Sqiaonuohan  ;;
10766b383c08SPeter Wu  --disable-bzip2) bzip2="no"
10776b383c08SPeter Wu  ;;
10786b383c08SPeter Wu  --enable-bzip2) bzip2="yes"
10796b383c08SPeter Wu  ;;
1080d138cee9SMichael Roth  --enable-guest-agent) guest_agent="yes"
1081d138cee9SMichael Roth  ;;
1082d138cee9SMichael Roth  --disable-guest-agent) guest_agent="no"
1083d138cee9SMichael Roth  ;;
10849dacf32dSYossi Hindin  --enable-guest-agent-msi) guest_agent_msi="yes"
10859dacf32dSYossi Hindin  ;;
10869dacf32dSYossi Hindin  --disable-guest-agent-msi) guest_agent_msi="no"
10879dacf32dSYossi Hindin  ;;
1088d9840e25STomoki Sekiyama  --with-vss-sdk) vss_win32_sdk=""
1089d9840e25STomoki Sekiyama  ;;
1090d9840e25STomoki Sekiyama  --with-vss-sdk=*) vss_win32_sdk="$optarg"
1091d9840e25STomoki Sekiyama  ;;
1092d9840e25STomoki Sekiyama  --without-vss-sdk) vss_win32_sdk="no"
1093d9840e25STomoki Sekiyama  ;;
1094d9840e25STomoki Sekiyama  --with-win-sdk) win_sdk=""
1095d9840e25STomoki Sekiyama  ;;
1096d9840e25STomoki Sekiyama  --with-win-sdk=*) win_sdk="$optarg"
1097d9840e25STomoki Sekiyama  ;;
1098d9840e25STomoki Sekiyama  --without-win-sdk) win_sdk="no"
1099d9840e25STomoki Sekiyama  ;;
11004b1c11fdSDaniel P. Berrange  --enable-tools) want_tools="yes"
11014b1c11fdSDaniel P. Berrange  ;;
11024b1c11fdSDaniel P. Berrange  --disable-tools) want_tools="no"
11034b1c11fdSDaniel P. Berrange  ;;
1104f794573eSEduardo Otubo  --enable-seccomp) seccomp="yes"
1105f794573eSEduardo Otubo  ;;
1106f794573eSEduardo Otubo  --disable-seccomp) seccomp="no"
1107f794573eSEduardo Otubo  ;;
1108eb100396SBharata B Rao  --disable-glusterfs) glusterfs="no"
1109eb100396SBharata B Rao  ;;
1110eb100396SBharata B Rao  --enable-glusterfs) glusterfs="yes"
1111eb100396SBharata B Rao  ;;
1112c9a12e75SChrysostomos Nanakos  --disable-archipelago) archipelago="no"
1113c9a12e75SChrysostomos Nanakos  ;;
1114c9a12e75SChrysostomos Nanakos  --enable-archipelago) archipelago="yes"
1115c9a12e75SChrysostomos Nanakos  ;;
111652b53c04SFam Zheng  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
111752b53c04SFam Zheng      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1118583f6e7bSStefan Hajnoczi  ;;
1119a4ccabcfSAnthony Liguori  --disable-gtk) gtk="no"
1120a4ccabcfSAnthony Liguori  ;;
1121a4ccabcfSAnthony Liguori  --enable-gtk) gtk="yes"
1122a4ccabcfSAnthony Liguori  ;;
1123*ddbb0d09SDaniel P. Berrange  --disable-gnutls) gnutls="no"
1124*ddbb0d09SDaniel P. Berrange  ;;
1125*ddbb0d09SDaniel P. Berrange  --enable-gnutls) gnutls="yes"
1126*ddbb0d09SDaniel P. Berrange  ;;
11272da776dbSMichael R. Hines  --enable-rdma) rdma="yes"
11282da776dbSMichael R. Hines  ;;
11292da776dbSMichael R. Hines  --disable-rdma) rdma="no"
11302da776dbSMichael R. Hines  ;;
1131528de90aSDaniel P. Berrange  --with-gtkabi=*) gtkabi="$optarg"
1132528de90aSDaniel P. Berrange  ;;
1133bbbf9bfbSStefan Weil  --disable-vte) vte="no"
1134bbbf9bfbSStefan Weil  ;;
1135bbbf9bfbSStefan Weil  --enable-vte) vte="yes"
1136bbbf9bfbSStefan Weil  ;;
1137e91c793cSCole Robinson  --disable-tpm) tpm="no"
1138e91c793cSCole Robinson  ;;
1139ab214c29SStefan Berger  --enable-tpm) tpm="yes"
1140ab214c29SStefan Berger  ;;
11410a12ec87SRichard W.M. Jones  --disable-libssh2) libssh2="no"
11420a12ec87SRichard W.M. Jones  ;;
11430a12ec87SRichard W.M. Jones  --enable-libssh2) libssh2="yes"
11440a12ec87SRichard W.M. Jones  ;;
11454f18b782SJeff Cody  --enable-vhdx) vhdx="yes"
11464f18b782SJeff Cody  ;;
11474f18b782SJeff Cody  --disable-vhdx) vhdx="no"
11484f18b782SJeff Cody  ;;
114995c6bff3SBenoît Canet  --disable-quorum) quorum="no"
115095c6bff3SBenoît Canet  ;;
115195c6bff3SBenoît Canet  --enable-quorum) quorum="yes"
115295c6bff3SBenoît Canet  ;;
1153a99d57bbSWanlong Gao  --disable-numa) numa="no"
1154a99d57bbSWanlong Gao  ;;
1155a99d57bbSWanlong Gao  --enable-numa) numa="yes"
1156a99d57bbSWanlong Gao  ;;
11572847b469SFam Zheng  --disable-tcmalloc) tcmalloc="no"
11582847b469SFam Zheng  ;;
11592847b469SFam Zheng  --enable-tcmalloc) tcmalloc="yes"
11602847b469SFam Zheng  ;;
11612d2ad6d0SFam Zheng  *)
11622d2ad6d0SFam Zheng      echo "ERROR: unknown option $opt"
11632d2ad6d0SFam Zheng      echo "Try '$0 --help' for more information"
11642d2ad6d0SFam Zheng      exit 1
11657f1559c6Sbalrog  ;;
11667d13299dSbellard  esac
11677d13299dSbellarddone
11687d13299dSbellard
1169f6f0b7d9SStefan Weilif ! has $python; then
1170f6f0b7d9SStefan Weil  error_exit "Python not found. Use --python=/path/to/python"
1171f6f0b7d9SStefan Weilfi
1172f6f0b7d9SStefan Weil
1173f6f0b7d9SStefan Weil# Note that if the Python conditional here evaluates True we will exit
1174f6f0b7d9SStefan Weil# with status 1 which is a shell 'false' value.
1175f6f0b7d9SStefan Weilif ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
1176f6f0b7d9SStefan Weil  error_exit "Cannot use '$python', Python 2.4 or later is required." \
1177f6f0b7d9SStefan Weil      "Note that Python 3 or later is not yet supported." \
1178f6f0b7d9SStefan Weil      "Use --python=/path/to/python to specify a supported Python."
1179f6f0b7d9SStefan Weilfi
1180f6f0b7d9SStefan Weil
1181f6f0b7d9SStefan Weil# The -B switch was added in Python 2.6.
1182f6f0b7d9SStefan Weil# If it is supplied, compiled files are not written.
1183f6f0b7d9SStefan Weil# Use it for Python versions which support it.
1184f6f0b7d9SStefan Weilif $python -B -c 'import sys; sys.exit(0)' 2>/dev/null; then
1185f6f0b7d9SStefan Weil  python="$python -B"
1186f6f0b7d9SStefan Weilfi
1187f6f0b7d9SStefan Weil
118840293e58Sbellardcase "$cpu" in
1189e3608d66SRichard Henderson    ppc)
1190e3608d66SRichard Henderson           CPU_CFLAGS="-m32"
1191e3608d66SRichard Henderson           LDFLAGS="-m32 $LDFLAGS"
1192e3608d66SRichard Henderson           ;;
1193e3608d66SRichard Henderson    ppc64)
1194e3608d66SRichard Henderson           CPU_CFLAGS="-m64"
1195e3608d66SRichard Henderson           LDFLAGS="-m64 $LDFLAGS"
1196e3608d66SRichard Henderson           ;;
11979b9c37c3SRichard Henderson    sparc)
11980c439cbfSJuan Quintela           LDFLAGS="-m32 $LDFLAGS"
119979f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m32 -mcpu=ultrasparc"
12003142255cSblueswir1           ;;
1201ed968ff1SJuan Quintela    sparc64)
12020c439cbfSJuan Quintela           LDFLAGS="-m64 $LDFLAGS"
120379f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m64 -mcpu=ultrasparc"
12043142255cSblueswir1           ;;
120576d83bdeSths    s390)
1206061cdd81SRichard Henderson           CPU_CFLAGS="-m31"
120728d7cc49SRichard Henderson           LDFLAGS="-m31 $LDFLAGS"
120828d7cc49SRichard Henderson           ;;
120928d7cc49SRichard Henderson    s390x)
1210061cdd81SRichard Henderson           CPU_CFLAGS="-m64"
121128d7cc49SRichard Henderson           LDFLAGS="-m64 $LDFLAGS"
121276d83bdeSths           ;;
121340293e58Sbellard    i386)
121479f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m32"
12150c439cbfSJuan Quintela           LDFLAGS="-m32 $LDFLAGS"
12162b2e59e6SPaolo Bonzini           cc_i386='$(CC) -m32'
121740293e58Sbellard           ;;
121840293e58Sbellard    x86_64)
121979f3b12fSPeter Crosthwaite           CPU_CFLAGS="-m64"
12200c439cbfSJuan Quintela           LDFLAGS="-m64 $LDFLAGS"
12212b2e59e6SPaolo Bonzini           cc_i386='$(CC) -m32'
1222379f6698SPaul Brook           ;;
1223c72b26ecSRichard Henderson    x32)
1224c72b26ecSRichard Henderson           CPU_CFLAGS="-mx32"
1225c72b26ecSRichard Henderson           LDFLAGS="-mx32 $LDFLAGS"
1226c72b26ecSRichard Henderson           cc_i386='$(CC) -m32'
1227c72b26ecSRichard Henderson           ;;
122830163d89SPeter Maydell    # No special flags required for other host CPUs
12293142255cSblueswir1esac
12303142255cSblueswir1
123179f3b12fSPeter CrosthwaiteQEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
123279f3b12fSPeter CrosthwaiteEXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
123379f3b12fSPeter Crosthwaite
123460e0df25SPeter Maydelldefault_target_list=""
123560e0df25SPeter Maydell
12366e92f823SPeter Maydellmak_wilds=""
12376e92f823SPeter Maydell
123860e0df25SPeter Maydellif [ "$softmmu" = "yes" ]; then
12396e92f823SPeter Maydell    mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
124060e0df25SPeter Maydellfi
124160e0df25SPeter Maydellif [ "$linux_user" = "yes" ]; then
12426e92f823SPeter Maydell    mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
124360e0df25SPeter Maydellfi
124460e0df25SPeter Maydellif [ "$bsd_user" = "yes" ]; then
12456e92f823SPeter Maydell    mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
124660e0df25SPeter Maydellfi
124760e0df25SPeter Maydell
12486e92f823SPeter Maydellfor config in $mak_wilds; do
12496e92f823SPeter Maydell    default_target_list="${default_target_list} $(basename "$config" .mak)"
12506e92f823SPeter Maydelldone
12516e92f823SPeter Maydell
1252af5db58eSpbrookif test x"$show_help" = x"yes" ; then
1253af5db58eSpbrookcat << EOF
1254af5db58eSpbrook
1255af5db58eSpbrookUsage: configure [options]
1256af5db58eSpbrookOptions: [defaults in brackets after descriptions]
1257af5db58eSpbrook
125808fb77edSStefan WeilStandard options:
125908fb77edSStefan Weil  --help                   print this message
126008fb77edSStefan Weil  --prefix=PREFIX          install in PREFIX [$prefix]
126108fb77edSStefan Weil  --interp-prefix=PREFIX   where to find shared libraries, etc.
126208fb77edSStefan Weil                           use %M for cpu name [$interp_prefix]
126308fb77edSStefan Weil  --target-list=LIST       set target list (default: build everything)
126408fb77edSStefan Weil$(echo Available targets: $default_target_list | \
126508fb77edSStefan Weil  fold -s -w 53 | sed -e 's/^/                           /')
126608fb77edSStefan Weil
126708fb77edSStefan WeilAdvanced options (experts only):
126808fb77edSStefan Weil  --source-path=PATH       path of source code [$source_path]
126908fb77edSStefan Weil  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
127008fb77edSStefan Weil  --cc=CC                  use C compiler CC [$cc]
127108fb77edSStefan Weil  --iasl=IASL              use ACPI compiler IASL [$iasl]
127208fb77edSStefan Weil  --host-cc=CC             use C compiler CC [$host_cc] for code run at
127308fb77edSStefan Weil                           build time
127408fb77edSStefan Weil  --cxx=CXX                use C++ compiler CXX [$cxx]
127508fb77edSStefan Weil  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
127608fb77edSStefan Weil  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
127708fb77edSStefan Weil  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
127808fb77edSStefan Weil  --make=MAKE              use specified make [$make]
127908fb77edSStefan Weil  --install=INSTALL        use specified install [$install]
128008fb77edSStefan Weil  --python=PYTHON          use specified python [$python]
128108fb77edSStefan Weil  --smbd=SMBD              use specified smbd [$smbd]
128208fb77edSStefan Weil  --static                 enable static build [$static]
128308fb77edSStefan Weil  --mandir=PATH            install man pages in PATH
128408fb77edSStefan Weil  --datadir=PATH           install firmware in PATH$confsuffix
128508fb77edSStefan Weil  --docdir=PATH            install documentation in PATH$confsuffix
128608fb77edSStefan Weil  --bindir=PATH            install binaries in PATH
128708fb77edSStefan Weil  --libdir=PATH            install libraries in PATH
128808fb77edSStefan Weil  --sysconfdir=PATH        install config in PATH$confsuffix
128908fb77edSStefan Weil  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
1290e26110cfSFam Zheng  --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
129108fb77edSStefan Weil  --enable-debug           enable common debug build options
129208fb77edSStefan Weil  --disable-strip          disable stripping binaries
129308fb77edSStefan Weil  --disable-werror         disable compilation abort on warning
129463678e17SSteven Noonan  --disable-stack-protector disable compiler-provided stack protection
129508fb77edSStefan Weil  --audio-drv-list=LIST    set audio drivers list:
129608fb77edSStefan Weil                           Available drivers: $audio_possible_drivers
129708fb77edSStefan Weil  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
129808fb77edSStefan Weil  --block-drv-rw-whitelist=L
129908fb77edSStefan Weil                           set block driver read-write whitelist
130008fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
130108fb77edSStefan Weil  --block-drv-ro-whitelist=L
130208fb77edSStefan Weil                           set block driver read-only whitelist
130308fb77edSStefan Weil                           (affects only QEMU, not qemu-img)
13045b808275SLluís Vilanova  --enable-trace-backends=B Set trace backend
130508fb77edSStefan Weil                           Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
130608fb77edSStefan Weil  --with-trace-file=NAME   Full PATH,NAME of file to store traces
130708fb77edSStefan Weil                           Default:trace-<pid>
1308c23f23b9SMichael Tokarev  --disable-slirp          disable SLIRP userspace network connectivity
1309c23f23b9SMichael Tokarev  --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1310c23f23b9SMichael Tokarev  --oss-lib                path to OSS library
1311c23f23b9SMichael Tokarev  --cpu=CPU                Build for host CPU [$cpu]
131208fb77edSStefan Weil  --with-coroutine=BACKEND coroutine backend. Supported options:
131308fb77edSStefan Weil                           gthread, ucontext, sigaltstack, windows
131408fb77edSStefan Weil  --enable-gcov            enable test coverage analysis with gcov
131508fb77edSStefan Weil  --gcov=GCOV              use specified gcov [$gcov_tool]
1316c23f23b9SMichael Tokarev  --disable-blobs          disable installing provided firmware blobs
1317c23f23b9SMichael Tokarev  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1318c23f23b9SMichael Tokarev  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1319c23f23b9SMichael Tokarev
1320c23f23b9SMichael TokarevOptional features, enabled with --enable-FEATURE and
1321c23f23b9SMichael Tokarevdisabled with --disable-FEATURE, default is enabled if available:
1322c23f23b9SMichael Tokarev
1323c23f23b9SMichael Tokarev  system          all system emulation targets
1324c23f23b9SMichael Tokarev  user            supported user emulation targets
1325c23f23b9SMichael Tokarev  linux-user      all linux usermode emulation targets
1326c23f23b9SMichael Tokarev  bsd-user        all BSD usermode emulation targets
1327c23f23b9SMichael Tokarev  guest-base      GUEST_BASE support for usermode emulation targets
1328c23f23b9SMichael Tokarev  docs            build documentation
1329c23f23b9SMichael Tokarev  guest-agent     build the QEMU Guest Agent
1330c23f23b9SMichael Tokarev  guest-agent-msi build guest agent Windows MSI installation package
1331c23f23b9SMichael Tokarev  pie             Position Independent Executables
1332c23f23b9SMichael Tokarev  modules         modules support
1333c23f23b9SMichael Tokarev  debug-tcg       TCG debugging (default is disabled)
1334c23f23b9SMichael Tokarev  debug-info      debugging information
1335c23f23b9SMichael Tokarev  sparse          sparse checker
1336c23f23b9SMichael Tokarev
1337*ddbb0d09SDaniel P. Berrange  gnutls          GNUTLS cryptography support
1338c23f23b9SMichael Tokarev  sdl             SDL UI
1339c23f23b9SMichael Tokarev  --with-sdlabi     select preferred SDL ABI 1.2 or 2.0
1340c23f23b9SMichael Tokarev  gtk             gtk UI
1341c23f23b9SMichael Tokarev  --with-gtkabi     select preferred GTK ABI 2.0 or 3.0
1342c23f23b9SMichael Tokarev  vte             vte support for the gtk UI
1343c23f23b9SMichael Tokarev  curses          curses UI
1344c23f23b9SMichael Tokarev  vnc             VNC UI support
1345c23f23b9SMichael Tokarev  vnc-tls         TLS encryption for VNC server
1346c23f23b9SMichael Tokarev  vnc-sasl        SASL encryption for VNC server
1347c23f23b9SMichael Tokarev  vnc-jpeg        JPEG lossy compression for VNC server
1348c23f23b9SMichael Tokarev  vnc-png         PNG compression for VNC server
1349c23f23b9SMichael Tokarev  vnc-ws          Websockets support for VNC server
1350c23f23b9SMichael Tokarev  cocoa           Cocoa UI (Mac OS X only)
1351c23f23b9SMichael Tokarev  virtfs          VirtFS
1352c23f23b9SMichael Tokarev  xen             xen backend driver support
1353c23f23b9SMichael Tokarev  xen-pci-passthrough
1354c23f23b9SMichael Tokarev  brlapi          BrlAPI (Braile)
1355c23f23b9SMichael Tokarev  curl            curl connectivity
1356c23f23b9SMichael Tokarev  fdt             fdt device tree
1357c23f23b9SMichael Tokarev  bluez           bluez stack connectivity
1358c23f23b9SMichael Tokarev  kvm             KVM acceleration support
1359c23f23b9SMichael Tokarev  rdma            RDMA-based migration support
1360c23f23b9SMichael Tokarev  uuid            uuid support
1361c23f23b9SMichael Tokarev  vde             support for vde network
1362c23f23b9SMichael Tokarev  netmap          support for netmap network
1363c23f23b9SMichael Tokarev  linux-aio       Linux AIO support
1364c23f23b9SMichael Tokarev  cap-ng          libcap-ng support
1365c23f23b9SMichael Tokarev  attr            attr and xattr support
1366c23f23b9SMichael Tokarev  vhost-net       vhost-net acceleration support
1367c23f23b9SMichael Tokarev  spice           spice
1368c23f23b9SMichael Tokarev  rbd             rados block device (rbd)
1369c23f23b9SMichael Tokarev  libiscsi        iscsi support
1370c23f23b9SMichael Tokarev  libnfs          nfs support
1371c23f23b9SMichael Tokarev  smartcard-nss   smartcard nss support
1372c23f23b9SMichael Tokarev  libusb          libusb (for usb passthrough)
1373c23f23b9SMichael Tokarev  usb-redir       usb network redirection support
1374c23f23b9SMichael Tokarev  lzo             support of lzo compression library
1375c23f23b9SMichael Tokarev  snappy          support of snappy compression library
1376c23f23b9SMichael Tokarev  bzip2           support of bzip2 compression library
1377c23f23b9SMichael Tokarev                  (for reading bzip2-compressed dmg images)
1378c23f23b9SMichael Tokarev  seccomp         seccomp support
1379c23f23b9SMichael Tokarev  coroutine-pool  coroutine freelist (better performance)
1380c23f23b9SMichael Tokarev  glusterfs       GlusterFS backend
1381c23f23b9SMichael Tokarev  archipelago     Archipelago backend
1382c23f23b9SMichael Tokarev  tpm             TPM support
1383c23f23b9SMichael Tokarev  libssh2         ssh block device support
1384c23f23b9SMichael Tokarev  vhdx            support for the Microsoft VHDX image format
1385c23f23b9SMichael Tokarev  quorum          quorum block filter support
1386c23f23b9SMichael Tokarev  numa            libnuma support
1387c23f23b9SMichael Tokarev  tcmalloc        tcmalloc support
138808fb77edSStefan Weil
138908fb77edSStefan WeilNOTE: The object files are built at the place where configure is launched
1390af5db58eSpbrookEOF
13912d2ad6d0SFam Zhengexit 0
1392af5db58eSpbrookfi
1393af5db58eSpbrook
1394359bc95dSPeter Maydell# Now we have handled --enable-tcg-interpreter and know we're not just
1395359bc95dSPeter Maydell# printing the help message, bail out if the host CPU isn't supported.
1396359bc95dSPeter Maydellif test "$ARCH" = "unknown"; then
1397359bc95dSPeter Maydell    if test "$tcg_interpreter" = "yes" ; then
1398359bc95dSPeter Maydell        echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1399359bc95dSPeter Maydell        ARCH=tci
1400359bc95dSPeter Maydell    else
140176ad07a4SPeter Maydell        error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1402359bc95dSPeter Maydell    fi
1403359bc95dSPeter Maydellfi
1404359bc95dSPeter Maydell
14059c83ffd8SPeter Maydell# Consult white-list to determine whether to enable werror
14069c83ffd8SPeter Maydell# by default.  Only enable by default for git builds
14079c83ffd8SPeter Maydellz_version=`cut -f3 -d. $source_path/VERSION`
14089c83ffd8SPeter Maydell
14099c83ffd8SPeter Maydellif test -z "$werror" ; then
14109c83ffd8SPeter Maydell    if test -d "$source_path/.git" -a \
14119c83ffd8SPeter Maydell        "$linux" = "yes" ; then
14129c83ffd8SPeter Maydell        werror="yes"
14139c83ffd8SPeter Maydell    else
14149c83ffd8SPeter Maydell        werror="no"
14159c83ffd8SPeter Maydell    fi
14169c83ffd8SPeter Maydellfi
14179c83ffd8SPeter Maydell
14188d05095cSPaolo Bonzini# check that the C compiler works.
141993b25869SJohn Snowwrite_c_skeleton;
14208d05095cSPaolo Bonziniif compile_object ; then
14218d05095cSPaolo Bonzini  : C compiler works ok
14228d05095cSPaolo Bonzinielse
142376ad07a4SPeter Maydell    error_exit "\"$cc\" either does not exist or does not work"
14248d05095cSPaolo Bonzinifi
14258d05095cSPaolo Bonzini
142698b21dcdSPeter Maydell# Check that the C++ compiler exists and works with the C compiler
142798b21dcdSPeter Maydellif has $cxx; then
142898b21dcdSPeter Maydell    cat > $TMPC <<EOF
142998b21dcdSPeter Maydellint c_function(void);
143098b21dcdSPeter Maydellint main(void) { return c_function(); }
143198b21dcdSPeter MaydellEOF
143298b21dcdSPeter Maydell
143398b21dcdSPeter Maydell    compile_object
143498b21dcdSPeter Maydell
14359c83ffd8SPeter Maydell    cat > $TMPCXX <<EOF
143698b21dcdSPeter Maydellextern "C" {
143798b21dcdSPeter Maydell   int c_function(void);
143898b21dcdSPeter Maydell}
143998b21dcdSPeter Maydellint c_function(void) { return 42; }
144098b21dcdSPeter MaydellEOF
144198b21dcdSPeter Maydell
14429c83ffd8SPeter Maydell    update_cxxflags
14439c83ffd8SPeter Maydell
14449c83ffd8SPeter Maydell    if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
144598b21dcdSPeter Maydell        # C++ compiler $cxx works ok with C compiler $cc
144698b21dcdSPeter Maydell        :
144798b21dcdSPeter Maydell    else
144898b21dcdSPeter Maydell        echo "C++ compiler $cxx does not work with C compiler $cc"
144998b21dcdSPeter Maydell        echo "Disabling C++ specific optional code"
145098b21dcdSPeter Maydell        cxx=
145198b21dcdSPeter Maydell    fi
145298b21dcdSPeter Maydellelse
145398b21dcdSPeter Maydell    echo "No C++ compiler available; disabling C++ specific optional code"
145498b21dcdSPeter Maydell    cxx=
145598b21dcdSPeter Maydellfi
145698b21dcdSPeter Maydell
14578d05095cSPaolo Bonzinigcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
14588d05095cSPaolo Bonzinigcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
14598d05095cSPaolo Bonzinigcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
146037746c5eSMarc-André Lureaugcc_flags="-Wendif-labels $gcc_flags"
1461c1556a81SPeter Maydellgcc_flags="-Wno-initializer-overrides $gcc_flags"
146271429097SPeter Maydellgcc_flags="-Wno-string-plus-int $gcc_flags"
14636ca026cbSPeter Maydell# Note that we do not add -Werror to gcc_flags here, because that would
14646ca026cbSPeter Maydell# enable it for all configure tests. If a configure test failed due
14656ca026cbSPeter Maydell# to -Werror this would just silently disable some features,
14666ca026cbSPeter Maydell# so it's too error prone.
146793b25869SJohn Snow
146893b25869SJohn Snowcc_has_warning_flag() {
146993b25869SJohn Snow    write_c_skeleton;
147093b25869SJohn Snow
1471a1d29d6cSPeter Maydell    # Use the positive sense of the flag when testing for -Wno-wombat
1472a1d29d6cSPeter Maydell    # support (gcc will happily accept the -Wno- form of unknown
1473a1d29d6cSPeter Maydell    # warning options).
147493b25869SJohn Snow    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
147593b25869SJohn Snow    compile_prog "-Werror $optflag" ""
147693b25869SJohn Snow}
147793b25869SJohn Snow
147893b25869SJohn Snowfor flag in $gcc_flags; do
147993b25869SJohn Snow    if cc_has_warning_flag $flag ; then
14808d05095cSPaolo Bonzini        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
14818d05095cSPaolo Bonzini    fi
14828d05095cSPaolo Bonzinidone
14838d05095cSPaolo Bonzini
148463678e17SSteven Noonanif test "$stack_protector" != "no"; then
148563678e17SSteven Noonan  gcc_flags="-fstack-protector-strong -fstack-protector-all"
14863b463a3fSMiroslav Rezanina  sp_on=0
148763678e17SSteven Noonan  for flag in $gcc_flags; do
1488590e5dd9SPeter Maydell    # We need to check both a compile and a link, since some compiler
1489590e5dd9SPeter Maydell    # setups fail only on a .c->.o compile and some only at link time
1490590e5dd9SPeter Maydell    if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1491590e5dd9SPeter Maydell       compile_prog "-Werror $flag" ""; then
149263678e17SSteven Noonan      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
149363678e17SSteven Noonan      LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
14943b463a3fSMiroslav Rezanina      sp_on=1
149563678e17SSteven Noonan      break
149663678e17SSteven Noonan    fi
149763678e17SSteven Noonan  done
14983b463a3fSMiroslav Rezanina  if test "$stack_protector" = yes; then
14993b463a3fSMiroslav Rezanina    if test $sp_on = 0; then
15003b463a3fSMiroslav Rezanina      error_exit "Stack protector not supported"
15013b463a3fSMiroslav Rezanina    fi
15023b463a3fSMiroslav Rezanina  fi
150337746c5eSMarc-André Lureaufi
150437746c5eSMarc-André Lureau
1505cbdd1999SPaolo Bonzini# Workaround for http://gcc.gnu.org/PR55489.  Happens with -fPIE/-fPIC and
1506cbdd1999SPaolo Bonzini# large functions that use global variables.  The bug is in all releases of
1507cbdd1999SPaolo Bonzini# GCC, but it became particularly acute in 4.6.x and 4.7.x.  It is fixed in
1508cbdd1999SPaolo Bonzini# 4.7.3 and 4.8.0.  We should be able to delete this at the end of 2013.
1509cbdd1999SPaolo Bonzinicat > $TMPC << EOF
1510cbdd1999SPaolo Bonzini#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1511cbdd1999SPaolo Bonziniint main(void) { return 0; }
1512cbdd1999SPaolo Bonzini#else
1513cbdd1999SPaolo Bonzini#error No bug in this compiler.
1514cbdd1999SPaolo Bonzini#endif
1515cbdd1999SPaolo BonziniEOF
1516cbdd1999SPaolo Bonziniif compile_prog "-Werror -fno-gcse" "" ; then
1517cbdd1999SPaolo Bonzini  TRANSLATE_OPT_CFLAGS=-fno-gcse
1518cbdd1999SPaolo Bonzinifi
1519cbdd1999SPaolo Bonzini
152040d6444eSAvi Kivityif test "$static" = "yes" ; then
1521aa0d1f44SPaolo Bonzini  if test "$modules" = "yes" ; then
1522aa0d1f44SPaolo Bonzini    error_exit "static and modules are mutually incompatible"
1523aa0d1f44SPaolo Bonzini  fi
152440d6444eSAvi Kivity  if test "$pie" = "yes" ; then
152576ad07a4SPeter Maydell    error_exit "static and pie are mutually incompatible"
152640d6444eSAvi Kivity  else
152740d6444eSAvi Kivity    pie="no"
152840d6444eSAvi Kivity  fi
152940d6444eSAvi Kivityfi
153040d6444eSAvi Kivity
1531768b7855SEmilio G. Cota# Unconditional check for compiler __thread support
1532768b7855SEmilio G. Cota  cat > $TMPC << EOF
1533768b7855SEmilio G. Cotastatic __thread int tls_var;
1534768b7855SEmilio G. Cotaint main(void) { return tls_var; }
1535768b7855SEmilio G. CotaEOF
1536768b7855SEmilio G. Cota
1537768b7855SEmilio G. Cotaif ! compile_prog "-Werror" "" ; then
1538768b7855SEmilio G. Cota    error_exit "Your compiler does not support the __thread specifier for " \
1539768b7855SEmilio G. Cota	"Thread-Local Storage (TLS). Please upgrade to a version that does."
1540768b7855SEmilio G. Cotafi
1541768b7855SEmilio G. Cota
154240d6444eSAvi Kivityif test "$pie" = ""; then
154340d6444eSAvi Kivity  case "$cpu-$targetos" in
1544c72b26ecSRichard Henderson    i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
154540d6444eSAvi Kivity      ;;
154640d6444eSAvi Kivity    *)
154740d6444eSAvi Kivity      pie="no"
154840d6444eSAvi Kivity      ;;
154940d6444eSAvi Kivity  esac
155040d6444eSAvi Kivityfi
155140d6444eSAvi Kivity
155240d6444eSAvi Kivityif test "$pie" != "no" ; then
155340d6444eSAvi Kivity  cat > $TMPC << EOF
155421d4a791SAvi Kivity
155521d4a791SAvi Kivity#ifdef __linux__
155621d4a791SAvi Kivity#  define THREAD __thread
155721d4a791SAvi Kivity#else
155821d4a791SAvi Kivity#  define THREAD
155921d4a791SAvi Kivity#endif
156021d4a791SAvi Kivity
156121d4a791SAvi Kivitystatic THREAD int tls_var;
156221d4a791SAvi Kivity
156321d4a791SAvi Kivityint main(void) { return tls_var; }
156421d4a791SAvi Kivity
156540d6444eSAvi KivityEOF
156640d6444eSAvi Kivity  if compile_prog "-fPIE -DPIE" "-pie"; then
156740d6444eSAvi Kivity    QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
156840d6444eSAvi Kivity    LDFLAGS="-pie $LDFLAGS"
156940d6444eSAvi Kivity    pie="yes"
157040d6444eSAvi Kivity    if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
157140d6444eSAvi Kivity      LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
157240d6444eSAvi Kivity    fi
157340d6444eSAvi Kivity  else
157440d6444eSAvi Kivity    if test "$pie" = "yes"; then
157576ad07a4SPeter Maydell      error_exit "PIE not available due to missing toolchain support"
157640d6444eSAvi Kivity    else
157740d6444eSAvi Kivity      echo "Disabling PIE due to missing toolchain support"
157840d6444eSAvi Kivity      pie="no"
157940d6444eSAvi Kivity    fi
158040d6444eSAvi Kivity  fi
158146eef33bSBrad
1582e4a7b344SStefan Hajnoczi  if compile_prog "-Werror -fno-pie" "-nopie"; then
158346eef33bSBrad    CFLAGS_NOPIE="-fno-pie"
158446eef33bSBrad    LDFLAGS_NOPIE="-nopie"
158546eef33bSBrad  fi
158640d6444eSAvi Kivityfi
158740d6444eSAvi Kivity
158866518bf6SDon Slutz# check for broken gcc and libtool in RHEL5
158966518bf6SDon Slutzif test -n "$libtool" -a "$pie" != "no" ; then
159066518bf6SDon Slutz  cat > $TMPC <<EOF
159166518bf6SDon Slutz
159266518bf6SDon Slutzvoid *f(unsigned char *buf, int len);
159366518bf6SDon Slutzvoid *g(unsigned char *buf, int len);
159466518bf6SDon Slutz
159566518bf6SDon Slutzvoid *
159666518bf6SDon Slutzf(unsigned char *buf, int len)
159766518bf6SDon Slutz{
159866518bf6SDon Slutz    return (void*)0L;
159966518bf6SDon Slutz}
160066518bf6SDon Slutz
160166518bf6SDon Slutzvoid *
160266518bf6SDon Slutzg(unsigned char *buf, int len)
160366518bf6SDon Slutz{
160466518bf6SDon Slutz    return f(buf, len);
160566518bf6SDon Slutz}
160666518bf6SDon Slutz
160766518bf6SDon SlutzEOF
160866518bf6SDon Slutz  if ! libtool_prog; then
160966518bf6SDon Slutz    echo "Disabling libtool due to broken toolchain support"
161066518bf6SDon Slutz    libtool=
161166518bf6SDon Slutz  fi
161266518bf6SDon Slutzfi
161366518bf6SDon Slutz
161409dada40SPaolo Bonzini##########################################
161509dada40SPaolo Bonzini# __sync_fetch_and_and requires at least -march=i486. Many toolchains
161609dada40SPaolo Bonzini# use i686 as default anyway, but for those that don't, an explicit
161709dada40SPaolo Bonzini# specification is necessary
161809dada40SPaolo Bonzini
161909dada40SPaolo Bonziniif test "$cpu" = "i386"; then
162009dada40SPaolo Bonzini  cat > $TMPC << EOF
162109dada40SPaolo Bonzinistatic int sfaa(int *ptr)
162209dada40SPaolo Bonzini{
162309dada40SPaolo Bonzini  return __sync_fetch_and_and(ptr, 0);
162409dada40SPaolo Bonzini}
162509dada40SPaolo Bonzini
162609dada40SPaolo Bonziniint main(void)
162709dada40SPaolo Bonzini{
162809dada40SPaolo Bonzini  int val = 42;
16291405b629SStefan Weil  val = __sync_val_compare_and_swap(&val, 0, 1);
163009dada40SPaolo Bonzini  sfaa(&val);
163109dada40SPaolo Bonzini  return val;
163209dada40SPaolo Bonzini}
163309dada40SPaolo BonziniEOF
163409dada40SPaolo Bonzini  if ! compile_prog "" "" ; then
163509dada40SPaolo Bonzini    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
163609dada40SPaolo Bonzini  fi
163709dada40SPaolo Bonzinifi
163809dada40SPaolo Bonzini
163909dada40SPaolo Bonzini#########################################
1640ec530c81Sbellard# Solaris specific configure tool chain decisions
164109dada40SPaolo Bonzini
1642ec530c81Sbellardif test "$solaris" = "yes" ; then
16436792aa11SLoïc Minier  if has $install; then
16446792aa11SLoïc Minier    :
16456792aa11SLoïc Minier  else
164676ad07a4SPeter Maydell    error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
164776ad07a4SPeter Maydell        "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
164876ad07a4SPeter Maydell        "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1649ec530c81Sbellard  fi
16506792aa11SLoïc Minier  if test "`path_of $install`" = "/usr/sbin/install" ; then
165176ad07a4SPeter Maydell    error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
165276ad07a4SPeter Maydell        "try ginstall from the GNU fileutils available from www.blastwave.org" \
165376ad07a4SPeter Maydell        "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1654ec530c81Sbellard  fi
16556792aa11SLoïc Minier  if has ar; then
16566792aa11SLoïc Minier    :
16576792aa11SLoïc Minier  else
1658ec530c81Sbellard    if test -f /usr/ccs/bin/ar ; then
165976ad07a4SPeter Maydell      error_exit "No path includes ar" \
166076ad07a4SPeter Maydell          "Add /usr/ccs/bin to your path and rerun configure"
1661ec530c81Sbellard    fi
166276ad07a4SPeter Maydell    error_exit "No path includes ar"
1663ec530c81Sbellard  fi
1664ec530c81Sbellardfi
1665ec530c81Sbellard
1666afb63ebdSStefan Weilif test -z "${target_list+xxx}" ; then
1667121afa9eSAnthony Liguori    target_list="$default_target_list"
1668121afa9eSAnthony Liguorielse
1669121afa9eSAnthony Liguori    target_list=`echo "$target_list" | sed -e 's/,/ /g'`
16705327cf48Sbellardfi
167125b48338SPeter Maydell
167225b48338SPeter Maydell# Check that we recognised the target name; this allows a more
167325b48338SPeter Maydell# friendly error message than if we let it fall through.
167425b48338SPeter Maydellfor target in $target_list; do
167525b48338SPeter Maydell    case " $default_target_list " in
167625b48338SPeter Maydell        *" $target "*)
167725b48338SPeter Maydell            ;;
167825b48338SPeter Maydell        *)
167925b48338SPeter Maydell            error_exit "Unknown target name '$target'"
168025b48338SPeter Maydell            ;;
168125b48338SPeter Maydell    esac
168225b48338SPeter Maydelldone
168325b48338SPeter Maydell
1684f55fe278SPaolo Bonzini# see if system emulation was really requested
1685f55fe278SPaolo Bonzinicase " $target_list " in
1686f55fe278SPaolo Bonzini  *"-softmmu "*) softmmu=yes
1687f55fe278SPaolo Bonzini  ;;
1688f55fe278SPaolo Bonzini  *) softmmu=no
1689f55fe278SPaolo Bonzini  ;;
1690f55fe278SPaolo Bonziniesac
16915327cf48Sbellard
1692249247c9SJuan Quintelafeature_not_found() {
1693249247c9SJuan Quintela  feature=$1
169421684af0SStewart Smith  remedy=$2
1695249247c9SJuan Quintela
169676ad07a4SPeter Maydell  error_exit "User requested feature $feature" \
169721684af0SStewart Smith      "configure was not able to find it." \
169821684af0SStewart Smith      "$remedy"
1699249247c9SJuan Quintela}
1700249247c9SJuan Quintela
17017d13299dSbellard# ---
17027d13299dSbellard# big/little endian test
17037d13299dSbellardcat > $TMPC << EOF
170461cc919fSMike Frysingershort big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
170561cc919fSMike Frysingershort little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
170661cc919fSMike Frysingerextern int foo(short *, short *);
170761cc919fSMike Frysingerint main(int argc, char *argv[]) {
170861cc919fSMike Frysinger    return foo(big_endian, little_endian);
17097d13299dSbellard}
17107d13299dSbellardEOF
17117d13299dSbellard
171261cc919fSMike Frysingerif compile_object ; then
171361cc919fSMike Frysinger    if grep -q BiGeNdIaN $TMPO ; then
171461cc919fSMike Frysinger        bigendian="yes"
171561cc919fSMike Frysinger    elif grep -q LiTtLeEnDiAn $TMPO ; then
171661cc919fSMike Frysinger        bigendian="no"
17177d13299dSbellard    else
17187d13299dSbellard        echo big/little test failed
17197d13299dSbellard    fi
17207d13299dSbellardelse
172161cc919fSMike Frysinger    echo big/little test failed
17227d13299dSbellardfi
17237d13299dSbellard
1724b0a47e79SJuan Quintela##########################################
1725015a33bdSGonglei# L2TPV3 probe
1726015a33bdSGonglei
1727015a33bdSGongleicat > $TMPC <<EOF
1728015a33bdSGonglei#include <sys/socket.h>
1729bff6cb72SMichael Tokarev#include <linux/ip.h>
1730015a33bdSGongleiint main(void) { return sizeof(struct mmsghdr); }
1731015a33bdSGongleiEOF
1732015a33bdSGongleiif compile_prog "" "" ; then
1733015a33bdSGonglei  l2tpv3=yes
1734015a33bdSGongleielse
1735015a33bdSGonglei  l2tpv3=no
1736015a33bdSGongleifi
1737015a33bdSGonglei
1738015a33bdSGonglei##########################################
1739779ab5e3SStefan Weil# pkg-config probe
1740779ab5e3SStefan Weil
1741779ab5e3SStefan Weilif ! has "$pkg_config_exe"; then
174276ad07a4SPeter Maydell  error_exit "pkg-config binary '$pkg_config_exe' not found"
1743779ab5e3SStefan Weilfi
1744779ab5e3SStefan Weil
1745779ab5e3SStefan Weil##########################################
1746b0a47e79SJuan Quintela# NPTL probe
1747b0a47e79SJuan Quintela
174824cb36a6SPeter Maydellif test "$linux_user" = "yes"; then
1749bd0c5661Spbrook  cat > $TMPC <<EOF
1750bd0c5661Spbrook#include <sched.h>
175130813ceaSpbrook#include <linux/futex.h>
1752182eacc0SStefan Weilint main(void) {
1753bd0c5661Spbrook#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1754bd0c5661Spbrook#error bork
1755bd0c5661Spbrook#endif
1756182eacc0SStefan Weil  return 0;
1757bd0c5661Spbrook}
1758bd0c5661SpbrookEOF
175924cb36a6SPeter Maydell  if ! compile_object ; then
176021684af0SStewart Smith    feature_not_found "nptl" "Install glibc and linux kernel headers."
1761b0a47e79SJuan Quintela  fi
1762bd0c5661Spbrookfi
1763bd0c5661Spbrook
176411d9f695Sbellard##########################################
1765ac62922eSbalrog# zlib check
1766ac62922eSbalrog
17671ece9905SAlon Levyif test "$zlib" != "no" ; then
1768ac62922eSbalrog    cat > $TMPC << EOF
1769ac62922eSbalrog#include <zlib.h>
1770ac62922eSbalrogint main(void) { zlibVersion(); return 0; }
1771ac62922eSbalrogEOF
177252166aa0SJuan Quintela    if compile_prog "" "-lz" ; then
1773ac62922eSbalrog        :
1774ac62922eSbalrog    else
177576ad07a4SPeter Maydell        error_exit "zlib check failed" \
177676ad07a4SPeter Maydell            "Make sure to have the zlib libs and headers installed."
1777ac62922eSbalrog    fi
17781ece9905SAlon Levyfi
1779eb0ecd5aSWill NewtonLIBS="$LIBS -lz"
1780ac62922eSbalrog
1781ac62922eSbalrog##########################################
1782607dacd0Sqiaonuohan# lzo check
1783607dacd0Sqiaonuohan
1784607dacd0Sqiaonuohanif test "$lzo" != "no" ; then
1785607dacd0Sqiaonuohan    cat > $TMPC << EOF
1786607dacd0Sqiaonuohan#include <lzo/lzo1x.h>
1787607dacd0Sqiaonuohanint main(void) { lzo_version(); return 0; }
1788607dacd0SqiaonuohanEOF
1789607dacd0Sqiaonuohan    if compile_prog "" "-llzo2" ; then
1790607dacd0Sqiaonuohan        libs_softmmu="$libs_softmmu -llzo2"
1791b25c9dffSStefan Weil        lzo="yes"
1792b25c9dffSStefan Weil    else
1793b25c9dffSStefan Weil        if test "$lzo" = "yes"; then
1794b25c9dffSStefan Weil            feature_not_found "liblzo2" "Install liblzo2 devel"
1795b25c9dffSStefan Weil        fi
1796b25c9dffSStefan Weil        lzo="no"
1797b25c9dffSStefan Weil    fi
1798607dacd0Sqiaonuohanfi
1799607dacd0Sqiaonuohan
1800607dacd0Sqiaonuohan##########################################
1801607dacd0Sqiaonuohan# snappy check
1802607dacd0Sqiaonuohan
1803607dacd0Sqiaonuohanif test "$snappy" != "no" ; then
1804607dacd0Sqiaonuohan    cat > $TMPC << EOF
1805607dacd0Sqiaonuohan#include <snappy-c.h>
1806607dacd0Sqiaonuohanint main(void) { snappy_max_compressed_length(4096); return 0; }
1807607dacd0SqiaonuohanEOF
1808607dacd0Sqiaonuohan    if compile_prog "" "-lsnappy" ; then
1809607dacd0Sqiaonuohan        libs_softmmu="$libs_softmmu -lsnappy"
1810b25c9dffSStefan Weil        snappy="yes"
1811b25c9dffSStefan Weil    else
1812b25c9dffSStefan Weil        if test "$snappy" = "yes"; then
1813b25c9dffSStefan Weil            feature_not_found "libsnappy" "Install libsnappy devel"
1814b25c9dffSStefan Weil        fi
1815b25c9dffSStefan Weil        snappy="no"
1816b25c9dffSStefan Weil    fi
1817607dacd0Sqiaonuohanfi
1818607dacd0Sqiaonuohan
1819607dacd0Sqiaonuohan##########################################
18206b383c08SPeter Wu# bzip2 check
18216b383c08SPeter Wu
18226b383c08SPeter Wuif test "$bzip2" != "no" ; then
18236b383c08SPeter Wu    cat > $TMPC << EOF
18246b383c08SPeter Wu#include <bzlib.h>
18256b383c08SPeter Wuint main(void) { BZ2_bzlibVersion(); return 0; }
18266b383c08SPeter WuEOF
18276b383c08SPeter Wu    if compile_prog "" "-lbz2" ; then
18286b383c08SPeter Wu        bzip2="yes"
18296b383c08SPeter Wu    else
18306b383c08SPeter Wu        if test "$bzip2" = "yes"; then
18316b383c08SPeter Wu            feature_not_found "libbzip2" "Install libbzip2 devel"
18326b383c08SPeter Wu        fi
18336b383c08SPeter Wu        bzip2="no"
18346b383c08SPeter Wu    fi
18356b383c08SPeter Wufi
18366b383c08SPeter Wu
18376b383c08SPeter Wu##########################################
1838f794573eSEduardo Otubo# libseccomp check
1839f794573eSEduardo Otubo
1840f794573eSEduardo Otuboif test "$seccomp" != "no" ; then
1841ae6e8ef1SPeter Maydell    if test "$cpu" = "i386" || test "$cpu" = "x86_64" &&
1842ae6e8ef1SPeter Maydell        $pkg_config --atleast-version=2.1.1 libseccomp; then
1843b4451996SMichael Tokarev        libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
1844372e47e9SAndreas Färber        QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
1845f794573eSEduardo Otubo	seccomp="yes"
1846f794573eSEduardo Otubo    else
1847f794573eSEduardo Otubo	if test "$seccomp" = "yes"; then
1848896848f0SEduardo Otubo            feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.1"
1849896848f0SEduardo Otubo	fi
1850e84d5956SYann E. MORIN	seccomp="no"
1851f794573eSEduardo Otubo    fi
1852f794573eSEduardo Otubofi
1853f794573eSEduardo Otubo##########################################
1854e37630caSaliguori# xen probe
1855e37630caSaliguori
1856fc321b4bSJuan Quintelaif test "$xen" != "no" ; then
1857b2266beeSJuan Quintela  xen_libs="-lxenstore -lxenctrl -lxenguest"
1858d5b93ddfSAnthony PERARD
185950ced5b3SStefan Weil  # First we test whether Xen headers and libraries are available.
186050ced5b3SStefan Weil  # If no, we are done and there is no Xen support.
186150ced5b3SStefan Weil  # If yes, more tests are run to detect the Xen version.
186250ced5b3SStefan Weil
186350ced5b3SStefan Weil  # Xen (any)
186450ced5b3SStefan Weil  cat > $TMPC <<EOF
186550ced5b3SStefan Weil#include <xenctrl.h>
186650ced5b3SStefan Weilint main(void) {
186750ced5b3SStefan Weil  return 0;
186850ced5b3SStefan Weil}
186950ced5b3SStefan WeilEOF
187050ced5b3SStefan Weil  if ! compile_prog "" "$xen_libs" ; then
187150ced5b3SStefan Weil    # Xen not found
187250ced5b3SStefan Weil    if test "$xen" = "yes" ; then
187321684af0SStewart Smith      feature_not_found "xen" "Install xen devel"
187450ced5b3SStefan Weil    fi
187550ced5b3SStefan Weil    xen=no
187650ced5b3SStefan Weil
1877d5b93ddfSAnthony PERARD  # Xen unstable
187869deef08SPeter Maydell  elif
187969deef08SPeter Maydell      cat > $TMPC <<EOF &&
1880e37630caSaliguori#include <xenctrl.h>
1881e108a3c1SAnthony PERARD#include <xenstore.h>
1882d5b93ddfSAnthony PERARD#include <stdint.h>
1883d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h>
1884d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS)
1885d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined
1886d5b93ddfSAnthony PERARD#endif
1887d5b93ddfSAnthony PERARDint main(void) {
1888d5b93ddfSAnthony PERARD  xc_interface *xc;
1889d5b93ddfSAnthony PERARD  xs_daemon_open();
1890d5b93ddfSAnthony PERARD  xc = xc_interface_open(0, 0, 0);
1891d5b93ddfSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1892d5b93ddfSAnthony PERARD  xc_gnttab_open(NULL, 0);
1893b87de24eSAnthony PERARD  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
18948688e065SStefano Stabellini  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
18953996e85cSPaul Durrant  xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
18963996e85cSPaul Durrant  return 0;
18973996e85cSPaul Durrant}
18983996e85cSPaul DurrantEOF
18993996e85cSPaul Durrant      compile_prog "" "$xen_libs"
19003996e85cSPaul Durrant    then
19013996e85cSPaul Durrant    xen_ctrl_version=450
19023996e85cSPaul Durrant    xen=yes
19033996e85cSPaul Durrant
19043996e85cSPaul Durrant  elif
19053996e85cSPaul Durrant      cat > $TMPC <<EOF &&
19063996e85cSPaul Durrant#include <xenctrl.h>
19073996e85cSPaul Durrant#include <xenstore.h>
19083996e85cSPaul Durrant#include <stdint.h>
19093996e85cSPaul Durrant#include <xen/hvm/hvm_info_table.h>
19103996e85cSPaul Durrant#if !defined(HVM_MAX_VCPUS)
19113996e85cSPaul Durrant# error HVM_MAX_VCPUS not defined
19123996e85cSPaul Durrant#endif
19133996e85cSPaul Durrantint main(void) {
19143996e85cSPaul Durrant  xc_interface *xc;
19153996e85cSPaul Durrant  xs_daemon_open();
19163996e85cSPaul Durrant  xc = xc_interface_open(0, 0, 0);
19173996e85cSPaul Durrant  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
19183996e85cSPaul Durrant  xc_gnttab_open(NULL, 0);
19193996e85cSPaul Durrant  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
19203996e85cSPaul Durrant  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
19218688e065SStefano Stabellini  return 0;
19228688e065SStefano Stabellini}
19238688e065SStefano StabelliniEOF
19248688e065SStefano Stabellini      compile_prog "" "$xen_libs"
192569deef08SPeter Maydell    then
19268688e065SStefano Stabellini    xen_ctrl_version=420
19278688e065SStefano Stabellini    xen=yes
19288688e065SStefano Stabellini
192969deef08SPeter Maydell  elif
193069deef08SPeter Maydell      cat > $TMPC <<EOF &&
19318688e065SStefano Stabellini#include <xenctrl.h>
19328688e065SStefano Stabellini#include <xs.h>
19338688e065SStefano Stabellini#include <stdint.h>
19348688e065SStefano Stabellini#include <xen/hvm/hvm_info_table.h>
19358688e065SStefano Stabellini#if !defined(HVM_MAX_VCPUS)
19368688e065SStefano Stabellini# error HVM_MAX_VCPUS not defined
19378688e065SStefano Stabellini#endif
19388688e065SStefano Stabelliniint main(void) {
19398688e065SStefano Stabellini  xs_daemon_open();
19409b4c0b56SPeter Maydell  xc_interface_open(0, 0, 0);
19418688e065SStefano Stabellini  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
19428688e065SStefano Stabellini  xc_gnttab_open(NULL, 0);
19438688e065SStefano Stabellini  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1944d5b93ddfSAnthony PERARD  return 0;
1945d5b93ddfSAnthony PERARD}
1946e37630caSaliguoriEOF
194750ced5b3SStefan Weil      compile_prog "" "$xen_libs"
194869deef08SPeter Maydell    then
1949d5b93ddfSAnthony PERARD    xen_ctrl_version=410
1950fc321b4bSJuan Quintela    xen=yes
1951d5b93ddfSAnthony PERARD
1952d5b93ddfSAnthony PERARD  # Xen 4.0.0
195369deef08SPeter Maydell  elif
195469deef08SPeter Maydell      cat > $TMPC <<EOF &&
1955d5b93ddfSAnthony PERARD#include <xenctrl.h>
1956d5b93ddfSAnthony PERARD#include <xs.h>
1957d5b93ddfSAnthony PERARD#include <stdint.h>
1958d5b93ddfSAnthony PERARD#include <xen/hvm/hvm_info_table.h>
1959d5b93ddfSAnthony PERARD#if !defined(HVM_MAX_VCPUS)
1960d5b93ddfSAnthony PERARD# error HVM_MAX_VCPUS not defined
1961d5b93ddfSAnthony PERARD#endif
1962d5b93ddfSAnthony PERARDint main(void) {
1963b87de24eSAnthony PERARD  struct xen_add_to_physmap xatp = {
1964b87de24eSAnthony PERARD    .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1965b87de24eSAnthony PERARD  };
1966d5b93ddfSAnthony PERARD  xs_daemon_open();
1967d5b93ddfSAnthony PERARD  xc_interface_open();
1968d5b93ddfSAnthony PERARD  xc_gnttab_open();
1969d5b93ddfSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1970b87de24eSAnthony PERARD  xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1971d5b93ddfSAnthony PERARD  return 0;
1972d5b93ddfSAnthony PERARD}
1973d5b93ddfSAnthony PERARDEOF
1974d5b93ddfSAnthony PERARD      compile_prog "" "$xen_libs"
197569deef08SPeter Maydell    then
1976d5b93ddfSAnthony PERARD    xen_ctrl_version=400
1977d5b93ddfSAnthony PERARD    xen=yes
1978d5b93ddfSAnthony PERARD
1979b87de24eSAnthony PERARD  # Xen 3.4.0
198069deef08SPeter Maydell  elif
198169deef08SPeter Maydell      cat > $TMPC <<EOF &&
1982b87de24eSAnthony PERARD#include <xenctrl.h>
1983b87de24eSAnthony PERARD#include <xs.h>
1984b87de24eSAnthony PERARDint main(void) {
1985b87de24eSAnthony PERARD  struct xen_add_to_physmap xatp = {
1986b87de24eSAnthony PERARD    .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1987b87de24eSAnthony PERARD  };
1988b87de24eSAnthony PERARD  xs_daemon_open();
1989b87de24eSAnthony PERARD  xc_interface_open();
1990b87de24eSAnthony PERARD  xc_gnttab_open();
1991b87de24eSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1992b87de24eSAnthony PERARD  xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1993b87de24eSAnthony PERARD  return 0;
1994b87de24eSAnthony PERARD}
1995b87de24eSAnthony PERARDEOF
1996b87de24eSAnthony PERARD      compile_prog "" "$xen_libs"
199769deef08SPeter Maydell    then
1998b87de24eSAnthony PERARD    xen_ctrl_version=340
1999b87de24eSAnthony PERARD    xen=yes
2000b87de24eSAnthony PERARD
2001b87de24eSAnthony PERARD  # Xen 3.3.0
200269deef08SPeter Maydell  elif
200369deef08SPeter Maydell      cat > $TMPC <<EOF &&
2004d5b93ddfSAnthony PERARD#include <xenctrl.h>
2005d5b93ddfSAnthony PERARD#include <xs.h>
2006d5b93ddfSAnthony PERARDint main(void) {
2007d5b93ddfSAnthony PERARD  xs_daemon_open();
2008d5b93ddfSAnthony PERARD  xc_interface_open();
2009d5b93ddfSAnthony PERARD  xc_gnttab_open();
2010d5b93ddfSAnthony PERARD  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2011d5b93ddfSAnthony PERARD  return 0;
2012d5b93ddfSAnthony PERARD}
2013d5b93ddfSAnthony PERARDEOF
2014d5b93ddfSAnthony PERARD      compile_prog "" "$xen_libs"
201569deef08SPeter Maydell    then
2016d5b93ddfSAnthony PERARD    xen_ctrl_version=330
2017d5b93ddfSAnthony PERARD    xen=yes
2018d5b93ddfSAnthony PERARD
201950ced5b3SStefan Weil  # Xen version unsupported
2020e37630caSaliguori  else
2021fc321b4bSJuan Quintela    if test "$xen" = "yes" ; then
202221684af0SStewart Smith      feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
2023fc321b4bSJuan Quintela    fi
2024fc321b4bSJuan Quintela    xen=no
2025e37630caSaliguori  fi
2026d5b93ddfSAnthony PERARD
2027d5b93ddfSAnthony PERARD  if test "$xen" = yes; then
2028d5b93ddfSAnthony PERARD    libs_softmmu="$xen_libs $libs_softmmu"
2029d5b93ddfSAnthony PERARD  fi
2030e37630caSaliguorifi
2031e37630caSaliguori
2032eb6fda0fSAnthony PERARDif test "$xen_pci_passthrough" != "no"; then
2033eb6fda0fSAnthony PERARD  if test "$xen" = "yes" && test "$linux" = "yes" &&
2034eb6fda0fSAnthony PERARD    test "$xen_ctrl_version" -ge 340; then
2035eb6fda0fSAnthony PERARD    xen_pci_passthrough=yes
2036eb6fda0fSAnthony PERARD  else
2037eb6fda0fSAnthony PERARD    if test "$xen_pci_passthrough" = "yes"; then
2038eb6fda0fSAnthony PERARD      if test "$xen_ctrl_version" -lt 340; then
203976ad07a4SPeter Maydell        error_exit "User requested feature Xen PCI Passthrough" \
204076ad07a4SPeter Maydell            "This feature does not work with Xen 3.3"
2041eb6fda0fSAnthony PERARD      fi
204276ad07a4SPeter Maydell      error_exit "User requested feature Xen PCI Passthrough" \
204376ad07a4SPeter Maydell          " but this feature requires /sys from Linux"
2044eb6fda0fSAnthony PERARD    fi
2045eb6fda0fSAnthony PERARD    xen_pci_passthrough=no
2046eb6fda0fSAnthony PERARD  fi
2047eb6fda0fSAnthony PERARDfi
2048eb6fda0fSAnthony PERARD
2049e37630caSaliguori##########################################
205044dc0ca3SAlon Levy# libtool probe
205144dc0ca3SAlon Levy
20523f534581SBradif ! has $libtool; then
205344dc0ca3SAlon Levy    libtool=
205444dc0ca3SAlon Levyfi
205544dc0ca3SAlon Levy
20568e515b12SPeter Maydell# MacOSX ships with a libtool which isn't the GNU one; weed this
20578e515b12SPeter Maydell# out by checking whether libtool supports the --version switch
20588e515b12SPeter Maydellif test -n "$libtool"; then
20598e515b12SPeter Maydell  if ! "$libtool" --version >/dev/null 2>&1; then
20608e515b12SPeter Maydell    libtool=
20618e515b12SPeter Maydell  fi
20628e515b12SPeter Maydellfi
20638e515b12SPeter Maydell
206444dc0ca3SAlon Levy##########################################
2065dfffc653SJuan Quintela# Sparse probe
2066dfffc653SJuan Quintelaif test "$sparse" != "no" ; then
20670dba6195SLoïc Minier  if has cgcc; then
2068dfffc653SJuan Quintela    sparse=yes
2069dfffc653SJuan Quintela  else
2070dfffc653SJuan Quintela    if test "$sparse" = "yes" ; then
207121684af0SStewart Smith      feature_not_found "sparse" "Install sparse binary"
2072dfffc653SJuan Quintela    fi
2073dfffc653SJuan Quintela    sparse=no
2074dfffc653SJuan Quintela  fi
2075dfffc653SJuan Quintelafi
2076dfffc653SJuan Quintela
2077dfffc653SJuan Quintela##########################################
2078f676c67eSJeremy White# X11 probe
2079f676c67eSJeremy Whitex11_cflags=
2080f676c67eSJeremy Whitex11_libs=-lX11
2081f676c67eSJeremy Whiteif $pkg_config --exists "x11"; then
2082f676c67eSJeremy White    x11_cflags=`$pkg_config --cflags x11`
2083f676c67eSJeremy White    x11_libs=`$pkg_config --libs x11`
2084f676c67eSJeremy Whitefi
2085f676c67eSJeremy White
2086f676c67eSJeremy White##########################################
2087a4ccabcfSAnthony Liguori# GTK probe
2088a4ccabcfSAnthony Liguori
20899e04c683SStefan Weilif test "$gtkabi" = ""; then
20909e04c683SStefan Weil    # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
20919e04c683SStefan Weil    # Use 3.0 as a fallback if that is available.
20929e04c683SStefan Weil    if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
20939e04c683SStefan Weil        gtkabi=2.0
20949e04c683SStefan Weil    elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
20959e04c683SStefan Weil        gtkabi=3.0
20969e04c683SStefan Weil    else
20979e04c683SStefan Weil        gtkabi=2.0
20989e04c683SStefan Weil    fi
20999e04c683SStefan Weilfi
21009e04c683SStefan Weil
2101a4ccabcfSAnthony Liguoriif test "$gtk" != "no"; then
2102528de90aSDaniel P. Berrange    gtkpackage="gtk+-$gtkabi"
21030a337ed0SGerd Hoffmann    gtkx11package="gtk+-x11-$gtkabi"
2104528de90aSDaniel P. Berrange    if test "$gtkabi" = "3.0" ; then
2105528de90aSDaniel P. Berrange      gtkversion="3.0.0"
2106bbbf9bfbSStefan Weil    else
2107bbbf9bfbSStefan Weil      gtkversion="2.18.0"
2108bbbf9bfbSStefan Weil    fi
2109bbbf9bfbSStefan Weil    if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2110bbbf9bfbSStefan Weil        gtk_cflags=`$pkg_config --cflags $gtkpackage`
2111bbbf9bfbSStefan Weil        gtk_libs=`$pkg_config --libs $gtkpackage`
21120a337ed0SGerd Hoffmann        if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2113f676c67eSJeremy White            gtk_cflags="$gtk_cflags $x11_cflags"
2114f676c67eSJeremy White            gtk_libs="$gtk_libs $x11_libs"
21150a337ed0SGerd Hoffmann        fi
2116bbbf9bfbSStefan Weil        libs_softmmu="$gtk_libs $libs_softmmu"
2117bbbf9bfbSStefan Weil        gtk="yes"
2118bbbf9bfbSStefan Weil    elif test "$gtk" = "yes"; then
21199e04c683SStefan Weil        feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2120bbbf9bfbSStefan Weil    else
2121bbbf9bfbSStefan Weil        gtk="no"
2122bbbf9bfbSStefan Weil    fi
2123bbbf9bfbSStefan Weilfi
2124bbbf9bfbSStefan Weil
2125*ddbb0d09SDaniel P. Berrange
2126*ddbb0d09SDaniel P. Berrange##########################################
2127*ddbb0d09SDaniel P. Berrange# GNUTLS probe
2128*ddbb0d09SDaniel P. Berrange
2129*ddbb0d09SDaniel P. Berrangeif test "$gnutls" != "no"; then
2130*ddbb0d09SDaniel P. Berrange    if $pkg_config --exists "gnutls"; then
2131*ddbb0d09SDaniel P. Berrange        gnutls_cflags=`$pkg_config --cflags gnutls`
2132*ddbb0d09SDaniel P. Berrange        gnutls_libs=`$pkg_config --libs gnutls`
2133*ddbb0d09SDaniel P. Berrange        libs_softmmu="$gnutls_libs $libs_softmmu"
2134*ddbb0d09SDaniel P. Berrange        libs_tools="$gnutls_libs $libs_tools"
2135*ddbb0d09SDaniel P. Berrange	QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2136*ddbb0d09SDaniel P. Berrange        gnutls="yes"
2137*ddbb0d09SDaniel P. Berrange
2138*ddbb0d09SDaniel P. Berrange	# gnutls_hash_init requires >= 2.9.10
2139*ddbb0d09SDaniel P. Berrange	if $pkg_config --exists "gnutls >= 2.9.10"; then
2140*ddbb0d09SDaniel P. Berrange            gnutls_hash="yes"
2141*ddbb0d09SDaniel P. Berrange	else
2142*ddbb0d09SDaniel P. Berrange	    gnutls_hash="no"
2143*ddbb0d09SDaniel P. Berrange	fi
2144*ddbb0d09SDaniel P. Berrange    elif test "$gnutls" = "yes"; then
2145*ddbb0d09SDaniel P. Berrange	feature_not_found "gnutls" "Install gnutls devel"
2146*ddbb0d09SDaniel P. Berrange    else
2147*ddbb0d09SDaniel P. Berrange        gnutls="no"
2148*ddbb0d09SDaniel P. Berrange        gnutls_hash="no"
2149*ddbb0d09SDaniel P. Berrange    fi
2150*ddbb0d09SDaniel P. Berrangeelse
2151*ddbb0d09SDaniel P. Berrange    gnutls_hash="no"
2152*ddbb0d09SDaniel P. Berrangefi
2153*ddbb0d09SDaniel P. Berrange
2154*ddbb0d09SDaniel P. Berrange
2155bbbf9bfbSStefan Weil##########################################
2156bbbf9bfbSStefan Weil# VTE probe
2157bbbf9bfbSStefan Weil
2158bbbf9bfbSStefan Weilif test "$vte" != "no"; then
2159bbbf9bfbSStefan Weil    if test "$gtkabi" = "3.0"; then
2160528de90aSDaniel P. Berrange      vtepackage="vte-2.90"
2161528de90aSDaniel P. Berrange      vteversion="0.32.0"
2162528de90aSDaniel P. Berrange    else
2163528de90aSDaniel P. Berrange      vtepackage="vte"
2164528de90aSDaniel P. Berrange      vteversion="0.24.0"
2165528de90aSDaniel P. Berrange    fi
2166bbbf9bfbSStefan Weil    if $pkg_config --exists "$vtepackage >= $vteversion"; then
2167ca871ec8SStefan Weil        vte_cflags=`$pkg_config --cflags $vtepackage`
2168ca871ec8SStefan Weil        vte_libs=`$pkg_config --libs $vtepackage`
2169bbbf9bfbSStefan Weil        libs_softmmu="$vte_libs $libs_softmmu"
2170bbbf9bfbSStefan Weil        vte="yes"
2171bbbf9bfbSStefan Weil    elif test "$vte" = "yes"; then
21729e04c683SStefan Weil        if test "$gtkabi" = "3.0"; then
21739e04c683SStefan Weil            feature_not_found "vte" "Install libvte-2.90 devel"
21749e04c683SStefan Weil        else
21759e04c683SStefan Weil            feature_not_found "vte" "Install libvte devel"
21769e04c683SStefan Weil        fi
2177bbbf9bfbSStefan Weil    else
2178bbbf9bfbSStefan Weil        vte="no"
2179a4ccabcfSAnthony Liguori    fi
2180a4ccabcfSAnthony Liguorifi
2181a4ccabcfSAnthony Liguori
2182a4ccabcfSAnthony Liguori##########################################
218311d9f695Sbellard# SDL probe
218411d9f695Sbellard
21853ec87ffeSPaolo Bonzini# Look for sdl configuration program (pkg-config or sdl-config).  Try
21863ec87ffeSPaolo Bonzini# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
218747c03744SDave Airlie
218847c03744SDave Airlieif test $sdlabi = "2.0"; then
218947c03744SDave Airlie    sdl_config=$sdl2_config
219047c03744SDave Airlie    sdlname=sdl2
219147c03744SDave Airlie    sdlconfigname=sdl2_config
219247c03744SDave Airlieelse
219347c03744SDave Airlie    sdlname=sdl
219447c03744SDave Airlie    sdlconfigname=sdl_config
21953ec87ffeSPaolo Bonzinifi
21963ec87ffeSPaolo Bonzini
219747c03744SDave Airlieif test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
219847c03744SDave Airlie  sdl_config=$sdlconfigname
219947c03744SDave Airliefi
220047c03744SDave Airlie
220147c03744SDave Airlieif $pkg_config $sdlname --exists; then
220247c03744SDave Airlie  sdlconfig="$pkg_config $sdlname"
2203fec0e3e8SStefan Weil  _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
22043ec87ffeSPaolo Bonzinielif has ${sdl_config}; then
22053ec87ffeSPaolo Bonzini  sdlconfig="$sdl_config"
22069316f803SPaolo Bonzini  _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2207a0dfd8a4SLoïc Minierelse
2208a0dfd8a4SLoïc Minier  if test "$sdl" = "yes" ; then
220921684af0SStewart Smith    feature_not_found "sdl" "Install SDL devel"
2210a0dfd8a4SLoïc Minier  fi
2211a0dfd8a4SLoïc Minier  sdl=no
22129316f803SPaolo Bonzinifi
221329e5badaSScott Woodif test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
22143ec87ffeSPaolo Bonzini  echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
22153ec87ffeSPaolo Bonzinifi
221611d9f695Sbellard
22179316f803SPaolo Bonzinisdl_too_old=no
2218c4198157SJuan Quintelaif test "$sdl" != "no" ; then
221911d9f695Sbellard  cat > $TMPC << EOF
222011d9f695Sbellard#include <SDL.h>
222111d9f695Sbellard#undef main /* We don't want SDL to override our main() */
222211d9f695Sbellardint main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
222311d9f695SbellardEOF
22249316f803SPaolo Bonzini  sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
222574f42e18STeLeMan  if test "$static" = "yes" ; then
222674f42e18STeLeMan    sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
222774f42e18STeLeMan  else
22289316f803SPaolo Bonzini    sdl_libs=`$sdlconfig --libs 2> /dev/null`
222974f42e18STeLeMan  fi
223052166aa0SJuan Quintela  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
223111d9f695Sbellard    if test "$_sdlversion" -lt 121 ; then
223211d9f695Sbellard      sdl_too_old=yes
223311d9f695Sbellard    else
2234fd677642Sths      if test "$cocoa" = "no" ; then
223511d9f695Sbellard        sdl=yes
223611d9f695Sbellard      fi
2237fd677642Sths    fi
22387c1f25b4Sbellard
223967c274d3SPaolo Bonzini    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
22401ac88f28SJuan Quintela    if test "$sdl" = "yes" -a "$static" = "yes" ; then
224167c274d3SPaolo Bonzini      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2242f8aa6c7bSStefan Weil         sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2243f8aa6c7bSStefan Weil         sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
224411d9f695Sbellard      fi
224552166aa0SJuan Quintela      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
22461ac88f28SJuan Quintela	:
22471ac88f28SJuan Quintela      else
22481ac88f28SJuan Quintela        sdl=no
22497c1f25b4Sbellard      fi
22507c1f25b4Sbellard    fi # static link
2251c4198157SJuan Quintela  else # sdl not found
2252c4198157SJuan Quintela    if test "$sdl" = "yes" ; then
225321684af0SStewart Smith      feature_not_found "sdl" "Install SDL devel"
2254c4198157SJuan Quintela    fi
2255c4198157SJuan Quintela    sdl=no
22567c1f25b4Sbellard  fi # sdl compile test
2257fd677642Sthsfi
225811d9f695Sbellard
22595368a422Saliguoriif test "$sdl" = "yes" ; then
22605368a422Saliguori  cat > $TMPC <<EOF
22615368a422Saliguori#include <SDL.h>
22625368a422Saliguori#if defined(SDL_VIDEO_DRIVER_X11)
22635368a422Saliguori#include <X11/XKBlib.h>
22645368a422Saliguori#else
22655368a422Saliguori#error No x11 support
22665368a422Saliguori#endif
22675368a422Saliguoriint main(void) { return 0; }
22685368a422SaliguoriEOF
2269f676c67eSJeremy White  if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2270f676c67eSJeremy White    sdl_cflags="$sdl_cflags $x11_cflags"
2271f676c67eSJeremy White    sdl_libs="$sdl_libs $x11_libs"
22725368a422Saliguori  fi
22730705667eSJuan Quintela  libs_softmmu="$sdl_libs $libs_softmmu"
22745368a422Saliguorifi
22755368a422Saliguori
22768f28f3fbSths##########################################
22772da776dbSMichael R. Hines# RDMA needs OpenFabrics libraries
22782da776dbSMichael R. Hinesif test "$rdma" != "no" ; then
22792da776dbSMichael R. Hines  cat > $TMPC <<EOF
22802da776dbSMichael R. Hines#include <rdma/rdma_cma.h>
22812da776dbSMichael R. Hinesint main(void) { return 0; }
22822da776dbSMichael R. HinesEOF
22832da776dbSMichael R. Hines  rdma_libs="-lrdmacm -libverbs"
22842da776dbSMichael R. Hines  if compile_prog "" "$rdma_libs" ; then
22852da776dbSMichael R. Hines    rdma="yes"
22862da776dbSMichael R. Hines    libs_softmmu="$libs_softmmu $rdma_libs"
22872da776dbSMichael R. Hines  else
22882da776dbSMichael R. Hines    if test "$rdma" = "yes" ; then
22892da776dbSMichael R. Hines        error_exit \
22902da776dbSMichael R. Hines            " OpenFabrics librdmacm/libibverbs not present." \
22912da776dbSMichael R. Hines            " Your options:" \
22922da776dbSMichael R. Hines            "  (1) Fast: Install infiniband packages from your distro." \
22932da776dbSMichael R. Hines            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
22942da776dbSMichael R. Hines            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
22952da776dbSMichael R. Hines    fi
22962da776dbSMichael R. Hines    rdma="no"
22972da776dbSMichael R. Hines  fi
22982da776dbSMichael R. Hinesfi
22992da776dbSMichael R. Hines
23002da776dbSMichael R. Hines##########################################
23017536ee4bSTim Hardeck# VNC TLS/WS detection
23027536ee4bSTim Hardeckif test "$vnc" = "yes" -a \( "$vnc_tls" != "no" -o "$vnc_ws" != "no" \) ; then
2303ae6b5e5aSaliguori  cat > $TMPC <<EOF
2304ae6b5e5aSaliguori#include <gnutls/gnutls.h>
2305ae6b5e5aSaliguoriint main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
2306ae6b5e5aSaliguoriEOF
2307a8bd70adSPaolo Bonzini  vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2308a8bd70adSPaolo Bonzini  vnc_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
230952166aa0SJuan Quintela  if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
23107536ee4bSTim Hardeck    if test "$vnc_tls" != "no" ; then
23111be10ad2SJuan Quintela      vnc_tls=yes
23127536ee4bSTim Hardeck    fi
23137536ee4bSTim Hardeck    if test "$vnc_ws" != "no" ; then
23147536ee4bSTim Hardeck      vnc_ws=yes
23157536ee4bSTim Hardeck    fi
2316a5e32cc9SJuan Quintela    libs_softmmu="$vnc_tls_libs $libs_softmmu"
2317ca273d58SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_tls_cflags"
2318ae6b5e5aSaliguori  else
23191be10ad2SJuan Quintela    if test "$vnc_tls" = "yes" ; then
232021684af0SStewart Smith      feature_not_found "vnc-tls" "Install gnutls devel"
23211be10ad2SJuan Quintela    fi
23227536ee4bSTim Hardeck    if test "$vnc_ws" = "yes" ; then
232321684af0SStewart Smith      feature_not_found "vnc-ws" "Install gnutls devel"
23247536ee4bSTim Hardeck    fi
23251be10ad2SJuan Quintela    vnc_tls=no
23267536ee4bSTim Hardeck    vnc_ws=no
23278d5d2d4cSths  fi
23288d5d2d4cSthsfi
23298d5d2d4cSths
23308d5d2d4cSths##########################################
233195c6bff3SBenoît Canet# Quorum probe (check for gnutls)
233295c6bff3SBenoît Canetif test "$quorum" != "no" ; then
233395c6bff3SBenoît Canetcat > $TMPC <<EOF
233495c6bff3SBenoît Canet#include <gnutls/gnutls.h>
233595c6bff3SBenoît Canet#include <gnutls/crypto.h>
233695c6bff3SBenoît Canetint main(void) {char data[4096], digest[32];
233795c6bff3SBenoît Canetgnutls_hash_fast(GNUTLS_DIG_SHA256, data, 4096, digest);
233895c6bff3SBenoît Canetreturn 0;
233995c6bff3SBenoît Canet}
234095c6bff3SBenoît CanetEOF
234195c6bff3SBenoît Canetquorum_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
234295c6bff3SBenoît Canetquorum_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
234395c6bff3SBenoît Canetif compile_prog "$quorum_tls_cflags" "$quorum_tls_libs" ; then
234495c6bff3SBenoît Canet  qcow_tls=yes
234595c6bff3SBenoît Canet  libs_softmmu="$quorum_tls_libs $libs_softmmu"
234695c6bff3SBenoît Canet  libs_tools="$quorum_tls_libs $libs_softmmu"
234795c6bff3SBenoît Canet  QEMU_CFLAGS="$QEMU_CFLAGS $quorum_tls_cflags"
2348b25c9dffSStefan Weil  quorum="yes"
234995c6bff3SBenoît Canetelse
2350b25c9dffSStefan Weil  if test "$quorum" = "yes"; then
2351b25c9dffSStefan Weil    feature_not_found "gnutls" "gnutls > 2.10.0 required to compile Quorum"
2352b25c9dffSStefan Weil  fi
2353b25c9dffSStefan Weil  quorum="no"
235495c6bff3SBenoît Canetfi
235595c6bff3SBenoît Canetfi
235695c6bff3SBenoît Canet
235795c6bff3SBenoît Canet##########################################
23582f9606b3Saliguori# VNC SASL detection
2359821601eaSJes Sorensenif test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
23602f9606b3Saliguori  cat > $TMPC <<EOF
23612f9606b3Saliguori#include <sasl/sasl.h>
23622f9606b3Saliguori#include <stdio.h>
23632f9606b3Saliguoriint main(void) { sasl_server_init(NULL, "qemu"); return 0; }
23642f9606b3SaliguoriEOF
23652f9606b3Saliguori  # Assuming Cyrus-SASL installed in /usr prefix
23662f9606b3Saliguori  vnc_sasl_cflags=""
23672f9606b3Saliguori  vnc_sasl_libs="-lsasl2"
236852166aa0SJuan Quintela  if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2369ea784e3bSJuan Quintela    vnc_sasl=yes
2370fa838301SJuan Quintela    libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2371ca273d58SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
23722f9606b3Saliguori  else
2373ea784e3bSJuan Quintela    if test "$vnc_sasl" = "yes" ; then
237421684af0SStewart Smith      feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2375ea784e3bSJuan Quintela    fi
2376ea784e3bSJuan Quintela    vnc_sasl=no
23772f9606b3Saliguori  fi
23782f9606b3Saliguorifi
23792f9606b3Saliguori
23802f9606b3Saliguori##########################################
23812f6f5c7aSCorentin Chary# VNC JPEG detection
2382821601eaSJes Sorensenif test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
23832f6f5c7aSCorentin Charycat > $TMPC <<EOF
23842f6f5c7aSCorentin Chary#include <stdio.h>
23852f6f5c7aSCorentin Chary#include <jpeglib.h>
23862f6f5c7aSCorentin Charyint main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
23872f6f5c7aSCorentin CharyEOF
23882f6f5c7aSCorentin Chary    vnc_jpeg_cflags=""
23892f6f5c7aSCorentin Chary    vnc_jpeg_libs="-ljpeg"
23902f6f5c7aSCorentin Chary  if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
23912f6f5c7aSCorentin Chary    vnc_jpeg=yes
23922f6f5c7aSCorentin Chary    libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2393ca273d58SPaolo Bonzini    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
23942f6f5c7aSCorentin Chary  else
23952f6f5c7aSCorentin Chary    if test "$vnc_jpeg" = "yes" ; then
239621684af0SStewart Smith      feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
23972f6f5c7aSCorentin Chary    fi
23982f6f5c7aSCorentin Chary    vnc_jpeg=no
23992f6f5c7aSCorentin Chary  fi
24002f6f5c7aSCorentin Charyfi
24012f6f5c7aSCorentin Chary
24022f6f5c7aSCorentin Chary##########################################
2403efe556adSCorentin Chary# VNC PNG detection
2404821601eaSJes Sorensenif test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2405efe556adSCorentin Charycat > $TMPC <<EOF
2406efe556adSCorentin Chary//#include <stdio.h>
2407efe556adSCorentin Chary#include <png.h>
2408832ce9c2SScott Wood#include <stddef.h>
2409efe556adSCorentin Charyint main(void) {
2410efe556adSCorentin Chary    png_structp png_ptr;
2411efe556adSCorentin Chary    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
24127edc3fedSPeter Maydell    return png_ptr != 0;
2413efe556adSCorentin Chary}
2414efe556adSCorentin CharyEOF
241565d5d3f9SStefan Weil  if $pkg_config libpng --exists; then
2416ca871ec8SStefan Weil    vnc_png_cflags=`$pkg_config libpng --cflags`
2417ca871ec8SStefan Weil    vnc_png_libs=`$pkg_config libpng --libs`
24189af8025eSBrad  else
2419efe556adSCorentin Chary    vnc_png_cflags=""
2420efe556adSCorentin Chary    vnc_png_libs="-lpng"
24219af8025eSBrad  fi
2422efe556adSCorentin Chary  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2423efe556adSCorentin Chary    vnc_png=yes
2424efe556adSCorentin Chary    libs_softmmu="$vnc_png_libs $libs_softmmu"
24259af8025eSBrad    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2426efe556adSCorentin Chary  else
2427efe556adSCorentin Chary    if test "$vnc_png" = "yes" ; then
242821684af0SStewart Smith      feature_not_found "vnc-png" "Install libpng devel"
2429efe556adSCorentin Chary    fi
2430efe556adSCorentin Chary    vnc_png=no
2431efe556adSCorentin Chary  fi
2432efe556adSCorentin Charyfi
2433efe556adSCorentin Chary
2434efe556adSCorentin Chary##########################################
243576655d6dSaliguori# fnmatch() probe, used for ACL routines
243676655d6dSaliguorifnmatch="no"
243776655d6dSaliguoricat > $TMPC << EOF
243876655d6dSaliguori#include <fnmatch.h>
243976655d6dSaliguoriint main(void)
244076655d6dSaliguori{
244176655d6dSaliguori    fnmatch("foo", "foo", 0);
244276655d6dSaliguori    return 0;
244376655d6dSaliguori}
244476655d6dSaliguoriEOF
244552166aa0SJuan Quintelaif compile_prog "" "" ; then
244676655d6dSaliguori   fnmatch="yes"
244776655d6dSaliguorifi
244876655d6dSaliguori
244976655d6dSaliguori##########################################
2450ee682d27SStefan Weil# uuid_generate() probe, used for vdi block driver
24512d16c8e9SPeter Maydell# Note that on some systems (notably MacOSX) no extra library
24522d16c8e9SPeter Maydell# need be linked to get the uuid functions.
2453ee682d27SStefan Weilif test "$uuid" != "no" ; then
2454ee682d27SStefan Weil  uuid_libs="-luuid"
2455ee682d27SStefan Weil  cat > $TMPC << EOF
2456ee682d27SStefan Weil#include <uuid/uuid.h>
2457ee682d27SStefan Weilint main(void)
2458ee682d27SStefan Weil{
2459ee682d27SStefan Weil    uuid_t my_uuid;
2460ee682d27SStefan Weil    uuid_generate(my_uuid);
2461ee682d27SStefan Weil    return 0;
2462ee682d27SStefan Weil}
2463ee682d27SStefan WeilEOF
24642d16c8e9SPeter Maydell  if compile_prog "" "" ; then
24652d16c8e9SPeter Maydell    uuid="yes"
24662d16c8e9SPeter Maydell  elif compile_prog "" "$uuid_libs" ; then
2467ee682d27SStefan Weil    uuid="yes"
2468ee682d27SStefan Weil    libs_softmmu="$uuid_libs $libs_softmmu"
2469ee682d27SStefan Weil    libs_tools="$uuid_libs $libs_tools"
2470ee682d27SStefan Weil  else
2471ee682d27SStefan Weil    if test "$uuid" = "yes" ; then
247221684af0SStewart Smith      feature_not_found "uuid" "Install libuuid devel"
2473ee682d27SStefan Weil    fi
2474ee682d27SStefan Weil    uuid=no
2475ee682d27SStefan Weil  fi
2476ee682d27SStefan Weilfi
2477ee682d27SStefan Weil
24784f18b782SJeff Codyif test "$vhdx" = "yes" ; then
24794f18b782SJeff Cody    if test "$uuid" = "no" ; then
24804f18b782SJeff Cody        error_exit "uuid required for VHDX support"
24814f18b782SJeff Cody    fi
24824f18b782SJeff Codyelif test "$vhdx" != "no" ; then
24834f18b782SJeff Cody    if test "$uuid" = "yes" ; then
24844f18b782SJeff Cody        vhdx=yes
24854f18b782SJeff Cody    else
24864f18b782SJeff Cody        vhdx=no
24874f18b782SJeff Cody    fi
24884f18b782SJeff Codyfi
24894f18b782SJeff Cody
2490ee682d27SStefan Weil##########################################
2491dce512deSChristoph Hellwig# xfsctl() probe, used for raw-posix
2492dce512deSChristoph Hellwigif test "$xfs" != "no" ; then
2493dce512deSChristoph Hellwig  cat > $TMPC << EOF
2494ffc41d10SStefan Weil#include <stddef.h>  /* NULL */
2495dce512deSChristoph Hellwig#include <xfs/xfs.h>
2496dce512deSChristoph Hellwigint main(void)
2497dce512deSChristoph Hellwig{
2498dce512deSChristoph Hellwig    xfsctl(NULL, 0, 0, NULL);
2499dce512deSChristoph Hellwig    return 0;
2500dce512deSChristoph Hellwig}
2501dce512deSChristoph HellwigEOF
2502dce512deSChristoph Hellwig  if compile_prog "" "" ; then
2503dce512deSChristoph Hellwig    xfs="yes"
2504dce512deSChristoph Hellwig  else
2505dce512deSChristoph Hellwig    if test "$xfs" = "yes" ; then
250621684af0SStewart Smith      feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2507dce512deSChristoph Hellwig    fi
2508dce512deSChristoph Hellwig    xfs=no
2509dce512deSChristoph Hellwig  fi
2510dce512deSChristoph Hellwigfi
2511dce512deSChristoph Hellwig
2512dce512deSChristoph Hellwig##########################################
25138a16d273Sths# vde libraries probe
2514dfb278bdSJuan Quintelaif test "$vde" != "no" ; then
25154baae0acSJuan Quintela  vde_libs="-lvdeplug"
25168a16d273Sths  cat > $TMPC << EOF
25178a16d273Sths#include <libvdeplug.h>
25184a7f0e06Spbrookint main(void)
25194a7f0e06Spbrook{
25204a7f0e06Spbrook    struct vde_open_args a = {0, 0, 0};
2521fea08e08SPeter Maydell    char s[] = "";
2522fea08e08SPeter Maydell    vde_open(s, s, &a);
25234a7f0e06Spbrook    return 0;
25244a7f0e06Spbrook}
25258a16d273SthsEOF
252652166aa0SJuan Quintela  if compile_prog "" "$vde_libs" ; then
25274baae0acSJuan Quintela    vde=yes
25288e02e54cSJuan Quintela    libs_softmmu="$vde_libs $libs_softmmu"
25298e02e54cSJuan Quintela    libs_tools="$vde_libs $libs_tools"
2530dfb278bdSJuan Quintela  else
2531dfb278bdSJuan Quintela    if test "$vde" = "yes" ; then
253221684af0SStewart Smith      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2533dfb278bdSJuan Quintela    fi
2534dfb278bdSJuan Quintela    vde=no
25358a16d273Sths  fi
25368a16d273Sthsfi
25378a16d273Sths
25388a16d273Sths##########################################
25390a985b37SVincenzo Maffione# netmap support probe
25400a985b37SVincenzo Maffione# Apart from looking for netmap headers, we make sure that the host API version
25410a985b37SVincenzo Maffione# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
25420a985b37SVincenzo Maffione# a minor/major version number. Minor new features will be marked with values up
25430a985b37SVincenzo Maffione# to 15, and if something happens that requires a change to the backend we will
25440a985b37SVincenzo Maffione# move above 15, submit the backend fixes and modify this two bounds.
254558952137SVincenzo Maffioneif test "$netmap" != "no" ; then
254658952137SVincenzo Maffione  cat > $TMPC << EOF
254758952137SVincenzo Maffione#include <inttypes.h>
254858952137SVincenzo Maffione#include <net/if.h>
254958952137SVincenzo Maffione#include <net/netmap.h>
255058952137SVincenzo Maffione#include <net/netmap_user.h>
25510a985b37SVincenzo Maffione#if (NETMAP_API < 11) || (NETMAP_API > 15)
25520a985b37SVincenzo Maffione#error
25530a985b37SVincenzo Maffione#endif
255458952137SVincenzo Maffioneint main(void) { return 0; }
255558952137SVincenzo MaffioneEOF
255658952137SVincenzo Maffione  if compile_prog "" "" ; then
255758952137SVincenzo Maffione    netmap=yes
255858952137SVincenzo Maffione  else
255958952137SVincenzo Maffione    if test "$netmap" = "yes" ; then
256058952137SVincenzo Maffione      feature_not_found "netmap"
256158952137SVincenzo Maffione    fi
256258952137SVincenzo Maffione    netmap=no
256358952137SVincenzo Maffione  fi
256458952137SVincenzo Maffionefi
256558952137SVincenzo Maffione
256658952137SVincenzo Maffione##########################################
256747e98658SCorey Bryant# libcap-ng library probe
256847e98658SCorey Bryantif test "$cap_ng" != "no" ; then
256947e98658SCorey Bryant  cap_libs="-lcap-ng"
257047e98658SCorey Bryant  cat > $TMPC << EOF
257147e98658SCorey Bryant#include <cap-ng.h>
257247e98658SCorey Bryantint main(void)
257347e98658SCorey Bryant{
257447e98658SCorey Bryant    capng_capability_to_name(CAPNG_EFFECTIVE);
257547e98658SCorey Bryant    return 0;
257647e98658SCorey Bryant}
257747e98658SCorey BryantEOF
257847e98658SCorey Bryant  if compile_prog "" "$cap_libs" ; then
257947e98658SCorey Bryant    cap_ng=yes
258047e98658SCorey Bryant    libs_tools="$cap_libs $libs_tools"
258147e98658SCorey Bryant  else
258247e98658SCorey Bryant    if test "$cap_ng" = "yes" ; then
258321684af0SStewart Smith      feature_not_found "cap_ng" "Install libcap-ng devel"
258447e98658SCorey Bryant    fi
258547e98658SCorey Bryant    cap_ng=no
258647e98658SCorey Bryant  fi
258747e98658SCorey Bryantfi
258847e98658SCorey Bryant
258947e98658SCorey Bryant##########################################
2590c2de5c91Smalc# Sound support libraries probe
25918f28f3fbSths
2592c2de5c91Smalcaudio_drv_probe()
2593c2de5c91Smalc{
2594c2de5c91Smalc    drv=$1
2595c2de5c91Smalc    hdr=$2
2596c2de5c91Smalc    lib=$3
2597c2de5c91Smalc    exp=$4
2598c2de5c91Smalc    cfl=$5
25998f28f3fbSths        cat > $TMPC << EOF
2600c2de5c91Smalc#include <$hdr>
2601c2de5c91Smalcint main(void) { $exp }
26028f28f3fbSthsEOF
260352166aa0SJuan Quintela    if compile_prog "$cfl" "$lib" ; then
26048f28f3fbSths        :
26058f28f3fbSths    else
260676ad07a4SPeter Maydell        error_exit "$drv check failed" \
260776ad07a4SPeter Maydell            "Make sure to have the $drv libs and headers installed."
26088f28f3fbSths    fi
2609c2de5c91Smalc}
2610c2de5c91Smalc
26112fa7d3bfSmalcaudio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2612c2de5c91Smalcfor drv in $audio_drv_list; do
2613c2de5c91Smalc    case $drv in
2614c2de5c91Smalc    alsa)
2615c2de5c91Smalc    audio_drv_probe $drv alsa/asoundlib.h -lasound \
2616e35bcb0cSStefan Weil        "return snd_pcm_close((snd_pcm_t *)0);"
2617a4bf6780SJuan Quintela    libs_softmmu="-lasound $libs_softmmu"
2618c2de5c91Smalc    ;;
2619c2de5c91Smalc
2620b8e59f18Smalc    pa)
2621a394aed2SMarc-André Lureau    audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2622a394aed2SMarc-André Lureau        "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2623a394aed2SMarc-André Lureau    libs_softmmu="-lpulse $libs_softmmu"
262467f86e8eSJuan Quintela    audio_pt_int="yes"
2625b8e59f18Smalc    ;;
2626b8e59f18Smalc
2627997e690aSJuan Quintela    coreaudio)
2628997e690aSJuan Quintela      libs_softmmu="-framework CoreAudio $libs_softmmu"
2629997e690aSJuan Quintela    ;;
2630997e690aSJuan Quintela
2631a4bf6780SJuan Quintela    dsound)
2632a4bf6780SJuan Quintela      libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2633d5631638Smalc      audio_win_int="yes"
2634a4bf6780SJuan Quintela    ;;
2635a4bf6780SJuan Quintela
2636a4bf6780SJuan Quintela    oss)
2637a4bf6780SJuan Quintela      libs_softmmu="$oss_lib $libs_softmmu"
2638a4bf6780SJuan Quintela    ;;
2639a4bf6780SJuan Quintela
2640a4bf6780SJuan Quintela    sdl|wav)
26412f6a1ab0Sblueswir1    # XXX: Probes for CoreAudio, DirectSound, SDL(?)
26422f6a1ab0Sblueswir1    ;;
26432f6a1ab0Sblueswir1
2644e4c63a6aSmalc    *)
26451c9b2a52Smalc    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
264676ad07a4SPeter Maydell        error_exit "Unknown driver '$drv' selected" \
264776ad07a4SPeter Maydell            "Possible drivers are: $audio_possible_drivers"
2648e4c63a6aSmalc    }
2649e4c63a6aSmalc    ;;
2650c2de5c91Smalc    esac
2651c2de5c91Smalcdone
26528f28f3fbSths
26534d3b6f6eSbalrog##########################################
26542e4d9fb1Saurel32# BrlAPI probe
26552e4d9fb1Saurel32
26564ffcedb6SJuan Quintelaif test "$brlapi" != "no" ; then
2657eb82284fSJuan Quintela  brlapi_libs="-lbrlapi"
26582e4d9fb1Saurel32  cat > $TMPC << EOF
26592e4d9fb1Saurel32#include <brlapi.h>
2660832ce9c2SScott Wood#include <stddef.h>
26612e4d9fb1Saurel32int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
26622e4d9fb1Saurel32EOF
266352166aa0SJuan Quintela  if compile_prog "" "$brlapi_libs" ; then
26642e4d9fb1Saurel32    brlapi=yes
2665264606b3SJuan Quintela    libs_softmmu="$brlapi_libs $libs_softmmu"
26664ffcedb6SJuan Quintela  else
26674ffcedb6SJuan Quintela    if test "$brlapi" = "yes" ; then
266821684af0SStewart Smith      feature_not_found "brlapi" "Install brlapi devel"
26694ffcedb6SJuan Quintela    fi
26704ffcedb6SJuan Quintela    brlapi=no
2671eb82284fSJuan Quintela  fi
2672eb82284fSJuan Quintelafi
26732e4d9fb1Saurel32
26742e4d9fb1Saurel32##########################################
26754d3b6f6eSbalrog# curses probe
2676a3605bf6SMichael Tokarevif test "$curses" != "no" ; then
2677e095e2f3SStefan Weil  if test "$mingw32" = "yes" ; then
2678e095e2f3SStefan Weil    curses_list="-lpdcurses"
2679e095e2f3SStefan Weil  else
2680cfeda5f4SEd Maste    curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2681e095e2f3SStefan Weil  fi
2682c584a6d0SJuan Quintela  curses_found=no
26834d3b6f6eSbalrog  cat > $TMPC << EOF
26844d3b6f6eSbalrog#include <curses.h>
2685ef9a2524SStefan Weilint main(void) {
2686ef9a2524SStefan Weil  const char *s = curses_version();
2687ef9a2524SStefan Weil  resize_term(0, 0);
2688ef9a2524SStefan Weil  return s != 0;
2689ef9a2524SStefan Weil}
26904d3b6f6eSbalrogEOF
2691ecbe251fSVadim Evard  IFS=:
26924f78ef9aSJuan Quintela  for curses_lib in $curses_list; do
2693ecbe251fSVadim Evard    unset IFS
26944f78ef9aSJuan Quintela    if compile_prog "" "$curses_lib" ; then
2695c584a6d0SJuan Quintela      curses_found=yes
26964f78ef9aSJuan Quintela      libs_softmmu="$curses_lib $libs_softmmu"
26974f78ef9aSJuan Quintela      break
26984d3b6f6eSbalrog    fi
26994f78ef9aSJuan Quintela  done
2700ecbe251fSVadim Evard  unset IFS
2701c584a6d0SJuan Quintela  if test "$curses_found" = "yes" ; then
2702c584a6d0SJuan Quintela    curses=yes
2703c584a6d0SJuan Quintela  else
2704c584a6d0SJuan Quintela    if test "$curses" = "yes" ; then
270521684af0SStewart Smith      feature_not_found "curses" "Install ncurses devel"
2706c584a6d0SJuan Quintela    fi
2707c584a6d0SJuan Quintela    curses=no
2708c584a6d0SJuan Quintela  fi
27094f78ef9aSJuan Quintelafi
27104d3b6f6eSbalrog
2711414f0dabSblueswir1##########################################
2712769ce76dSAlexander Graf# curl probe
2713a3605bf6SMichael Tokarevif test "$curl" != "no" ; then
271465d5d3f9SStefan Weil  if $pkg_config libcurl --exists; then
2715a8bd70adSPaolo Bonzini    curlconfig="$pkg_config libcurl"
27164e2b0658SPaolo Bonzini  else
27174e2b0658SPaolo Bonzini    curlconfig=curl-config
27184e2b0658SPaolo Bonzini  fi
2719769ce76dSAlexander Graf  cat > $TMPC << EOF
2720769ce76dSAlexander Graf#include <curl/curl.h>
27210b862cedSPeter Maydellint main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2722769ce76dSAlexander GrafEOF
27234e2b0658SPaolo Bonzini  curl_cflags=`$curlconfig --cflags 2>/dev/null`
27244e2b0658SPaolo Bonzini  curl_libs=`$curlconfig --libs 2>/dev/null`
2725b1d5a277SJuan Quintela  if compile_prog "$curl_cflags" "$curl_libs" ; then
2726769ce76dSAlexander Graf    curl=yes
2727788c8196SJuan Quintela  else
2728788c8196SJuan Quintela    if test "$curl" = "yes" ; then
272921684af0SStewart Smith      feature_not_found "curl" "Install libcurl devel"
2730788c8196SJuan Quintela    fi
2731788c8196SJuan Quintela    curl=no
2732769ce76dSAlexander Graf  fi
2733769ce76dSAlexander Graffi # test "$curl"
2734769ce76dSAlexander Graf
2735769ce76dSAlexander Graf##########################################
2736fb599c9aSbalrog# bluez support probe
2737a20a6f46SJuan Quintelaif test "$bluez" != "no" ; then
2738e820e3f4Sbalrog  cat > $TMPC << EOF
2739e820e3f4Sbalrog#include <bluetooth/bluetooth.h>
2740e820e3f4Sbalrogint main(void) { return bt_error(0); }
2741e820e3f4SbalrogEOF
2742a8bd70adSPaolo Bonzini  bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2743a8bd70adSPaolo Bonzini  bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
274452166aa0SJuan Quintela  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2745a20a6f46SJuan Quintela    bluez=yes
2746e482d56aSJuan Quintela    libs_softmmu="$bluez_libs $libs_softmmu"
2747e820e3f4Sbalrog  else
2748a20a6f46SJuan Quintela    if test "$bluez" = "yes" ; then
274921684af0SStewart Smith      feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2750a20a6f46SJuan Quintela    fi
2751e820e3f4Sbalrog    bluez="no"
2752e820e3f4Sbalrog  fi
2753fb599c9aSbalrogfi
2754fb599c9aSbalrog
2755fb599c9aSbalrog##########################################
2756e18df141SAnthony Liguori# glib support probe
2757a52d28afSPaolo Bonzini
2758f40685c6SJohn Snowglib_req_ver=2.22
2759aa0d1f44SPaolo Bonziniglib_modules=gthread-2.0
2760aa0d1f44SPaolo Bonziniif test "$modules" = yes; then
2761aa0d1f44SPaolo Bonzini    glib_modules="$glib_modules gmodule-2.0"
2762aa0d1f44SPaolo Bonzinifi
2763e26110cfSFam Zheng
2764aa0d1f44SPaolo Bonzinifor i in $glib_modules; do
2765e26110cfSFam Zheng    if $pkg_config --atleast-version=$glib_req_ver $i; then
2766e26110cfSFam Zheng        glib_cflags=`$pkg_config --cflags $i`
2767e26110cfSFam Zheng        glib_libs=`$pkg_config --libs $i`
2768ba1183daSFam Zheng        CFLAGS="$glib_cflags $CFLAGS"
276914015304SAnthony Liguori        LIBS="$glib_libs $LIBS"
2770957f1f99SMichael Roth        libs_qga="$glib_libs $libs_qga"
2771e18df141SAnthony Liguori    else
2772e26110cfSFam Zheng        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2773e26110cfSFam Zheng    fi
2774e26110cfSFam Zhengdone
2775e26110cfSFam Zheng
27769d41401bSMichael S. Tsirkin# g_test_trap_subprocess added in 2.38. Used by some tests.
27779d41401bSMichael S. Tsirkinglib_subprocess=yes
27789d41401bSMichael S. Tsirkinif ! $pkg_config --atleast-version=2.38 glib-2.0; then
27799d41401bSMichael S. Tsirkin    glib_subprocess=no
27809d41401bSMichael S. Tsirkinfi
27819d41401bSMichael S. Tsirkin
2782bbbf2e04SJohn Snow# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2783bbbf2e04SJohn Snowcat > $TMPC << EOF
2784bbbf2e04SJohn Snow#include <glib.h>
2785bbbf2e04SJohn Snowint main(void) { return 0; }
2786bbbf2e04SJohn SnowEOF
2787bbbf2e04SJohn Snowif ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2788bbbf2e04SJohn Snow    if cc_has_warning_flag "-Wno-unknown-attributes"; then
2789bbbf2e04SJohn Snow        glib_cflags="-Wno-unknown-attributes $glib_cflags"
2790bbbf2e04SJohn Snow        CFLAGS="-Wno-unknown-attributes $CFLAGS"
2791bbbf2e04SJohn Snow    fi
2792bbbf2e04SJohn Snowfi
2793bbbf2e04SJohn Snow
2794e26110cfSFam Zheng##########################################
2795e26110cfSFam Zheng# SHA command probe for modules
2796e26110cfSFam Zhengif test "$modules" = yes; then
2797e26110cfSFam Zheng    shacmd_probe="sha1sum sha1 shasum"
2798e26110cfSFam Zheng    for c in $shacmd_probe; do
27998ccefb91SFam Zheng        if has $c; then
2800e26110cfSFam Zheng            shacmd="$c"
2801e26110cfSFam Zheng            break
2802e26110cfSFam Zheng        fi
2803e26110cfSFam Zheng    done
2804e26110cfSFam Zheng    if test "$shacmd" = ""; then
2805e26110cfSFam Zheng        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2806e26110cfSFam Zheng    fi
2807e18df141SAnthony Liguorifi
2808e18df141SAnthony Liguori
2809e18df141SAnthony Liguori##########################################
2810e2134eb9SGerd Hoffmann# pixman support probe
2811e2134eb9SGerd Hoffmann
2812e2134eb9SGerd Hoffmannif test "$pixman" = ""; then
281374880fe2SRobert Schiele  if test "$want_tools" = "no" -a "$softmmu" = "no"; then
281474880fe2SRobert Schiele    pixman="none"
2815236f282cSHu Tao  elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
2816e2134eb9SGerd Hoffmann    pixman="system"
2817e2134eb9SGerd Hoffmann  else
2818e2134eb9SGerd Hoffmann    pixman="internal"
2819e2134eb9SGerd Hoffmann  fi
2820e2134eb9SGerd Hoffmannfi
282174880fe2SRobert Schieleif test "$pixman" = "none"; then
282274880fe2SRobert Schiele  if test "$want_tools" != "no" -o "$softmmu" != "no"; then
282376ad07a4SPeter Maydell    error_exit "pixman disabled but system emulation or tools build" \
282476ad07a4SPeter Maydell        "enabled.  You can turn off pixman only if you also" \
282576ad07a4SPeter Maydell        "disable all system emulation targets and the tools" \
282676ad07a4SPeter Maydell        "build with '--disable-tools --disable-system'."
282774880fe2SRobert Schiele  fi
282874880fe2SRobert Schiele  pixman_cflags=
282974880fe2SRobert Schiele  pixman_libs=
283074880fe2SRobert Schieleelif test "$pixman" = "system"; then
2831236f282cSHu Tao  # pixman version has been checked above
2832ca871ec8SStefan Weil  pixman_cflags=`$pkg_config --cflags pixman-1`
2833ca871ec8SStefan Weil  pixman_libs=`$pkg_config --libs pixman-1`
2834e2134eb9SGerd Hoffmannelse
2835e2134eb9SGerd Hoffmann  if test ! -d ${source_path}/pixman/pixman; then
2836236f282cSHu Tao    error_exit "pixman >= 0.21.8 not present. Your options:" \
283776ad07a4SPeter Maydell        "  (1) Preferred: Install the pixman devel package (any recent" \
283876ad07a4SPeter Maydell        "      distro should have packages as Xorg needs pixman too)." \
283976ad07a4SPeter Maydell        "  (2) Fetch the pixman submodule, using:" \
284076ad07a4SPeter Maydell        "      git submodule update --init pixman"
2841e2134eb9SGerd Hoffmann  fi
28425ca9388aSGerd Hoffmann  mkdir -p pixman/pixman
28435ca9388aSGerd Hoffmann  pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
28445ca9388aSGerd Hoffmann  pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2845e2134eb9SGerd Hoffmannfi
2846e2134eb9SGerd Hoffmann
2847e2134eb9SGerd Hoffmann##########################################
284817bff52bSM. Mohan Kumar# libcap probe
284917bff52bSM. Mohan Kumar
285017bff52bSM. Mohan Kumarif test "$cap" != "no" ; then
285117bff52bSM. Mohan Kumar  cat > $TMPC <<EOF
285217bff52bSM. Mohan Kumar#include <stdio.h>
285317bff52bSM. Mohan Kumar#include <sys/capability.h>
2854cc939743SStefan Weilint main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
285517bff52bSM. Mohan KumarEOF
285617bff52bSM. Mohan Kumar  if compile_prog "" "-lcap" ; then
285717bff52bSM. Mohan Kumar    cap=yes
285817bff52bSM. Mohan Kumar  else
285917bff52bSM. Mohan Kumar    cap=no
286017bff52bSM. Mohan Kumar  fi
286117bff52bSM. Mohan Kumarfi
286217bff52bSM. Mohan Kumar
286317bff52bSM. Mohan Kumar##########################################
2864e5d355d1Saliguori# pthread probe
28654b29ec41SBradPTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
28663c529d93Saliguori
2867e5d355d1Saliguoripthread=no
2868414f0dabSblueswir1cat > $TMPC << EOF
28693c529d93Saliguori#include <pthread.h>
28707a42bbe4SStefan Weilstatic void *f(void *p) { return NULL; }
28717a42bbe4SStefan Weilint main(void) {
28727a42bbe4SStefan Weil  pthread_t thread;
28737a42bbe4SStefan Weil  pthread_create(&thread, 0, f, 0);
28747a42bbe4SStefan Weil  return 0;
28757a42bbe4SStefan Weil}
2876414f0dabSblueswir1EOF
2877bd00d539SAndreas Färberif compile_prog "" "" ; then
2878bd00d539SAndreas Färber  pthread=yes
2879bd00d539SAndreas Färberelse
2880de65fe0fSSebastian Herbszt  for pthread_lib in $PTHREADLIBS_LIST; do
288152166aa0SJuan Quintela    if compile_prog "" "$pthread_lib" ; then
2882e5d355d1Saliguori      pthread=yes
2883e3c56761SPeter Portante      found=no
2884e3c56761SPeter Portante      for lib_entry in $LIBS; do
2885e3c56761SPeter Portante        if test "$lib_entry" = "$pthread_lib"; then
2886e3c56761SPeter Portante          found=yes
2887e3c56761SPeter Portante          break
2888e3c56761SPeter Portante        fi
2889e3c56761SPeter Portante      done
2890e3c56761SPeter Portante      if test "$found" = "no"; then
28915572b539SJuan Quintela        LIBS="$pthread_lib $LIBS"
2892e3c56761SPeter Portante      fi
2893de65fe0fSSebastian Herbszt      break
2894414f0dabSblueswir1    fi
2895de65fe0fSSebastian Herbszt  done
2896bd00d539SAndreas Färberfi
2897414f0dabSblueswir1
28984617e593SAnthony Liguoriif test "$mingw32" != yes -a "$pthread" = no; then
289976ad07a4SPeter Maydell  error_exit "pthread check failed" \
290076ad07a4SPeter Maydell      "Make sure to have the pthread libs and headers installed."
2901e5d355d1Saliguorifi
2902e5d355d1Saliguori
29035c312079SDr. David Alan Gilbert# check for pthread_setname_np
29045c312079SDr. David Alan Gilbertpthread_setname_np=no
29055c312079SDr. David Alan Gilbertcat > $TMPC << EOF
29065c312079SDr. David Alan Gilbert#include <pthread.h>
29075c312079SDr. David Alan Gilbert
29085c312079SDr. David Alan Gilbertstatic void *f(void *p) { return NULL; }
29095c312079SDr. David Alan Gilbertint main(void)
29105c312079SDr. David Alan Gilbert{
29115c312079SDr. David Alan Gilbert    pthread_t thread;
29125c312079SDr. David Alan Gilbert    pthread_create(&thread, 0, f, 0);
29135c312079SDr. David Alan Gilbert    pthread_setname_np(thread, "QEMU");
29145c312079SDr. David Alan Gilbert    return 0;
29155c312079SDr. David Alan Gilbert}
29165c312079SDr. David Alan GilbertEOF
29175c312079SDr. David Alan Gilbertif compile_prog "" "$pthread_lib" ; then
29185c312079SDr. David Alan Gilbert  pthread_setname_np=yes
29195c312079SDr. David Alan Gilbertfi
29205c312079SDr. David Alan Gilbert
2921bf9298b9Saliguori##########################################
2922f27aaf4bSChristian Brunner# rbd probe
2923f27aaf4bSChristian Brunnerif test "$rbd" != "no" ; then
2924f27aaf4bSChristian Brunner  cat > $TMPC <<EOF
2925f27aaf4bSChristian Brunner#include <stdio.h>
2926ad32e9c0SJosh Durgin#include <rbd/librbd.h>
2927f27aaf4bSChristian Brunnerint main(void) {
2928ad32e9c0SJosh Durgin    rados_t cluster;
2929ad32e9c0SJosh Durgin    rados_create(&cluster, NULL);
2930f27aaf4bSChristian Brunner    return 0;
2931f27aaf4bSChristian Brunner}
2932f27aaf4bSChristian BrunnerEOF
2933ad32e9c0SJosh Durgin  rbd_libs="-lrbd -lrados"
2934f27aaf4bSChristian Brunner  if compile_prog "" "$rbd_libs" ; then
2935f27aaf4bSChristian Brunner    rbd=yes
2936f27aaf4bSChristian Brunner  else
2937f27aaf4bSChristian Brunner    if test "$rbd" = "yes" ; then
293821684af0SStewart Smith      feature_not_found "rados block device" "Install librbd/ceph devel"
2939f27aaf4bSChristian Brunner    fi
2940f27aaf4bSChristian Brunner    rbd=no
2941f27aaf4bSChristian Brunner  fi
2942f27aaf4bSChristian Brunnerfi
2943f27aaf4bSChristian Brunner
2944f27aaf4bSChristian Brunner##########################################
29450a12ec87SRichard W.M. Jones# libssh2 probe
29464fc16838SRichard W.M. Jonesmin_libssh2_version=1.2.8
29470a12ec87SRichard W.M. Jonesif test "$libssh2" != "no" ; then
294865d5d3f9SStefan Weil  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
29490a12ec87SRichard W.M. Jones    libssh2_cflags=`$pkg_config libssh2 --cflags`
29500a12ec87SRichard W.M. Jones    libssh2_libs=`$pkg_config libssh2 --libs`
29510a12ec87SRichard W.M. Jones    libssh2=yes
29520a12ec87SRichard W.M. Jones  else
29530a12ec87SRichard W.M. Jones    if test "$libssh2" = "yes" ; then
29544fc16838SRichard W.M. Jones      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
29550a12ec87SRichard W.M. Jones    fi
29560a12ec87SRichard W.M. Jones    libssh2=no
29570a12ec87SRichard W.M. Jones  fi
29580a12ec87SRichard W.M. Jonesfi
29590a12ec87SRichard W.M. Jones
29600a12ec87SRichard W.M. Jones##########################################
29619a2d462eSRichard W.M. Jones# libssh2_sftp_fsync probe
29629a2d462eSRichard W.M. Jones
29639a2d462eSRichard W.M. Jonesif test "$libssh2" = "yes"; then
29649a2d462eSRichard W.M. Jones  cat > $TMPC <<EOF
29659a2d462eSRichard W.M. Jones#include <stdio.h>
29669a2d462eSRichard W.M. Jones#include <libssh2.h>
29679a2d462eSRichard W.M. Jones#include <libssh2_sftp.h>
29689a2d462eSRichard W.M. Jonesint main(void) {
29699a2d462eSRichard W.M. Jones    LIBSSH2_SESSION *session;
29709a2d462eSRichard W.M. Jones    LIBSSH2_SFTP *sftp;
29719a2d462eSRichard W.M. Jones    LIBSSH2_SFTP_HANDLE *sftp_handle;
29729a2d462eSRichard W.M. Jones    session = libssh2_session_init ();
29739a2d462eSRichard W.M. Jones    sftp = libssh2_sftp_init (session);
29749a2d462eSRichard W.M. Jones    sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
29759a2d462eSRichard W.M. Jones    libssh2_sftp_fsync (sftp_handle);
29769a2d462eSRichard W.M. Jones    return 0;
29779a2d462eSRichard W.M. Jones}
29789a2d462eSRichard W.M. JonesEOF
29799a2d462eSRichard W.M. Jones  # libssh2_cflags/libssh2_libs defined in previous test.
29809a2d462eSRichard W.M. Jones  if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
29819a2d462eSRichard W.M. Jones    QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
29829a2d462eSRichard W.M. Jones  fi
29839a2d462eSRichard W.M. Jonesfi
29849a2d462eSRichard W.M. Jones
29859a2d462eSRichard W.M. Jones##########################################
29865c6c3a6cSChristoph Hellwig# linux-aio probe
29875c6c3a6cSChristoph Hellwig
29885c6c3a6cSChristoph Hellwigif test "$linux_aio" != "no" ; then
29895c6c3a6cSChristoph Hellwig  cat > $TMPC <<EOF
29905c6c3a6cSChristoph Hellwig#include <libaio.h>
29915c6c3a6cSChristoph Hellwig#include <sys/eventfd.h>
2992832ce9c2SScott Wood#include <stddef.h>
29935c6c3a6cSChristoph Hellwigint main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
29945c6c3a6cSChristoph HellwigEOF
29955c6c3a6cSChristoph Hellwig  if compile_prog "" "-laio" ; then
29965c6c3a6cSChristoph Hellwig    linux_aio=yes
29975c6c3a6cSChristoph Hellwig  else
29985c6c3a6cSChristoph Hellwig    if test "$linux_aio" = "yes" ; then
299921684af0SStewart Smith      feature_not_found "linux AIO" "Install libaio devel"
30005c6c3a6cSChristoph Hellwig    fi
30013cfcae3cSLuiz Capitulino    linux_aio=no
30025c6c3a6cSChristoph Hellwig  fi
30035c6c3a6cSChristoph Hellwigfi
30045c6c3a6cSChristoph Hellwig
30055c6c3a6cSChristoph Hellwig##########################################
30063b8acc11SPaolo Bonzini# TPM passthrough is only on x86 Linux
30073b8acc11SPaolo Bonzini
30083b8acc11SPaolo Bonziniif test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
30093b8acc11SPaolo Bonzini  tpm_passthrough=$tpm
30103b8acc11SPaolo Bonzinielse
30113b8acc11SPaolo Bonzini  tpm_passthrough=no
30123b8acc11SPaolo Bonzinifi
30133b8acc11SPaolo Bonzini
30143b8acc11SPaolo Bonzini##########################################
3015758e8e38SVenkateswararao Jujjuri (JV)# attr probe
3016758e8e38SVenkateswararao Jujjuri (JV)
3017758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" != "no" ; then
3018758e8e38SVenkateswararao Jujjuri (JV)  cat > $TMPC <<EOF
3019758e8e38SVenkateswararao Jujjuri (JV)#include <stdio.h>
3020758e8e38SVenkateswararao Jujjuri (JV)#include <sys/types.h>
3021f2338fb4SPavel Borzenkov#ifdef CONFIG_LIBATTR
3022f2338fb4SPavel Borzenkov#include <attr/xattr.h>
3023f2338fb4SPavel Borzenkov#else
30244f26f2b6SAvi Kivity#include <sys/xattr.h>
3025f2338fb4SPavel Borzenkov#endif
3026758e8e38SVenkateswararao Jujjuri (JV)int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3027758e8e38SVenkateswararao Jujjuri (JV)EOF
30284f26f2b6SAvi Kivity  if compile_prog "" "" ; then
30294f26f2b6SAvi Kivity    attr=yes
30304f26f2b6SAvi Kivity  # Older distros have <attr/xattr.h>, and need -lattr:
3031f2338fb4SPavel Borzenkov  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3032758e8e38SVenkateswararao Jujjuri (JV)    attr=yes
3033758e8e38SVenkateswararao Jujjuri (JV)    LIBS="-lattr $LIBS"
30344f26f2b6SAvi Kivity    libattr=yes
3035758e8e38SVenkateswararao Jujjuri (JV)  else
3036758e8e38SVenkateswararao Jujjuri (JV)    if test "$attr" = "yes" ; then
303721684af0SStewart Smith      feature_not_found "ATTR" "Install libc6 or libattr devel"
3038758e8e38SVenkateswararao Jujjuri (JV)    fi
3039758e8e38SVenkateswararao Jujjuri (JV)    attr=no
3040758e8e38SVenkateswararao Jujjuri (JV)  fi
3041758e8e38SVenkateswararao Jujjuri (JV)fi
3042758e8e38SVenkateswararao Jujjuri (JV)
3043758e8e38SVenkateswararao Jujjuri (JV)##########################################
3044bf9298b9Saliguori# iovec probe
3045bf9298b9Saliguoricat > $TMPC <<EOF
3046db34f0b3Sblueswir1#include <sys/types.h>
3047bf9298b9Saliguori#include <sys/uio.h>
3048db34f0b3Sblueswir1#include <unistd.h>
3049f91f9beeSStefan Weilint main(void) { return sizeof(struct iovec); }
3050bf9298b9SaliguoriEOF
3051bf9298b9Saliguoriiovec=no
305252166aa0SJuan Quintelaif compile_prog "" "" ; then
3053bf9298b9Saliguori  iovec=yes
3054bf9298b9Saliguorifi
3055bf9298b9Saliguori
3056f652e6afSaurel32##########################################
3057ceb42de8Saliguori# preadv probe
3058ceb42de8Saliguoricat > $TMPC <<EOF
3059ceb42de8Saliguori#include <sys/types.h>
3060ceb42de8Saliguori#include <sys/uio.h>
3061ceb42de8Saliguori#include <unistd.h>
3062c075a723SBlue Swirlint main(void) { return preadv(0, 0, 0, 0); }
3063ceb42de8SaliguoriEOF
3064ceb42de8Saliguoripreadv=no
306552166aa0SJuan Quintelaif compile_prog "" "" ; then
3066ceb42de8Saliguori  preadv=yes
3067ceb42de8Saliguorifi
3068ceb42de8Saliguori
3069ceb42de8Saliguori##########################################
3070f652e6afSaurel32# fdt probe
3071e169e1e1SPeter Maydell# fdt support is mandatory for at least some target architectures,
3072e169e1e1SPeter Maydell# so insist on it if we're building those system emulators.
3073e169e1e1SPeter Maydellfdt_required=no
3074e169e1e1SPeter Maydellfor target in $target_list; do
3075e169e1e1SPeter Maydell  case $target in
30766a49fa95SAlexander Graf    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3077e169e1e1SPeter Maydell      fdt_required=yes
3078e169e1e1SPeter Maydell    ;;
3079e169e1e1SPeter Maydell  esac
3080e169e1e1SPeter Maydelldone
3081e169e1e1SPeter Maydell
3082e169e1e1SPeter Maydellif test "$fdt_required" = "yes"; then
3083e169e1e1SPeter Maydell  if test "$fdt" = "no"; then
3084e169e1e1SPeter Maydell    error_exit "fdt disabled but some requested targets require it." \
3085e169e1e1SPeter Maydell      "You can turn off fdt only if you also disable all the system emulation" \
3086e169e1e1SPeter Maydell      "targets which need it (by specifying a cut down --target-list)."
3087e169e1e1SPeter Maydell  fi
3088e169e1e1SPeter Maydell  fdt=yes
3089e169e1e1SPeter Maydellfi
3090e169e1e1SPeter Maydell
30912df87df7SJuan Quintelaif test "$fdt" != "no" ; then
3092b41af4baSJuan Quintela  fdt_libs="-lfdt"
309396ce6545SPeter Crosthwaite  # explicitly check for libfdt_env.h as it is missing in some stable installs
309431ce0adbSThomas Huth  # and test for required functions to make sure we are on a version >= 1.4.0
3095f652e6afSaurel32  cat > $TMPC << EOF
309631ce0adbSThomas Huth#include <libfdt.h>
309796ce6545SPeter Crosthwaite#include <libfdt_env.h>
309831ce0adbSThomas Huthint main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3099f652e6afSaurel32EOF
310052166aa0SJuan Quintela  if compile_prog "" "$fdt_libs" ; then
3101a540f158SPeter Crosthwaite    # system DTC is good - use it
3102f652e6afSaurel32    fdt=yes
3103a540f158SPeter Crosthwaite  elif test -d ${source_path}/dtc/libfdt ; then
3104a540f158SPeter Crosthwaite    # have submodule DTC - use it
3105a540f158SPeter Crosthwaite    fdt=yes
3106a540f158SPeter Crosthwaite    dtc_internal="yes"
3107a540f158SPeter Crosthwaite    mkdir -p dtc
3108cab00a5aSMichael S. Tsirkin    if [ "$pwd_is_source_path" != "y" ] ; then
3109a540f158SPeter Crosthwaite       symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3110a540f158SPeter Crosthwaite       symlink "$source_path/dtc/scripts" "dtc/scripts"
31112df87df7SJuan Quintela    fi
3112a540f158SPeter Crosthwaite    fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3113a540f158SPeter Crosthwaite    fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3114a540f158SPeter Crosthwaite  elif test "$fdt" = "yes" ; then
3115a540f158SPeter Crosthwaite    # have neither and want - prompt for system/submodule install
311631ce0adbSThomas Huth    error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
31173f281822SStewart Smith        "  (1) Preferred: Install the DTC (libfdt) devel package" \
3118a540f158SPeter Crosthwaite        "  (2) Fetch the DTC submodule, using:" \
3119a540f158SPeter Crosthwaite        "      git submodule update --init dtc"
3120a540f158SPeter Crosthwaite  else
3121a540f158SPeter Crosthwaite    # don't have and don't want
3122de3a354aSMichael Walle    fdt_libs=
31232df87df7SJuan Quintela    fdt=no
3124f652e6afSaurel32  fi
3125f652e6afSaurel32fi
3126f652e6afSaurel32
3127a540f158SPeter Crosthwaitelibs_softmmu="$libs_softmmu $fdt_libs"
3128a540f158SPeter Crosthwaite
312920ff075bSMichael Walle##########################################
3130da076ffeSGerd Hoffmann# opengl probe (for sdl2, milkymist-tmu2)
3131b1546f32SGerd Hoffmann
3132b1546f32SGerd Hoffmann# GLX probe, used by milkymist-tmu2
3133b1546f32SGerd Hoffmann# this is temporary, code will be switched to egl mid-term.
3134b1546f32SGerd Hoffmanncat > $TMPC << EOF
3135b1546f32SGerd Hoffmann#include <X11/Xlib.h>
3136b1546f32SGerd Hoffmann#include <GL/gl.h>
3137b1546f32SGerd Hoffmann#include <GL/glx.h>
3138b1546f32SGerd Hoffmannint main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3139b1546f32SGerd HoffmannEOF
3140b1546f32SGerd Hoffmannif compile_prog "" "-lGL -lX11" ; then
3141b1546f32SGerd Hoffmann  have_glx=yes
3142b1546f32SGerd Hoffmannelse
3143b1546f32SGerd Hoffmann  have_glx=no
3144b1546f32SGerd Hoffmannfi
3145b1546f32SGerd Hoffmann
3146da076ffeSGerd Hoffmannif test "$opengl" != "no" ; then
31477ced9e9fSGerd Hoffmann  opengl_pkgs="gl glesv2 epoxy egl"
3148b1546f32SGerd Hoffmann  if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
3149f676c67eSJeremy White    opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3150f676c67eSJeremy White    opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3151da076ffeSGerd Hoffmann    opengl=yes
315220ff075bSMichael Walle  else
3153da076ffeSGerd Hoffmann    if test "$opengl" = "yes" ; then
3154dcf30025SGerd Hoffmann      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
315520ff075bSMichael Walle    fi
3156f676c67eSJeremy White    opengl_cflags=""
3157da076ffeSGerd Hoffmann    opengl_libs=""
3158da076ffeSGerd Hoffmann    opengl=no
315920ff075bSMichael Walle  fi
316020ff075bSMichael Wallefi
316120ff075bSMichael Walle
3162c9a12e75SChrysostomos Nanakos
3163c9a12e75SChrysostomos Nanakos##########################################
3164c9a12e75SChrysostomos Nanakos# archipelago probe
3165c9a12e75SChrysostomos Nanakosif test "$archipelago" != "no" ; then
3166c9a12e75SChrysostomos Nanakos    cat > $TMPC <<EOF
3167c9a12e75SChrysostomos Nanakos#include <stdio.h>
3168c9a12e75SChrysostomos Nanakos#include <xseg/xseg.h>
3169c9a12e75SChrysostomos Nanakos#include <xseg/protocol.h>
3170c9a12e75SChrysostomos Nanakosint main(void) {
3171c9a12e75SChrysostomos Nanakos    xseg_initialize();
3172c9a12e75SChrysostomos Nanakos    return 0;
3173c9a12e75SChrysostomos Nanakos}
3174c9a12e75SChrysostomos NanakosEOF
3175c9a12e75SChrysostomos Nanakos    archipelago_libs=-lxseg
3176c9a12e75SChrysostomos Nanakos    if compile_prog "" "$archipelago_libs"; then
3177c9a12e75SChrysostomos Nanakos        archipelago="yes"
3178c9a12e75SChrysostomos Nanakos        libs_tools="$archipelago_libs $libs_tools"
3179c9a12e75SChrysostomos Nanakos        libs_softmmu="$archipelago_libs $libs_softmmu"
31806a460ed1SStefan Hajnoczi
31816a460ed1SStefan Hajnoczi	echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
31826a460ed1SStefan Hajnoczi	echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
31836a460ed1SStefan Hajnoczi	echo "license and therefore prevent redistribution."
31846a460ed1SStefan Hajnoczi	echo
31856a460ed1SStefan Hajnoczi	echo "To disable Archipelago, use --disable-archipelago"
3186c9a12e75SChrysostomos Nanakos    else
3187c9a12e75SChrysostomos Nanakos      if test "$archipelago" = "yes" ; then
3188c9a12e75SChrysostomos Nanakos        feature_not_found "Archipelago backend support" "Install libxseg devel"
3189c9a12e75SChrysostomos Nanakos      fi
3190c9a12e75SChrysostomos Nanakos      archipelago="no"
3191c9a12e75SChrysostomos Nanakos    fi
3192c9a12e75SChrysostomos Nanakosfi
3193c9a12e75SChrysostomos Nanakos
3194c9a12e75SChrysostomos Nanakos
3195eb100396SBharata B Rao##########################################
3196eb100396SBharata B Rao# glusterfs probe
3197eb100396SBharata B Raoif test "$glusterfs" != "no" ; then
319865d5d3f9SStefan Weil  if $pkg_config --atleast-version=3 glusterfs-api; then
3199e01bee08SBharata B Rao    glusterfs="yes"
3200ca871ec8SStefan Weil    glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3201ca871ec8SStefan Weil    glusterfs_libs=`$pkg_config --libs glusterfs-api`
320265d5d3f9SStefan Weil    if $pkg_config --atleast-version=5 glusterfs-api; then
32030c14fb47SBharata B Rao      glusterfs_discard="yes"
32040c14fb47SBharata B Rao    fi
32057c815372SBharata B Rao    if $pkg_config --atleast-version=6 glusterfs-api; then
32067c815372SBharata B Rao      glusterfs_zerofill="yes"
32077c815372SBharata B Rao    fi
3208eb100396SBharata B Rao  else
3209eb100396SBharata B Rao    if test "$glusterfs" = "yes" ; then
32108efc9363SHu Tao      feature_not_found "GlusterFS backend support" \
32118efc9363SHu Tao          "Install glusterfs-api devel >= 3"
3212eb100396SBharata B Rao    fi
3213e01bee08SBharata B Rao    glusterfs="no"
3214eb100396SBharata B Rao  fi
3215eb100396SBharata B Raofi
3216eb100396SBharata B Rao
321739386ac7Saurel32# Check for inotify functions when we are building linux-user
32183b3f24adSaurel32# emulator.  This is done because older glibc versions don't
32193b3f24adSaurel32# have syscall stubs for these implemented.  In that case we
32203b3f24adSaurel32# don't provide them even if kernel supports them.
32213b3f24adSaurel32#
32223b3f24adSaurel32inotify=no
32233b3f24adSaurel32cat > $TMPC << EOF
32243b3f24adSaurel32#include <sys/inotify.h>
32253b3f24adSaurel32
32263b3f24adSaurel32int
32273b3f24adSaurel32main(void)
32283b3f24adSaurel32{
32293b3f24adSaurel32	/* try to start inotify */
32308690e420Saurel32	return inotify_init();
32313b3f24adSaurel32}
32323b3f24adSaurel32EOF
323352166aa0SJuan Quintelaif compile_prog "" "" ; then
32343b3f24adSaurel32  inotify=yes
32353b3f24adSaurel32fi
32363b3f24adSaurel32
3237c05c7a73SRiku Voipioinotify1=no
3238c05c7a73SRiku Voipiocat > $TMPC << EOF
3239c05c7a73SRiku Voipio#include <sys/inotify.h>
3240c05c7a73SRiku Voipio
3241c05c7a73SRiku Voipioint
3242c05c7a73SRiku Voipiomain(void)
3243c05c7a73SRiku Voipio{
3244c05c7a73SRiku Voipio    /* try to start inotify */
3245c05c7a73SRiku Voipio    return inotify_init1(0);
3246c05c7a73SRiku Voipio}
3247c05c7a73SRiku VoipioEOF
3248c05c7a73SRiku Voipioif compile_prog "" "" ; then
3249c05c7a73SRiku Voipio  inotify1=yes
3250c05c7a73SRiku Voipiofi
3251c05c7a73SRiku Voipio
3252ebc996f3SRiku Voipio# check if utimensat and futimens are supported
3253ebc996f3SRiku Voipioutimens=no
3254ebc996f3SRiku Voipiocat > $TMPC << EOF
3255ebc996f3SRiku Voipio#define _ATFILE_SOURCE
3256ebc996f3SRiku Voipio#include <stddef.h>
3257ebc996f3SRiku Voipio#include <fcntl.h>
32583014ee00SPeter Maydell#include <sys/stat.h>
3259ebc996f3SRiku Voipio
3260ebc996f3SRiku Voipioint main(void)
3261ebc996f3SRiku Voipio{
3262ebc996f3SRiku Voipio    utimensat(AT_FDCWD, "foo", NULL, 0);
3263ebc996f3SRiku Voipio    futimens(0, NULL);
3264ebc996f3SRiku Voipio    return 0;
3265ebc996f3SRiku Voipio}
3266ebc996f3SRiku VoipioEOF
326752166aa0SJuan Quintelaif compile_prog "" "" ; then
3268ebc996f3SRiku Voipio  utimens=yes
3269ebc996f3SRiku Voipiofi
3270ebc996f3SRiku Voipio
3271099d6b0fSRiku Voipio# check if pipe2 is there
3272099d6b0fSRiku Voipiopipe2=no
3273099d6b0fSRiku Voipiocat > $TMPC << EOF
3274099d6b0fSRiku Voipio#include <unistd.h>
3275099d6b0fSRiku Voipio#include <fcntl.h>
3276099d6b0fSRiku Voipio
3277099d6b0fSRiku Voipioint main(void)
3278099d6b0fSRiku Voipio{
3279099d6b0fSRiku Voipio    int pipefd[2];
32809bca8162SBruce Rogers    return pipe2(pipefd, O_CLOEXEC);
3281099d6b0fSRiku Voipio}
3282099d6b0fSRiku VoipioEOF
328352166aa0SJuan Quintelaif compile_prog "" "" ; then
3284099d6b0fSRiku Voipio  pipe2=yes
3285099d6b0fSRiku Voipiofi
3286099d6b0fSRiku Voipio
328740ff6d7eSKevin Wolf# check if accept4 is there
328840ff6d7eSKevin Wolfaccept4=no
328940ff6d7eSKevin Wolfcat > $TMPC << EOF
329040ff6d7eSKevin Wolf#include <sys/socket.h>
329140ff6d7eSKevin Wolf#include <stddef.h>
329240ff6d7eSKevin Wolf
329340ff6d7eSKevin Wolfint main(void)
329440ff6d7eSKevin Wolf{
329540ff6d7eSKevin Wolf    accept4(0, NULL, NULL, SOCK_CLOEXEC);
329640ff6d7eSKevin Wolf    return 0;
329740ff6d7eSKevin Wolf}
329840ff6d7eSKevin WolfEOF
329940ff6d7eSKevin Wolfif compile_prog "" "" ; then
330040ff6d7eSKevin Wolf  accept4=yes
330140ff6d7eSKevin Wolffi
330240ff6d7eSKevin Wolf
33033ce34dfbSvibisreenivasan# check if tee/splice is there. vmsplice was added same time.
33043ce34dfbSvibisreenivasansplice=no
33053ce34dfbSvibisreenivasancat > $TMPC << EOF
33063ce34dfbSvibisreenivasan#include <unistd.h>
33073ce34dfbSvibisreenivasan#include <fcntl.h>
33083ce34dfbSvibisreenivasan#include <limits.h>
33093ce34dfbSvibisreenivasan
33103ce34dfbSvibisreenivasanint main(void)
33113ce34dfbSvibisreenivasan{
331266ea0f22SStefan Weil    int len, fd = 0;
33133ce34dfbSvibisreenivasan    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
33143ce34dfbSvibisreenivasan    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
33153ce34dfbSvibisreenivasan    return 0;
33163ce34dfbSvibisreenivasan}
33173ce34dfbSvibisreenivasanEOF
331852166aa0SJuan Quintelaif compile_prog "" "" ; then
33193ce34dfbSvibisreenivasan  splice=yes
33203ce34dfbSvibisreenivasanfi
33213ce34dfbSvibisreenivasan
3322dcc38d1cSMarcelo Tosatti##########################################
3323a99d57bbSWanlong Gao# libnuma probe
3324a99d57bbSWanlong Gao
3325a99d57bbSWanlong Gaoif test "$numa" != "no" ; then
3326a99d57bbSWanlong Gao  cat > $TMPC << EOF
3327a99d57bbSWanlong Gao#include <numa.h>
3328a99d57bbSWanlong Gaoint main(void) { return numa_available(); }
3329a99d57bbSWanlong GaoEOF
3330a99d57bbSWanlong Gao
3331a99d57bbSWanlong Gao  if compile_prog "" "-lnuma" ; then
3332a99d57bbSWanlong Gao    numa=yes
3333a99d57bbSWanlong Gao    libs_softmmu="-lnuma $libs_softmmu"
3334a99d57bbSWanlong Gao  else
3335a99d57bbSWanlong Gao    if test "$numa" = "yes" ; then
3336a99d57bbSWanlong Gao      feature_not_found "numa" "install numactl devel"
3337a99d57bbSWanlong Gao    fi
3338a99d57bbSWanlong Gao    numa=no
3339a99d57bbSWanlong Gao  fi
3340a99d57bbSWanlong Gaofi
3341a99d57bbSWanlong Gao
3342a99d57bbSWanlong Gao##########################################
33432847b469SFam Zheng# tcmalloc probe
33442847b469SFam Zheng
33452847b469SFam Zhengif test "$tcmalloc" = "yes" ; then
33462847b469SFam Zheng  cat > $TMPC << EOF
33472847b469SFam Zheng#include <stdlib.h>
33482847b469SFam Zhengint main(void) { malloc(1); return 0; }
33492847b469SFam ZhengEOF
33502847b469SFam Zheng
33512847b469SFam Zheng  if compile_prog "" "-ltcmalloc" ; then
33522847b469SFam Zheng    LIBS="-ltcmalloc $LIBS"
33532847b469SFam Zheng  else
33542847b469SFam Zheng    feature_not_found "tcmalloc" "install gperftools devel"
33552847b469SFam Zheng  fi
33562847b469SFam Zhengfi
33572847b469SFam Zheng
33582847b469SFam Zheng##########################################
3359dcc38d1cSMarcelo Tosatti# signalfd probe
3360dcc38d1cSMarcelo Tosattisignalfd="no"
3361dcc38d1cSMarcelo Tosatticat > $TMPC << EOF
3362dcc38d1cSMarcelo Tosatti#include <unistd.h>
3363dcc38d1cSMarcelo Tosatti#include <sys/syscall.h>
3364dcc38d1cSMarcelo Tosatti#include <signal.h>
3365dcc38d1cSMarcelo Tosattiint main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3366dcc38d1cSMarcelo TosattiEOF
3367dcc38d1cSMarcelo Tosatti
3368dcc38d1cSMarcelo Tosattiif compile_prog "" "" ; then
3369dcc38d1cSMarcelo Tosatti  signalfd=yes
3370dcc38d1cSMarcelo Tosattifi
3371dcc38d1cSMarcelo Tosatti
3372c2882b96SRiku Voipio# check if eventfd is supported
3373c2882b96SRiku Voipioeventfd=no
3374c2882b96SRiku Voipiocat > $TMPC << EOF
3375c2882b96SRiku Voipio#include <sys/eventfd.h>
3376c2882b96SRiku Voipio
3377c2882b96SRiku Voipioint main(void)
3378c2882b96SRiku Voipio{
337955cc7f3eSStefan Weil    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3380c2882b96SRiku Voipio}
3381c2882b96SRiku VoipioEOF
3382c2882b96SRiku Voipioif compile_prog "" "" ; then
3383c2882b96SRiku Voipio  eventfd=yes
3384c2882b96SRiku Voipiofi
3385c2882b96SRiku Voipio
3386d0927938SUlrich Hecht# check for fallocate
3387d0927938SUlrich Hechtfallocate=no
3388d0927938SUlrich Hechtcat > $TMPC << EOF
3389d0927938SUlrich Hecht#include <fcntl.h>
3390d0927938SUlrich Hecht
3391d0927938SUlrich Hechtint main(void)
3392d0927938SUlrich Hecht{
3393d0927938SUlrich Hecht    fallocate(0, 0, 0, 0);
3394d0927938SUlrich Hecht    return 0;
3395d0927938SUlrich Hecht}
3396d0927938SUlrich HechtEOF
33978fb03151SPeter Maydellif compile_prog "" "" ; then
3398d0927938SUlrich Hecht  fallocate=yes
3399d0927938SUlrich Hechtfi
3400d0927938SUlrich Hecht
34013d4fa43eSKusanagi Kouichi# check for fallocate hole punching
34023d4fa43eSKusanagi Kouichifallocate_punch_hole=no
34033d4fa43eSKusanagi Kouichicat > $TMPC << EOF
34043d4fa43eSKusanagi Kouichi#include <fcntl.h>
34053d4fa43eSKusanagi Kouichi#include <linux/falloc.h>
34063d4fa43eSKusanagi Kouichi
34073d4fa43eSKusanagi Kouichiint main(void)
34083d4fa43eSKusanagi Kouichi{
34093d4fa43eSKusanagi Kouichi    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
34103d4fa43eSKusanagi Kouichi    return 0;
34113d4fa43eSKusanagi Kouichi}
34123d4fa43eSKusanagi KouichiEOF
34133d4fa43eSKusanagi Kouichiif compile_prog "" "" ; then
34143d4fa43eSKusanagi Kouichi  fallocate_punch_hole=yes
34153d4fa43eSKusanagi Kouichifi
34163d4fa43eSKusanagi Kouichi
3417b953f075SDenis V. Lunev# check that fallocate supports range zeroing inside the file
3418b953f075SDenis V. Lunevfallocate_zero_range=no
3419b953f075SDenis V. Lunevcat > $TMPC << EOF
3420b953f075SDenis V. Lunev#include <fcntl.h>
3421b953f075SDenis V. Lunev#include <linux/falloc.h>
3422b953f075SDenis V. Lunev
3423b953f075SDenis V. Lunevint main(void)
3424b953f075SDenis V. Lunev{
3425b953f075SDenis V. Lunev    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3426b953f075SDenis V. Lunev    return 0;
3427b953f075SDenis V. Lunev}
3428b953f075SDenis V. LunevEOF
3429b953f075SDenis V. Lunevif compile_prog "" "" ; then
3430b953f075SDenis V. Lunev  fallocate_zero_range=yes
3431b953f075SDenis V. Lunevfi
3432b953f075SDenis V. Lunev
3433ed911435SKevin Wolf# check for posix_fallocate
3434ed911435SKevin Wolfposix_fallocate=no
3435ed911435SKevin Wolfcat > $TMPC << EOF
3436ed911435SKevin Wolf#include <fcntl.h>
3437ed911435SKevin Wolf
3438ed911435SKevin Wolfint main(void)
3439ed911435SKevin Wolf{
3440ed911435SKevin Wolf    posix_fallocate(0, 0, 0);
3441ed911435SKevin Wolf    return 0;
3442ed911435SKevin Wolf}
3443ed911435SKevin WolfEOF
3444ed911435SKevin Wolfif compile_prog "" "" ; then
3445ed911435SKevin Wolf    posix_fallocate=yes
3446ed911435SKevin Wolffi
3447ed911435SKevin Wolf
3448c727f47dSPeter Maydell# check for sync_file_range
3449c727f47dSPeter Maydellsync_file_range=no
3450c727f47dSPeter Maydellcat > $TMPC << EOF
3451c727f47dSPeter Maydell#include <fcntl.h>
3452c727f47dSPeter Maydell
3453c727f47dSPeter Maydellint main(void)
3454c727f47dSPeter Maydell{
3455c727f47dSPeter Maydell    sync_file_range(0, 0, 0, 0);
3456c727f47dSPeter Maydell    return 0;
3457c727f47dSPeter Maydell}
3458c727f47dSPeter MaydellEOF
34598fb03151SPeter Maydellif compile_prog "" "" ; then
3460c727f47dSPeter Maydell  sync_file_range=yes
3461c727f47dSPeter Maydellfi
3462c727f47dSPeter Maydell
3463dace20dcSPeter Maydell# check for linux/fiemap.h and FS_IOC_FIEMAP
3464dace20dcSPeter Maydellfiemap=no
3465dace20dcSPeter Maydellcat > $TMPC << EOF
3466dace20dcSPeter Maydell#include <sys/ioctl.h>
3467dace20dcSPeter Maydell#include <linux/fs.h>
3468dace20dcSPeter Maydell#include <linux/fiemap.h>
3469dace20dcSPeter Maydell
3470dace20dcSPeter Maydellint main(void)
3471dace20dcSPeter Maydell{
3472dace20dcSPeter Maydell    ioctl(0, FS_IOC_FIEMAP, 0);
3473dace20dcSPeter Maydell    return 0;
3474dace20dcSPeter Maydell}
3475dace20dcSPeter MaydellEOF
34768fb03151SPeter Maydellif compile_prog "" "" ; then
3477dace20dcSPeter Maydell  fiemap=yes
3478dace20dcSPeter Maydellfi
3479dace20dcSPeter Maydell
3480d0927938SUlrich Hecht# check for dup3
3481d0927938SUlrich Hechtdup3=no
3482d0927938SUlrich Hechtcat > $TMPC << EOF
3483d0927938SUlrich Hecht#include <unistd.h>
3484d0927938SUlrich Hecht
3485d0927938SUlrich Hechtint main(void)
3486d0927938SUlrich Hecht{
3487d0927938SUlrich Hecht    dup3(0, 0, 0);
3488d0927938SUlrich Hecht    return 0;
3489d0927938SUlrich Hecht}
3490d0927938SUlrich HechtEOF
349178f5d726SJan Kiszkaif compile_prog "" "" ; then
3492d0927938SUlrich Hecht  dup3=yes
3493d0927938SUlrich Hechtfi
3494d0927938SUlrich Hecht
34954e0c6529SAlex Bligh# check for ppoll support
34964e0c6529SAlex Blighppoll=no
34974e0c6529SAlex Blighcat > $TMPC << EOF
34984e0c6529SAlex Bligh#include <poll.h>
34994e0c6529SAlex Bligh
35004e0c6529SAlex Blighint main(void)
35014e0c6529SAlex Bligh{
35024e0c6529SAlex Bligh    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
35034e0c6529SAlex Bligh    ppoll(&pfd, 1, 0, 0);
35044e0c6529SAlex Bligh    return 0;
35054e0c6529SAlex Bligh}
35064e0c6529SAlex BlighEOF
35074e0c6529SAlex Blighif compile_prog "" "" ; then
35084e0c6529SAlex Bligh  ppoll=yes
35094e0c6529SAlex Blighfi
35104e0c6529SAlex Bligh
3511cd758dd0SAlex Bligh# check for prctl(PR_SET_TIMERSLACK , ... ) support
3512cd758dd0SAlex Blighprctl_pr_set_timerslack=no
3513cd758dd0SAlex Blighcat > $TMPC << EOF
3514cd758dd0SAlex Bligh#include <sys/prctl.h>
3515cd758dd0SAlex Bligh
3516cd758dd0SAlex Blighint main(void)
3517cd758dd0SAlex Bligh{
3518cd758dd0SAlex Bligh    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3519cd758dd0SAlex Bligh    return 0;
3520cd758dd0SAlex Bligh}
3521cd758dd0SAlex BlighEOF
3522cd758dd0SAlex Blighif compile_prog "" "" ; then
3523cd758dd0SAlex Bligh  prctl_pr_set_timerslack=yes
3524cd758dd0SAlex Blighfi
3525cd758dd0SAlex Bligh
35263b6edd16SPeter Maydell# check for epoll support
35273b6edd16SPeter Maydellepoll=no
35283b6edd16SPeter Maydellcat > $TMPC << EOF
35293b6edd16SPeter Maydell#include <sys/epoll.h>
35303b6edd16SPeter Maydell
35313b6edd16SPeter Maydellint main(void)
35323b6edd16SPeter Maydell{
35333b6edd16SPeter Maydell    epoll_create(0);
35343b6edd16SPeter Maydell    return 0;
35353b6edd16SPeter Maydell}
35363b6edd16SPeter MaydellEOF
35378fb03151SPeter Maydellif compile_prog "" "" ; then
35383b6edd16SPeter Maydell  epoll=yes
35393b6edd16SPeter Maydellfi
35403b6edd16SPeter Maydell
35413b6edd16SPeter Maydell# epoll_create1 and epoll_pwait are later additions
35423b6edd16SPeter Maydell# so we must check separately for their presence
35433b6edd16SPeter Maydellepoll_create1=no
35443b6edd16SPeter Maydellcat > $TMPC << EOF
35453b6edd16SPeter Maydell#include <sys/epoll.h>
35463b6edd16SPeter Maydell
35473b6edd16SPeter Maydellint main(void)
35483b6edd16SPeter Maydell{
354919e83f6bSPeter Maydell    /* Note that we use epoll_create1 as a value, not as
355019e83f6bSPeter Maydell     * a function being called. This is necessary so that on
355119e83f6bSPeter Maydell     * old SPARC glibc versions where the function was present in
355219e83f6bSPeter Maydell     * the library but not declared in the header file we will
355319e83f6bSPeter Maydell     * fail the configure check. (Otherwise we will get a compiler
355419e83f6bSPeter Maydell     * warning but not an error, and will proceed to fail the
355519e83f6bSPeter Maydell     * qemu compile where we compile with -Werror.)
355619e83f6bSPeter Maydell     */
3557c075a723SBlue Swirl    return (int)(uintptr_t)&epoll_create1;
35583b6edd16SPeter Maydell}
35593b6edd16SPeter MaydellEOF
35608fb03151SPeter Maydellif compile_prog "" "" ; then
35613b6edd16SPeter Maydell  epoll_create1=yes
35623b6edd16SPeter Maydellfi
35633b6edd16SPeter Maydell
35643b6edd16SPeter Maydellepoll_pwait=no
35653b6edd16SPeter Maydellcat > $TMPC << EOF
35663b6edd16SPeter Maydell#include <sys/epoll.h>
35673b6edd16SPeter Maydell
35683b6edd16SPeter Maydellint main(void)
35693b6edd16SPeter Maydell{
35703b6edd16SPeter Maydell    epoll_pwait(0, 0, 0, 0, 0);
35713b6edd16SPeter Maydell    return 0;
35723b6edd16SPeter Maydell}
35733b6edd16SPeter MaydellEOF
35748fb03151SPeter Maydellif compile_prog "" "" ; then
35753b6edd16SPeter Maydell  epoll_pwait=yes
35763b6edd16SPeter Maydellfi
35773b6edd16SPeter Maydell
3578a8fd1abaSPeter Maydell# check for sendfile support
3579a8fd1abaSPeter Maydellsendfile=no
3580a8fd1abaSPeter Maydellcat > $TMPC << EOF
3581a8fd1abaSPeter Maydell#include <sys/sendfile.h>
3582a8fd1abaSPeter Maydell
3583a8fd1abaSPeter Maydellint main(void)
3584a8fd1abaSPeter Maydell{
3585a8fd1abaSPeter Maydell    return sendfile(0, 0, 0, 0);
3586a8fd1abaSPeter Maydell}
3587a8fd1abaSPeter MaydellEOF
3588a8fd1abaSPeter Maydellif compile_prog "" "" ; then
3589a8fd1abaSPeter Maydell  sendfile=yes
3590a8fd1abaSPeter Maydellfi
3591a8fd1abaSPeter Maydell
359251834341SRiku Voipio# check for timerfd support (glibc 2.8 and newer)
359351834341SRiku Voipiotimerfd=no
359451834341SRiku Voipiocat > $TMPC << EOF
359551834341SRiku Voipio#include <sys/timerfd.h>
359651834341SRiku Voipio
359751834341SRiku Voipioint main(void)
359851834341SRiku Voipio{
359951834341SRiku Voipio    return(timerfd_create(CLOCK_REALTIME, 0));
360051834341SRiku Voipio}
360151834341SRiku VoipioEOF
360251834341SRiku Voipioif compile_prog "" "" ; then
360351834341SRiku Voipio  timerfd=yes
360451834341SRiku Voipiofi
360551834341SRiku Voipio
36069af5c906SRiku Voipio# check for setns and unshare support
36079af5c906SRiku Voipiosetns=no
36089af5c906SRiku Voipiocat > $TMPC << EOF
36099af5c906SRiku Voipio#include <sched.h>
36109af5c906SRiku Voipio
36119af5c906SRiku Voipioint main(void)
36129af5c906SRiku Voipio{
36139af5c906SRiku Voipio    int ret;
36149af5c906SRiku Voipio    ret = setns(0, 0);
36159af5c906SRiku Voipio    ret = unshare(0);
36169af5c906SRiku Voipio    return ret;
36179af5c906SRiku Voipio}
36189af5c906SRiku VoipioEOF
36199af5c906SRiku Voipioif compile_prog "" "" ; then
36209af5c906SRiku Voipio  setns=yes
36219af5c906SRiku Voipiofi
36229af5c906SRiku Voipio
3623cc8ae6deSpbrook# Check if tools are available to build documentation.
3624a25dba17SJuan Quintelaif test "$docs" != "no" ; then
362501668d98SStefan Weil  if has makeinfo && has pod2man; then
3626a25dba17SJuan Quintela    docs=yes
362783a3ab8bSJuan Quintela  else
3628a25dba17SJuan Quintela    if test "$docs" = "yes" ; then
362921684af0SStewart Smith      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
363083a3ab8bSJuan Quintela    fi
3631a25dba17SJuan Quintela    docs=no
363283a3ab8bSJuan Quintela  fi
3633cc8ae6deSpbrookfi
3634cc8ae6deSpbrook
3635f514f41cSStefan Weil# Search for bswap_32 function
36366ae9a1f4SJuan Quintelabyteswap_h=no
36376ae9a1f4SJuan Quintelacat > $TMPC << EOF
36386ae9a1f4SJuan Quintela#include <byteswap.h>
36396ae9a1f4SJuan Quintelaint main(void) { return bswap_32(0); }
36406ae9a1f4SJuan QuintelaEOF
364152166aa0SJuan Quintelaif compile_prog "" "" ; then
36426ae9a1f4SJuan Quintela  byteswap_h=yes
36436ae9a1f4SJuan Quintelafi
36446ae9a1f4SJuan Quintela
364575f13596SStefan Weil# Search for bswap32 function
36466ae9a1f4SJuan Quintelabswap_h=no
36476ae9a1f4SJuan Quintelacat > $TMPC << EOF
36486ae9a1f4SJuan Quintela#include <sys/endian.h>
36496ae9a1f4SJuan Quintela#include <sys/types.h>
36506ae9a1f4SJuan Quintela#include <machine/bswap.h>
36516ae9a1f4SJuan Quintelaint main(void) { return bswap32(0); }
36526ae9a1f4SJuan QuintelaEOF
365352166aa0SJuan Quintelaif compile_prog "" "" ; then
36546ae9a1f4SJuan Quintela  bswap_h=yes
36556ae9a1f4SJuan Quintelafi
36566ae9a1f4SJuan Quintela
3657da93a1fdSaliguori##########################################
3658e49ab19fSPeter Lieven# Do we have libiscsi >= 1.9.0
3659c589b249SRonnie Sahlbergif test "$libiscsi" != "no" ; then
3660e49ab19fSPeter Lieven  if $pkg_config --atleast-version=1.9.0 libiscsi; then
36613c33ea96SPaolo Bonzini    libiscsi="yes"
3662ca871ec8SStefan Weil    libiscsi_cflags=$($pkg_config --cflags libiscsi)
3663ca871ec8SStefan Weil    libiscsi_libs=$($pkg_config --libs libiscsi)
3664c589b249SRonnie Sahlberg  else
3665c589b249SRonnie Sahlberg    if test "$libiscsi" = "yes" ; then
3666e49ab19fSPeter Lieven      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3667c589b249SRonnie Sahlberg    fi
3668c589b249SRonnie Sahlberg    libiscsi="no"
3669c589b249SRonnie Sahlberg  fi
3670c589b249SRonnie Sahlbergfi
3671c589b249SRonnie Sahlberg
3672c589b249SRonnie Sahlberg##########################################
36738bacde8dSNatanael Copa# Do we need libm
36748bacde8dSNatanael Copacat > $TMPC << EOF
36758bacde8dSNatanael Copa#include <math.h>
3676f80ea986SAlexey Kardashevskiyint main(int argc, char **argv) { return isnan(sin((double)argc)); }
36778bacde8dSNatanael CopaEOF
36788bacde8dSNatanael Copaif compile_prog "" "" ; then
36798bacde8dSNatanael Copa  :
36808bacde8dSNatanael Copaelif compile_prog "" "-lm" ; then
36818bacde8dSNatanael Copa  LIBS="-lm $LIBS"
36828bacde8dSNatanael Copa  libs_qga="-lm $libs_qga"
36838bacde8dSNatanael Copaelse
368476ad07a4SPeter Maydell  error_exit "libm check failed"
36858bacde8dSNatanael Copafi
36868bacde8dSNatanael Copa
36878bacde8dSNatanael Copa##########################################
3688da93a1fdSaliguori# Do we need librt
36898bacde8dSNatanael Copa# uClibc provides 2 versions of clock_gettime(), one with realtime
36908bacde8dSNatanael Copa# support and one without. This means that the clock_gettime() don't
36918bacde8dSNatanael Copa# need -lrt. We still need it for timer_create() so we check for this
36928bacde8dSNatanael Copa# function in addition.
3693da93a1fdSaliguoricat > $TMPC <<EOF
3694da93a1fdSaliguori#include <signal.h>
3695da93a1fdSaliguori#include <time.h>
36968bacde8dSNatanael Copaint main(void) {
36978bacde8dSNatanael Copa  timer_create(CLOCK_REALTIME, NULL, NULL);
36988bacde8dSNatanael Copa  return clock_gettime(CLOCK_REALTIME, NULL);
36998bacde8dSNatanael Copa}
3700da93a1fdSaliguoriEOF
3701da93a1fdSaliguori
370252166aa0SJuan Quintelaif compile_prog "" "" ; then
370307ffa4bdSJuan Quintela  :
37048bacde8dSNatanael Copa# we need pthread for static linking. use previous pthread test result
370518e588b1SRick Liuelif compile_prog "" "$pthread_lib -lrt" ; then
370618e588b1SRick Liu  LIBS="$LIBS -lrt"
370718e588b1SRick Liu  libs_qga="$libs_qga -lrt"
3708da93a1fdSaliguorifi
3709da93a1fdSaliguori
371031ff504dSBlue Swirlif test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3711179cf400SAndreas Färber        "$aix" != "yes" -a "$haiku" != "yes" ; then
37126362a53fSJuan Quintela    libs_softmmu="-lutil $libs_softmmu"
37136362a53fSJuan Quintelafi
37146362a53fSJuan Quintela
3715de5071c5SBlue Swirl##########################################
3716cd4ec0b4SGerd Hoffmann# spice probe
3717cd4ec0b4SGerd Hoffmannif test "$spice" != "no" ; then
3718cd4ec0b4SGerd Hoffmann  cat > $TMPC << EOF
3719cd4ec0b4SGerd Hoffmann#include <spice.h>
3720cd4ec0b4SGerd Hoffmannint main(void) { spice_server_new(); return 0; }
3721cd4ec0b4SGerd HoffmannEOF
3722710fc4f5SJiri Denemark  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3723710fc4f5SJiri Denemark  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
372465d5d3f9SStefan Weil  if $pkg_config --atleast-version=0.12.0 spice-server && \
372565d5d3f9SStefan Weil     $pkg_config --atleast-version=0.12.3 spice-protocol && \
3726cd4ec0b4SGerd Hoffmann     compile_prog "$spice_cflags" "$spice_libs" ; then
3727cd4ec0b4SGerd Hoffmann    spice="yes"
3728cd4ec0b4SGerd Hoffmann    libs_softmmu="$libs_softmmu $spice_libs"
3729cd4ec0b4SGerd Hoffmann    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
37302e0e3c39SAlon Levy    spice_protocol_version=$($pkg_config --modversion spice-protocol)
37312e0e3c39SAlon Levy    spice_server_version=$($pkg_config --modversion spice-server)
3732cd4ec0b4SGerd Hoffmann  else
3733cd4ec0b4SGerd Hoffmann    if test "$spice" = "yes" ; then
37348efc9363SHu Tao      feature_not_found "spice" \
37358efc9363SHu Tao          "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3736cd4ec0b4SGerd Hoffmann    fi
3737cd4ec0b4SGerd Hoffmann    spice="no"
3738cd4ec0b4SGerd Hoffmann  fi
3739cd4ec0b4SGerd Hoffmannfi
3740cd4ec0b4SGerd Hoffmann
3741111a38b0SRobert Relyea# check for libcacard for smartcard support
3742111a38b0SRobert Relyeasmartcard_cflags=""
3743111a38b0SRobert Relyea# TODO - what's the minimal nss version we support?
3744111a38b0SRobert Relyeaif test "$smartcard_nss" != "no"; then
37455f01e06fSSergei Trofimovich  cat > $TMPC << EOF
37465f01e06fSSergei Trofimovich#include <pk11pub.h>
37475f01e06fSSergei Trofimovichint main(void) { PK11_FreeSlot(0); return 0; }
37485f01e06fSSergei TrofimovichEOF
37499d171bd9SMichael Tokarev    # FIXME: do not include $glib_* in here
37509d171bd9SMichael Tokarev    nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
37519d171bd9SMichael Tokarev    nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
37529d171bd9SMichael Tokarev    test_cflags="$nss_cflags"
37536ca026cbSPeter Maydell    # The header files in nss < 3.13.3 have a bug which causes them to
37546ca026cbSPeter Maydell    # emit a warning. If we're going to compile QEMU with -Werror, then
37556ca026cbSPeter Maydell    # test that the headers don't have this bug. Otherwise we would pass
37566ca026cbSPeter Maydell    # the configure test but fail to compile QEMU later.
37576ca026cbSPeter Maydell    if test "$werror" = "yes"; then
37586ca026cbSPeter Maydell        test_cflags="-Werror $test_cflags"
37596ca026cbSPeter Maydell    fi
3760b6fc675bSPaolo Bonzini    if test -n "$libtool" &&
376165d5d3f9SStefan Weil       $pkg_config --atleast-version=3.12.8 nss && \
37629d171bd9SMichael Tokarev      compile_prog "$test_cflags" "$nss_libs"; then
37635f01e06fSSergei Trofimovich        smartcard_nss="yes"
3764111a38b0SRobert Relyea    else
3765111a38b0SRobert Relyea        if test "$smartcard_nss" = "yes"; then
37668efc9363SHu Tao            feature_not_found "nss" "Install nss devel >= 3.12.8"
3767111a38b0SRobert Relyea        fi
3768111a38b0SRobert Relyea        smartcard_nss="no"
3769111a38b0SRobert Relyea    fi
3770111a38b0SRobert Relyeafi
3771111a38b0SRobert Relyea
37722b2325ffSGerd Hoffmann# check for libusb
37732b2325ffSGerd Hoffmannif test "$libusb" != "no" ; then
377465d5d3f9SStefan Weil    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
37752b2325ffSGerd Hoffmann        libusb="yes"
3776ca871ec8SStefan Weil        libusb_cflags=$($pkg_config --cflags libusb-1.0)
3777ca871ec8SStefan Weil        libusb_libs=$($pkg_config --libs libusb-1.0)
37782b2325ffSGerd Hoffmann        QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
37792b2325ffSGerd Hoffmann        libs_softmmu="$libs_softmmu $libusb_libs"
37802b2325ffSGerd Hoffmann    else
37812b2325ffSGerd Hoffmann        if test "$libusb" = "yes"; then
37828efc9363SHu Tao            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
37832b2325ffSGerd Hoffmann        fi
37842b2325ffSGerd Hoffmann        libusb="no"
37852b2325ffSGerd Hoffmann    fi
37862b2325ffSGerd Hoffmannfi
37872b2325ffSGerd Hoffmann
378869354a83SHans de Goede# check for usbredirparser for usb network redirection support
378969354a83SHans de Goedeif test "$usb_redir" != "no" ; then
379065d5d3f9SStefan Weil    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
379169354a83SHans de Goede        usb_redir="yes"
3792ca871ec8SStefan Weil        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3793ca871ec8SStefan Weil        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
379469354a83SHans de Goede        QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
379556ab2ad1SAurelien Jarno        libs_softmmu="$libs_softmmu $usb_redir_libs"
379669354a83SHans de Goede    else
379769354a83SHans de Goede        if test "$usb_redir" = "yes"; then
379821684af0SStewart Smith            feature_not_found "usb-redir" "Install usbredir devel"
379969354a83SHans de Goede        fi
380069354a83SHans de Goede        usb_redir="no"
380169354a83SHans de Goede    fi
380269354a83SHans de Goedefi
380369354a83SHans de Goede
3804cd4ec0b4SGerd Hoffmann##########################################
3805d9840e25STomoki Sekiyama# check if we have VSS SDK headers for win
3806d9840e25STomoki Sekiyama
3807d9840e25STomoki Sekiyamaif test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3808d9840e25STomoki Sekiyama  case "$vss_win32_sdk" in
3809d9840e25STomoki Sekiyama    "")   vss_win32_include="-I$source_path" ;;
3810d9840e25STomoki Sekiyama    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3811d9840e25STomoki Sekiyama          # handle path with spaces. So we symlink the headers into ".sdk/vss".
3812d9840e25STomoki Sekiyama          vss_win32_include="-I$source_path/.sdk/vss"
3813d9840e25STomoki Sekiyama	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3814d9840e25STomoki Sekiyama	  ;;
3815d9840e25STomoki Sekiyama    *)    vss_win32_include="-I$vss_win32_sdk"
3816d9840e25STomoki Sekiyama  esac
3817d9840e25STomoki Sekiyama  cat > $TMPC << EOF
3818d9840e25STomoki Sekiyama#define __MIDL_user_allocate_free_DEFINED__
3819d9840e25STomoki Sekiyama#include <inc/win2003/vss.h>
3820d9840e25STomoki Sekiyamaint main(void) { return VSS_CTX_BACKUP; }
3821d9840e25STomoki SekiyamaEOF
3822d9840e25STomoki Sekiyama  if compile_prog "$vss_win32_include" "" ; then
3823d9840e25STomoki Sekiyama    guest_agent_with_vss="yes"
3824d9840e25STomoki Sekiyama    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3825d9840e25STomoki Sekiyama    libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3826d9840e25STomoki Sekiyama  else
3827d9840e25STomoki Sekiyama    if test "$vss_win32_sdk" != "" ; then
3828d9840e25STomoki Sekiyama      echo "ERROR: Please download and install Microsoft VSS SDK:"
3829d9840e25STomoki Sekiyama      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3830d9840e25STomoki Sekiyama      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3831d9840e25STomoki Sekiyama      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
3832d9840e25STomoki Sekiyama      echo "ERROR: The headers are extracted in the directory \`inc'."
3833d9840e25STomoki Sekiyama      feature_not_found "VSS support"
3834d9840e25STomoki Sekiyama    fi
3835d9840e25STomoki Sekiyama    guest_agent_with_vss="no"
3836d9840e25STomoki Sekiyama  fi
3837d9840e25STomoki Sekiyamafi
3838d9840e25STomoki Sekiyama
3839d9840e25STomoki Sekiyama##########################################
3840d9840e25STomoki Sekiyama# lookup Windows platform SDK (if not specified)
3841d9840e25STomoki Sekiyama# The SDK is needed only to build .tlb (type library) file of guest agent
3842d9840e25STomoki Sekiyama# VSS provider from the source. It is usually unnecessary because the
3843d9840e25STomoki Sekiyama# pre-compiled .tlb file is included.
3844d9840e25STomoki Sekiyama
3845d9840e25STomoki Sekiyamaif test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3846d9840e25STomoki Sekiyama  if test -z "$win_sdk"; then
3847d9840e25STomoki Sekiyama    programfiles="$PROGRAMFILES"
3848d9840e25STomoki Sekiyama    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3849d9840e25STomoki Sekiyama    if test -n "$programfiles"; then
3850d9840e25STomoki Sekiyama      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3851d9840e25STomoki Sekiyama    else
3852d9840e25STomoki Sekiyama      feature_not_found "Windows SDK"
3853d9840e25STomoki Sekiyama    fi
3854d9840e25STomoki Sekiyama  elif test "$win_sdk" = "no"; then
3855d9840e25STomoki Sekiyama    win_sdk=""
3856d9840e25STomoki Sekiyama  fi
3857d9840e25STomoki Sekiyamafi
3858d9840e25STomoki Sekiyama
3859d9840e25STomoki Sekiyama##########################################
38609dacf32dSYossi Hindin# Guest agent Window MSI  package
38619dacf32dSYossi Hindin
38629dacf32dSYossi Hindinif test "$guest_agent" != yes; then
38639dacf32dSYossi Hindin  if test "$guest_agent_msi" = yes; then
38649dacf32dSYossi Hindin    error_exit "MSI guest agent package requires guest agent enabled"
38659dacf32dSYossi Hindin  fi
38669dacf32dSYossi Hindin  guest_agent_msi=no
38679dacf32dSYossi Hindinelif test "$mingw32" != "yes"; then
38689dacf32dSYossi Hindin  if test "$guest_agent_msi" = "yes"; then
38699dacf32dSYossi Hindin    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
38709dacf32dSYossi Hindin  fi
38719dacf32dSYossi Hindin  guest_agent_msi=no
38729dacf32dSYossi Hindinelif ! has wixl; then
38739dacf32dSYossi Hindin  if test "$guest_agent_msi" = "yes"; then
38749dacf32dSYossi Hindin    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
38759dacf32dSYossi Hindin  fi
38769dacf32dSYossi Hindin  guest_agent_msi=no
38779dacf32dSYossi Hindinfi
38789dacf32dSYossi Hindin
38799dacf32dSYossi Hindinif test "$guest_agent_msi" != "no"; then
38809dacf32dSYossi Hindin  if test "$guest_agent_with_vss" = "yes"; then
38819dacf32dSYossi Hindin    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
38829dacf32dSYossi Hindin  fi
38839dacf32dSYossi Hindin
38849dacf32dSYossi Hindin  if test "$QEMU_GA_MANUFACTURER" = ""; then
38859dacf32dSYossi Hindin    QEMU_GA_MANUFACTURER=QEMU
38869dacf32dSYossi Hindin  fi
38879dacf32dSYossi Hindin
38889dacf32dSYossi Hindin  if test "$QEMU_GA_DISTRO" = ""; then
38899dacf32dSYossi Hindin    QEMU_GA_DISTRO=Linux
38909dacf32dSYossi Hindin  fi
38919dacf32dSYossi Hindin
38929dacf32dSYossi Hindin  if test "$QEMU_GA_VERSION" = ""; then
38939dacf32dSYossi Hindin      QEMU_GA_VERSION=`cat $source_path/VERSION`
38949dacf32dSYossi Hindin  fi
38959dacf32dSYossi Hindin
38969dacf32dSYossi Hindin  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
38979dacf32dSYossi Hindin
38989dacf32dSYossi Hindin  case "$cpu" in
38999dacf32dSYossi Hindin  x86_64)
39009dacf32dSYossi Hindin    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
39019dacf32dSYossi Hindin    ;;
39029dacf32dSYossi Hindin  i386)
39039dacf32dSYossi Hindin    QEMU_GA_MSI_ARCH="-D Arch=32"
39049dacf32dSYossi Hindin    ;;
39059dacf32dSYossi Hindin  *)
39069dacf32dSYossi Hindin    error_exit "CPU $cpu not supported for building installation package"
39079dacf32dSYossi Hindin    ;;
39089dacf32dSYossi Hindin  esac
39099dacf32dSYossi Hindinfi
3910cd4ec0b4SGerd Hoffmann
3911747bbdf7SBlue Swirl##########################################
39125f6b9e8fSBlue Swirl# check if we have fdatasync
39135f6b9e8fSBlue Swirl
39145f6b9e8fSBlue Swirlfdatasync=no
39155f6b9e8fSBlue Swirlcat > $TMPC << EOF
39165f6b9e8fSBlue Swirl#include <unistd.h>
3917d1722a27SAlexandre Raymondint main(void) {
3918d1722a27SAlexandre Raymond#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
3919d1722a27SAlexandre Raymondreturn fdatasync(0);
3920d1722a27SAlexandre Raymond#else
3921e172fe11SStefan Weil#error Not supported
3922d1722a27SAlexandre Raymond#endif
3923d1722a27SAlexandre Raymond}
39245f6b9e8fSBlue SwirlEOF
39255f6b9e8fSBlue Swirlif compile_prog "" "" ; then
39265f6b9e8fSBlue Swirl    fdatasync=yes
39275f6b9e8fSBlue Swirlfi
39285f6b9e8fSBlue Swirl
392994a420b1SStefan Hajnoczi##########################################
3930e78815a5SAndreas Färber# check if we have madvise
3931e78815a5SAndreas Färber
3932e78815a5SAndreas Färbermadvise=no
3933e78815a5SAndreas Färbercat > $TMPC << EOF
3934e78815a5SAndreas Färber#include <sys/types.h>
3935e78815a5SAndreas Färber#include <sys/mman.h>
3936832ce9c2SScott Wood#include <stddef.h>
3937e78815a5SAndreas Färberint main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
3938e78815a5SAndreas FärberEOF
3939e78815a5SAndreas Färberif compile_prog "" "" ; then
3940e78815a5SAndreas Färber    madvise=yes
3941e78815a5SAndreas Färberfi
3942e78815a5SAndreas Färber
3943e78815a5SAndreas Färber##########################################
3944e78815a5SAndreas Färber# check if we have posix_madvise
3945e78815a5SAndreas Färber
3946e78815a5SAndreas Färberposix_madvise=no
3947e78815a5SAndreas Färbercat > $TMPC << EOF
3948e78815a5SAndreas Färber#include <sys/mman.h>
3949832ce9c2SScott Wood#include <stddef.h>
3950e78815a5SAndreas Färberint main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
3951e78815a5SAndreas FärberEOF
3952e78815a5SAndreas Färberif compile_prog "" "" ; then
3953e78815a5SAndreas Färber    posix_madvise=yes
3954e78815a5SAndreas Färberfi
3955e78815a5SAndreas Färber
3956e78815a5SAndreas Färber##########################################
39571e9737daSRichard Henderson# check if we have usable SIGEV_THREAD_ID
39581e9737daSRichard Henderson
39591e9737daSRichard Hendersonsigev_thread_id=no
39601e9737daSRichard Hendersoncat > $TMPC << EOF
39611e9737daSRichard Henderson#include <signal.h>
39621e9737daSRichard Hendersonint main(void) {
39631e9737daSRichard Henderson  struct sigevent ev;
39641e9737daSRichard Henderson  ev.sigev_notify = SIGEV_THREAD_ID;
39651e9737daSRichard Henderson  ev._sigev_un._tid = 0;
39661e9737daSRichard Henderson  asm volatile("" : : "g"(&ev));
39671e9737daSRichard Henderson  return 0;
39681e9737daSRichard Henderson}
39691e9737daSRichard HendersonEOF
39701e9737daSRichard Hendersonif compile_prog "" "" ; then
39711e9737daSRichard Henderson    sigev_thread_id=yes
39721e9737daSRichard Hendersonfi
39731e9737daSRichard Henderson
39741e9737daSRichard Henderson##########################################
397594a420b1SStefan Hajnoczi# check if trace backend exists
397694a420b1SStefan Hajnoczi
39775b808275SLluís Vilanova$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
397894a420b1SStefan Hajnocziif test "$?" -ne 0 ; then
39795b808275SLluís Vilanova  error_exit "invalid trace backends" \
39805b808275SLluís Vilanova      "Please choose supported trace backends."
398194a420b1SStefan Hajnoczifi
398294a420b1SStefan Hajnoczi
39837e24e92aSStefan Hajnoczi##########################################
39847e24e92aSStefan Hajnoczi# For 'ust' backend, test if ust headers are present
39855b808275SLluís Vilanovaif have_backend "ust"; then
39867e24e92aSStefan Hajnoczi  cat > $TMPC << EOF
3987bf15f63cSMohamad Gebai#include <lttng/tracepoint.h>
39887e24e92aSStefan Hajnocziint main(void) { return 0; }
39897e24e92aSStefan HajnocziEOF
39907e24e92aSStefan Hajnoczi  if compile_prog "" "" ; then
3991bf15f63cSMohamad Gebai    if $pkg_config lttng-ust --exists; then
3992bf15f63cSMohamad Gebai      lttng_ust_libs=`$pkg_config --libs lttng-ust`
39937e24e92aSStefan Hajnoczi    else
3994bf15f63cSMohamad Gebai      lttng_ust_libs="-llttng-ust"
3995bf15f63cSMohamad Gebai    fi
3996bf15f63cSMohamad Gebai    if $pkg_config liburcu-bp --exists; then
3997bf15f63cSMohamad Gebai      urcu_bp_libs=`$pkg_config --libs liburcu-bp`
3998bf15f63cSMohamad Gebai    else
3999bf15f63cSMohamad Gebai      urcu_bp_libs="-lurcu-bp"
4000bf15f63cSMohamad Gebai    fi
4001bf15f63cSMohamad Gebai
4002bf15f63cSMohamad Gebai    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4003bf15f63cSMohamad Gebai    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4004bf15f63cSMohamad Gebai  else
4005bf15f63cSMohamad Gebai    error_exit "Trace backend 'ust' missing lttng-ust header files"
40067e24e92aSStefan Hajnoczi  fi
40077e24e92aSStefan Hajnoczifi
4008b3d08c02SDaniel P. Berrange
4009b3d08c02SDaniel P. Berrange##########################################
4010b3d08c02SDaniel P. Berrange# For 'dtrace' backend, test if 'dtrace' command is present
40115b808275SLluís Vilanovaif have_backend "dtrace"; then
4012b3d08c02SDaniel P. Berrange  if ! has 'dtrace' ; then
401376ad07a4SPeter Maydell    error_exit "dtrace command is not found in PATH $PATH"
4014b3d08c02SDaniel P. Berrange  fi
4015c276b17dSDaniel P. Berrange  trace_backend_stap="no"
4016c276b17dSDaniel P. Berrange  if has 'stap' ; then
4017c276b17dSDaniel P. Berrange    trace_backend_stap="yes"
4018c276b17dSDaniel P. Berrange  fi
4019b3d08c02SDaniel P. Berrangefi
4020b3d08c02SDaniel P. Berrange
40217e24e92aSStefan Hajnoczi##########################################
4022519175a2SAlex Barcelo# check and set a backend for coroutine
4023d0e2fce5SAneesh Kumar K.V
40247c2acc70SPeter Maydell# We prefer ucontext, but it's not always possible. The fallback
40257c2acc70SPeter Maydell# is sigcontext. gthread is not selectable except explicitly, because
40267c2acc70SPeter Maydell# it is not functional enough to run QEMU proper. (It is occasionally
40277c2acc70SPeter Maydell# useful for debugging purposes.)  On Windows the only valid backend
40287c2acc70SPeter Maydell# is the Windows-specific one.
40297c2acc70SPeter Maydell
40307c2acc70SPeter Maydellucontext_works=no
4031d0e2fce5SAneesh Kumar K.Vif test "$darwin" != "yes"; then
4032d0e2fce5SAneesh Kumar K.V  cat > $TMPC << EOF
4033d0e2fce5SAneesh Kumar K.V#include <ucontext.h>
4034cdf84806SPeter Maydell#ifdef __stub_makecontext
4035cdf84806SPeter Maydell#error Ignoring glibc stub makecontext which will always fail
4036cdf84806SPeter Maydell#endif
403775cafad7SStefan Weilint main(void) { makecontext(0, 0, 0); return 0; }
4038d0e2fce5SAneesh Kumar K.VEOF
4039d0e2fce5SAneesh Kumar K.V  if compile_prog "" "" ; then
40407c2acc70SPeter Maydell    ucontext_works=yes
4041d0e2fce5SAneesh Kumar K.V  fi
4042519175a2SAlex Barcelofi
40437c2acc70SPeter Maydell
40447c2acc70SPeter Maydellif test "$coroutine" = ""; then
40457c2acc70SPeter Maydell  if test "$mingw32" = "yes"; then
40467c2acc70SPeter Maydell    coroutine=win32
40477c2acc70SPeter Maydell  elif test "$ucontext_works" = "yes"; then
40487c2acc70SPeter Maydell    coroutine=ucontext
4049519175a2SAlex Barcelo  else
40507c2acc70SPeter Maydell    coroutine=sigaltstack
40517c2acc70SPeter Maydell  fi
40527c2acc70SPeter Maydellelse
40537c2acc70SPeter Maydell  case $coroutine in
40547c2acc70SPeter Maydell  windows)
40557c2acc70SPeter Maydell    if test "$mingw32" != "yes"; then
40567c2acc70SPeter Maydell      error_exit "'windows' coroutine backend only valid for Windows"
40577c2acc70SPeter Maydell    fi
40587c2acc70SPeter Maydell    # Unfortunately the user visible backend name doesn't match the
40597c2acc70SPeter Maydell    # coroutine-*.c filename for this case, so we have to adjust it here.
40607c2acc70SPeter Maydell    coroutine=win32
40617c2acc70SPeter Maydell    ;;
40627c2acc70SPeter Maydell  ucontext)
40637c2acc70SPeter Maydell    if test "$ucontext_works" != "yes"; then
40647c2acc70SPeter Maydell      feature_not_found "ucontext"
40657c2acc70SPeter Maydell    fi
40667c2acc70SPeter Maydell    ;;
40677c2acc70SPeter Maydell  gthread|sigaltstack)
40687c2acc70SPeter Maydell    if test "$mingw32" = "yes"; then
40697c2acc70SPeter Maydell      error_exit "only the 'windows' coroutine backend is valid for Windows"
40707c2acc70SPeter Maydell    fi
40717c2acc70SPeter Maydell    ;;
40727c2acc70SPeter Maydell  *)
407376ad07a4SPeter Maydell    error_exit "unknown coroutine backend $coroutine"
40747c2acc70SPeter Maydell    ;;
40757c2acc70SPeter Maydell  esac
4076d0e2fce5SAneesh Kumar K.Vfi
4077d0e2fce5SAneesh Kumar K.V
407870c60c08SStefan Hajnocziif test "$coroutine_pool" = ""; then
407970c60c08SStefan Hajnoczi  if test "$coroutine" = "gthread"; then
408070c60c08SStefan Hajnoczi    coroutine_pool=no
408170c60c08SStefan Hajnoczi  else
408270c60c08SStefan Hajnoczi    coroutine_pool=yes
408370c60c08SStefan Hajnoczi  fi
408470c60c08SStefan Hajnoczifi
408570c60c08SStefan Hajnocziif test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
408670c60c08SStefan Hajnoczi  error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
408770c60c08SStefan Hajnoczifi
408870c60c08SStefan Hajnoczi
4089d0e2fce5SAneesh Kumar K.V##########################################
4090d2042378SAneesh Kumar K.V# check if we have open_by_handle_at
4091d2042378SAneesh Kumar K.V
40924e1797f9SStefan Weilopen_by_handle_at=no
4093d2042378SAneesh Kumar K.Vcat > $TMPC << EOF
4094d2042378SAneesh Kumar K.V#include <fcntl.h>
4095acc55ba8SStefan Weil#if !defined(AT_EMPTY_PATH)
4096acc55ba8SStefan Weil# error missing definition
4097acc55ba8SStefan Weil#else
409875cafad7SStefan Weilint main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4099acc55ba8SStefan Weil#endif
4100d2042378SAneesh Kumar K.VEOF
4101d2042378SAneesh Kumar K.Vif compile_prog "" "" ; then
4102d2042378SAneesh Kumar K.V    open_by_handle_at=yes
4103d2042378SAneesh Kumar K.Vfi
4104d2042378SAneesh Kumar K.V
4105e06a765eSHarsh Prateek Bora########################################
4106e06a765eSHarsh Prateek Bora# check if we have linux/magic.h
4107e06a765eSHarsh Prateek Bora
4108e06a765eSHarsh Prateek Boralinux_magic_h=no
4109e06a765eSHarsh Prateek Boracat > $TMPC << EOF
4110e06a765eSHarsh Prateek Bora#include <linux/magic.h>
4111e06a765eSHarsh Prateek Boraint main(void) {
411275cafad7SStefan Weil  return 0;
4113e06a765eSHarsh Prateek Bora}
4114e06a765eSHarsh Prateek BoraEOF
4115e06a765eSHarsh Prateek Boraif compile_prog "" "" ; then
4116e06a765eSHarsh Prateek Bora    linux_magic_h=yes
4117e06a765eSHarsh Prateek Borafi
4118e06a765eSHarsh Prateek Bora
41198ab1bf12SLuiz Capitulino########################################
4120c95e3080SKevin Wolf# check whether we can disable warning option with a pragma (this is needed
4121c95e3080SKevin Wolf# to silence warnings in the headers of some versions of external libraries).
4122c95e3080SKevin Wolf# This test has to be compiled with -Werror as otherwise an unknown pragma is
4123c95e3080SKevin Wolf# only a warning.
4124c95e3080SKevin Wolf#
4125c95e3080SKevin Wolf# If we can't selectively disable warning in the code, disable -Werror so that
4126c95e3080SKevin Wolf# the build doesn't fail anyway.
4127c95e3080SKevin Wolf
412806d71fa1SPeter Maydellpragma_disable_unused_but_set=no
412906d71fa1SPeter Maydellcat > $TMPC << EOF
4130e6f53fd5SMarkus Armbruster#pragma GCC diagnostic push
413106d71fa1SPeter Maydell#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4132c95e3080SKevin Wolf#pragma GCC diagnostic ignored "-Wstrict-prototypes"
4133e6f53fd5SMarkus Armbruster#pragma GCC diagnostic pop
4134c95e3080SKevin Wolf
413506d71fa1SPeter Maydellint main(void) {
413606d71fa1SPeter Maydell    return 0;
413706d71fa1SPeter Maydell}
413806d71fa1SPeter MaydellEOF
413906d71fa1SPeter Maydellif compile_prog "-Werror" "" ; then
4140cc6e3ca9SGerd Hoffmann    pragma_diagnostic_available=yes
4141c95e3080SKevin Wolfelse
4142c95e3080SKevin Wolf    werror=no
414306d71fa1SPeter Maydellfi
414406d71fa1SPeter Maydell
414506d71fa1SPeter Maydell########################################
4146541be927SChristian Borntraeger# check if we have valgrind/valgrind.h
41473f4349dcSKevin Wolf
41483f4349dcSKevin Wolfvalgrind_h=no
41493f4349dcSKevin Wolfcat > $TMPC << EOF
41503f4349dcSKevin Wolf#include <valgrind/valgrind.h>
41513f4349dcSKevin Wolfint main(void) {
41523f4349dcSKevin Wolf  return 0;
41533f4349dcSKevin Wolf}
41543f4349dcSKevin WolfEOF
41553f4349dcSKevin Wolfif compile_prog "" "" ; then
41563f4349dcSKevin Wolf    valgrind_h=yes
41573f4349dcSKevin Wolffi
41583f4349dcSKevin Wolf
41593f4349dcSKevin Wolf########################################
41608ab1bf12SLuiz Capitulino# check if environ is declared
41618ab1bf12SLuiz Capitulino
41628ab1bf12SLuiz Capitulinohas_environ=no
41638ab1bf12SLuiz Capitulinocat > $TMPC << EOF
41648ab1bf12SLuiz Capitulino#include <unistd.h>
41658ab1bf12SLuiz Capitulinoint main(void) {
4166c075a723SBlue Swirl    environ = 0;
41678ab1bf12SLuiz Capitulino    return 0;
41688ab1bf12SLuiz Capitulino}
41698ab1bf12SLuiz CapitulinoEOF
41708ab1bf12SLuiz Capitulinoif compile_prog "" "" ; then
41718ab1bf12SLuiz Capitulino    has_environ=yes
41728ab1bf12SLuiz Capitulinofi
41738ab1bf12SLuiz Capitulino
417476a347e1SRichard Henderson########################################
417576a347e1SRichard Henderson# check if cpuid.h is usable.
417676a347e1SRichard Henderson
417776a347e1SRichard Hendersoncpuid_h=no
417876a347e1SRichard Hendersoncat > $TMPC << EOF
417976a347e1SRichard Henderson#include <cpuid.h>
418076a347e1SRichard Hendersonint main(void) {
4181774d566cSPeter Maydell    unsigned a, b, c, d;
4182774d566cSPeter Maydell    int max = __get_cpuid_max(0, 0);
4183774d566cSPeter Maydell
4184774d566cSPeter Maydell    if (max >= 1) {
4185774d566cSPeter Maydell        __cpuid(1, a, b, c, d);
4186774d566cSPeter Maydell    }
4187774d566cSPeter Maydell
4188774d566cSPeter Maydell    if (max >= 7) {
4189774d566cSPeter Maydell        __cpuid_count(7, 0, a, b, c, d);
4190774d566cSPeter Maydell    }
4191774d566cSPeter Maydell
419276a347e1SRichard Henderson    return 0;
419376a347e1SRichard Henderson}
419476a347e1SRichard HendersonEOF
419576a347e1SRichard Hendersonif compile_prog "" "" ; then
419676a347e1SRichard Henderson    cpuid_h=yes
419776a347e1SRichard Hendersonfi
419876a347e1SRichard Henderson
4199f540166bSRichard Henderson########################################
4200f540166bSRichard Henderson# check if __[u]int128_t is usable.
4201f540166bSRichard Henderson
4202f540166bSRichard Hendersonint128=no
4203f540166bSRichard Hendersoncat > $TMPC << EOF
4204a00f66abSStefan Weil#if defined(__clang_major__) && defined(__clang_minor__)
4205a00f66abSStefan Weil# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4206a00f66abSStefan Weil#  error __int128_t does not work in CLANG before 3.2
4207a00f66abSStefan Weil# endif
4208a00f66abSStefan Weil#endif
4209f540166bSRichard Henderson__int128_t a;
4210f540166bSRichard Henderson__uint128_t b;
4211f540166bSRichard Hendersonint main (void) {
4212f540166bSRichard Henderson  a = a + b;
4213f540166bSRichard Henderson  b = a * b;
4214464e3671SPeter Maydell  a = a * a;
4215f540166bSRichard Henderson  return 0;
4216f540166bSRichard Henderson}
4217f540166bSRichard HendersonEOF
4218f540166bSRichard Hendersonif compile_prog "" "" ; then
4219f540166bSRichard Henderson    int128=yes
4220f540166bSRichard Hendersonfi
422176a347e1SRichard Henderson
42221e6e9acaSRichard Henderson########################################
42231e6e9acaSRichard Henderson# check if getauxval is available.
42241e6e9acaSRichard Henderson
42251e6e9acaSRichard Hendersongetauxval=no
42261e6e9acaSRichard Hendersoncat > $TMPC << EOF
42271e6e9acaSRichard Henderson#include <sys/auxv.h>
42281e6e9acaSRichard Hendersonint main(void) {
42291e6e9acaSRichard Henderson  return getauxval(AT_HWCAP) == 0;
42301e6e9acaSRichard Henderson}
42311e6e9acaSRichard HendersonEOF
42321e6e9acaSRichard Hendersonif compile_prog "" "" ; then
42331e6e9acaSRichard Henderson    getauxval=yes
42341e6e9acaSRichard Hendersonfi
42351e6e9acaSRichard Henderson
4236fd0e6053SJohn Snow########################################
4237fd0e6053SJohn Snow# check if ccache is interfering with
4238fd0e6053SJohn Snow# semantic analysis of macros
4239fd0e6053SJohn Snow
4240fd0e6053SJohn Snowccache_cpp2=no
4241fd0e6053SJohn Snowcat > $TMPC << EOF
4242fd0e6053SJohn Snowstatic const int Z = 1;
4243fd0e6053SJohn Snow#define fn() ({ Z; })
4244fd0e6053SJohn Snow#define TAUT(X) ((X) == Z)
4245fd0e6053SJohn Snow#define PAREN(X, Y) (X == Y)
4246fd0e6053SJohn Snow#define ID(X) (X)
4247fd0e6053SJohn Snowint main(int argc, char *argv[])
4248fd0e6053SJohn Snow{
4249fd0e6053SJohn Snow    int x = 0, y = 0;
4250fd0e6053SJohn Snow    x = ID(x);
4251fd0e6053SJohn Snow    x = fn();
4252fd0e6053SJohn Snow    fn();
4253fd0e6053SJohn Snow    if (PAREN(x, y)) return 0;
4254fd0e6053SJohn Snow    if (TAUT(Z)) return 0;
4255fd0e6053SJohn Snow    return 0;
4256fd0e6053SJohn Snow}
4257fd0e6053SJohn SnowEOF
4258fd0e6053SJohn Snow
4259fd0e6053SJohn Snowif ! compile_object "-Werror"; then
4260fd0e6053SJohn Snow    ccache_cpp2=yes
4261fd0e6053SJohn Snowfi
4262fd0e6053SJohn Snow
4263d2042378SAneesh Kumar K.V##########################################
4264e86ecd4bSJuan Quintela# End of CC checks
4265e86ecd4bSJuan Quintela# After here, no more $cc or $ld runs
4266e86ecd4bSJuan Quintela
42671d728c39SBlue Swirlif test "$gcov" = "yes" ; then
42681d728c39SBlue Swirl  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
42691d728c39SBlue Swirl  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
42701d728c39SBlue Swirlelif test "$debug" = "no" ; then
4271e600cdf3SMichal Privoznik  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4272e86ecd4bSJuan Quintelafi
4273a316e378SJuan Quintela
42746542aa9cSPeter Lieven##########################################
42756542aa9cSPeter Lieven# Do we have libnfs
42766542aa9cSPeter Lievenif test "$libnfs" != "no" ; then
4277b7d769c9SPeter Lieven  if $pkg_config --atleast-version=1.9.3 libnfs; then
42786542aa9cSPeter Lieven    libnfs="yes"
42796542aa9cSPeter Lieven    libnfs_libs=$($pkg_config --libs libnfs)
42806542aa9cSPeter Lieven    LIBS="$LIBS $libnfs_libs"
42816542aa9cSPeter Lieven  else
42826542aa9cSPeter Lieven    if test "$libnfs" = "yes" ; then
42838efc9363SHu Tao      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
42846542aa9cSPeter Lieven    fi
42856542aa9cSPeter Lieven    libnfs="no"
42866542aa9cSPeter Lieven  fi
42876542aa9cSPeter Lievenfi
42881d728c39SBlue Swirl
428920ff6c80SAnthony Liguori# Disable zero malloc errors for official releases unless explicitly told to
429020ff6c80SAnthony Liguori# enable/disable
429120ff6c80SAnthony Liguoriif test -z "$zero_malloc" ; then
429220ff6c80SAnthony Liguori    if test "$z_version" = "50" ; then
429320ff6c80SAnthony Liguori	zero_malloc="no"
429420ff6c80SAnthony Liguori    else
429520ff6c80SAnthony Liguori	zero_malloc="yes"
429620ff6c80SAnthony Liguori    fi
429720ff6c80SAnthony Liguorifi
429820ff6c80SAnthony Liguori
42996ca026cbSPeter Maydell# Now we've finished running tests it's OK to add -Werror to the compiler flags
43006ca026cbSPeter Maydellif test "$werror" = "yes"; then
43016ca026cbSPeter Maydell    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
43026ca026cbSPeter Maydellfi
43036ca026cbSPeter Maydell
4304e86ecd4bSJuan Quintelaif test "$solaris" = "no" ; then
4305e86ecd4bSJuan Quintela    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
43061156c669SJuan Quintela        LDFLAGS="-Wl,--warn-common $LDFLAGS"
4307e86ecd4bSJuan Quintela    fi
4308e86ecd4bSJuan Quintelafi
4309e86ecd4bSJuan Quintela
431094dd53c5SGerd Hoffmann# test if pod2man has --utf8 option
431194dd53c5SGerd Hoffmannif pod2man --help | grep -q utf8; then
431294dd53c5SGerd Hoffmann    POD2MAN="pod2man --utf8"
431394dd53c5SGerd Hoffmannelse
431494dd53c5SGerd Hoffmann    POD2MAN="pod2man"
431594dd53c5SGerd Hoffmannfi
431694dd53c5SGerd Hoffmann
4317952afb71SBlue Swirl# Use ASLR, no-SEH and DEP if available
4318952afb71SBlue Swirlif test "$mingw32" = "yes" ; then
4319952afb71SBlue Swirl    for flag in --dynamicbase --no-seh --nxcompat; do
4320952afb71SBlue Swirl        if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4321952afb71SBlue Swirl            LDFLAGS="-Wl,$flag $LDFLAGS"
4322952afb71SBlue Swirl        fi
4323952afb71SBlue Swirl    done
4324952afb71SBlue Swirlfi
4325952afb71SBlue Swirl
432610ea68b3SEduardo Habkostqemu_confdir=$sysconfdir$confsuffix
4327e26110cfSFam Zhengqemu_moddir=$libdir$confsuffix
4328528ae5b8SEduardo Habkostqemu_datadir=$datadir$confsuffix
4329834574eaSAnthony Liguoriqemu_localedir="$datadir/locale"
43305a67135aSbellard
43314b1c11fdSDaniel P. Berrangetools=""
43324b1c11fdSDaniel P. Berrangeif test "$want_tools" = "yes" ; then
4333ca35f780SPaolo Bonzini  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
43344b1c11fdSDaniel P. Berrange  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
43354b1c11fdSDaniel P. Berrange    tools="qemu-nbd\$(EXESUF) $tools"
43364b1c11fdSDaniel P. Berrange  fi
43374b1c11fdSDaniel P. Berrangefi
43384b1c11fdSDaniel P. Berrangeif test "$softmmu" = yes ; then
4339983eef5aSMeador Inge  if test "$virtfs" != no ; then
4340be5ea8edSAnthony Liguori    if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4341983eef5aSMeador Inge      virtfs=yes
434217bff52bSM. Mohan Kumar      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4343983eef5aSMeador Inge    else
4344983eef5aSMeador Inge      if test "$virtfs" = yes; then
434576ad07a4SPeter Maydell        error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4346983eef5aSMeador Inge      fi
434717500370SAndreas Färber      virtfs=no
4348983eef5aSMeador Inge    fi
434917bff52bSM. Mohan Kumar  fi
4350d138cee9SMichael Rothfi
4351e8ef31a3SMichael Tokarevif [ "$guest_agent" != "no" ]; then
4352b39297aeSTomoki Sekiyama  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4353e8ef31a3SMichael Tokarev      tools="qemu-ga\$(EXESUF) $tools"
4354b39297aeSTomoki Sekiyama      if [ "$mingw32" = "yes" -a "$guest_agent_with_vss" = "yes" ]; then
4355b39297aeSTomoki Sekiyama        tools="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb $tools"
4356b39297aeSTomoki Sekiyama      fi
4357e8ef31a3SMichael Tokarev      guest_agent=yes
4358e8ef31a3SMichael Tokarev  elif [ "$guest_agent" != yes ]; then
4359e8ef31a3SMichael Tokarev      guest_agent=no
4360e8ef31a3SMichael Tokarev  else
4361e8ef31a3SMichael Tokarev      error_exit "Guest agent is not supported on this platform"
4362ca35f780SPaolo Bonzini  fi
43634b1c11fdSDaniel P. Berrangefi
4364ca35f780SPaolo Bonzini
4365ca35f780SPaolo Bonzini# Mac OS X ships with a broken assembler
4366ca35f780SPaolo Bonziniroms=
4367ca35f780SPaolo Bonziniif test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4368ca35f780SPaolo Bonzini        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4369ca35f780SPaolo Bonzini        "$softmmu" = yes ; then
4370ca35f780SPaolo Bonzini  roms="optionrom"
4371ca35f780SPaolo Bonzinifi
4372d0384d1dSAndreas Färberif test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
437339ac8455SDavid Gibson  roms="$roms spapr-rtas"
437439ac8455SDavid Gibsonfi
4375ca35f780SPaolo Bonzini
43769933c305SChristian Borntraegerif test "$cpu" = "s390x" ; then
43779933c305SChristian Borntraeger  roms="$roms s390-ccw"
43789933c305SChristian Borntraegerfi
43799933c305SChristian Borntraeger
4380964c6fa1SRichard Henderson# Probe for the need for relocating the user-only binary.
4381964c6fa1SRichard Hendersonif test "$pie" = "no" ; then
4382964c6fa1SRichard Henderson  textseg_addr=
4383964c6fa1SRichard Henderson  case "$cpu" in
4384479eb121SRichard Henderson    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4385479eb121SRichard Henderson      # ??? Rationale for choosing this address
4386964c6fa1SRichard Henderson      textseg_addr=0x60000000
4387964c6fa1SRichard Henderson      ;;
4388964c6fa1SRichard Henderson    mips)
4389479eb121SRichard Henderson      # A 256M aligned address, high in the address space, with enough
4390479eb121SRichard Henderson      # room for the code_gen_buffer above it before the stack.
4391479eb121SRichard Henderson      textseg_addr=0x60000000
4392964c6fa1SRichard Henderson      ;;
4393964c6fa1SRichard Henderson  esac
4394964c6fa1SRichard Henderson  if [ -n "$textseg_addr" ]; then
4395964c6fa1SRichard Henderson    cat > $TMPC <<EOF
4396964c6fa1SRichard Henderson    int main(void) { return 0; }
4397964c6fa1SRichard HendersonEOF
4398964c6fa1SRichard Henderson    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4399964c6fa1SRichard Henderson    if ! compile_prog "" "$textseg_ldflags"; then
4400964c6fa1SRichard Henderson      # In case ld does not support -Ttext-segment, edit the default linker
4401964c6fa1SRichard Henderson      # script via sed to set the .text start addr.  This is needed on FreeBSD
4402964c6fa1SRichard Henderson      # at least.
4403964c6fa1SRichard Henderson      $ld --verbose | sed \
4404964c6fa1SRichard Henderson        -e '1,/==================================================/d' \
4405964c6fa1SRichard Henderson        -e '/==================================================/,$d' \
4406964c6fa1SRichard Henderson        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4407964c6fa1SRichard Henderson        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4408964c6fa1SRichard Henderson      textseg_ldflags="-Wl,-T../config-host.ld"
4409964c6fa1SRichard Henderson    fi
4410964c6fa1SRichard Henderson  fi
4411964c6fa1SRichard Hendersonfi
4412964c6fa1SRichard Henderson
441350e12060SJan Kiszka# prepend pixman and ftd flags after all config tests are done
441450e12060SJan KiszkaQEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
441550e12060SJan Kiszkalibs_softmmu="$pixman_libs $libs_softmmu"
44165ca9388aSGerd Hoffmann
44177d13299dSbellardecho "Install prefix    $prefix"
4418c00b2808SEduardo Habkostecho "BIOS directory    `eval echo $qemu_datadir`"
4419f2b9e1e3SPaolo Bonziniecho "binary directory  `eval echo $bindir`"
44203aa5d2beSAlon Levyecho "library directory `eval echo $libdir`"
4421e26110cfSFam Zhengecho "module directory  `eval echo $qemu_moddir`"
44228bf188aaSMichael Tokarevecho "libexec directory `eval echo $libexecdir`"
44230f94d6daSAlon Levyecho "include directory `eval echo $includedir`"
44241c0fd160SAurelien Jarnoecho "config directory  `eval echo $sysconfdir`"
442511d9f695Sbellardif test "$mingw32" = "no" ; then
44265a699bbbSLaszlo Ersekecho "local state directory   `eval echo $local_statedir`"
4427f2b9e1e3SPaolo Bonziniecho "Manual directory  `eval echo $mandir`"
442843ce4dfeSbellardecho "ELF interp prefix $interp_prefix"
44295a699bbbSLaszlo Ersekelse
44305a699bbbSLaszlo Ersekecho "local state directory   queried at runtime"
4431d9840e25STomoki Sekiyamaecho "Windows SDK       $win_sdk"
443211d9f695Sbellardfi
44335a67135aSbellardecho "Source path       $source_path"
44347d13299dSbellardecho "C compiler        $cc"
443583469015Sbellardecho "Host C compiler   $host_cc"
443683f73fceSTomoki Sekiyamaecho "C++ compiler      $cxx"
44373c4a4d0dSPeter Maydellecho "Objective-C compiler $objcc"
443845d285abSPeter Maydellecho "ARFLAGS           $ARFLAGS"
44390c439cbfSJuan Quintelaecho "CFLAGS            $CFLAGS"
4440a558ee17SJuan Quintelaecho "QEMU_CFLAGS       $QEMU_CFLAGS"
44410c439cbfSJuan Quintelaecho "LDFLAGS           $LDFLAGS"
44427d13299dSbellardecho "make              $make"
44436a882643Spbrookecho "install           $install"
4444c886edfbSBlue Swirlecho "python            $python"
4445e2d8830eSBradif test "$slirp" = "yes" ; then
4446e2d8830eSBrad    echo "smbd              $smbd"
4447e2d8830eSBradfi
444817969268SFam Zhengecho "module support    $modules"
4449a98fd896Sbellardecho "host CPU          $cpu"
4450de83cd02Sbellardecho "host big endian   $bigendian"
445197a847bcSbellardecho "target list       $target_list"
4452ade25b0dSaurel32echo "tcg debug enabled $debug_tcg"
44537d13299dSbellardecho "gprof enabled     $gprof"
445403b4fe7dSaliguoriecho "sparse enabled    $sparse"
44551625af87Saliguoriecho "strip binaries    $strip_opt"
445605c2a3e7Sbellardecho "profiler          $profiler"
445743ce4dfeSbellardecho "static build      $static"
44585b0753e0Sbellardif test "$darwin" = "yes" ; then
44595b0753e0Sbellard    echo "Cocoa support     $cocoa"
44605b0753e0Sbellardfi
4461e2134eb9SGerd Hoffmannecho "pixman            $pixman"
446297a847bcSbellardecho "SDL support       $sdl"
4463a4ccabcfSAnthony Liguoriecho "GTK support       $gtk"
4464*ddbb0d09SDaniel P. Berrangeecho "GNUTLS support    $gnutls"
4465*ddbb0d09SDaniel P. Berrangeecho "GNUTLS hash       $gnutls_hash"
4466bbbf9bfbSStefan Weilecho "VTE support       $vte"
44674d3b6f6eSbalrogecho "curses support    $curses"
4468769ce76dSAlexander Grafecho "curl support      $curl"
446967b915a5Sbellardecho "mingw32 support   $mingw32"
44700c58ac1cSmalcecho "Audio drivers     $audio_drv_list"
4471b64ec4e4SFam Zhengecho "Block whitelist (rw) $block_drv_rw_whitelist"
4472b64ec4e4SFam Zhengecho "Block whitelist (ro) $block_drv_ro_whitelist"
4473983eef5aSMeador Ingeecho "VirtFS support    $virtfs"
4474821601eaSJes Sorensenecho "VNC support       $vnc"
4475821601eaSJes Sorensenif test "$vnc" = "yes" ; then
44768d5d2d4cSths    echo "VNC TLS support   $vnc_tls"
44772f9606b3Saliguori    echo "VNC SASL support  $vnc_sasl"
44782f6f5c7aSCorentin Chary    echo "VNC JPEG support  $vnc_jpeg"
4479efe556adSCorentin Chary    echo "VNC PNG support   $vnc_png"
44807536ee4bSTim Hardeck    echo "VNC WS support    $vnc_ws"
4481821601eaSJes Sorensenfi
44823142255cSblueswir1if test -n "$sparc_cpu"; then
44833142255cSblueswir1    echo "Target Sparc Arch $sparc_cpu"
44843142255cSblueswir1fi
4485e37630caSaliguoriecho "xen support       $xen"
44863996e85cSPaul Durrantif test "$xen" = "yes" ; then
44873996e85cSPaul Durrant  echo "xen ctrl version  $xen_ctrl_version"
44883996e85cSPaul Durrantfi
44892e4d9fb1Saurel32echo "brlapi support    $brlapi"
4490a20a6f46SJuan Quintelaecho "bluez  support    $bluez"
4491a25dba17SJuan Quintelaecho "Documentation     $docs"
4492379f6698SPaul Brookecho "GUEST_BASE        $guest_base"
449340d6444eSAvi Kivityecho "PIE               $pie"
44948a16d273Sthsecho "vde support       $vde"
449558952137SVincenzo Maffioneecho "netmap support    $netmap"
44965c6c3a6cSChristoph Hellwigecho "Linux AIO support $linux_aio"
4497758e8e38SVenkateswararao Jujjuri (JV)echo "ATTR/XATTR support $attr"
449877755340Sthsecho "Install blobs     $blobs"
4499b31a0277SJuan Quintelaecho "KVM support       $kvm"
45002da776dbSMichael R. Hinesecho "RDMA support      $rdma"
45019195b2c2SStefan Weilecho "TCG interpreter   $tcg_interpreter"
4502f652e6afSaurel32echo "fdt support       $fdt"
4503ceb42de8Saliguoriecho "preadv support    $preadv"
45045f6b9e8fSBlue Swirlecho "fdatasync         $fdatasync"
4505e78815a5SAndreas Färberecho "madvise           $madvise"
4506e78815a5SAndreas Färberecho "posix_madvise     $posix_madvise"
45071e9737daSRichard Hendersonecho "sigev_thread_id   $sigev_thread_id"
4508ee682d27SStefan Weilecho "uuid support      $uuid"
450947e98658SCorey Bryantecho "libcap-ng support $cap_ng"
4510d5970055SMichael S. Tsirkinecho "vhost-net support $vhost_net"
45115e9be92dSNicholas Bellingerecho "vhost-scsi support $vhost_scsi"
45125b808275SLluís Vilanovaecho "Trace backends    $trace_backends"
4513e00e36fbSStefan Weilif test "$trace_backend" = "simple"; then
45149410b56cSPrerna Saxenaecho "Trace output file $trace_file-<pid>"
4515e00e36fbSStefan Weilfi
4516c9dd4074SStefan Weilif test "$spice" = "yes"; then
45172e0e3c39SAlon Levyecho "spice support     $spice ($spice_protocol_version/$spice_server_version)"
4518c9dd4074SStefan Weilelse
4519c9dd4074SStefan Weilecho "spice support     $spice"
4520c9dd4074SStefan Weilfi
4521f27aaf4bSChristian Brunnerecho "rbd support       $rbd"
4522dce512deSChristoph Hellwigecho "xfsctl support    $xfs"
4523111a38b0SRobert Relyeaecho "nss used          $smartcard_nss"
45242b2325ffSGerd Hoffmannecho "libusb            $libusb"
452569354a83SHans de Goedeecho "usb net redir     $usb_redir"
4526da076ffeSGerd Hoffmannecho "OpenGL support    $opengl"
4527c589b249SRonnie Sahlbergecho "libiscsi support  $libiscsi"
45286542aa9cSPeter Lievenecho "libnfs support    $libnfs"
4529d138cee9SMichael Rothecho "build guest agent $guest_agent"
4530d9840e25STomoki Sekiyamaecho "QGA VSS support   $guest_agent_with_vss"
4531f794573eSEduardo Otuboecho "seccomp support   $seccomp"
45327c2acc70SPeter Maydellecho "coroutine backend $coroutine"
453370c60c08SStefan Hajnocziecho "coroutine pool    $coroutine_pool"
4534eb100396SBharata B Raoecho "GlusterFS support $glusterfs"
4535c9a12e75SChrysostomos Nanakosecho "Archipelago support $archipelago"
45361d728c39SBlue Swirlecho "gcov              $gcov_tool"
45371d728c39SBlue Swirlecho "gcov enabled      $gcov"
4538ab214c29SStefan Bergerecho "TPM support       $tpm"
45390a12ec87SRichard W.M. Jonesecho "libssh2 support   $libssh2"
45403b8acc11SPaolo Bonziniecho "TPM passthrough   $tpm_passthrough"
45413556c233SPaolo Bonziniecho "QOM debugging     $qom_cast_debug"
45424f18b782SJeff Codyecho "vhdx              $vhdx"
454395c6bff3SBenoît Canetecho "Quorum            $quorum"
4544607dacd0Sqiaonuohanecho "lzo support       $lzo"
4545607dacd0Sqiaonuohanecho "snappy support    $snappy"
45466b383c08SPeter Wuecho "bzip2 support     $bzip2"
4547a99d57bbSWanlong Gaoecho "NUMA host support $numa"
45482847b469SFam Zhengecho "tcmalloc support  $tcmalloc"
454967b915a5Sbellard
45501ba16968SStefan Weilif test "$sdl_too_old" = "yes"; then
455124b55b96Sbellardecho "-> Your SDL version is too old - please upgrade to have SDL support"
4552e8cd23deSbellardfi
455397a847bcSbellard
455498ec69acSJuan Quintelaconfig_host_mak="config-host.mak"
455597a847bcSbellard
4556dbd99ae3SStefan Weilecho "# Automatically generated by configure - do not modify" >config-all-disas.mak
4557dbd99ae3SStefan Weil
455898ec69acSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_host_mak
455998ec69acSJuan Quintelaecho >> $config_host_mak
456098ec69acSJuan Quintela
4561e6c3b0f7SPaolo Bonziniecho all: >> $config_host_mak
456299d7cc75SPaolo Bonziniecho "prefix=$prefix" >> $config_host_mak
456399d7cc75SPaolo Bonziniecho "bindir=$bindir" >> $config_host_mak
45643aa5d2beSAlon Levyecho "libdir=$libdir" >> $config_host_mak
45658bf188aaSMichael Tokarevecho "libexecdir=$libexecdir" >> $config_host_mak
45660f94d6daSAlon Levyecho "includedir=$includedir" >> $config_host_mak
456799d7cc75SPaolo Bonziniecho "mandir=$mandir" >> $config_host_mak
456899d7cc75SPaolo Bonziniecho "sysconfdir=$sysconfdir" >> $config_host_mak
456922d07038SEduardo Habkostecho "qemu_confdir=$qemu_confdir" >> $config_host_mak
45709afa52ceSEduardo Habkostecho "qemu_datadir=$qemu_datadir" >> $config_host_mak
45719afa52ceSEduardo Habkostecho "qemu_docdir=$qemu_docdir" >> $config_host_mak
4572e26110cfSFam Zhengecho "qemu_moddir=$qemu_moddir" >> $config_host_mak
45735a699bbbSLaszlo Ersekif test "$mingw32" = "no" ; then
4574785c23aeSLuiz Capitulino  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
45755a699bbbSLaszlo Ersekfi
4576f354b1a1SMichael Tokarevecho "qemu_helperdir=$libexecdir" >> $config_host_mak
4577f9943cd5SGerd Hoffmannecho "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4578f9943cd5SGerd Hoffmannecho "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4579834574eaSAnthony Liguoriecho "qemu_localedir=$qemu_localedir" >> $config_host_mak
4580f544a488SPaolo Bonziniecho "libs_softmmu=$libs_softmmu" >> $config_host_mak
4581804edf29SJuan Quintela
458298ec69acSJuan Quintelaecho "ARCH=$ARCH" >> $config_host_mak
4583727e5283SPaolo Bonzini
4584f8393946Saurel32if test "$debug_tcg" = "yes" ; then
45852358a494SJuan Quintela  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4586f8393946Saurel32fi
45871625af87Saliguoriif test "$strip_opt" = "yes" ; then
458852ba784dSHollis Blanchard  echo "STRIP=${strip}" >> $config_host_mak
45891625af87Saliguorifi
45907d13299dSbellardif test "$bigendian" = "yes" ; then
4591e2542fe2SJuan Quintela  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
459297a847bcSbellardfi
459367b915a5Sbellardif test "$mingw32" = "yes" ; then
459498ec69acSJuan Quintela  echo "CONFIG_WIN32=y" >> $config_host_mak
45959fe6de94SBlue Swirl  rc_version=`cat $source_path/VERSION`
45969fe6de94SBlue Swirl  version_major=${rc_version%%.*}
45979fe6de94SBlue Swirl  rc_version=${rc_version#*.}
45989fe6de94SBlue Swirl  version_minor=${rc_version%%.*}
45999fe6de94SBlue Swirl  rc_version=${rc_version#*.}
46009fe6de94SBlue Swirl  version_subminor=${rc_version%%.*}
46019fe6de94SBlue Swirl  version_micro=0
46029fe6de94SBlue Swirl  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
46039fe6de94SBlue Swirl  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4604d9840e25STomoki Sekiyama  if test "$guest_agent_with_vss" = "yes" ; then
4605d9840e25STomoki Sekiyama    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4606d9840e25STomoki Sekiyama    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4607d9840e25STomoki Sekiyama  fi
46089dacf32dSYossi Hindin  if test "$guest_agent_msi" != "no"; then
46099dacf32dSYossi Hindin    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
46109dacf32dSYossi Hindin    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
46119dacf32dSYossi Hindin    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
46129dacf32dSYossi Hindin    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
46139dacf32dSYossi Hindin    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
46149dacf32dSYossi Hindin    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
46159dacf32dSYossi Hindin    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
46169dacf32dSYossi Hindin  fi
4617210fa556Spbrookelse
461835f4df27SJuan Quintela  echo "CONFIG_POSIX=y" >> $config_host_mak
4619210fa556Spbrookfi
4620128ab2ffSblueswir1
4621dffcb71cSMark McLoughlinif test "$linux" = "yes" ; then
4622dffcb71cSMark McLoughlin  echo "CONFIG_LINUX=y" >> $config_host_mak
4623dffcb71cSMark McLoughlinfi
4624dffcb71cSMark McLoughlin
462583fb7adfSbellardif test "$darwin" = "yes" ; then
462698ec69acSJuan Quintela  echo "CONFIG_DARWIN=y" >> $config_host_mak
462783fb7adfSbellardfi
4628b29fe3edSmalc
4629b29fe3edSmalcif test "$aix" = "yes" ; then
463098ec69acSJuan Quintela  echo "CONFIG_AIX=y" >> $config_host_mak
4631b29fe3edSmalcfi
4632b29fe3edSmalc
4633ec530c81Sbellardif test "$solaris" = "yes" ; then
463498ec69acSJuan Quintela  echo "CONFIG_SOLARIS=y" >> $config_host_mak
46352358a494SJuan Quintela  echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
46360475a5caSths  if test "$needs_libsunmath" = "yes" ; then
463775b5a697SJuan Quintela    echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
46380475a5caSths  fi
4639ec530c81Sbellardfi
4640179cf400SAndreas Färberif test "$haiku" = "yes" ; then
4641179cf400SAndreas Färber  echo "CONFIG_HAIKU=y" >> $config_host_mak
4642179cf400SAndreas Färberfi
464397a847bcSbellardif test "$static" = "yes" ; then
464498ec69acSJuan Quintela  echo "CONFIG_STATIC=y" >> $config_host_mak
464597a847bcSbellardfi
46461ba16968SStefan Weilif test "$profiler" = "yes" ; then
46472358a494SJuan Quintela  echo "CONFIG_PROFILER=y" >> $config_host_mak
464805c2a3e7Sbellardfi
4649c20709aaSbellardif test "$slirp" = "yes" ; then
465098ec69acSJuan Quintela  echo "CONFIG_SLIRP=y" >> $config_host_mak
4651e2d8830eSBrad  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4652c20709aaSbellardfi
46538a16d273Sthsif test "$vde" = "yes" ; then
465498ec69acSJuan Quintela  echo "CONFIG_VDE=y" >> $config_host_mak
46558a16d273Sthsfi
465658952137SVincenzo Maffioneif test "$netmap" = "yes" ; then
465758952137SVincenzo Maffione  echo "CONFIG_NETMAP=y" >> $config_host_mak
465858952137SVincenzo Maffionefi
4659015a33bdSGongleiif test "$l2tpv3" = "yes" ; then
4660015a33bdSGonglei  echo "CONFIG_L2TPV3=y" >> $config_host_mak
4661015a33bdSGongleifi
466247e98658SCorey Bryantif test "$cap_ng" = "yes" ; then
466347e98658SCorey Bryant  echo "CONFIG_LIBCAP=y" >> $config_host_mak
466447e98658SCorey Bryantfi
46652358a494SJuan Quintelaecho "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
46660c58ac1cSmalcfor drv in $audio_drv_list; do
4667bb55b712SStefan Weil    def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
466898ec69acSJuan Quintela    echo "$def=y" >> $config_host_mak
46690c58ac1cSmalcdone
467067f86e8eSJuan Quintelaif test "$audio_pt_int" = "yes" ; then
467167f86e8eSJuan Quintela  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
467267f86e8eSJuan Quintelafi
4673d5631638Smalcif test "$audio_win_int" = "yes" ; then
4674d5631638Smalc  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4675d5631638Smalcfi
4676b64ec4e4SFam Zhengecho "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4677b64ec4e4SFam Zhengecho "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4678821601eaSJes Sorensenif test "$vnc" = "yes" ; then
4679821601eaSJes Sorensen  echo "CONFIG_VNC=y" >> $config_host_mak
4680821601eaSJes Sorensenfi
46818d5d2d4cSthsif test "$vnc_tls" = "yes" ; then
468298ec69acSJuan Quintela  echo "CONFIG_VNC_TLS=y" >> $config_host_mak
46838d5d2d4cSthsfi
46842f9606b3Saliguoriif test "$vnc_sasl" = "yes" ; then
468598ec69acSJuan Quintela  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
46862f9606b3Saliguorifi
4687821601eaSJes Sorensenif test "$vnc_jpeg" = "yes" ; then
46882f6f5c7aSCorentin Chary  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
46892f6f5c7aSCorentin Charyfi
4690821601eaSJes Sorensenif test "$vnc_png" = "yes" ; then
4691efe556adSCorentin Chary  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4692efe556adSCorentin Charyfi
46937536ee4bSTim Hardeckif test "$vnc_ws" = "yes" ; then
46947536ee4bSTim Hardeck  echo "CONFIG_VNC_WS=y" >> $config_host_mak
46957536ee4bSTim Hardeck  echo "VNC_WS_CFLAGS=$vnc_ws_cflags" >> $config_host_mak
46967536ee4bSTim Hardeckfi
469776655d6dSaliguoriif test "$fnmatch" = "yes" ; then
46982358a494SJuan Quintela  echo "CONFIG_FNMATCH=y" >> $config_host_mak
469976655d6dSaliguorifi
4700ee682d27SStefan Weilif test "$uuid" = "yes" ; then
4701ee682d27SStefan Weil  echo "CONFIG_UUID=y" >> $config_host_mak
4702ee682d27SStefan Weilfi
4703dce512deSChristoph Hellwigif test "$xfs" = "yes" ; then
4704dce512deSChristoph Hellwig  echo "CONFIG_XFS=y" >> $config_host_mak
4705dce512deSChristoph Hellwigfi
4706b1a550a0Spbrookqemu_version=`head $source_path/VERSION`
470798ec69acSJuan Quintelaecho "VERSION=$qemu_version" >>$config_host_mak
47082358a494SJuan Quintelaecho "PKGVERSION=$pkgversion" >>$config_host_mak
470998ec69acSJuan Quintelaecho "SRC_PATH=$source_path" >> $config_host_mak
471098ec69acSJuan Quintelaecho "TARGET_DIRS=$target_list" >> $config_host_mak
4711a25dba17SJuan Quintelaif [ "$docs" = "yes" ] ; then
471298ec69acSJuan Quintela  echo "BUILD_DOCS=yes" >> $config_host_mak
4713cc8ae6deSpbrookfi
471417969268SFam Zhengif test "$modules" = "yes"; then
4715e26110cfSFam Zheng  # $shacmd can generate a hash started with digit, which the compiler doesn't
4716e26110cfSFam Zheng  # like as an symbol. So prefix it with an underscore
4717e26110cfSFam Zheng  echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
471817969268SFam Zheng  echo "CONFIG_MODULES=y" >> $config_host_mak
471917969268SFam Zhengfi
47201ac88f28SJuan Quintelaif test "$sdl" = "yes" ; then
472198ec69acSJuan Quintela  echo "CONFIG_SDL=y" >> $config_host_mak
4722a3f4d63dSCole Robinson  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
47238ad3a7ddSJuan Quintela  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
472449ecc3faSbellardfi
472549ecc3faSbellardif test "$cocoa" = "yes" ; then
472698ec69acSJuan Quintela  echo "CONFIG_COCOA=y" >> $config_host_mak
472749ecc3faSbellardfi
47284d3b6f6eSbalrogif test "$curses" = "yes" ; then
472998ec69acSJuan Quintela  echo "CONFIG_CURSES=y" >> $config_host_mak
4730ab4e5602SJan Kiszkafi
4731ebc996f3SRiku Voipioif test "$utimens" = "yes" ; then
47322358a494SJuan Quintela  echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
4733ebc996f3SRiku Voipiofi
4734099d6b0fSRiku Voipioif test "$pipe2" = "yes" ; then
47352358a494SJuan Quintela  echo "CONFIG_PIPE2=y" >> $config_host_mak
4736099d6b0fSRiku Voipiofi
473740ff6d7eSKevin Wolfif test "$accept4" = "yes" ; then
473840ff6d7eSKevin Wolf  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
473940ff6d7eSKevin Wolffi
47403ce34dfbSvibisreenivasanif test "$splice" = "yes" ; then
47412358a494SJuan Quintela  echo "CONFIG_SPLICE=y" >> $config_host_mak
47423ce34dfbSvibisreenivasanfi
4743c2882b96SRiku Voipioif test "$eventfd" = "yes" ; then
4744c2882b96SRiku Voipio  echo "CONFIG_EVENTFD=y" >> $config_host_mak
4745c2882b96SRiku Voipiofi
4746d0927938SUlrich Hechtif test "$fallocate" = "yes" ; then
4747d0927938SUlrich Hecht  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4748d0927938SUlrich Hechtfi
47493d4fa43eSKusanagi Kouichiif test "$fallocate_punch_hole" = "yes" ; then
47503d4fa43eSKusanagi Kouichi  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
47513d4fa43eSKusanagi Kouichifi
4752b953f075SDenis V. Lunevif test "$fallocate_zero_range" = "yes" ; then
4753b953f075SDenis V. Lunev  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4754b953f075SDenis V. Lunevfi
4755ed911435SKevin Wolfif test "$posix_fallocate" = "yes" ; then
4756ed911435SKevin Wolf  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4757ed911435SKevin Wolffi
4758c727f47dSPeter Maydellif test "$sync_file_range" = "yes" ; then
4759c727f47dSPeter Maydell  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4760c727f47dSPeter Maydellfi
4761dace20dcSPeter Maydellif test "$fiemap" = "yes" ; then
4762dace20dcSPeter Maydell  echo "CONFIG_FIEMAP=y" >> $config_host_mak
4763dace20dcSPeter Maydellfi
4764d0927938SUlrich Hechtif test "$dup3" = "yes" ; then
4765d0927938SUlrich Hecht  echo "CONFIG_DUP3=y" >> $config_host_mak
4766d0927938SUlrich Hechtfi
47674e0c6529SAlex Blighif test "$ppoll" = "yes" ; then
47684e0c6529SAlex Bligh  echo "CONFIG_PPOLL=y" >> $config_host_mak
47694e0c6529SAlex Blighfi
4770cd758dd0SAlex Blighif test "$prctl_pr_set_timerslack" = "yes" ; then
4771cd758dd0SAlex Bligh  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
4772cd758dd0SAlex Blighfi
47733b6edd16SPeter Maydellif test "$epoll" = "yes" ; then
47743b6edd16SPeter Maydell  echo "CONFIG_EPOLL=y" >> $config_host_mak
47753b6edd16SPeter Maydellfi
47763b6edd16SPeter Maydellif test "$epoll_create1" = "yes" ; then
47773b6edd16SPeter Maydell  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
47783b6edd16SPeter Maydellfi
47793b6edd16SPeter Maydellif test "$epoll_pwait" = "yes" ; then
47803b6edd16SPeter Maydell  echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
47813b6edd16SPeter Maydellfi
4782a8fd1abaSPeter Maydellif test "$sendfile" = "yes" ; then
4783a8fd1abaSPeter Maydell  echo "CONFIG_SENDFILE=y" >> $config_host_mak
4784a8fd1abaSPeter Maydellfi
478551834341SRiku Voipioif test "$timerfd" = "yes" ; then
478651834341SRiku Voipio  echo "CONFIG_TIMERFD=y" >> $config_host_mak
478751834341SRiku Voipiofi
47889af5c906SRiku Voipioif test "$setns" = "yes" ; then
47899af5c906SRiku Voipio  echo "CONFIG_SETNS=y" >> $config_host_mak
47909af5c906SRiku Voipiofi
47913b3f24adSaurel32if test "$inotify" = "yes" ; then
47922358a494SJuan Quintela  echo "CONFIG_INOTIFY=y" >> $config_host_mak
47933b3f24adSaurel32fi
4794c05c7a73SRiku Voipioif test "$inotify1" = "yes" ; then
4795c05c7a73SRiku Voipio  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
4796c05c7a73SRiku Voipiofi
47976ae9a1f4SJuan Quintelaif test "$byteswap_h" = "yes" ; then
47986ae9a1f4SJuan Quintela  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
47996ae9a1f4SJuan Quintelafi
48006ae9a1f4SJuan Quintelaif test "$bswap_h" = "yes" ; then
48016ae9a1f4SJuan Quintela  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
48026ae9a1f4SJuan Quintelafi
4803769ce76dSAlexander Grafif test "$curl" = "yes" ; then
4804d3399d7cSFam Zheng  echo "CONFIG_CURL=m" >> $config_host_mak
4805b1d5a277SJuan Quintela  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
48066ebc91e5SFam Zheng  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
4807769ce76dSAlexander Graffi
48082e4d9fb1Saurel32if test "$brlapi" = "yes" ; then
480998ec69acSJuan Quintela  echo "CONFIG_BRLAPI=y" >> $config_host_mak
48102e4d9fb1Saurel32fi
4811fb599c9aSbalrogif test "$bluez" = "yes" ; then
481298ec69acSJuan Quintela  echo "CONFIG_BLUEZ=y" >> $config_host_mak
4813ef7635ecSJuan Quintela  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
4814fb599c9aSbalrogfi
4815d46f7c9eSDr. David Alan Gilbertif test "$glib_subprocess" = "yes" ; then
48169d41401bSMichael S. Tsirkin  echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
48179d41401bSMichael S. Tsirkinfi
4818e18df141SAnthony Liguoriecho "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4819a4ccabcfSAnthony Liguoriif test "$gtk" = "yes" ; then
4820a4ccabcfSAnthony Liguori  echo "CONFIG_GTK=y" >> $config_host_mak
4821a3f4d63dSCole Robinson  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
4822a4ccabcfSAnthony Liguori  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
4823bbbf9bfbSStefan Weilfi
4824*ddbb0d09SDaniel P. Berrangeif test "$gnutls" = "yes" ; then
4825*ddbb0d09SDaniel P. Berrange  echo "CONFIG_GNUTLS=y" >> $config_host_mak
4826*ddbb0d09SDaniel P. Berrangefi
4827*ddbb0d09SDaniel P. Berrangeif test "$gnutls_hash" = "yes" ; then
4828*ddbb0d09SDaniel P. Berrange  echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak
4829*ddbb0d09SDaniel P. Berrangefi
4830bbbf9bfbSStefan Weilif test "$vte" = "yes" ; then
4831bbbf9bfbSStefan Weil  echo "CONFIG_VTE=y" >> $config_host_mak
4832a4ccabcfSAnthony Liguori  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
4833a4ccabcfSAnthony Liguorifi
4834e37630caSaliguoriif test "$xen" = "yes" ; then
48356dbd588aSJan Kiszka  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4836d5b93ddfSAnthony PERARD  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4837e37630caSaliguorifi
48385c6c3a6cSChristoph Hellwigif test "$linux_aio" = "yes" ; then
48395c6c3a6cSChristoph Hellwig  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
48405c6c3a6cSChristoph Hellwigfi
4841758e8e38SVenkateswararao Jujjuri (JV)if test "$attr" = "yes" ; then
4842758e8e38SVenkateswararao Jujjuri (JV)  echo "CONFIG_ATTR=y" >> $config_host_mak
4843758e8e38SVenkateswararao Jujjuri (JV)fi
48444f26f2b6SAvi Kivityif test "$libattr" = "yes" ; then
48454f26f2b6SAvi Kivity  echo "CONFIG_LIBATTR=y" >> $config_host_mak
48464f26f2b6SAvi Kivityfi
4847983eef5aSMeador Ingeif test "$virtfs" = "yes" ; then
4848758e8e38SVenkateswararao Jujjuri (JV)  echo "CONFIG_VIRTFS=y" >> $config_host_mak
4849758e8e38SVenkateswararao Jujjuri (JV)fi
48505e9be92dSNicholas Bellingerif test "$vhost_scsi" = "yes" ; then
48515e9be92dSNicholas Bellinger  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
48525e9be92dSNicholas Bellingerfi
485303ce5744SNikolay Nikolaevif test "$vhost_net" = "yes" ; then
485403ce5744SNikolay Nikolaev  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
485503ce5744SNikolay Nikolaevfi
485677755340Sthsif test "$blobs" = "yes" ; then
485798ec69acSJuan Quintela  echo "INSTALL_BLOBS=yes" >> $config_host_mak
485877755340Sthsfi
4859bf9298b9Saliguoriif test "$iovec" = "yes" ; then
48602358a494SJuan Quintela  echo "CONFIG_IOVEC=y" >> $config_host_mak
4861bf9298b9Saliguorifi
4862ceb42de8Saliguoriif test "$preadv" = "yes" ; then
48632358a494SJuan Quintela  echo "CONFIG_PREADV=y" >> $config_host_mak
4864ceb42de8Saliguorifi
4865f652e6afSaurel32if test "$fdt" = "yes" ; then
48663f0855b1SJuan Quintela  echo "CONFIG_FDT=y" >> $config_host_mak
4867f652e6afSaurel32fi
4868dcc38d1cSMarcelo Tosattiif test "$signalfd" = "yes" ; then
4869dcc38d1cSMarcelo Tosatti  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
4870dcc38d1cSMarcelo Tosattifi
48719195b2c2SStefan Weilif test "$tcg_interpreter" = "yes" ; then
48729195b2c2SStefan Weil  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
48739195b2c2SStefan Weilfi
48745f6b9e8fSBlue Swirlif test "$fdatasync" = "yes" ; then
48755f6b9e8fSBlue Swirl  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
48765f6b9e8fSBlue Swirlfi
4877e78815a5SAndreas Färberif test "$madvise" = "yes" ; then
4878e78815a5SAndreas Färber  echo "CONFIG_MADVISE=y" >> $config_host_mak
4879e78815a5SAndreas Färberfi
4880e78815a5SAndreas Färberif test "$posix_madvise" = "yes" ; then
4881e78815a5SAndreas Färber  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
4882e78815a5SAndreas Färberfi
48831e9737daSRichard Hendersonif test "$sigev_thread_id" = "yes" ; then
48841e9737daSRichard Henderson  echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
48851e9737daSRichard Hendersonfi
488697a847bcSbellard
4887cd4ec0b4SGerd Hoffmannif test "$spice" = "yes" ; then
4888cd4ec0b4SGerd Hoffmann  echo "CONFIG_SPICE=y" >> $config_host_mak
4889cd4ec0b4SGerd Hoffmannfi
4890cd4ec0b4SGerd Hoffmann
4891111a38b0SRobert Relyeaif test "$smartcard_nss" = "yes" ; then
4892111a38b0SRobert Relyea  echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
48939d171bd9SMichael Tokarev  echo "NSS_LIBS=$nss_libs" >> $config_host_mak
48949d171bd9SMichael Tokarev  echo "NSS_CFLAGS=$nss_cflags" >> $config_host_mak
4895111a38b0SRobert Relyeafi
4896111a38b0SRobert Relyea
48972b2325ffSGerd Hoffmannif test "$libusb" = "yes" ; then
48982b2325ffSGerd Hoffmann  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
48992b2325ffSGerd Hoffmannfi
49002b2325ffSGerd Hoffmann
490169354a83SHans de Goedeif test "$usb_redir" = "yes" ; then
490269354a83SHans de Goede  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
490369354a83SHans de Goedefi
490469354a83SHans de Goede
4905da076ffeSGerd Hoffmannif test "$opengl" = "yes" ; then
4906da076ffeSGerd Hoffmann  echo "CONFIG_OPENGL=y" >> $config_host_mak
4907f676c67eSJeremy White  echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
4908da076ffeSGerd Hoffmann  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
490920ff075bSMichael Wallefi
491020ff075bSMichael Walle
4911607dacd0Sqiaonuohanif test "$lzo" = "yes" ; then
4912607dacd0Sqiaonuohan  echo "CONFIG_LZO=y" >> $config_host_mak
4913607dacd0Sqiaonuohanfi
4914607dacd0Sqiaonuohan
4915607dacd0Sqiaonuohanif test "$snappy" = "yes" ; then
4916607dacd0Sqiaonuohan  echo "CONFIG_SNAPPY=y" >> $config_host_mak
4917607dacd0Sqiaonuohanfi
4918607dacd0Sqiaonuohan
49196b383c08SPeter Wuif test "$bzip2" = "yes" ; then
49206b383c08SPeter Wu  echo "CONFIG_BZIP2=y" >> $config_host_mak
49216b383c08SPeter Wu  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
49226b383c08SPeter Wufi
49236b383c08SPeter Wu
4924c589b249SRonnie Sahlbergif test "$libiscsi" = "yes" ; then
4925d3399d7cSFam Zheng  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
49266ebc91e5SFam Zheng  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
49276ebc91e5SFam Zheng  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
4928c589b249SRonnie Sahlbergfi
4929c589b249SRonnie Sahlberg
49306542aa9cSPeter Lievenif test "$libnfs" = "yes" ; then
49316542aa9cSPeter Lieven  echo "CONFIG_LIBNFS=y" >> $config_host_mak
49326542aa9cSPeter Lievenfi
49336542aa9cSPeter Lieven
4934f794573eSEduardo Otuboif test "$seccomp" = "yes"; then
4935f794573eSEduardo Otubo  echo "CONFIG_SECCOMP=y" >> $config_host_mak
4936f794573eSEduardo Otubofi
4937f794573eSEduardo Otubo
493883fb7adfSbellard# XXX: suppress that
49397d3505c5Sbellardif [ "$bsd" = "yes" ] ; then
49402358a494SJuan Quintela  echo "CONFIG_BSD=y" >> $config_host_mak
49417d3505c5Sbellardfi
49427d3505c5Sbellard
494320ff6c80SAnthony Liguoriif test "$zero_malloc" = "yes" ; then
494420ff6c80SAnthony Liguori  echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
494520ff6c80SAnthony Liguorifi
49463556c233SPaolo Bonziniif test "$qom_cast_debug" = "yes" ; then
49473556c233SPaolo Bonzini  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
49483556c233SPaolo Bonzinifi
4949f27aaf4bSChristian Brunnerif test "$rbd" = "yes" ; then
4950d3399d7cSFam Zheng  echo "CONFIG_RBD=m" >> $config_host_mak
49516ebc91e5SFam Zheng  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
49526ebc91e5SFam Zheng  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
4953f27aaf4bSChristian Brunnerfi
495420ff6c80SAnthony Liguori
49557c2acc70SPeter Maydellecho "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
495670c60c08SStefan Hajnocziif test "$coroutine_pool" = "yes" ; then
495770c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
495870c60c08SStefan Hajnoczielse
495970c60c08SStefan Hajnoczi  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
496070c60c08SStefan Hajnoczifi
4961d0e2fce5SAneesh Kumar K.V
4962d2042378SAneesh Kumar K.Vif test "$open_by_handle_at" = "yes" ; then
4963d2042378SAneesh Kumar K.V  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
4964d2042378SAneesh Kumar K.Vfi
4965d2042378SAneesh Kumar K.V
4966e06a765eSHarsh Prateek Boraif test "$linux_magic_h" = "yes" ; then
4967e06a765eSHarsh Prateek Bora  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
4968e06a765eSHarsh Prateek Borafi
4969e06a765eSHarsh Prateek Bora
4970cc6e3ca9SGerd Hoffmannif test "$pragma_diagnostic_available" = "yes" ; then
4971cc6e3ca9SGerd Hoffmann  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
497206d71fa1SPeter Maydellfi
497306d71fa1SPeter Maydell
49743f4349dcSKevin Wolfif test "$valgrind_h" = "yes" ; then
49753f4349dcSKevin Wolf  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
49763f4349dcSKevin Wolffi
49773f4349dcSKevin Wolf
49788ab1bf12SLuiz Capitulinoif test "$has_environ" = "yes" ; then
49798ab1bf12SLuiz Capitulino  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
49808ab1bf12SLuiz Capitulinofi
49818ab1bf12SLuiz Capitulino
498276a347e1SRichard Hendersonif test "$cpuid_h" = "yes" ; then
498376a347e1SRichard Henderson  echo "CONFIG_CPUID_H=y" >> $config_host_mak
498476a347e1SRichard Hendersonfi
498576a347e1SRichard Henderson
4986f540166bSRichard Hendersonif test "$int128" = "yes" ; then
4987f540166bSRichard Henderson  echo "CONFIG_INT128=y" >> $config_host_mak
4988f540166bSRichard Hendersonfi
4989f540166bSRichard Henderson
49901e6e9acaSRichard Hendersonif test "$getauxval" = "yes" ; then
49911e6e9acaSRichard Henderson  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
49921e6e9acaSRichard Hendersonfi
49931e6e9acaSRichard Henderson
4994eb100396SBharata B Raoif test "$glusterfs" = "yes" ; then
4995d3399d7cSFam Zheng  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
49966ebc91e5SFam Zheng  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
49976ebc91e5SFam Zheng  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
4998eb100396SBharata B Raofi
4999eb100396SBharata B Rao
50000c14fb47SBharata B Raoif test "$glusterfs_discard" = "yes" ; then
50010c14fb47SBharata B Rao  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
50020c14fb47SBharata B Raofi
50030c14fb47SBharata B Rao
50047c815372SBharata B Raoif test "$glusterfs_zerofill" = "yes" ; then
50057c815372SBharata B Rao  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
50067c815372SBharata B Raofi
50077c815372SBharata B Rao
5008c9a12e75SChrysostomos Nanakosif test "$archipelago" = "yes" ; then
5009c9a12e75SChrysostomos Nanakos  echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5010c9a12e75SChrysostomos Nanakos  echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5011c9a12e75SChrysostomos Nanakosfi
5012c9a12e75SChrysostomos Nanakos
50130a12ec87SRichard W.M. Jonesif test "$libssh2" = "yes" ; then
5014d3399d7cSFam Zheng  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
50156ebc91e5SFam Zheng  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
50166ebc91e5SFam Zheng  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
50170a12ec87SRichard W.M. Jonesfi
50180a12ec87SRichard W.M. Jones
501995c6bff3SBenoît Canetif test "$quorum" = "yes" ; then
502095c6bff3SBenoît Canet  echo "CONFIG_QUORUM=y" >> $config_host_mak
502195c6bff3SBenoît Canetfi
502295c6bff3SBenoît Canet
50234f18b782SJeff Codyif test "$vhdx" = "yes" ; then
50244f18b782SJeff Cody  echo "CONFIG_VHDX=y" >> $config_host_mak
50254f18b782SJeff Codyfi
50264f18b782SJeff Cody
502768063649Sblueswir1# USB host support
5028b5613fdcSGerd Hoffmannif test "$libusb" = "yes"; then
50292b2325ffSGerd Hoffmann  echo "HOST_USB=libusb legacy" >> $config_host_mak
5030b5613fdcSGerd Hoffmannelse
503198ec69acSJuan Quintela  echo "HOST_USB=stub" >> $config_host_mak
5032b5613fdcSGerd Hoffmannfi
503368063649Sblueswir1
50343b8acc11SPaolo Bonzini# TPM passthrough support?
50353b8acc11SPaolo Bonziniif test "$tpm" = "yes"; then
50363b8acc11SPaolo Bonzini  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
50373b8acc11SPaolo Bonzini  if test "$tpm_passthrough" = "yes"; then
50383b8acc11SPaolo Bonzini    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
50393b8acc11SPaolo Bonzini  fi
50403b8acc11SPaolo Bonzinifi
50413b8acc11SPaolo Bonzini
50425b808275SLluís Vilanovaecho "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
50435b808275SLluís Vilanovaif have_backend "nop"; then
50446d8a764eSLluís  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
504522890ab5SPrerna Saxenafi
50465b808275SLluís Vilanovaif have_backend "simple"; then
50476d8a764eSLluís  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
50486d8a764eSLluís  # Set the appropriate trace file.
5049953ffe0fSAndreas Färber  trace_file="\"$trace_file-\" FMT_pid"
50509410b56cSPrerna Saxenafi
50515b808275SLluís Vilanovaif have_backend "stderr"; then
50526d8a764eSLluís  echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
50536d8a764eSLluísfi
50545b808275SLluís Vilanovaif have_backend "ust"; then
50556d8a764eSLluís  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
50566d8a764eSLluísfi
50575b808275SLluís Vilanovaif have_backend "dtrace"; then
50586d8a764eSLluís  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
50596d8a764eSLluís  if test "$trace_backend_stap" = "yes" ; then
50606d8a764eSLluís    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
50616d8a764eSLluís  fi
5062c276b17dSDaniel P. Berrangefi
50635b808275SLluís Vilanovaif have_backend "ftrace"; then
5064781e9545SEiichi Tsukata  if test "$linux" = "yes" ; then
5065781e9545SEiichi Tsukata    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5066781e9545SEiichi Tsukata  else
506721684af0SStewart Smith    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5068781e9545SEiichi Tsukata  fi
5069781e9545SEiichi Tsukatafi
50709410b56cSPrerna Saxenaecho "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
50719410b56cSPrerna Saxena
50722da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then
50732da776dbSMichael R. Hines  echo "CONFIG_RDMA=y" >> $config_host_mak
50742da776dbSMichael R. Hinesfi
50752da776dbSMichael R. Hines
50765c312079SDr. David Alan Gilbert# Hold two types of flag:
50775c312079SDr. David Alan Gilbert#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
50785c312079SDr. David Alan Gilbert#                                     a thread we have a handle to
50795c312079SDr. David Alan Gilbert#   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
50805c312079SDr. David Alan Gilbert#                                     platform
50815c312079SDr. David Alan Gilbertif test "$pthread_setname_np" = "yes" ; then
50825c312079SDr. David Alan Gilbert  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
50835c312079SDr. David Alan Gilbert  echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
50845c312079SDr. David Alan Gilbertfi
50855c312079SDr. David Alan Gilbert
50865b5e3037SPaolo Bonziniif test "$tcg_interpreter" = "yes"; then
50875b5e3037SPaolo Bonzini  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
50885b5e3037SPaolo Bonzinielif test "$ARCH" = "sparc64" ; then
50895b5e3037SPaolo Bonzini  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
50905b5e3037SPaolo Bonzinielif test "$ARCH" = "s390x" ; then
50915b5e3037SPaolo Bonzini  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5092c72b26ecSRichard Hendersonelif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
50935b5e3037SPaolo Bonzini  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
509440d964b5SRichard Hendersonelif test "$ARCH" = "ppc64" ; then
509540d964b5SRichard Henderson  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
50965b5e3037SPaolo Bonzinielse
50975b5e3037SPaolo Bonzini  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
50985b5e3037SPaolo Bonzinifi
50995b5e3037SPaolo BonziniQEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
51005b5e3037SPaolo Bonzini
510198ec69acSJuan Quintelaecho "TOOLS=$tools" >> $config_host_mak
510298ec69acSJuan Quintelaecho "ROMS=$roms" >> $config_host_mak
5103804edf29SJuan Quintelaecho "MAKE=$make" >> $config_host_mak
5104804edf29SJuan Quintelaecho "INSTALL=$install" >> $config_host_mak
51051901cb14SBradecho "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
51061901cb14SBradecho "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
510721655882SPaolo Bonziniif test -n "$libtool"; then
510821655882SPaolo Bonzini  echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
510921655882SPaolo Bonzini  echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
511021655882SPaolo Bonzinielse
51111901cb14SBrad  echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
511221655882SPaolo Bonzini  echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
511321655882SPaolo Bonzinifi
5114c886edfbSBlue Swirlecho "PYTHON=$python" >> $config_host_mak
5115804edf29SJuan Quintelaecho "CC=$cc" >> $config_host_mak
5116a31a8642SMichael S. Tsirkinif $iasl -h > /dev/null 2>&1; then
5117a31a8642SMichael S. Tsirkin  echo "IASL=$iasl" >> $config_host_mak
5118a31a8642SMichael S. Tsirkinfi
51192b2e59e6SPaolo Bonziniecho "CC_I386=$cc_i386" >> $config_host_mak
5120804edf29SJuan Quintelaecho "HOST_CC=$host_cc" >> $config_host_mak
512183f73fceSTomoki Sekiyamaecho "CXX=$cxx" >> $config_host_mak
51223c4a4d0dSPeter Maydellecho "OBJCC=$objcc" >> $config_host_mak
5123804edf29SJuan Quintelaecho "AR=$ar" >> $config_host_mak
512445d285abSPeter Maydellecho "ARFLAGS=$ARFLAGS" >> $config_host_mak
51253dd46c78SBlue Swirlecho "AS=$as" >> $config_host_mak
51263dd46c78SBlue Swirlecho "CPP=$cpp" >> $config_host_mak
5127804edf29SJuan Quintelaecho "OBJCOPY=$objcopy" >> $config_host_mak
5128804edf29SJuan Quintelaecho "LD=$ld" >> $config_host_mak
51294852ee95SStefan Weilecho "NM=$nm" >> $config_host_mak
51309fe6de94SBlue Swirlecho "WINDRES=$windres" >> $config_host_mak
513144dc0ca3SAlon Levyecho "LIBTOOL=$libtool" >> $config_host_mak
5132e2a2ed06SJuan Quintelaecho "CFLAGS=$CFLAGS" >> $config_host_mak
513346eef33bSBradecho "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5134a558ee17SJuan Quintelaecho "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5135f9728943SPaolo Bonziniecho "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5136e39f0062SPaolo Bonziniif test "$sparse" = "yes" ; then
5137e39f0062SPaolo Bonzini  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
513880fd48dfSChristian Borntraeger  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
51392944d742SGerd Hoffmann  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
5140e39f0062SPaolo Bonzini  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
5141e39f0062SPaolo Bonzini  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5142e39f0062SPaolo Bonzinifi
514342da6041SGerd Hoffmannif test "$cross_prefix" != ""; then
514442da6041SGerd Hoffmann  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
514542da6041SGerd Hoffmannelse
514642da6041SGerd Hoffmann  echo "AUTOCONF_HOST := "                             >> $config_host_mak
514742da6041SGerd Hoffmannfi
5148e2a2ed06SJuan Quintelaecho "LDFLAGS=$LDFLAGS" >> $config_host_mak
514946eef33bSBradecho "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
515037746c5eSMarc-André Lureauecho "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
515173da375eSJuan Quintelaecho "LIBS+=$LIBS" >> $config_host_mak
51523e2e0e6bSJuan Quintelaecho "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5153804edf29SJuan Quintelaecho "EXESUF=$EXESUF" >> $config_host_mak
515417969268SFam Zhengecho "DSOSUF=$DSOSUF" >> $config_host_mak
515517969268SFam Zhengecho "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5156957f1f99SMichael Rothecho "LIBS_QGA+=$libs_qga" >> $config_host_mak
515794dd53c5SGerd Hoffmannecho "POD2MAN=$POD2MAN" >> $config_host_mak
5158cbdd1999SPaolo Bonziniecho "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
51591d728c39SBlue Swirlif test "$gcov" = "yes" ; then
51601d728c39SBlue Swirl  echo "CONFIG_GCOV=y" >> $config_host_mak
51611d728c39SBlue Swirl  echo "GCOV=$gcov_tool" >> $config_host_mak
51621d728c39SBlue Swirlfi
5163804edf29SJuan Quintela
51646efd7517SPeter Maydell# use included Linux headers
51656efd7517SPeter Maydellif test "$linux" = "yes" ; then
5166a307beb6SAndreas Färber  mkdir -p linux-headers
51676efd7517SPeter Maydell  case "$cpu" in
5168c72b26ecSRichard Henderson  i386|x86_64|x32)
516908312a63SPeter Maydell    linux_arch=x86
51706efd7517SPeter Maydell    ;;
51716efd7517SPeter Maydell  ppcemb|ppc|ppc64)
517208312a63SPeter Maydell    linux_arch=powerpc
51736efd7517SPeter Maydell    ;;
51746efd7517SPeter Maydell  s390x)
517508312a63SPeter Maydell    linux_arch=s390
517608312a63SPeter Maydell    ;;
51771f080313SClaudio Fontana  aarch64)
51781f080313SClaudio Fontana    linux_arch=arm64
51791f080313SClaudio Fontana    ;;
5180222e7d11SSanjay Lal  mips64)
5181222e7d11SSanjay Lal    linux_arch=mips
5182222e7d11SSanjay Lal    ;;
518308312a63SPeter Maydell  *)
518408312a63SPeter Maydell    # For most CPUs the kernel architecture name and QEMU CPU name match.
518508312a63SPeter Maydell    linux_arch="$cpu"
51866efd7517SPeter Maydell    ;;
51876efd7517SPeter Maydell  esac
518808312a63SPeter Maydell    # For non-KVM architectures we will not have asm headers
518908312a63SPeter Maydell    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
519008312a63SPeter Maydell      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
519108312a63SPeter Maydell    fi
51926efd7517SPeter Maydellfi
51936efd7517SPeter Maydell
519497a847bcSbellardfor target in $target_list; do
519597a847bcSbellardtarget_dir="$target"
519625be210fSJuan Quintelaconfig_target_mak=$target_dir/config-target.mak
5197c1799a84SPaolo Bonzinitarget_name=`echo $target | cut -d '-' -f 1`
519897a847bcSbellardtarget_bigendian="no"
51991f3d3c8fSJuan Quintela
5200c1799a84SPaolo Bonzinicase "$target_name" in
5201d15a9c23SAnthony Green  armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5202ea2d6a39SJuan Quintela  target_bigendian=yes
5203ea2d6a39SJuan Quintela  ;;
5204ea2d6a39SJuan Quintelaesac
520597a847bcSbellardtarget_softmmu="no"
5206997344f3Sbellardtarget_user_only="no"
5207831b7825Sthstarget_linux_user="no"
520884778508Sblueswir1target_bsd_user="no"
52099e407a85Spbrookcase "$target" in
5210c1799a84SPaolo Bonzini  ${target_name}-softmmu)
52119e407a85Spbrook    target_softmmu="yes"
52129e407a85Spbrook    ;;
5213c1799a84SPaolo Bonzini  ${target_name}-linux-user)
52149c7a4202SBlue Swirl    if test "$linux" != "yes" ; then
521576ad07a4SPeter Maydell      error_exit "Target '$target' is only available on a Linux host"
52169c7a4202SBlue Swirl    fi
52179e407a85Spbrook    target_user_only="yes"
52189e407a85Spbrook    target_linux_user="yes"
52199e407a85Spbrook    ;;
5220c1799a84SPaolo Bonzini  ${target_name}-bsd-user)
52219cf55765SBlue Swirl    if test "$bsd" != "yes" ; then
522276ad07a4SPeter Maydell      error_exit "Target '$target' is only available on a BSD host"
52239c7a4202SBlue Swirl    fi
522484778508Sblueswir1    target_user_only="yes"
522584778508Sblueswir1    target_bsd_user="yes"
522684778508Sblueswir1    ;;
52279e407a85Spbrook  *)
522876ad07a4SPeter Maydell    error_exit "Target '$target' not recognised"
52299e407a85Spbrook    exit 1
52309e407a85Spbrook    ;;
52319e407a85Spbrookesac
5232831b7825Sths
523397a847bcSbellardmkdir -p $target_dir
523425be210fSJuan Quintelaecho "# Automatically generated by configure - do not modify" > $config_target_mak
523597a847bcSbellard
5236e5fe0c52Spbrookbflt="no"
5237c1799a84SPaolo Bonziniinterp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
523856aebc89Spbrookgdb_xml_files=""
52397ba1e619Saliguori
5240c1799a84SPaolo BonziniTARGET_ARCH="$target_name"
52416acff7daSJuan QuintelaTARGET_BASE_ARCH=""
5242e6e91b9cSJuan QuintelaTARGET_ABI_DIR=""
5243e73aae67SJuan Quintela
5244c1799a84SPaolo Bonzinicase "$target_name" in
52452408a527Saurel32  i386)
52462408a527Saurel32  ;;
52472408a527Saurel32  x86_64)
52486acff7daSJuan Quintela    TARGET_BASE_ARCH=i386
52492408a527Saurel32  ;;
52502408a527Saurel32  alpha)
52512408a527Saurel32  ;;
52522408a527Saurel32  arm|armeb)
5253b498c8a0SJuan Quintela    TARGET_ARCH=arm
5254e5fe0c52Spbrook    bflt="yes"
525556aebc89Spbrook    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
52562408a527Saurel32  ;;
52576a49fa95SAlexander Graf  aarch64)
52586a49fa95SAlexander Graf    TARGET_BASE_ARCH=arm
52596a49fa95SAlexander Graf    bflt="yes"
52608f95ce2eSPeter Maydell    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
52616a49fa95SAlexander Graf  ;;
52622408a527Saurel32  cris)
52632408a527Saurel32  ;;
5264613a22c9SMichael Walle  lm32)
5265613a22c9SMichael Walle  ;;
52662408a527Saurel32  m68k)
52670938cda5Saurel32    bflt="yes"
526856aebc89Spbrook    gdb_xml_files="cf-core.xml cf-fp.xml"
52692408a527Saurel32  ;;
5270877fdc12SEdgar E. Iglesias  microblaze|microblazeel)
5271877fdc12SEdgar E. Iglesias    TARGET_ARCH=microblaze
527272b675caSEdgar E. Iglesias    bflt="yes"
527372b675caSEdgar E. Iglesias  ;;
52742408a527Saurel32  mips|mipsel)
5275b498c8a0SJuan Quintela    TARGET_ARCH=mips
527625be210fSJuan Quintela    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
52772408a527Saurel32  ;;
52782408a527Saurel32  mipsn32|mipsn32el)
5279597e2cecSRichard Henderson    TARGET_ARCH=mips64
52806acff7daSJuan Quintela    TARGET_BASE_ARCH=mips
528125be210fSJuan Quintela    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5282597e2cecSRichard Henderson    echo "TARGET_ABI32=y" >> $config_target_mak
52832408a527Saurel32  ;;
52842408a527Saurel32  mips64|mips64el)
5285b498c8a0SJuan Quintela    TARGET_ARCH=mips64
52866acff7daSJuan Quintela    TARGET_BASE_ARCH=mips
528725be210fSJuan Quintela    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
52882408a527Saurel32  ;;
5289d15a9c23SAnthony Green  moxie)
5290d15a9c23SAnthony Green  ;;
5291e67db06eSJia Liu  or32)
5292e67db06eSJia Liu    TARGET_ARCH=openrisc
5293e67db06eSJia Liu    TARGET_BASE_ARCH=openrisc
5294e67db06eSJia Liu  ;;
52952408a527Saurel32  ppc)
5296c8b3532dSaurel32    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
52972408a527Saurel32  ;;
52982408a527Saurel32  ppcemb)
52996acff7daSJuan Quintela    TARGET_BASE_ARCH=ppc
5300e6e91b9cSJuan Quintela    TARGET_ABI_DIR=ppc
5301c8b3532dSaurel32    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
53022408a527Saurel32  ;;
53032408a527Saurel32  ppc64)
53046acff7daSJuan Quintela    TARGET_BASE_ARCH=ppc
5305e6e91b9cSJuan Quintela    TARGET_ABI_DIR=ppc
5306c8b3532dSaurel32    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
53072408a527Saurel32  ;;
53089c35126cSDoug Kwan  ppc64le)
53099c35126cSDoug Kwan    TARGET_ARCH=ppc64
53109c35126cSDoug Kwan    TARGET_BASE_ARCH=ppc
53119c35126cSDoug Kwan    TARGET_ABI_DIR=ppc
53129c35126cSDoug Kwan    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
53139c35126cSDoug Kwan  ;;
53142408a527Saurel32  ppc64abi32)
5315b498c8a0SJuan Quintela    TARGET_ARCH=ppc64
53166acff7daSJuan Quintela    TARGET_BASE_ARCH=ppc
5317e6e91b9cSJuan Quintela    TARGET_ABI_DIR=ppc
531825be210fSJuan Quintela    echo "TARGET_ABI32=y" >> $config_target_mak
5319c8b3532dSaurel32    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
53202408a527Saurel32  ;;
53212408a527Saurel32  sh4|sh4eb)
5322b498c8a0SJuan Quintela    TARGET_ARCH=sh4
53234dbed897Spbrook    bflt="yes"
53242408a527Saurel32  ;;
53252408a527Saurel32  sparc)
53262408a527Saurel32  ;;
53272408a527Saurel32  sparc64)
53286acff7daSJuan Quintela    TARGET_BASE_ARCH=sparc
53292408a527Saurel32  ;;
53302408a527Saurel32  sparc32plus)
5331b498c8a0SJuan Quintela    TARGET_ARCH=sparc64
53326acff7daSJuan Quintela    TARGET_BASE_ARCH=sparc
5333e6e91b9cSJuan Quintela    TARGET_ABI_DIR=sparc
533425be210fSJuan Quintela    echo "TARGET_ABI32=y" >> $config_target_mak
53352408a527Saurel32  ;;
533624e804ecSAlexander Graf  s390x)
5337ca343c7aSEric Farman    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml"
533824e804ecSAlexander Graf  ;;
53395ecaa4edSPeter Crosthwaite  tricore)
53405ecaa4edSPeter Crosthwaite  ;;
5341d2fbca94SGuan Xuetao  unicore32)
5342d2fbca94SGuan Xuetao  ;;
5343cfa550c6SMax Filippov  xtensa|xtensaeb)
5344cfa550c6SMax Filippov    TARGET_ARCH=xtensa
5345cfa550c6SMax Filippov  ;;
53462408a527Saurel32  *)
534776ad07a4SPeter Maydell    error_exit "Unsupported target CPU"
53482408a527Saurel32  ;;
53492408a527Saurel32esac
53505e8861a0SPaolo Bonzini# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
53515e8861a0SPaolo Bonziniif [ "$TARGET_BASE_ARCH" = "" ]; then
53525e8861a0SPaolo Bonzini  TARGET_BASE_ARCH=$TARGET_ARCH
53535e8861a0SPaolo Bonzinifi
53545e8861a0SPaolo Bonzini
53555e8861a0SPaolo Bonzinisymlink "$source_path/Makefile.target" "$target_dir/Makefile"
53565e8861a0SPaolo Bonzini
535799afc91dSDaniel P. Berrangeupper() {
535899afc91dSDaniel P. Berrange    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
535999afc91dSDaniel P. Berrange}
536099afc91dSDaniel P. Berrange
536199afc91dSDaniel P. Berrangetarget_arch_name="`upper $TARGET_ARCH`"
536225be210fSJuan Quintelaecho "TARGET_$target_arch_name=y" >> $config_target_mak
5363c1799a84SPaolo Bonziniecho "TARGET_NAME=$target_name" >> $config_target_mak
536425be210fSJuan Quintelaecho "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5365e6e91b9cSJuan Quintelaif [ "$TARGET_ABI_DIR" = "" ]; then
5366e6e91b9cSJuan Quintela  TARGET_ABI_DIR=$TARGET_ARCH
5367e6e91b9cSJuan Quintelafi
536825be210fSJuan Quintelaecho "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5369adfc3e91SStacey Sonif [ "$HOST_VARIANT_DIR" != "" ]; then
5370adfc3e91SStacey Son    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5371adfc3e91SStacey Sonfi
5372c1799a84SPaolo Bonzinicase "$target_name" in
53731b0c87fcSJuan Quintela  i386|x86_64)
53741b0c87fcSJuan Quintela    if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
537525be210fSJuan Quintela      echo "CONFIG_XEN=y" >> $config_target_mak
5376eb6fda0fSAnthony PERARD      if test "$xen_pci_passthrough" = yes; then
5377eb6fda0fSAnthony PERARD        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5378eb6fda0fSAnthony PERARD      fi
5379432d268cSJun Nakajima    fi
538059d21e53SAlexander Graf    ;;
538159d21e53SAlexander Graf  *)
53821b0c87fcSJuan Quintelaesac
5383c1799a84SPaolo Bonzinicase "$target_name" in
5384222e7d11SSanjay Lal  aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5385c59249f9SJuan Quintela    # Make sure the target and host cpus are compatible
5386c59249f9SJuan Quintela    if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5387c1799a84SPaolo Bonzini      \( "$target_name" = "$cpu" -o \
5388c1799a84SPaolo Bonzini      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5389c1799a84SPaolo Bonzini      \( "$target_name" = "ppc64"  -a "$cpu" = "ppc" \) -o \
5390c1799a84SPaolo Bonzini      \( "$target_name" = "ppc"    -a "$cpu" = "ppc64" \) -o \
5391c1799a84SPaolo Bonzini      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5392222e7d11SSanjay Lal      \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5393c1799a84SPaolo Bonzini      \( "$target_name" = "x86_64" -a "$cpu" = "i386"   \) -o \
539418b8263eSMichael Tokarev      \( "$target_name" = "i386"   -a "$cpu" = "x86_64" \) -o \
539518b8263eSMichael Tokarev      \( "$target_name" = "x86_64" -a "$cpu" = "x32"   \) -o \
539618b8263eSMichael Tokarev      \( "$target_name" = "i386"   -a "$cpu" = "x32" \) \) ; then
539725be210fSJuan Quintela      echo "CONFIG_KVM=y" >> $config_target_mak
53981ba16968SStefan Weil      if test "$vhost_net" = "yes" ; then
5399d5970055SMichael S. Tsirkin        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5400d5970055SMichael S. Tsirkin      fi
5401c59249f9SJuan Quintela    fi
5402c59249f9SJuan Quintelaesac
5403de83cd02Sbellardif test "$target_bigendian" = "yes" ; then
540425be210fSJuan Quintela  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
540597a847bcSbellardfi
540697a847bcSbellardif test "$target_softmmu" = "yes" ; then
540725be210fSJuan Quintela  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5408de83cd02Sbellardfi
5409997344f3Sbellardif test "$target_user_only" = "yes" ; then
541025be210fSJuan Quintela  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5411a2c80be9SStefan Weil  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5412997344f3Sbellardfi
5413831b7825Sthsif test "$target_linux_user" = "yes" ; then
541425be210fSJuan Quintela  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5415831b7825Sthsfi
541656aebc89Spbrooklist=""
541756aebc89Spbrookif test ! -z "$gdb_xml_files" ; then
541856aebc89Spbrook  for x in $gdb_xml_files; do
541956aebc89Spbrook    list="$list $source_path/gdb-xml/$x"
542056aebc89Spbrook  done
542125be210fSJuan Quintela  echo "TARGET_XML_FILES=$list" >> $config_target_mak
54223d0f1517SJuan Quintelafi
5423de83cd02Sbellard
5424e5fe0c52Spbrookif test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
542525be210fSJuan Quintela  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5426e5fe0c52Spbrookfi
5427379f6698SPaul Brookif test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
542825be210fSJuan Quintela  echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak
5429379f6698SPaul Brookfi
543084778508Sblueswir1if test "$target_bsd_user" = "yes" ; then
543125be210fSJuan Quintela  echo "CONFIG_BSD_USER=y" >> $config_target_mak
543284778508Sblueswir1fi
54335b0753e0Sbellard
54344afddb55SJuan Quintela# generate QEMU_CFLAGS/LDFLAGS for targets
5435fa282484SJuan Quintela
54364afddb55SJuan Quintelacflags=""
5437fa282484SJuan Quintelaldflags=""
54389b8e111fSJuan Quintela
543964656024SJuan Quintelafor i in $ARCH $TARGET_BASE_ARCH ; do
544064656024SJuan Quintela  case "$i" in
544164656024SJuan Quintela  alpha)
544225be210fSJuan Quintela    echo "CONFIG_ALPHA_DIS=y"  >> $config_target_mak
544376cad711SPaolo Bonzini    echo "CONFIG_ALPHA_DIS=y"  >> config-all-disas.mak
544464656024SJuan Quintela  ;;
544582295d8aSRichard Henderson  aarch64)
544682295d8aSRichard Henderson    if test -n "${cxx}"; then
544782295d8aSRichard Henderson      echo "CONFIG_ARM_A64_DIS=y"  >> $config_target_mak
544882295d8aSRichard Henderson      echo "CONFIG_ARM_A64_DIS=y"  >> config-all-disas.mak
544982295d8aSRichard Henderson    fi
545082295d8aSRichard Henderson  ;;
545164656024SJuan Quintela  arm)
545225be210fSJuan Quintela    echo "CONFIG_ARM_DIS=y"  >> $config_target_mak
545376cad711SPaolo Bonzini    echo "CONFIG_ARM_DIS=y"  >> config-all-disas.mak
5454999b53ecSClaudio Fontana    if test -n "${cxx}"; then
5455999b53ecSClaudio Fontana      echo "CONFIG_ARM_A64_DIS=y"  >> $config_target_mak
5456999b53ecSClaudio Fontana      echo "CONFIG_ARM_A64_DIS=y"  >> config-all-disas.mak
5457999b53ecSClaudio Fontana    fi
545864656024SJuan Quintela  ;;
545964656024SJuan Quintela  cris)
546025be210fSJuan Quintela    echo "CONFIG_CRIS_DIS=y"  >> $config_target_mak
546176cad711SPaolo Bonzini    echo "CONFIG_CRIS_DIS=y"  >> config-all-disas.mak
546264656024SJuan Quintela  ;;
546364656024SJuan Quintela  hppa)
546425be210fSJuan Quintela    echo "CONFIG_HPPA_DIS=y"  >> $config_target_mak
546576cad711SPaolo Bonzini    echo "CONFIG_HPPA_DIS=y"  >> config-all-disas.mak
546664656024SJuan Quintela  ;;
5467c72b26ecSRichard Henderson  i386|x86_64|x32)
546825be210fSJuan Quintela    echo "CONFIG_I386_DIS=y"  >> $config_target_mak
546976cad711SPaolo Bonzini    echo "CONFIG_I386_DIS=y"  >> config-all-disas.mak
547064656024SJuan Quintela  ;;
5471903ec55cSAurelien Jarno  ia64*)
5472903ec55cSAurelien Jarno    echo "CONFIG_IA64_DIS=y"  >> $config_target_mak
547376cad711SPaolo Bonzini    echo "CONFIG_IA64_DIS=y"  >> config-all-disas.mak
5474903ec55cSAurelien Jarno  ;;
547579368f49SMichael Walle  lm32)
547679368f49SMichael Walle    echo "CONFIG_LM32_DIS=y"  >> $config_target_mak
547776cad711SPaolo Bonzini    echo "CONFIG_LM32_DIS=y"  >> config-all-disas.mak
547879368f49SMichael Walle  ;;
547964656024SJuan Quintela  m68k)
548025be210fSJuan Quintela    echo "CONFIG_M68K_DIS=y"  >> $config_target_mak
548176cad711SPaolo Bonzini    echo "CONFIG_M68K_DIS=y"  >> config-all-disas.mak
548264656024SJuan Quintela  ;;
5483877fdc12SEdgar E. Iglesias  microblaze*)
548425be210fSJuan Quintela    echo "CONFIG_MICROBLAZE_DIS=y"  >> $config_target_mak
548576cad711SPaolo Bonzini    echo "CONFIG_MICROBLAZE_DIS=y"  >> config-all-disas.mak
548664656024SJuan Quintela  ;;
548764656024SJuan Quintela  mips*)
548825be210fSJuan Quintela    echo "CONFIG_MIPS_DIS=y"  >> $config_target_mak
548976cad711SPaolo Bonzini    echo "CONFIG_MIPS_DIS=y"  >> config-all-disas.mak
549064656024SJuan Quintela  ;;
5491d15a9c23SAnthony Green  moxie*)
5492d15a9c23SAnthony Green    echo "CONFIG_MOXIE_DIS=y"  >> $config_target_mak
5493d15a9c23SAnthony Green    echo "CONFIG_MOXIE_DIS=y"  >> config-all-disas.mak
5494d15a9c23SAnthony Green  ;;
5495e67db06eSJia Liu  or32)
5496e67db06eSJia Liu    echo "CONFIG_OPENRISC_DIS=y"  >> $config_target_mak
549776cad711SPaolo Bonzini    echo "CONFIG_OPENRISC_DIS=y"  >> config-all-disas.mak
5498e67db06eSJia Liu  ;;
549964656024SJuan Quintela  ppc*)
550025be210fSJuan Quintela    echo "CONFIG_PPC_DIS=y"  >> $config_target_mak
550176cad711SPaolo Bonzini    echo "CONFIG_PPC_DIS=y"  >> config-all-disas.mak
550264656024SJuan Quintela  ;;
550324e804ecSAlexander Graf  s390*)
550425be210fSJuan Quintela    echo "CONFIG_S390_DIS=y"  >> $config_target_mak
550576cad711SPaolo Bonzini    echo "CONFIG_S390_DIS=y"  >> config-all-disas.mak
550664656024SJuan Quintela  ;;
550764656024SJuan Quintela  sh4)
550825be210fSJuan Quintela    echo "CONFIG_SH4_DIS=y"  >> $config_target_mak
550976cad711SPaolo Bonzini    echo "CONFIG_SH4_DIS=y"  >> config-all-disas.mak
551064656024SJuan Quintela  ;;
551164656024SJuan Quintela  sparc*)
551225be210fSJuan Quintela    echo "CONFIG_SPARC_DIS=y"  >> $config_target_mak
551376cad711SPaolo Bonzini    echo "CONFIG_SPARC_DIS=y"  >> config-all-disas.mak
551464656024SJuan Quintela  ;;
5515cfa550c6SMax Filippov  xtensa*)
5516cfa550c6SMax Filippov    echo "CONFIG_XTENSA_DIS=y"  >> $config_target_mak
551776cad711SPaolo Bonzini    echo "CONFIG_XTENSA_DIS=y"  >> config-all-disas.mak
5518cfa550c6SMax Filippov  ;;
551964656024SJuan Quintela  esac
552064656024SJuan Quinteladone
55219195b2c2SStefan Weilif test "$tcg_interpreter" = "yes" ; then
55229195b2c2SStefan Weil  echo "CONFIG_TCI_DIS=y"  >> $config_target_mak
552376cad711SPaolo Bonzini  echo "CONFIG_TCI_DIS=y"  >> config-all-disas.mak
55249195b2c2SStefan Weilfi
552564656024SJuan Quintela
55266ee7126fSJuan Quintelacase "$ARCH" in
55276ee7126fSJuan Quintelaalpha)
55286ee7126fSJuan Quintela  # Ensure there's only a single GP
55296ee7126fSJuan Quintela  cflags="-msmall-data $cflags"
55306ee7126fSJuan Quintela;;
55316ee7126fSJuan Quintelaesac
55326ee7126fSJuan Quintela
5533d02c1db3SJuan Quintelaif test "$gprof" = "yes" ; then
553425be210fSJuan Quintela  echo "TARGET_GPROF=yes" >> $config_target_mak
5535d02c1db3SJuan Quintela  if test "$target_linux_user" = "yes" ; then
5536d02c1db3SJuan Quintela    cflags="-p $cflags"
5537d02c1db3SJuan Quintela    ldflags="-p $ldflags"
5538d02c1db3SJuan Quintela  fi
5539d02c1db3SJuan Quintela  if test "$target_softmmu" = "yes" ; then
5540d02c1db3SJuan Quintela    ldflags="-p $ldflags"
554125be210fSJuan Quintela    echo "GPROF_CFLAGS=-p" >> $config_target_mak
5542d02c1db3SJuan Quintela  fi
5543d02c1db3SJuan Quintelafi
5544d02c1db3SJuan Quintela
55459b8e111fSJuan Quintelaif test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5546964c6fa1SRichard Henderson  ldflags="$ldflags $textseg_ldflags"
5547fa282484SJuan Quintelafi
5548fa282484SJuan Quintela
554925be210fSJuan Quintelaecho "LDFLAGS+=$ldflags" >> $config_target_mak
555025be210fSJuan Quintelaecho "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5551fa282484SJuan Quintela
555297a847bcSbellarddone # for target in $targets
55537d13299dSbellard
5554b776eca1SGerd Hoffmannif [ "$pixman" = "internal" ]; then
5555b776eca1SGerd Hoffmann  echo "config-host.h: subdir-pixman" >> $config_host_mak
5556b776eca1SGerd Hoffmannfi
5557b776eca1SGerd Hoffmann
55582da776dbSMichael R. Hinesif test "$rdma" = "yes" ; then
55592da776dbSMichael R. Hinesecho "CONFIG_RDMA=y" >> $config_host_mak
55602da776dbSMichael R. Hinesfi
55612da776dbSMichael R. Hines
5562a540f158SPeter Crosthwaiteif [ "$dtc_internal" = "yes" ]; then
5563a540f158SPeter Crosthwaite  echo "config-host.h: subdir-dtc" >> $config_host_mak
5564a540f158SPeter Crosthwaitefi
5565a540f158SPeter Crosthwaite
5566a99d57bbSWanlong Gaoif test "$numa" = "yes"; then
5567a99d57bbSWanlong Gao  echo "CONFIG_NUMA=y" >> $config_host_mak
5568a99d57bbSWanlong Gaofi
5569a99d57bbSWanlong Gao
5570fd0e6053SJohn Snowif test "$ccache_cpp2" = "yes"; then
5571fd0e6053SJohn Snow  echo "export CCACHE_CPP2=y" >> $config_host_mak
5572fd0e6053SJohn Snowfi
5573fd0e6053SJohn Snow
5574d1807a4fSPaolo Bonzini# build tree in object directory in case the source is not in the current directory
5575f93296eaSWenchao XiaDIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
55762b170effSMichael TokarevDIRS="$DIRS fsdev"
55779933c305SChristian BorntraegerDIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
55782d9f27d2SAnthony LiguoriDIRS="$DIRS roms/seabios roms/vgabios"
55792dee8d54SPaolo BonziniDIRS="$DIRS qapi-generated"
5580c09015ddSAnthony LiguoriFILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5581c09015ddSAnthony LiguoriFILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5582aaa2ebc5SAndreas FärberFILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5583ae0bfb79SBlue SwirlFILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5584446b9165SAndreas FärberFILES="$FILES pc-bios/spapr-rtas/Makefile"
55859933c305SChristian BorntraegerFILES="$FILES pc-bios/s390-ccw/Makefile"
55862d9f27d2SAnthony LiguoriFILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
55874652b792SJan KiszkaFILES="$FILES pc-bios/qemu-icon.bmp"
5588753d11f2SRichard Hendersonfor bios_file in \
5589753d11f2SRichard Henderson    $source_path/pc-bios/*.bin \
55905acc2ec0SGerd Hoffmann    $source_path/pc-bios/*.aml \
5591753d11f2SRichard Henderson    $source_path/pc-bios/*.rom \
5592753d11f2SRichard Henderson    $source_path/pc-bios/*.dtb \
5593e89e33e1SDominik Dingel    $source_path/pc-bios/*.img \
5594753d11f2SRichard Henderson    $source_path/pc-bios/openbios-* \
55954e73c781SAlexander Graf    $source_path/pc-bios/u-boot.* \
5596753d11f2SRichard Henderson    $source_path/pc-bios/palcode-*
5597753d11f2SRichard Hendersondo
55987ea78b74SJan Kiszka    FILES="$FILES pc-bios/`basename $bios_file`"
55997ea78b74SJan Kiszkadone
5600c2304b52SMarcel Apfelbaumfor test_file in `find $source_path/tests/acpi-test-data -type f`
5601c2304b52SMarcel Apfelbaumdo
5602c2304b52SMarcel Apfelbaum    FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5603c2304b52SMarcel Apfelbaumdone
5604d1807a4fSPaolo Bonzinimkdir -p $DIRS
56057d13299dSbellardfor f in $FILES ; do
5606cab00a5aSMichael S. Tsirkin    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5607f9245e10SPeter Maydell        symlink "$source_path/$f" "$f"
5608f9245e10SPeter Maydell    fi
56097d13299dSbellarddone
56101ad2134fSPaul Brook
5611c34ebfdcSAnthony Liguori# temporary config to build submodules
56122d9f27d2SAnthony Liguorifor rom in seabios vgabios ; do
5613c34ebfdcSAnthony Liguori    config_mak=roms/$rom/config.mak
561437116c89SStefan Weil    echo "# Automatically generated by configure - do not modify" > $config_mak
5615c34ebfdcSAnthony Liguori    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
56163dd46c78SBlue Swirl    echo "AS=$as" >> $config_mak
5617c34ebfdcSAnthony Liguori    echo "CC=$cc" >> $config_mak
5618c34ebfdcSAnthony Liguori    echo "BCC=bcc" >> $config_mak
56193dd46c78SBlue Swirl    echo "CPP=$cpp" >> $config_mak
5620c34ebfdcSAnthony Liguori    echo "OBJCOPY=objcopy" >> $config_mak
5621a31a8642SMichael S. Tsirkin    echo "IASL=$iasl" >> $config_mak
5622c34ebfdcSAnthony Liguori    echo "LD=$ld" >> $config_mak
5623c34ebfdcSAnthony Liguoridone
5624c34ebfdcSAnthony Liguori
562576c7560aSMax Reitz# set up qemu-iotests in this build directory
562676c7560aSMax Reitziotests_common_env="tests/qemu-iotests/common.env"
562776c7560aSMax Reitziotests_check="tests/qemu-iotests/check"
562876c7560aSMax Reitz
562976c7560aSMax Reitzecho "# Automatically generated by configure - do not modify" > "$iotests_common_env"
563076c7560aSMax Reitzecho >> "$iotests_common_env"
563176c7560aSMax Reitzecho "export PYTHON='$python'" >> "$iotests_common_env"
563276c7560aSMax Reitz
563376c7560aSMax Reitzif [ ! -e "$iotests_check" ]; then
563476c7560aSMax Reitz    symlink "$source_path/$iotests_check" "$iotests_check"
563576c7560aSMax Reitzfi
563676c7560aSMax Reitz
5637dc655404SMichael S. Tsirkin# Save the configure command line for later reuse.
5638dc655404SMichael S. Tsirkincat <<EOD >config.status
5639dc655404SMichael S. Tsirkin#!/bin/sh
5640dc655404SMichael S. Tsirkin# Generated by configure.
5641dc655404SMichael S. Tsirkin# Run this file to recreate the current configuration.
5642dc655404SMichael S. Tsirkin# Compiler output produced by configure, useful for debugging
5643dc655404SMichael S. Tsirkin# configure, is in config.log if it exists.
5644dc655404SMichael S. TsirkinEOD
5645dc655404SMichael S. Tsirkinprintf "exec" >>config.status
5646dc655404SMichael S. Tsirkinprintf " '%s'" "$0" "$@" >>config.status
5647dc655404SMichael S. Tsirkinecho >>config.status
5648dc655404SMichael S. Tsirkinchmod +x config.status
5649dc655404SMichael S. Tsirkin
56508cd05ab6SPeter Maydellrm -r "$TMPDIR1"
5651