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