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