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