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