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