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