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