xref: /openbmc/qemu/configure (revision e6cd4bb5)
1#!/bin/sh
2#
3# qemu configure script (c) 2003 Fabrice Bellard
4#
5
6# Unset some variables known to interfere with behavior of common tools,
7# just as autoconf does.
8CLICOLOR_FORCE= GREP_OPTIONS=
9unset CLICOLOR_FORCE GREP_OPTIONS
10
11# Don't allow CCACHE, if present, to use cached results of compile tests!
12export CCACHE_RECACHE=yes
13
14# Temporary directory used for files created while
15# configure runs. Since it is in the build directory
16# we can safely blow away any previous version of it
17# (and we need not jump through hoops to try to delete
18# it when configure exits.)
19TMPDIR1="config-temp"
20rm -rf "${TMPDIR1}"
21mkdir -p "${TMPDIR1}"
22if [ $? -ne 0 ]; then
23    echo "ERROR: failed to create temporary directory"
24    exit 1
25fi
26
27TMPB="qemu-conf"
28TMPC="${TMPDIR1}/${TMPB}.c"
29TMPO="${TMPDIR1}/${TMPB}.o"
30TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31TMPE="${TMPDIR1}/${TMPB}.exe"
32TMPMO="${TMPDIR1}/${TMPB}.mo"
33
34rm -f config.log
35
36# Print a helpful header at the top of config.log
37echo "# QEMU configure log $(date)" >> config.log
38printf "# Configured with:" >> config.log
39printf " '%s'" "$0" "$@" >> config.log
40echo >> config.log
41echo "#" >> config.log
42
43print_error() {
44    (echo
45    echo "ERROR: $1"
46    while test -n "$2"; do
47        echo "       $2"
48        shift
49    done
50    echo) >&2
51}
52
53error_exit() {
54    print_error "$@"
55    exit 1
56}
57
58do_compiler() {
59    # Run the compiler, capturing its output to the log. First argument
60    # is compiler binary to execute.
61    local compiler="$1"
62    shift
63    if test -n "$BASH_VERSION"; then eval '
64        echo >>config.log "
65funcs: ${FUNCNAME[*]}
66lines: ${BASH_LINENO[*]}"
67    '; fi
68    echo $compiler "$@" >> config.log
69    $compiler "$@" >> config.log 2>&1 || return $?
70    # Test passed. If this is an --enable-werror build, rerun
71    # the test with -Werror and bail out if it fails. This
72    # makes warning-generating-errors in configure test code
73    # obvious to developers.
74    if test "$werror" != "yes"; then
75        return 0
76    fi
77    # Don't bother rerunning the compile if we were already using -Werror
78    case "$*" in
79        *-Werror*)
80           return 0
81        ;;
82    esac
83    echo $compiler -Werror "$@" >> config.log
84    $compiler -Werror "$@" >> config.log 2>&1 && return $?
85    error_exit "configure test passed without -Werror but failed with -Werror." \
86        "This is probably a bug in the configure script. The failing command" \
87        "will be at the bottom of config.log." \
88        "You can run configure with --disable-werror to bypass this check."
89}
90
91do_cc() {
92    do_compiler "$cc" "$@"
93}
94
95do_cxx() {
96    do_compiler "$cxx" "$@"
97}
98
99update_cxxflags() {
100    # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
101    # options which some versions of GCC's C++ compiler complain about
102    # because they only make sense for C programs.
103    QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
104
105    for arg in $QEMU_CFLAGS; do
106        case $arg in
107            -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
108            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
109                ;;
110            *)
111                QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
112                ;;
113        esac
114    done
115}
116
117compile_object() {
118  local_cflags="$1"
119  do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
120}
121
122compile_prog() {
123  local_cflags="$1"
124  local_ldflags="$2"
125  do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
126}
127
128# symbolically link $1 to $2.  Portable version of "ln -sf".
129symlink() {
130  rm -rf "$2"
131  mkdir -p "$(dirname "$2")"
132  ln -s "$1" "$2"
133}
134
135# check whether a command is available to this shell (may be either an
136# executable or a builtin)
137has() {
138    type "$1" >/dev/null 2>&1
139}
140
141# search for an executable in PATH
142path_of() {
143    local_command="$1"
144    local_ifs="$IFS"
145    local_dir=""
146
147    # pathname has a dir component?
148    if [ "${local_command#*/}" != "$local_command" ]; then
149        if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
150            echo "$local_command"
151            return 0
152        fi
153    fi
154    if [ -z "$local_command" ]; then
155        return 1
156    fi
157
158    IFS=:
159    for local_dir in $PATH; do
160        if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
161            echo "$local_dir/$local_command"
162            IFS="${local_ifs:-$(printf ' \t\n')}"
163            return 0
164        fi
165    done
166    # not found
167    IFS="${local_ifs:-$(printf ' \t\n')}"
168    return 1
169}
170
171have_backend () {
172    echo "$trace_backends" | grep "$1" >/dev/null
173}
174
175glob() {
176    eval test -z '"${1#'"$2"'}"'
177}
178
179supported_hax_target() {
180    test "$hax" = "yes" || return 1
181    glob "$1" "*-softmmu" || return 1
182    case "${1%-softmmu}" in
183        i386|x86_64)
184            return 0
185        ;;
186    esac
187    return 1
188}
189
190supported_kvm_target() {
191    test "$kvm" = "yes" || return 1
192    glob "$1" "*-softmmu" || return 1
193    case "${1%-softmmu}:$cpu" in
194        arm:arm | aarch64:aarch64 | \
195        i386:i386 | i386:x86_64 | i386:x32 | \
196        x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
197        mips:mips | mipsel:mips | \
198        ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | \
199        s390x:s390x)
200            return 0
201        ;;
202    esac
203    return 1
204}
205
206supported_xen_target() {
207    test "$xen" = "yes" || return 1
208    glob "$1" "*-softmmu" || return 1
209    # Only i386 and x86_64 provide the xenpv machine.
210    case "${1%-softmmu}" in
211        i386|x86_64)
212            return 0
213        ;;
214    esac
215    return 1
216}
217
218supported_hvf_target() {
219    test "$hvf" = "yes" || return 1
220    glob "$1" "*-softmmu" || return 1
221    case "${1%-softmmu}" in
222        x86_64)
223            return 0
224        ;;
225    esac
226    return 1
227}
228
229supported_whpx_target() {
230    test "$whpx" = "yes" || return 1
231    glob "$1" "*-softmmu" || return 1
232    case "${1%-softmmu}" in
233        i386|x86_64)
234            return 0
235        ;;
236    esac
237    return 1
238}
239
240supported_target() {
241    case "$1" in
242        *-softmmu)
243            ;;
244        *-linux-user)
245            if test "$linux" != "yes"; then
246                print_error "Target '$target' is only available on a Linux host"
247                return 1
248            fi
249            ;;
250        *-bsd-user)
251            if test "$bsd" != "yes"; then
252                print_error "Target '$target' is only available on a BSD host"
253                return 1
254            fi
255            ;;
256        *)
257            print_error "Invalid target name '$target'"
258            return 1
259            ;;
260    esac
261    test "$tcg" = "yes" && return 0
262    supported_kvm_target "$1" && return 0
263    supported_xen_target "$1" && return 0
264    supported_hax_target "$1" && return 0
265    supported_hvf_target "$1" && return 0
266    supported_whpx_target "$1" && return 0
267    print_error "TCG disabled, but hardware accelerator not available for '$target'"
268    return 1
269}
270
271
272ld_has() {
273    $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
274}
275
276# default parameters
277source_path=$(dirname "$0")
278cpu=""
279iasl="iasl"
280interp_prefix="/usr/gnemul/qemu-%M"
281static="no"
282cross_prefix=""
283audio_drv_list=""
284block_drv_rw_whitelist=""
285block_drv_ro_whitelist=""
286host_cc="cc"
287libs_softmmu=""
288libs_tools=""
289audio_pt_int=""
290audio_win_int=""
291libs_qga=""
292debug_info="yes"
293stack_protector=""
294
295if test -e "$source_path/.git"
296then
297    git_update=yes
298    git_submodules="ui/keycodemapdb"
299    git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
300    git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
301else
302    git_update=no
303    git_submodules=""
304
305    if ! test -f "$source_path/ui/keycodemapdb/README"
306    then
307        echo
308        echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
309        echo
310        echo "This is not a GIT checkout but module content appears to"
311        echo "be missing. Do not use 'git archive' or GitHub download links"
312        echo "to acquire QEMU source archives. Non-GIT builds are only"
313        echo "supported with source archives linked from:"
314        echo
315        echo "  https://www.qemu.org/download/"
316        echo
317        echo "Developers working with GIT can use scripts/archive-source.sh"
318        echo "if they need to create valid source archives."
319        echo
320        exit 1
321    fi
322fi
323git="git"
324
325# Don't accept a target_list environment variable.
326unset target_list
327
328# Default value for a variable defining feature "foo".
329#  * foo="no"  feature will only be used if --enable-foo arg is given
330#  * foo=""    feature will be searched for, and if found, will be used
331#              unless --disable-foo is given
332#  * foo="yes" this value will only be set by --enable-foo flag.
333#              feature will searched for,
334#              if not found, configure exits with error
335#
336# Always add --enable-foo and --disable-foo command line args.
337# Distributions want to ensure that several features are compiled in, and it
338# is impossible without a --enable-foo that exits if a feature is not found.
339
340bluez=""
341brlapi=""
342curl=""
343curses=""
344docs=""
345fdt=""
346netmap="no"
347sdl=""
348sdlabi=""
349virtfs=""
350mpath=""
351vnc="yes"
352sparse="no"
353vde=""
354vnc_sasl=""
355vnc_jpeg=""
356vnc_png=""
357xkbcommon=""
358xen=""
359xen_ctrl_version=""
360xen_pv_domain_build="no"
361xen_pci_passthrough=""
362linux_aio=""
363cap_ng=""
364attr=""
365libattr=""
366xfs=""
367tcg="yes"
368membarrier=""
369vhost_net="no"
370vhost_crypto="no"
371vhost_scsi="no"
372vhost_vsock="no"
373vhost_user=""
374kvm="no"
375hax="no"
376hvf="no"
377whpx="no"
378rdma=""
379pvrdma=""
380gprof="no"
381debug_tcg="no"
382debug="no"
383sanitizers="no"
384fortify_source=""
385strip_opt="yes"
386tcg_interpreter="no"
387bigendian="no"
388mingw32="no"
389gcov="no"
390gcov_tool="gcov"
391EXESUF=""
392DSOSUF=".so"
393LDFLAGS_SHARED="-shared"
394modules="no"
395prefix="/usr/local"
396mandir="\${prefix}/share/man"
397datadir="\${prefix}/share"
398firmwarepath="\${prefix}/share/qemu-firmware"
399qemu_docdir="\${prefix}/share/doc/qemu"
400bindir="\${prefix}/bin"
401libdir="\${prefix}/lib"
402libexecdir="\${prefix}/libexec"
403includedir="\${prefix}/include"
404sysconfdir="\${prefix}/etc"
405local_statedir="\${prefix}/var"
406confsuffix="/qemu"
407slirp="yes"
408oss_lib=""
409bsd="no"
410linux="no"
411solaris="no"
412profiler="no"
413cocoa="no"
414softmmu="yes"
415linux_user="no"
416bsd_user="no"
417blobs="yes"
418pkgversion=""
419pie=""
420qom_cast_debug="yes"
421trace_backends="log"
422trace_file="trace"
423spice=""
424rbd=""
425smartcard=""
426libusb=""
427usb_redir=""
428opengl=""
429opengl_dmabuf="no"
430cpuid_h="no"
431avx2_opt="no"
432zlib="yes"
433capstone=""
434lzo=""
435snappy=""
436bzip2=""
437guest_agent=""
438guest_agent_with_vss="no"
439guest_agent_ntddscsi="no"
440guest_agent_msi=""
441vss_win32_sdk=""
442win_sdk="no"
443want_tools="yes"
444libiscsi=""
445libnfs=""
446coroutine=""
447coroutine_pool=""
448debug_stack_usage="no"
449crypto_afalg="no"
450seccomp=""
451glusterfs=""
452glusterfs_xlator_opt="no"
453glusterfs_discard="no"
454glusterfs_fallocate="no"
455glusterfs_zerofill="no"
456gtk=""
457gtk_gl="no"
458tls_priority="NORMAL"
459gnutls=""
460gnutls_rnd=""
461nettle=""
462nettle_kdf="no"
463gcrypt=""
464gcrypt_hmac="no"
465gcrypt_kdf="no"
466vte=""
467virglrenderer=""
468tpm="yes"
469libssh2=""
470live_block_migration="yes"
471numa=""
472tcmalloc="no"
473jemalloc="no"
474replication="yes"
475vxhs=""
476libxml2=""
477docker="no"
478debug_mutex="no"
479libpmem=""
480
481# cross compilers defaults, can be overridden with --cross-cc-ARCH
482cross_cc_aarch64="aarch64-linux-gnu-gcc"
483cross_cc_aarch64_be="$cross_cc_aarch64"
484cross_cc_cflags_aarch64_be="-mbig-endian"
485cross_cc_arm="arm-linux-gnueabihf-gcc"
486cross_cc_cflags_armeb="-mbig-endian"
487cross_cc_i386="i386-pc-linux-gnu-gcc"
488cross_cc_cflags_i386=""
489cross_cc_powerpc="powerpc-linux-gnu-gcc"
490cross_cc_powerpc="powerpc-linux-gnu-gcc"
491
492enabled_cross_compilers=""
493
494supported_cpu="no"
495supported_os="no"
496bogus_os="no"
497malloc_trim=""
498
499# parse CC options first
500for opt do
501  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
502  case "$opt" in
503  --cross-prefix=*) cross_prefix="$optarg"
504  ;;
505  --cc=*) CC="$optarg"
506  ;;
507  --cxx=*) CXX="$optarg"
508  ;;
509  --source-path=*) source_path="$optarg"
510  ;;
511  --cpu=*) cpu="$optarg"
512  ;;
513  --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
514  ;;
515  --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
516  ;;
517  --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
518                     EXTRA_LDFLAGS="$optarg"
519  ;;
520  --enable-debug-info) debug_info="yes"
521  ;;
522  --disable-debug-info) debug_info="no"
523  ;;
524  --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
525  ;;
526  --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
527                      eval "cross_cc_cflags_${cc_arch}=\$optarg"
528  ;;
529  --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
530                eval "cross_cc_${cc_arch}=\$optarg"
531  ;;
532  esac
533done
534# OS specific
535# Using uname is really, really broken.  Once we have the right set of checks
536# we can eliminate its usage altogether.
537
538# Preferred compiler:
539#  ${CC} (if set)
540#  ${cross_prefix}gcc (if cross-prefix specified)
541#  system compiler
542if test -z "${CC}${cross_prefix}"; then
543  cc="$host_cc"
544else
545  cc="${CC-${cross_prefix}gcc}"
546fi
547
548if test -z "${CXX}${cross_prefix}"; then
549  cxx="c++"
550else
551  cxx="${CXX-${cross_prefix}g++}"
552fi
553
554ar="${AR-${cross_prefix}ar}"
555as="${AS-${cross_prefix}as}"
556ccas="${CCAS-$cc}"
557cpp="${CPP-$cc -E}"
558objcopy="${OBJCOPY-${cross_prefix}objcopy}"
559ld="${LD-${cross_prefix}ld}"
560ranlib="${RANLIB-${cross_prefix}ranlib}"
561nm="${NM-${cross_prefix}nm}"
562strip="${STRIP-${cross_prefix}strip}"
563windres="${WINDRES-${cross_prefix}windres}"
564pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
565query_pkg_config() {
566    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
567}
568pkg_config=query_pkg_config
569sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
570sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
571
572# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
573ARFLAGS="${ARFLAGS-rv}"
574
575# default flags for all hosts
576# We use -fwrapv to tell the compiler that we require a C dialect where
577# left shift of signed integers is well defined and has the expected
578# 2s-complement style results. (Both clang and gcc agree that it
579# provides these semantics.)
580QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
581QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
582QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
583QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
584QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
585if test "$debug_info" = "yes"; then
586    CFLAGS="-g $CFLAGS"
587    LDFLAGS="-g $LDFLAGS"
588fi
589
590# make source path absolute
591source_path=$(cd "$source_path"; pwd)
592
593# running configure in the source tree?
594# we know that's the case if configure is there.
595if test -f "./configure"; then
596    pwd_is_source_path="y"
597else
598    pwd_is_source_path="n"
599fi
600
601check_define() {
602cat > $TMPC <<EOF
603#if !defined($1)
604#error $1 not defined
605#endif
606int main(void) { return 0; }
607EOF
608  compile_object
609}
610
611check_include() {
612cat > $TMPC <<EOF
613#include <$1>
614int main(void) { return 0; }
615EOF
616  compile_object
617}
618
619write_c_skeleton() {
620    cat > $TMPC <<EOF
621int main(void) { return 0; }
622EOF
623}
624
625if check_define __linux__ ; then
626  targetos="Linux"
627elif check_define _WIN32 ; then
628  targetos='MINGW32'
629elif check_define __OpenBSD__ ; then
630  targetos='OpenBSD'
631elif check_define __sun__ ; then
632  targetos='SunOS'
633elif check_define __HAIKU__ ; then
634  targetos='Haiku'
635elif check_define __FreeBSD__ ; then
636  targetos='FreeBSD'
637elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
638  targetos='GNU/kFreeBSD'
639elif check_define __DragonFly__ ; then
640  targetos='DragonFly'
641elif check_define __NetBSD__; then
642  targetos='NetBSD'
643elif check_define __APPLE__; then
644  targetos='Darwin'
645else
646  # This is a fatal error, but don't report it yet, because we
647  # might be going to just print the --help text, or it might
648  # be the result of a missing compiler.
649  targetos='bogus'
650  bogus_os='yes'
651fi
652
653# Some host OSes need non-standard checks for which CPU to use.
654# Note that these checks are broken for cross-compilation: if you're
655# cross-compiling to one of these OSes then you'll need to specify
656# the correct CPU with the --cpu option.
657case $targetos in
658Darwin)
659  # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
660  # run 64-bit userspace code.
661  # If the user didn't specify a CPU explicitly and the kernel says this is
662  # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
663  if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
664    cpu="x86_64"
665  fi
666  ;;
667SunOS)
668  # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
669  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
670    cpu="x86_64"
671  fi
672esac
673
674if test ! -z "$cpu" ; then
675  # command line argument
676  :
677elif check_define __i386__ ; then
678  cpu="i386"
679elif check_define __x86_64__ ; then
680  if check_define __ILP32__ ; then
681    cpu="x32"
682  else
683    cpu="x86_64"
684  fi
685elif check_define __sparc__ ; then
686  if check_define __arch64__ ; then
687    cpu="sparc64"
688  else
689    cpu="sparc"
690  fi
691elif check_define _ARCH_PPC ; then
692  if check_define _ARCH_PPC64 ; then
693    cpu="ppc64"
694  else
695    cpu="ppc"
696  fi
697elif check_define __mips__ ; then
698  cpu="mips"
699elif check_define __s390__ ; then
700  if check_define __s390x__ ; then
701    cpu="s390x"
702  else
703    cpu="s390"
704  fi
705elif check_define __arm__ ; then
706  cpu="arm"
707elif check_define __aarch64__ ; then
708  cpu="aarch64"
709else
710  cpu=$(uname -m)
711fi
712
713ARCH=
714# Normalise host CPU name and set ARCH.
715# Note that this case should only have supported host CPUs, not guests.
716case "$cpu" in
717  ppc|ppc64|s390|s390x|sparc64|x32)
718    cpu="$cpu"
719    supported_cpu="yes"
720    eval "cross_cc_${cpu}=\$host_cc"
721  ;;
722  i386|i486|i586|i686|i86pc|BePC)
723    cpu="i386"
724    supported_cpu="yes"
725    cross_cc_i386=$host_cc
726  ;;
727  x86_64|amd64)
728    cpu="x86_64"
729    supported_cpu="yes"
730    cross_cc_x86_64=$host_cc
731  ;;
732  armv*b|armv*l|arm)
733    cpu="arm"
734    supported_cpu="yes"
735    cross_cc_arm=$host_cc
736  ;;
737  aarch64)
738    cpu="aarch64"
739    supported_cpu="yes"
740    cross_cc_aarch64=$host_cc
741  ;;
742  mips*)
743    cpu="mips"
744    supported_cpu="yes"
745    cross_cc_mips=$host_cc
746  ;;
747  sparc|sun4[cdmuv])
748    cpu="sparc"
749    supported_cpu="yes"
750    cross_cc_sparc=$host_cc
751  ;;
752  *)
753    # This will result in either an error or falling back to TCI later
754    ARCH=unknown
755  ;;
756esac
757if test -z "$ARCH"; then
758  ARCH="$cpu"
759fi
760
761# OS specific
762
763# host *BSD for user mode
764HOST_VARIANT_DIR=""
765
766case $targetos in
767MINGW32*)
768  mingw32="yes"
769  hax="yes"
770  audio_possible_drivers="dsound sdl"
771  if check_include dsound.h; then
772    audio_drv_list="dsound"
773  else
774    audio_drv_list=""
775  fi
776  supported_os="yes"
777;;
778GNU/kFreeBSD)
779  bsd="yes"
780  audio_drv_list="oss"
781  audio_possible_drivers="oss sdl pa"
782;;
783FreeBSD)
784  bsd="yes"
785  make="${MAKE-gmake}"
786  audio_drv_list="oss"
787  audio_possible_drivers="oss sdl pa"
788  # needed for kinfo_getvmmap(3) in libutil.h
789  LIBS="-lutil $LIBS"
790  # needed for kinfo_getproc
791  libs_qga="-lutil $libs_qga"
792  netmap=""  # enable netmap autodetect
793  HOST_VARIANT_DIR="freebsd"
794  supported_os="yes"
795;;
796DragonFly)
797  bsd="yes"
798  make="${MAKE-gmake}"
799  audio_drv_list="oss"
800  audio_possible_drivers="oss sdl pa"
801  HOST_VARIANT_DIR="dragonfly"
802;;
803NetBSD)
804  bsd="yes"
805  make="${MAKE-gmake}"
806  audio_drv_list="oss"
807  audio_possible_drivers="oss sdl"
808  oss_lib="-lossaudio"
809  HOST_VARIANT_DIR="netbsd"
810  supported_os="yes"
811;;
812OpenBSD)
813  bsd="yes"
814  make="${MAKE-gmake}"
815  audio_drv_list="sdl"
816  audio_possible_drivers="sdl"
817  HOST_VARIANT_DIR="openbsd"
818  supported_os="yes"
819;;
820Darwin)
821  bsd="yes"
822  darwin="yes"
823  hax="yes"
824  hvf="yes"
825  LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
826  if [ "$cpu" = "x86_64" ] ; then
827    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
828    LDFLAGS="-arch x86_64 $LDFLAGS"
829  fi
830  cocoa="yes"
831  audio_drv_list="coreaudio"
832  audio_possible_drivers="coreaudio sdl"
833  LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
834  libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
835  # Disable attempts to use ObjectiveC features in os/object.h since they
836  # won't work when we're compiling with gcc as a C compiler.
837  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
838  HOST_VARIANT_DIR="darwin"
839  supported_os="yes"
840;;
841SunOS)
842  solaris="yes"
843  make="${MAKE-gmake}"
844  install="${INSTALL-ginstall}"
845  smbd="${SMBD-/usr/sfw/sbin/smbd}"
846  if test -f /usr/include/sys/soundcard.h ; then
847    audio_drv_list="oss"
848  fi
849  audio_possible_drivers="oss sdl"
850# needed for CMSG_ macros in sys/socket.h
851  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
852# needed for TIOCWIN* defines in termios.h
853  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
854  QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
855  solarisnetlibs="-lsocket -lnsl -lresolv"
856  LIBS="$solarisnetlibs $LIBS"
857  libs_qga="$solarisnetlibs $libs_qga"
858;;
859Haiku)
860  haiku="yes"
861  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
862  LIBS="-lposix_error_mapper -lnetwork $LIBS"
863;;
864Linux)
865  audio_drv_list="oss"
866  audio_possible_drivers="oss alsa sdl pa"
867  linux="yes"
868  linux_user="yes"
869  kvm="yes"
870  vhost_net="yes"
871  vhost_crypto="yes"
872  vhost_scsi="yes"
873  vhost_vsock="yes"
874  QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
875  supported_os="yes"
876;;
877esac
878
879if [ "$bsd" = "yes" ] ; then
880  if [ "$darwin" != "yes" ] ; then
881    bsd_user="yes"
882  fi
883fi
884
885: ${make=${MAKE-make}}
886: ${install=${INSTALL-install}}
887: ${python=${PYTHON-python}}
888: ${smbd=${SMBD-/usr/sbin/smbd}}
889
890# Default objcc to clang if available, otherwise use CC
891if has clang; then
892  objcc=clang
893else
894  objcc="$cc"
895fi
896
897if test "$mingw32" = "yes" ; then
898  EXESUF=".exe"
899  DSOSUF=".dll"
900  QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
901  # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
902  QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
903  # MinGW needs -mthreads for TLS and macro _MT.
904  QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
905  LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
906  write_c_skeleton;
907  if compile_prog "" "-liberty" ; then
908    LIBS="-liberty $LIBS"
909  fi
910  prefix="c:/Program Files/QEMU"
911  mandir="\${prefix}"
912  datadir="\${prefix}"
913  qemu_docdir="\${prefix}"
914  bindir="\${prefix}"
915  sysconfdir="\${prefix}"
916  local_statedir=
917  confsuffix=""
918  libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
919fi
920
921werror=""
922
923for opt do
924  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
925  case "$opt" in
926  --help|-h) show_help=yes
927  ;;
928  --version|-V) exec cat $source_path/VERSION
929  ;;
930  --prefix=*) prefix="$optarg"
931  ;;
932  --interp-prefix=*) interp_prefix="$optarg"
933  ;;
934  --source-path=*)
935  ;;
936  --cross-prefix=*)
937  ;;
938  --cc=*)
939  ;;
940  --host-cc=*) host_cc="$optarg"
941  ;;
942  --cxx=*)
943  ;;
944  --iasl=*) iasl="$optarg"
945  ;;
946  --objcc=*) objcc="$optarg"
947  ;;
948  --make=*) make="$optarg"
949  ;;
950  --install=*) install="$optarg"
951  ;;
952  --python=*) python="$optarg"
953  ;;
954  --gcov=*) gcov_tool="$optarg"
955  ;;
956  --smbd=*) smbd="$optarg"
957  ;;
958  --extra-cflags=*)
959  ;;
960  --extra-cxxflags=*)
961  ;;
962  --extra-ldflags=*)
963  ;;
964  --enable-debug-info)
965  ;;
966  --disable-debug-info)
967  ;;
968  --cross-cc-*)
969  ;;
970  --enable-modules)
971      modules="yes"
972  ;;
973  --disable-modules)
974      modules="no"
975  ;;
976  --cpu=*)
977  ;;
978  --target-list=*) target_list="$optarg"
979  ;;
980  --enable-trace-backends=*) trace_backends="$optarg"
981  ;;
982  # XXX: backwards compatibility
983  --enable-trace-backend=*) trace_backends="$optarg"
984  ;;
985  --with-trace-file=*) trace_file="$optarg"
986  ;;
987  --enable-gprof) gprof="yes"
988  ;;
989  --enable-gcov) gcov="yes"
990  ;;
991  --static)
992    static="yes"
993    LDFLAGS="-static $LDFLAGS"
994    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
995  ;;
996  --mandir=*) mandir="$optarg"
997  ;;
998  --bindir=*) bindir="$optarg"
999  ;;
1000  --libdir=*) libdir="$optarg"
1001  ;;
1002  --libexecdir=*) libexecdir="$optarg"
1003  ;;
1004  --includedir=*) includedir="$optarg"
1005  ;;
1006  --datadir=*) datadir="$optarg"
1007  ;;
1008  --with-confsuffix=*) confsuffix="$optarg"
1009  ;;
1010  --docdir=*) qemu_docdir="$optarg"
1011  ;;
1012  --sysconfdir=*) sysconfdir="$optarg"
1013  ;;
1014  --localstatedir=*) local_statedir="$optarg"
1015  ;;
1016  --firmwarepath=*) firmwarepath="$optarg"
1017  ;;
1018  --host=*|--build=*|\
1019  --disable-dependency-tracking|\
1020  --sbindir=*|--sharedstatedir=*|\
1021  --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1022  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1023    # These switches are silently ignored, for compatibility with
1024    # autoconf-generated configure scripts. This allows QEMU's
1025    # configure to be used by RPM and similar macros that set
1026    # lots of directory switches by default.
1027  ;;
1028  --disable-sdl) sdl="no"
1029  ;;
1030  --enable-sdl) sdl="yes"
1031  ;;
1032  --with-sdlabi=*) sdlabi="$optarg"
1033  ;;
1034  --disable-qom-cast-debug) qom_cast_debug="no"
1035  ;;
1036  --enable-qom-cast-debug) qom_cast_debug="yes"
1037  ;;
1038  --disable-virtfs) virtfs="no"
1039  ;;
1040  --enable-virtfs) virtfs="yes"
1041  ;;
1042  --disable-mpath) mpath="no"
1043  ;;
1044  --enable-mpath) mpath="yes"
1045  ;;
1046  --disable-vnc) vnc="no"
1047  ;;
1048  --enable-vnc) vnc="yes"
1049  ;;
1050  --oss-lib=*) oss_lib="$optarg"
1051  ;;
1052  --audio-drv-list=*) audio_drv_list="$optarg"
1053  ;;
1054  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1055  ;;
1056  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1057  ;;
1058  --enable-debug-tcg) debug_tcg="yes"
1059  ;;
1060  --disable-debug-tcg) debug_tcg="no"
1061  ;;
1062  --enable-debug)
1063      # Enable debugging options that aren't excessively noisy
1064      debug_tcg="yes"
1065      debug_mutex="yes"
1066      debug="yes"
1067      strip_opt="no"
1068      fortify_source="no"
1069  ;;
1070  --enable-sanitizers) sanitizers="yes"
1071  ;;
1072  --disable-sanitizers) sanitizers="no"
1073  ;;
1074  --enable-sparse) sparse="yes"
1075  ;;
1076  --disable-sparse) sparse="no"
1077  ;;
1078  --disable-strip) strip_opt="no"
1079  ;;
1080  --disable-vnc-sasl) vnc_sasl="no"
1081  ;;
1082  --enable-vnc-sasl) vnc_sasl="yes"
1083  ;;
1084  --disable-vnc-jpeg) vnc_jpeg="no"
1085  ;;
1086  --enable-vnc-jpeg) vnc_jpeg="yes"
1087  ;;
1088  --disable-vnc-png) vnc_png="no"
1089  ;;
1090  --enable-vnc-png) vnc_png="yes"
1091  ;;
1092  --disable-slirp) slirp="no"
1093  ;;
1094  --disable-vde) vde="no"
1095  ;;
1096  --enable-vde) vde="yes"
1097  ;;
1098  --disable-netmap) netmap="no"
1099  ;;
1100  --enable-netmap) netmap="yes"
1101  ;;
1102  --disable-xen) xen="no"
1103  ;;
1104  --enable-xen) xen="yes"
1105  ;;
1106  --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1107  ;;
1108  --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1109  ;;
1110  --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1111  ;;
1112  --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1113  ;;
1114  --disable-brlapi) brlapi="no"
1115  ;;
1116  --enable-brlapi) brlapi="yes"
1117  ;;
1118  --disable-bluez) bluez="no"
1119  ;;
1120  --enable-bluez) bluez="yes"
1121  ;;
1122  --disable-kvm) kvm="no"
1123  ;;
1124  --enable-kvm) kvm="yes"
1125  ;;
1126  --disable-hax) hax="no"
1127  ;;
1128  --enable-hax) hax="yes"
1129  ;;
1130  --disable-hvf) hvf="no"
1131  ;;
1132  --enable-hvf) hvf="yes"
1133  ;;
1134  --disable-whpx) whpx="no"
1135  ;;
1136  --enable-whpx) whpx="yes"
1137  ;;
1138  --disable-tcg-interpreter) tcg_interpreter="no"
1139  ;;
1140  --enable-tcg-interpreter) tcg_interpreter="yes"
1141  ;;
1142  --disable-cap-ng)  cap_ng="no"
1143  ;;
1144  --enable-cap-ng) cap_ng="yes"
1145  ;;
1146  --disable-tcg) tcg="no"
1147  ;;
1148  --enable-tcg) tcg="yes"
1149  ;;
1150  --disable-malloc-trim) malloc_trim="no"
1151  ;;
1152  --enable-malloc-trim) malloc_trim="yes"
1153  ;;
1154  --disable-spice) spice="no"
1155  ;;
1156  --enable-spice) spice="yes"
1157  ;;
1158  --disable-libiscsi) libiscsi="no"
1159  ;;
1160  --enable-libiscsi) libiscsi="yes"
1161  ;;
1162  --disable-libnfs) libnfs="no"
1163  ;;
1164  --enable-libnfs) libnfs="yes"
1165  ;;
1166  --enable-profiler) profiler="yes"
1167  ;;
1168  --disable-cocoa) cocoa="no"
1169  ;;
1170  --enable-cocoa)
1171      cocoa="yes" ;
1172      audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1173  ;;
1174  --disable-system) softmmu="no"
1175  ;;
1176  --enable-system) softmmu="yes"
1177  ;;
1178  --disable-user)
1179      linux_user="no" ;
1180      bsd_user="no" ;
1181  ;;
1182  --enable-user) ;;
1183  --disable-linux-user) linux_user="no"
1184  ;;
1185  --enable-linux-user) linux_user="yes"
1186  ;;
1187  --disable-bsd-user) bsd_user="no"
1188  ;;
1189  --enable-bsd-user) bsd_user="yes"
1190  ;;
1191  --enable-pie) pie="yes"
1192  ;;
1193  --disable-pie) pie="no"
1194  ;;
1195  --enable-werror) werror="yes"
1196  ;;
1197  --disable-werror) werror="no"
1198  ;;
1199  --enable-stack-protector) stack_protector="yes"
1200  ;;
1201  --disable-stack-protector) stack_protector="no"
1202  ;;
1203  --disable-curses) curses="no"
1204  ;;
1205  --enable-curses) curses="yes"
1206  ;;
1207  --disable-curl) curl="no"
1208  ;;
1209  --enable-curl) curl="yes"
1210  ;;
1211  --disable-fdt) fdt="no"
1212  ;;
1213  --enable-fdt) fdt="yes"
1214  ;;
1215  --disable-linux-aio) linux_aio="no"
1216  ;;
1217  --enable-linux-aio) linux_aio="yes"
1218  ;;
1219  --disable-attr) attr="no"
1220  ;;
1221  --enable-attr) attr="yes"
1222  ;;
1223  --disable-membarrier) membarrier="no"
1224  ;;
1225  --enable-membarrier) membarrier="yes"
1226  ;;
1227  --disable-blobs) blobs="no"
1228  ;;
1229  --with-pkgversion=*) pkgversion="$optarg"
1230  ;;
1231  --with-coroutine=*) coroutine="$optarg"
1232  ;;
1233  --disable-coroutine-pool) coroutine_pool="no"
1234  ;;
1235  --enable-coroutine-pool) coroutine_pool="yes"
1236  ;;
1237  --enable-debug-stack-usage) debug_stack_usage="yes"
1238  ;;
1239  --enable-crypto-afalg) crypto_afalg="yes"
1240  ;;
1241  --disable-crypto-afalg) crypto_afalg="no"
1242  ;;
1243  --disable-docs) docs="no"
1244  ;;
1245  --enable-docs) docs="yes"
1246  ;;
1247  --disable-vhost-net) vhost_net="no"
1248  ;;
1249  --enable-vhost-net) vhost_net="yes"
1250  ;;
1251  --disable-vhost-crypto) vhost_crypto="no"
1252  ;;
1253  --enable-vhost-crypto)
1254      vhost_crypto="yes"
1255      if test "$mingw32" = "yes"; then
1256          error_exit "vhost-crypto isn't available on win32"
1257      fi
1258  ;;
1259  --disable-vhost-scsi) vhost_scsi="no"
1260  ;;
1261  --enable-vhost-scsi) vhost_scsi="yes"
1262  ;;
1263  --disable-vhost-vsock) vhost_vsock="no"
1264  ;;
1265  --enable-vhost-vsock) vhost_vsock="yes"
1266  ;;
1267  --disable-opengl) opengl="no"
1268  ;;
1269  --enable-opengl) opengl="yes"
1270  ;;
1271  --disable-rbd) rbd="no"
1272  ;;
1273  --enable-rbd) rbd="yes"
1274  ;;
1275  --disable-xfsctl) xfs="no"
1276  ;;
1277  --enable-xfsctl) xfs="yes"
1278  ;;
1279  --disable-smartcard) smartcard="no"
1280  ;;
1281  --enable-smartcard) smartcard="yes"
1282  ;;
1283  --disable-libusb) libusb="no"
1284  ;;
1285  --enable-libusb) libusb="yes"
1286  ;;
1287  --disable-usb-redir) usb_redir="no"
1288  ;;
1289  --enable-usb-redir) usb_redir="yes"
1290  ;;
1291  --disable-zlib-test) zlib="no"
1292  ;;
1293  --disable-lzo) lzo="no"
1294  ;;
1295  --enable-lzo) lzo="yes"
1296  ;;
1297  --disable-snappy) snappy="no"
1298  ;;
1299  --enable-snappy) snappy="yes"
1300  ;;
1301  --disable-bzip2) bzip2="no"
1302  ;;
1303  --enable-bzip2) bzip2="yes"
1304  ;;
1305  --enable-guest-agent) guest_agent="yes"
1306  ;;
1307  --disable-guest-agent) guest_agent="no"
1308  ;;
1309  --enable-guest-agent-msi) guest_agent_msi="yes"
1310  ;;
1311  --disable-guest-agent-msi) guest_agent_msi="no"
1312  ;;
1313  --with-vss-sdk) vss_win32_sdk=""
1314  ;;
1315  --with-vss-sdk=*) vss_win32_sdk="$optarg"
1316  ;;
1317  --without-vss-sdk) vss_win32_sdk="no"
1318  ;;
1319  --with-win-sdk) win_sdk=""
1320  ;;
1321  --with-win-sdk=*) win_sdk="$optarg"
1322  ;;
1323  --without-win-sdk) win_sdk="no"
1324  ;;
1325  --enable-tools) want_tools="yes"
1326  ;;
1327  --disable-tools) want_tools="no"
1328  ;;
1329  --enable-seccomp) seccomp="yes"
1330  ;;
1331  --disable-seccomp) seccomp="no"
1332  ;;
1333  --disable-glusterfs) glusterfs="no"
1334  ;;
1335  --enable-glusterfs) glusterfs="yes"
1336  ;;
1337  --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1338      echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1339  ;;
1340  --enable-vhdx|--disable-vhdx)
1341      echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1342  ;;
1343  --enable-uuid|--disable-uuid)
1344      echo "$0: $opt is obsolete, UUID support is always built" >&2
1345  ;;
1346  --disable-gtk) gtk="no"
1347  ;;
1348  --enable-gtk) gtk="yes"
1349  ;;
1350  --tls-priority=*) tls_priority="$optarg"
1351  ;;
1352  --disable-gnutls) gnutls="no"
1353  ;;
1354  --enable-gnutls) gnutls="yes"
1355  ;;
1356  --disable-nettle) nettle="no"
1357  ;;
1358  --enable-nettle) nettle="yes"
1359  ;;
1360  --disable-gcrypt) gcrypt="no"
1361  ;;
1362  --enable-gcrypt) gcrypt="yes"
1363  ;;
1364  --enable-rdma) rdma="yes"
1365  ;;
1366  --disable-rdma) rdma="no"
1367  ;;
1368  --enable-pvrdma) pvrdma="yes"
1369  ;;
1370  --disable-pvrdma) pvrdma="no"
1371  ;;
1372  --disable-vte) vte="no"
1373  ;;
1374  --enable-vte) vte="yes"
1375  ;;
1376  --disable-virglrenderer) virglrenderer="no"
1377  ;;
1378  --enable-virglrenderer) virglrenderer="yes"
1379  ;;
1380  --disable-tpm) tpm="no"
1381  ;;
1382  --enable-tpm) tpm="yes"
1383  ;;
1384  --disable-libssh2) libssh2="no"
1385  ;;
1386  --enable-libssh2) libssh2="yes"
1387  ;;
1388  --disable-live-block-migration) live_block_migration="no"
1389  ;;
1390  --enable-live-block-migration) live_block_migration="yes"
1391  ;;
1392  --disable-numa) numa="no"
1393  ;;
1394  --enable-numa) numa="yes"
1395  ;;
1396  --disable-libxml2) libxml2="no"
1397  ;;
1398  --enable-libxml2) libxml2="yes"
1399  ;;
1400  --disable-tcmalloc) tcmalloc="no"
1401  ;;
1402  --enable-tcmalloc) tcmalloc="yes"
1403  ;;
1404  --disable-jemalloc) jemalloc="no"
1405  ;;
1406  --enable-jemalloc) jemalloc="yes"
1407  ;;
1408  --disable-replication) replication="no"
1409  ;;
1410  --enable-replication) replication="yes"
1411  ;;
1412  --disable-vxhs) vxhs="no"
1413  ;;
1414  --enable-vxhs) vxhs="yes"
1415  ;;
1416  --disable-vhost-user) vhost_user="no"
1417  ;;
1418  --enable-vhost-user)
1419      vhost_user="yes"
1420      if test "$mingw32" = "yes"; then
1421          error_exit "vhost-user isn't available on win32"
1422      fi
1423  ;;
1424  --disable-capstone) capstone="no"
1425  ;;
1426  --enable-capstone) capstone="yes"
1427  ;;
1428  --enable-capstone=git) capstone="git"
1429  ;;
1430  --enable-capstone=system) capstone="system"
1431  ;;
1432  --with-git=*) git="$optarg"
1433  ;;
1434  --enable-git-update) git_update=yes
1435  ;;
1436  --disable-git-update) git_update=no
1437  ;;
1438  --enable-debug-mutex) debug_mutex=yes
1439  ;;
1440  --disable-debug-mutex) debug_mutex=no
1441  ;;
1442  --enable-libpmem) libpmem=yes
1443  ;;
1444  --disable-libpmem) libpmem=no
1445  ;;
1446  *)
1447      echo "ERROR: unknown option $opt"
1448      echo "Try '$0 --help' for more information"
1449      exit 1
1450  ;;
1451  esac
1452done
1453
1454if test "$vhost_user" = ""; then
1455    if test "$mingw32" = "yes"; then
1456        vhost_user="no"
1457    else
1458        vhost_user="yes"
1459    fi
1460fi
1461
1462case "$cpu" in
1463    ppc)
1464           CPU_CFLAGS="-m32"
1465           LDFLAGS="-m32 $LDFLAGS"
1466           cross_cc_powerpc=$cc
1467           cross_cc_cflags_powerpc=$CPU_CFLAGS
1468           ;;
1469    ppc64)
1470           CPU_CFLAGS="-m64"
1471           LDFLAGS="-m64 $LDFLAGS"
1472           cross_cc_ppc64=$cc
1473           cross_cc_cflags_ppc64=$CPU_CFLAGS
1474           ;;
1475    sparc)
1476           CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1477           LDFLAGS="-m32 -mv8plus $LDFLAGS"
1478           cross_cc_sparc=$cc
1479           cross_cc_cflags_sparc=$CPU_CFLAGS
1480           ;;
1481    sparc64)
1482           CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1483           LDFLAGS="-m64 $LDFLAGS"
1484           cross_cc_sparc64=$cc
1485           cross_cc_cflags_sparc64=$CPU_CFLAGS
1486           ;;
1487    s390)
1488           CPU_CFLAGS="-m31"
1489           LDFLAGS="-m31 $LDFLAGS"
1490           cross_cc_s390=$cc
1491           cross_cc_cflags_s390=$CPU_CFLAGS
1492           ;;
1493    s390x)
1494           CPU_CFLAGS="-m64"
1495           LDFLAGS="-m64 $LDFLAGS"
1496           cross_cc_s390x=$cc
1497           cross_cc_cflags_s390x=$CPU_CFLAGS
1498           ;;
1499    i386)
1500           CPU_CFLAGS="-m32"
1501           LDFLAGS="-m32 $LDFLAGS"
1502           cross_cc_i386=$cc
1503           cross_cc_cflags_i386=$CPU_CFLAGS
1504           ;;
1505    x86_64)
1506           # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1507           # If we truly care, we should simply detect this case at
1508           # runtime and generate the fallback to serial emulation.
1509           CPU_CFLAGS="-m64 -mcx16"
1510           LDFLAGS="-m64 $LDFLAGS"
1511           cross_cc_x86_64=$cc
1512           cross_cc_cflags_x86_64=$CPU_CFLAGS
1513           ;;
1514    x32)
1515           CPU_CFLAGS="-mx32"
1516           LDFLAGS="-mx32 $LDFLAGS"
1517           cross_cc_i386=$cc
1518           cross_cc_cflags_i386=$CPU_CFLAGS
1519           ;;
1520    # No special flags required for other host CPUs
1521esac
1522
1523QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1524
1525# For user-mode emulation the host arch has to be one we explicitly
1526# support, even if we're using TCI.
1527if [ "$ARCH" = "unknown" ]; then
1528  bsd_user="no"
1529  linux_user="no"
1530fi
1531
1532default_target_list=""
1533
1534mak_wilds=""
1535
1536if [ "$softmmu" = "yes" ]; then
1537    mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1538fi
1539if [ "$linux_user" = "yes" ]; then
1540    mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1541fi
1542if [ "$bsd_user" = "yes" ]; then
1543    mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1544fi
1545
1546for config in $mak_wilds; do
1547    default_target_list="${default_target_list} $(basename "$config" .mak)"
1548done
1549
1550# Enumerate public trace backends for --help output
1551trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1552
1553if test x"$show_help" = x"yes" ; then
1554cat << EOF
1555
1556Usage: configure [options]
1557Options: [defaults in brackets after descriptions]
1558
1559Standard options:
1560  --help                   print this message
1561  --prefix=PREFIX          install in PREFIX [$prefix]
1562  --interp-prefix=PREFIX   where to find shared libraries, etc.
1563                           use %M for cpu name [$interp_prefix]
1564  --target-list=LIST       set target list (default: build everything)
1565$(echo Available targets: $default_target_list | \
1566  fold -s -w 53 | sed -e 's/^/                           /')
1567
1568Advanced options (experts only):
1569  --source-path=PATH       path of source code [$source_path]
1570  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
1571  --cc=CC                  use C compiler CC [$cc]
1572  --iasl=IASL              use ACPI compiler IASL [$iasl]
1573  --host-cc=CC             use C compiler CC [$host_cc] for code run at
1574                           build time
1575  --cxx=CXX                use C++ compiler CXX [$cxx]
1576  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1577  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
1578  --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1579  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1580  --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1581  --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
1582  --make=MAKE              use specified make [$make]
1583  --install=INSTALL        use specified install [$install]
1584  --python=PYTHON          use specified python [$python]
1585  --smbd=SMBD              use specified smbd [$smbd]
1586  --with-git=GIT           use specified git [$git]
1587  --static                 enable static build [$static]
1588  --mandir=PATH            install man pages in PATH
1589  --datadir=PATH           install firmware in PATH$confsuffix
1590  --docdir=PATH            install documentation in PATH$confsuffix
1591  --bindir=PATH            install binaries in PATH
1592  --libdir=PATH            install libraries in PATH
1593  --libexecdir=PATH        install helper binaries in PATH
1594  --sysconfdir=PATH        install config in PATH$confsuffix
1595  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
1596  --firmwarepath=PATH      search PATH for firmware files
1597  --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1598  --with-pkgversion=VERS   use specified string as sub-version of the package
1599  --enable-debug           enable common debug build options
1600  --enable-sanitizers      enable default sanitizers
1601  --disable-strip          disable stripping binaries
1602  --disable-werror         disable compilation abort on warning
1603  --disable-stack-protector disable compiler-provided stack protection
1604  --audio-drv-list=LIST    set audio drivers list:
1605                           Available drivers: $audio_possible_drivers
1606  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
1607  --block-drv-rw-whitelist=L
1608                           set block driver read-write whitelist
1609                           (affects only QEMU, not qemu-img)
1610  --block-drv-ro-whitelist=L
1611                           set block driver read-only whitelist
1612                           (affects only QEMU, not qemu-img)
1613  --enable-trace-backends=B Set trace backend
1614                           Available backends: $trace_backend_list
1615  --with-trace-file=NAME   Full PATH,NAME of file to store traces
1616                           Default:trace-<pid>
1617  --disable-slirp          disable SLIRP userspace network connectivity
1618  --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1619  --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1620  --oss-lib                path to OSS library
1621  --cpu=CPU                Build for host CPU [$cpu]
1622  --with-coroutine=BACKEND coroutine backend. Supported options:
1623                           ucontext, sigaltstack, windows
1624  --enable-gcov            enable test coverage analysis with gcov
1625  --gcov=GCOV              use specified gcov [$gcov_tool]
1626  --disable-blobs          disable installing provided firmware blobs
1627  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1628  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1629  --tls-priority           default TLS protocol/cipher priority string
1630  --enable-gprof           QEMU profiling with gprof
1631  --enable-profiler        profiler support
1632  --enable-xen-pv-domain-build
1633                           xen pv domain builder
1634  --enable-debug-stack-usage
1635                           track the maximum stack usage of stacks created by qemu_alloc_stack
1636
1637Optional features, enabled with --enable-FEATURE and
1638disabled with --disable-FEATURE, default is enabled if available:
1639
1640  system          all system emulation targets
1641  user            supported user emulation targets
1642  linux-user      all linux usermode emulation targets
1643  bsd-user        all BSD usermode emulation targets
1644  docs            build documentation
1645  guest-agent     build the QEMU Guest Agent
1646  guest-agent-msi build guest agent Windows MSI installation package
1647  pie             Position Independent Executables
1648  modules         modules support
1649  debug-tcg       TCG debugging (default is disabled)
1650  debug-info      debugging information
1651  sparse          sparse checker
1652
1653  gnutls          GNUTLS cryptography support
1654  nettle          nettle cryptography support
1655  gcrypt          libgcrypt cryptography support
1656  sdl             SDL UI
1657  --with-sdlabi     select preferred SDL ABI 1.2 or 2.0
1658  gtk             gtk UI
1659  vte             vte support for the gtk UI
1660  curses          curses UI
1661  vnc             VNC UI support
1662  vnc-sasl        SASL encryption for VNC server
1663  vnc-jpeg        JPEG lossy compression for VNC server
1664  vnc-png         PNG compression for VNC server
1665  cocoa           Cocoa UI (Mac OS X only)
1666  virtfs          VirtFS
1667  mpath           Multipath persistent reservation passthrough
1668  xen             xen backend driver support
1669  xen-pci-passthrough    PCI passthrough support for Xen
1670  brlapi          BrlAPI (Braile)
1671  curl            curl connectivity
1672  membarrier      membarrier system call (for Linux 4.14+ or Windows)
1673  fdt             fdt device tree
1674  bluez           bluez stack connectivity
1675  kvm             KVM acceleration support
1676  hax             HAX acceleration support
1677  hvf             Hypervisor.framework acceleration support
1678  whpx            Windows Hypervisor Platform acceleration support
1679  rdma            Enable RDMA-based migration
1680  pvrdma          Enable PVRDMA support
1681  vde             support for vde network
1682  netmap          support for netmap network
1683  linux-aio       Linux AIO support
1684  cap-ng          libcap-ng support
1685  attr            attr and xattr support
1686  vhost-net       vhost-net acceleration support
1687  vhost-crypto    vhost-crypto acceleration support
1688  spice           spice
1689  rbd             rados block device (rbd)
1690  libiscsi        iscsi support
1691  libnfs          nfs support
1692  smartcard       smartcard support (libcacard)
1693  libusb          libusb (for usb passthrough)
1694  live-block-migration   Block migration in the main migration stream
1695  usb-redir       usb network redirection support
1696  lzo             support of lzo compression library
1697  snappy          support of snappy compression library
1698  bzip2           support of bzip2 compression library
1699                  (for reading bzip2-compressed dmg images)
1700  seccomp         seccomp support
1701  coroutine-pool  coroutine freelist (better performance)
1702  glusterfs       GlusterFS backend
1703  tpm             TPM support
1704  libssh2         ssh block device support
1705  numa            libnuma support
1706  libxml2         for Parallels image format
1707  tcmalloc        tcmalloc support
1708  jemalloc        jemalloc support
1709  replication     replication support
1710  vhost-vsock     virtio sockets device support
1711  opengl          opengl support
1712  virglrenderer   virgl rendering support
1713  xfsctl          xfsctl support
1714  qom-cast-debug  cast debugging support
1715  tools           build qemu-io, qemu-nbd and qemu-image tools
1716  vxhs            Veritas HyperScale vDisk backend support
1717  crypto-afalg    Linux AF_ALG crypto backend driver
1718  vhost-user      vhost-user support
1719  capstone        capstone disassembler support
1720  debug-mutex     mutex debugging support
1721  libpmem         libpmem support
1722
1723NOTE: The object files are built at the place where configure is launched
1724EOF
1725exit 0
1726fi
1727
1728if ! has $python; then
1729  error_exit "Python not found. Use --python=/path/to/python"
1730fi
1731
1732# Note that if the Python conditional here evaluates True we will exit
1733# with status 1 which is a shell 'false' value.
1734if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1735  error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
1736      "Use --python=/path/to/python to specify a supported Python."
1737fi
1738
1739# Suppress writing compiled files
1740python="$python -B"
1741
1742# Check that the C compiler works. Doing this here before testing
1743# the host CPU ensures that we had a valid CC to autodetect the
1744# $cpu var (and we should bail right here if that's not the case).
1745# It also allows the help message to be printed without a CC.
1746write_c_skeleton;
1747if compile_object ; then
1748  : C compiler works ok
1749else
1750    error_exit "\"$cc\" either does not exist or does not work"
1751fi
1752if ! compile_prog ; then
1753    error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1754fi
1755
1756# Now we have handled --enable-tcg-interpreter and know we're not just
1757# printing the help message, bail out if the host CPU isn't supported.
1758if test "$ARCH" = "unknown"; then
1759    if test "$tcg_interpreter" = "yes" ; then
1760        echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1761    else
1762        error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1763    fi
1764fi
1765
1766# Consult white-list to determine whether to enable werror
1767# by default.  Only enable by default for git builds
1768if test -z "$werror" ; then
1769    if test -d "$source_path/.git" -a \
1770        \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1771        werror="yes"
1772    else
1773        werror="no"
1774    fi
1775fi
1776
1777if test "$bogus_os" = "yes"; then
1778    # Now that we know that we're not printing the help and that
1779    # the compiler works (so the results of the check_defines we used
1780    # to identify the OS are reliable), if we didn't recognize the
1781    # host OS we should stop now.
1782    error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1783fi
1784
1785gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1786gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1787gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1788gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1789gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1790gcc_flags="-Wno-string-plus-int $gcc_flags"
1791gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
1792# Note that we do not add -Werror to gcc_flags here, because that would
1793# enable it for all configure tests. If a configure test failed due
1794# to -Werror this would just silently disable some features,
1795# so it's too error prone.
1796
1797cc_has_warning_flag() {
1798    write_c_skeleton;
1799
1800    # Use the positive sense of the flag when testing for -Wno-wombat
1801    # support (gcc will happily accept the -Wno- form of unknown
1802    # warning options).
1803    optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1804    compile_prog "-Werror $optflag" ""
1805}
1806
1807for flag in $gcc_flags; do
1808    if cc_has_warning_flag $flag ; then
1809        QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1810    fi
1811done
1812
1813if test "$stack_protector" != "no"; then
1814  cat > $TMPC << EOF
1815int main(int argc, char *argv[])
1816{
1817    char arr[64], *p = arr, *c = argv[0];
1818    while (*c) {
1819        *p++ = *c++;
1820    }
1821    return 0;
1822}
1823EOF
1824  gcc_flags="-fstack-protector-strong -fstack-protector-all"
1825  sp_on=0
1826  for flag in $gcc_flags; do
1827    # We need to check both a compile and a link, since some compiler
1828    # setups fail only on a .c->.o compile and some only at link time
1829    if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1830       compile_prog "-Werror $flag" ""; then
1831      QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1832      sp_on=1
1833      break
1834    fi
1835  done
1836  if test "$stack_protector" = yes; then
1837    if test $sp_on = 0; then
1838      error_exit "Stack protector not supported"
1839    fi
1840  fi
1841fi
1842
1843# Disable -Wmissing-braces on older compilers that warn even for
1844# the "universal" C zero initializer {0}.
1845cat > $TMPC << EOF
1846struct {
1847  int a[2];
1848} x = {0};
1849EOF
1850if compile_object "-Werror" "" ; then
1851  :
1852else
1853  QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1854fi
1855
1856# Workaround for http://gcc.gnu.org/PR55489.  Happens with -fPIE/-fPIC and
1857# large functions that use global variables.  The bug is in all releases of
1858# GCC, but it became particularly acute in 4.6.x and 4.7.x.  It is fixed in
1859# 4.7.3 and 4.8.0.  We should be able to delete this at the end of 2013.
1860cat > $TMPC << EOF
1861#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1862int main(void) { return 0; }
1863#else
1864#error No bug in this compiler.
1865#endif
1866EOF
1867if compile_prog "-Werror -fno-gcse" "" ; then
1868  TRANSLATE_OPT_CFLAGS=-fno-gcse
1869fi
1870
1871if test "$static" = "yes" ; then
1872  if test "$modules" = "yes" ; then
1873    error_exit "static and modules are mutually incompatible"
1874  fi
1875  if test "$pie" = "yes" ; then
1876    error_exit "static and pie are mutually incompatible"
1877  else
1878    pie="no"
1879  fi
1880fi
1881
1882# Unconditional check for compiler __thread support
1883  cat > $TMPC << EOF
1884static __thread int tls_var;
1885int main(void) { return tls_var; }
1886EOF
1887
1888if ! compile_prog "-Werror" "" ; then
1889    error_exit "Your compiler does not support the __thread specifier for " \
1890	"Thread-Local Storage (TLS). Please upgrade to a version that does."
1891fi
1892
1893if test "$pie" = ""; then
1894  case "$cpu-$targetos" in
1895    i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1896      ;;
1897    *)
1898      pie="no"
1899      ;;
1900  esac
1901fi
1902
1903if test "$pie" != "no" ; then
1904  cat > $TMPC << EOF
1905
1906#ifdef __linux__
1907#  define THREAD __thread
1908#else
1909#  define THREAD
1910#endif
1911
1912static THREAD int tls_var;
1913
1914int main(void) { return tls_var; }
1915
1916EOF
1917  if compile_prog "-fPIE -DPIE" "-pie"; then
1918    QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1919    LDFLAGS="-pie $LDFLAGS"
1920    pie="yes"
1921    if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1922      LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1923    fi
1924  else
1925    if test "$pie" = "yes"; then
1926      error_exit "PIE not available due to missing toolchain support"
1927    else
1928      echo "Disabling PIE due to missing toolchain support"
1929      pie="no"
1930    fi
1931  fi
1932
1933  if compile_prog "-Werror -fno-pie" "-nopie"; then
1934    CFLAGS_NOPIE="-fno-pie"
1935    LDFLAGS_NOPIE="-nopie"
1936  fi
1937fi
1938
1939##########################################
1940# __sync_fetch_and_and requires at least -march=i486. Many toolchains
1941# use i686 as default anyway, but for those that don't, an explicit
1942# specification is necessary
1943
1944if test "$cpu" = "i386"; then
1945  cat > $TMPC << EOF
1946static int sfaa(int *ptr)
1947{
1948  return __sync_fetch_and_and(ptr, 0);
1949}
1950
1951int main(void)
1952{
1953  int val = 42;
1954  val = __sync_val_compare_and_swap(&val, 0, 1);
1955  sfaa(&val);
1956  return val;
1957}
1958EOF
1959  if ! compile_prog "" "" ; then
1960    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1961  fi
1962fi
1963
1964#########################################
1965# Solaris specific configure tool chain decisions
1966
1967if test "$solaris" = "yes" ; then
1968  if has $install; then
1969    :
1970  else
1971    error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1972        "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1973        "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1974  fi
1975  if test "$(path_of $install)" = "/usr/sbin/install" ; then
1976    error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1977        "try ginstall from the GNU fileutils available from www.blastwave.org" \
1978        "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1979  fi
1980  if has ar; then
1981    :
1982  else
1983    if test -f /usr/ccs/bin/ar ; then
1984      error_exit "No path includes ar" \
1985          "Add /usr/ccs/bin to your path and rerun configure"
1986    fi
1987    error_exit "No path includes ar"
1988  fi
1989fi
1990
1991if test -z "${target_list+xxx}" ; then
1992    for target in $default_target_list; do
1993        supported_target $target 2>/dev/null && \
1994            target_list="$target_list $target"
1995    done
1996    target_list="${target_list# }"
1997else
1998    target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1999    for target in $target_list; do
2000        # Check that we recognised the target name; this allows a more
2001        # friendly error message than if we let it fall through.
2002        case " $default_target_list " in
2003            *" $target "*)
2004                ;;
2005            *)
2006                error_exit "Unknown target name '$target'"
2007                ;;
2008        esac
2009        supported_target $target || exit 1
2010    done
2011fi
2012
2013# see if system emulation was really requested
2014case " $target_list " in
2015  *"-softmmu "*) softmmu=yes
2016  ;;
2017  *) softmmu=no
2018  ;;
2019esac
2020
2021feature_not_found() {
2022  feature=$1
2023  remedy=$2
2024
2025  error_exit "User requested feature $feature" \
2026      "configure was not able to find it." \
2027      "$remedy"
2028}
2029
2030# ---
2031# big/little endian test
2032cat > $TMPC << EOF
2033short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2034short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2035extern int foo(short *, short *);
2036int main(int argc, char *argv[]) {
2037    return foo(big_endian, little_endian);
2038}
2039EOF
2040
2041if compile_object ; then
2042    if strings -a $TMPO | grep -q BiGeNdIaN ; then
2043        bigendian="yes"
2044    elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2045        bigendian="no"
2046    else
2047        echo big/little test failed
2048    fi
2049else
2050    echo big/little test failed
2051fi
2052
2053##########################################
2054# cocoa implies not SDL or GTK
2055# (the cocoa UI code currently assumes it is always the active UI
2056# and doesn't interact well with other UI frontend code)
2057if test "$cocoa" = "yes"; then
2058    if test "$sdl" = "yes"; then
2059        error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2060    fi
2061    if test "$gtk" = "yes"; then
2062        error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2063    fi
2064    gtk=no
2065    sdl=no
2066fi
2067
2068# Some versions of Mac OS X incorrectly define SIZE_MAX
2069cat > $TMPC << EOF
2070#include <stdint.h>
2071#include <stdio.h>
2072int main(int argc, char *argv[]) {
2073    return printf("%zu", SIZE_MAX);
2074}
2075EOF
2076have_broken_size_max=no
2077if ! compile_object -Werror ; then
2078    have_broken_size_max=yes
2079fi
2080
2081##########################################
2082# L2TPV3 probe
2083
2084cat > $TMPC <<EOF
2085#include <sys/socket.h>
2086#include <linux/ip.h>
2087int main(void) { return sizeof(struct mmsghdr); }
2088EOF
2089if compile_prog "" "" ; then
2090  l2tpv3=yes
2091else
2092  l2tpv3=no
2093fi
2094
2095##########################################
2096# MinGW / Mingw-w64 localtime_r/gmtime_r check
2097
2098if test "$mingw32" = "yes"; then
2099    # Some versions of MinGW / Mingw-w64 lack localtime_r
2100    # and gmtime_r entirely.
2101    #
2102    # Some versions of Mingw-w64 define a macro for
2103    # localtime_r/gmtime_r.
2104    #
2105    # Some versions of Mingw-w64 will define functions
2106    # for localtime_r/gmtime_r, but only if you have
2107    # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2108    # though, unistd.h and pthread.h both define
2109    # that for you.
2110    #
2111    # So this #undef localtime_r and #include <unistd.h>
2112    # are not in fact redundant.
2113cat > $TMPC << EOF
2114#include <unistd.h>
2115#include <time.h>
2116#undef localtime_r
2117int main(void) { localtime_r(NULL, NULL); return 0; }
2118EOF
2119    if compile_prog "" "" ; then
2120        localtime_r="yes"
2121    else
2122        localtime_r="no"
2123    fi
2124fi
2125
2126##########################################
2127# pkg-config probe
2128
2129if ! has "$pkg_config_exe"; then
2130  error_exit "pkg-config binary '$pkg_config_exe' not found"
2131fi
2132
2133##########################################
2134# NPTL probe
2135
2136if test "$linux_user" = "yes"; then
2137  cat > $TMPC <<EOF
2138#include <sched.h>
2139#include <linux/futex.h>
2140int main(void) {
2141#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2142#error bork
2143#endif
2144  return 0;
2145}
2146EOF
2147  if ! compile_object ; then
2148    feature_not_found "nptl" "Install glibc and linux kernel headers."
2149  fi
2150fi
2151
2152#########################################
2153# zlib check
2154
2155if test "$zlib" != "no" ; then
2156    cat > $TMPC << EOF
2157#include <zlib.h>
2158int main(void) { zlibVersion(); return 0; }
2159EOF
2160    if compile_prog "" "-lz" ; then
2161        :
2162    else
2163        error_exit "zlib check failed" \
2164            "Make sure to have the zlib libs and headers installed."
2165    fi
2166fi
2167LIBS="$LIBS -lz"
2168
2169##########################################
2170# lzo check
2171
2172if test "$lzo" != "no" ; then
2173    cat > $TMPC << EOF
2174#include <lzo/lzo1x.h>
2175int main(void) { lzo_version(); return 0; }
2176EOF
2177    if compile_prog "" "-llzo2" ; then
2178        libs_softmmu="$libs_softmmu -llzo2"
2179        lzo="yes"
2180    else
2181        if test "$lzo" = "yes"; then
2182            feature_not_found "liblzo2" "Install liblzo2 devel"
2183        fi
2184        lzo="no"
2185    fi
2186fi
2187
2188##########################################
2189# snappy check
2190
2191if test "$snappy" != "no" ; then
2192    cat > $TMPC << EOF
2193#include <snappy-c.h>
2194int main(void) { snappy_max_compressed_length(4096); return 0; }
2195EOF
2196    if compile_prog "" "-lsnappy" ; then
2197        libs_softmmu="$libs_softmmu -lsnappy"
2198        snappy="yes"
2199    else
2200        if test "$snappy" = "yes"; then
2201            feature_not_found "libsnappy" "Install libsnappy devel"
2202        fi
2203        snappy="no"
2204    fi
2205fi
2206
2207##########################################
2208# bzip2 check
2209
2210if test "$bzip2" != "no" ; then
2211    cat > $TMPC << EOF
2212#include <bzlib.h>
2213int main(void) { BZ2_bzlibVersion(); return 0; }
2214EOF
2215    if compile_prog "" "-lbz2" ; then
2216        bzip2="yes"
2217    else
2218        if test "$bzip2" = "yes"; then
2219            feature_not_found "libbzip2" "Install libbzip2 devel"
2220        fi
2221        bzip2="no"
2222    fi
2223fi
2224
2225##########################################
2226# libseccomp check
2227
2228libseccomp_minver="2.2.0"
2229if test "$seccomp" != "no" ; then
2230    case "$cpu" in
2231    i386|x86_64|mips)
2232        ;;
2233    arm|aarch64)
2234        libseccomp_minver="2.2.3"
2235        ;;
2236    ppc|ppc64|s390x)
2237        libseccomp_minver="2.3.0"
2238        ;;
2239    *)
2240        libseccomp_minver=""
2241        ;;
2242    esac
2243
2244    if test "$libseccomp_minver" != "" &&
2245       $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2246        seccomp_cflags="$($pkg_config --cflags libseccomp)"
2247        seccomp_libs="$($pkg_config --libs libseccomp)"
2248        seccomp="yes"
2249    else
2250        if test "$seccomp" = "yes" ; then
2251            if test "$libseccomp_minver" != "" ; then
2252                feature_not_found "libseccomp" \
2253                    "Install libseccomp devel >= $libseccomp_minver"
2254            else
2255                feature_not_found "libseccomp" \
2256                    "libseccomp is not supported for host cpu $cpu"
2257            fi
2258        fi
2259        seccomp="no"
2260    fi
2261fi
2262##########################################
2263# xen probe
2264
2265if test "$xen" != "no" ; then
2266  # Check whether Xen library path is specified via --extra-ldflags to avoid
2267  # overriding this setting with pkg-config output. If not, try pkg-config
2268  # to obtain all needed flags.
2269
2270  if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2271     $pkg_config --exists xencontrol ; then
2272    xen_ctrl_version="$(printf '%d%02d%02d' \
2273      $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2274    xen=yes
2275    xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2276    xen_pc="$xen_pc xenevtchn xendevicemodel"
2277    if $pkg_config --exists xentoolcore; then
2278      xen_pc="$xen_pc xentoolcore"
2279    fi
2280    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2281    libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2282    LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2283  else
2284
2285    xen_libs="-lxenstore -lxenctrl -lxenguest"
2286    xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2287
2288    # First we test whether Xen headers and libraries are available.
2289    # If no, we are done and there is no Xen support.
2290    # If yes, more tests are run to detect the Xen version.
2291
2292    # Xen (any)
2293    cat > $TMPC <<EOF
2294#include <xenctrl.h>
2295int main(void) {
2296  return 0;
2297}
2298EOF
2299    if ! compile_prog "" "$xen_libs" ; then
2300      # Xen not found
2301      if test "$xen" = "yes" ; then
2302        feature_not_found "xen" "Install xen devel"
2303      fi
2304      xen=no
2305
2306    # Xen unstable
2307    elif
2308        cat > $TMPC <<EOF &&
2309#undef XC_WANT_COMPAT_DEVICEMODEL_API
2310#define __XEN_TOOLS__
2311#include <xendevicemodel.h>
2312#include <xenforeignmemory.h>
2313int main(void) {
2314  xendevicemodel_handle *xd;
2315  xenforeignmemory_handle *xfmem;
2316
2317  xd = xendevicemodel_open(0, 0);
2318  xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2319
2320  xfmem = xenforeignmemory_open(0, 0);
2321  xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2322
2323  return 0;
2324}
2325EOF
2326        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2327      then
2328      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2329      xen_ctrl_version=41100
2330      xen=yes
2331    elif
2332        cat > $TMPC <<EOF &&
2333#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2334#include <xenforeignmemory.h>
2335#include <xentoolcore.h>
2336int main(void) {
2337  xenforeignmemory_handle *xfmem;
2338
2339  xfmem = xenforeignmemory_open(0, 0);
2340  xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2341  xentoolcore_restrict_all(0);
2342
2343  return 0;
2344}
2345EOF
2346        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2347      then
2348      xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2349      xen_ctrl_version=41000
2350      xen=yes
2351    elif
2352        cat > $TMPC <<EOF &&
2353#undef XC_WANT_COMPAT_DEVICEMODEL_API
2354#define __XEN_TOOLS__
2355#include <xendevicemodel.h>
2356int main(void) {
2357  xendevicemodel_handle *xd;
2358
2359  xd = xendevicemodel_open(0, 0);
2360  xendevicemodel_close(xd);
2361
2362  return 0;
2363}
2364EOF
2365        compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2366      then
2367      xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2368      xen_ctrl_version=40900
2369      xen=yes
2370    elif
2371        cat > $TMPC <<EOF &&
2372/*
2373 * If we have stable libs the we don't want the libxc compat
2374 * layers, regardless of what CFLAGS we may have been given.
2375 *
2376 * Also, check if xengnttab_grant_copy_segment_t is defined and
2377 * grant copy operation is implemented.
2378 */
2379#undef XC_WANT_COMPAT_EVTCHN_API
2380#undef XC_WANT_COMPAT_GNTTAB_API
2381#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2382#include <xenctrl.h>
2383#include <xenstore.h>
2384#include <xenevtchn.h>
2385#include <xengnttab.h>
2386#include <xenforeignmemory.h>
2387#include <stdint.h>
2388#include <xen/hvm/hvm_info_table.h>
2389#if !defined(HVM_MAX_VCPUS)
2390# error HVM_MAX_VCPUS not defined
2391#endif
2392int main(void) {
2393  xc_interface *xc = NULL;
2394  xenforeignmemory_handle *xfmem;
2395  xenevtchn_handle *xe;
2396  xengnttab_handle *xg;
2397  xen_domain_handle_t handle;
2398  xengnttab_grant_copy_segment_t* seg = NULL;
2399
2400  xs_daemon_open();
2401
2402  xc = xc_interface_open(0, 0, 0);
2403  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2404  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2405  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2406  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2407  xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2408
2409  xfmem = xenforeignmemory_open(0, 0);
2410  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2411
2412  xe = xenevtchn_open(0, 0);
2413  xenevtchn_fd(xe);
2414
2415  xg = xengnttab_open(0, 0);
2416  xengnttab_grant_copy(xg, 0, seg);
2417
2418  return 0;
2419}
2420EOF
2421        compile_prog "" "$xen_libs $xen_stable_libs"
2422      then
2423      xen_ctrl_version=40800
2424      xen=yes
2425    elif
2426        cat > $TMPC <<EOF &&
2427/*
2428 * If we have stable libs the we don't want the libxc compat
2429 * layers, regardless of what CFLAGS we may have been given.
2430 */
2431#undef XC_WANT_COMPAT_EVTCHN_API
2432#undef XC_WANT_COMPAT_GNTTAB_API
2433#undef XC_WANT_COMPAT_MAP_FOREIGN_API
2434#include <xenctrl.h>
2435#include <xenstore.h>
2436#include <xenevtchn.h>
2437#include <xengnttab.h>
2438#include <xenforeignmemory.h>
2439#include <stdint.h>
2440#include <xen/hvm/hvm_info_table.h>
2441#if !defined(HVM_MAX_VCPUS)
2442# error HVM_MAX_VCPUS not defined
2443#endif
2444int main(void) {
2445  xc_interface *xc = NULL;
2446  xenforeignmemory_handle *xfmem;
2447  xenevtchn_handle *xe;
2448  xengnttab_handle *xg;
2449  xen_domain_handle_t handle;
2450
2451  xs_daemon_open();
2452
2453  xc = xc_interface_open(0, 0, 0);
2454  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2455  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2456  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2457  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2458  xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2459
2460  xfmem = xenforeignmemory_open(0, 0);
2461  xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2462
2463  xe = xenevtchn_open(0, 0);
2464  xenevtchn_fd(xe);
2465
2466  xg = xengnttab_open(0, 0);
2467  xengnttab_map_grant_ref(xg, 0, 0, 0);
2468
2469  return 0;
2470}
2471EOF
2472        compile_prog "" "$xen_libs $xen_stable_libs"
2473      then
2474      xen_ctrl_version=40701
2475      xen=yes
2476    elif
2477        cat > $TMPC <<EOF &&
2478#include <xenctrl.h>
2479#include <stdint.h>
2480int main(void) {
2481  xc_interface *xc = NULL;
2482  xen_domain_handle_t handle;
2483  xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2484  return 0;
2485}
2486EOF
2487        compile_prog "" "$xen_libs"
2488      then
2489      xen_ctrl_version=40700
2490      xen=yes
2491
2492    # Xen 4.6
2493    elif
2494        cat > $TMPC <<EOF &&
2495#include <xenctrl.h>
2496#include <xenstore.h>
2497#include <stdint.h>
2498#include <xen/hvm/hvm_info_table.h>
2499#if !defined(HVM_MAX_VCPUS)
2500# error HVM_MAX_VCPUS not defined
2501#endif
2502int main(void) {
2503  xc_interface *xc;
2504  xs_daemon_open();
2505  xc = xc_interface_open(0, 0, 0);
2506  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2507  xc_gnttab_open(NULL, 0);
2508  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2509  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2510  xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2511  xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2512  return 0;
2513}
2514EOF
2515        compile_prog "" "$xen_libs"
2516      then
2517      xen_ctrl_version=40600
2518      xen=yes
2519
2520    # Xen 4.5
2521    elif
2522        cat > $TMPC <<EOF &&
2523#include <xenctrl.h>
2524#include <xenstore.h>
2525#include <stdint.h>
2526#include <xen/hvm/hvm_info_table.h>
2527#if !defined(HVM_MAX_VCPUS)
2528# error HVM_MAX_VCPUS not defined
2529#endif
2530int main(void) {
2531  xc_interface *xc;
2532  xs_daemon_open();
2533  xc = xc_interface_open(0, 0, 0);
2534  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2535  xc_gnttab_open(NULL, 0);
2536  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2537  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2538  xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2539  return 0;
2540}
2541EOF
2542        compile_prog "" "$xen_libs"
2543      then
2544      xen_ctrl_version=40500
2545      xen=yes
2546
2547    elif
2548        cat > $TMPC <<EOF &&
2549#include <xenctrl.h>
2550#include <xenstore.h>
2551#include <stdint.h>
2552#include <xen/hvm/hvm_info_table.h>
2553#if !defined(HVM_MAX_VCPUS)
2554# error HVM_MAX_VCPUS not defined
2555#endif
2556int main(void) {
2557  xc_interface *xc;
2558  xs_daemon_open();
2559  xc = xc_interface_open(0, 0, 0);
2560  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2561  xc_gnttab_open(NULL, 0);
2562  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2563  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2564  return 0;
2565}
2566EOF
2567        compile_prog "" "$xen_libs"
2568      then
2569      xen_ctrl_version=40200
2570      xen=yes
2571
2572    else
2573      if test "$xen" = "yes" ; then
2574        feature_not_found "xen (unsupported version)" \
2575                          "Install a supported xen (xen 4.2 or newer)"
2576      fi
2577      xen=no
2578    fi
2579
2580    if test "$xen" = yes; then
2581      if test $xen_ctrl_version -ge 40701  ; then
2582        libs_softmmu="$xen_stable_libs $libs_softmmu"
2583      fi
2584      libs_softmmu="$xen_libs $libs_softmmu"
2585    fi
2586  fi
2587fi
2588
2589if test "$xen_pci_passthrough" != "no"; then
2590  if test "$xen" = "yes" && test "$linux" = "yes"; then
2591    xen_pci_passthrough=yes
2592  else
2593    if test "$xen_pci_passthrough" = "yes"; then
2594      error_exit "User requested feature Xen PCI Passthrough" \
2595          " but this feature requires /sys from Linux"
2596    fi
2597    xen_pci_passthrough=no
2598  fi
2599fi
2600
2601if test "$xen_pv_domain_build" = "yes" &&
2602   test "$xen" != "yes"; then
2603    error_exit "User requested Xen PV domain builder support" \
2604	       "which requires Xen support."
2605fi
2606
2607##########################################
2608# Windows Hypervisor Platform accelerator (WHPX) check
2609if test "$whpx" != "no" ; then
2610    if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2611        whpx="yes"
2612    else
2613        if test "$whpx" = "yes"; then
2614            feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2615        fi
2616        whpx="no"
2617    fi
2618fi
2619
2620##########################################
2621# Sparse probe
2622if test "$sparse" != "no" ; then
2623  if has cgcc; then
2624    sparse=yes
2625  else
2626    if test "$sparse" = "yes" ; then
2627      feature_not_found "sparse" "Install sparse binary"
2628    fi
2629    sparse=no
2630  fi
2631fi
2632
2633##########################################
2634# X11 probe
2635if $pkg_config --exists "x11"; then
2636    have_x11=yes
2637    x11_cflags=$($pkg_config --cflags x11)
2638    x11_libs=$($pkg_config --libs x11)
2639fi
2640
2641##########################################
2642# GTK probe
2643
2644if test "$gtk" != "no"; then
2645    gtkpackage="gtk+-3.0"
2646    gtkx11package="gtk+-x11-3.0"
2647    gtkversion="3.14.0"
2648    if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2649        gtk_cflags=$($pkg_config --cflags $gtkpackage)
2650        gtk_libs=$($pkg_config --libs $gtkpackage)
2651        gtk_version=$($pkg_config --modversion $gtkpackage)
2652        if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2653            need_x11=yes
2654            gtk_cflags="$gtk_cflags $x11_cflags"
2655            gtk_libs="$gtk_libs $x11_libs"
2656        fi
2657        gtk="yes"
2658    elif test "$gtk" = "yes"; then
2659        feature_not_found "gtk" "Install gtk3-devel"
2660    else
2661        gtk="no"
2662    fi
2663fi
2664
2665
2666##########################################
2667# GNUTLS probe
2668
2669gnutls_works() {
2670    # Unfortunately some distros have bad pkg-config information for gnutls
2671    # such that it claims to exist but you get a compiler error if you try
2672    # to use the options returned by --libs. Specifically, Ubuntu for --static
2673    # builds doesn't work:
2674    # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2675    #
2676    # So sanity check the cflags/libs before assuming gnutls can be used.
2677    if ! $pkg_config --exists "gnutls"; then
2678        return 1
2679    fi
2680
2681    write_c_skeleton
2682    compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2683}
2684
2685gnutls_gcrypt=no
2686gnutls_nettle=no
2687if test "$gnutls" != "no"; then
2688    if gnutls_works; then
2689        gnutls_cflags=$($pkg_config --cflags gnutls)
2690        gnutls_libs=$($pkg_config --libs gnutls)
2691        libs_softmmu="$gnutls_libs $libs_softmmu"
2692        libs_tools="$gnutls_libs $libs_tools"
2693	QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2694        gnutls="yes"
2695
2696	# gnutls_rnd requires >= 2.11.0
2697	if $pkg_config --exists "gnutls >= 2.11.0"; then
2698	    gnutls_rnd="yes"
2699	else
2700	    gnutls_rnd="no"
2701	fi
2702
2703	if $pkg_config --exists 'gnutls >= 3.0'; then
2704	    gnutls_gcrypt=no
2705	    gnutls_nettle=yes
2706	elif $pkg_config --exists 'gnutls >= 2.12'; then
2707	    case $($pkg_config --libs --static gnutls) in
2708		*gcrypt*)
2709		    gnutls_gcrypt=yes
2710		    gnutls_nettle=no
2711		    ;;
2712		*nettle*)
2713		    gnutls_gcrypt=no
2714		    gnutls_nettle=yes
2715		    ;;
2716		*)
2717		    gnutls_gcrypt=yes
2718		    gnutls_nettle=no
2719		    ;;
2720	    esac
2721	else
2722	    gnutls_gcrypt=yes
2723	    gnutls_nettle=no
2724	fi
2725    elif test "$gnutls" = "yes"; then
2726	feature_not_found "gnutls" "Install gnutls devel"
2727    else
2728        gnutls="no"
2729        gnutls_rnd="no"
2730    fi
2731else
2732    gnutls_rnd="no"
2733fi
2734
2735
2736# If user didn't give a --disable/enable-gcrypt flag,
2737# then mark as disabled if user requested nettle
2738# explicitly, or if gnutls links to nettle
2739if test -z "$gcrypt"
2740then
2741    if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2742    then
2743        gcrypt="no"
2744    fi
2745fi
2746
2747# If user didn't give a --disable/enable-nettle flag,
2748# then mark as disabled if user requested gcrypt
2749# explicitly, or if gnutls links to gcrypt
2750if test -z "$nettle"
2751then
2752    if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2753    then
2754        nettle="no"
2755    fi
2756fi
2757
2758has_libgcrypt_config() {
2759    if ! has "libgcrypt-config"
2760    then
2761	return 1
2762    fi
2763
2764    if test -n "$cross_prefix"
2765    then
2766	host=$(libgcrypt-config --host)
2767	if test "$host-" != $cross_prefix
2768	then
2769	    return 1
2770	fi
2771    fi
2772
2773    return 0
2774}
2775
2776if test "$gcrypt" != "no"; then
2777    if has_libgcrypt_config; then
2778        gcrypt_cflags=$(libgcrypt-config --cflags)
2779        gcrypt_libs=$(libgcrypt-config --libs)
2780        # Debian has remove -lgpg-error from libgcrypt-config
2781        # as it "spreads unnecessary dependencies" which in
2782        # turn breaks static builds...
2783        if test "$static" = "yes"
2784        then
2785            gcrypt_libs="$gcrypt_libs -lgpg-error"
2786        fi
2787        libs_softmmu="$gcrypt_libs $libs_softmmu"
2788        libs_tools="$gcrypt_libs $libs_tools"
2789        QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2790        gcrypt="yes"
2791        if test -z "$nettle"; then
2792           nettle="no"
2793        fi
2794
2795        cat > $TMPC << EOF
2796#include <gcrypt.h>
2797int main(void) {
2798  gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2799                  GCRY_MD_SHA256,
2800                  NULL, 0, 0, 0, NULL);
2801 return 0;
2802}
2803EOF
2804        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2805            gcrypt_kdf=yes
2806        fi
2807
2808        cat > $TMPC << EOF
2809#include <gcrypt.h>
2810int main(void) {
2811  gcry_mac_hd_t handle;
2812  gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2813                GCRY_MAC_FLAG_SECURE, NULL);
2814  return 0;
2815}
2816EOF
2817        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2818            gcrypt_hmac=yes
2819        fi
2820    else
2821        if test "$gcrypt" = "yes"; then
2822            feature_not_found "gcrypt" "Install gcrypt devel"
2823        else
2824            gcrypt="no"
2825        fi
2826    fi
2827fi
2828
2829
2830if test "$nettle" != "no"; then
2831    if $pkg_config --exists "nettle"; then
2832        nettle_cflags=$($pkg_config --cflags nettle)
2833        nettle_libs=$($pkg_config --libs nettle)
2834        nettle_version=$($pkg_config --modversion nettle)
2835        libs_softmmu="$nettle_libs $libs_softmmu"
2836        libs_tools="$nettle_libs $libs_tools"
2837        QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2838        nettle="yes"
2839
2840        cat > $TMPC << EOF
2841#include <stddef.h>
2842#include <nettle/pbkdf2.h>
2843int main(void) {
2844     pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2845     return 0;
2846}
2847EOF
2848        if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2849            nettle_kdf=yes
2850        fi
2851    else
2852        if test "$nettle" = "yes"; then
2853            feature_not_found "nettle" "Install nettle devel"
2854        else
2855            nettle="no"
2856        fi
2857    fi
2858fi
2859
2860if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2861then
2862    error_exit "Only one of gcrypt & nettle can be enabled"
2863fi
2864
2865##########################################
2866# libtasn1 - only for the TLS creds/session test suite
2867
2868tasn1=yes
2869tasn1_cflags=""
2870tasn1_libs=""
2871if $pkg_config --exists "libtasn1"; then
2872    tasn1_cflags=$($pkg_config --cflags libtasn1)
2873    tasn1_libs=$($pkg_config --libs libtasn1)
2874else
2875    tasn1=no
2876fi
2877
2878
2879##########################################
2880# getifaddrs (for tests/test-io-channel-socket )
2881
2882have_ifaddrs_h=yes
2883if ! check_include "ifaddrs.h" ; then
2884  have_ifaddrs_h=no
2885fi
2886
2887##########################################
2888# VTE probe
2889
2890if test "$vte" != "no"; then
2891    vteminversion="0.32.0"
2892    if $pkg_config --exists "vte-2.91"; then
2893      vtepackage="vte-2.91"
2894    else
2895      vtepackage="vte-2.90"
2896    fi
2897    if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2898        vte_cflags=$($pkg_config --cflags $vtepackage)
2899        vte_libs=$($pkg_config --libs $vtepackage)
2900        vteversion=$($pkg_config --modversion $vtepackage)
2901        vte="yes"
2902    elif test "$vte" = "yes"; then
2903        feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2904    else
2905        vte="no"
2906    fi
2907fi
2908
2909##########################################
2910# SDL probe
2911
2912# Look for sdl configuration program (pkg-config or sdl-config).  Try
2913# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2914
2915sdl_probe ()
2916{
2917  sdl_too_old=no
2918  if test "$sdlabi" = ""; then
2919      if $pkg_config --exists "sdl2"; then
2920          sdlabi=2.0
2921      elif $pkg_config --exists "sdl"; then
2922          sdlabi=1.2
2923      else
2924          sdlabi=2.0
2925      fi
2926  fi
2927
2928  if test $sdlabi = "2.0"; then
2929      sdl_config=$sdl2_config
2930      sdlname=sdl2
2931      sdlconfigname=sdl2_config
2932  elif test $sdlabi = "1.2"; then
2933      sdlname=sdl
2934      sdlconfigname=sdl_config
2935  else
2936      error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2937  fi
2938
2939  if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2940    sdl_config=$sdlconfigname
2941  fi
2942
2943  if $pkg_config $sdlname --exists; then
2944    sdlconfig="$pkg_config $sdlname"
2945    sdlversion=$($sdlconfig --modversion 2>/dev/null)
2946  elif has ${sdl_config}; then
2947    sdlconfig="$sdl_config"
2948    sdlversion=$($sdlconfig --version)
2949  else
2950    if test "$sdl" = "yes" ; then
2951      feature_not_found "sdl" "Install SDL2-devel"
2952    fi
2953    sdl=no
2954    # no need to do the rest
2955    return
2956  fi
2957  if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2958    echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2959  fi
2960
2961  cat > $TMPC << EOF
2962#include <SDL.h>
2963#undef main /* We don't want SDL to override our main() */
2964int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2965EOF
2966  sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2967  sdl_cflags="$sdl_cflags -Wno-undef"  # workaround 2.0.8 bug
2968  if test "$static" = "yes" ; then
2969    if $pkg_config $sdlname --exists; then
2970      sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2971    else
2972      sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2973    fi
2974  else
2975    sdl_libs=$($sdlconfig --libs 2>/dev/null)
2976  fi
2977  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2978    if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2979      sdl_too_old=yes
2980    else
2981      sdl=yes
2982    fi
2983
2984    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2985    if test "$sdl" = "yes" -a "$static" = "yes" ; then
2986      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2987         sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2988         sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2989      fi
2990      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2991	:
2992      else
2993        sdl=no
2994      fi
2995    fi # static link
2996  else # sdl not found
2997    if test "$sdl" = "yes" ; then
2998      feature_not_found "sdl" "Install SDL devel"
2999    fi
3000    sdl=no
3001  fi # sdl compile test
3002}
3003
3004if test "$sdl" != "no" ; then
3005  sdl_probe
3006fi
3007
3008if test "$sdl" = "yes" ; then
3009  cat > $TMPC <<EOF
3010#include <SDL.h>
3011#if defined(SDL_VIDEO_DRIVER_X11)
3012#include <X11/XKBlib.h>
3013#else
3014#error No x11 support
3015#endif
3016int main(void) { return 0; }
3017EOF
3018  if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3019    need_x11=yes
3020    sdl_cflags="$sdl_cflags $x11_cflags"
3021    sdl_libs="$sdl_libs $x11_libs"
3022  fi
3023fi
3024
3025##########################################
3026# RDMA needs OpenFabrics libraries
3027if test "$rdma" != "no" ; then
3028  cat > $TMPC <<EOF
3029#include <rdma/rdma_cma.h>
3030int main(void) { return 0; }
3031EOF
3032  rdma_libs="-lrdmacm -libverbs -libumad"
3033  if compile_prog "" "$rdma_libs" ; then
3034    rdma="yes"
3035    libs_softmmu="$libs_softmmu $rdma_libs"
3036  else
3037    if test "$rdma" = "yes" ; then
3038        error_exit \
3039            " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3040            " Your options:" \
3041            "  (1) Fast: Install infiniband packages (devel) from your distro." \
3042            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
3043            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
3044    fi
3045    rdma="no"
3046  fi
3047fi
3048
3049##########################################
3050# PVRDMA detection
3051
3052cat > $TMPC <<EOF &&
3053#include <sys/mman.h>
3054
3055int
3056main(void)
3057{
3058    char buf = 0;
3059    void *addr = &buf;
3060    addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3061
3062    return 0;
3063}
3064EOF
3065
3066if test "$rdma" = "yes" ; then
3067    case "$pvrdma" in
3068    "")
3069        if compile_prog "" ""; then
3070            pvrdma="yes"
3071        else
3072            pvrdma="no"
3073        fi
3074        ;;
3075    "yes")
3076        if ! compile_prog "" ""; then
3077            error_exit "PVRDMA is not supported since mremap is not implemented"
3078        fi
3079        pvrdma="yes"
3080        ;;
3081    "no")
3082        pvrdma="no"
3083        ;;
3084    esac
3085else
3086    if test "$pvrdma" = "yes" ; then
3087        error_exit "PVRDMA requires rdma suppport"
3088    fi
3089    pvrdma="no"
3090fi
3091
3092##########################################
3093# VNC SASL detection
3094if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
3095  cat > $TMPC <<EOF
3096#include <sasl/sasl.h>
3097#include <stdio.h>
3098int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3099EOF
3100  # Assuming Cyrus-SASL installed in /usr prefix
3101  vnc_sasl_cflags=""
3102  vnc_sasl_libs="-lsasl2"
3103  if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3104    vnc_sasl=yes
3105    libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3106    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3107  else
3108    if test "$vnc_sasl" = "yes" ; then
3109      feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3110    fi
3111    vnc_sasl=no
3112  fi
3113fi
3114
3115##########################################
3116# VNC JPEG detection
3117if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
3118cat > $TMPC <<EOF
3119#include <stdio.h>
3120#include <jpeglib.h>
3121int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3122EOF
3123    vnc_jpeg_cflags=""
3124    vnc_jpeg_libs="-ljpeg"
3125  if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3126    vnc_jpeg=yes
3127    libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3128    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3129  else
3130    if test "$vnc_jpeg" = "yes" ; then
3131      feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3132    fi
3133    vnc_jpeg=no
3134  fi
3135fi
3136
3137##########################################
3138# VNC PNG detection
3139if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
3140cat > $TMPC <<EOF
3141//#include <stdio.h>
3142#include <png.h>
3143#include <stddef.h>
3144int main(void) {
3145    png_structp png_ptr;
3146    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3147    return png_ptr != 0;
3148}
3149EOF
3150  if $pkg_config libpng --exists; then
3151    vnc_png_cflags=$($pkg_config libpng --cflags)
3152    vnc_png_libs=$($pkg_config libpng --libs)
3153  else
3154    vnc_png_cflags=""
3155    vnc_png_libs="-lpng"
3156  fi
3157  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3158    vnc_png=yes
3159    libs_softmmu="$vnc_png_libs $libs_softmmu"
3160    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3161  else
3162    if test "$vnc_png" = "yes" ; then
3163      feature_not_found "vnc-png" "Install libpng devel"
3164    fi
3165    vnc_png=no
3166  fi
3167fi
3168
3169##########################################
3170# xkbcommon probe
3171if test "$xkbcommon" != "no" ; then
3172  if $pkg_config xkbcommon --exists; then
3173    xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3174    xkbcommon_libs=$($pkg_config xkbcommon --libs)
3175    xkbcommon=yes
3176  else
3177    if test "$xkbcommon" = "yes" ; then
3178      feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3179    fi
3180    xkbcommon=no
3181  fi
3182fi
3183
3184##########################################
3185# fnmatch() probe, used for ACL routines
3186fnmatch="no"
3187cat > $TMPC << EOF
3188#include <fnmatch.h>
3189int main(void)
3190{
3191    fnmatch("foo", "foo", 0);
3192    return 0;
3193}
3194EOF
3195if compile_prog "" "" ; then
3196   fnmatch="yes"
3197fi
3198
3199##########################################
3200# xfsctl() probe, used for file-posix.c
3201if test "$xfs" != "no" ; then
3202  cat > $TMPC << EOF
3203#include <stddef.h>  /* NULL */
3204#include <xfs/xfs.h>
3205int main(void)
3206{
3207    xfsctl(NULL, 0, 0, NULL);
3208    return 0;
3209}
3210EOF
3211  if compile_prog "" "" ; then
3212    xfs="yes"
3213  else
3214    if test "$xfs" = "yes" ; then
3215      feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3216    fi
3217    xfs=no
3218  fi
3219fi
3220
3221##########################################
3222# vde libraries probe
3223if test "$vde" != "no" ; then
3224  vde_libs="-lvdeplug"
3225  cat > $TMPC << EOF
3226#include <libvdeplug.h>
3227int main(void)
3228{
3229    struct vde_open_args a = {0, 0, 0};
3230    char s[] = "";
3231    vde_open(s, s, &a);
3232    return 0;
3233}
3234EOF
3235  if compile_prog "" "$vde_libs" ; then
3236    vde=yes
3237  else
3238    if test "$vde" = "yes" ; then
3239      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3240    fi
3241    vde=no
3242  fi
3243fi
3244
3245##########################################
3246# netmap support probe
3247# Apart from looking for netmap headers, we make sure that the host API version
3248# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3249# a minor/major version number. Minor new features will be marked with values up
3250# to 15, and if something happens that requires a change to the backend we will
3251# move above 15, submit the backend fixes and modify this two bounds.
3252if test "$netmap" != "no" ; then
3253  cat > $TMPC << EOF
3254#include <inttypes.h>
3255#include <net/if.h>
3256#include <net/netmap.h>
3257#include <net/netmap_user.h>
3258#if (NETMAP_API < 11) || (NETMAP_API > 15)
3259#error
3260#endif
3261int main(void) { return 0; }
3262EOF
3263  if compile_prog "" "" ; then
3264    netmap=yes
3265  else
3266    if test "$netmap" = "yes" ; then
3267      feature_not_found "netmap"
3268    fi
3269    netmap=no
3270  fi
3271fi
3272
3273##########################################
3274# libcap-ng library probe
3275if test "$cap_ng" != "no" ; then
3276  cap_libs="-lcap-ng"
3277  cat > $TMPC << EOF
3278#include <cap-ng.h>
3279int main(void)
3280{
3281    capng_capability_to_name(CAPNG_EFFECTIVE);
3282    return 0;
3283}
3284EOF
3285  if compile_prog "" "$cap_libs" ; then
3286    cap_ng=yes
3287    libs_tools="$cap_libs $libs_tools"
3288  else
3289    if test "$cap_ng" = "yes" ; then
3290      feature_not_found "cap_ng" "Install libcap-ng devel"
3291    fi
3292    cap_ng=no
3293  fi
3294fi
3295
3296##########################################
3297# Sound support libraries probe
3298
3299audio_drv_probe()
3300{
3301    drv=$1
3302    hdr=$2
3303    lib=$3
3304    exp=$4
3305    cfl=$5
3306        cat > $TMPC << EOF
3307#include <$hdr>
3308int main(void) { $exp }
3309EOF
3310    if compile_prog "$cfl" "$lib" ; then
3311        :
3312    else
3313        error_exit "$drv check failed" \
3314            "Make sure to have the $drv libs and headers installed."
3315    fi
3316}
3317
3318audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3319for drv in $audio_drv_list; do
3320    case $drv in
3321    alsa)
3322    audio_drv_probe $drv alsa/asoundlib.h -lasound \
3323        "return snd_pcm_close((snd_pcm_t *)0);"
3324    alsa_libs="-lasound"
3325    ;;
3326
3327    pa)
3328    audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3329        "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3330    pulse_libs="-lpulse"
3331    audio_pt_int="yes"
3332    ;;
3333
3334    sdl)
3335    if test "$sdl" = "no"; then
3336        error_exit "sdl not found or disabled, can not use sdl audio driver"
3337    fi
3338    ;;
3339
3340    coreaudio)
3341      coreaudio_libs="-framework CoreAudio"
3342    ;;
3343
3344    dsound)
3345      dsound_libs="-lole32 -ldxguid"
3346      audio_win_int="yes"
3347    ;;
3348
3349    oss)
3350      oss_libs="$oss_lib"
3351    ;;
3352
3353    wav)
3354    # XXX: Probes for CoreAudio, DirectSound
3355    ;;
3356
3357    *)
3358    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3359        error_exit "Unknown driver '$drv' selected" \
3360            "Possible drivers are: $audio_possible_drivers"
3361    }
3362    ;;
3363    esac
3364done
3365
3366##########################################
3367# BrlAPI probe
3368
3369if test "$brlapi" != "no" ; then
3370  brlapi_libs="-lbrlapi"
3371  cat > $TMPC << EOF
3372#include <brlapi.h>
3373#include <stddef.h>
3374int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3375EOF
3376  if compile_prog "" "$brlapi_libs" ; then
3377    brlapi=yes
3378  else
3379    if test "$brlapi" = "yes" ; then
3380      feature_not_found "brlapi" "Install brlapi devel"
3381    fi
3382    brlapi=no
3383  fi
3384fi
3385
3386##########################################
3387# curses probe
3388if test "$curses" != "no" ; then
3389  if test "$mingw32" = "yes" ; then
3390    curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3391    curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3392  else
3393    curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3394    curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3395  fi
3396  curses_found=no
3397  cat > $TMPC << EOF
3398#include <locale.h>
3399#include <curses.h>
3400#include <wchar.h>
3401int main(void) {
3402  wchar_t wch = L'w';
3403  setlocale(LC_ALL, "");
3404  resize_term(0, 0);
3405  addwstr(L"wide chars\n");
3406  addnwstr(&wch, 1);
3407  add_wch(WACS_DEGREE);
3408  return 0;
3409}
3410EOF
3411  IFS=:
3412  for curses_inc in $curses_inc_list; do
3413    # Make sure we get the wide character prototypes
3414    curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3415    IFS=:
3416    for curses_lib in $curses_lib_list; do
3417      unset IFS
3418      if compile_prog "$curses_inc" "$curses_lib" ; then
3419        curses_found=yes
3420        break
3421      fi
3422    done
3423    if test "$curses_found" = yes ; then
3424      break
3425    fi
3426  done
3427  unset IFS
3428  if test "$curses_found" = "yes" ; then
3429    curses=yes
3430  else
3431    if test "$curses" = "yes" ; then
3432      feature_not_found "curses" "Install ncurses devel"
3433    fi
3434    curses=no
3435  fi
3436fi
3437
3438##########################################
3439# curl probe
3440if test "$curl" != "no" ; then
3441  if $pkg_config libcurl --exists; then
3442    curlconfig="$pkg_config libcurl"
3443  else
3444    curlconfig=curl-config
3445  fi
3446  cat > $TMPC << EOF
3447#include <curl/curl.h>
3448int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3449EOF
3450  curl_cflags=$($curlconfig --cflags 2>/dev/null)
3451  curl_libs=$($curlconfig --libs 2>/dev/null)
3452  if compile_prog "$curl_cflags" "$curl_libs" ; then
3453    curl=yes
3454  else
3455    if test "$curl" = "yes" ; then
3456      feature_not_found "curl" "Install libcurl devel"
3457    fi
3458    curl=no
3459  fi
3460fi # test "$curl"
3461
3462##########################################
3463# bluez support probe
3464if test "$bluez" != "no" ; then
3465  cat > $TMPC << EOF
3466#include <bluetooth/bluetooth.h>
3467int main(void) { return bt_error(0); }
3468EOF
3469  bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3470  bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3471  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3472    bluez=yes
3473    libs_softmmu="$bluez_libs $libs_softmmu"
3474  else
3475    if test "$bluez" = "yes" ; then
3476      feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3477    fi
3478    bluez="no"
3479  fi
3480fi
3481
3482##########################################
3483# glib support probe
3484
3485glib_req_ver=2.40
3486glib_modules=gthread-2.0
3487if test "$modules" = yes; then
3488    glib_modules="$glib_modules gmodule-export-2.0"
3489fi
3490
3491# This workaround is required due to a bug in pkg-config file for glib as it
3492# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3493
3494if test "$static" = yes -a "$mingw32" = yes; then
3495    QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3496fi
3497
3498for i in $glib_modules; do
3499    if $pkg_config --atleast-version=$glib_req_ver $i; then
3500        glib_cflags=$($pkg_config --cflags $i)
3501        glib_libs=$($pkg_config --libs $i)
3502        QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3503        LIBS="$glib_libs $LIBS"
3504        libs_qga="$glib_libs $libs_qga"
3505    else
3506        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3507    fi
3508done
3509
3510# Sanity check that the current size_t matches the
3511# size that glib thinks it should be. This catches
3512# problems on multi-arch where people try to build
3513# 32-bit QEMU while pointing at 64-bit glib headers
3514cat > $TMPC <<EOF
3515#include <glib.h>
3516#include <unistd.h>
3517
3518#define QEMU_BUILD_BUG_ON(x) \
3519  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3520
3521int main(void) {
3522   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3523   return 0;
3524}
3525EOF
3526
3527if ! compile_prog "$CFLAGS" "$LIBS" ; then
3528    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3529               "You probably need to set PKG_CONFIG_LIBDIR"\
3530	       "to point to the right pkg-config files for your"\
3531	       "build target"
3532fi
3533
3534# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3535cat > $TMPC << EOF
3536#include <glib.h>
3537int main(void) { return 0; }
3538EOF
3539if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3540    if cc_has_warning_flag "-Wno-unknown-attributes"; then
3541        glib_cflags="-Wno-unknown-attributes $glib_cflags"
3542        CFLAGS="-Wno-unknown-attributes $CFLAGS"
3543    fi
3544fi
3545
3546##########################################
3547# SHA command probe for modules
3548if test "$modules" = yes; then
3549    shacmd_probe="sha1sum sha1 shasum"
3550    for c in $shacmd_probe; do
3551        if has $c; then
3552            shacmd="$c"
3553            break
3554        fi
3555    done
3556    if test "$shacmd" = ""; then
3557        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3558    fi
3559fi
3560
3561##########################################
3562# pixman support probe
3563
3564if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3565  pixman_cflags=
3566  pixman_libs=
3567elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3568  pixman_cflags=$($pkg_config --cflags pixman-1)
3569  pixman_libs=$($pkg_config --libs pixman-1)
3570else
3571  error_exit "pixman >= 0.21.8 not present." \
3572      "Please install the pixman devel package."
3573fi
3574
3575##########################################
3576# libmpathpersist probe
3577
3578if test "$mpath" != "no" ; then
3579  # probe for the new API
3580  cat > $TMPC <<EOF
3581#include <libudev.h>
3582#include <mpath_persist.h>
3583unsigned mpath_mx_alloc_len = 1024;
3584int logsink;
3585static struct config *multipath_conf;
3586extern struct udev *udev;
3587extern struct config *get_multipath_config(void);
3588extern void put_multipath_config(struct config *conf);
3589struct udev *udev;
3590struct config *get_multipath_config(void) { return multipath_conf; }
3591void put_multipath_config(struct config *conf) { }
3592
3593int main(void) {
3594    udev = udev_new();
3595    multipath_conf = mpath_lib_init();
3596    return 0;
3597}
3598EOF
3599  if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3600    mpathpersist=yes
3601    mpathpersist_new_api=yes
3602  else
3603    # probe for the old API
3604    cat > $TMPC <<EOF
3605#include <libudev.h>
3606#include <mpath_persist.h>
3607unsigned mpath_mx_alloc_len = 1024;
3608int logsink;
3609int main(void) {
3610    struct udev *udev = udev_new();
3611    mpath_lib_init(udev);
3612    return 0;
3613}
3614EOF
3615    if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3616      mpathpersist=yes
3617      mpathpersist_new_api=no
3618    else
3619      mpathpersist=no
3620    fi
3621  fi
3622else
3623  mpathpersist=no
3624fi
3625
3626##########################################
3627# libcap probe
3628
3629if test "$cap" != "no" ; then
3630  cat > $TMPC <<EOF
3631#include <stdio.h>
3632#include <sys/capability.h>
3633int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3634EOF
3635  if compile_prog "" "-lcap" ; then
3636    cap=yes
3637  else
3638    cap=no
3639  fi
3640fi
3641
3642##########################################
3643# pthread probe
3644PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3645
3646pthread=no
3647cat > $TMPC << EOF
3648#include <pthread.h>
3649static void *f(void *p) { return NULL; }
3650int main(void) {
3651  pthread_t thread;
3652  pthread_create(&thread, 0, f, 0);
3653  return 0;
3654}
3655EOF
3656if compile_prog "" "" ; then
3657  pthread=yes
3658else
3659  for pthread_lib in $PTHREADLIBS_LIST; do
3660    if compile_prog "" "$pthread_lib" ; then
3661      pthread=yes
3662      found=no
3663      for lib_entry in $LIBS; do
3664        if test "$lib_entry" = "$pthread_lib"; then
3665          found=yes
3666          break
3667        fi
3668      done
3669      if test "$found" = "no"; then
3670        LIBS="$pthread_lib $LIBS"
3671        libs_qga="$pthread_lib $libs_qga"
3672      fi
3673      PTHREAD_LIB="$pthread_lib"
3674      break
3675    fi
3676  done
3677fi
3678
3679if test "$mingw32" != yes -a "$pthread" = no; then
3680  error_exit "pthread check failed" \
3681      "Make sure to have the pthread libs and headers installed."
3682fi
3683
3684# check for pthread_setname_np
3685pthread_setname_np=no
3686cat > $TMPC << EOF
3687#include <pthread.h>
3688
3689static void *f(void *p) { return NULL; }
3690int main(void)
3691{
3692    pthread_t thread;
3693    pthread_create(&thread, 0, f, 0);
3694    pthread_setname_np(thread, "QEMU");
3695    return 0;
3696}
3697EOF
3698if compile_prog "" "$pthread_lib" ; then
3699  pthread_setname_np=yes
3700fi
3701
3702##########################################
3703# rbd probe
3704if test "$rbd" != "no" ; then
3705  cat > $TMPC <<EOF
3706#include <stdio.h>
3707#include <rbd/librbd.h>
3708int main(void) {
3709    rados_t cluster;
3710    rados_create(&cluster, NULL);
3711    return 0;
3712}
3713EOF
3714  rbd_libs="-lrbd -lrados"
3715  if compile_prog "" "$rbd_libs" ; then
3716    rbd=yes
3717  else
3718    if test "$rbd" = "yes" ; then
3719      feature_not_found "rados block device" "Install librbd/ceph devel"
3720    fi
3721    rbd=no
3722  fi
3723fi
3724
3725##########################################
3726# libssh2 probe
3727min_libssh2_version=1.2.8
3728if test "$libssh2" != "no" ; then
3729  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3730    libssh2_cflags=$($pkg_config libssh2 --cflags)
3731    libssh2_libs=$($pkg_config libssh2 --libs)
3732    libssh2=yes
3733  else
3734    if test "$libssh2" = "yes" ; then
3735      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3736    fi
3737    libssh2=no
3738  fi
3739fi
3740
3741##########################################
3742# libssh2_sftp_fsync probe
3743
3744if test "$libssh2" = "yes"; then
3745  cat > $TMPC <<EOF
3746#include <stdio.h>
3747#include <libssh2.h>
3748#include <libssh2_sftp.h>
3749int main(void) {
3750    LIBSSH2_SESSION *session;
3751    LIBSSH2_SFTP *sftp;
3752    LIBSSH2_SFTP_HANDLE *sftp_handle;
3753    session = libssh2_session_init ();
3754    sftp = libssh2_sftp_init (session);
3755    sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3756    libssh2_sftp_fsync (sftp_handle);
3757    return 0;
3758}
3759EOF
3760  # libssh2_cflags/libssh2_libs defined in previous test.
3761  if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3762    QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3763  fi
3764fi
3765
3766##########################################
3767# linux-aio probe
3768
3769if test "$linux_aio" != "no" ; then
3770  cat > $TMPC <<EOF
3771#include <libaio.h>
3772#include <sys/eventfd.h>
3773#include <stddef.h>
3774int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3775EOF
3776  if compile_prog "" "-laio" ; then
3777    linux_aio=yes
3778  else
3779    if test "$linux_aio" = "yes" ; then
3780      feature_not_found "linux AIO" "Install libaio devel"
3781    fi
3782    linux_aio=no
3783  fi
3784fi
3785
3786##########################################
3787# TPM passthrough is only on x86 Linux
3788
3789if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3790  tpm_passthrough=$tpm
3791else
3792  tpm_passthrough=no
3793fi
3794
3795# TPM emulator is for all posix systems
3796if test "$mingw32" != "yes"; then
3797  tpm_emulator=$tpm
3798else
3799  tpm_emulator=no
3800fi
3801##########################################
3802# attr probe
3803
3804if test "$attr" != "no" ; then
3805  cat > $TMPC <<EOF
3806#include <stdio.h>
3807#include <sys/types.h>
3808#ifdef CONFIG_LIBATTR
3809#include <attr/xattr.h>
3810#else
3811#include <sys/xattr.h>
3812#endif
3813int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3814EOF
3815  if compile_prog "" "" ; then
3816    attr=yes
3817  # Older distros have <attr/xattr.h>, and need -lattr:
3818  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3819    attr=yes
3820    LIBS="-lattr $LIBS"
3821    libattr=yes
3822  else
3823    if test "$attr" = "yes" ; then
3824      feature_not_found "ATTR" "Install libc6 or libattr devel"
3825    fi
3826    attr=no
3827  fi
3828fi
3829
3830##########################################
3831# iovec probe
3832cat > $TMPC <<EOF
3833#include <sys/types.h>
3834#include <sys/uio.h>
3835#include <unistd.h>
3836int main(void) { return sizeof(struct iovec); }
3837EOF
3838iovec=no
3839if compile_prog "" "" ; then
3840  iovec=yes
3841fi
3842
3843##########################################
3844# preadv probe
3845cat > $TMPC <<EOF
3846#include <sys/types.h>
3847#include <sys/uio.h>
3848#include <unistd.h>
3849int main(void) { return preadv(0, 0, 0, 0); }
3850EOF
3851preadv=no
3852if compile_prog "" "" ; then
3853  preadv=yes
3854fi
3855
3856##########################################
3857# fdt probe
3858# fdt support is mandatory for at least some target architectures,
3859# so insist on it if we're building those system emulators.
3860fdt_required=no
3861for target in $target_list; do
3862  case $target in
3863    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
3864      fdt_required=yes
3865    ;;
3866  esac
3867done
3868
3869if test "$fdt_required" = "yes"; then
3870  if test "$fdt" = "no"; then
3871    error_exit "fdt disabled but some requested targets require it." \
3872      "You can turn off fdt only if you also disable all the system emulation" \
3873      "targets which need it (by specifying a cut down --target-list)."
3874  fi
3875  fdt=yes
3876fi
3877
3878if test "$fdt" != "no" ; then
3879  fdt_libs="-lfdt"
3880  # explicitly check for libfdt_env.h as it is missing in some stable installs
3881  # and test for required functions to make sure we are on a version >= 1.4.2
3882  cat > $TMPC << EOF
3883#include <libfdt.h>
3884#include <libfdt_env.h>
3885int main(void) { fdt_first_subnode(0, 0); return 0; }
3886EOF
3887  if compile_prog "" "$fdt_libs" ; then
3888    # system DTC is good - use it
3889    fdt=system
3890  else
3891      # have GIT checkout, so activate dtc submodule
3892      if test -e "${source_path}/.git" ; then
3893          git_submodules="${git_submodules} dtc"
3894      fi
3895      if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3896          fdt=git
3897          mkdir -p dtc
3898          if [ "$pwd_is_source_path" != "y" ] ; then
3899              symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3900              symlink "$source_path/dtc/scripts" "dtc/scripts"
3901          fi
3902          fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3903          fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3904          fdt_libs="$fdt_libs"
3905      elif test "$fdt" = "yes" ; then
3906          # Not a git build & no libfdt found, prompt for system install
3907          error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3908                     "Please install the DTC (libfdt) devel package"
3909      else
3910          # don't have and don't want
3911          fdt_libs=
3912          fdt=no
3913      fi
3914  fi
3915fi
3916
3917libs_softmmu="$libs_softmmu $fdt_libs"
3918
3919##########################################
3920# opengl probe (for sdl2, gtk, milkymist-tmu2)
3921
3922if test "$opengl" != "no" ; then
3923  opengl_pkgs="epoxy gbm"
3924  if $pkg_config $opengl_pkgs; then
3925    opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3926    opengl_libs="$($pkg_config --libs $opengl_pkgs)"
3927    opengl=yes
3928    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3929        gtk_gl="yes"
3930    fi
3931    QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3932  else
3933    if test "$opengl" = "yes" ; then
3934      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3935    fi
3936    opengl_cflags=""
3937    opengl_libs=""
3938    opengl=no
3939  fi
3940fi
3941
3942if test "$opengl" = "yes"; then
3943  cat > $TMPC << EOF
3944#include <epoxy/egl.h>
3945#ifndef EGL_MESA_image_dma_buf_export
3946# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3947#endif
3948int main(void) { return 0; }
3949EOF
3950  if compile_prog "" "" ; then
3951    opengl_dmabuf=yes
3952  fi
3953fi
3954
3955##########################################
3956# libxml2 probe
3957if test "$libxml2" != "no" ; then
3958    if $pkg_config --exists libxml-2.0; then
3959        libxml2="yes"
3960        libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3961        libxml2_libs=$($pkg_config --libs libxml-2.0)
3962    else
3963        if test "$libxml2" = "yes"; then
3964            feature_not_found "libxml2" "Install libxml2 devel"
3965        fi
3966        libxml2="no"
3967    fi
3968fi
3969
3970##########################################
3971# glusterfs probe
3972if test "$glusterfs" != "no" ; then
3973  if $pkg_config --atleast-version=3 glusterfs-api; then
3974    glusterfs="yes"
3975    glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3976    glusterfs_libs=$($pkg_config --libs glusterfs-api)
3977    if $pkg_config --atleast-version=4 glusterfs-api; then
3978      glusterfs_xlator_opt="yes"
3979    fi
3980    if $pkg_config --atleast-version=5 glusterfs-api; then
3981      glusterfs_discard="yes"
3982    fi
3983    if $pkg_config --atleast-version=6 glusterfs-api; then
3984      glusterfs_fallocate="yes"
3985      glusterfs_zerofill="yes"
3986    fi
3987  else
3988    if test "$glusterfs" = "yes" ; then
3989      feature_not_found "GlusterFS backend support" \
3990          "Install glusterfs-api devel >= 3"
3991    fi
3992    glusterfs="no"
3993  fi
3994fi
3995
3996# Check for inotify functions when we are building linux-user
3997# emulator.  This is done because older glibc versions don't
3998# have syscall stubs for these implemented.  In that case we
3999# don't provide them even if kernel supports them.
4000#
4001inotify=no
4002cat > $TMPC << EOF
4003#include <sys/inotify.h>
4004
4005int
4006main(void)
4007{
4008	/* try to start inotify */
4009	return inotify_init();
4010}
4011EOF
4012if compile_prog "" "" ; then
4013  inotify=yes
4014fi
4015
4016inotify1=no
4017cat > $TMPC << EOF
4018#include <sys/inotify.h>
4019
4020int
4021main(void)
4022{
4023    /* try to start inotify */
4024    return inotify_init1(0);
4025}
4026EOF
4027if compile_prog "" "" ; then
4028  inotify1=yes
4029fi
4030
4031# check if pipe2 is there
4032pipe2=no
4033cat > $TMPC << EOF
4034#include <unistd.h>
4035#include <fcntl.h>
4036
4037int main(void)
4038{
4039    int pipefd[2];
4040    return pipe2(pipefd, O_CLOEXEC);
4041}
4042EOF
4043if compile_prog "" "" ; then
4044  pipe2=yes
4045fi
4046
4047# check if accept4 is there
4048accept4=no
4049cat > $TMPC << EOF
4050#include <sys/socket.h>
4051#include <stddef.h>
4052
4053int main(void)
4054{
4055    accept4(0, NULL, NULL, SOCK_CLOEXEC);
4056    return 0;
4057}
4058EOF
4059if compile_prog "" "" ; then
4060  accept4=yes
4061fi
4062
4063# check if tee/splice is there. vmsplice was added same time.
4064splice=no
4065cat > $TMPC << EOF
4066#include <unistd.h>
4067#include <fcntl.h>
4068#include <limits.h>
4069
4070int main(void)
4071{
4072    int len, fd = 0;
4073    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4074    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4075    return 0;
4076}
4077EOF
4078if compile_prog "" "" ; then
4079  splice=yes
4080fi
4081
4082##########################################
4083# libnuma probe
4084
4085if test "$numa" != "no" ; then
4086  cat > $TMPC << EOF
4087#include <numa.h>
4088int main(void) { return numa_available(); }
4089EOF
4090
4091  if compile_prog "" "-lnuma" ; then
4092    numa=yes
4093    libs_softmmu="-lnuma $libs_softmmu"
4094  else
4095    if test "$numa" = "yes" ; then
4096      feature_not_found "numa" "install numactl devel"
4097    fi
4098    numa=no
4099  fi
4100fi
4101
4102if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4103    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4104    exit 1
4105fi
4106
4107# Even if malloc_trim() is available, these non-libc memory allocators
4108# do not support it.
4109if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4110    if test "$malloc_trim" = "yes" ; then
4111        echo "Disabling malloc_trim with non-libc memory allocator"
4112    fi
4113    malloc_trim="no"
4114fi
4115
4116#######################################
4117# malloc_trim
4118
4119if test "$malloc_trim" != "no" ; then
4120    cat > $TMPC << EOF
4121#include <malloc.h>
4122int main(void) { malloc_trim(0); return 0; }
4123EOF
4124    if compile_prog "" "" ; then
4125        malloc_trim="yes"
4126    else
4127        malloc_trim="no"
4128    fi
4129fi
4130
4131##########################################
4132# tcmalloc probe
4133
4134if test "$tcmalloc" = "yes" ; then
4135  cat > $TMPC << EOF
4136#include <stdlib.h>
4137int main(void) { malloc(1); return 0; }
4138EOF
4139
4140  if compile_prog "" "-ltcmalloc" ; then
4141    LIBS="-ltcmalloc $LIBS"
4142  else
4143    feature_not_found "tcmalloc" "install gperftools devel"
4144  fi
4145fi
4146
4147##########################################
4148# jemalloc probe
4149
4150if test "$jemalloc" = "yes" ; then
4151  cat > $TMPC << EOF
4152#include <stdlib.h>
4153int main(void) { malloc(1); return 0; }
4154EOF
4155
4156  if compile_prog "" "-ljemalloc" ; then
4157    LIBS="-ljemalloc $LIBS"
4158  else
4159    feature_not_found "jemalloc" "install jemalloc devel"
4160  fi
4161fi
4162
4163##########################################
4164# signalfd probe
4165signalfd="no"
4166cat > $TMPC << EOF
4167#include <unistd.h>
4168#include <sys/syscall.h>
4169#include <signal.h>
4170int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4171EOF
4172
4173if compile_prog "" "" ; then
4174  signalfd=yes
4175fi
4176
4177# check if eventfd is supported
4178eventfd=no
4179cat > $TMPC << EOF
4180#include <sys/eventfd.h>
4181
4182int main(void)
4183{
4184    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4185}
4186EOF
4187if compile_prog "" "" ; then
4188  eventfd=yes
4189fi
4190
4191# check if memfd is supported
4192memfd=no
4193cat > $TMPC << EOF
4194#include <sys/mman.h>
4195
4196int main(void)
4197{
4198    return memfd_create("foo", MFD_ALLOW_SEALING);
4199}
4200EOF
4201if compile_prog "" "" ; then
4202  memfd=yes
4203fi
4204
4205
4206
4207# check for fallocate
4208fallocate=no
4209cat > $TMPC << EOF
4210#include <fcntl.h>
4211
4212int main(void)
4213{
4214    fallocate(0, 0, 0, 0);
4215    return 0;
4216}
4217EOF
4218if compile_prog "" "" ; then
4219  fallocate=yes
4220fi
4221
4222# check for fallocate hole punching
4223fallocate_punch_hole=no
4224cat > $TMPC << EOF
4225#include <fcntl.h>
4226#include <linux/falloc.h>
4227
4228int main(void)
4229{
4230    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4231    return 0;
4232}
4233EOF
4234if compile_prog "" "" ; then
4235  fallocate_punch_hole=yes
4236fi
4237
4238# check that fallocate supports range zeroing inside the file
4239fallocate_zero_range=no
4240cat > $TMPC << EOF
4241#include <fcntl.h>
4242#include <linux/falloc.h>
4243
4244int main(void)
4245{
4246    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4247    return 0;
4248}
4249EOF
4250if compile_prog "" "" ; then
4251  fallocate_zero_range=yes
4252fi
4253
4254# check for posix_fallocate
4255posix_fallocate=no
4256cat > $TMPC << EOF
4257#include <fcntl.h>
4258
4259int main(void)
4260{
4261    posix_fallocate(0, 0, 0);
4262    return 0;
4263}
4264EOF
4265if compile_prog "" "" ; then
4266    posix_fallocate=yes
4267fi
4268
4269# check for sync_file_range
4270sync_file_range=no
4271cat > $TMPC << EOF
4272#include <fcntl.h>
4273
4274int main(void)
4275{
4276    sync_file_range(0, 0, 0, 0);
4277    return 0;
4278}
4279EOF
4280if compile_prog "" "" ; then
4281  sync_file_range=yes
4282fi
4283
4284# check for linux/fiemap.h and FS_IOC_FIEMAP
4285fiemap=no
4286cat > $TMPC << EOF
4287#include <sys/ioctl.h>
4288#include <linux/fs.h>
4289#include <linux/fiemap.h>
4290
4291int main(void)
4292{
4293    ioctl(0, FS_IOC_FIEMAP, 0);
4294    return 0;
4295}
4296EOF
4297if compile_prog "" "" ; then
4298  fiemap=yes
4299fi
4300
4301# check for dup3
4302dup3=no
4303cat > $TMPC << EOF
4304#include <unistd.h>
4305
4306int main(void)
4307{
4308    dup3(0, 0, 0);
4309    return 0;
4310}
4311EOF
4312if compile_prog "" "" ; then
4313  dup3=yes
4314fi
4315
4316# check for ppoll support
4317ppoll=no
4318cat > $TMPC << EOF
4319#include <poll.h>
4320
4321int main(void)
4322{
4323    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4324    ppoll(&pfd, 1, 0, 0);
4325    return 0;
4326}
4327EOF
4328if compile_prog "" "" ; then
4329  ppoll=yes
4330fi
4331
4332# check for prctl(PR_SET_TIMERSLACK , ... ) support
4333prctl_pr_set_timerslack=no
4334cat > $TMPC << EOF
4335#include <sys/prctl.h>
4336
4337int main(void)
4338{
4339    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4340    return 0;
4341}
4342EOF
4343if compile_prog "" "" ; then
4344  prctl_pr_set_timerslack=yes
4345fi
4346
4347# check for epoll support
4348epoll=no
4349cat > $TMPC << EOF
4350#include <sys/epoll.h>
4351
4352int main(void)
4353{
4354    epoll_create(0);
4355    return 0;
4356}
4357EOF
4358if compile_prog "" "" ; then
4359  epoll=yes
4360fi
4361
4362# epoll_create1 is a later addition
4363# so we must check separately for its presence
4364epoll_create1=no
4365cat > $TMPC << EOF
4366#include <sys/epoll.h>
4367
4368int main(void)
4369{
4370    /* Note that we use epoll_create1 as a value, not as
4371     * a function being called. This is necessary so that on
4372     * old SPARC glibc versions where the function was present in
4373     * the library but not declared in the header file we will
4374     * fail the configure check. (Otherwise we will get a compiler
4375     * warning but not an error, and will proceed to fail the
4376     * qemu compile where we compile with -Werror.)
4377     */
4378    return (int)(uintptr_t)&epoll_create1;
4379}
4380EOF
4381if compile_prog "" "" ; then
4382  epoll_create1=yes
4383fi
4384
4385# check for sendfile support
4386sendfile=no
4387cat > $TMPC << EOF
4388#include <sys/sendfile.h>
4389
4390int main(void)
4391{
4392    return sendfile(0, 0, 0, 0);
4393}
4394EOF
4395if compile_prog "" "" ; then
4396  sendfile=yes
4397fi
4398
4399# check for timerfd support (glibc 2.8 and newer)
4400timerfd=no
4401cat > $TMPC << EOF
4402#include <sys/timerfd.h>
4403
4404int main(void)
4405{
4406    return(timerfd_create(CLOCK_REALTIME, 0));
4407}
4408EOF
4409if compile_prog "" "" ; then
4410  timerfd=yes
4411fi
4412
4413# check for setns and unshare support
4414setns=no
4415cat > $TMPC << EOF
4416#include <sched.h>
4417
4418int main(void)
4419{
4420    int ret;
4421    ret = setns(0, 0);
4422    ret = unshare(0);
4423    return ret;
4424}
4425EOF
4426if compile_prog "" "" ; then
4427  setns=yes
4428fi
4429
4430# clock_adjtime probe
4431clock_adjtime=no
4432cat > $TMPC <<EOF
4433#include <time.h>
4434
4435int main(void)
4436{
4437    return clock_adjtime(0, 0);
4438}
4439EOF
4440clock_adjtime=no
4441if compile_prog "" "" ; then
4442  clock_adjtime=yes
4443fi
4444
4445# syncfs probe
4446syncfs=no
4447cat > $TMPC <<EOF
4448#include <unistd.h>
4449
4450int main(void)
4451{
4452    return syncfs(0);
4453}
4454EOF
4455syncfs=no
4456if compile_prog "" "" ; then
4457  syncfs=yes
4458fi
4459
4460# Check if tools are available to build documentation.
4461if test "$docs" != "no" ; then
4462  if has makeinfo && has pod2man; then
4463    docs=yes
4464  else
4465    if test "$docs" = "yes" ; then
4466      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4467    fi
4468    docs=no
4469  fi
4470fi
4471
4472# Search for bswap_32 function
4473byteswap_h=no
4474cat > $TMPC << EOF
4475#include <byteswap.h>
4476int main(void) { return bswap_32(0); }
4477EOF
4478if compile_prog "" "" ; then
4479  byteswap_h=yes
4480fi
4481
4482# Search for bswap32 function
4483bswap_h=no
4484cat > $TMPC << EOF
4485#include <sys/endian.h>
4486#include <sys/types.h>
4487#include <machine/bswap.h>
4488int main(void) { return bswap32(0); }
4489EOF
4490if compile_prog "" "" ; then
4491  bswap_h=yes
4492fi
4493
4494##########################################
4495# Do we have libiscsi >= 1.9.0
4496if test "$libiscsi" != "no" ; then
4497  if $pkg_config --atleast-version=1.9.0 libiscsi; then
4498    libiscsi="yes"
4499    libiscsi_cflags=$($pkg_config --cflags libiscsi)
4500    libiscsi_libs=$($pkg_config --libs libiscsi)
4501  else
4502    if test "$libiscsi" = "yes" ; then
4503      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4504    fi
4505    libiscsi="no"
4506  fi
4507fi
4508
4509##########################################
4510# Do we need libm
4511cat > $TMPC << EOF
4512#include <math.h>
4513int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4514EOF
4515if compile_prog "" "" ; then
4516  :
4517elif compile_prog "" "-lm" ; then
4518  LIBS="-lm $LIBS"
4519  libs_qga="-lm $libs_qga"
4520else
4521  error_exit "libm check failed"
4522fi
4523
4524##########################################
4525# Do we need librt
4526# uClibc provides 2 versions of clock_gettime(), one with realtime
4527# support and one without. This means that the clock_gettime() don't
4528# need -lrt. We still need it for timer_create() so we check for this
4529# function in addition.
4530cat > $TMPC <<EOF
4531#include <signal.h>
4532#include <time.h>
4533int main(void) {
4534  timer_create(CLOCK_REALTIME, NULL, NULL);
4535  return clock_gettime(CLOCK_REALTIME, NULL);
4536}
4537EOF
4538
4539if compile_prog "" "" ; then
4540  :
4541# we need pthread for static linking. use previous pthread test result
4542elif compile_prog "" "$pthread_lib -lrt" ; then
4543  LIBS="$LIBS -lrt"
4544  libs_qga="$libs_qga -lrt"
4545fi
4546
4547if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4548        "$haiku" != "yes" ; then
4549    libs_softmmu="-lutil $libs_softmmu"
4550fi
4551
4552##########################################
4553# spice probe
4554if test "$spice" != "no" ; then
4555  cat > $TMPC << EOF
4556#include <spice.h>
4557int main(void) { spice_server_new(); return 0; }
4558EOF
4559  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4560  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4561  if $pkg_config --atleast-version=0.12.0 spice-server && \
4562     $pkg_config --atleast-version=0.12.3 spice-protocol && \
4563     compile_prog "$spice_cflags" "$spice_libs" ; then
4564    spice="yes"
4565    libs_softmmu="$libs_softmmu $spice_libs"
4566    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4567    spice_protocol_version=$($pkg_config --modversion spice-protocol)
4568    spice_server_version=$($pkg_config --modversion spice-server)
4569  else
4570    if test "$spice" = "yes" ; then
4571      feature_not_found "spice" \
4572          "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4573    fi
4574    spice="no"
4575  fi
4576fi
4577
4578# check for smartcard support
4579if test "$smartcard" != "no"; then
4580    if $pkg_config --atleast-version=2.5.1 libcacard; then
4581        libcacard_cflags=$($pkg_config --cflags libcacard)
4582        libcacard_libs=$($pkg_config --libs libcacard)
4583        smartcard="yes"
4584    else
4585        if test "$smartcard" = "yes"; then
4586            feature_not_found "smartcard" "Install libcacard devel"
4587        fi
4588        smartcard="no"
4589    fi
4590fi
4591
4592# check for libusb
4593if test "$libusb" != "no" ; then
4594    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4595        libusb="yes"
4596        libusb_cflags=$($pkg_config --cflags libusb-1.0)
4597        libusb_libs=$($pkg_config --libs libusb-1.0)
4598    else
4599        if test "$libusb" = "yes"; then
4600            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4601        fi
4602        libusb="no"
4603    fi
4604fi
4605
4606# check for usbredirparser for usb network redirection support
4607if test "$usb_redir" != "no" ; then
4608    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4609        usb_redir="yes"
4610        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4611        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4612    else
4613        if test "$usb_redir" = "yes"; then
4614            feature_not_found "usb-redir" "Install usbredir devel"
4615        fi
4616        usb_redir="no"
4617    fi
4618fi
4619
4620##########################################
4621# check if we have VSS SDK headers for win
4622
4623if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4624  case "$vss_win32_sdk" in
4625    "")   vss_win32_include="-isystem $source_path" ;;
4626    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4627          # handle path with spaces. So we symlink the headers into ".sdk/vss".
4628          vss_win32_include="-isystem $source_path/.sdk/vss"
4629	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4630	  ;;
4631    *)    vss_win32_include="-isystem $vss_win32_sdk"
4632  esac
4633  cat > $TMPC << EOF
4634#define __MIDL_user_allocate_free_DEFINED__
4635#include <inc/win2003/vss.h>
4636int main(void) { return VSS_CTX_BACKUP; }
4637EOF
4638  if compile_prog "$vss_win32_include" "" ; then
4639    guest_agent_with_vss="yes"
4640    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4641    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4642    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4643  else
4644    if test "$vss_win32_sdk" != "" ; then
4645      echo "ERROR: Please download and install Microsoft VSS SDK:"
4646      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4647      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4648      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4649      echo "ERROR: The headers are extracted in the directory \`inc'."
4650      feature_not_found "VSS support"
4651    fi
4652    guest_agent_with_vss="no"
4653  fi
4654fi
4655
4656##########################################
4657# lookup Windows platform SDK (if not specified)
4658# The SDK is needed only to build .tlb (type library) file of guest agent
4659# VSS provider from the source. It is usually unnecessary because the
4660# pre-compiled .tlb file is included.
4661
4662if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4663  if test -z "$win_sdk"; then
4664    programfiles="$PROGRAMFILES"
4665    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4666    if test -n "$programfiles"; then
4667      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4668    else
4669      feature_not_found "Windows SDK"
4670    fi
4671  elif test "$win_sdk" = "no"; then
4672    win_sdk=""
4673  fi
4674fi
4675
4676##########################################
4677# check if mingw environment provides a recent ntddscsi.h
4678if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4679  cat > $TMPC << EOF
4680#include <windows.h>
4681#include <ntddscsi.h>
4682int main(void) {
4683#if !defined(IOCTL_SCSI_GET_ADDRESS)
4684#error Missing required ioctl definitions
4685#endif
4686  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4687  return addr.Lun;
4688}
4689EOF
4690  if compile_prog "" "" ; then
4691    guest_agent_ntddscsi=yes
4692    libs_qga="-lsetupapi $libs_qga"
4693  fi
4694fi
4695
4696##########################################
4697# virgl renderer probe
4698
4699if test "$virglrenderer" != "no" ; then
4700  cat > $TMPC << EOF
4701#include <virglrenderer.h>
4702int main(void) { virgl_renderer_poll(); return 0; }
4703EOF
4704  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4705  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4706  virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4707  if $pkg_config virglrenderer >/dev/null 2>&1 && \
4708     compile_prog "$virgl_cflags" "$virgl_libs" ; then
4709    virglrenderer="yes"
4710  else
4711    if test "$virglrenderer" = "yes" ; then
4712      feature_not_found "virglrenderer"
4713    fi
4714    virglrenderer="no"
4715  fi
4716fi
4717
4718##########################################
4719# capstone
4720
4721case "$capstone" in
4722  "" | yes)
4723    if $pkg_config capstone; then
4724      capstone=system
4725    elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
4726      capstone=git
4727    elif test -e "${source_path}/capstone/Makefile" ; then
4728      capstone=internal
4729    elif test -z "$capstone" ; then
4730      capstone=no
4731    else
4732      feature_not_found "capstone" "Install capstone devel or git submodule"
4733    fi
4734    ;;
4735
4736  system)
4737    if ! $pkg_config capstone; then
4738      feature_not_found "capstone" "Install capstone devel"
4739    fi
4740    ;;
4741esac
4742
4743case "$capstone" in
4744  git | internal)
4745    if test "$capstone" = git; then
4746      git_submodules="${git_submodules} capstone"
4747    fi
4748    mkdir -p capstone
4749    QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4750    if test "$mingw32" = "yes"; then
4751      LIBCAPSTONE=capstone.lib
4752    else
4753      LIBCAPSTONE=libcapstone.a
4754    fi
4755    LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4756    ;;
4757
4758  system)
4759    QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4760    LIBS="$($pkg_config --libs capstone) $LIBS"
4761    ;;
4762
4763  no)
4764    ;;
4765  *)
4766    error_exit "Unknown state for capstone: $capstone"
4767    ;;
4768esac
4769
4770##########################################
4771# check if we have fdatasync
4772
4773fdatasync=no
4774cat > $TMPC << EOF
4775#include <unistd.h>
4776int main(void) {
4777#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4778return fdatasync(0);
4779#else
4780#error Not supported
4781#endif
4782}
4783EOF
4784if compile_prog "" "" ; then
4785    fdatasync=yes
4786fi
4787
4788##########################################
4789# check if we have madvise
4790
4791madvise=no
4792cat > $TMPC << EOF
4793#include <sys/types.h>
4794#include <sys/mman.h>
4795#include <stddef.h>
4796int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4797EOF
4798if compile_prog "" "" ; then
4799    madvise=yes
4800fi
4801
4802##########################################
4803# check if we have posix_madvise
4804
4805posix_madvise=no
4806cat > $TMPC << EOF
4807#include <sys/mman.h>
4808#include <stddef.h>
4809int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4810EOF
4811if compile_prog "" "" ; then
4812    posix_madvise=yes
4813fi
4814
4815##########################################
4816# check if we have posix_memalign()
4817
4818posix_memalign=no
4819cat > $TMPC << EOF
4820#include <stdlib.h>
4821int main(void) {
4822    void *p;
4823    return posix_memalign(&p, 8, 8);
4824}
4825EOF
4826if compile_prog "" "" ; then
4827    posix_memalign=yes
4828fi
4829
4830##########################################
4831# check if we have posix_syslog
4832
4833posix_syslog=no
4834cat > $TMPC << EOF
4835#include <syslog.h>
4836int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4837EOF
4838if compile_prog "" "" ; then
4839    posix_syslog=yes
4840fi
4841
4842##########################################
4843# check if we have sem_timedwait
4844
4845sem_timedwait=no
4846cat > $TMPC << EOF
4847#include <semaphore.h>
4848int main(void) { return sem_timedwait(0, 0); }
4849EOF
4850if compile_prog "" "" ; then
4851    sem_timedwait=yes
4852fi
4853
4854##########################################
4855# check if we have strchrnul
4856
4857strchrnul=no
4858cat > $TMPC << EOF
4859#include <string.h>
4860int main(void);
4861// Use a haystack that the compiler shouldn't be able to constant fold
4862char *haystack = (char*)&main;
4863int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4864EOF
4865if compile_prog "" "" ; then
4866    strchrnul=yes
4867fi
4868
4869##########################################
4870# check if trace backend exists
4871
4872$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4873if test "$?" -ne 0 ; then
4874  error_exit "invalid trace backends" \
4875      "Please choose supported trace backends."
4876fi
4877
4878##########################################
4879# For 'ust' backend, test if ust headers are present
4880if have_backend "ust"; then
4881  cat > $TMPC << EOF
4882#include <lttng/tracepoint.h>
4883int main(void) { return 0; }
4884EOF
4885  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4886    if $pkg_config lttng-ust --exists; then
4887      lttng_ust_libs=$($pkg_config --libs lttng-ust)
4888    else
4889      lttng_ust_libs="-llttng-ust -ldl"
4890    fi
4891    if $pkg_config liburcu-bp --exists; then
4892      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4893    else
4894      urcu_bp_libs="-lurcu-bp"
4895    fi
4896
4897    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4898    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4899  else
4900    error_exit "Trace backend 'ust' missing lttng-ust header files"
4901  fi
4902fi
4903
4904##########################################
4905# For 'dtrace' backend, test if 'dtrace' command is present
4906if have_backend "dtrace"; then
4907  if ! has 'dtrace' ; then
4908    error_exit "dtrace command is not found in PATH $PATH"
4909  fi
4910  trace_backend_stap="no"
4911  if has 'stap' ; then
4912    trace_backend_stap="yes"
4913  fi
4914fi
4915
4916##########################################
4917# check and set a backend for coroutine
4918
4919# We prefer ucontext, but it's not always possible. The fallback
4920# is sigcontext. On Windows the only valid backend is the Windows
4921# specific one.
4922
4923ucontext_works=no
4924if test "$darwin" != "yes"; then
4925  cat > $TMPC << EOF
4926#include <ucontext.h>
4927#ifdef __stub_makecontext
4928#error Ignoring glibc stub makecontext which will always fail
4929#endif
4930int main(void) { makecontext(0, 0, 0); return 0; }
4931EOF
4932  if compile_prog "" "" ; then
4933    ucontext_works=yes
4934  fi
4935fi
4936
4937if test "$coroutine" = ""; then
4938  if test "$mingw32" = "yes"; then
4939    coroutine=win32
4940  elif test "$ucontext_works" = "yes"; then
4941    coroutine=ucontext
4942  else
4943    coroutine=sigaltstack
4944  fi
4945else
4946  case $coroutine in
4947  windows)
4948    if test "$mingw32" != "yes"; then
4949      error_exit "'windows' coroutine backend only valid for Windows"
4950    fi
4951    # Unfortunately the user visible backend name doesn't match the
4952    # coroutine-*.c filename for this case, so we have to adjust it here.
4953    coroutine=win32
4954    ;;
4955  ucontext)
4956    if test "$ucontext_works" != "yes"; then
4957      feature_not_found "ucontext"
4958    fi
4959    ;;
4960  sigaltstack)
4961    if test "$mingw32" = "yes"; then
4962      error_exit "only the 'windows' coroutine backend is valid for Windows"
4963    fi
4964    ;;
4965  *)
4966    error_exit "unknown coroutine backend $coroutine"
4967    ;;
4968  esac
4969fi
4970
4971if test "$coroutine_pool" = ""; then
4972  coroutine_pool=yes
4973fi
4974
4975if test "$debug_stack_usage" = "yes"; then
4976  if test "$coroutine_pool" = "yes"; then
4977    echo "WARN: disabling coroutine pool for stack usage debugging"
4978    coroutine_pool=no
4979  fi
4980fi
4981
4982
4983##########################################
4984# check if we have open_by_handle_at
4985
4986open_by_handle_at=no
4987cat > $TMPC << EOF
4988#include <fcntl.h>
4989#if !defined(AT_EMPTY_PATH)
4990# error missing definition
4991#else
4992int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4993#endif
4994EOF
4995if compile_prog "" "" ; then
4996    open_by_handle_at=yes
4997fi
4998
4999########################################
5000# check if we have linux/magic.h
5001
5002linux_magic_h=no
5003cat > $TMPC << EOF
5004#include <linux/magic.h>
5005int main(void) {
5006  return 0;
5007}
5008EOF
5009if compile_prog "" "" ; then
5010    linux_magic_h=yes
5011fi
5012
5013########################################
5014# check whether we can disable warning option with a pragma (this is needed
5015# to silence warnings in the headers of some versions of external libraries).
5016# This test has to be compiled with -Werror as otherwise an unknown pragma is
5017# only a warning.
5018#
5019# If we can't selectively disable warning in the code, disable -Werror so that
5020# the build doesn't fail anyway.
5021
5022pragma_disable_unused_but_set=no
5023cat > $TMPC << EOF
5024#pragma GCC diagnostic push
5025#pragma GCC diagnostic ignored "-Wstrict-prototypes"
5026#pragma GCC diagnostic pop
5027
5028int main(void) {
5029    return 0;
5030}
5031EOF
5032if compile_prog "-Werror" "" ; then
5033    pragma_diagnostic_available=yes
5034else
5035    werror=no
5036fi
5037
5038########################################
5039# check if we have valgrind/valgrind.h
5040
5041valgrind_h=no
5042cat > $TMPC << EOF
5043#include <valgrind/valgrind.h>
5044int main(void) {
5045  return 0;
5046}
5047EOF
5048if compile_prog "" "" ; then
5049    valgrind_h=yes
5050fi
5051
5052########################################
5053# check if environ is declared
5054
5055has_environ=no
5056cat > $TMPC << EOF
5057#include <unistd.h>
5058int main(void) {
5059    environ = 0;
5060    return 0;
5061}
5062EOF
5063if compile_prog "" "" ; then
5064    has_environ=yes
5065fi
5066
5067########################################
5068# check if cpuid.h is usable.
5069
5070cat > $TMPC << EOF
5071#include <cpuid.h>
5072int main(void) {
5073    unsigned a, b, c, d;
5074    int max = __get_cpuid_max(0, 0);
5075
5076    if (max >= 1) {
5077        __cpuid(1, a, b, c, d);
5078    }
5079
5080    if (max >= 7) {
5081        __cpuid_count(7, 0, a, b, c, d);
5082    }
5083
5084    return 0;
5085}
5086EOF
5087if compile_prog "" "" ; then
5088    cpuid_h=yes
5089fi
5090
5091##########################################
5092# avx2 optimization requirement check
5093#
5094# There is no point enabling this if cpuid.h is not usable,
5095# since we won't be able to select the new routines.
5096
5097if test $cpuid_h = yes; then
5098  cat > $TMPC << EOF
5099#pragma GCC push_options
5100#pragma GCC target("avx2")
5101#include <cpuid.h>
5102#include <immintrin.h>
5103static int bar(void *a) {
5104    __m256i x = *(__m256i *)a;
5105    return _mm256_testz_si256(x, x);
5106}
5107int main(int argc, char *argv[]) { return bar(argv[0]); }
5108EOF
5109  if compile_object "" ; then
5110    avx2_opt="yes"
5111  fi
5112fi
5113
5114########################################
5115# check if __[u]int128_t is usable.
5116
5117int128=no
5118cat > $TMPC << EOF
5119#if defined(__clang_major__) && defined(__clang_minor__)
5120# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5121#  error __int128_t does not work in CLANG before 3.2
5122# endif
5123#endif
5124__int128_t a;
5125__uint128_t b;
5126int main (void) {
5127  a = a + b;
5128  b = a * b;
5129  a = a * a;
5130  return 0;
5131}
5132EOF
5133if compile_prog "" "" ; then
5134    int128=yes
5135fi
5136
5137#########################################
5138# See if 128-bit atomic operations are supported.
5139
5140atomic128=no
5141if test "$int128" = "yes"; then
5142  cat > $TMPC << EOF
5143int main(void)
5144{
5145  unsigned __int128 x = 0, y = 0;
5146  y = __atomic_load_16(&x, 0);
5147  __atomic_store_16(&x, y, 0);
5148  __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5149  return 0;
5150}
5151EOF
5152  if compile_prog "" "" ; then
5153    atomic128=yes
5154  fi
5155fi
5156
5157cmpxchg128=no
5158if test "$int128" = yes -a "$atomic128" = no; then
5159  cat > $TMPC << EOF
5160int main(void)
5161{
5162  unsigned __int128 x = 0, y = 0;
5163  __sync_val_compare_and_swap_16(&x, y, x);
5164  return 0;
5165}
5166EOF
5167  if compile_prog "" "" ; then
5168    cmpxchg128=yes
5169  fi
5170fi
5171
5172#########################################
5173# See if 64-bit atomic operations are supported.
5174# Note that without __atomic builtins, we can only
5175# assume atomic loads/stores max at pointer size.
5176
5177cat > $TMPC << EOF
5178#include <stdint.h>
5179int main(void)
5180{
5181  uint64_t x = 0, y = 0;
5182#ifdef __ATOMIC_RELAXED
5183  y = __atomic_load_8(&x, 0);
5184  __atomic_store_8(&x, y, 0);
5185  __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5186  __atomic_exchange_8(&x, y, 0);
5187  __atomic_fetch_add_8(&x, y, 0);
5188#else
5189  typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5190  __sync_lock_test_and_set(&x, y);
5191  __sync_val_compare_and_swap(&x, y, 0);
5192  __sync_fetch_and_add(&x, y);
5193#endif
5194  return 0;
5195}
5196EOF
5197if compile_prog "" "" ; then
5198  atomic64=yes
5199fi
5200
5201########################################
5202# See if 16-byte vector operations are supported.
5203# Even without a vector unit the compiler may expand these.
5204# There is a bug in old GCC for PPC that crashes here.
5205# Unfortunately it's the system compiler for Centos 7.
5206
5207cat > $TMPC << EOF
5208typedef unsigned char U1 __attribute__((vector_size(16)));
5209typedef unsigned short U2 __attribute__((vector_size(16)));
5210typedef unsigned int U4 __attribute__((vector_size(16)));
5211typedef unsigned long long U8 __attribute__((vector_size(16)));
5212typedef signed char S1 __attribute__((vector_size(16)));
5213typedef signed short S2 __attribute__((vector_size(16)));
5214typedef signed int S4 __attribute__((vector_size(16)));
5215typedef signed long long S8 __attribute__((vector_size(16)));
5216static U1 a1, b1;
5217static U2 a2, b2;
5218static U4 a4, b4;
5219static U8 a8, b8;
5220static S1 c1;
5221static S2 c2;
5222static S4 c4;
5223static S8 c8;
5224static int i;
5225void helper(void *d, void *a, int shift, int i);
5226void helper(void *d, void *a, int shift, int i)
5227{
5228  *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5229  *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5230  *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5231  *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5232}
5233int main(void)
5234{
5235  a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5236  a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5237  a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5238  a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5239  a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5240  a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5241  a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5242  a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5243  c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5244  return 0;
5245}
5246EOF
5247
5248vector16=no
5249if compile_prog "" "" ; then
5250  vector16=yes
5251fi
5252
5253########################################
5254# check if getauxval is available.
5255
5256getauxval=no
5257cat > $TMPC << EOF
5258#include <sys/auxv.h>
5259int main(void) {
5260  return getauxval(AT_HWCAP) == 0;
5261}
5262EOF
5263if compile_prog "" "" ; then
5264    getauxval=yes
5265fi
5266
5267########################################
5268# check if ccache is interfering with
5269# semantic analysis of macros
5270
5271unset CCACHE_CPP2
5272ccache_cpp2=no
5273cat > $TMPC << EOF
5274static const int Z = 1;
5275#define fn() ({ Z; })
5276#define TAUT(X) ((X) == Z)
5277#define PAREN(X, Y) (X == Y)
5278#define ID(X) (X)
5279int main(int argc, char *argv[])
5280{
5281    int x = 0, y = 0;
5282    x = ID(x);
5283    x = fn();
5284    fn();
5285    if (PAREN(x, y)) return 0;
5286    if (TAUT(Z)) return 0;
5287    return 0;
5288}
5289EOF
5290
5291if ! compile_object "-Werror"; then
5292    ccache_cpp2=yes
5293fi
5294
5295#################################################
5296# clang does not support glibc + FORTIFY_SOURCE.
5297
5298if test "$fortify_source" != "no"; then
5299  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5300    fortify_source="no";
5301  elif test -n "$cxx" && has $cxx &&
5302       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5303    fortify_source="no";
5304  else
5305    fortify_source="yes"
5306  fi
5307fi
5308
5309###############################################
5310# Check if copy_file_range is provided by glibc
5311have_copy_file_range=no
5312cat > $TMPC << EOF
5313#include <unistd.h>
5314int main(void) {
5315  copy_file_range(0, NULL, 0, NULL, 0, 0);
5316  return 0;
5317}
5318EOF
5319if compile_prog "" "" ; then
5320    have_copy_file_range=yes
5321fi
5322
5323##########################################
5324# check if struct fsxattr is available via linux/fs.h
5325
5326have_fsxattr=no
5327cat > $TMPC << EOF
5328#include <linux/fs.h>
5329struct fsxattr foo;
5330int main(void) {
5331  return 0;
5332}
5333EOF
5334if compile_prog "" "" ; then
5335    have_fsxattr=yes
5336fi
5337
5338##########################################
5339# check for usable membarrier system call
5340if test "$membarrier" = "yes"; then
5341    have_membarrier=no
5342    if test "$mingw32" = "yes" ; then
5343        have_membarrier=yes
5344    elif test "$linux" = "yes" ; then
5345        cat > $TMPC << EOF
5346    #include <linux/membarrier.h>
5347    #include <sys/syscall.h>
5348    #include <unistd.h>
5349    #include <stdlib.h>
5350    int main(void) {
5351        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5352        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5353	exit(0);
5354    }
5355EOF
5356        if compile_prog "" "" ; then
5357            have_membarrier=yes
5358        fi
5359    fi
5360    if test "$have_membarrier" = "no"; then
5361      feature_not_found "membarrier" "membarrier system call not available"
5362    fi
5363else
5364    # Do not enable it by default even for Mingw32, because it doesn't
5365    # work on Wine.
5366    membarrier=no
5367fi
5368
5369##########################################
5370# check if rtnetlink.h exists and is useful
5371have_rtnetlink=no
5372cat > $TMPC << EOF
5373#include <linux/rtnetlink.h>
5374int main(void) {
5375  return IFLA_PROTO_DOWN;
5376}
5377EOF
5378if compile_prog "" "" ; then
5379    have_rtnetlink=yes
5380fi
5381
5382##########################################
5383# check for usable AF_VSOCK environment
5384have_af_vsock=no
5385cat > $TMPC << EOF
5386#include <errno.h>
5387#include <sys/types.h>
5388#include <sys/socket.h>
5389#if !defined(AF_VSOCK)
5390# error missing AF_VSOCK flag
5391#endif
5392#include <linux/vm_sockets.h>
5393int main(void) {
5394    int sock, ret;
5395    struct sockaddr_vm svm;
5396    socklen_t len = sizeof(svm);
5397    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5398    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5399    if ((ret == -1) && (errno == ENOTCONN)) {
5400        return 0;
5401    }
5402    return -1;
5403}
5404EOF
5405if compile_prog "" "" ; then
5406    have_af_vsock=yes
5407fi
5408
5409##########################################
5410# check for usable AF_ALG environment
5411hava_afalg=no
5412cat > $TMPC << EOF
5413#include <errno.h>
5414#include <sys/types.h>
5415#include <sys/socket.h>
5416#include <linux/if_alg.h>
5417int main(void) {
5418    int sock;
5419    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5420    return sock;
5421}
5422EOF
5423if compile_prog "" "" ; then
5424    have_afalg=yes
5425fi
5426if test "$crypto_afalg" = "yes"
5427then
5428    if test "$have_afalg" != "yes"
5429    then
5430	error_exit "AF_ALG requested but could not be detected"
5431    fi
5432fi
5433
5434
5435#################################################
5436# Check to see if we have the Hypervisor framework
5437if [ "$darwin" = "yes" ] ; then
5438  cat > $TMPC << EOF
5439#include <Hypervisor/hv.h>
5440int main() { return 0;}
5441EOF
5442  if ! compile_object ""; then
5443    hvf='no'
5444  else
5445    hvf='yes'
5446    LDFLAGS="-framework Hypervisor $LDFLAGS"
5447  fi
5448fi
5449
5450#################################################
5451# Sparc implicitly links with --relax, which is
5452# incompatible with -r, so --no-relax should be
5453# given. It does no harm to give it on other
5454# platforms too.
5455
5456# Note: the prototype is needed since QEMU_CFLAGS
5457#       contains -Wmissing-prototypes
5458cat > $TMPC << EOF
5459extern int foo(void);
5460int foo(void) { return 0; }
5461EOF
5462if ! compile_object ""; then
5463  error_exit "Failed to compile object file for LD_REL_FLAGS test"
5464fi
5465for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5466  if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5467    LD_REL_FLAGS=$i
5468    break
5469  fi
5470done
5471if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5472  feature_not_found "modules" "Cannot find how to build relocatable objects"
5473fi
5474
5475##########################################
5476# check for sysmacros.h
5477
5478have_sysmacros=no
5479cat > $TMPC << EOF
5480#include <sys/sysmacros.h>
5481int main(void) {
5482    return makedev(0, 0);
5483}
5484EOF
5485if compile_prog "" "" ; then
5486    have_sysmacros=yes
5487fi
5488
5489##########################################
5490# Veritas HyperScale block driver VxHS
5491# Check if libvxhs is installed
5492
5493if test "$vxhs" != "no" ; then
5494  cat > $TMPC <<EOF
5495#include <stdint.h>
5496#include <qnio/qnio_api.h>
5497
5498void *vxhs_callback;
5499
5500int main(void) {
5501    iio_init(QNIO_VERSION, vxhs_callback);
5502    return 0;
5503}
5504EOF
5505  vxhs_libs="-lvxhs -lssl"
5506  if compile_prog "" "$vxhs_libs" ; then
5507    vxhs=yes
5508  else
5509    if test "$vxhs" = "yes" ; then
5510      feature_not_found "vxhs block device" "Install libvxhs See github"
5511    fi
5512    vxhs=no
5513  fi
5514fi
5515
5516##########################################
5517# check for _Static_assert()
5518
5519have_static_assert=no
5520cat > $TMPC << EOF
5521_Static_assert(1, "success");
5522int main(void) {
5523    return 0;
5524}
5525EOF
5526if compile_prog "" "" ; then
5527    have_static_assert=yes
5528fi
5529
5530##########################################
5531# check for utmpx.h, it is missing e.g. on OpenBSD
5532
5533have_utmpx=no
5534cat > $TMPC << EOF
5535#include <utmpx.h>
5536struct utmpx user_info;
5537int main(void) {
5538    return 0;
5539}
5540EOF
5541if compile_prog "" "" ; then
5542    have_utmpx=yes
5543fi
5544
5545##########################################
5546# checks for sanitizers
5547
5548have_asan=no
5549have_ubsan=no
5550have_asan_iface_h=no
5551have_asan_iface_fiber=no
5552
5553if test "$sanitizers" = "yes" ; then
5554  write_c_skeleton
5555  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5556      have_asan=yes
5557  fi
5558
5559  # we could use a simple skeleton for flags checks, but this also
5560  # detect the static linking issue of ubsan, see also:
5561  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5562  cat > $TMPC << EOF
5563#include <stdlib.h>
5564int main(void) {
5565    void *tmp = malloc(10);
5566    return *(int *)(tmp + 2);
5567}
5568EOF
5569  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5570      have_ubsan=yes
5571  fi
5572
5573  if check_include "sanitizer/asan_interface.h" ; then
5574      have_asan_iface_h=yes
5575  fi
5576
5577  cat > $TMPC << EOF
5578#include <sanitizer/asan_interface.h>
5579int main(void) {
5580  __sanitizer_start_switch_fiber(0, 0, 0);
5581  return 0;
5582}
5583EOF
5584  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5585      have_asan_iface_fiber=yes
5586  fi
5587fi
5588
5589##########################################
5590# Docker and cross-compiler support
5591#
5592# This is specifically for building test
5593# cases for foreign architectures, not
5594# cross-compiling QEMU itself.
5595
5596if has "docker"; then
5597    docker=$($python $source_path/tests/docker/docker.py probe)
5598fi
5599
5600##########################################
5601# check for libpmem
5602
5603if test "$libpmem" != "no"; then
5604	if $pkg_config --exists "libpmem"; then
5605		libpmem="yes"
5606		libpmem_libs=$($pkg_config --libs libpmem)
5607		libpmem_cflags=$($pkg_config --cflags libpmem)
5608		libs_softmmu="$libs_softmmu $libpmem_libs"
5609		QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5610	else
5611		if test "$libpmem" = "yes" ; then
5612			feature_not_found "libpmem" "Install nvml or pmdk"
5613		fi
5614		libpmem="no"
5615	fi
5616fi
5617
5618##########################################
5619# End of CC checks
5620# After here, no more $cc or $ld runs
5621
5622write_c_skeleton
5623
5624if test "$gcov" = "yes" ; then
5625  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5626  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5627elif test "$fortify_source" = "yes" ; then
5628  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5629elif test "$debug" = "no"; then
5630  CFLAGS="-O2 $CFLAGS"
5631fi
5632
5633if test "$have_asan" = "yes"; then
5634  CFLAGS="-fsanitize=address $CFLAGS"
5635  if test "$have_asan_iface_h" = "no" ; then
5636      echo "ASAN build enabled, but ASAN header missing." \
5637           "Without code annotation, the report may be inferior."
5638  elif test "$have_asan_iface_fiber" = "no" ; then
5639      echo "ASAN build enabled, but ASAN header is too old." \
5640           "Without code annotation, the report may be inferior."
5641  fi
5642fi
5643if test "$have_ubsan" = "yes"; then
5644  CFLAGS="-fsanitize=undefined $CFLAGS"
5645fi
5646
5647##########################################
5648# Do we have libnfs
5649if test "$libnfs" != "no" ; then
5650  if $pkg_config --atleast-version=1.9.3 libnfs; then
5651    libnfs="yes"
5652    libnfs_libs=$($pkg_config --libs libnfs)
5653  else
5654    if test "$libnfs" = "yes" ; then
5655      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5656    fi
5657    libnfs="no"
5658  fi
5659fi
5660
5661# Now we've finished running tests it's OK to add -Werror to the compiler flags
5662if test "$werror" = "yes"; then
5663    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5664fi
5665
5666if test "$solaris" = "no" ; then
5667    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5668        LDFLAGS="-Wl,--warn-common $LDFLAGS"
5669    fi
5670fi
5671
5672# test if pod2man has --utf8 option
5673if pod2man --help | grep -q utf8; then
5674    POD2MAN="pod2man --utf8"
5675else
5676    POD2MAN="pod2man"
5677fi
5678
5679# Use ASLR, no-SEH and DEP if available
5680if test "$mingw32" = "yes" ; then
5681    for flag in --dynamicbase --no-seh --nxcompat; do
5682        if ld_has $flag ; then
5683            LDFLAGS="-Wl,$flag $LDFLAGS"
5684        fi
5685    done
5686fi
5687
5688qemu_confdir=$sysconfdir$confsuffix
5689qemu_moddir=$libdir$confsuffix
5690qemu_datadir=$datadir$confsuffix
5691qemu_localedir="$datadir/locale"
5692
5693# We can only support ivshmem if we have eventfd
5694if [ "$eventfd" = "yes" ]; then
5695  ivshmem=yes
5696fi
5697
5698tools=""
5699if test "$want_tools" = "yes" ; then
5700  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
5701  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5702    tools="qemu-nbd\$(EXESUF) $tools"
5703  fi
5704  if [ "$ivshmem" = "yes" ]; then
5705    tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5706  fi
5707  if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5708    tools="elf2dmp $tools"
5709  fi
5710fi
5711if test "$softmmu" = yes ; then
5712  if test "$linux" = yes; then
5713    if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5714      virtfs=yes
5715      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5716    else
5717      if test "$virtfs" = yes; then
5718        error_exit "VirtFS requires libcap devel and libattr devel"
5719      fi
5720      virtfs=no
5721    fi
5722    if test "$mpath" != no && test "$mpathpersist" = yes ; then
5723      mpath=yes
5724    else
5725      if test "$mpath" = yes; then
5726        error_exit "Multipath requires libmpathpersist devel"
5727      fi
5728      mpath=no
5729    fi
5730    tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5731  else
5732    if test "$virtfs" = yes; then
5733      error_exit "VirtFS is supported only on Linux"
5734    fi
5735    virtfs=no
5736    if test "$mpath" = yes; then
5737      error_exit "Multipath is supported only on Linux"
5738    fi
5739    mpath=no
5740  fi
5741  if test "$xkbcommon" = "yes"; then
5742    tools="qemu-keymap\$(EXESUF) $tools"
5743  fi
5744fi
5745
5746# Probe for guest agent support/options
5747
5748if [ "$guest_agent" != "no" ]; then
5749  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5750      tools="qemu-ga $tools"
5751      guest_agent=yes
5752  elif [ "$guest_agent" != yes ]; then
5753      guest_agent=no
5754  else
5755      error_exit "Guest agent is not supported on this platform"
5756  fi
5757fi
5758
5759# Guest agent Window MSI  package
5760
5761if test "$guest_agent" != yes; then
5762  if test "$guest_agent_msi" = yes; then
5763    error_exit "MSI guest agent package requires guest agent enabled"
5764  fi
5765  guest_agent_msi=no
5766elif test "$mingw32" != "yes"; then
5767  if test "$guest_agent_msi" = "yes"; then
5768    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5769  fi
5770  guest_agent_msi=no
5771elif ! has wixl; then
5772  if test "$guest_agent_msi" = "yes"; then
5773    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5774  fi
5775  guest_agent_msi=no
5776else
5777  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5778  # disabled explicitly
5779  if test "$guest_agent_msi" != "no"; then
5780    guest_agent_msi=yes
5781  fi
5782fi
5783
5784if test "$guest_agent_msi" = "yes"; then
5785  if test "$guest_agent_with_vss" = "yes"; then
5786    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5787  fi
5788
5789  if test "$QEMU_GA_MANUFACTURER" = ""; then
5790    QEMU_GA_MANUFACTURER=QEMU
5791  fi
5792
5793  if test "$QEMU_GA_DISTRO" = ""; then
5794    QEMU_GA_DISTRO=Linux
5795  fi
5796
5797  if test "$QEMU_GA_VERSION" = ""; then
5798      QEMU_GA_VERSION=$(cat $source_path/VERSION)
5799  fi
5800
5801  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5802
5803  case "$cpu" in
5804  x86_64)
5805    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5806    ;;
5807  i386)
5808    QEMU_GA_MSI_ARCH="-D Arch=32"
5809    ;;
5810  *)
5811    error_exit "CPU $cpu not supported for building installation package"
5812    ;;
5813  esac
5814fi
5815
5816# Mac OS X ships with a broken assembler
5817roms=
5818if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5819        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5820        "$softmmu" = yes ; then
5821    # Different host OS linkers have different ideas about the name of the ELF
5822    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5823    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5824    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5825        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5826            ld_i386_emulation="$emu"
5827            roms="optionrom"
5828            break
5829        fi
5830    done
5831fi
5832if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5833  roms="$roms spapr-rtas"
5834fi
5835
5836if test "$cpu" = "s390x" ; then
5837  roms="$roms s390-ccw"
5838fi
5839
5840# Probe for the need for relocating the user-only binary.
5841if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5842  textseg_addr=
5843  case "$cpu" in
5844    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5845      # ??? Rationale for choosing this address
5846      textseg_addr=0x60000000
5847      ;;
5848    mips)
5849      # A 256M aligned address, high in the address space, with enough
5850      # room for the code_gen_buffer above it before the stack.
5851      textseg_addr=0x60000000
5852      ;;
5853  esac
5854  if [ -n "$textseg_addr" ]; then
5855    cat > $TMPC <<EOF
5856    int main(void) { return 0; }
5857EOF
5858    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5859    if ! compile_prog "" "$textseg_ldflags"; then
5860      # In case ld does not support -Ttext-segment, edit the default linker
5861      # script via sed to set the .text start addr.  This is needed on FreeBSD
5862      # at least.
5863      if ! $ld --verbose >/dev/null 2>&1; then
5864        error_exit \
5865            "We need to link the QEMU user mode binaries at a" \
5866            "specific text address. Unfortunately your linker" \
5867            "doesn't support either the -Ttext-segment option or" \
5868            "printing the default linker script with --verbose." \
5869            "If you don't want the user mode binaries, pass the" \
5870            "--disable-user option to configure."
5871      fi
5872
5873      $ld --verbose | sed \
5874        -e '1,/==================================================/d' \
5875        -e '/==================================================/,$d' \
5876        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5877        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5878      textseg_ldflags="-Wl,-T../config-host.ld"
5879    fi
5880  fi
5881fi
5882
5883# Check that the C++ compiler exists and works with the C compiler.
5884# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5885if has $cxx; then
5886    cat > $TMPC <<EOF
5887int c_function(void);
5888int main(void) { return c_function(); }
5889EOF
5890
5891    compile_object
5892
5893    cat > $TMPCXX <<EOF
5894extern "C" {
5895   int c_function(void);
5896}
5897int c_function(void) { return 42; }
5898EOF
5899
5900    update_cxxflags
5901
5902    if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5903        # C++ compiler $cxx works ok with C compiler $cc
5904        :
5905    else
5906        echo "C++ compiler $cxx does not work with C compiler $cc"
5907        echo "Disabling C++ specific optional code"
5908        cxx=
5909    fi
5910else
5911    echo "No C++ compiler available; disabling C++ specific optional code"
5912    cxx=
5913fi
5914
5915echo_version() {
5916    if test "$1" = "yes" ; then
5917        echo "($2)"
5918    fi
5919}
5920
5921# prepend pixman and ftd flags after all config tests are done
5922QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5923QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
5924libs_softmmu="$pixman_libs $libs_softmmu"
5925
5926echo "Install prefix    $prefix"
5927echo "BIOS directory    $(eval echo $qemu_datadir)"
5928echo "firmware path     $(eval echo $firmwarepath)"
5929echo "binary directory  $(eval echo $bindir)"
5930echo "library directory $(eval echo $libdir)"
5931echo "module directory  $(eval echo $qemu_moddir)"
5932echo "libexec directory $(eval echo $libexecdir)"
5933echo "include directory $(eval echo $includedir)"
5934echo "config directory  $(eval echo $sysconfdir)"
5935if test "$mingw32" = "no" ; then
5936echo "local state directory   $(eval echo $local_statedir)"
5937echo "Manual directory  $(eval echo $mandir)"
5938echo "ELF interp prefix $interp_prefix"
5939else
5940echo "local state directory   queried at runtime"
5941echo "Windows SDK       $win_sdk"
5942fi
5943echo "Source path       $source_path"
5944echo "GIT binary        $git"
5945echo "GIT submodules    $git_submodules"
5946echo "C compiler        $cc"
5947echo "Host C compiler   $host_cc"
5948echo "C++ compiler      $cxx"
5949echo "Objective-C compiler $objcc"
5950echo "ARFLAGS           $ARFLAGS"
5951echo "CFLAGS            $CFLAGS"
5952echo "QEMU_CFLAGS       $QEMU_CFLAGS"
5953echo "LDFLAGS           $LDFLAGS"
5954echo "QEMU_LDFLAGS      $QEMU_LDFLAGS"
5955echo "make              $make"
5956echo "install           $install"
5957echo "python            $python"
5958if test "$slirp" = "yes" ; then
5959    echo "smbd              $smbd"
5960fi
5961echo "module support    $modules"
5962echo "host CPU          $cpu"
5963echo "host big endian   $bigendian"
5964echo "target list       $target_list"
5965echo "gprof enabled     $gprof"
5966echo "sparse enabled    $sparse"
5967echo "strip binaries    $strip_opt"
5968echo "profiler          $profiler"
5969echo "static build      $static"
5970if test "$darwin" = "yes" ; then
5971    echo "Cocoa support     $cocoa"
5972fi
5973echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
5974echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
5975echo "GTK GL support    $gtk_gl"
5976echo "VTE support       $vte $(echo_version $vte $vteversion)"
5977echo "TLS priority      $tls_priority"
5978echo "GNUTLS support    $gnutls"
5979echo "GNUTLS rnd        $gnutls_rnd"
5980echo "libgcrypt         $gcrypt"
5981echo "libgcrypt kdf     $gcrypt_kdf"
5982echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
5983echo "nettle kdf        $nettle_kdf"
5984echo "libtasn1          $tasn1"
5985echo "curses support    $curses"
5986echo "virgl support     $virglrenderer $(echo_version $virglrenderer $virgl_version)"
5987echo "curl support      $curl"
5988echo "mingw32 support   $mingw32"
5989echo "Audio drivers     $audio_drv_list"
5990echo "Block whitelist (rw) $block_drv_rw_whitelist"
5991echo "Block whitelist (ro) $block_drv_ro_whitelist"
5992echo "VirtFS support    $virtfs"
5993echo "Multipath support $mpath"
5994echo "VNC support       $vnc"
5995if test "$vnc" = "yes" ; then
5996    echo "VNC SASL support  $vnc_sasl"
5997    echo "VNC JPEG support  $vnc_jpeg"
5998    echo "VNC PNG support   $vnc_png"
5999fi
6000if test -n "$sparc_cpu"; then
6001    echo "Target Sparc Arch $sparc_cpu"
6002fi
6003echo "xen support       $xen"
6004if test "$xen" = "yes" ; then
6005  echo "xen ctrl version  $xen_ctrl_version"
6006  echo "pv dom build      $xen_pv_domain_build"
6007fi
6008echo "brlapi support    $brlapi"
6009echo "bluez  support    $bluez"
6010echo "Documentation     $docs"
6011echo "PIE               $pie"
6012echo "vde support       $vde"
6013echo "netmap support    $netmap"
6014echo "Linux AIO support $linux_aio"
6015echo "ATTR/XATTR support $attr"
6016echo "Install blobs     $blobs"
6017echo "KVM support       $kvm"
6018echo "HAX support       $hax"
6019echo "HVF support       $hvf"
6020echo "WHPX support      $whpx"
6021echo "TCG support       $tcg"
6022if test "$tcg" = "yes" ; then
6023    echo "TCG debug enabled $debug_tcg"
6024    echo "TCG interpreter   $tcg_interpreter"
6025fi
6026echo "malloc trim support $malloc_trim"
6027echo "RDMA support      $rdma"
6028echo "PVRDMA support    $pvrdma"
6029echo "fdt support       $fdt"
6030echo "membarrier        $membarrier"
6031echo "preadv support    $preadv"
6032echo "fdatasync         $fdatasync"
6033echo "madvise           $madvise"
6034echo "posix_madvise     $posix_madvise"
6035echo "posix_memalign    $posix_memalign"
6036echo "libcap-ng support $cap_ng"
6037echo "vhost-net support $vhost_net"
6038echo "vhost-crypto support $vhost_crypto"
6039echo "vhost-scsi support $vhost_scsi"
6040echo "vhost-vsock support $vhost_vsock"
6041echo "vhost-user support $vhost_user"
6042echo "Trace backends    $trace_backends"
6043if have_backend "simple"; then
6044echo "Trace output file $trace_file-<pid>"
6045fi
6046echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6047echo "rbd support       $rbd"
6048echo "xfsctl support    $xfs"
6049echo "smartcard support $smartcard"
6050echo "libusb            $libusb"
6051echo "usb net redir     $usb_redir"
6052echo "OpenGL support    $opengl"
6053echo "OpenGL dmabufs    $opengl_dmabuf"
6054echo "libiscsi support  $libiscsi"
6055echo "libnfs support    $libnfs"
6056echo "build guest agent $guest_agent"
6057echo "QGA VSS support   $guest_agent_with_vss"
6058echo "QGA w32 disk info $guest_agent_ntddscsi"
6059echo "QGA MSI support   $guest_agent_msi"
6060echo "seccomp support   $seccomp"
6061echo "coroutine backend $coroutine"
6062echo "coroutine pool    $coroutine_pool"
6063echo "debug stack usage $debug_stack_usage"
6064echo "mutex debugging   $debug_mutex"
6065echo "crypto afalg      $crypto_afalg"
6066echo "GlusterFS support $glusterfs"
6067echo "gcov              $gcov_tool"
6068echo "gcov enabled      $gcov"
6069echo "TPM support       $tpm"
6070echo "libssh2 support   $libssh2"
6071echo "TPM passthrough   $tpm_passthrough"
6072echo "TPM emulator      $tpm_emulator"
6073echo "QOM debugging     $qom_cast_debug"
6074echo "Live block migration $live_block_migration"
6075echo "lzo support       $lzo"
6076echo "snappy support    $snappy"
6077echo "bzip2 support     $bzip2"
6078echo "NUMA host support $numa"
6079echo "libxml2           $libxml2"
6080echo "tcmalloc support  $tcmalloc"
6081echo "jemalloc support  $jemalloc"
6082echo "avx2 optimization $avx2_opt"
6083echo "replication support $replication"
6084echo "VxHS block device $vxhs"
6085echo "capstone          $capstone"
6086echo "docker            $docker"
6087echo "libpmem support   $libpmem"
6088
6089if test "$sdl_too_old" = "yes"; then
6090echo "-> Your SDL version is too old - please upgrade to have SDL support"
6091fi
6092
6093if test "$sdlabi" = "1.2"; then
6094    echo
6095    echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6096    echo "WARNING: future releases. Please switch to using SDL 2.0"
6097fi
6098
6099if test "$supported_cpu" = "no"; then
6100    echo
6101    echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6102    echo
6103    echo "CPU host architecture $cpu support is not currently maintained."
6104    echo "The QEMU project intends to remove support for this host CPU in"
6105    echo "a future release if nobody volunteers to maintain it and to"
6106    echo "provide a build host for our continuous integration setup."
6107    echo "configure has succeeded and you can continue to build, but"
6108    echo "if you care about QEMU on this platform you should contact"
6109    echo "us upstream at qemu-devel@nongnu.org."
6110fi
6111
6112if test "$supported_os" = "no"; then
6113    echo
6114    echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6115    echo
6116    echo "Host OS $targetos support is not currently maintained."
6117    echo "The QEMU project intends to remove support for this host OS in"
6118    echo "a future release if nobody volunteers to maintain it and to"
6119    echo "provide a build host for our continuous integration setup."
6120    echo "configure has succeeded and you can continue to build, but"
6121    echo "if you care about QEMU on this platform you should contact"
6122    echo "us upstream at qemu-devel@nongnu.org."
6123fi
6124
6125config_host_mak="config-host.mak"
6126
6127echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6128
6129echo "# Automatically generated by configure - do not modify" > $config_host_mak
6130echo >> $config_host_mak
6131
6132echo all: >> $config_host_mak
6133echo "prefix=$prefix" >> $config_host_mak
6134echo "bindir=$bindir" >> $config_host_mak
6135echo "libdir=$libdir" >> $config_host_mak
6136echo "libexecdir=$libexecdir" >> $config_host_mak
6137echo "includedir=$includedir" >> $config_host_mak
6138echo "mandir=$mandir" >> $config_host_mak
6139echo "sysconfdir=$sysconfdir" >> $config_host_mak
6140echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6141echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6142echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6143echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6144echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6145if test "$mingw32" = "no" ; then
6146  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6147fi
6148echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6149echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6150echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6151echo "GIT=$git" >> $config_host_mak
6152echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6153echo "GIT_UPDATE=$git_update" >> $config_host_mak
6154
6155echo "ARCH=$ARCH" >> $config_host_mak
6156
6157if test "$debug_tcg" = "yes" ; then
6158  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6159fi
6160if test "$strip_opt" = "yes" ; then
6161  echo "STRIP=${strip}" >> $config_host_mak
6162fi
6163if test "$bigendian" = "yes" ; then
6164  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6165fi
6166if test "$mingw32" = "yes" ; then
6167  echo "CONFIG_WIN32=y" >> $config_host_mak
6168  rc_version=$(cat $source_path/VERSION)
6169  version_major=${rc_version%%.*}
6170  rc_version=${rc_version#*.}
6171  version_minor=${rc_version%%.*}
6172  rc_version=${rc_version#*.}
6173  version_subminor=${rc_version%%.*}
6174  version_micro=0
6175  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6176  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6177  if test "$guest_agent_with_vss" = "yes" ; then
6178    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6179    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6180    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6181  fi
6182  if test "$guest_agent_ntddscsi" = "yes" ; then
6183    echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6184  fi
6185  if test "$guest_agent_msi" = "yes"; then
6186    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6187    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6188    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6189    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6190    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6191    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6192    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6193  fi
6194else
6195  echo "CONFIG_POSIX=y" >> $config_host_mak
6196fi
6197
6198if test "$linux" = "yes" ; then
6199  echo "CONFIG_LINUX=y" >> $config_host_mak
6200fi
6201
6202if test "$darwin" = "yes" ; then
6203  echo "CONFIG_DARWIN=y" >> $config_host_mak
6204fi
6205
6206if test "$solaris" = "yes" ; then
6207  echo "CONFIG_SOLARIS=y" >> $config_host_mak
6208fi
6209if test "$haiku" = "yes" ; then
6210  echo "CONFIG_HAIKU=y" >> $config_host_mak
6211fi
6212if test "$static" = "yes" ; then
6213  echo "CONFIG_STATIC=y" >> $config_host_mak
6214fi
6215if test "$profiler" = "yes" ; then
6216  echo "CONFIG_PROFILER=y" >> $config_host_mak
6217fi
6218if test "$slirp" = "yes" ; then
6219  echo "CONFIG_SLIRP=y" >> $config_host_mak
6220  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6221fi
6222if test "$vde" = "yes" ; then
6223  echo "CONFIG_VDE=y" >> $config_host_mak
6224  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6225fi
6226if test "$netmap" = "yes" ; then
6227  echo "CONFIG_NETMAP=y" >> $config_host_mak
6228fi
6229if test "$l2tpv3" = "yes" ; then
6230  echo "CONFIG_L2TPV3=y" >> $config_host_mak
6231fi
6232if test "$cap_ng" = "yes" ; then
6233  echo "CONFIG_LIBCAP=y" >> $config_host_mak
6234fi
6235echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6236for drv in $audio_drv_list; do
6237    def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6238    case "$drv" in
6239	alsa | oss | pa | sdl)
6240	    echo "$def=m" >> $config_host_mak ;;
6241	*)
6242	    echo "$def=y" >> $config_host_mak ;;
6243    esac
6244done
6245echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6246echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6247echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6248echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6249echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6250if test "$audio_pt_int" = "yes" ; then
6251  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6252fi
6253if test "$audio_win_int" = "yes" ; then
6254  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6255fi
6256echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6257echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6258if test "$vnc" = "yes" ; then
6259  echo "CONFIG_VNC=y" >> $config_host_mak
6260fi
6261if test "$vnc_sasl" = "yes" ; then
6262  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6263fi
6264if test "$vnc_jpeg" = "yes" ; then
6265  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6266fi
6267if test "$vnc_png" = "yes" ; then
6268  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6269fi
6270if test "$xkbcommon" = "yes" ; then
6271  echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6272  echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6273fi
6274if test "$fnmatch" = "yes" ; then
6275  echo "CONFIG_FNMATCH=y" >> $config_host_mak
6276fi
6277if test "$xfs" = "yes" ; then
6278  echo "CONFIG_XFS=y" >> $config_host_mak
6279fi
6280qemu_version=$(head $source_path/VERSION)
6281echo "VERSION=$qemu_version" >>$config_host_mak
6282echo "PKGVERSION=$pkgversion" >>$config_host_mak
6283echo "SRC_PATH=$source_path" >> $config_host_mak
6284echo "TARGET_DIRS=$target_list" >> $config_host_mak
6285if [ "$docs" = "yes" ] ; then
6286  echo "BUILD_DOCS=yes" >> $config_host_mak
6287fi
6288if test "$modules" = "yes"; then
6289  # $shacmd can generate a hash started with digit, which the compiler doesn't
6290  # like as an symbol. So prefix it with an underscore
6291  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6292  echo "CONFIG_MODULES=y" >> $config_host_mak
6293fi
6294if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6295  echo "CONFIG_X11=y" >> $config_host_mak
6296  echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6297  echo "X11_LIBS=$x11_libs" >> $config_host_mak
6298fi
6299if test "$sdl" = "yes" ; then
6300  echo "CONFIG_SDL=m" >> $config_host_mak
6301  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
6302  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6303  echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6304fi
6305if test "$cocoa" = "yes" ; then
6306  echo "CONFIG_COCOA=y" >> $config_host_mak
6307fi
6308if test "$curses" = "yes" ; then
6309  echo "CONFIG_CURSES=m" >> $config_host_mak
6310  echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6311  echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6312fi
6313if test "$pipe2" = "yes" ; then
6314  echo "CONFIG_PIPE2=y" >> $config_host_mak
6315fi
6316if test "$accept4" = "yes" ; then
6317  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6318fi
6319if test "$splice" = "yes" ; then
6320  echo "CONFIG_SPLICE=y" >> $config_host_mak
6321fi
6322if test "$eventfd" = "yes" ; then
6323  echo "CONFIG_EVENTFD=y" >> $config_host_mak
6324fi
6325if test "$memfd" = "yes" ; then
6326  echo "CONFIG_MEMFD=y" >> $config_host_mak
6327fi
6328if test "$fallocate" = "yes" ; then
6329  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6330fi
6331if test "$fallocate_punch_hole" = "yes" ; then
6332  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6333fi
6334if test "$fallocate_zero_range" = "yes" ; then
6335  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6336fi
6337if test "$posix_fallocate" = "yes" ; then
6338  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6339fi
6340if test "$sync_file_range" = "yes" ; then
6341  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6342fi
6343if test "$fiemap" = "yes" ; then
6344  echo "CONFIG_FIEMAP=y" >> $config_host_mak
6345fi
6346if test "$dup3" = "yes" ; then
6347  echo "CONFIG_DUP3=y" >> $config_host_mak
6348fi
6349if test "$ppoll" = "yes" ; then
6350  echo "CONFIG_PPOLL=y" >> $config_host_mak
6351fi
6352if test "$prctl_pr_set_timerslack" = "yes" ; then
6353  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6354fi
6355if test "$epoll" = "yes" ; then
6356  echo "CONFIG_EPOLL=y" >> $config_host_mak
6357fi
6358if test "$epoll_create1" = "yes" ; then
6359  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6360fi
6361if test "$sendfile" = "yes" ; then
6362  echo "CONFIG_SENDFILE=y" >> $config_host_mak
6363fi
6364if test "$timerfd" = "yes" ; then
6365  echo "CONFIG_TIMERFD=y" >> $config_host_mak
6366fi
6367if test "$setns" = "yes" ; then
6368  echo "CONFIG_SETNS=y" >> $config_host_mak
6369fi
6370if test "$clock_adjtime" = "yes" ; then
6371  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6372fi
6373if test "$syncfs" = "yes" ; then
6374  echo "CONFIG_SYNCFS=y" >> $config_host_mak
6375fi
6376if test "$inotify" = "yes" ; then
6377  echo "CONFIG_INOTIFY=y" >> $config_host_mak
6378fi
6379if test "$inotify1" = "yes" ; then
6380  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6381fi
6382if test "$sem_timedwait" = "yes" ; then
6383  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6384fi
6385if test "$strchrnul" = "yes" ; then
6386  echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6387fi
6388if test "$byteswap_h" = "yes" ; then
6389  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6390fi
6391if test "$bswap_h" = "yes" ; then
6392  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6393fi
6394if test "$curl" = "yes" ; then
6395  echo "CONFIG_CURL=m" >> $config_host_mak
6396  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6397  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6398fi
6399if test "$brlapi" = "yes" ; then
6400  echo "CONFIG_BRLAPI=y" >> $config_host_mak
6401  echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6402fi
6403if test "$bluez" = "yes" ; then
6404  echo "CONFIG_BLUEZ=y" >> $config_host_mak
6405  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6406fi
6407if test "$gtk" = "yes" ; then
6408  echo "CONFIG_GTK=m" >> $config_host_mak
6409  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6410  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6411  if test "$gtk_gl" = "yes" ; then
6412    echo "CONFIG_GTK_GL=y" >> $config_host_mak
6413  fi
6414fi
6415echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6416if test "$gnutls" = "yes" ; then
6417  echo "CONFIG_GNUTLS=y" >> $config_host_mak
6418fi
6419if test "$gnutls_rnd" = "yes" ; then
6420  echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6421fi
6422if test "$gcrypt" = "yes" ; then
6423  echo "CONFIG_GCRYPT=y" >> $config_host_mak
6424  if test "$gcrypt_hmac" = "yes" ; then
6425    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6426  fi
6427  if test "$gcrypt_kdf" = "yes" ; then
6428    echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6429  fi
6430fi
6431if test "$nettle" = "yes" ; then
6432  echo "CONFIG_NETTLE=y" >> $config_host_mak
6433  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6434  if test "$nettle_kdf" = "yes" ; then
6435    echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6436  fi
6437fi
6438if test "$tasn1" = "yes" ; then
6439  echo "CONFIG_TASN1=y" >> $config_host_mak
6440fi
6441if test "$have_ifaddrs_h" = "yes" ; then
6442    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6443fi
6444if test "$have_broken_size_max" = "yes" ; then
6445    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6446fi
6447
6448# Work around a system header bug with some kernel/XFS header
6449# versions where they both try to define 'struct fsxattr':
6450# xfs headers will not try to redefine structs from linux headers
6451# if this macro is set.
6452if test "$have_fsxattr" = "yes" ; then
6453    echo "HAVE_FSXATTR=y" >> $config_host_mak
6454fi
6455if test "$have_copy_file_range" = "yes" ; then
6456    echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6457fi
6458if test "$vte" = "yes" ; then
6459  echo "CONFIG_VTE=y" >> $config_host_mak
6460  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6461  echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6462fi
6463if test "$virglrenderer" = "yes" ; then
6464  echo "CONFIG_VIRGL=y" >> $config_host_mak
6465  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6466  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6467fi
6468if test "$xen" = "yes" ; then
6469  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6470  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6471  if test "$xen_pv_domain_build" = "yes" ; then
6472    echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6473  fi
6474fi
6475if test "$linux_aio" = "yes" ; then
6476  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6477fi
6478if test "$attr" = "yes" ; then
6479  echo "CONFIG_ATTR=y" >> $config_host_mak
6480fi
6481if test "$libattr" = "yes" ; then
6482  echo "CONFIG_LIBATTR=y" >> $config_host_mak
6483fi
6484if test "$virtfs" = "yes" ; then
6485  echo "CONFIG_VIRTFS=y" >> $config_host_mak
6486fi
6487if test "$mpath" = "yes" ; then
6488  echo "CONFIG_MPATH=y" >> $config_host_mak
6489  if test "$mpathpersist_new_api" = "yes"; then
6490    echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6491  fi
6492fi
6493if test "$vhost_scsi" = "yes" ; then
6494  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6495fi
6496if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6497  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6498fi
6499if test "$vhost_crypto" = "yes" ; then
6500  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6501fi
6502if test "$vhost_vsock" = "yes" ; then
6503  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6504fi
6505if test "$vhost_user" = "yes" ; then
6506  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6507fi
6508if test "$blobs" = "yes" ; then
6509  echo "INSTALL_BLOBS=yes" >> $config_host_mak
6510fi
6511if test "$iovec" = "yes" ; then
6512  echo "CONFIG_IOVEC=y" >> $config_host_mak
6513fi
6514if test "$preadv" = "yes" ; then
6515  echo "CONFIG_PREADV=y" >> $config_host_mak
6516fi
6517if test "$fdt" != "no" ; then
6518  echo "CONFIG_FDT=y" >> $config_host_mak
6519fi
6520if test "$membarrier" = "yes" ; then
6521  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6522fi
6523if test "$signalfd" = "yes" ; then
6524  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6525fi
6526if test "$tcg" = "yes"; then
6527  echo "CONFIG_TCG=y" >> $config_host_mak
6528  if test "$tcg_interpreter" = "yes" ; then
6529    echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6530  fi
6531fi
6532if test "$fdatasync" = "yes" ; then
6533  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6534fi
6535if test "$madvise" = "yes" ; then
6536  echo "CONFIG_MADVISE=y" >> $config_host_mak
6537fi
6538if test "$posix_madvise" = "yes" ; then
6539  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6540fi
6541if test "$posix_memalign" = "yes" ; then
6542  echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6543fi
6544
6545if test "$spice" = "yes" ; then
6546  echo "CONFIG_SPICE=y" >> $config_host_mak
6547fi
6548
6549if test "$smartcard" = "yes" ; then
6550  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6551  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6552  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6553fi
6554
6555if test "$libusb" = "yes" ; then
6556  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6557  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6558  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6559fi
6560
6561if test "$usb_redir" = "yes" ; then
6562  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6563  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6564  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6565fi
6566
6567if test "$opengl" = "yes" ; then
6568  echo "CONFIG_OPENGL=y" >> $config_host_mak
6569  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6570  if test "$opengl_dmabuf" = "yes" ; then
6571    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6572  fi
6573fi
6574
6575if test "$malloc_trim" = "yes" ; then
6576  echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6577fi
6578
6579if test "$avx2_opt" = "yes" ; then
6580  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6581fi
6582
6583if test "$lzo" = "yes" ; then
6584  echo "CONFIG_LZO=y" >> $config_host_mak
6585fi
6586
6587if test "$snappy" = "yes" ; then
6588  echo "CONFIG_SNAPPY=y" >> $config_host_mak
6589fi
6590
6591if test "$bzip2" = "yes" ; then
6592  echo "CONFIG_BZIP2=y" >> $config_host_mak
6593  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6594fi
6595
6596if test "$libiscsi" = "yes" ; then
6597  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6598  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6599  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6600fi
6601
6602if test "$libnfs" = "yes" ; then
6603  echo "CONFIG_LIBNFS=m" >> $config_host_mak
6604  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6605fi
6606
6607if test "$seccomp" = "yes"; then
6608  echo "CONFIG_SECCOMP=y" >> $config_host_mak
6609  echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6610  echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6611fi
6612
6613# XXX: suppress that
6614if [ "$bsd" = "yes" ] ; then
6615  echo "CONFIG_BSD=y" >> $config_host_mak
6616fi
6617
6618if test "$localtime_r" = "yes" ; then
6619  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6620fi
6621if test "$qom_cast_debug" = "yes" ; then
6622  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6623fi
6624if test "$rbd" = "yes" ; then
6625  echo "CONFIG_RBD=m" >> $config_host_mak
6626  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6627  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6628fi
6629
6630echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6631if test "$coroutine_pool" = "yes" ; then
6632  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6633else
6634  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6635fi
6636
6637if test "$debug_stack_usage" = "yes" ; then
6638  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6639fi
6640
6641if test "$crypto_afalg" = "yes" ; then
6642  echo "CONFIG_AF_ALG=y" >> $config_host_mak
6643fi
6644
6645if test "$open_by_handle_at" = "yes" ; then
6646  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6647fi
6648
6649if test "$linux_magic_h" = "yes" ; then
6650  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6651fi
6652
6653if test "$pragma_diagnostic_available" = "yes" ; then
6654  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6655fi
6656
6657if test "$valgrind_h" = "yes" ; then
6658  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6659fi
6660
6661if test "$have_asan_iface_fiber" = "yes" ; then
6662    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6663fi
6664
6665if test "$has_environ" = "yes" ; then
6666  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6667fi
6668
6669if test "$cpuid_h" = "yes" ; then
6670  echo "CONFIG_CPUID_H=y" >> $config_host_mak
6671fi
6672
6673if test "$int128" = "yes" ; then
6674  echo "CONFIG_INT128=y" >> $config_host_mak
6675fi
6676
6677if test "$atomic128" = "yes" ; then
6678  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6679fi
6680
6681if test "$cmpxchg128" = "yes" ; then
6682  echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6683fi
6684
6685if test "$atomic64" = "yes" ; then
6686  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6687fi
6688
6689if test "$vector16" = "yes" ; then
6690  echo "CONFIG_VECTOR16=y" >> $config_host_mak
6691fi
6692
6693if test "$getauxval" = "yes" ; then
6694  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6695fi
6696
6697if test "$glusterfs" = "yes" ; then
6698  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6699  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6700  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6701fi
6702
6703if test "$glusterfs_xlator_opt" = "yes" ; then
6704  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6705fi
6706
6707if test "$glusterfs_discard" = "yes" ; then
6708  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6709fi
6710
6711if test "$glusterfs_fallocate" = "yes" ; then
6712  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6713fi
6714
6715if test "$glusterfs_zerofill" = "yes" ; then
6716  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6717fi
6718
6719if test "$libssh2" = "yes" ; then
6720  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6721  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6722  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6723fi
6724
6725if test "$live_block_migration" = "yes" ; then
6726  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6727fi
6728
6729if test "$tpm" = "yes"; then
6730  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6731  # TPM passthrough support?
6732  if test "$tpm_passthrough" = "yes"; then
6733    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6734  fi
6735  # TPM emulator support?
6736  if test "$tpm_emulator" = "yes"; then
6737    echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6738  fi
6739fi
6740
6741echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6742if have_backend "nop"; then
6743  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6744fi
6745if have_backend "simple"; then
6746  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6747  # Set the appropriate trace file.
6748  trace_file="\"$trace_file-\" FMT_pid"
6749fi
6750if have_backend "log"; then
6751  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6752fi
6753if have_backend "ust"; then
6754  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6755fi
6756if have_backend "dtrace"; then
6757  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6758  if test "$trace_backend_stap" = "yes" ; then
6759    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6760  fi
6761fi
6762if have_backend "ftrace"; then
6763  if test "$linux" = "yes" ; then
6764    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6765  else
6766    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6767  fi
6768fi
6769if have_backend "syslog"; then
6770  if test "$posix_syslog" = "yes" ; then
6771    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6772  else
6773    feature_not_found "syslog(trace backend)" "syslog not available"
6774  fi
6775fi
6776echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6777
6778if test "$rdma" = "yes" ; then
6779  echo "CONFIG_RDMA=y" >> $config_host_mak
6780  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6781fi
6782
6783if test "$pvrdma" = "yes" ; then
6784  echo "CONFIG_PVRDMA=y" >> $config_host_mak
6785fi
6786
6787if test "$have_rtnetlink" = "yes" ; then
6788  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6789fi
6790
6791if test "$libxml2" = "yes" ; then
6792  echo "CONFIG_LIBXML2=y" >> $config_host_mak
6793  echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6794  echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6795fi
6796
6797if test "$replication" = "yes" ; then
6798  echo "CONFIG_REPLICATION=y" >> $config_host_mak
6799fi
6800
6801if test "$have_af_vsock" = "yes" ; then
6802  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6803fi
6804
6805if test "$have_sysmacros" = "yes" ; then
6806  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6807fi
6808
6809if test "$have_static_assert" = "yes" ; then
6810  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6811fi
6812
6813if test "$have_utmpx" = "yes" ; then
6814  echo "HAVE_UTMPX=y" >> $config_host_mak
6815fi
6816
6817if test "$ivshmem" = "yes" ; then
6818  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6819fi
6820if test "$capstone" != "no" ; then
6821  echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6822fi
6823if test "$debug_mutex" = "yes" ; then
6824  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6825fi
6826
6827# Hold two types of flag:
6828#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
6829#                                     a thread we have a handle to
6830#   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
6831#                                     platform
6832if test "$pthread_setname_np" = "yes" ; then
6833  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6834  echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6835fi
6836
6837if test "$vxhs" = "yes" ; then
6838  echo "CONFIG_VXHS=y" >> $config_host_mak
6839  echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6840fi
6841
6842if test "$libpmem" = "yes" ; then
6843  echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6844fi
6845
6846if test "$tcg_interpreter" = "yes"; then
6847  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6848elif test "$ARCH" = "sparc64" ; then
6849  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6850elif test "$ARCH" = "s390x" ; then
6851  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6852elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6853  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6854elif test "$ARCH" = "ppc64" ; then
6855  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6856else
6857  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6858fi
6859QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
6860
6861echo "TOOLS=$tools" >> $config_host_mak
6862echo "ROMS=$roms" >> $config_host_mak
6863echo "MAKE=$make" >> $config_host_mak
6864echo "INSTALL=$install" >> $config_host_mak
6865echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6866echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6867echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6868echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6869echo "PYTHON=$python" >> $config_host_mak
6870echo "CC=$cc" >> $config_host_mak
6871if $iasl -h > /dev/null 2>&1; then
6872  echo "IASL=$iasl" >> $config_host_mak
6873fi
6874echo "HOST_CC=$host_cc" >> $config_host_mak
6875echo "CXX=$cxx" >> $config_host_mak
6876echo "OBJCC=$objcc" >> $config_host_mak
6877echo "AR=$ar" >> $config_host_mak
6878echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6879echo "AS=$as" >> $config_host_mak
6880echo "CCAS=$ccas" >> $config_host_mak
6881echo "CPP=$cpp" >> $config_host_mak
6882echo "OBJCOPY=$objcopy" >> $config_host_mak
6883echo "LD=$ld" >> $config_host_mak
6884echo "RANLIB=$ranlib" >> $config_host_mak
6885echo "NM=$nm" >> $config_host_mak
6886echo "WINDRES=$windres" >> $config_host_mak
6887echo "CFLAGS=$CFLAGS" >> $config_host_mak
6888echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6889echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6890echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6891echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6892if test "$sparse" = "yes" ; then
6893  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
6894  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
6895  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
6896  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
6897  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6898fi
6899if test "$cross_prefix" != ""; then
6900  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
6901else
6902  echo "AUTOCONF_HOST := "                             >> $config_host_mak
6903fi
6904echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6905echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6906echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6907echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6908echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6909echo "LIBS+=$LIBS" >> $config_host_mak
6910echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6911echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6912echo "EXESUF=$EXESUF" >> $config_host_mak
6913echo "DSOSUF=$DSOSUF" >> $config_host_mak
6914echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6915echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6916echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6917echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6918echo "POD2MAN=$POD2MAN" >> $config_host_mak
6919echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6920if test "$gcov" = "yes" ; then
6921  echo "CONFIG_GCOV=y" >> $config_host_mak
6922  echo "GCOV=$gcov_tool" >> $config_host_mak
6923fi
6924
6925if test "$docker" != "no"; then
6926    echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6927fi
6928
6929# use included Linux headers
6930if test "$linux" = "yes" ; then
6931  mkdir -p linux-headers
6932  case "$cpu" in
6933  i386|x86_64|x32)
6934    linux_arch=x86
6935    ;;
6936  ppc|ppc64)
6937    linux_arch=powerpc
6938    ;;
6939  s390x)
6940    linux_arch=s390
6941    ;;
6942  aarch64)
6943    linux_arch=arm64
6944    ;;
6945  mips64)
6946    linux_arch=mips
6947    ;;
6948  *)
6949    # For most CPUs the kernel architecture name and QEMU CPU name match.
6950    linux_arch="$cpu"
6951    ;;
6952  esac
6953    # For non-KVM architectures we will not have asm headers
6954    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6955      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6956    fi
6957fi
6958
6959for target in $target_list; do
6960target_dir="$target"
6961config_target_mak=$target_dir/config-target.mak
6962target_name=$(echo $target | cut -d '-' -f 1)
6963target_bigendian="no"
6964
6965case "$target_name" in
6966  armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6967  target_bigendian=yes
6968  ;;
6969esac
6970target_softmmu="no"
6971target_user_only="no"
6972target_linux_user="no"
6973target_bsd_user="no"
6974case "$target" in
6975  ${target_name}-softmmu)
6976    target_softmmu="yes"
6977    ;;
6978  ${target_name}-linux-user)
6979    target_user_only="yes"
6980    target_linux_user="yes"
6981    ;;
6982  ${target_name}-bsd-user)
6983    target_user_only="yes"
6984    target_bsd_user="yes"
6985    ;;
6986  *)
6987    error_exit "Target '$target' not recognised"
6988    exit 1
6989    ;;
6990esac
6991
6992target_compiler=""
6993target_compiler_static=""
6994target_compiler_cflags=""
6995
6996mkdir -p $target_dir
6997echo "# Automatically generated by configure - do not modify" > $config_target_mak
6998
6999bflt="no"
7000mttcg="no"
7001interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7002gdb_xml_files=""
7003
7004TARGET_ARCH="$target_name"
7005TARGET_BASE_ARCH=""
7006TARGET_ABI_DIR=""
7007
7008case "$target_name" in
7009  i386)
7010    mttcg="yes"
7011    gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
7012    target_compiler=$cross_cc_i386
7013    target_compiler_cflags=$cross_cc_ccflags_i386
7014  ;;
7015  x86_64)
7016    TARGET_BASE_ARCH=i386
7017    mttcg="yes"
7018    gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
7019    target_compiler=$cross_cc_x86_64
7020  ;;
7021  alpha)
7022    mttcg="yes"
7023    target_compiler=$cross_cc_alpha
7024  ;;
7025  arm|armeb)
7026    TARGET_ARCH=arm
7027    bflt="yes"
7028    mttcg="yes"
7029    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7030    target_compiler=$cross_cc_arm
7031    eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7032  ;;
7033  aarch64|aarch64_be)
7034    TARGET_ARCH=aarch64
7035    TARGET_BASE_ARCH=arm
7036    bflt="yes"
7037    mttcg="yes"
7038    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7039    target_compiler=$cross_cc_aarch64
7040    eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7041  ;;
7042  cris)
7043    target_compiler=$cross_cc_cris
7044  ;;
7045  hppa)
7046    mttcg="yes"
7047    target_compiler=$cross_cc_hppa
7048  ;;
7049  lm32)
7050    target_compiler=$cross_cc_lm32
7051  ;;
7052  m68k)
7053    bflt="yes"
7054    gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
7055    target_compiler=$cross_cc_m68k
7056  ;;
7057  microblaze|microblazeel)
7058    TARGET_ARCH=microblaze
7059    bflt="yes"
7060    echo "TARGET_ABI32=y" >> $config_target_mak
7061    target_compiler=$cross_cc_microblaze
7062  ;;
7063  mips|mipsel)
7064    TARGET_ARCH=mips
7065    target_compiler=$cross_cc_mips
7066    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7067  ;;
7068  mipsn32|mipsn32el)
7069    TARGET_ARCH=mips64
7070    TARGET_BASE_ARCH=mips
7071    target_compiler=$cross_cc_mipsn32
7072    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7073    echo "TARGET_ABI32=y" >> $config_target_mak
7074  ;;
7075  mips64|mips64el)
7076    TARGET_ARCH=mips64
7077    TARGET_BASE_ARCH=mips
7078    target_compiler=$cross_cc_mips64
7079    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7080  ;;
7081  moxie)
7082    target_compiler=$cross_cc_moxie
7083  ;;
7084  nios2)
7085    target_compiler=$cross_cc_nios2
7086  ;;
7087  or1k)
7088    target_compiler=$cross_cc_or1k
7089    TARGET_ARCH=openrisc
7090    TARGET_BASE_ARCH=openrisc
7091  ;;
7092  ppc)
7093    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7094    target_compiler=$cross_cc_powerpc
7095  ;;
7096  ppc64)
7097    TARGET_BASE_ARCH=ppc
7098    TARGET_ABI_DIR=ppc
7099    mttcg=yes
7100    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7101    target_compiler=$cross_cc_ppc64
7102  ;;
7103  ppc64le)
7104    TARGET_ARCH=ppc64
7105    TARGET_BASE_ARCH=ppc
7106    TARGET_ABI_DIR=ppc
7107    mttcg=yes
7108    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7109    target_compiler=$cross_cc_ppc64le
7110  ;;
7111  ppc64abi32)
7112    TARGET_ARCH=ppc64
7113    TARGET_BASE_ARCH=ppc
7114    TARGET_ABI_DIR=ppc
7115    echo "TARGET_ABI32=y" >> $config_target_mak
7116    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7117    target_compiler=$cross_cc_ppc64abi32
7118  ;;
7119  riscv32)
7120    TARGET_BASE_ARCH=riscv
7121    TARGET_ABI_DIR=riscv
7122    mttcg=yes
7123    target_compiler=$cross_cc_riscv32
7124  ;;
7125  riscv64)
7126    TARGET_BASE_ARCH=riscv
7127    TARGET_ABI_DIR=riscv
7128    mttcg=yes
7129    target_compiler=$cross_cc_riscv64
7130  ;;
7131  sh4|sh4eb)
7132    TARGET_ARCH=sh4
7133    bflt="yes"
7134    target_compiler=$cross_cc_sh4
7135  ;;
7136  sparc)
7137    target_compiler=$cross_cc_sparc
7138  ;;
7139  sparc64)
7140    TARGET_BASE_ARCH=sparc
7141    target_compiler=$cross_cc_sparc64
7142  ;;
7143  sparc32plus)
7144    TARGET_ARCH=sparc64
7145    TARGET_BASE_ARCH=sparc
7146    TARGET_ABI_DIR=sparc
7147    target_compiler=$cross_cc_sparc32plus
7148    echo "TARGET_ABI32=y" >> $config_target_mak
7149  ;;
7150  s390x)
7151    mttcg=yes
7152    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7153    target_compiler=$cross_cc_s390x
7154  ;;
7155  tilegx)
7156    target_compiler=$cross_cc_tilegx
7157  ;;
7158  tricore)
7159    target_compiler=$cross_cc_tricore
7160  ;;
7161  unicore32)
7162    target_compiler=$cross_cc_unicore32
7163  ;;
7164  xtensa|xtensaeb)
7165    TARGET_ARCH=xtensa
7166    mttcg="yes"
7167    target_compiler=$cross_cc_xtensa
7168  ;;
7169  *)
7170    error_exit "Unsupported target CPU"
7171  ;;
7172esac
7173# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7174if [ "$TARGET_BASE_ARCH" = "" ]; then
7175  TARGET_BASE_ARCH=$TARGET_ARCH
7176fi
7177
7178# Do we have a cross compiler for this target?
7179if has $target_compiler; then
7180
7181    write_c_skeleton
7182
7183    if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
7184        # For host systems we might get away with building without -static
7185        if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
7186            target_compiler=""
7187        else
7188            enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7189            target_compiler_static="n"
7190        fi
7191    else
7192        enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7193        target_compiler_static="y"
7194    fi
7195else
7196    target_compiler=""
7197fi
7198
7199symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7200
7201upper() {
7202    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7203}
7204
7205target_arch_name="$(upper $TARGET_ARCH)"
7206echo "TARGET_$target_arch_name=y" >> $config_target_mak
7207echo "TARGET_NAME=$target_name" >> $config_target_mak
7208echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7209if [ "$TARGET_ABI_DIR" = "" ]; then
7210  TARGET_ABI_DIR=$TARGET_ARCH
7211fi
7212echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7213if [ "$HOST_VARIANT_DIR" != "" ]; then
7214    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7215fi
7216
7217if supported_xen_target $target; then
7218    echo "CONFIG_XEN=y" >> $config_target_mak
7219    if test "$xen_pci_passthrough" = yes; then
7220        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7221    fi
7222fi
7223if supported_kvm_target $target; then
7224    echo "CONFIG_KVM=y" >> $config_target_mak
7225    if test "$vhost_net" = "yes" ; then
7226        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
7227        if test "$vhost_user" = "yes" ; then
7228            echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7229        fi
7230    fi
7231fi
7232if supported_hax_target $target; then
7233    echo "CONFIG_HAX=y" >> $config_target_mak
7234fi
7235if supported_hvf_target $target; then
7236    echo "CONFIG_HVF=y" >> $config_target_mak
7237fi
7238if supported_whpx_target $target; then
7239    echo "CONFIG_WHPX=y" >> $config_target_mak
7240fi
7241if test "$target_bigendian" = "yes" ; then
7242  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7243fi
7244if test "$target_softmmu" = "yes" ; then
7245  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7246  if test "$mttcg" = "yes" ; then
7247    echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7248  fi
7249fi
7250if test "$target_user_only" = "yes" ; then
7251  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7252  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7253fi
7254if test "$target_linux_user" = "yes" ; then
7255  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7256fi
7257list=""
7258if test ! -z "$gdb_xml_files" ; then
7259  for x in $gdb_xml_files; do
7260    list="$list $source_path/gdb-xml/$x"
7261  done
7262  echo "TARGET_XML_FILES=$list" >> $config_target_mak
7263fi
7264
7265if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
7266  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7267fi
7268if test "$target_bsd_user" = "yes" ; then
7269  echo "CONFIG_BSD_USER=y" >> $config_target_mak
7270fi
7271
7272if test -n "$target_compiler"; then
7273  echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7274
7275  if test -n "$target_compiler_static"; then
7276      echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7277  fi
7278
7279  if test -n "$target_compiler_cflags"; then
7280      echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7281  fi
7282fi
7283
7284
7285# generate QEMU_CFLAGS/LDFLAGS for targets
7286
7287cflags=""
7288ldflags=""
7289
7290disas_config() {
7291  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7292  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7293}
7294
7295for i in $ARCH $TARGET_BASE_ARCH ; do
7296  case "$i" in
7297  alpha)
7298    disas_config "ALPHA"
7299  ;;
7300  aarch64)
7301    if test -n "${cxx}"; then
7302      disas_config "ARM_A64"
7303    fi
7304  ;;
7305  arm)
7306    disas_config "ARM"
7307    if test -n "${cxx}"; then
7308      disas_config "ARM_A64"
7309    fi
7310  ;;
7311  cris)
7312    disas_config "CRIS"
7313  ;;
7314  hppa)
7315    disas_config "HPPA"
7316  ;;
7317  i386|x86_64|x32)
7318    disas_config "I386"
7319  ;;
7320  lm32)
7321    disas_config "LM32"
7322  ;;
7323  m68k)
7324    disas_config "M68K"
7325  ;;
7326  microblaze*)
7327    disas_config "MICROBLAZE"
7328  ;;
7329  mips*)
7330    disas_config "MIPS"
7331  ;;
7332  moxie*)
7333    disas_config "MOXIE"
7334  ;;
7335  nios2)
7336    disas_config "NIOS2"
7337  ;;
7338  or1k)
7339    disas_config "OPENRISC"
7340  ;;
7341  ppc*)
7342    disas_config "PPC"
7343  ;;
7344  riscv)
7345    disas_config "RISCV"
7346  ;;
7347  s390*)
7348    disas_config "S390"
7349  ;;
7350  sh4)
7351    disas_config "SH4"
7352  ;;
7353  sparc*)
7354    disas_config "SPARC"
7355  ;;
7356  xtensa*)
7357    disas_config "XTENSA"
7358  ;;
7359  esac
7360done
7361if test "$tcg_interpreter" = "yes" ; then
7362  disas_config "TCI"
7363fi
7364
7365case "$ARCH" in
7366alpha)
7367  # Ensure there's only a single GP
7368  cflags="-msmall-data $cflags"
7369;;
7370esac
7371
7372if test "$gprof" = "yes" ; then
7373  echo "TARGET_GPROF=yes" >> $config_target_mak
7374  if test "$target_linux_user" = "yes" ; then
7375    cflags="-p $cflags"
7376    ldflags="-p $ldflags"
7377  fi
7378  if test "$target_softmmu" = "yes" ; then
7379    ldflags="-p $ldflags"
7380    echo "GPROF_CFLAGS=-p" >> $config_target_mak
7381  fi
7382fi
7383
7384if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
7385  ldflags="$ldflags $textseg_ldflags"
7386fi
7387
7388# Newer kernels on s390 check for an S390_PGSTE program header and
7389# enable the pgste page table extensions in that case. This makes
7390# the vm.allocate_pgste sysctl unnecessary. We enable this program
7391# header if
7392#  - we build on s390x
7393#  - we build the system emulation for s390x (qemu-system-s390x)
7394#  - KVM is enabled
7395#  - the linker supports --s390-pgste
7396if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes"  -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7397    if ld_has --s390-pgste ; then
7398        ldflags="-Wl,--s390-pgste $ldflags"
7399    fi
7400fi
7401
7402echo "LDFLAGS+=$ldflags" >> $config_target_mak
7403echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7404
7405done # for target in $targets
7406
7407if test -n "$enabled_cross_compilers"; then
7408    echo
7409    echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7410fi
7411
7412if [ "$fdt" = "git" ]; then
7413  echo "config-host.h: subdir-dtc" >> $config_host_mak
7414fi
7415if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7416  echo "config-host.h: subdir-capstone" >> $config_host_mak
7417fi
7418if test -n "$LIBCAPSTONE"; then
7419  echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7420fi
7421
7422if test "$numa" = "yes"; then
7423  echo "CONFIG_NUMA=y" >> $config_host_mak
7424fi
7425
7426if test "$ccache_cpp2" = "yes"; then
7427  echo "export CCACHE_CPP2=y" >> $config_host_mak
7428fi
7429
7430# build tree in object directory in case the source is not in the current directory
7431DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7432DIRS="$DIRS tests/fp"
7433DIRS="$DIRS docs docs/interop fsdev scsi"
7434DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7435DIRS="$DIRS roms/seabios roms/vgabios"
7436FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7437FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7438FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7439FILES="$FILES tests/fp/Makefile"
7440FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
7441FILES="$FILES pc-bios/spapr-rtas/Makefile"
7442FILES="$FILES pc-bios/s390-ccw/Makefile"
7443FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
7444FILES="$FILES pc-bios/qemu-icon.bmp"
7445FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
7446for bios_file in \
7447    $source_path/pc-bios/*.bin \
7448    $source_path/pc-bios/*.lid \
7449    $source_path/pc-bios/*.aml \
7450    $source_path/pc-bios/*.rom \
7451    $source_path/pc-bios/*.dtb \
7452    $source_path/pc-bios/*.img \
7453    $source_path/pc-bios/openbios-* \
7454    $source_path/pc-bios/u-boot.* \
7455    $source_path/pc-bios/palcode-*
7456do
7457    FILES="$FILES pc-bios/$(basename $bios_file)"
7458done
7459for test_file in $(find $source_path/tests/acpi-test-data -type f)
7460do
7461    FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
7462done
7463for test_file in $(find $source_path/tests/hex-loader-check-data -type f)
7464do
7465    FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')"
7466done
7467mkdir -p $DIRS
7468for f in $FILES ; do
7469    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7470        symlink "$source_path/$f" "$f"
7471    fi
7472done
7473
7474# temporary config to build submodules
7475for rom in seabios vgabios ; do
7476    config_mak=roms/$rom/config.mak
7477    echo "# Automatically generated by configure - do not modify" > $config_mak
7478    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7479    echo "AS=$as" >> $config_mak
7480    echo "CCAS=$ccas" >> $config_mak
7481    echo "CC=$cc" >> $config_mak
7482    echo "BCC=bcc" >> $config_mak
7483    echo "CPP=$cpp" >> $config_mak
7484    echo "OBJCOPY=objcopy" >> $config_mak
7485    echo "IASL=$iasl" >> $config_mak
7486    echo "LD=$ld" >> $config_mak
7487    echo "RANLIB=$ranlib" >> $config_mak
7488done
7489
7490# set up tests data directory
7491for tests_subdir in acceptance data; do
7492    if [ ! -e tests/$tests_subdir ]; then
7493        symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
7494    fi
7495done
7496
7497# set up qemu-iotests in this build directory
7498iotests_common_env="tests/qemu-iotests/common.env"
7499iotests_check="tests/qemu-iotests/check"
7500
7501echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7502echo >> "$iotests_common_env"
7503echo "export PYTHON='$python'" >> "$iotests_common_env"
7504
7505if [ ! -e "$iotests_check" ]; then
7506    symlink "$source_path/$iotests_check" "$iotests_check"
7507fi
7508
7509# Save the configure command line for later reuse.
7510cat <<EOD >config.status
7511#!/bin/sh
7512# Generated by configure.
7513# Run this file to recreate the current configuration.
7514# Compiler output produced by configure, useful for debugging
7515# configure, is in config.log if it exists.
7516EOD
7517
7518preserve_env() {
7519    envname=$1
7520
7521    eval envval=\$$envname
7522
7523    if test -n "$envval"
7524    then
7525	echo "$envname='$envval'" >> config.status
7526	echo "export $envname" >> config.status
7527    else
7528	echo "unset $envname" >> config.status
7529    fi
7530}
7531
7532# Preserve various env variables that influence what
7533# features/build target configure will detect
7534preserve_env AR
7535preserve_env AS
7536preserve_env CC
7537preserve_env CPP
7538preserve_env CXX
7539preserve_env INSTALL
7540preserve_env LD
7541preserve_env LD_LIBRARY_PATH
7542preserve_env LIBTOOL
7543preserve_env MAKE
7544preserve_env NM
7545preserve_env OBJCOPY
7546preserve_env PATH
7547preserve_env PKG_CONFIG
7548preserve_env PKG_CONFIG_LIBDIR
7549preserve_env PKG_CONFIG_PATH
7550preserve_env PYTHON
7551preserve_env SDL_CONFIG
7552preserve_env SDL2_CONFIG
7553preserve_env SMBD
7554preserve_env STRIP
7555preserve_env WINDRES
7556
7557printf "exec" >>config.status
7558printf " '%s'" "$0" "$@" >>config.status
7559echo ' "$@"' >>config.status
7560chmod +x config.status
7561
7562rm -r "$TMPDIR1"
7563