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