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