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