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