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