xref: /openbmc/qemu/configure (revision 0b2ff2ce)
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
2782glib_req_ver=2.22
2783glib_modules=gthread-2.0
2784if test "$modules" = yes; then
2785    glib_modules="$glib_modules gmodule-2.0"
2786fi
2787
2788for i in $glib_modules; do
2789    if $pkg_config --atleast-version=$glib_req_ver $i; then
2790        glib_cflags=`$pkg_config --cflags $i`
2791        glib_libs=`$pkg_config --libs $i`
2792        CFLAGS="$glib_cflags $CFLAGS"
2793        LIBS="$glib_libs $LIBS"
2794        libs_qga="$glib_libs $libs_qga"
2795    else
2796        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2797    fi
2798done
2799
2800# g_test_trap_subprocess added in 2.38. Used by some tests.
2801glib_subprocess=yes
2802if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2803    glib_subprocess=no
2804fi
2805
2806# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2807cat > $TMPC << EOF
2808#include <glib.h>
2809int main(void) { return 0; }
2810EOF
2811if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2812    if cc_has_warning_flag "-Wno-unknown-attributes"; then
2813        glib_cflags="-Wno-unknown-attributes $glib_cflags"
2814        CFLAGS="-Wno-unknown-attributes $CFLAGS"
2815    fi
2816fi
2817
2818##########################################
2819# SHA command probe for modules
2820if test "$modules" = yes; then
2821    shacmd_probe="sha1sum sha1 shasum"
2822    for c in $shacmd_probe; do
2823        if has $c; then
2824            shacmd="$c"
2825            break
2826        fi
2827    done
2828    if test "$shacmd" = ""; then
2829        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2830    fi
2831fi
2832
2833##########################################
2834# pixman support probe
2835
2836if test "$pixman" = ""; then
2837  if test "$want_tools" = "no" -a "$softmmu" = "no"; then
2838    pixman="none"
2839  elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
2840    pixman="system"
2841  else
2842    pixman="internal"
2843  fi
2844fi
2845if test "$pixman" = "none"; then
2846  if test "$want_tools" != "no" -o "$softmmu" != "no"; then
2847    error_exit "pixman disabled but system emulation or tools build" \
2848        "enabled.  You can turn off pixman only if you also" \
2849        "disable all system emulation targets and the tools" \
2850        "build with '--disable-tools --disable-system'."
2851  fi
2852  pixman_cflags=
2853  pixman_libs=
2854elif test "$pixman" = "system"; then
2855  # pixman version has been checked above
2856  pixman_cflags=`$pkg_config --cflags pixman-1`
2857  pixman_libs=`$pkg_config --libs pixman-1`
2858else
2859  if test ! -d ${source_path}/pixman/pixman; then
2860    error_exit "pixman >= 0.21.8 not present. Your options:" \
2861        "  (1) Preferred: Install the pixman devel package (any recent" \
2862        "      distro should have packages as Xorg needs pixman too)." \
2863        "  (2) Fetch the pixman submodule, using:" \
2864        "      git submodule update --init pixman"
2865  fi
2866  mkdir -p pixman/pixman
2867  pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
2868  pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2869fi
2870
2871##########################################
2872# libcap probe
2873
2874if test "$cap" != "no" ; then
2875  cat > $TMPC <<EOF
2876#include <stdio.h>
2877#include <sys/capability.h>
2878int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
2879EOF
2880  if compile_prog "" "-lcap" ; then
2881    cap=yes
2882  else
2883    cap=no
2884  fi
2885fi
2886
2887##########################################
2888# pthread probe
2889PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
2890
2891pthread=no
2892cat > $TMPC << EOF
2893#include <pthread.h>
2894static void *f(void *p) { return NULL; }
2895int main(void) {
2896  pthread_t thread;
2897  pthread_create(&thread, 0, f, 0);
2898  return 0;
2899}
2900EOF
2901if compile_prog "" "" ; then
2902  pthread=yes
2903else
2904  for pthread_lib in $PTHREADLIBS_LIST; do
2905    if compile_prog "" "$pthread_lib" ; then
2906      pthread=yes
2907      found=no
2908      for lib_entry in $LIBS; do
2909        if test "$lib_entry" = "$pthread_lib"; then
2910          found=yes
2911          break
2912        fi
2913      done
2914      if test "$found" = "no"; then
2915        LIBS="$pthread_lib $LIBS"
2916      fi
2917      break
2918    fi
2919  done
2920fi
2921
2922if test "$mingw32" != yes -a "$pthread" = no; then
2923  error_exit "pthread check failed" \
2924      "Make sure to have the pthread libs and headers installed."
2925fi
2926
2927# check for pthread_setname_np
2928pthread_setname_np=no
2929cat > $TMPC << EOF
2930#include <pthread.h>
2931
2932static void *f(void *p) { return NULL; }
2933int main(void)
2934{
2935    pthread_t thread;
2936    pthread_create(&thread, 0, f, 0);
2937    pthread_setname_np(thread, "QEMU");
2938    return 0;
2939}
2940EOF
2941if compile_prog "" "$pthread_lib" ; then
2942  pthread_setname_np=yes
2943fi
2944
2945##########################################
2946# rbd probe
2947if test "$rbd" != "no" ; then
2948  cat > $TMPC <<EOF
2949#include <stdio.h>
2950#include <rbd/librbd.h>
2951int main(void) {
2952    rados_t cluster;
2953    rados_create(&cluster, NULL);
2954    return 0;
2955}
2956EOF
2957  rbd_libs="-lrbd -lrados"
2958  if compile_prog "" "$rbd_libs" ; then
2959    rbd=yes
2960  else
2961    if test "$rbd" = "yes" ; then
2962      feature_not_found "rados block device" "Install librbd/ceph devel"
2963    fi
2964    rbd=no
2965  fi
2966fi
2967
2968##########################################
2969# libssh2 probe
2970min_libssh2_version=1.2.8
2971if test "$libssh2" != "no" ; then
2972  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
2973    libssh2_cflags=`$pkg_config libssh2 --cflags`
2974    libssh2_libs=`$pkg_config libssh2 --libs`
2975    libssh2=yes
2976  else
2977    if test "$libssh2" = "yes" ; then
2978      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
2979    fi
2980    libssh2=no
2981  fi
2982fi
2983
2984##########################################
2985# libssh2_sftp_fsync probe
2986
2987if test "$libssh2" = "yes"; then
2988  cat > $TMPC <<EOF
2989#include <stdio.h>
2990#include <libssh2.h>
2991#include <libssh2_sftp.h>
2992int main(void) {
2993    LIBSSH2_SESSION *session;
2994    LIBSSH2_SFTP *sftp;
2995    LIBSSH2_SFTP_HANDLE *sftp_handle;
2996    session = libssh2_session_init ();
2997    sftp = libssh2_sftp_init (session);
2998    sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
2999    libssh2_sftp_fsync (sftp_handle);
3000    return 0;
3001}
3002EOF
3003  # libssh2_cflags/libssh2_libs defined in previous test.
3004  if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3005    QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3006  fi
3007fi
3008
3009##########################################
3010# linux-aio probe
3011
3012if test "$linux_aio" != "no" ; then
3013  cat > $TMPC <<EOF
3014#include <libaio.h>
3015#include <sys/eventfd.h>
3016#include <stddef.h>
3017int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3018EOF
3019  if compile_prog "" "-laio" ; then
3020    linux_aio=yes
3021  else
3022    if test "$linux_aio" = "yes" ; then
3023      feature_not_found "linux AIO" "Install libaio devel"
3024    fi
3025    linux_aio=no
3026  fi
3027fi
3028
3029##########################################
3030# TPM passthrough is only on x86 Linux
3031
3032if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3033  tpm_passthrough=$tpm
3034else
3035  tpm_passthrough=no
3036fi
3037
3038##########################################
3039# attr probe
3040
3041if test "$attr" != "no" ; then
3042  cat > $TMPC <<EOF
3043#include <stdio.h>
3044#include <sys/types.h>
3045#ifdef CONFIG_LIBATTR
3046#include <attr/xattr.h>
3047#else
3048#include <sys/xattr.h>
3049#endif
3050int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3051EOF
3052  if compile_prog "" "" ; then
3053    attr=yes
3054  # Older distros have <attr/xattr.h>, and need -lattr:
3055  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3056    attr=yes
3057    LIBS="-lattr $LIBS"
3058    libattr=yes
3059  else
3060    if test "$attr" = "yes" ; then
3061      feature_not_found "ATTR" "Install libc6 or libattr devel"
3062    fi
3063    attr=no
3064  fi
3065fi
3066
3067##########################################
3068# iovec probe
3069cat > $TMPC <<EOF
3070#include <sys/types.h>
3071#include <sys/uio.h>
3072#include <unistd.h>
3073int main(void) { return sizeof(struct iovec); }
3074EOF
3075iovec=no
3076if compile_prog "" "" ; then
3077  iovec=yes
3078fi
3079
3080##########################################
3081# preadv probe
3082cat > $TMPC <<EOF
3083#include <sys/types.h>
3084#include <sys/uio.h>
3085#include <unistd.h>
3086int main(void) { return preadv(0, 0, 0, 0); }
3087EOF
3088preadv=no
3089if compile_prog "" "" ; then
3090  preadv=yes
3091fi
3092
3093##########################################
3094# fdt probe
3095# fdt support is mandatory for at least some target architectures,
3096# so insist on it if we're building those system emulators.
3097fdt_required=no
3098for target in $target_list; do
3099  case $target in
3100    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3101      fdt_required=yes
3102    ;;
3103  esac
3104done
3105
3106if test "$fdt_required" = "yes"; then
3107  if test "$fdt" = "no"; then
3108    error_exit "fdt disabled but some requested targets require it." \
3109      "You can turn off fdt only if you also disable all the system emulation" \
3110      "targets which need it (by specifying a cut down --target-list)."
3111  fi
3112  fdt=yes
3113fi
3114
3115if test "$fdt" != "no" ; then
3116  fdt_libs="-lfdt"
3117  # explicitly check for libfdt_env.h as it is missing in some stable installs
3118  cat > $TMPC << EOF
3119#include <libfdt_env.h>
3120int main(void) { return 0; }
3121EOF
3122  if compile_prog "" "$fdt_libs" ; then
3123    # system DTC is good - use it
3124    fdt=yes
3125  elif test -d ${source_path}/dtc/libfdt ; then
3126    # have submodule DTC - use it
3127    fdt=yes
3128    dtc_internal="yes"
3129    mkdir -p dtc
3130    if [ "$pwd_is_source_path" != "y" ] ; then
3131       symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3132       symlink "$source_path/dtc/scripts" "dtc/scripts"
3133    fi
3134    fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3135    fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3136  elif test "$fdt" = "yes" ; then
3137    # have neither and want - prompt for system/submodule install
3138    error_exit "DTC (libfdt) not present. Your options:" \
3139        "  (1) Preferred: Install the DTC (libfdt) devel package" \
3140        "  (2) Fetch the DTC submodule, using:" \
3141        "      git submodule update --init dtc"
3142  else
3143    # don't have and don't want
3144    fdt_libs=
3145    fdt=no
3146  fi
3147fi
3148
3149libs_softmmu="$libs_softmmu $fdt_libs"
3150
3151##########################################
3152# opengl probe (for sdl2, milkymist-tmu2)
3153
3154# GLX probe, used by milkymist-tmu2
3155# this is temporary, code will be switched to egl mid-term.
3156cat > $TMPC << EOF
3157#include <X11/Xlib.h>
3158#include <GL/gl.h>
3159#include <GL/glx.h>
3160int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3161EOF
3162if compile_prog "" "-lGL -lX11" ; then
3163  have_glx=yes
3164else
3165  have_glx=no
3166fi
3167
3168if test "$opengl" != "no" ; then
3169  opengl_pkgs="gl glesv2 epoxy egl"
3170  if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
3171    opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3172    opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3173    opengl=yes
3174  else
3175    if test "$opengl" = "yes" ; then
3176      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3177    fi
3178    opengl_cflags=""
3179    opengl_libs=""
3180    opengl=no
3181  fi
3182fi
3183
3184
3185##########################################
3186# archipelago probe
3187if test "$archipelago" != "no" ; then
3188    cat > $TMPC <<EOF
3189#include <stdio.h>
3190#include <xseg/xseg.h>
3191#include <xseg/protocol.h>
3192int main(void) {
3193    xseg_initialize();
3194    return 0;
3195}
3196EOF
3197    archipelago_libs=-lxseg
3198    if compile_prog "" "$archipelago_libs"; then
3199        archipelago="yes"
3200        libs_tools="$archipelago_libs $libs_tools"
3201        libs_softmmu="$archipelago_libs $libs_softmmu"
3202
3203	echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3204	echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3205	echo "license and therefore prevent redistribution."
3206	echo
3207	echo "To disable Archipelago, use --disable-archipelago"
3208    else
3209      if test "$archipelago" = "yes" ; then
3210        feature_not_found "Archipelago backend support" "Install libxseg devel"
3211      fi
3212      archipelago="no"
3213    fi
3214fi
3215
3216
3217##########################################
3218# glusterfs probe
3219if test "$glusterfs" != "no" ; then
3220  if $pkg_config --atleast-version=3 glusterfs-api; then
3221    glusterfs="yes"
3222    glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3223    glusterfs_libs=`$pkg_config --libs glusterfs-api`
3224    if $pkg_config --atleast-version=5 glusterfs-api; then
3225      glusterfs_discard="yes"
3226    fi
3227    if $pkg_config --atleast-version=6 glusterfs-api; then
3228      glusterfs_zerofill="yes"
3229    fi
3230  else
3231    if test "$glusterfs" = "yes" ; then
3232      feature_not_found "GlusterFS backend support" \
3233          "Install glusterfs-api devel >= 3"
3234    fi
3235    glusterfs="no"
3236  fi
3237fi
3238
3239# Check for inotify functions when we are building linux-user
3240# emulator.  This is done because older glibc versions don't
3241# have syscall stubs for these implemented.  In that case we
3242# don't provide them even if kernel supports them.
3243#
3244inotify=no
3245cat > $TMPC << EOF
3246#include <sys/inotify.h>
3247
3248int
3249main(void)
3250{
3251	/* try to start inotify */
3252	return inotify_init();
3253}
3254EOF
3255if compile_prog "" "" ; then
3256  inotify=yes
3257fi
3258
3259inotify1=no
3260cat > $TMPC << EOF
3261#include <sys/inotify.h>
3262
3263int
3264main(void)
3265{
3266    /* try to start inotify */
3267    return inotify_init1(0);
3268}
3269EOF
3270if compile_prog "" "" ; then
3271  inotify1=yes
3272fi
3273
3274# check if utimensat and futimens are supported
3275utimens=no
3276cat > $TMPC << EOF
3277#define _ATFILE_SOURCE
3278#include <stddef.h>
3279#include <fcntl.h>
3280#include <sys/stat.h>
3281
3282int main(void)
3283{
3284    utimensat(AT_FDCWD, "foo", NULL, 0);
3285    futimens(0, NULL);
3286    return 0;
3287}
3288EOF
3289if compile_prog "" "" ; then
3290  utimens=yes
3291fi
3292
3293# check if pipe2 is there
3294pipe2=no
3295cat > $TMPC << EOF
3296#include <unistd.h>
3297#include <fcntl.h>
3298
3299int main(void)
3300{
3301    int pipefd[2];
3302    return pipe2(pipefd, O_CLOEXEC);
3303}
3304EOF
3305if compile_prog "" "" ; then
3306  pipe2=yes
3307fi
3308
3309# check if accept4 is there
3310accept4=no
3311cat > $TMPC << EOF
3312#include <sys/socket.h>
3313#include <stddef.h>
3314
3315int main(void)
3316{
3317    accept4(0, NULL, NULL, SOCK_CLOEXEC);
3318    return 0;
3319}
3320EOF
3321if compile_prog "" "" ; then
3322  accept4=yes
3323fi
3324
3325# check if tee/splice is there. vmsplice was added same time.
3326splice=no
3327cat > $TMPC << EOF
3328#include <unistd.h>
3329#include <fcntl.h>
3330#include <limits.h>
3331
3332int main(void)
3333{
3334    int len, fd = 0;
3335    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3336    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3337    return 0;
3338}
3339EOF
3340if compile_prog "" "" ; then
3341  splice=yes
3342fi
3343
3344##########################################
3345# libnuma probe
3346
3347if test "$numa" != "no" ; then
3348  cat > $TMPC << EOF
3349#include <numa.h>
3350int main(void) { return numa_available(); }
3351EOF
3352
3353  if compile_prog "" "-lnuma" ; then
3354    numa=yes
3355    libs_softmmu="-lnuma $libs_softmmu"
3356  else
3357    if test "$numa" = "yes" ; then
3358      feature_not_found "numa" "install numactl devel"
3359    fi
3360    numa=no
3361  fi
3362fi
3363
3364##########################################
3365# tcmalloc probe
3366
3367if test "$tcmalloc" = "yes" ; then
3368  cat > $TMPC << EOF
3369#include <stdlib.h>
3370int main(void) { malloc(1); return 0; }
3371EOF
3372
3373  if compile_prog "" "-ltcmalloc" ; then
3374    LIBS="-ltcmalloc $LIBS"
3375  else
3376    feature_not_found "tcmalloc" "install gperftools devel"
3377  fi
3378fi
3379
3380##########################################
3381# signalfd probe
3382signalfd="no"
3383cat > $TMPC << EOF
3384#include <unistd.h>
3385#include <sys/syscall.h>
3386#include <signal.h>
3387int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3388EOF
3389
3390if compile_prog "" "" ; then
3391  signalfd=yes
3392fi
3393
3394# check if eventfd is supported
3395eventfd=no
3396cat > $TMPC << EOF
3397#include <sys/eventfd.h>
3398
3399int main(void)
3400{
3401    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3402}
3403EOF
3404if compile_prog "" "" ; then
3405  eventfd=yes
3406fi
3407
3408# check for fallocate
3409fallocate=no
3410cat > $TMPC << EOF
3411#include <fcntl.h>
3412
3413int main(void)
3414{
3415    fallocate(0, 0, 0, 0);
3416    return 0;
3417}
3418EOF
3419if compile_prog "" "" ; then
3420  fallocate=yes
3421fi
3422
3423# check for fallocate hole punching
3424fallocate_punch_hole=no
3425cat > $TMPC << EOF
3426#include <fcntl.h>
3427#include <linux/falloc.h>
3428
3429int main(void)
3430{
3431    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3432    return 0;
3433}
3434EOF
3435if compile_prog "" "" ; then
3436  fallocate_punch_hole=yes
3437fi
3438
3439# check that fallocate supports range zeroing inside the file
3440fallocate_zero_range=no
3441cat > $TMPC << EOF
3442#include <fcntl.h>
3443#include <linux/falloc.h>
3444
3445int main(void)
3446{
3447    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3448    return 0;
3449}
3450EOF
3451if compile_prog "" "" ; then
3452  fallocate_zero_range=yes
3453fi
3454
3455# check for posix_fallocate
3456posix_fallocate=no
3457cat > $TMPC << EOF
3458#include <fcntl.h>
3459
3460int main(void)
3461{
3462    posix_fallocate(0, 0, 0);
3463    return 0;
3464}
3465EOF
3466if compile_prog "" "" ; then
3467    posix_fallocate=yes
3468fi
3469
3470# check for sync_file_range
3471sync_file_range=no
3472cat > $TMPC << EOF
3473#include <fcntl.h>
3474
3475int main(void)
3476{
3477    sync_file_range(0, 0, 0, 0);
3478    return 0;
3479}
3480EOF
3481if compile_prog "" "" ; then
3482  sync_file_range=yes
3483fi
3484
3485# check for linux/fiemap.h and FS_IOC_FIEMAP
3486fiemap=no
3487cat > $TMPC << EOF
3488#include <sys/ioctl.h>
3489#include <linux/fs.h>
3490#include <linux/fiemap.h>
3491
3492int main(void)
3493{
3494    ioctl(0, FS_IOC_FIEMAP, 0);
3495    return 0;
3496}
3497EOF
3498if compile_prog "" "" ; then
3499  fiemap=yes
3500fi
3501
3502# check for dup3
3503dup3=no
3504cat > $TMPC << EOF
3505#include <unistd.h>
3506
3507int main(void)
3508{
3509    dup3(0, 0, 0);
3510    return 0;
3511}
3512EOF
3513if compile_prog "" "" ; then
3514  dup3=yes
3515fi
3516
3517# check for ppoll support
3518ppoll=no
3519cat > $TMPC << EOF
3520#include <poll.h>
3521
3522int main(void)
3523{
3524    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3525    ppoll(&pfd, 1, 0, 0);
3526    return 0;
3527}
3528EOF
3529if compile_prog "" "" ; then
3530  ppoll=yes
3531fi
3532
3533# check for prctl(PR_SET_TIMERSLACK , ... ) support
3534prctl_pr_set_timerslack=no
3535cat > $TMPC << EOF
3536#include <sys/prctl.h>
3537
3538int main(void)
3539{
3540    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3541    return 0;
3542}
3543EOF
3544if compile_prog "" "" ; then
3545  prctl_pr_set_timerslack=yes
3546fi
3547
3548# check for epoll support
3549epoll=no
3550cat > $TMPC << EOF
3551#include <sys/epoll.h>
3552
3553int main(void)
3554{
3555    epoll_create(0);
3556    return 0;
3557}
3558EOF
3559if compile_prog "" "" ; then
3560  epoll=yes
3561fi
3562
3563# epoll_create1 and epoll_pwait are later additions
3564# so we must check separately for their presence
3565epoll_create1=no
3566cat > $TMPC << EOF
3567#include <sys/epoll.h>
3568
3569int main(void)
3570{
3571    /* Note that we use epoll_create1 as a value, not as
3572     * a function being called. This is necessary so that on
3573     * old SPARC glibc versions where the function was present in
3574     * the library but not declared in the header file we will
3575     * fail the configure check. (Otherwise we will get a compiler
3576     * warning but not an error, and will proceed to fail the
3577     * qemu compile where we compile with -Werror.)
3578     */
3579    return (int)(uintptr_t)&epoll_create1;
3580}
3581EOF
3582if compile_prog "" "" ; then
3583  epoll_create1=yes
3584fi
3585
3586epoll_pwait=no
3587cat > $TMPC << EOF
3588#include <sys/epoll.h>
3589
3590int main(void)
3591{
3592    epoll_pwait(0, 0, 0, 0, 0);
3593    return 0;
3594}
3595EOF
3596if compile_prog "" "" ; then
3597  epoll_pwait=yes
3598fi
3599
3600# check for sendfile support
3601sendfile=no
3602cat > $TMPC << EOF
3603#include <sys/sendfile.h>
3604
3605int main(void)
3606{
3607    return sendfile(0, 0, 0, 0);
3608}
3609EOF
3610if compile_prog "" "" ; then
3611  sendfile=yes
3612fi
3613
3614# check for timerfd support (glibc 2.8 and newer)
3615timerfd=no
3616cat > $TMPC << EOF
3617#include <sys/timerfd.h>
3618
3619int main(void)
3620{
3621    return(timerfd_create(CLOCK_REALTIME, 0));
3622}
3623EOF
3624if compile_prog "" "" ; then
3625  timerfd=yes
3626fi
3627
3628# check for setns and unshare support
3629setns=no
3630cat > $TMPC << EOF
3631#include <sched.h>
3632
3633int main(void)
3634{
3635    int ret;
3636    ret = setns(0, 0);
3637    ret = unshare(0);
3638    return ret;
3639}
3640EOF
3641if compile_prog "" "" ; then
3642  setns=yes
3643fi
3644
3645# Check if tools are available to build documentation.
3646if test "$docs" != "no" ; then
3647  if has makeinfo && has pod2man; then
3648    docs=yes
3649  else
3650    if test "$docs" = "yes" ; then
3651      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3652    fi
3653    docs=no
3654  fi
3655fi
3656
3657# Search for bswap_32 function
3658byteswap_h=no
3659cat > $TMPC << EOF
3660#include <byteswap.h>
3661int main(void) { return bswap_32(0); }
3662EOF
3663if compile_prog "" "" ; then
3664  byteswap_h=yes
3665fi
3666
3667# Search for bswap32 function
3668bswap_h=no
3669cat > $TMPC << EOF
3670#include <sys/endian.h>
3671#include <sys/types.h>
3672#include <machine/bswap.h>
3673int main(void) { return bswap32(0); }
3674EOF
3675if compile_prog "" "" ; then
3676  bswap_h=yes
3677fi
3678
3679##########################################
3680# Do we have libiscsi >= 1.9.0
3681if test "$libiscsi" != "no" ; then
3682  if $pkg_config --atleast-version=1.9.0 libiscsi; then
3683    libiscsi="yes"
3684    libiscsi_cflags=$($pkg_config --cflags libiscsi)
3685    libiscsi_libs=$($pkg_config --libs libiscsi)
3686  else
3687    if test "$libiscsi" = "yes" ; then
3688      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3689    fi
3690    libiscsi="no"
3691  fi
3692fi
3693
3694##########################################
3695# Do we need libm
3696cat > $TMPC << EOF
3697#include <math.h>
3698int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3699EOF
3700if compile_prog "" "" ; then
3701  :
3702elif compile_prog "" "-lm" ; then
3703  LIBS="-lm $LIBS"
3704  libs_qga="-lm $libs_qga"
3705else
3706  error_exit "libm check failed"
3707fi
3708
3709##########################################
3710# Do we need librt
3711# uClibc provides 2 versions of clock_gettime(), one with realtime
3712# support and one without. This means that the clock_gettime() don't
3713# need -lrt. We still need it for timer_create() so we check for this
3714# function in addition.
3715cat > $TMPC <<EOF
3716#include <signal.h>
3717#include <time.h>
3718int main(void) {
3719  timer_create(CLOCK_REALTIME, NULL, NULL);
3720  return clock_gettime(CLOCK_REALTIME, NULL);
3721}
3722EOF
3723
3724if compile_prog "" "" ; then
3725  :
3726# we need pthread for static linking. use previous pthread test result
3727elif compile_prog "" "$pthread_lib -lrt" ; then
3728  LIBS="$LIBS -lrt"
3729  libs_qga="$libs_qga -lrt"
3730fi
3731
3732if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3733        "$aix" != "yes" -a "$haiku" != "yes" ; then
3734    libs_softmmu="-lutil $libs_softmmu"
3735fi
3736
3737##########################################
3738# spice probe
3739if test "$spice" != "no" ; then
3740  cat > $TMPC << EOF
3741#include <spice.h>
3742int main(void) { spice_server_new(); return 0; }
3743EOF
3744  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3745  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3746  if $pkg_config --atleast-version=0.12.0 spice-server && \
3747     $pkg_config --atleast-version=0.12.3 spice-protocol && \
3748     compile_prog "$spice_cflags" "$spice_libs" ; then
3749    spice="yes"
3750    libs_softmmu="$libs_softmmu $spice_libs"
3751    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3752    spice_protocol_version=$($pkg_config --modversion spice-protocol)
3753    spice_server_version=$($pkg_config --modversion spice-server)
3754  else
3755    if test "$spice" = "yes" ; then
3756      feature_not_found "spice" \
3757          "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3758    fi
3759    spice="no"
3760  fi
3761fi
3762
3763# check for libcacard for smartcard support
3764smartcard_cflags=""
3765# TODO - what's the minimal nss version we support?
3766if test "$smartcard_nss" != "no"; then
3767  cat > $TMPC << EOF
3768#include <pk11pub.h>
3769int main(void) { PK11_FreeSlot(0); return 0; }
3770EOF
3771    # FIXME: do not include $glib_* in here
3772    nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
3773    nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
3774    test_cflags="$nss_cflags"
3775    # The header files in nss < 3.13.3 have a bug which causes them to
3776    # emit a warning. If we're going to compile QEMU with -Werror, then
3777    # test that the headers don't have this bug. Otherwise we would pass
3778    # the configure test but fail to compile QEMU later.
3779    if test "$werror" = "yes"; then
3780        test_cflags="-Werror $test_cflags"
3781    fi
3782    if test -n "$libtool" &&
3783       $pkg_config --atleast-version=3.12.8 nss && \
3784      compile_prog "$test_cflags" "$nss_libs"; then
3785        smartcard_nss="yes"
3786    else
3787        if test "$smartcard_nss" = "yes"; then
3788            feature_not_found "nss" "Install nss devel >= 3.12.8"
3789        fi
3790        smartcard_nss="no"
3791    fi
3792fi
3793
3794# check for libusb
3795if test "$libusb" != "no" ; then
3796    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3797        libusb="yes"
3798        libusb_cflags=$($pkg_config --cflags libusb-1.0)
3799        libusb_libs=$($pkg_config --libs libusb-1.0)
3800        QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3801        libs_softmmu="$libs_softmmu $libusb_libs"
3802    else
3803        if test "$libusb" = "yes"; then
3804            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
3805        fi
3806        libusb="no"
3807    fi
3808fi
3809
3810# check for usbredirparser for usb network redirection support
3811if test "$usb_redir" != "no" ; then
3812    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3813        usb_redir="yes"
3814        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3815        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3816        QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
3817        libs_softmmu="$libs_softmmu $usb_redir_libs"
3818    else
3819        if test "$usb_redir" = "yes"; then
3820            feature_not_found "usb-redir" "Install usbredir devel"
3821        fi
3822        usb_redir="no"
3823    fi
3824fi
3825
3826##########################################
3827# check if we have VSS SDK headers for win
3828
3829if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3830  case "$vss_win32_sdk" in
3831    "")   vss_win32_include="-I$source_path" ;;
3832    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3833          # handle path with spaces. So we symlink the headers into ".sdk/vss".
3834          vss_win32_include="-I$source_path/.sdk/vss"
3835	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3836	  ;;
3837    *)    vss_win32_include="-I$vss_win32_sdk"
3838  esac
3839  cat > $TMPC << EOF
3840#define __MIDL_user_allocate_free_DEFINED__
3841#include <inc/win2003/vss.h>
3842int main(void) { return VSS_CTX_BACKUP; }
3843EOF
3844  if compile_prog "$vss_win32_include" "" ; then
3845    guest_agent_with_vss="yes"
3846    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3847    libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3848  else
3849    if test "$vss_win32_sdk" != "" ; then
3850      echo "ERROR: Please download and install Microsoft VSS SDK:"
3851      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3852      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3853      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
3854      echo "ERROR: The headers are extracted in the directory \`inc'."
3855      feature_not_found "VSS support"
3856    fi
3857    guest_agent_with_vss="no"
3858  fi
3859fi
3860
3861##########################################
3862# lookup Windows platform SDK (if not specified)
3863# The SDK is needed only to build .tlb (type library) file of guest agent
3864# VSS provider from the source. It is usually unnecessary because the
3865# pre-compiled .tlb file is included.
3866
3867if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3868  if test -z "$win_sdk"; then
3869    programfiles="$PROGRAMFILES"
3870    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3871    if test -n "$programfiles"; then
3872      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3873    else
3874      feature_not_found "Windows SDK"
3875    fi
3876  elif test "$win_sdk" = "no"; then
3877    win_sdk=""
3878  fi
3879fi
3880
3881##########################################
3882
3883##########################################
3884# check if we have fdatasync
3885
3886fdatasync=no
3887cat > $TMPC << EOF
3888#include <unistd.h>
3889int main(void) {
3890#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
3891return fdatasync(0);
3892#else
3893#error Not supported
3894#endif
3895}
3896EOF
3897if compile_prog "" "" ; then
3898    fdatasync=yes
3899fi
3900
3901##########################################
3902# check if we have madvise
3903
3904madvise=no
3905cat > $TMPC << EOF
3906#include <sys/types.h>
3907#include <sys/mman.h>
3908#include <stddef.h>
3909int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
3910EOF
3911if compile_prog "" "" ; then
3912    madvise=yes
3913fi
3914
3915##########################################
3916# check if we have posix_madvise
3917
3918posix_madvise=no
3919cat > $TMPC << EOF
3920#include <sys/mman.h>
3921#include <stddef.h>
3922int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
3923EOF
3924if compile_prog "" "" ; then
3925    posix_madvise=yes
3926fi
3927
3928##########################################
3929# check if we have usable SIGEV_THREAD_ID
3930
3931sigev_thread_id=no
3932cat > $TMPC << EOF
3933#include <signal.h>
3934int main(void) {
3935  struct sigevent ev;
3936  ev.sigev_notify = SIGEV_THREAD_ID;
3937  ev._sigev_un._tid = 0;
3938  asm volatile("" : : "g"(&ev));
3939  return 0;
3940}
3941EOF
3942if compile_prog "" "" ; then
3943    sigev_thread_id=yes
3944fi
3945
3946##########################################
3947# check if trace backend exists
3948
3949$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
3950if test "$?" -ne 0 ; then
3951  error_exit "invalid trace backends" \
3952      "Please choose supported trace backends."
3953fi
3954
3955##########################################
3956# For 'ust' backend, test if ust headers are present
3957if have_backend "ust"; then
3958  cat > $TMPC << EOF
3959#include <lttng/tracepoint.h>
3960int main(void) { return 0; }
3961EOF
3962  if compile_prog "" "" ; then
3963    if $pkg_config lttng-ust --exists; then
3964      lttng_ust_libs=`$pkg_config --libs lttng-ust`
3965    else
3966      lttng_ust_libs="-llttng-ust"
3967    fi
3968    if $pkg_config liburcu-bp --exists; then
3969      urcu_bp_libs=`$pkg_config --libs liburcu-bp`
3970    else
3971      urcu_bp_libs="-lurcu-bp"
3972    fi
3973
3974    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
3975    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
3976  else
3977    error_exit "Trace backend 'ust' missing lttng-ust header files"
3978  fi
3979fi
3980
3981##########################################
3982# For 'dtrace' backend, test if 'dtrace' command is present
3983if have_backend "dtrace"; then
3984  if ! has 'dtrace' ; then
3985    error_exit "dtrace command is not found in PATH $PATH"
3986  fi
3987  trace_backend_stap="no"
3988  if has 'stap' ; then
3989    trace_backend_stap="yes"
3990  fi
3991fi
3992
3993##########################################
3994# check and set a backend for coroutine
3995
3996# We prefer ucontext, but it's not always possible. The fallback
3997# is sigcontext. gthread is not selectable except explicitly, because
3998# it is not functional enough to run QEMU proper. (It is occasionally
3999# useful for debugging purposes.)  On Windows the only valid backend
4000# is the Windows-specific one.
4001
4002ucontext_works=no
4003if test "$darwin" != "yes"; then
4004  cat > $TMPC << EOF
4005#include <ucontext.h>
4006#ifdef __stub_makecontext
4007#error Ignoring glibc stub makecontext which will always fail
4008#endif
4009int main(void) { makecontext(0, 0, 0); return 0; }
4010EOF
4011  if compile_prog "" "" ; then
4012    ucontext_works=yes
4013  fi
4014fi
4015
4016if test "$coroutine" = ""; then
4017  if test "$mingw32" = "yes"; then
4018    coroutine=win32
4019  elif test "$ucontext_works" = "yes"; then
4020    coroutine=ucontext
4021  else
4022    coroutine=sigaltstack
4023  fi
4024else
4025  case $coroutine in
4026  windows)
4027    if test "$mingw32" != "yes"; then
4028      error_exit "'windows' coroutine backend only valid for Windows"
4029    fi
4030    # Unfortunately the user visible backend name doesn't match the
4031    # coroutine-*.c filename for this case, so we have to adjust it here.
4032    coroutine=win32
4033    ;;
4034  ucontext)
4035    if test "$ucontext_works" != "yes"; then
4036      feature_not_found "ucontext"
4037    fi
4038    ;;
4039  gthread|sigaltstack)
4040    if test "$mingw32" = "yes"; then
4041      error_exit "only the 'windows' coroutine backend is valid for Windows"
4042    fi
4043    ;;
4044  *)
4045    error_exit "unknown coroutine backend $coroutine"
4046    ;;
4047  esac
4048fi
4049
4050if test "$coroutine_pool" = ""; then
4051  if test "$coroutine" = "gthread"; then
4052    coroutine_pool=no
4053  else
4054    coroutine_pool=yes
4055  fi
4056fi
4057if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4058  error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4059fi
4060
4061##########################################
4062# check if we have open_by_handle_at
4063
4064open_by_handle_at=no
4065cat > $TMPC << EOF
4066#include <fcntl.h>
4067#if !defined(AT_EMPTY_PATH)
4068# error missing definition
4069#else
4070int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4071#endif
4072EOF
4073if compile_prog "" "" ; then
4074    open_by_handle_at=yes
4075fi
4076
4077########################################
4078# check if we have linux/magic.h
4079
4080linux_magic_h=no
4081cat > $TMPC << EOF
4082#include <linux/magic.h>
4083int main(void) {
4084  return 0;
4085}
4086EOF
4087if compile_prog "" "" ; then
4088    linux_magic_h=yes
4089fi
4090
4091########################################
4092# check whether we can disable warning option with a pragma (this is needed
4093# to silence warnings in the headers of some versions of external libraries).
4094# This test has to be compiled with -Werror as otherwise an unknown pragma is
4095# only a warning.
4096#
4097# If we can't selectively disable warning in the code, disable -Werror so that
4098# the build doesn't fail anyway.
4099
4100pragma_disable_unused_but_set=no
4101cat > $TMPC << EOF
4102#pragma GCC diagnostic push
4103#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4104#pragma GCC diagnostic ignored "-Wstrict-prototypes"
4105#pragma GCC diagnostic pop
4106
4107int main(void) {
4108    return 0;
4109}
4110EOF
4111if compile_prog "-Werror" "" ; then
4112    pragma_diagnostic_available=yes
4113else
4114    werror=no
4115fi
4116
4117########################################
4118# check if we have valgrind/valgrind.h
4119
4120valgrind_h=no
4121cat > $TMPC << EOF
4122#include <valgrind/valgrind.h>
4123int main(void) {
4124  return 0;
4125}
4126EOF
4127if compile_prog "" "" ; then
4128    valgrind_h=yes
4129fi
4130
4131########################################
4132# check if environ is declared
4133
4134has_environ=no
4135cat > $TMPC << EOF
4136#include <unistd.h>
4137int main(void) {
4138    environ = 0;
4139    return 0;
4140}
4141EOF
4142if compile_prog "" "" ; then
4143    has_environ=yes
4144fi
4145
4146########################################
4147# check if cpuid.h is usable.
4148
4149cpuid_h=no
4150cat > $TMPC << EOF
4151#include <cpuid.h>
4152int main(void) {
4153    unsigned a, b, c, d;
4154    int max = __get_cpuid_max(0, 0);
4155
4156    if (max >= 1) {
4157        __cpuid(1, a, b, c, d);
4158    }
4159
4160    if (max >= 7) {
4161        __cpuid_count(7, 0, a, b, c, d);
4162    }
4163
4164    return 0;
4165}
4166EOF
4167if compile_prog "" "" ; then
4168    cpuid_h=yes
4169fi
4170
4171########################################
4172# check if __[u]int128_t is usable.
4173
4174int128=no
4175cat > $TMPC << EOF
4176#if defined(__clang_major__) && defined(__clang_minor__)
4177# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4178#  error __int128_t does not work in CLANG before 3.2
4179# endif
4180#endif
4181__int128_t a;
4182__uint128_t b;
4183int main (void) {
4184  a = a + b;
4185  b = a * b;
4186  a = a * a;
4187  return 0;
4188}
4189EOF
4190if compile_prog "" "" ; then
4191    int128=yes
4192fi
4193
4194########################################
4195# check if getauxval is available.
4196
4197getauxval=no
4198cat > $TMPC << EOF
4199#include <sys/auxv.h>
4200int main(void) {
4201  return getauxval(AT_HWCAP) == 0;
4202}
4203EOF
4204if compile_prog "" "" ; then
4205    getauxval=yes
4206fi
4207
4208########################################
4209# check if ccache is interfering with
4210# semantic analysis of macros
4211
4212ccache_cpp2=no
4213cat > $TMPC << EOF
4214static const int Z = 1;
4215#define fn() ({ Z; })
4216#define TAUT(X) ((X) == Z)
4217#define PAREN(X, Y) (X == Y)
4218#define ID(X) (X)
4219int main(int argc, char *argv[])
4220{
4221    int x = 0, y = 0;
4222    x = ID(x);
4223    x = fn();
4224    fn();
4225    if (PAREN(x, y)) return 0;
4226    if (TAUT(Z)) return 0;
4227    return 0;
4228}
4229EOF
4230
4231if ! compile_object "-Werror"; then
4232    ccache_cpp2=yes
4233fi
4234
4235##########################################
4236# End of CC checks
4237# After here, no more $cc or $ld runs
4238
4239if test "$gcov" = "yes" ; then
4240  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4241  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4242elif test "$debug" = "no" ; then
4243  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4244fi
4245
4246##########################################
4247# Do we have libnfs
4248if test "$libnfs" != "no" ; then
4249  if $pkg_config --atleast-version=1.9.3 libnfs; then
4250    libnfs="yes"
4251    libnfs_libs=$($pkg_config --libs libnfs)
4252    LIBS="$LIBS $libnfs_libs"
4253  else
4254    if test "$libnfs" = "yes" ; then
4255      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4256    fi
4257    libnfs="no"
4258  fi
4259fi
4260
4261# Disable zero malloc errors for official releases unless explicitly told to
4262# enable/disable
4263if test -z "$zero_malloc" ; then
4264    if test "$z_version" = "50" ; then
4265	zero_malloc="no"
4266    else
4267	zero_malloc="yes"
4268    fi
4269fi
4270
4271# Now we've finished running tests it's OK to add -Werror to the compiler flags
4272if test "$werror" = "yes"; then
4273    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4274fi
4275
4276if test "$solaris" = "no" ; then
4277    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4278        LDFLAGS="-Wl,--warn-common $LDFLAGS"
4279    fi
4280fi
4281
4282# test if pod2man has --utf8 option
4283if pod2man --help | grep -q utf8; then
4284    POD2MAN="pod2man --utf8"
4285else
4286    POD2MAN="pod2man"
4287fi
4288
4289# Use ASLR, no-SEH and DEP if available
4290if test "$mingw32" = "yes" ; then
4291    for flag in --dynamicbase --no-seh --nxcompat; do
4292        if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4293            LDFLAGS="-Wl,$flag $LDFLAGS"
4294        fi
4295    done
4296fi
4297
4298qemu_confdir=$sysconfdir$confsuffix
4299qemu_moddir=$libdir$confsuffix
4300qemu_datadir=$datadir$confsuffix
4301qemu_localedir="$datadir/locale"
4302
4303tools=""
4304if test "$want_tools" = "yes" ; then
4305  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4306  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4307    tools="qemu-nbd\$(EXESUF) $tools"
4308  fi
4309fi
4310if test "$softmmu" = yes ; then
4311  if test "$virtfs" != no ; then
4312    if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4313      virtfs=yes
4314      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4315    else
4316      if test "$virtfs" = yes; then
4317        error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4318      fi
4319      virtfs=no
4320    fi
4321  fi
4322fi
4323if [ "$guest_agent" != "no" ]; then
4324  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4325      tools="qemu-ga\$(EXESUF) $tools"
4326      if [ "$mingw32" = "yes" -a "$guest_agent_with_vss" = "yes" ]; then
4327        tools="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb $tools"
4328      fi
4329      guest_agent=yes
4330  elif [ "$guest_agent" != yes ]; then
4331      guest_agent=no
4332  else
4333      error_exit "Guest agent is not supported on this platform"
4334  fi
4335fi
4336
4337# Mac OS X ships with a broken assembler
4338roms=
4339if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4340        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4341        "$softmmu" = yes ; then
4342  roms="optionrom"
4343fi
4344if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4345  roms="$roms spapr-rtas"
4346fi
4347
4348if test "$cpu" = "s390x" ; then
4349  roms="$roms s390-ccw"
4350fi
4351
4352# Probe for the need for relocating the user-only binary.
4353if test "$pie" = "no" ; then
4354  textseg_addr=
4355  case "$cpu" in
4356    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4357      # ??? Rationale for choosing this address
4358      textseg_addr=0x60000000
4359      ;;
4360    mips)
4361      # A 256M aligned address, high in the address space, with enough
4362      # room for the code_gen_buffer above it before the stack.
4363      textseg_addr=0x60000000
4364      ;;
4365  esac
4366  if [ -n "$textseg_addr" ]; then
4367    cat > $TMPC <<EOF
4368    int main(void) { return 0; }
4369EOF
4370    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4371    if ! compile_prog "" "$textseg_ldflags"; then
4372      # In case ld does not support -Ttext-segment, edit the default linker
4373      # script via sed to set the .text start addr.  This is needed on FreeBSD
4374      # at least.
4375      $ld --verbose | sed \
4376        -e '1,/==================================================/d' \
4377        -e '/==================================================/,$d' \
4378        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4379        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4380      textseg_ldflags="-Wl,-T../config-host.ld"
4381    fi
4382  fi
4383fi
4384
4385# prepend pixman and ftd flags after all config tests are done
4386QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4387libs_softmmu="$pixman_libs $libs_softmmu"
4388
4389echo "Install prefix    $prefix"
4390echo "BIOS directory    `eval echo $qemu_datadir`"
4391echo "binary directory  `eval echo $bindir`"
4392echo "library directory `eval echo $libdir`"
4393echo "module directory  `eval echo $qemu_moddir`"
4394echo "libexec directory `eval echo $libexecdir`"
4395echo "include directory `eval echo $includedir`"
4396echo "config directory  `eval echo $sysconfdir`"
4397if test "$mingw32" = "no" ; then
4398echo "local state directory   `eval echo $local_statedir`"
4399echo "Manual directory  `eval echo $mandir`"
4400echo "ELF interp prefix $interp_prefix"
4401else
4402echo "local state directory   queried at runtime"
4403echo "Windows SDK       $win_sdk"
4404fi
4405echo "Source path       $source_path"
4406echo "C compiler        $cc"
4407echo "Host C compiler   $host_cc"
4408echo "C++ compiler      $cxx"
4409echo "Objective-C compiler $objcc"
4410echo "ARFLAGS           $ARFLAGS"
4411echo "CFLAGS            $CFLAGS"
4412echo "QEMU_CFLAGS       $QEMU_CFLAGS"
4413echo "LDFLAGS           $LDFLAGS"
4414echo "make              $make"
4415echo "install           $install"
4416echo "python            $python"
4417if test "$slirp" = "yes" ; then
4418    echo "smbd              $smbd"
4419fi
4420echo "module support    $modules"
4421echo "host CPU          $cpu"
4422echo "host big endian   $bigendian"
4423echo "target list       $target_list"
4424echo "tcg debug enabled $debug_tcg"
4425echo "gprof enabled     $gprof"
4426echo "sparse enabled    $sparse"
4427echo "strip binaries    $strip_opt"
4428echo "profiler          $profiler"
4429echo "static build      $static"
4430if test "$darwin" = "yes" ; then
4431    echo "Cocoa support     $cocoa"
4432fi
4433echo "pixman            $pixman"
4434echo "SDL support       $sdl"
4435echo "GTK support       $gtk"
4436echo "VTE support       $vte"
4437echo "curses support    $curses"
4438echo "curl support      $curl"
4439echo "mingw32 support   $mingw32"
4440echo "Audio drivers     $audio_drv_list"
4441echo "Block whitelist (rw) $block_drv_rw_whitelist"
4442echo "Block whitelist (ro) $block_drv_ro_whitelist"
4443echo "VirtFS support    $virtfs"
4444echo "VNC support       $vnc"
4445if test "$vnc" = "yes" ; then
4446    echo "VNC TLS support   $vnc_tls"
4447    echo "VNC SASL support  $vnc_sasl"
4448    echo "VNC JPEG support  $vnc_jpeg"
4449    echo "VNC PNG support   $vnc_png"
4450    echo "VNC WS support    $vnc_ws"
4451fi
4452if test -n "$sparc_cpu"; then
4453    echo "Target Sparc Arch $sparc_cpu"
4454fi
4455echo "xen support       $xen"
4456if test "$xen" = "yes" ; then
4457  echo "xen ctrl version  $xen_ctrl_version"
4458fi
4459echo "brlapi support    $brlapi"
4460echo "bluez  support    $bluez"
4461echo "Documentation     $docs"
4462echo "GUEST_BASE        $guest_base"
4463echo "PIE               $pie"
4464echo "vde support       $vde"
4465echo "netmap support    $netmap"
4466echo "Linux AIO support $linux_aio"
4467echo "ATTR/XATTR support $attr"
4468echo "Install blobs     $blobs"
4469echo "KVM support       $kvm"
4470echo "RDMA support      $rdma"
4471echo "TCG interpreter   $tcg_interpreter"
4472echo "fdt support       $fdt"
4473echo "preadv support    $preadv"
4474echo "fdatasync         $fdatasync"
4475echo "madvise           $madvise"
4476echo "posix_madvise     $posix_madvise"
4477echo "sigev_thread_id   $sigev_thread_id"
4478echo "uuid support      $uuid"
4479echo "libcap-ng support $cap_ng"
4480echo "vhost-net support $vhost_net"
4481echo "vhost-scsi support $vhost_scsi"
4482echo "Trace backends    $trace_backends"
4483if test "$trace_backend" = "simple"; then
4484echo "Trace output file $trace_file-<pid>"
4485fi
4486if test "$spice" = "yes"; then
4487echo "spice support     $spice ($spice_protocol_version/$spice_server_version)"
4488else
4489echo "spice support     $spice"
4490fi
4491echo "rbd support       $rbd"
4492echo "xfsctl support    $xfs"
4493echo "nss used          $smartcard_nss"
4494echo "libusb            $libusb"
4495echo "usb net redir     $usb_redir"
4496echo "OpenGL support    $opengl"
4497echo "libiscsi support  $libiscsi"
4498echo "libnfs support    $libnfs"
4499echo "build guest agent $guest_agent"
4500echo "QGA VSS support   $guest_agent_with_vss"
4501echo "seccomp support   $seccomp"
4502echo "coroutine backend $coroutine"
4503echo "coroutine pool    $coroutine_pool"
4504echo "GlusterFS support $glusterfs"
4505echo "Archipelago support $archipelago"
4506echo "gcov              $gcov_tool"
4507echo "gcov enabled      $gcov"
4508echo "TPM support       $tpm"
4509echo "libssh2 support   $libssh2"
4510echo "TPM passthrough   $tpm_passthrough"
4511echo "QOM debugging     $qom_cast_debug"
4512echo "vhdx              $vhdx"
4513echo "Quorum            $quorum"
4514echo "lzo support       $lzo"
4515echo "snappy support    $snappy"
4516echo "bzip2 support     $bzip2"
4517echo "NUMA host support $numa"
4518echo "tcmalloc support  $tcmalloc"
4519
4520if test "$sdl_too_old" = "yes"; then
4521echo "-> Your SDL version is too old - please upgrade to have SDL support"
4522fi
4523
4524config_host_mak="config-host.mak"
4525
4526echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4527
4528echo "# Automatically generated by configure - do not modify" > $config_host_mak
4529echo >> $config_host_mak
4530
4531echo all: >> $config_host_mak
4532echo "prefix=$prefix" >> $config_host_mak
4533echo "bindir=$bindir" >> $config_host_mak
4534echo "libdir=$libdir" >> $config_host_mak
4535echo "libexecdir=$libexecdir" >> $config_host_mak
4536echo "includedir=$includedir" >> $config_host_mak
4537echo "mandir=$mandir" >> $config_host_mak
4538echo "sysconfdir=$sysconfdir" >> $config_host_mak
4539echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4540echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4541echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4542echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4543if test "$mingw32" = "no" ; then
4544  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4545fi
4546echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4547echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4548echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4549echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4550echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4551
4552echo "ARCH=$ARCH" >> $config_host_mak
4553
4554if test "$debug_tcg" = "yes" ; then
4555  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4556fi
4557if test "$strip_opt" = "yes" ; then
4558  echo "STRIP=${strip}" >> $config_host_mak
4559fi
4560if test "$bigendian" = "yes" ; then
4561  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4562fi
4563if test "$mingw32" = "yes" ; then
4564  echo "CONFIG_WIN32=y" >> $config_host_mak
4565  rc_version=`cat $source_path/VERSION`
4566  version_major=${rc_version%%.*}
4567  rc_version=${rc_version#*.}
4568  version_minor=${rc_version%%.*}
4569  rc_version=${rc_version#*.}
4570  version_subminor=${rc_version%%.*}
4571  version_micro=0
4572  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4573  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4574  if test "$guest_agent_with_vss" = "yes" ; then
4575    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4576    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4577  fi
4578else
4579  echo "CONFIG_POSIX=y" >> $config_host_mak
4580fi
4581
4582if test "$linux" = "yes" ; then
4583  echo "CONFIG_LINUX=y" >> $config_host_mak
4584fi
4585
4586if test "$darwin" = "yes" ; then
4587  echo "CONFIG_DARWIN=y" >> $config_host_mak
4588fi
4589
4590if test "$aix" = "yes" ; then
4591  echo "CONFIG_AIX=y" >> $config_host_mak
4592fi
4593
4594if test "$solaris" = "yes" ; then
4595  echo "CONFIG_SOLARIS=y" >> $config_host_mak
4596  echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4597  if test "$needs_libsunmath" = "yes" ; then
4598    echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4599  fi
4600fi
4601if test "$haiku" = "yes" ; then
4602  echo "CONFIG_HAIKU=y" >> $config_host_mak
4603fi
4604if test "$static" = "yes" ; then
4605  echo "CONFIG_STATIC=y" >> $config_host_mak
4606fi
4607if test "$profiler" = "yes" ; then
4608  echo "CONFIG_PROFILER=y" >> $config_host_mak
4609fi
4610if test "$slirp" = "yes" ; then
4611  echo "CONFIG_SLIRP=y" >> $config_host_mak
4612  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4613fi
4614if test "$vde" = "yes" ; then
4615  echo "CONFIG_VDE=y" >> $config_host_mak
4616fi
4617if test "$netmap" = "yes" ; then
4618  echo "CONFIG_NETMAP=y" >> $config_host_mak
4619fi
4620if test "$l2tpv3" = "yes" ; then
4621  echo "CONFIG_L2TPV3=y" >> $config_host_mak
4622fi
4623if test "$cap_ng" = "yes" ; then
4624  echo "CONFIG_LIBCAP=y" >> $config_host_mak
4625fi
4626echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4627for drv in $audio_drv_list; do
4628    def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4629    echo "$def=y" >> $config_host_mak
4630    if test "$drv" = "fmod"; then
4631        echo "FMOD_CFLAGS=-I$fmod_inc" >> $config_host_mak
4632    fi
4633done
4634if test "$audio_pt_int" = "yes" ; then
4635  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4636fi
4637if test "$audio_win_int" = "yes" ; then
4638  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4639fi
4640echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4641echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4642if test "$vnc" = "yes" ; then
4643  echo "CONFIG_VNC=y" >> $config_host_mak
4644fi
4645if test "$vnc_tls" = "yes" ; then
4646  echo "CONFIG_VNC_TLS=y" >> $config_host_mak
4647fi
4648if test "$vnc_sasl" = "yes" ; then
4649  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4650fi
4651if test "$vnc_jpeg" = "yes" ; then
4652  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4653fi
4654if test "$vnc_png" = "yes" ; then
4655  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4656fi
4657if test "$vnc_ws" = "yes" ; then
4658  echo "CONFIG_VNC_WS=y" >> $config_host_mak
4659  echo "VNC_WS_CFLAGS=$vnc_ws_cflags" >> $config_host_mak
4660fi
4661if test "$fnmatch" = "yes" ; then
4662  echo "CONFIG_FNMATCH=y" >> $config_host_mak
4663fi
4664if test "$uuid" = "yes" ; then
4665  echo "CONFIG_UUID=y" >> $config_host_mak
4666fi
4667if test "$xfs" = "yes" ; then
4668  echo "CONFIG_XFS=y" >> $config_host_mak
4669fi
4670qemu_version=`head $source_path/VERSION`
4671echo "VERSION=$qemu_version" >>$config_host_mak
4672echo "PKGVERSION=$pkgversion" >>$config_host_mak
4673echo "SRC_PATH=$source_path" >> $config_host_mak
4674echo "TARGET_DIRS=$target_list" >> $config_host_mak
4675if [ "$docs" = "yes" ] ; then
4676  echo "BUILD_DOCS=yes" >> $config_host_mak
4677fi
4678if test "$modules" = "yes"; then
4679  # $shacmd can generate a hash started with digit, which the compiler doesn't
4680  # like as an symbol. So prefix it with an underscore
4681  echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
4682  echo "CONFIG_MODULES=y" >> $config_host_mak
4683fi
4684if test "$sdl" = "yes" ; then
4685  echo "CONFIG_SDL=y" >> $config_host_mak
4686  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
4687  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4688fi
4689if test "$cocoa" = "yes" ; then
4690  echo "CONFIG_COCOA=y" >> $config_host_mak
4691fi
4692if test "$curses" = "yes" ; then
4693  echo "CONFIG_CURSES=y" >> $config_host_mak
4694fi
4695if test "$utimens" = "yes" ; then
4696  echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
4697fi
4698if test "$pipe2" = "yes" ; then
4699  echo "CONFIG_PIPE2=y" >> $config_host_mak
4700fi
4701if test "$accept4" = "yes" ; then
4702  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4703fi
4704if test "$splice" = "yes" ; then
4705  echo "CONFIG_SPLICE=y" >> $config_host_mak
4706fi
4707if test "$eventfd" = "yes" ; then
4708  echo "CONFIG_EVENTFD=y" >> $config_host_mak
4709fi
4710if test "$fallocate" = "yes" ; then
4711  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4712fi
4713if test "$fallocate_punch_hole" = "yes" ; then
4714  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4715fi
4716if test "$fallocate_zero_range" = "yes" ; then
4717  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4718fi
4719if test "$posix_fallocate" = "yes" ; then
4720  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4721fi
4722if test "$sync_file_range" = "yes" ; then
4723  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4724fi
4725if test "$fiemap" = "yes" ; then
4726  echo "CONFIG_FIEMAP=y" >> $config_host_mak
4727fi
4728if test "$dup3" = "yes" ; then
4729  echo "CONFIG_DUP3=y" >> $config_host_mak
4730fi
4731if test "$ppoll" = "yes" ; then
4732  echo "CONFIG_PPOLL=y" >> $config_host_mak
4733fi
4734if test "$prctl_pr_set_timerslack" = "yes" ; then
4735  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
4736fi
4737if test "$epoll" = "yes" ; then
4738  echo "CONFIG_EPOLL=y" >> $config_host_mak
4739fi
4740if test "$epoll_create1" = "yes" ; then
4741  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
4742fi
4743if test "$epoll_pwait" = "yes" ; then
4744  echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
4745fi
4746if test "$sendfile" = "yes" ; then
4747  echo "CONFIG_SENDFILE=y" >> $config_host_mak
4748fi
4749if test "$timerfd" = "yes" ; then
4750  echo "CONFIG_TIMERFD=y" >> $config_host_mak
4751fi
4752if test "$setns" = "yes" ; then
4753  echo "CONFIG_SETNS=y" >> $config_host_mak
4754fi
4755if test "$inotify" = "yes" ; then
4756  echo "CONFIG_INOTIFY=y" >> $config_host_mak
4757fi
4758if test "$inotify1" = "yes" ; then
4759  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
4760fi
4761if test "$byteswap_h" = "yes" ; then
4762  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
4763fi
4764if test "$bswap_h" = "yes" ; then
4765  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
4766fi
4767if test "$curl" = "yes" ; then
4768  echo "CONFIG_CURL=m" >> $config_host_mak
4769  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
4770  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
4771fi
4772if test "$brlapi" = "yes" ; then
4773  echo "CONFIG_BRLAPI=y" >> $config_host_mak
4774fi
4775if test "$bluez" = "yes" ; then
4776  echo "CONFIG_BLUEZ=y" >> $config_host_mak
4777  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
4778fi
4779if test "glib_subprocess" = "yes" ; then
4780  echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
4781fi
4782echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4783if test "$gtk" = "yes" ; then
4784  echo "CONFIG_GTK=y" >> $config_host_mak
4785  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
4786  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
4787fi
4788if test "$vte" = "yes" ; then
4789  echo "CONFIG_VTE=y" >> $config_host_mak
4790  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
4791fi
4792if test "$xen" = "yes" ; then
4793  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4794  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4795fi
4796if test "$linux_aio" = "yes" ; then
4797  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4798fi
4799if test "$attr" = "yes" ; then
4800  echo "CONFIG_ATTR=y" >> $config_host_mak
4801fi
4802if test "$libattr" = "yes" ; then
4803  echo "CONFIG_LIBATTR=y" >> $config_host_mak
4804fi
4805if test "$virtfs" = "yes" ; then
4806  echo "CONFIG_VIRTFS=y" >> $config_host_mak
4807fi
4808if test "$vhost_scsi" = "yes" ; then
4809  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4810fi
4811if test "$vhost_net" = "yes" ; then
4812  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
4813fi
4814if test "$blobs" = "yes" ; then
4815  echo "INSTALL_BLOBS=yes" >> $config_host_mak
4816fi
4817if test "$iovec" = "yes" ; then
4818  echo "CONFIG_IOVEC=y" >> $config_host_mak
4819fi
4820if test "$preadv" = "yes" ; then
4821  echo "CONFIG_PREADV=y" >> $config_host_mak
4822fi
4823if test "$fdt" = "yes" ; then
4824  echo "CONFIG_FDT=y" >> $config_host_mak
4825fi
4826if test "$signalfd" = "yes" ; then
4827  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
4828fi
4829if test "$tcg_interpreter" = "yes" ; then
4830  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4831fi
4832if test "$fdatasync" = "yes" ; then
4833  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
4834fi
4835if test "$madvise" = "yes" ; then
4836  echo "CONFIG_MADVISE=y" >> $config_host_mak
4837fi
4838if test "$posix_madvise" = "yes" ; then
4839  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
4840fi
4841if test "$sigev_thread_id" = "yes" ; then
4842  echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
4843fi
4844
4845if test "$spice" = "yes" ; then
4846  echo "CONFIG_SPICE=y" >> $config_host_mak
4847fi
4848
4849if test "$smartcard_nss" = "yes" ; then
4850  echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
4851  echo "NSS_LIBS=$nss_libs" >> $config_host_mak
4852  echo "NSS_CFLAGS=$nss_cflags" >> $config_host_mak
4853fi
4854
4855if test "$libusb" = "yes" ; then
4856  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
4857fi
4858
4859if test "$usb_redir" = "yes" ; then
4860  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
4861fi
4862
4863if test "$opengl" = "yes" ; then
4864  echo "CONFIG_OPENGL=y" >> $config_host_mak
4865  echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
4866  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
4867fi
4868
4869if test "$lzo" = "yes" ; then
4870  echo "CONFIG_LZO=y" >> $config_host_mak
4871fi
4872
4873if test "$snappy" = "yes" ; then
4874  echo "CONFIG_SNAPPY=y" >> $config_host_mak
4875fi
4876
4877if test "$bzip2" = "yes" ; then
4878  echo "CONFIG_BZIP2=y" >> $config_host_mak
4879  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
4880fi
4881
4882if test "$libiscsi" = "yes" ; then
4883  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
4884  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
4885  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
4886fi
4887
4888if test "$libnfs" = "yes" ; then
4889  echo "CONFIG_LIBNFS=y" >> $config_host_mak
4890fi
4891
4892if test "$seccomp" = "yes"; then
4893  echo "CONFIG_SECCOMP=y" >> $config_host_mak
4894fi
4895
4896# XXX: suppress that
4897if [ "$bsd" = "yes" ] ; then
4898  echo "CONFIG_BSD=y" >> $config_host_mak
4899fi
4900
4901if test "$zero_malloc" = "yes" ; then
4902  echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
4903fi
4904if test "$qom_cast_debug" = "yes" ; then
4905  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4906fi
4907if test "$rbd" = "yes" ; then
4908  echo "CONFIG_RBD=m" >> $config_host_mak
4909  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
4910  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
4911fi
4912
4913echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
4914if test "$coroutine_pool" = "yes" ; then
4915  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4916else
4917  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4918fi
4919
4920if test "$open_by_handle_at" = "yes" ; then
4921  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
4922fi
4923
4924if test "$linux_magic_h" = "yes" ; then
4925  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
4926fi
4927
4928if test "$pragma_diagnostic_available" = "yes" ; then
4929  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
4930fi
4931
4932if test "$valgrind_h" = "yes" ; then
4933  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
4934fi
4935
4936if test "$has_environ" = "yes" ; then
4937  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
4938fi
4939
4940if test "$cpuid_h" = "yes" ; then
4941  echo "CONFIG_CPUID_H=y" >> $config_host_mak
4942fi
4943
4944if test "$int128" = "yes" ; then
4945  echo "CONFIG_INT128=y" >> $config_host_mak
4946fi
4947
4948if test "$getauxval" = "yes" ; then
4949  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
4950fi
4951
4952if test "$glusterfs" = "yes" ; then
4953  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
4954  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
4955  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
4956fi
4957
4958if test "$glusterfs_discard" = "yes" ; then
4959  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
4960fi
4961
4962if test "$glusterfs_zerofill" = "yes" ; then
4963  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
4964fi
4965
4966if test "$archipelago" = "yes" ; then
4967  echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
4968  echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
4969fi
4970
4971if test "$libssh2" = "yes" ; then
4972  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
4973  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
4974  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
4975fi
4976
4977if test "$quorum" = "yes" ; then
4978  echo "CONFIG_QUORUM=y" >> $config_host_mak
4979fi
4980
4981if test "$vhdx" = "yes" ; then
4982  echo "CONFIG_VHDX=y" >> $config_host_mak
4983fi
4984
4985# USB host support
4986if test "$libusb" = "yes"; then
4987  echo "HOST_USB=libusb legacy" >> $config_host_mak
4988else
4989  echo "HOST_USB=stub" >> $config_host_mak
4990fi
4991
4992# TPM passthrough support?
4993if test "$tpm" = "yes"; then
4994  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
4995  if test "$tpm_passthrough" = "yes"; then
4996    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
4997  fi
4998fi
4999
5000echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5001if have_backend "nop"; then
5002  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5003fi
5004if have_backend "simple"; then
5005  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5006  # Set the appropriate trace file.
5007  trace_file="\"$trace_file-\" FMT_pid"
5008fi
5009if have_backend "stderr"; then
5010  echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
5011fi
5012if have_backend "ust"; then
5013  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5014fi
5015if have_backend "dtrace"; then
5016  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5017  if test "$trace_backend_stap" = "yes" ; then
5018    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5019  fi
5020fi
5021if have_backend "ftrace"; then
5022  if test "$linux" = "yes" ; then
5023    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5024  else
5025    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5026  fi
5027fi
5028echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5029
5030if test "$rdma" = "yes" ; then
5031  echo "CONFIG_RDMA=y" >> $config_host_mak
5032fi
5033
5034# Hold two types of flag:
5035#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
5036#                                     a thread we have a handle to
5037#   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
5038#                                     platform
5039if test "$pthread_setname_np" = "yes" ; then
5040  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5041  echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5042fi
5043
5044if test "$tcg_interpreter" = "yes"; then
5045  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5046elif test "$ARCH" = "sparc64" ; then
5047  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5048elif test "$ARCH" = "s390x" ; then
5049  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5050elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5051  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5052elif test "$ARCH" = "ppc64" ; then
5053  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5054else
5055  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5056fi
5057QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5058
5059echo "TOOLS=$tools" >> $config_host_mak
5060echo "ROMS=$roms" >> $config_host_mak
5061echo "MAKE=$make" >> $config_host_mak
5062echo "INSTALL=$install" >> $config_host_mak
5063echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5064echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5065if test -n "$libtool"; then
5066  echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5067  echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5068else
5069  echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5070  echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5071fi
5072echo "PYTHON=$python" >> $config_host_mak
5073echo "CC=$cc" >> $config_host_mak
5074if $iasl -h > /dev/null 2>&1; then
5075  echo "IASL=$iasl" >> $config_host_mak
5076fi
5077echo "CC_I386=$cc_i386" >> $config_host_mak
5078echo "HOST_CC=$host_cc" >> $config_host_mak
5079echo "CXX=$cxx" >> $config_host_mak
5080echo "OBJCC=$objcc" >> $config_host_mak
5081echo "AR=$ar" >> $config_host_mak
5082echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5083echo "AS=$as" >> $config_host_mak
5084echo "CPP=$cpp" >> $config_host_mak
5085echo "OBJCOPY=$objcopy" >> $config_host_mak
5086echo "LD=$ld" >> $config_host_mak
5087echo "NM=$nm" >> $config_host_mak
5088echo "WINDRES=$windres" >> $config_host_mak
5089echo "LIBTOOL=$libtool" >> $config_host_mak
5090echo "CFLAGS=$CFLAGS" >> $config_host_mak
5091echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5092echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5093echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5094if test "$sparse" = "yes" ; then
5095  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
5096  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
5097  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
5098  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
5099  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5100fi
5101if test "$cross_prefix" != ""; then
5102  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
5103else
5104  echo "AUTOCONF_HOST := "                             >> $config_host_mak
5105fi
5106echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5107echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5108echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
5109echo "LIBS+=$LIBS" >> $config_host_mak
5110echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5111echo "EXESUF=$EXESUF" >> $config_host_mak
5112echo "DSOSUF=$DSOSUF" >> $config_host_mak
5113echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5114echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5115echo "POD2MAN=$POD2MAN" >> $config_host_mak
5116echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5117if test "$gcov" = "yes" ; then
5118  echo "CONFIG_GCOV=y" >> $config_host_mak
5119  echo "GCOV=$gcov_tool" >> $config_host_mak
5120fi
5121
5122# use included Linux headers
5123if test "$linux" = "yes" ; then
5124  mkdir -p linux-headers
5125  case "$cpu" in
5126  i386|x86_64|x32)
5127    linux_arch=x86
5128    ;;
5129  ppcemb|ppc|ppc64)
5130    linux_arch=powerpc
5131    ;;
5132  s390x)
5133    linux_arch=s390
5134    ;;
5135  aarch64)
5136    linux_arch=arm64
5137    ;;
5138  mips64)
5139    linux_arch=mips
5140    ;;
5141  *)
5142    # For most CPUs the kernel architecture name and QEMU CPU name match.
5143    linux_arch="$cpu"
5144    ;;
5145  esac
5146    # For non-KVM architectures we will not have asm headers
5147    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5148      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5149    fi
5150fi
5151
5152for target in $target_list; do
5153target_dir="$target"
5154config_target_mak=$target_dir/config-target.mak
5155target_name=`echo $target | cut -d '-' -f 1`
5156target_bigendian="no"
5157
5158case "$target_name" in
5159  armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5160  target_bigendian=yes
5161  ;;
5162esac
5163target_softmmu="no"
5164target_user_only="no"
5165target_linux_user="no"
5166target_bsd_user="no"
5167case "$target" in
5168  ${target_name}-softmmu)
5169    target_softmmu="yes"
5170    ;;
5171  ${target_name}-linux-user)
5172    if test "$linux" != "yes" ; then
5173      error_exit "Target '$target' is only available on a Linux host"
5174    fi
5175    target_user_only="yes"
5176    target_linux_user="yes"
5177    ;;
5178  ${target_name}-bsd-user)
5179    if test "$bsd" != "yes" ; then
5180      error_exit "Target '$target' is only available on a BSD host"
5181    fi
5182    target_user_only="yes"
5183    target_bsd_user="yes"
5184    ;;
5185  *)
5186    error_exit "Target '$target' not recognised"
5187    exit 1
5188    ;;
5189esac
5190
5191mkdir -p $target_dir
5192echo "# Automatically generated by configure - do not modify" > $config_target_mak
5193
5194bflt="no"
5195interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5196gdb_xml_files=""
5197
5198TARGET_ARCH="$target_name"
5199TARGET_BASE_ARCH=""
5200TARGET_ABI_DIR=""
5201
5202case "$target_name" in
5203  i386)
5204  ;;
5205  x86_64)
5206    TARGET_BASE_ARCH=i386
5207  ;;
5208  alpha)
5209  ;;
5210  arm|armeb)
5211    TARGET_ARCH=arm
5212    bflt="yes"
5213    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5214  ;;
5215  aarch64)
5216    TARGET_BASE_ARCH=arm
5217    bflt="yes"
5218    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5219  ;;
5220  cris)
5221  ;;
5222  lm32)
5223  ;;
5224  m68k)
5225    bflt="yes"
5226    gdb_xml_files="cf-core.xml cf-fp.xml"
5227  ;;
5228  microblaze|microblazeel)
5229    TARGET_ARCH=microblaze
5230    bflt="yes"
5231  ;;
5232  mips|mipsel)
5233    TARGET_ARCH=mips
5234    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5235  ;;
5236  mipsn32|mipsn32el)
5237    TARGET_ARCH=mips64
5238    TARGET_BASE_ARCH=mips
5239    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5240    echo "TARGET_ABI32=y" >> $config_target_mak
5241  ;;
5242  mips64|mips64el)
5243    TARGET_ARCH=mips64
5244    TARGET_BASE_ARCH=mips
5245    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5246  ;;
5247  moxie)
5248  ;;
5249  or32)
5250    TARGET_ARCH=openrisc
5251    TARGET_BASE_ARCH=openrisc
5252  ;;
5253  ppc)
5254    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5255  ;;
5256  ppcemb)
5257    TARGET_BASE_ARCH=ppc
5258    TARGET_ABI_DIR=ppc
5259    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5260  ;;
5261  ppc64)
5262    TARGET_BASE_ARCH=ppc
5263    TARGET_ABI_DIR=ppc
5264    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5265  ;;
5266  ppc64le)
5267    TARGET_ARCH=ppc64
5268    TARGET_BASE_ARCH=ppc
5269    TARGET_ABI_DIR=ppc
5270    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5271  ;;
5272  ppc64abi32)
5273    TARGET_ARCH=ppc64
5274    TARGET_BASE_ARCH=ppc
5275    TARGET_ABI_DIR=ppc
5276    echo "TARGET_ABI32=y" >> $config_target_mak
5277    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5278  ;;
5279  sh4|sh4eb)
5280    TARGET_ARCH=sh4
5281    bflt="yes"
5282  ;;
5283  sparc)
5284  ;;
5285  sparc64)
5286    TARGET_BASE_ARCH=sparc
5287  ;;
5288  sparc32plus)
5289    TARGET_ARCH=sparc64
5290    TARGET_BASE_ARCH=sparc
5291    TARGET_ABI_DIR=sparc
5292    echo "TARGET_ABI32=y" >> $config_target_mak
5293  ;;
5294  s390x)
5295    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml"
5296  ;;
5297  tricore)
5298  ;;
5299  unicore32)
5300  ;;
5301  xtensa|xtensaeb)
5302    TARGET_ARCH=xtensa
5303  ;;
5304  *)
5305    error_exit "Unsupported target CPU"
5306  ;;
5307esac
5308# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5309if [ "$TARGET_BASE_ARCH" = "" ]; then
5310  TARGET_BASE_ARCH=$TARGET_ARCH
5311fi
5312
5313symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5314
5315upper() {
5316    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5317}
5318
5319target_arch_name="`upper $TARGET_ARCH`"
5320echo "TARGET_$target_arch_name=y" >> $config_target_mak
5321echo "TARGET_NAME=$target_name" >> $config_target_mak
5322echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5323if [ "$TARGET_ABI_DIR" = "" ]; then
5324  TARGET_ABI_DIR=$TARGET_ARCH
5325fi
5326echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5327if [ "$HOST_VARIANT_DIR" != "" ]; then
5328    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5329fi
5330case "$target_name" in
5331  i386|x86_64)
5332    if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5333      echo "CONFIG_XEN=y" >> $config_target_mak
5334      if test "$xen_pci_passthrough" = yes; then
5335        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5336      fi
5337    fi
5338    ;;
5339  *)
5340esac
5341case "$target_name" in
5342  aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5343    # Make sure the target and host cpus are compatible
5344    if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5345      \( "$target_name" = "$cpu" -o \
5346      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5347      \( "$target_name" = "ppc64"  -a "$cpu" = "ppc" \) -o \
5348      \( "$target_name" = "ppc"    -a "$cpu" = "ppc64" \) -o \
5349      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5350      \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5351      \( "$target_name" = "x86_64" -a "$cpu" = "i386"   \) -o \
5352      \( "$target_name" = "i386"   -a "$cpu" = "x86_64" \) -o \
5353      \( "$target_name" = "x86_64" -a "$cpu" = "x32"   \) -o \
5354      \( "$target_name" = "i386"   -a "$cpu" = "x32" \) \) ; then
5355      echo "CONFIG_KVM=y" >> $config_target_mak
5356      if test "$vhost_net" = "yes" ; then
5357        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5358      fi
5359    fi
5360esac
5361if test "$target_bigendian" = "yes" ; then
5362  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5363fi
5364if test "$target_softmmu" = "yes" ; then
5365  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5366fi
5367if test "$target_user_only" = "yes" ; then
5368  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5369  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5370fi
5371if test "$target_linux_user" = "yes" ; then
5372  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5373fi
5374list=""
5375if test ! -z "$gdb_xml_files" ; then
5376  for x in $gdb_xml_files; do
5377    list="$list $source_path/gdb-xml/$x"
5378  done
5379  echo "TARGET_XML_FILES=$list" >> $config_target_mak
5380fi
5381
5382if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5383  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5384fi
5385if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
5386  echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak
5387fi
5388if test "$target_bsd_user" = "yes" ; then
5389  echo "CONFIG_BSD_USER=y" >> $config_target_mak
5390fi
5391
5392# generate QEMU_CFLAGS/LDFLAGS for targets
5393
5394cflags=""
5395ldflags=""
5396
5397for i in $ARCH $TARGET_BASE_ARCH ; do
5398  case "$i" in
5399  alpha)
5400    echo "CONFIG_ALPHA_DIS=y"  >> $config_target_mak
5401    echo "CONFIG_ALPHA_DIS=y"  >> config-all-disas.mak
5402  ;;
5403  aarch64)
5404    if test -n "${cxx}"; then
5405      echo "CONFIG_ARM_A64_DIS=y"  >> $config_target_mak
5406      echo "CONFIG_ARM_A64_DIS=y"  >> config-all-disas.mak
5407    fi
5408  ;;
5409  arm)
5410    echo "CONFIG_ARM_DIS=y"  >> $config_target_mak
5411    echo "CONFIG_ARM_DIS=y"  >> config-all-disas.mak
5412    if test -n "${cxx}"; then
5413      echo "CONFIG_ARM_A64_DIS=y"  >> $config_target_mak
5414      echo "CONFIG_ARM_A64_DIS=y"  >> config-all-disas.mak
5415    fi
5416  ;;
5417  cris)
5418    echo "CONFIG_CRIS_DIS=y"  >> $config_target_mak
5419    echo "CONFIG_CRIS_DIS=y"  >> config-all-disas.mak
5420  ;;
5421  hppa)
5422    echo "CONFIG_HPPA_DIS=y"  >> $config_target_mak
5423    echo "CONFIG_HPPA_DIS=y"  >> config-all-disas.mak
5424  ;;
5425  i386|x86_64|x32)
5426    echo "CONFIG_I386_DIS=y"  >> $config_target_mak
5427    echo "CONFIG_I386_DIS=y"  >> config-all-disas.mak
5428  ;;
5429  ia64*)
5430    echo "CONFIG_IA64_DIS=y"  >> $config_target_mak
5431    echo "CONFIG_IA64_DIS=y"  >> config-all-disas.mak
5432  ;;
5433  lm32)
5434    echo "CONFIG_LM32_DIS=y"  >> $config_target_mak
5435    echo "CONFIG_LM32_DIS=y"  >> config-all-disas.mak
5436  ;;
5437  m68k)
5438    echo "CONFIG_M68K_DIS=y"  >> $config_target_mak
5439    echo "CONFIG_M68K_DIS=y"  >> config-all-disas.mak
5440  ;;
5441  microblaze*)
5442    echo "CONFIG_MICROBLAZE_DIS=y"  >> $config_target_mak
5443    echo "CONFIG_MICROBLAZE_DIS=y"  >> config-all-disas.mak
5444  ;;
5445  mips*)
5446    echo "CONFIG_MIPS_DIS=y"  >> $config_target_mak
5447    echo "CONFIG_MIPS_DIS=y"  >> config-all-disas.mak
5448  ;;
5449  moxie*)
5450    echo "CONFIG_MOXIE_DIS=y"  >> $config_target_mak
5451    echo "CONFIG_MOXIE_DIS=y"  >> config-all-disas.mak
5452  ;;
5453  or32)
5454    echo "CONFIG_OPENRISC_DIS=y"  >> $config_target_mak
5455    echo "CONFIG_OPENRISC_DIS=y"  >> config-all-disas.mak
5456  ;;
5457  ppc*)
5458    echo "CONFIG_PPC_DIS=y"  >> $config_target_mak
5459    echo "CONFIG_PPC_DIS=y"  >> config-all-disas.mak
5460  ;;
5461  s390*)
5462    echo "CONFIG_S390_DIS=y"  >> $config_target_mak
5463    echo "CONFIG_S390_DIS=y"  >> config-all-disas.mak
5464  ;;
5465  sh4)
5466    echo "CONFIG_SH4_DIS=y"  >> $config_target_mak
5467    echo "CONFIG_SH4_DIS=y"  >> config-all-disas.mak
5468  ;;
5469  sparc*)
5470    echo "CONFIG_SPARC_DIS=y"  >> $config_target_mak
5471    echo "CONFIG_SPARC_DIS=y"  >> config-all-disas.mak
5472  ;;
5473  xtensa*)
5474    echo "CONFIG_XTENSA_DIS=y"  >> $config_target_mak
5475    echo "CONFIG_XTENSA_DIS=y"  >> config-all-disas.mak
5476  ;;
5477  esac
5478done
5479if test "$tcg_interpreter" = "yes" ; then
5480  echo "CONFIG_TCI_DIS=y"  >> $config_target_mak
5481  echo "CONFIG_TCI_DIS=y"  >> config-all-disas.mak
5482fi
5483
5484case "$ARCH" in
5485alpha)
5486  # Ensure there's only a single GP
5487  cflags="-msmall-data $cflags"
5488;;
5489esac
5490
5491if test "$gprof" = "yes" ; then
5492  echo "TARGET_GPROF=yes" >> $config_target_mak
5493  if test "$target_linux_user" = "yes" ; then
5494    cflags="-p $cflags"
5495    ldflags="-p $ldflags"
5496  fi
5497  if test "$target_softmmu" = "yes" ; then
5498    ldflags="-p $ldflags"
5499    echo "GPROF_CFLAGS=-p" >> $config_target_mak
5500  fi
5501fi
5502
5503if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5504  ldflags="$ldflags $textseg_ldflags"
5505fi
5506
5507echo "LDFLAGS+=$ldflags" >> $config_target_mak
5508echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5509
5510done # for target in $targets
5511
5512if [ "$pixman" = "internal" ]; then
5513  echo "config-host.h: subdir-pixman" >> $config_host_mak
5514fi
5515
5516if test "$rdma" = "yes" ; then
5517echo "CONFIG_RDMA=y" >> $config_host_mak
5518fi
5519
5520if [ "$dtc_internal" = "yes" ]; then
5521  echo "config-host.h: subdir-dtc" >> $config_host_mak
5522fi
5523
5524if test "$numa" = "yes"; then
5525  echo "CONFIG_NUMA=y" >> $config_host_mak
5526fi
5527
5528if test "$ccache_cpp2" = "yes"; then
5529  echo "export CCACHE_CPP2=y" >> $config_host_mak
5530fi
5531
5532# build tree in object directory in case the source is not in the current directory
5533DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5534DIRS="$DIRS fsdev"
5535DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5536DIRS="$DIRS roms/seabios roms/vgabios"
5537DIRS="$DIRS qapi-generated"
5538FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5539FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5540FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5541FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5542FILES="$FILES pc-bios/spapr-rtas/Makefile"
5543FILES="$FILES pc-bios/s390-ccw/Makefile"
5544FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5545FILES="$FILES pc-bios/qemu-icon.bmp"
5546for bios_file in \
5547    $source_path/pc-bios/*.bin \
5548    $source_path/pc-bios/*.aml \
5549    $source_path/pc-bios/*.rom \
5550    $source_path/pc-bios/*.dtb \
5551    $source_path/pc-bios/*.img \
5552    $source_path/pc-bios/openbios-* \
5553    $source_path/pc-bios/u-boot.* \
5554    $source_path/pc-bios/palcode-*
5555do
5556    FILES="$FILES pc-bios/`basename $bios_file`"
5557done
5558for test_file in `find $source_path/tests/acpi-test-data -type f`
5559do
5560    FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5561done
5562mkdir -p $DIRS
5563for f in $FILES ; do
5564    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5565        symlink "$source_path/$f" "$f"
5566    fi
5567done
5568
5569# temporary config to build submodules
5570for rom in seabios vgabios ; do
5571    config_mak=roms/$rom/config.mak
5572    echo "# Automatically generated by configure - do not modify" > $config_mak
5573    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5574    echo "AS=$as" >> $config_mak
5575    echo "CC=$cc" >> $config_mak
5576    echo "BCC=bcc" >> $config_mak
5577    echo "CPP=$cpp" >> $config_mak
5578    echo "OBJCOPY=objcopy" >> $config_mak
5579    echo "IASL=$iasl" >> $config_mak
5580    echo "LD=$ld" >> $config_mak
5581done
5582
5583# set up qemu-iotests in this build directory
5584iotests_common_env="tests/qemu-iotests/common.env"
5585iotests_check="tests/qemu-iotests/check"
5586
5587echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5588echo >> "$iotests_common_env"
5589echo "export PYTHON='$python'" >> "$iotests_common_env"
5590
5591if [ ! -e "$iotests_check" ]; then
5592    symlink "$source_path/$iotests_check" "$iotests_check"
5593fi
5594
5595# Save the configure command line for later reuse.
5596cat <<EOD >config.status
5597#!/bin/sh
5598# Generated by configure.
5599# Run this file to recreate the current configuration.
5600# Compiler output produced by configure, useful for debugging
5601# configure, is in config.log if it exists.
5602EOD
5603printf "exec" >>config.status
5604printf " '%s'" "$0" "$@" >>config.status
5605echo >>config.status
5606chmod +x config.status
5607
5608rm -r "$TMPDIR1"
5609