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