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