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