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