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