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