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