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