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