xref: /openbmc/qemu/configure (revision 966f2ec3)
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
5157#########################################
5158# See if 64-bit atomic operations are supported.
5159# Note that without __atomic builtins, we can only
5160# assume atomic loads/stores max at pointer size.
5161
5162cat > $TMPC << EOF
5163#include <stdint.h>
5164int main(void)
5165{
5166  uint64_t x = 0, y = 0;
5167#ifdef __ATOMIC_RELAXED
5168  y = __atomic_load_8(&x, 0);
5169  __atomic_store_8(&x, y, 0);
5170  __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5171  __atomic_exchange_8(&x, y, 0);
5172  __atomic_fetch_add_8(&x, y, 0);
5173#else
5174  typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5175  __sync_lock_test_and_set(&x, y);
5176  __sync_val_compare_and_swap(&x, y, 0);
5177  __sync_fetch_and_add(&x, y);
5178#endif
5179  return 0;
5180}
5181EOF
5182if compile_prog "" "" ; then
5183  atomic64=yes
5184fi
5185
5186########################################
5187# See if 16-byte vector operations are supported.
5188# Even without a vector unit the compiler may expand these.
5189# There is a bug in old GCC for PPC that crashes here.
5190# Unfortunately it's the system compiler for Centos 7.
5191
5192cat > $TMPC << EOF
5193typedef unsigned char U1 __attribute__((vector_size(16)));
5194typedef unsigned short U2 __attribute__((vector_size(16)));
5195typedef unsigned int U4 __attribute__((vector_size(16)));
5196typedef unsigned long long U8 __attribute__((vector_size(16)));
5197typedef signed char S1 __attribute__((vector_size(16)));
5198typedef signed short S2 __attribute__((vector_size(16)));
5199typedef signed int S4 __attribute__((vector_size(16)));
5200typedef signed long long S8 __attribute__((vector_size(16)));
5201static U1 a1, b1;
5202static U2 a2, b2;
5203static U4 a4, b4;
5204static U8 a8, b8;
5205static S1 c1;
5206static S2 c2;
5207static S4 c4;
5208static S8 c8;
5209static int i;
5210void helper(void *d, void *a, int shift, int i);
5211void helper(void *d, void *a, int shift, int i)
5212{
5213  *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5214  *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5215  *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5216  *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5217}
5218int main(void)
5219{
5220  a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5221  a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5222  a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5223  a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5224  a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5225  a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5226  a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5227  a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5228  c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5229  return 0;
5230}
5231EOF
5232
5233vector16=no
5234if compile_prog "" "" ; then
5235  vector16=yes
5236fi
5237
5238########################################
5239# check if getauxval is available.
5240
5241getauxval=no
5242cat > $TMPC << EOF
5243#include <sys/auxv.h>
5244int main(void) {
5245  return getauxval(AT_HWCAP) == 0;
5246}
5247EOF
5248if compile_prog "" "" ; then
5249    getauxval=yes
5250fi
5251
5252########################################
5253# check if ccache is interfering with
5254# semantic analysis of macros
5255
5256unset CCACHE_CPP2
5257ccache_cpp2=no
5258cat > $TMPC << EOF
5259static const int Z = 1;
5260#define fn() ({ Z; })
5261#define TAUT(X) ((X) == Z)
5262#define PAREN(X, Y) (X == Y)
5263#define ID(X) (X)
5264int main(int argc, char *argv[])
5265{
5266    int x = 0, y = 0;
5267    x = ID(x);
5268    x = fn();
5269    fn();
5270    if (PAREN(x, y)) return 0;
5271    if (TAUT(Z)) return 0;
5272    return 0;
5273}
5274EOF
5275
5276if ! compile_object "-Werror"; then
5277    ccache_cpp2=yes
5278fi
5279
5280#################################################
5281# clang does not support glibc + FORTIFY_SOURCE.
5282
5283if test "$fortify_source" != "no"; then
5284  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5285    fortify_source="no";
5286  elif test -n "$cxx" && has $cxx &&
5287       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5288    fortify_source="no";
5289  else
5290    fortify_source="yes"
5291  fi
5292fi
5293
5294###############################################
5295# Check if copy_file_range is provided by glibc
5296have_copy_file_range=no
5297cat > $TMPC << EOF
5298#include <unistd.h>
5299int main(void) {
5300  copy_file_range(0, NULL, 0, NULL, 0, 0);
5301  return 0;
5302}
5303EOF
5304if compile_prog "" "" ; then
5305    have_copy_file_range=yes
5306fi
5307
5308##########################################
5309# check if struct fsxattr is available via linux/fs.h
5310
5311have_fsxattr=no
5312cat > $TMPC << EOF
5313#include <linux/fs.h>
5314struct fsxattr foo;
5315int main(void) {
5316  return 0;
5317}
5318EOF
5319if compile_prog "" "" ; then
5320    have_fsxattr=yes
5321fi
5322
5323##########################################
5324# check for usable membarrier system call
5325if test "$membarrier" = "yes"; then
5326    have_membarrier=no
5327    if test "$mingw32" = "yes" ; then
5328        have_membarrier=yes
5329    elif test "$linux" = "yes" ; then
5330        cat > $TMPC << EOF
5331    #include <linux/membarrier.h>
5332    #include <sys/syscall.h>
5333    #include <unistd.h>
5334    #include <stdlib.h>
5335    int main(void) {
5336        syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5337        syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5338	exit(0);
5339    }
5340EOF
5341        if compile_prog "" "" ; then
5342            have_membarrier=yes
5343        fi
5344    fi
5345    if test "$have_membarrier" = "no"; then
5346      feature_not_found "membarrier" "membarrier system call not available"
5347    fi
5348else
5349    # Do not enable it by default even for Mingw32, because it doesn't
5350    # work on Wine.
5351    membarrier=no
5352fi
5353
5354##########################################
5355# check if rtnetlink.h exists and is useful
5356have_rtnetlink=no
5357cat > $TMPC << EOF
5358#include <linux/rtnetlink.h>
5359int main(void) {
5360  return IFLA_PROTO_DOWN;
5361}
5362EOF
5363if compile_prog "" "" ; then
5364    have_rtnetlink=yes
5365fi
5366
5367##########################################
5368# check for usable AF_VSOCK environment
5369have_af_vsock=no
5370cat > $TMPC << EOF
5371#include <errno.h>
5372#include <sys/types.h>
5373#include <sys/socket.h>
5374#if !defined(AF_VSOCK)
5375# error missing AF_VSOCK flag
5376#endif
5377#include <linux/vm_sockets.h>
5378int main(void) {
5379    int sock, ret;
5380    struct sockaddr_vm svm;
5381    socklen_t len = sizeof(svm);
5382    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5383    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5384    if ((ret == -1) && (errno == ENOTCONN)) {
5385        return 0;
5386    }
5387    return -1;
5388}
5389EOF
5390if compile_prog "" "" ; then
5391    have_af_vsock=yes
5392fi
5393
5394##########################################
5395# check for usable AF_ALG environment
5396hava_afalg=no
5397cat > $TMPC << EOF
5398#include <errno.h>
5399#include <sys/types.h>
5400#include <sys/socket.h>
5401#include <linux/if_alg.h>
5402int main(void) {
5403    int sock;
5404    sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5405    return sock;
5406}
5407EOF
5408if compile_prog "" "" ; then
5409    have_afalg=yes
5410fi
5411if test "$crypto_afalg" = "yes"
5412then
5413    if test "$have_afalg" != "yes"
5414    then
5415	error_exit "AF_ALG requested but could not be detected"
5416    fi
5417fi
5418
5419
5420#################################################
5421# Check to see if we have the Hypervisor framework
5422if [ "$darwin" = "yes" ] ; then
5423  cat > $TMPC << EOF
5424#include <Hypervisor/hv.h>
5425int main() { return 0;}
5426EOF
5427  if ! compile_object ""; then
5428    hvf='no'
5429  else
5430    hvf='yes'
5431    LDFLAGS="-framework Hypervisor $LDFLAGS"
5432  fi
5433fi
5434
5435#################################################
5436# Sparc implicitly links with --relax, which is
5437# incompatible with -r, so --no-relax should be
5438# given. It does no harm to give it on other
5439# platforms too.
5440
5441# Note: the prototype is needed since QEMU_CFLAGS
5442#       contains -Wmissing-prototypes
5443cat > $TMPC << EOF
5444extern int foo(void);
5445int foo(void) { return 0; }
5446EOF
5447if ! compile_object ""; then
5448  error_exit "Failed to compile object file for LD_REL_FLAGS test"
5449fi
5450for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5451  if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5452    LD_REL_FLAGS=$i
5453    break
5454  fi
5455done
5456if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5457  feature_not_found "modules" "Cannot find how to build relocatable objects"
5458fi
5459
5460##########################################
5461# check for sysmacros.h
5462
5463have_sysmacros=no
5464cat > $TMPC << EOF
5465#include <sys/sysmacros.h>
5466int main(void) {
5467    return makedev(0, 0);
5468}
5469EOF
5470if compile_prog "" "" ; then
5471    have_sysmacros=yes
5472fi
5473
5474##########################################
5475# Veritas HyperScale block driver VxHS
5476# Check if libvxhs is installed
5477
5478if test "$vxhs" != "no" ; then
5479  cat > $TMPC <<EOF
5480#include <stdint.h>
5481#include <qnio/qnio_api.h>
5482
5483void *vxhs_callback;
5484
5485int main(void) {
5486    iio_init(QNIO_VERSION, vxhs_callback);
5487    return 0;
5488}
5489EOF
5490  vxhs_libs="-lvxhs -lssl"
5491  if compile_prog "" "$vxhs_libs" ; then
5492    vxhs=yes
5493  else
5494    if test "$vxhs" = "yes" ; then
5495      feature_not_found "vxhs block device" "Install libvxhs See github"
5496    fi
5497    vxhs=no
5498  fi
5499fi
5500
5501##########################################
5502# check for _Static_assert()
5503
5504have_static_assert=no
5505cat > $TMPC << EOF
5506_Static_assert(1, "success");
5507int main(void) {
5508    return 0;
5509}
5510EOF
5511if compile_prog "" "" ; then
5512    have_static_assert=yes
5513fi
5514
5515##########################################
5516# check for utmpx.h, it is missing e.g. on OpenBSD
5517
5518have_utmpx=no
5519cat > $TMPC << EOF
5520#include <utmpx.h>
5521struct utmpx user_info;
5522int main(void) {
5523    return 0;
5524}
5525EOF
5526if compile_prog "" "" ; then
5527    have_utmpx=yes
5528fi
5529
5530##########################################
5531# checks for sanitizers
5532
5533have_asan=no
5534have_ubsan=no
5535have_asan_iface_h=no
5536have_asan_iface_fiber=no
5537
5538if test "$sanitizers" = "yes" ; then
5539  write_c_skeleton
5540  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5541      have_asan=yes
5542  fi
5543
5544  # we could use a simple skeleton for flags checks, but this also
5545  # detect the static linking issue of ubsan, see also:
5546  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5547  cat > $TMPC << EOF
5548#include <stdlib.h>
5549int main(void) {
5550    void *tmp = malloc(10);
5551    return *(int *)(tmp + 2);
5552}
5553EOF
5554  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5555      have_ubsan=yes
5556  fi
5557
5558  if check_include "sanitizer/asan_interface.h" ; then
5559      have_asan_iface_h=yes
5560  fi
5561
5562  cat > $TMPC << EOF
5563#include <sanitizer/asan_interface.h>
5564int main(void) {
5565  __sanitizer_start_switch_fiber(0, 0, 0);
5566  return 0;
5567}
5568EOF
5569  if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5570      have_asan_iface_fiber=yes
5571  fi
5572fi
5573
5574##########################################
5575# Docker and cross-compiler support
5576#
5577# This is specifically for building test
5578# cases for foreign architectures, not
5579# cross-compiling QEMU itself.
5580
5581if has "docker"; then
5582    docker=$($python $source_path/tests/docker/docker.py probe)
5583fi
5584
5585##########################################
5586# check for libpmem
5587
5588if test "$libpmem" != "no"; then
5589	if $pkg_config --exists "libpmem"; then
5590		libpmem="yes"
5591		libpmem_libs=$($pkg_config --libs libpmem)
5592		libpmem_cflags=$($pkg_config --cflags libpmem)
5593		libs_softmmu="$libs_softmmu $libpmem_libs"
5594		QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5595	else
5596		if test "$libpmem" = "yes" ; then
5597			feature_not_found "libpmem" "Install nvml or pmdk"
5598		fi
5599		libpmem="no"
5600	fi
5601fi
5602
5603##########################################
5604# End of CC checks
5605# After here, no more $cc or $ld runs
5606
5607write_c_skeleton
5608
5609if test "$gcov" = "yes" ; then
5610  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5611  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5612elif test "$fortify_source" = "yes" ; then
5613  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5614elif test "$debug" = "no"; then
5615  CFLAGS="-O2 $CFLAGS"
5616fi
5617
5618if test "$have_asan" = "yes"; then
5619  CFLAGS="-fsanitize=address $CFLAGS"
5620  if test "$have_asan_iface_h" = "no" ; then
5621      echo "ASAN build enabled, but ASAN header missing." \
5622           "Without code annotation, the report may be inferior."
5623  elif test "$have_asan_iface_fiber" = "no" ; then
5624      echo "ASAN build enabled, but ASAN header is too old." \
5625           "Without code annotation, the report may be inferior."
5626  fi
5627fi
5628if test "$have_ubsan" = "yes"; then
5629  CFLAGS="-fsanitize=undefined $CFLAGS"
5630fi
5631
5632##########################################
5633# Do we have libnfs
5634if test "$libnfs" != "no" ; then
5635  if $pkg_config --atleast-version=1.9.3 libnfs; then
5636    libnfs="yes"
5637    libnfs_libs=$($pkg_config --libs libnfs)
5638  else
5639    if test "$libnfs" = "yes" ; then
5640      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5641    fi
5642    libnfs="no"
5643  fi
5644fi
5645
5646# Now we've finished running tests it's OK to add -Werror to the compiler flags
5647if test "$werror" = "yes"; then
5648    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5649fi
5650
5651if test "$solaris" = "no" ; then
5652    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5653        LDFLAGS="-Wl,--warn-common $LDFLAGS"
5654    fi
5655fi
5656
5657# test if pod2man has --utf8 option
5658if pod2man --help | grep -q utf8; then
5659    POD2MAN="pod2man --utf8"
5660else
5661    POD2MAN="pod2man"
5662fi
5663
5664# Use ASLR, no-SEH and DEP if available
5665if test "$mingw32" = "yes" ; then
5666    for flag in --dynamicbase --no-seh --nxcompat; do
5667        if ld_has $flag ; then
5668            LDFLAGS="-Wl,$flag $LDFLAGS"
5669        fi
5670    done
5671fi
5672
5673qemu_confdir=$sysconfdir$confsuffix
5674qemu_moddir=$libdir$confsuffix
5675qemu_datadir=$datadir$confsuffix
5676qemu_localedir="$datadir/locale"
5677
5678# We can only support ivshmem if we have eventfd
5679if [ "$eventfd" = "yes" ]; then
5680  ivshmem=yes
5681fi
5682
5683tools=""
5684if test "$want_tools" = "yes" ; then
5685  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
5686  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5687    tools="qemu-nbd\$(EXESUF) $tools"
5688  fi
5689  if [ "$ivshmem" = "yes" ]; then
5690    tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5691  fi
5692  if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5693    tools="elf2dmp $tools"
5694  fi
5695fi
5696if test "$softmmu" = yes ; then
5697  if test "$linux" = yes; then
5698    if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5699      virtfs=yes
5700      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5701    else
5702      if test "$virtfs" = yes; then
5703        error_exit "VirtFS requires libcap devel and libattr devel"
5704      fi
5705      virtfs=no
5706    fi
5707    if test "$mpath" != no && test "$mpathpersist" = yes ; then
5708      mpath=yes
5709    else
5710      if test "$mpath" = yes; then
5711        error_exit "Multipath requires libmpathpersist devel"
5712      fi
5713      mpath=no
5714    fi
5715    tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5716  else
5717    if test "$virtfs" = yes; then
5718      error_exit "VirtFS is supported only on Linux"
5719    fi
5720    virtfs=no
5721    if test "$mpath" = yes; then
5722      error_exit "Multipath is supported only on Linux"
5723    fi
5724    mpath=no
5725  fi
5726  if test "$xkbcommon" = "yes"; then
5727    tools="qemu-keymap\$(EXESUF) $tools"
5728  fi
5729fi
5730
5731# Probe for guest agent support/options
5732
5733if [ "$guest_agent" != "no" ]; then
5734  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5735      tools="qemu-ga $tools"
5736      guest_agent=yes
5737  elif [ "$guest_agent" != yes ]; then
5738      guest_agent=no
5739  else
5740      error_exit "Guest agent is not supported on this platform"
5741  fi
5742fi
5743
5744# Guest agent Window MSI  package
5745
5746if test "$guest_agent" != yes; then
5747  if test "$guest_agent_msi" = yes; then
5748    error_exit "MSI guest agent package requires guest agent enabled"
5749  fi
5750  guest_agent_msi=no
5751elif test "$mingw32" != "yes"; then
5752  if test "$guest_agent_msi" = "yes"; then
5753    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5754  fi
5755  guest_agent_msi=no
5756elif ! has wixl; then
5757  if test "$guest_agent_msi" = "yes"; then
5758    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5759  fi
5760  guest_agent_msi=no
5761else
5762  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5763  # disabled explicitly
5764  if test "$guest_agent_msi" != "no"; then
5765    guest_agent_msi=yes
5766  fi
5767fi
5768
5769if test "$guest_agent_msi" = "yes"; then
5770  if test "$guest_agent_with_vss" = "yes"; then
5771    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5772  fi
5773
5774  if test "$QEMU_GA_MANUFACTURER" = ""; then
5775    QEMU_GA_MANUFACTURER=QEMU
5776  fi
5777
5778  if test "$QEMU_GA_DISTRO" = ""; then
5779    QEMU_GA_DISTRO=Linux
5780  fi
5781
5782  if test "$QEMU_GA_VERSION" = ""; then
5783      QEMU_GA_VERSION=$(cat $source_path/VERSION)
5784  fi
5785
5786  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5787
5788  case "$cpu" in
5789  x86_64)
5790    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5791    ;;
5792  i386)
5793    QEMU_GA_MSI_ARCH="-D Arch=32"
5794    ;;
5795  *)
5796    error_exit "CPU $cpu not supported for building installation package"
5797    ;;
5798  esac
5799fi
5800
5801# Mac OS X ships with a broken assembler
5802roms=
5803if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5804        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5805        "$softmmu" = yes ; then
5806    # Different host OS linkers have different ideas about the name of the ELF
5807    # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5808    # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5809    for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5810        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5811            ld_i386_emulation="$emu"
5812            roms="optionrom"
5813            break
5814        fi
5815    done
5816fi
5817if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5818  roms="$roms spapr-rtas"
5819fi
5820
5821if test "$cpu" = "s390x" ; then
5822  roms="$roms s390-ccw"
5823fi
5824
5825# Probe for the need for relocating the user-only binary.
5826if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5827  textseg_addr=
5828  case "$cpu" in
5829    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5830      # ??? Rationale for choosing this address
5831      textseg_addr=0x60000000
5832      ;;
5833    mips)
5834      # A 256M aligned address, high in the address space, with enough
5835      # room for the code_gen_buffer above it before the stack.
5836      textseg_addr=0x60000000
5837      ;;
5838  esac
5839  if [ -n "$textseg_addr" ]; then
5840    cat > $TMPC <<EOF
5841    int main(void) { return 0; }
5842EOF
5843    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5844    if ! compile_prog "" "$textseg_ldflags"; then
5845      # In case ld does not support -Ttext-segment, edit the default linker
5846      # script via sed to set the .text start addr.  This is needed on FreeBSD
5847      # at least.
5848      if ! $ld --verbose >/dev/null 2>&1; then
5849        error_exit \
5850            "We need to link the QEMU user mode binaries at a" \
5851            "specific text address. Unfortunately your linker" \
5852            "doesn't support either the -Ttext-segment option or" \
5853            "printing the default linker script with --verbose." \
5854            "If you don't want the user mode binaries, pass the" \
5855            "--disable-user option to configure."
5856      fi
5857
5858      $ld --verbose | sed \
5859        -e '1,/==================================================/d' \
5860        -e '/==================================================/,$d' \
5861        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5862        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5863      textseg_ldflags="-Wl,-T../config-host.ld"
5864    fi
5865  fi
5866fi
5867
5868# Check that the C++ compiler exists and works with the C compiler.
5869# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5870if has $cxx; then
5871    cat > $TMPC <<EOF
5872int c_function(void);
5873int main(void) { return c_function(); }
5874EOF
5875
5876    compile_object
5877
5878    cat > $TMPCXX <<EOF
5879extern "C" {
5880   int c_function(void);
5881}
5882int c_function(void) { return 42; }
5883EOF
5884
5885    update_cxxflags
5886
5887    if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5888        # C++ compiler $cxx works ok with C compiler $cc
5889        :
5890    else
5891        echo "C++ compiler $cxx does not work with C compiler $cc"
5892        echo "Disabling C++ specific optional code"
5893        cxx=
5894    fi
5895else
5896    echo "No C++ compiler available; disabling C++ specific optional code"
5897    cxx=
5898fi
5899
5900echo_version() {
5901    if test "$1" = "yes" ; then
5902        echo "($2)"
5903    fi
5904}
5905
5906# prepend pixman and ftd flags after all config tests are done
5907QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5908QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
5909libs_softmmu="$pixman_libs $libs_softmmu"
5910
5911echo "Install prefix    $prefix"
5912echo "BIOS directory    $(eval echo $qemu_datadir)"
5913echo "firmware path     $(eval echo $firmwarepath)"
5914echo "binary directory  $(eval echo $bindir)"
5915echo "library directory $(eval echo $libdir)"
5916echo "module directory  $(eval echo $qemu_moddir)"
5917echo "libexec directory $(eval echo $libexecdir)"
5918echo "include directory $(eval echo $includedir)"
5919echo "config directory  $(eval echo $sysconfdir)"
5920if test "$mingw32" = "no" ; then
5921echo "local state directory   $(eval echo $local_statedir)"
5922echo "Manual directory  $(eval echo $mandir)"
5923echo "ELF interp prefix $interp_prefix"
5924else
5925echo "local state directory   queried at runtime"
5926echo "Windows SDK       $win_sdk"
5927fi
5928echo "Source path       $source_path"
5929echo "GIT binary        $git"
5930echo "GIT submodules    $git_submodules"
5931echo "C compiler        $cc"
5932echo "Host C compiler   $host_cc"
5933echo "C++ compiler      $cxx"
5934echo "Objective-C compiler $objcc"
5935echo "ARFLAGS           $ARFLAGS"
5936echo "CFLAGS            $CFLAGS"
5937echo "QEMU_CFLAGS       $QEMU_CFLAGS"
5938echo "LDFLAGS           $LDFLAGS"
5939echo "QEMU_LDFLAGS      $QEMU_LDFLAGS"
5940echo "make              $make"
5941echo "install           $install"
5942echo "python            $python"
5943if test "$slirp" = "yes" ; then
5944    echo "smbd              $smbd"
5945fi
5946echo "module support    $modules"
5947echo "host CPU          $cpu"
5948echo "host big endian   $bigendian"
5949echo "target list       $target_list"
5950echo "gprof enabled     $gprof"
5951echo "sparse enabled    $sparse"
5952echo "strip binaries    $strip_opt"
5953echo "profiler          $profiler"
5954echo "static build      $static"
5955if test "$darwin" = "yes" ; then
5956    echo "Cocoa support     $cocoa"
5957fi
5958echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
5959echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
5960echo "GTK GL support    $gtk_gl"
5961echo "VTE support       $vte $(echo_version $vte $vteversion)"
5962echo "TLS priority      $tls_priority"
5963echo "GNUTLS support    $gnutls"
5964echo "GNUTLS rnd        $gnutls_rnd"
5965echo "libgcrypt         $gcrypt"
5966echo "libgcrypt kdf     $gcrypt_kdf"
5967echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
5968echo "nettle kdf        $nettle_kdf"
5969echo "libtasn1          $tasn1"
5970echo "curses support    $curses"
5971echo "virgl support     $virglrenderer $(echo_version $virglrenderer $virgl_version)"
5972echo "curl support      $curl"
5973echo "mingw32 support   $mingw32"
5974echo "Audio drivers     $audio_drv_list"
5975echo "Block whitelist (rw) $block_drv_rw_whitelist"
5976echo "Block whitelist (ro) $block_drv_ro_whitelist"
5977echo "VirtFS support    $virtfs"
5978echo "Multipath support $mpath"
5979echo "VNC support       $vnc"
5980if test "$vnc" = "yes" ; then
5981    echo "VNC SASL support  $vnc_sasl"
5982    echo "VNC JPEG support  $vnc_jpeg"
5983    echo "VNC PNG support   $vnc_png"
5984fi
5985if test -n "$sparc_cpu"; then
5986    echo "Target Sparc Arch $sparc_cpu"
5987fi
5988echo "xen support       $xen"
5989if test "$xen" = "yes" ; then
5990  echo "xen ctrl version  $xen_ctrl_version"
5991  echo "pv dom build      $xen_pv_domain_build"
5992fi
5993echo "brlapi support    $brlapi"
5994echo "bluez  support    $bluez"
5995echo "Documentation     $docs"
5996echo "PIE               $pie"
5997echo "vde support       $vde"
5998echo "netmap support    $netmap"
5999echo "Linux AIO support $linux_aio"
6000echo "ATTR/XATTR support $attr"
6001echo "Install blobs     $blobs"
6002echo "KVM support       $kvm"
6003echo "HAX support       $hax"
6004echo "HVF support       $hvf"
6005echo "WHPX support      $whpx"
6006echo "TCG support       $tcg"
6007if test "$tcg" = "yes" ; then
6008    echo "TCG debug enabled $debug_tcg"
6009    echo "TCG interpreter   $tcg_interpreter"
6010fi
6011echo "malloc trim support $malloc_trim"
6012echo "RDMA support      $rdma"
6013echo "PVRDMA support    $pvrdma"
6014echo "fdt support       $fdt"
6015echo "membarrier        $membarrier"
6016echo "preadv support    $preadv"
6017echo "fdatasync         $fdatasync"
6018echo "madvise           $madvise"
6019echo "posix_madvise     $posix_madvise"
6020echo "posix_memalign    $posix_memalign"
6021echo "libcap-ng support $cap_ng"
6022echo "vhost-net support $vhost_net"
6023echo "vhost-crypto support $vhost_crypto"
6024echo "vhost-scsi support $vhost_scsi"
6025echo "vhost-vsock support $vhost_vsock"
6026echo "vhost-user support $vhost_user"
6027echo "Trace backends    $trace_backends"
6028if have_backend "simple"; then
6029echo "Trace output file $trace_file-<pid>"
6030fi
6031echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6032echo "rbd support       $rbd"
6033echo "xfsctl support    $xfs"
6034echo "smartcard support $smartcard"
6035echo "libusb            $libusb"
6036echo "usb net redir     $usb_redir"
6037echo "OpenGL support    $opengl"
6038echo "OpenGL dmabufs    $opengl_dmabuf"
6039echo "libiscsi support  $libiscsi"
6040echo "libnfs support    $libnfs"
6041echo "build guest agent $guest_agent"
6042echo "QGA VSS support   $guest_agent_with_vss"
6043echo "QGA w32 disk info $guest_agent_ntddscsi"
6044echo "QGA MSI support   $guest_agent_msi"
6045echo "seccomp support   $seccomp"
6046echo "coroutine backend $coroutine"
6047echo "coroutine pool    $coroutine_pool"
6048echo "debug stack usage $debug_stack_usage"
6049echo "mutex debugging   $debug_mutex"
6050echo "crypto afalg      $crypto_afalg"
6051echo "GlusterFS support $glusterfs"
6052echo "gcov              $gcov_tool"
6053echo "gcov enabled      $gcov"
6054echo "TPM support       $tpm"
6055echo "libssh2 support   $libssh2"
6056echo "TPM passthrough   $tpm_passthrough"
6057echo "TPM emulator      $tpm_emulator"
6058echo "QOM debugging     $qom_cast_debug"
6059echo "Live block migration $live_block_migration"
6060echo "lzo support       $lzo"
6061echo "snappy support    $snappy"
6062echo "bzip2 support     $bzip2"
6063echo "NUMA host support $numa"
6064echo "libxml2           $libxml2"
6065echo "tcmalloc support  $tcmalloc"
6066echo "jemalloc support  $jemalloc"
6067echo "avx2 optimization $avx2_opt"
6068echo "replication support $replication"
6069echo "VxHS block device $vxhs"
6070echo "capstone          $capstone"
6071echo "docker            $docker"
6072echo "libpmem support   $libpmem"
6073
6074if test "$sdl_too_old" = "yes"; then
6075echo "-> Your SDL version is too old - please upgrade to have SDL support"
6076fi
6077
6078if test "$sdlabi" = "1.2"; then
6079    echo
6080    echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6081    echo "WARNING: future releases. Please switch to using SDL 2.0"
6082fi
6083
6084if test "$supported_cpu" = "no"; then
6085    echo
6086    echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6087    echo
6088    echo "CPU host architecture $cpu support is not currently maintained."
6089    echo "The QEMU project intends to remove support for this host CPU in"
6090    echo "a future release if nobody volunteers to maintain it and to"
6091    echo "provide a build host for our continuous integration setup."
6092    echo "configure has succeeded and you can continue to build, but"
6093    echo "if you care about QEMU on this platform you should contact"
6094    echo "us upstream at qemu-devel@nongnu.org."
6095fi
6096
6097if test "$supported_os" = "no"; then
6098    echo
6099    echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6100    echo
6101    echo "Host OS $targetos support is not currently maintained."
6102    echo "The QEMU project intends to remove support for this host OS in"
6103    echo "a future release if nobody volunteers to maintain it and to"
6104    echo "provide a build host for our continuous integration setup."
6105    echo "configure has succeeded and you can continue to build, but"
6106    echo "if you care about QEMU on this platform you should contact"
6107    echo "us upstream at qemu-devel@nongnu.org."
6108fi
6109
6110config_host_mak="config-host.mak"
6111
6112echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6113
6114echo "# Automatically generated by configure - do not modify" > $config_host_mak
6115echo >> $config_host_mak
6116
6117echo all: >> $config_host_mak
6118echo "prefix=$prefix" >> $config_host_mak
6119echo "bindir=$bindir" >> $config_host_mak
6120echo "libdir=$libdir" >> $config_host_mak
6121echo "libexecdir=$libexecdir" >> $config_host_mak
6122echo "includedir=$includedir" >> $config_host_mak
6123echo "mandir=$mandir" >> $config_host_mak
6124echo "sysconfdir=$sysconfdir" >> $config_host_mak
6125echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6126echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6127echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6128echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6129echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6130if test "$mingw32" = "no" ; then
6131  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6132fi
6133echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6134echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6135echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6136echo "GIT=$git" >> $config_host_mak
6137echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6138echo "GIT_UPDATE=$git_update" >> $config_host_mak
6139
6140echo "ARCH=$ARCH" >> $config_host_mak
6141
6142if test "$debug_tcg" = "yes" ; then
6143  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6144fi
6145if test "$strip_opt" = "yes" ; then
6146  echo "STRIP=${strip}" >> $config_host_mak
6147fi
6148if test "$bigendian" = "yes" ; then
6149  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6150fi
6151if test "$mingw32" = "yes" ; then
6152  echo "CONFIG_WIN32=y" >> $config_host_mak
6153  rc_version=$(cat $source_path/VERSION)
6154  version_major=${rc_version%%.*}
6155  rc_version=${rc_version#*.}
6156  version_minor=${rc_version%%.*}
6157  rc_version=${rc_version#*.}
6158  version_subminor=${rc_version%%.*}
6159  version_micro=0
6160  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6161  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6162  if test "$guest_agent_with_vss" = "yes" ; then
6163    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6164    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6165    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6166  fi
6167  if test "$guest_agent_ntddscsi" = "yes" ; then
6168    echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6169  fi
6170  if test "$guest_agent_msi" = "yes"; then
6171    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6172    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6173    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6174    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6175    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6176    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6177    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6178  fi
6179else
6180  echo "CONFIG_POSIX=y" >> $config_host_mak
6181fi
6182
6183if test "$linux" = "yes" ; then
6184  echo "CONFIG_LINUX=y" >> $config_host_mak
6185fi
6186
6187if test "$darwin" = "yes" ; then
6188  echo "CONFIG_DARWIN=y" >> $config_host_mak
6189fi
6190
6191if test "$solaris" = "yes" ; then
6192  echo "CONFIG_SOLARIS=y" >> $config_host_mak
6193fi
6194if test "$haiku" = "yes" ; then
6195  echo "CONFIG_HAIKU=y" >> $config_host_mak
6196fi
6197if test "$static" = "yes" ; then
6198  echo "CONFIG_STATIC=y" >> $config_host_mak
6199fi
6200if test "$profiler" = "yes" ; then
6201  echo "CONFIG_PROFILER=y" >> $config_host_mak
6202fi
6203if test "$slirp" = "yes" ; then
6204  echo "CONFIG_SLIRP=y" >> $config_host_mak
6205  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6206fi
6207if test "$vde" = "yes" ; then
6208  echo "CONFIG_VDE=y" >> $config_host_mak
6209  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6210fi
6211if test "$netmap" = "yes" ; then
6212  echo "CONFIG_NETMAP=y" >> $config_host_mak
6213fi
6214if test "$l2tpv3" = "yes" ; then
6215  echo "CONFIG_L2TPV3=y" >> $config_host_mak
6216fi
6217if test "$cap_ng" = "yes" ; then
6218  echo "CONFIG_LIBCAP=y" >> $config_host_mak
6219fi
6220echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6221for drv in $audio_drv_list; do
6222    def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6223    case "$drv" in
6224	alsa | oss | pa | sdl)
6225	    echo "$def=m" >> $config_host_mak ;;
6226	*)
6227	    echo "$def=y" >> $config_host_mak ;;
6228    esac
6229done
6230echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6231echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6232echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6233echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6234echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6235if test "$audio_pt_int" = "yes" ; then
6236  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6237fi
6238if test "$audio_win_int" = "yes" ; then
6239  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6240fi
6241echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6242echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6243if test "$vnc" = "yes" ; then
6244  echo "CONFIG_VNC=y" >> $config_host_mak
6245fi
6246if test "$vnc_sasl" = "yes" ; then
6247  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6248fi
6249if test "$vnc_jpeg" = "yes" ; then
6250  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6251fi
6252if test "$vnc_png" = "yes" ; then
6253  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6254fi
6255if test "$xkbcommon" = "yes" ; then
6256  echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6257  echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6258fi
6259if test "$fnmatch" = "yes" ; then
6260  echo "CONFIG_FNMATCH=y" >> $config_host_mak
6261fi
6262if test "$xfs" = "yes" ; then
6263  echo "CONFIG_XFS=y" >> $config_host_mak
6264fi
6265qemu_version=$(head $source_path/VERSION)
6266echo "VERSION=$qemu_version" >>$config_host_mak
6267echo "PKGVERSION=$pkgversion" >>$config_host_mak
6268echo "SRC_PATH=$source_path" >> $config_host_mak
6269echo "TARGET_DIRS=$target_list" >> $config_host_mak
6270if [ "$docs" = "yes" ] ; then
6271  echo "BUILD_DOCS=yes" >> $config_host_mak
6272fi
6273if test "$modules" = "yes"; then
6274  # $shacmd can generate a hash started with digit, which the compiler doesn't
6275  # like as an symbol. So prefix it with an underscore
6276  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6277  echo "CONFIG_MODULES=y" >> $config_host_mak
6278fi
6279if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6280  echo "CONFIG_X11=y" >> $config_host_mak
6281  echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6282  echo "X11_LIBS=$x11_libs" >> $config_host_mak
6283fi
6284if test "$sdl" = "yes" ; then
6285  echo "CONFIG_SDL=m" >> $config_host_mak
6286  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
6287  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6288  echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6289fi
6290if test "$cocoa" = "yes" ; then
6291  echo "CONFIG_COCOA=y" >> $config_host_mak
6292fi
6293if test "$curses" = "yes" ; then
6294  echo "CONFIG_CURSES=m" >> $config_host_mak
6295  echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6296  echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6297fi
6298if test "$pipe2" = "yes" ; then
6299  echo "CONFIG_PIPE2=y" >> $config_host_mak
6300fi
6301if test "$accept4" = "yes" ; then
6302  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6303fi
6304if test "$splice" = "yes" ; then
6305  echo "CONFIG_SPLICE=y" >> $config_host_mak
6306fi
6307if test "$eventfd" = "yes" ; then
6308  echo "CONFIG_EVENTFD=y" >> $config_host_mak
6309fi
6310if test "$memfd" = "yes" ; then
6311  echo "CONFIG_MEMFD=y" >> $config_host_mak
6312fi
6313if test "$fallocate" = "yes" ; then
6314  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6315fi
6316if test "$fallocate_punch_hole" = "yes" ; then
6317  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6318fi
6319if test "$fallocate_zero_range" = "yes" ; then
6320  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6321fi
6322if test "$posix_fallocate" = "yes" ; then
6323  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6324fi
6325if test "$sync_file_range" = "yes" ; then
6326  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6327fi
6328if test "$fiemap" = "yes" ; then
6329  echo "CONFIG_FIEMAP=y" >> $config_host_mak
6330fi
6331if test "$dup3" = "yes" ; then
6332  echo "CONFIG_DUP3=y" >> $config_host_mak
6333fi
6334if test "$ppoll" = "yes" ; then
6335  echo "CONFIG_PPOLL=y" >> $config_host_mak
6336fi
6337if test "$prctl_pr_set_timerslack" = "yes" ; then
6338  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6339fi
6340if test "$epoll" = "yes" ; then
6341  echo "CONFIG_EPOLL=y" >> $config_host_mak
6342fi
6343if test "$epoll_create1" = "yes" ; then
6344  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6345fi
6346if test "$sendfile" = "yes" ; then
6347  echo "CONFIG_SENDFILE=y" >> $config_host_mak
6348fi
6349if test "$timerfd" = "yes" ; then
6350  echo "CONFIG_TIMERFD=y" >> $config_host_mak
6351fi
6352if test "$setns" = "yes" ; then
6353  echo "CONFIG_SETNS=y" >> $config_host_mak
6354fi
6355if test "$clock_adjtime" = "yes" ; then
6356  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6357fi
6358if test "$syncfs" = "yes" ; then
6359  echo "CONFIG_SYNCFS=y" >> $config_host_mak
6360fi
6361if test "$inotify" = "yes" ; then
6362  echo "CONFIG_INOTIFY=y" >> $config_host_mak
6363fi
6364if test "$inotify1" = "yes" ; then
6365  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6366fi
6367if test "$sem_timedwait" = "yes" ; then
6368  echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6369fi
6370if test "$strchrnul" = "yes" ; then
6371  echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6372fi
6373if test "$byteswap_h" = "yes" ; then
6374  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6375fi
6376if test "$bswap_h" = "yes" ; then
6377  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6378fi
6379if test "$curl" = "yes" ; then
6380  echo "CONFIG_CURL=m" >> $config_host_mak
6381  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6382  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6383fi
6384if test "$brlapi" = "yes" ; then
6385  echo "CONFIG_BRLAPI=y" >> $config_host_mak
6386  echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6387fi
6388if test "$bluez" = "yes" ; then
6389  echo "CONFIG_BLUEZ=y" >> $config_host_mak
6390  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6391fi
6392if test "$gtk" = "yes" ; then
6393  echo "CONFIG_GTK=m" >> $config_host_mak
6394  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6395  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6396  if test "$gtk_gl" = "yes" ; then
6397    echo "CONFIG_GTK_GL=y" >> $config_host_mak
6398  fi
6399fi
6400echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6401if test "$gnutls" = "yes" ; then
6402  echo "CONFIG_GNUTLS=y" >> $config_host_mak
6403fi
6404if test "$gnutls_rnd" = "yes" ; then
6405  echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6406fi
6407if test "$gcrypt" = "yes" ; then
6408  echo "CONFIG_GCRYPT=y" >> $config_host_mak
6409  if test "$gcrypt_hmac" = "yes" ; then
6410    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6411  fi
6412  if test "$gcrypt_kdf" = "yes" ; then
6413    echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6414  fi
6415fi
6416if test "$nettle" = "yes" ; then
6417  echo "CONFIG_NETTLE=y" >> $config_host_mak
6418  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6419  if test "$nettle_kdf" = "yes" ; then
6420    echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6421  fi
6422fi
6423if test "$tasn1" = "yes" ; then
6424  echo "CONFIG_TASN1=y" >> $config_host_mak
6425fi
6426if test "$have_ifaddrs_h" = "yes" ; then
6427    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6428fi
6429if test "$have_broken_size_max" = "yes" ; then
6430    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6431fi
6432
6433# Work around a system header bug with some kernel/XFS header
6434# versions where they both try to define 'struct fsxattr':
6435# xfs headers will not try to redefine structs from linux headers
6436# if this macro is set.
6437if test "$have_fsxattr" = "yes" ; then
6438    echo "HAVE_FSXATTR=y" >> $config_host_mak
6439fi
6440if test "$have_copy_file_range" = "yes" ; then
6441    echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6442fi
6443if test "$vte" = "yes" ; then
6444  echo "CONFIG_VTE=y" >> $config_host_mak
6445  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6446  echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6447fi
6448if test "$virglrenderer" = "yes" ; then
6449  echo "CONFIG_VIRGL=y" >> $config_host_mak
6450  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6451  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6452fi
6453if test "$xen" = "yes" ; then
6454  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6455  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6456  if test "$xen_pv_domain_build" = "yes" ; then
6457    echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6458  fi
6459fi
6460if test "$linux_aio" = "yes" ; then
6461  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6462fi
6463if test "$attr" = "yes" ; then
6464  echo "CONFIG_ATTR=y" >> $config_host_mak
6465fi
6466if test "$libattr" = "yes" ; then
6467  echo "CONFIG_LIBATTR=y" >> $config_host_mak
6468fi
6469if test "$virtfs" = "yes" ; then
6470  echo "CONFIG_VIRTFS=y" >> $config_host_mak
6471fi
6472if test "$mpath" = "yes" ; then
6473  echo "CONFIG_MPATH=y" >> $config_host_mak
6474  if test "$mpathpersist_new_api" = "yes"; then
6475    echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6476  fi
6477fi
6478if test "$vhost_scsi" = "yes" ; then
6479  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6480fi
6481if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6482  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6483fi
6484if test "$vhost_crypto" = "yes" ; then
6485  echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6486fi
6487if test "$vhost_vsock" = "yes" ; then
6488  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6489fi
6490if test "$vhost_user" = "yes" ; then
6491  echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6492fi
6493if test "$blobs" = "yes" ; then
6494  echo "INSTALL_BLOBS=yes" >> $config_host_mak
6495fi
6496if test "$iovec" = "yes" ; then
6497  echo "CONFIG_IOVEC=y" >> $config_host_mak
6498fi
6499if test "$preadv" = "yes" ; then
6500  echo "CONFIG_PREADV=y" >> $config_host_mak
6501fi
6502if test "$fdt" != "no" ; then
6503  echo "CONFIG_FDT=y" >> $config_host_mak
6504fi
6505if test "$membarrier" = "yes" ; then
6506  echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6507fi
6508if test "$signalfd" = "yes" ; then
6509  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6510fi
6511if test "$tcg" = "yes"; then
6512  echo "CONFIG_TCG=y" >> $config_host_mak
6513  if test "$tcg_interpreter" = "yes" ; then
6514    echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6515  fi
6516fi
6517if test "$fdatasync" = "yes" ; then
6518  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6519fi
6520if test "$madvise" = "yes" ; then
6521  echo "CONFIG_MADVISE=y" >> $config_host_mak
6522fi
6523if test "$posix_madvise" = "yes" ; then
6524  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6525fi
6526if test "$posix_memalign" = "yes" ; then
6527  echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6528fi
6529
6530if test "$spice" = "yes" ; then
6531  echo "CONFIG_SPICE=y" >> $config_host_mak
6532fi
6533
6534if test "$smartcard" = "yes" ; then
6535  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6536  echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6537  echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6538fi
6539
6540if test "$libusb" = "yes" ; then
6541  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6542  echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6543  echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6544fi
6545
6546if test "$usb_redir" = "yes" ; then
6547  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6548  echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6549  echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6550fi
6551
6552if test "$opengl" = "yes" ; then
6553  echo "CONFIG_OPENGL=y" >> $config_host_mak
6554  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6555  if test "$opengl_dmabuf" = "yes" ; then
6556    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6557  fi
6558fi
6559
6560if test "$malloc_trim" = "yes" ; then
6561  echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6562fi
6563
6564if test "$avx2_opt" = "yes" ; then
6565  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6566fi
6567
6568if test "$lzo" = "yes" ; then
6569  echo "CONFIG_LZO=y" >> $config_host_mak
6570fi
6571
6572if test "$snappy" = "yes" ; then
6573  echo "CONFIG_SNAPPY=y" >> $config_host_mak
6574fi
6575
6576if test "$bzip2" = "yes" ; then
6577  echo "CONFIG_BZIP2=y" >> $config_host_mak
6578  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6579fi
6580
6581if test "$libiscsi" = "yes" ; then
6582  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6583  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6584  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6585fi
6586
6587if test "$libnfs" = "yes" ; then
6588  echo "CONFIG_LIBNFS=m" >> $config_host_mak
6589  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6590fi
6591
6592if test "$seccomp" = "yes"; then
6593  echo "CONFIG_SECCOMP=y" >> $config_host_mak
6594  echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6595  echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6596fi
6597
6598# XXX: suppress that
6599if [ "$bsd" = "yes" ] ; then
6600  echo "CONFIG_BSD=y" >> $config_host_mak
6601fi
6602
6603if test "$localtime_r" = "yes" ; then
6604  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6605fi
6606if test "$qom_cast_debug" = "yes" ; then
6607  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6608fi
6609if test "$rbd" = "yes" ; then
6610  echo "CONFIG_RBD=m" >> $config_host_mak
6611  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6612  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6613fi
6614
6615echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6616if test "$coroutine_pool" = "yes" ; then
6617  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6618else
6619  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6620fi
6621
6622if test "$debug_stack_usage" = "yes" ; then
6623  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6624fi
6625
6626if test "$crypto_afalg" = "yes" ; then
6627  echo "CONFIG_AF_ALG=y" >> $config_host_mak
6628fi
6629
6630if test "$open_by_handle_at" = "yes" ; then
6631  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6632fi
6633
6634if test "$linux_magic_h" = "yes" ; then
6635  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6636fi
6637
6638if test "$pragma_diagnostic_available" = "yes" ; then
6639  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6640fi
6641
6642if test "$valgrind_h" = "yes" ; then
6643  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6644fi
6645
6646if test "$have_asan_iface_fiber" = "yes" ; then
6647    echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6648fi
6649
6650if test "$has_environ" = "yes" ; then
6651  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6652fi
6653
6654if test "$cpuid_h" = "yes" ; then
6655  echo "CONFIG_CPUID_H=y" >> $config_host_mak
6656fi
6657
6658if test "$int128" = "yes" ; then
6659  echo "CONFIG_INT128=y" >> $config_host_mak
6660fi
6661
6662if test "$atomic128" = "yes" ; then
6663  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6664fi
6665
6666if test "$atomic64" = "yes" ; then
6667  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6668fi
6669
6670if test "$vector16" = "yes" ; then
6671  echo "CONFIG_VECTOR16=y" >> $config_host_mak
6672fi
6673
6674if test "$getauxval" = "yes" ; then
6675  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6676fi
6677
6678if test "$glusterfs" = "yes" ; then
6679  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6680  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6681  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6682fi
6683
6684if test "$glusterfs_xlator_opt" = "yes" ; then
6685  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6686fi
6687
6688if test "$glusterfs_discard" = "yes" ; then
6689  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6690fi
6691
6692if test "$glusterfs_fallocate" = "yes" ; then
6693  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6694fi
6695
6696if test "$glusterfs_zerofill" = "yes" ; then
6697  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6698fi
6699
6700if test "$libssh2" = "yes" ; then
6701  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6702  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6703  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6704fi
6705
6706if test "$live_block_migration" = "yes" ; then
6707  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6708fi
6709
6710if test "$tpm" = "yes"; then
6711  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6712  # TPM passthrough support?
6713  if test "$tpm_passthrough" = "yes"; then
6714    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6715  fi
6716  # TPM emulator support?
6717  if test "$tpm_emulator" = "yes"; then
6718    echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6719  fi
6720fi
6721
6722echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6723if have_backend "nop"; then
6724  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6725fi
6726if have_backend "simple"; then
6727  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6728  # Set the appropriate trace file.
6729  trace_file="\"$trace_file-\" FMT_pid"
6730fi
6731if have_backend "log"; then
6732  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6733fi
6734if have_backend "ust"; then
6735  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6736fi
6737if have_backend "dtrace"; then
6738  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6739  if test "$trace_backend_stap" = "yes" ; then
6740    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6741  fi
6742fi
6743if have_backend "ftrace"; then
6744  if test "$linux" = "yes" ; then
6745    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6746  else
6747    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6748  fi
6749fi
6750if have_backend "syslog"; then
6751  if test "$posix_syslog" = "yes" ; then
6752    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6753  else
6754    feature_not_found "syslog(trace backend)" "syslog not available"
6755  fi
6756fi
6757echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6758
6759if test "$rdma" = "yes" ; then
6760  echo "CONFIG_RDMA=y" >> $config_host_mak
6761  echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6762fi
6763
6764if test "$pvrdma" = "yes" ; then
6765  echo "CONFIG_PVRDMA=y" >> $config_host_mak
6766fi
6767
6768if test "$have_rtnetlink" = "yes" ; then
6769  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6770fi
6771
6772if test "$libxml2" = "yes" ; then
6773  echo "CONFIG_LIBXML2=y" >> $config_host_mak
6774  echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6775  echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6776fi
6777
6778if test "$replication" = "yes" ; then
6779  echo "CONFIG_REPLICATION=y" >> $config_host_mak
6780fi
6781
6782if test "$have_af_vsock" = "yes" ; then
6783  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6784fi
6785
6786if test "$have_sysmacros" = "yes" ; then
6787  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6788fi
6789
6790if test "$have_static_assert" = "yes" ; then
6791  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6792fi
6793
6794if test "$have_utmpx" = "yes" ; then
6795  echo "HAVE_UTMPX=y" >> $config_host_mak
6796fi
6797
6798if test "$ivshmem" = "yes" ; then
6799  echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6800fi
6801if test "$capstone" != "no" ; then
6802  echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6803fi
6804if test "$debug_mutex" = "yes" ; then
6805  echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6806fi
6807
6808# Hold two types of flag:
6809#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
6810#                                     a thread we have a handle to
6811#   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
6812#                                     platform
6813if test "$pthread_setname_np" = "yes" ; then
6814  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6815  echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6816fi
6817
6818if test "$vxhs" = "yes" ; then
6819  echo "CONFIG_VXHS=y" >> $config_host_mak
6820  echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6821fi
6822
6823if test "$libpmem" = "yes" ; then
6824  echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6825fi
6826
6827if test "$tcg_interpreter" = "yes"; then
6828  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6829elif test "$ARCH" = "sparc64" ; then
6830  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6831elif test "$ARCH" = "s390x" ; then
6832  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6833elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6834  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6835elif test "$ARCH" = "ppc64" ; then
6836  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6837else
6838  QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6839fi
6840QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
6841
6842echo "TOOLS=$tools" >> $config_host_mak
6843echo "ROMS=$roms" >> $config_host_mak
6844echo "MAKE=$make" >> $config_host_mak
6845echo "INSTALL=$install" >> $config_host_mak
6846echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6847echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6848echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6849echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6850echo "PYTHON=$python" >> $config_host_mak
6851echo "CC=$cc" >> $config_host_mak
6852if $iasl -h > /dev/null 2>&1; then
6853  echo "IASL=$iasl" >> $config_host_mak
6854fi
6855echo "HOST_CC=$host_cc" >> $config_host_mak
6856echo "CXX=$cxx" >> $config_host_mak
6857echo "OBJCC=$objcc" >> $config_host_mak
6858echo "AR=$ar" >> $config_host_mak
6859echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6860echo "AS=$as" >> $config_host_mak
6861echo "CCAS=$ccas" >> $config_host_mak
6862echo "CPP=$cpp" >> $config_host_mak
6863echo "OBJCOPY=$objcopy" >> $config_host_mak
6864echo "LD=$ld" >> $config_host_mak
6865echo "RANLIB=$ranlib" >> $config_host_mak
6866echo "NM=$nm" >> $config_host_mak
6867echo "WINDRES=$windres" >> $config_host_mak
6868echo "CFLAGS=$CFLAGS" >> $config_host_mak
6869echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6870echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6871echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6872echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6873if test "$sparse" = "yes" ; then
6874  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
6875  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
6876  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
6877  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
6878  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6879fi
6880if test "$cross_prefix" != ""; then
6881  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
6882else
6883  echo "AUTOCONF_HOST := "                             >> $config_host_mak
6884fi
6885echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6886echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6887echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6888echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6889echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6890echo "LIBS+=$LIBS" >> $config_host_mak
6891echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6892echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6893echo "EXESUF=$EXESUF" >> $config_host_mak
6894echo "DSOSUF=$DSOSUF" >> $config_host_mak
6895echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6896echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6897echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6898echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6899echo "POD2MAN=$POD2MAN" >> $config_host_mak
6900echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6901if test "$gcov" = "yes" ; then
6902  echo "CONFIG_GCOV=y" >> $config_host_mak
6903  echo "GCOV=$gcov_tool" >> $config_host_mak
6904fi
6905
6906if test "$docker" != "no"; then
6907    echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6908fi
6909
6910# use included Linux headers
6911if test "$linux" = "yes" ; then
6912  mkdir -p linux-headers
6913  case "$cpu" in
6914  i386|x86_64|x32)
6915    linux_arch=x86
6916    ;;
6917  ppc|ppc64)
6918    linux_arch=powerpc
6919    ;;
6920  s390x)
6921    linux_arch=s390
6922    ;;
6923  aarch64)
6924    linux_arch=arm64
6925    ;;
6926  mips64)
6927    linux_arch=mips
6928    ;;
6929  *)
6930    # For most CPUs the kernel architecture name and QEMU CPU name match.
6931    linux_arch="$cpu"
6932    ;;
6933  esac
6934    # For non-KVM architectures we will not have asm headers
6935    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6936      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6937    fi
6938fi
6939
6940for target in $target_list; do
6941target_dir="$target"
6942config_target_mak=$target_dir/config-target.mak
6943target_name=$(echo $target | cut -d '-' -f 1)
6944target_bigendian="no"
6945
6946case "$target_name" in
6947  armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6948  target_bigendian=yes
6949  ;;
6950esac
6951target_softmmu="no"
6952target_user_only="no"
6953target_linux_user="no"
6954target_bsd_user="no"
6955case "$target" in
6956  ${target_name}-softmmu)
6957    target_softmmu="yes"
6958    ;;
6959  ${target_name}-linux-user)
6960    target_user_only="yes"
6961    target_linux_user="yes"
6962    ;;
6963  ${target_name}-bsd-user)
6964    target_user_only="yes"
6965    target_bsd_user="yes"
6966    ;;
6967  *)
6968    error_exit "Target '$target' not recognised"
6969    exit 1
6970    ;;
6971esac
6972
6973target_compiler=""
6974target_compiler_static=""
6975target_compiler_cflags=""
6976
6977mkdir -p $target_dir
6978echo "# Automatically generated by configure - do not modify" > $config_target_mak
6979
6980bflt="no"
6981mttcg="no"
6982interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6983gdb_xml_files=""
6984
6985TARGET_ARCH="$target_name"
6986TARGET_BASE_ARCH=""
6987TARGET_ABI_DIR=""
6988
6989case "$target_name" in
6990  i386)
6991    mttcg="yes"
6992    gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6993    target_compiler=$cross_cc_i386
6994    target_compiler_cflags=$cross_cc_ccflags_i386
6995  ;;
6996  x86_64)
6997    TARGET_BASE_ARCH=i386
6998    mttcg="yes"
6999    gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
7000    target_compiler=$cross_cc_x86_64
7001  ;;
7002  alpha)
7003    mttcg="yes"
7004    target_compiler=$cross_cc_alpha
7005  ;;
7006  arm|armeb)
7007    TARGET_ARCH=arm
7008    bflt="yes"
7009    mttcg="yes"
7010    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7011    target_compiler=$cross_cc_arm
7012    eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7013  ;;
7014  aarch64|aarch64_be)
7015    TARGET_ARCH=aarch64
7016    TARGET_BASE_ARCH=arm
7017    bflt="yes"
7018    mttcg="yes"
7019    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7020    target_compiler=$cross_cc_aarch64
7021    eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7022  ;;
7023  cris)
7024    target_compiler=$cross_cc_cris
7025  ;;
7026  hppa)
7027    mttcg="yes"
7028    target_compiler=$cross_cc_hppa
7029  ;;
7030  lm32)
7031    target_compiler=$cross_cc_lm32
7032  ;;
7033  m68k)
7034    bflt="yes"
7035    gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
7036    target_compiler=$cross_cc_m68k
7037  ;;
7038  microblaze|microblazeel)
7039    TARGET_ARCH=microblaze
7040    bflt="yes"
7041    echo "TARGET_ABI32=y" >> $config_target_mak
7042    target_compiler=$cross_cc_microblaze
7043  ;;
7044  mips|mipsel)
7045    TARGET_ARCH=mips
7046    target_compiler=$cross_cc_mips
7047    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7048  ;;
7049  mipsn32|mipsn32el)
7050    TARGET_ARCH=mips64
7051    TARGET_BASE_ARCH=mips
7052    target_compiler=$cross_cc_mipsn32
7053    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7054    echo "TARGET_ABI32=y" >> $config_target_mak
7055  ;;
7056  mips64|mips64el)
7057    TARGET_ARCH=mips64
7058    TARGET_BASE_ARCH=mips
7059    target_compiler=$cross_cc_mips64
7060    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7061  ;;
7062  moxie)
7063    target_compiler=$cross_cc_moxie
7064  ;;
7065  nios2)
7066    target_compiler=$cross_cc_nios2
7067  ;;
7068  or1k)
7069    target_compiler=$cross_cc_or1k
7070    TARGET_ARCH=openrisc
7071    TARGET_BASE_ARCH=openrisc
7072  ;;
7073  ppc)
7074    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7075    target_compiler=$cross_cc_powerpc
7076  ;;
7077  ppc64)
7078    TARGET_BASE_ARCH=ppc
7079    TARGET_ABI_DIR=ppc
7080    mttcg=yes
7081    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7082    target_compiler=$cross_cc_ppc64
7083  ;;
7084  ppc64le)
7085    TARGET_ARCH=ppc64
7086    TARGET_BASE_ARCH=ppc
7087    TARGET_ABI_DIR=ppc
7088    mttcg=yes
7089    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7090    target_compiler=$cross_cc_ppc64le
7091  ;;
7092  ppc64abi32)
7093    TARGET_ARCH=ppc64
7094    TARGET_BASE_ARCH=ppc
7095    TARGET_ABI_DIR=ppc
7096    echo "TARGET_ABI32=y" >> $config_target_mak
7097    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7098    target_compiler=$cross_cc_ppc64abi32
7099  ;;
7100  riscv32)
7101    TARGET_BASE_ARCH=riscv
7102    TARGET_ABI_DIR=riscv
7103    mttcg=yes
7104    target_compiler=$cross_cc_riscv32
7105  ;;
7106  riscv64)
7107    TARGET_BASE_ARCH=riscv
7108    TARGET_ABI_DIR=riscv
7109    mttcg=yes
7110    target_compiler=$cross_cc_riscv64
7111  ;;
7112  sh4|sh4eb)
7113    TARGET_ARCH=sh4
7114    bflt="yes"
7115    target_compiler=$cross_cc_sh4
7116  ;;
7117  sparc)
7118    target_compiler=$cross_cc_sparc
7119  ;;
7120  sparc64)
7121    TARGET_BASE_ARCH=sparc
7122    target_compiler=$cross_cc_sparc64
7123  ;;
7124  sparc32plus)
7125    TARGET_ARCH=sparc64
7126    TARGET_BASE_ARCH=sparc
7127    TARGET_ABI_DIR=sparc
7128    target_compiler=$cross_cc_sparc32plus
7129    echo "TARGET_ABI32=y" >> $config_target_mak
7130  ;;
7131  s390x)
7132    mttcg=yes
7133    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7134    target_compiler=$cross_cc_s390x
7135  ;;
7136  tilegx)
7137    target_compiler=$cross_cc_tilegx
7138  ;;
7139  tricore)
7140    target_compiler=$cross_cc_tricore
7141  ;;
7142  unicore32)
7143    target_compiler=$cross_cc_unicore32
7144  ;;
7145  xtensa|xtensaeb)
7146    TARGET_ARCH=xtensa
7147    mttcg="yes"
7148    target_compiler=$cross_cc_xtensa
7149  ;;
7150  *)
7151    error_exit "Unsupported target CPU"
7152  ;;
7153esac
7154# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7155if [ "$TARGET_BASE_ARCH" = "" ]; then
7156  TARGET_BASE_ARCH=$TARGET_ARCH
7157fi
7158
7159# Do we have a cross compiler for this target?
7160if has $target_compiler; then
7161
7162    write_c_skeleton
7163
7164    if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
7165        # For host systems we might get away with building without -static
7166        if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
7167            target_compiler=""
7168        else
7169            enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7170            target_compiler_static="n"
7171        fi
7172    else
7173        enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7174        target_compiler_static="y"
7175    fi
7176else
7177    target_compiler=""
7178fi
7179
7180symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7181
7182upper() {
7183    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7184}
7185
7186target_arch_name="$(upper $TARGET_ARCH)"
7187echo "TARGET_$target_arch_name=y" >> $config_target_mak
7188echo "TARGET_NAME=$target_name" >> $config_target_mak
7189echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7190if [ "$TARGET_ABI_DIR" = "" ]; then
7191  TARGET_ABI_DIR=$TARGET_ARCH
7192fi
7193echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7194if [ "$HOST_VARIANT_DIR" != "" ]; then
7195    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7196fi
7197
7198if supported_xen_target $target; then
7199    echo "CONFIG_XEN=y" >> $config_target_mak
7200    if test "$xen_pci_passthrough" = yes; then
7201        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7202    fi
7203fi
7204if supported_kvm_target $target; then
7205    echo "CONFIG_KVM=y" >> $config_target_mak
7206    if test "$vhost_net" = "yes" ; then
7207        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
7208        if test "$vhost_user" = "yes" ; then
7209            echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7210        fi
7211    fi
7212fi
7213if supported_hax_target $target; then
7214    echo "CONFIG_HAX=y" >> $config_target_mak
7215fi
7216if supported_hvf_target $target; then
7217    echo "CONFIG_HVF=y" >> $config_target_mak
7218fi
7219if supported_whpx_target $target; then
7220    echo "CONFIG_WHPX=y" >> $config_target_mak
7221fi
7222if test "$target_bigendian" = "yes" ; then
7223  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7224fi
7225if test "$target_softmmu" = "yes" ; then
7226  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7227  if test "$mttcg" = "yes" ; then
7228    echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7229  fi
7230fi
7231if test "$target_user_only" = "yes" ; then
7232  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7233  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7234fi
7235if test "$target_linux_user" = "yes" ; then
7236  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7237fi
7238list=""
7239if test ! -z "$gdb_xml_files" ; then
7240  for x in $gdb_xml_files; do
7241    list="$list $source_path/gdb-xml/$x"
7242  done
7243  echo "TARGET_XML_FILES=$list" >> $config_target_mak
7244fi
7245
7246if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
7247  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7248fi
7249if test "$target_bsd_user" = "yes" ; then
7250  echo "CONFIG_BSD_USER=y" >> $config_target_mak
7251fi
7252
7253if test -n "$target_compiler"; then
7254  echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7255
7256  if test -n "$target_compiler_static"; then
7257      echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7258  fi
7259
7260  if test -n "$target_compiler_cflags"; then
7261      echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7262  fi
7263fi
7264
7265
7266# generate QEMU_CFLAGS/LDFLAGS for targets
7267
7268cflags=""
7269ldflags=""
7270
7271disas_config() {
7272  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7273  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7274}
7275
7276for i in $ARCH $TARGET_BASE_ARCH ; do
7277  case "$i" in
7278  alpha)
7279    disas_config "ALPHA"
7280  ;;
7281  aarch64)
7282    if test -n "${cxx}"; then
7283      disas_config "ARM_A64"
7284    fi
7285  ;;
7286  arm)
7287    disas_config "ARM"
7288    if test -n "${cxx}"; then
7289      disas_config "ARM_A64"
7290    fi
7291  ;;
7292  cris)
7293    disas_config "CRIS"
7294  ;;
7295  hppa)
7296    disas_config "HPPA"
7297  ;;
7298  i386|x86_64|x32)
7299    disas_config "I386"
7300  ;;
7301  lm32)
7302    disas_config "LM32"
7303  ;;
7304  m68k)
7305    disas_config "M68K"
7306  ;;
7307  microblaze*)
7308    disas_config "MICROBLAZE"
7309  ;;
7310  mips*)
7311    disas_config "MIPS"
7312  ;;
7313  moxie*)
7314    disas_config "MOXIE"
7315  ;;
7316  nios2)
7317    disas_config "NIOS2"
7318  ;;
7319  or1k)
7320    disas_config "OPENRISC"
7321  ;;
7322  ppc*)
7323    disas_config "PPC"
7324  ;;
7325  riscv)
7326    disas_config "RISCV"
7327  ;;
7328  s390*)
7329    disas_config "S390"
7330  ;;
7331  sh4)
7332    disas_config "SH4"
7333  ;;
7334  sparc*)
7335    disas_config "SPARC"
7336  ;;
7337  xtensa*)
7338    disas_config "XTENSA"
7339  ;;
7340  esac
7341done
7342if test "$tcg_interpreter" = "yes" ; then
7343  disas_config "TCI"
7344fi
7345
7346case "$ARCH" in
7347alpha)
7348  # Ensure there's only a single GP
7349  cflags="-msmall-data $cflags"
7350;;
7351esac
7352
7353if test "$gprof" = "yes" ; then
7354  echo "TARGET_GPROF=yes" >> $config_target_mak
7355  if test "$target_linux_user" = "yes" ; then
7356    cflags="-p $cflags"
7357    ldflags="-p $ldflags"
7358  fi
7359  if test "$target_softmmu" = "yes" ; then
7360    ldflags="-p $ldflags"
7361    echo "GPROF_CFLAGS=-p" >> $config_target_mak
7362  fi
7363fi
7364
7365if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
7366  ldflags="$ldflags $textseg_ldflags"
7367fi
7368
7369# Newer kernels on s390 check for an S390_PGSTE program header and
7370# enable the pgste page table extensions in that case. This makes
7371# the vm.allocate_pgste sysctl unnecessary. We enable this program
7372# header if
7373#  - we build on s390x
7374#  - we build the system emulation for s390x (qemu-system-s390x)
7375#  - KVM is enabled
7376#  - the linker supports --s390-pgste
7377if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes"  -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7378    if ld_has --s390-pgste ; then
7379        ldflags="-Wl,--s390-pgste $ldflags"
7380    fi
7381fi
7382
7383echo "LDFLAGS+=$ldflags" >> $config_target_mak
7384echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7385
7386done # for target in $targets
7387
7388if test -n "$enabled_cross_compilers"; then
7389    echo
7390    echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7391fi
7392
7393if [ "$fdt" = "git" ]; then
7394  echo "config-host.h: subdir-dtc" >> $config_host_mak
7395fi
7396if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7397  echo "config-host.h: subdir-capstone" >> $config_host_mak
7398fi
7399if test -n "$LIBCAPSTONE"; then
7400  echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7401fi
7402
7403if test "$numa" = "yes"; then
7404  echo "CONFIG_NUMA=y" >> $config_host_mak
7405fi
7406
7407if test "$ccache_cpp2" = "yes"; then
7408  echo "export CCACHE_CPP2=y" >> $config_host_mak
7409fi
7410
7411# build tree in object directory in case the source is not in the current directory
7412DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7413DIRS="$DIRS tests/fp"
7414DIRS="$DIRS docs docs/interop fsdev scsi"
7415DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7416DIRS="$DIRS roms/seabios roms/vgabios"
7417FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7418FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7419FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7420FILES="$FILES tests/fp/Makefile"
7421FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
7422FILES="$FILES pc-bios/spapr-rtas/Makefile"
7423FILES="$FILES pc-bios/s390-ccw/Makefile"
7424FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
7425FILES="$FILES pc-bios/qemu-icon.bmp"
7426FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
7427for bios_file in \
7428    $source_path/pc-bios/*.bin \
7429    $source_path/pc-bios/*.lid \
7430    $source_path/pc-bios/*.aml \
7431    $source_path/pc-bios/*.rom \
7432    $source_path/pc-bios/*.dtb \
7433    $source_path/pc-bios/*.img \
7434    $source_path/pc-bios/openbios-* \
7435    $source_path/pc-bios/u-boot.* \
7436    $source_path/pc-bios/palcode-*
7437do
7438    FILES="$FILES pc-bios/$(basename $bios_file)"
7439done
7440for test_file in $(find $source_path/tests/acpi-test-data -type f)
7441do
7442    FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
7443done
7444for test_file in $(find $source_path/tests/hex-loader-check-data -type f)
7445do
7446    FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')"
7447done
7448mkdir -p $DIRS
7449for f in $FILES ; do
7450    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7451        symlink "$source_path/$f" "$f"
7452    fi
7453done
7454
7455# temporary config to build submodules
7456for rom in seabios vgabios ; do
7457    config_mak=roms/$rom/config.mak
7458    echo "# Automatically generated by configure - do not modify" > $config_mak
7459    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7460    echo "AS=$as" >> $config_mak
7461    echo "CCAS=$ccas" >> $config_mak
7462    echo "CC=$cc" >> $config_mak
7463    echo "BCC=bcc" >> $config_mak
7464    echo "CPP=$cpp" >> $config_mak
7465    echo "OBJCOPY=objcopy" >> $config_mak
7466    echo "IASL=$iasl" >> $config_mak
7467    echo "LD=$ld" >> $config_mak
7468    echo "RANLIB=$ranlib" >> $config_mak
7469done
7470
7471# set up tests data directory
7472for tests_subdir in acceptance data; do
7473    if [ ! -e tests/$tests_subdir ]; then
7474        symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
7475    fi
7476done
7477
7478# set up qemu-iotests in this build directory
7479iotests_common_env="tests/qemu-iotests/common.env"
7480iotests_check="tests/qemu-iotests/check"
7481
7482echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7483echo >> "$iotests_common_env"
7484echo "export PYTHON='$python'" >> "$iotests_common_env"
7485
7486if [ ! -e "$iotests_check" ]; then
7487    symlink "$source_path/$iotests_check" "$iotests_check"
7488fi
7489
7490# Save the configure command line for later reuse.
7491cat <<EOD >config.status
7492#!/bin/sh
7493# Generated by configure.
7494# Run this file to recreate the current configuration.
7495# Compiler output produced by configure, useful for debugging
7496# configure, is in config.log if it exists.
7497EOD
7498
7499preserve_env() {
7500    envname=$1
7501
7502    eval envval=\$$envname
7503
7504    if test -n "$envval"
7505    then
7506	echo "$envname='$envval'" >> config.status
7507	echo "export $envname" >> config.status
7508    else
7509	echo "unset $envname" >> config.status
7510    fi
7511}
7512
7513# Preserve various env variables that influence what
7514# features/build target configure will detect
7515preserve_env AR
7516preserve_env AS
7517preserve_env CC
7518preserve_env CPP
7519preserve_env CXX
7520preserve_env INSTALL
7521preserve_env LD
7522preserve_env LD_LIBRARY_PATH
7523preserve_env LIBTOOL
7524preserve_env MAKE
7525preserve_env NM
7526preserve_env OBJCOPY
7527preserve_env PATH
7528preserve_env PKG_CONFIG
7529preserve_env PKG_CONFIG_LIBDIR
7530preserve_env PKG_CONFIG_PATH
7531preserve_env PYTHON
7532preserve_env SDL_CONFIG
7533preserve_env SDL2_CONFIG
7534preserve_env SMBD
7535preserve_env STRIP
7536preserve_env WINDRES
7537
7538printf "exec" >>config.status
7539printf " '%s'" "$0" "$@" >>config.status
7540echo ' "$@"' >>config.status
7541chmod +x config.status
7542
7543rm -r "$TMPDIR1"
7544