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