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