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