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