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