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