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