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