xref: /openbmc/qemu/configure (revision 244f1441)
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 2.0 is available.
2305    # Use 3.0 as a fallback if that is available.
2306    if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2307        gtkabi=2.0
2308    elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2309        gtkabi=3.0
2310    else
2311        gtkabi=2.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 gtk2 or 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 "sdl"; then
2602        sdlabi=1.2
2603    elif $pkg_config --exists "sdl2"; then
2604        sdlabi=2.0
2605    else
2606        sdlabi=1.2
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 SDL 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    IFS=:
3033    for curses_lib in $curses_lib_list; do
3034      unset IFS
3035      if compile_prog "$curses_inc" "$curses_lib" ; then
3036        curses_found=yes
3037        QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3038        libs_softmmu="$curses_lib $libs_softmmu"
3039        break
3040      fi
3041    done
3042    if test "$curses_found" = yes ; then
3043      break
3044    fi
3045  done
3046  unset IFS
3047  if test "$curses_found" = "yes" ; then
3048    curses=yes
3049  else
3050    if test "$curses" = "yes" ; then
3051      feature_not_found "curses" "Install ncurses devel"
3052    fi
3053    curses=no
3054  fi
3055fi
3056
3057##########################################
3058# curl probe
3059if test "$curl" != "no" ; then
3060  if $pkg_config libcurl --exists; then
3061    curlconfig="$pkg_config libcurl"
3062  else
3063    curlconfig=curl-config
3064  fi
3065  cat > $TMPC << EOF
3066#include <curl/curl.h>
3067int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3068EOF
3069  curl_cflags=$($curlconfig --cflags 2>/dev/null)
3070  curl_libs=$($curlconfig --libs 2>/dev/null)
3071  if compile_prog "$curl_cflags" "$curl_libs" ; then
3072    curl=yes
3073  else
3074    if test "$curl" = "yes" ; then
3075      feature_not_found "curl" "Install libcurl devel"
3076    fi
3077    curl=no
3078  fi
3079fi # test "$curl"
3080
3081##########################################
3082# bluez support probe
3083if test "$bluez" != "no" ; then
3084  cat > $TMPC << EOF
3085#include <bluetooth/bluetooth.h>
3086int main(void) { return bt_error(0); }
3087EOF
3088  bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3089  bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3090  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3091    bluez=yes
3092    libs_softmmu="$bluez_libs $libs_softmmu"
3093  else
3094    if test "$bluez" = "yes" ; then
3095      feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3096    fi
3097    bluez="no"
3098  fi
3099fi
3100
3101##########################################
3102# glib support probe
3103
3104if test "$mingw32" = yes; then
3105    glib_req_ver=2.30
3106else
3107    glib_req_ver=2.22
3108fi
3109glib_modules=gthread-2.0
3110if test "$modules" = yes; then
3111    glib_modules="$glib_modules gmodule-2.0"
3112fi
3113
3114# This workaround is required due to a bug in pkg-config file for glib as it
3115# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3116
3117if test "$static" = yes -a "$mingw32" = yes; then
3118    QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3119fi
3120
3121for i in $glib_modules; do
3122    if $pkg_config --atleast-version=$glib_req_ver $i; then
3123        glib_cflags=$($pkg_config --cflags $i)
3124        glib_libs=$($pkg_config --libs $i)
3125        QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3126        LIBS="$glib_libs $LIBS"
3127        libs_qga="$glib_libs $libs_qga"
3128    else
3129        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3130    fi
3131done
3132
3133# Sanity check that the current size_t matches the
3134# size that glib thinks it should be. This catches
3135# problems on multi-arch where people try to build
3136# 32-bit QEMU while pointing at 64-bit glib headers
3137cat > $TMPC <<EOF
3138#include <glib.h>
3139#include <unistd.h>
3140
3141#define QEMU_BUILD_BUG_ON(x) \
3142  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3143
3144int main(void) {
3145   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3146   return 0;
3147}
3148EOF
3149
3150if ! compile_prog "$CFLAGS" "$LIBS" ; then
3151    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3152               "You probably need to set PKG_CONFIG_LIBDIR"\
3153	       "to point to the right pkg-config files for your"\
3154	       "build target"
3155fi
3156
3157# g_test_trap_subprocess added in 2.38. Used by some tests.
3158glib_subprocess=yes
3159if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3160    glib_subprocess=no
3161fi
3162
3163# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3164cat > $TMPC << EOF
3165#include <glib.h>
3166int main(void) { return 0; }
3167EOF
3168if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3169    if cc_has_warning_flag "-Wno-unknown-attributes"; then
3170        glib_cflags="-Wno-unknown-attributes $glib_cflags"
3171        CFLAGS="-Wno-unknown-attributes $CFLAGS"
3172    fi
3173fi
3174
3175##########################################
3176# SHA command probe for modules
3177if test "$modules" = yes; then
3178    shacmd_probe="sha1sum sha1 shasum"
3179    for c in $shacmd_probe; do
3180        if has $c; then
3181            shacmd="$c"
3182            break
3183        fi
3184    done
3185    if test "$shacmd" = ""; then
3186        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3187    fi
3188fi
3189
3190##########################################
3191# pixman support probe
3192
3193if test "$pixman" = ""; then
3194  if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3195    pixman="none"
3196  elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3197    pixman="system"
3198  else
3199    pixman="internal"
3200  fi
3201fi
3202if test "$pixman" = "none"; then
3203  if test "$want_tools" != "no" -o "$softmmu" != "no"; then
3204    error_exit "pixman disabled but system emulation or tools build" \
3205        "enabled.  You can turn off pixman only if you also" \
3206        "disable all system emulation targets and the tools" \
3207        "build with '--disable-tools --disable-system'."
3208  fi
3209  pixman_cflags=
3210  pixman_libs=
3211elif test "$pixman" = "system"; then
3212  # pixman version has been checked above
3213  pixman_cflags=$($pkg_config --cflags pixman-1)
3214  pixman_libs=$($pkg_config --libs pixman-1)
3215else
3216  if test ! -d ${source_path}/pixman/pixman; then
3217    error_exit "pixman >= 0.21.8 not present. Your options:" \
3218        "  (1) Preferred: Install the pixman devel package (any recent" \
3219        "      distro should have packages as Xorg needs pixman too)." \
3220        "  (2) Fetch the pixman submodule, using:" \
3221        "      git submodule update --init pixman"
3222  fi
3223  mkdir -p pixman/pixman
3224  pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3225  pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
3226fi
3227
3228##########################################
3229# libcap probe
3230
3231if test "$cap" != "no" ; then
3232  cat > $TMPC <<EOF
3233#include <stdio.h>
3234#include <sys/capability.h>
3235int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3236EOF
3237  if compile_prog "" "-lcap" ; then
3238    cap=yes
3239  else
3240    cap=no
3241  fi
3242fi
3243
3244##########################################
3245# pthread probe
3246PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3247
3248pthread=no
3249cat > $TMPC << EOF
3250#include <pthread.h>
3251static void *f(void *p) { return NULL; }
3252int main(void) {
3253  pthread_t thread;
3254  pthread_create(&thread, 0, f, 0);
3255  return 0;
3256}
3257EOF
3258if compile_prog "" "" ; then
3259  pthread=yes
3260else
3261  for pthread_lib in $PTHREADLIBS_LIST; do
3262    if compile_prog "" "$pthread_lib" ; then
3263      pthread=yes
3264      found=no
3265      for lib_entry in $LIBS; do
3266        if test "$lib_entry" = "$pthread_lib"; then
3267          found=yes
3268          break
3269        fi
3270      done
3271      if test "$found" = "no"; then
3272        LIBS="$pthread_lib $LIBS"
3273      fi
3274      PTHREAD_LIB="$pthread_lib"
3275      break
3276    fi
3277  done
3278fi
3279
3280if test "$mingw32" != yes -a "$pthread" = no; then
3281  error_exit "pthread check failed" \
3282      "Make sure to have the pthread libs and headers installed."
3283fi
3284
3285# check for pthread_setname_np
3286pthread_setname_np=no
3287cat > $TMPC << EOF
3288#include <pthread.h>
3289
3290static void *f(void *p) { return NULL; }
3291int main(void)
3292{
3293    pthread_t thread;
3294    pthread_create(&thread, 0, f, 0);
3295    pthread_setname_np(thread, "QEMU");
3296    return 0;
3297}
3298EOF
3299if compile_prog "" "$pthread_lib" ; then
3300  pthread_setname_np=yes
3301fi
3302
3303##########################################
3304# rbd probe
3305if test "$rbd" != "no" ; then
3306  cat > $TMPC <<EOF
3307#include <stdio.h>
3308#include <rbd/librbd.h>
3309int main(void) {
3310    rados_t cluster;
3311    rados_create(&cluster, NULL);
3312    return 0;
3313}
3314EOF
3315  rbd_libs="-lrbd -lrados"
3316  if compile_prog "" "$rbd_libs" ; then
3317    rbd=yes
3318  else
3319    if test "$rbd" = "yes" ; then
3320      feature_not_found "rados block device" "Install librbd/ceph devel"
3321    fi
3322    rbd=no
3323  fi
3324fi
3325
3326##########################################
3327# libssh2 probe
3328min_libssh2_version=1.2.8
3329if test "$libssh2" != "no" ; then
3330  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3331    libssh2_cflags=$($pkg_config libssh2 --cflags)
3332    libssh2_libs=$($pkg_config libssh2 --libs)
3333    libssh2=yes
3334  else
3335    if test "$libssh2" = "yes" ; then
3336      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3337    fi
3338    libssh2=no
3339  fi
3340fi
3341
3342##########################################
3343# libssh2_sftp_fsync probe
3344
3345if test "$libssh2" = "yes"; then
3346  cat > $TMPC <<EOF
3347#include <stdio.h>
3348#include <libssh2.h>
3349#include <libssh2_sftp.h>
3350int main(void) {
3351    LIBSSH2_SESSION *session;
3352    LIBSSH2_SFTP *sftp;
3353    LIBSSH2_SFTP_HANDLE *sftp_handle;
3354    session = libssh2_session_init ();
3355    sftp = libssh2_sftp_init (session);
3356    sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3357    libssh2_sftp_fsync (sftp_handle);
3358    return 0;
3359}
3360EOF
3361  # libssh2_cflags/libssh2_libs defined in previous test.
3362  if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3363    QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3364  fi
3365fi
3366
3367##########################################
3368# linux-aio probe
3369
3370if test "$linux_aio" != "no" ; then
3371  cat > $TMPC <<EOF
3372#include <libaio.h>
3373#include <sys/eventfd.h>
3374#include <stddef.h>
3375int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3376EOF
3377  if compile_prog "" "-laio" ; then
3378    linux_aio=yes
3379  else
3380    if test "$linux_aio" = "yes" ; then
3381      feature_not_found "linux AIO" "Install libaio devel"
3382    fi
3383    linux_aio=no
3384  fi
3385fi
3386
3387##########################################
3388# TPM passthrough is only on x86 Linux
3389
3390if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3391  tpm_passthrough=$tpm
3392else
3393  tpm_passthrough=no
3394fi
3395
3396##########################################
3397# attr probe
3398
3399if test "$attr" != "no" ; then
3400  cat > $TMPC <<EOF
3401#include <stdio.h>
3402#include <sys/types.h>
3403#ifdef CONFIG_LIBATTR
3404#include <attr/xattr.h>
3405#else
3406#include <sys/xattr.h>
3407#endif
3408int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3409EOF
3410  if compile_prog "" "" ; then
3411    attr=yes
3412  # Older distros have <attr/xattr.h>, and need -lattr:
3413  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3414    attr=yes
3415    LIBS="-lattr $LIBS"
3416    libattr=yes
3417  else
3418    if test "$attr" = "yes" ; then
3419      feature_not_found "ATTR" "Install libc6 or libattr devel"
3420    fi
3421    attr=no
3422  fi
3423fi
3424
3425##########################################
3426# iovec probe
3427cat > $TMPC <<EOF
3428#include <sys/types.h>
3429#include <sys/uio.h>
3430#include <unistd.h>
3431int main(void) { return sizeof(struct iovec); }
3432EOF
3433iovec=no
3434if compile_prog "" "" ; then
3435  iovec=yes
3436fi
3437
3438##########################################
3439# preadv probe
3440cat > $TMPC <<EOF
3441#include <sys/types.h>
3442#include <sys/uio.h>
3443#include <unistd.h>
3444int main(void) { return preadv(0, 0, 0, 0); }
3445EOF
3446preadv=no
3447if compile_prog "" "" ; then
3448  preadv=yes
3449fi
3450
3451##########################################
3452# fdt probe
3453# fdt support is mandatory for at least some target architectures,
3454# so insist on it if we're building those system emulators.
3455fdt_required=no
3456for target in $target_list; do
3457  case $target in
3458    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
3459      fdt_required=yes
3460    ;;
3461  esac
3462done
3463
3464if test "$fdt_required" = "yes"; then
3465  if test "$fdt" = "no"; then
3466    error_exit "fdt disabled but some requested targets require it." \
3467      "You can turn off fdt only if you also disable all the system emulation" \
3468      "targets which need it (by specifying a cut down --target-list)."
3469  fi
3470  fdt=yes
3471fi
3472
3473if test "$fdt" != "no" ; then
3474  fdt_libs="-lfdt"
3475  # explicitly check for libfdt_env.h as it is missing in some stable installs
3476  # and test for required functions to make sure we are on a version >= 1.4.2
3477  cat > $TMPC << EOF
3478#include <libfdt.h>
3479#include <libfdt_env.h>
3480int main(void) { fdt_first_subnode(0, 0); return 0; }
3481EOF
3482  if compile_prog "" "$fdt_libs" ; then
3483    # system DTC is good - use it
3484    fdt=yes
3485  elif test -d ${source_path}/dtc/libfdt ; then
3486    # have submodule DTC - use it
3487    fdt=yes
3488    dtc_internal="yes"
3489    mkdir -p dtc
3490    if [ "$pwd_is_source_path" != "y" ] ; then
3491       symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3492       symlink "$source_path/dtc/scripts" "dtc/scripts"
3493    fi
3494    fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3495    fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3496  elif test "$fdt" = "yes" ; then
3497    # have neither and want - prompt for system/submodule install
3498    error_exit "DTC (libfdt) version >= 1.4.2 not present. Your options:" \
3499        "  (1) Preferred: Install the DTC (libfdt) devel package" \
3500        "  (2) Fetch the DTC submodule, using:" \
3501        "      git submodule update --init dtc"
3502  else
3503    # don't have and don't want
3504    fdt_libs=
3505    fdt=no
3506  fi
3507fi
3508
3509libs_softmmu="$libs_softmmu $fdt_libs"
3510
3511##########################################
3512# opengl probe (for sdl2, gtk, milkymist-tmu2)
3513
3514if test "$opengl" != "no" ; then
3515  opengl_pkgs="epoxy libdrm gbm"
3516  if $pkg_config $opengl_pkgs x11; then
3517    opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3518    opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3519    opengl=yes
3520    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3521        gtk_gl="yes"
3522    fi
3523    QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3524  else
3525    if test "$opengl" = "yes" ; then
3526      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3527    fi
3528    opengl_cflags=""
3529    opengl_libs=""
3530    opengl=no
3531  fi
3532fi
3533
3534if test "$opengl" = "yes"; then
3535  cat > $TMPC << EOF
3536#include <epoxy/egl.h>
3537#ifndef EGL_MESA_image_dma_buf_export
3538# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3539#endif
3540int main(void) { return 0; }
3541EOF
3542  if compile_prog "" "" ; then
3543    opengl_dmabuf=yes
3544  fi
3545fi
3546
3547
3548##########################################
3549# glusterfs probe
3550if test "$glusterfs" != "no" ; then
3551  if $pkg_config --atleast-version=3 glusterfs-api; then
3552    glusterfs="yes"
3553    glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3554    glusterfs_libs=$($pkg_config --libs glusterfs-api)
3555    if $pkg_config --atleast-version=4 glusterfs-api; then
3556      glusterfs_xlator_opt="yes"
3557    fi
3558    if $pkg_config --atleast-version=5 glusterfs-api; then
3559      glusterfs_discard="yes"
3560    fi
3561    if $pkg_config --atleast-version=6 glusterfs-api; then
3562      glusterfs_fallocate="yes"
3563      glusterfs_zerofill="yes"
3564    fi
3565  else
3566    if test "$glusterfs" = "yes" ; then
3567      feature_not_found "GlusterFS backend support" \
3568          "Install glusterfs-api devel >= 3"
3569    fi
3570    glusterfs="no"
3571  fi
3572fi
3573
3574# Check for inotify functions when we are building linux-user
3575# emulator.  This is done because older glibc versions don't
3576# have syscall stubs for these implemented.  In that case we
3577# don't provide them even if kernel supports them.
3578#
3579inotify=no
3580cat > $TMPC << EOF
3581#include <sys/inotify.h>
3582
3583int
3584main(void)
3585{
3586	/* try to start inotify */
3587	return inotify_init();
3588}
3589EOF
3590if compile_prog "" "" ; then
3591  inotify=yes
3592fi
3593
3594inotify1=no
3595cat > $TMPC << EOF
3596#include <sys/inotify.h>
3597
3598int
3599main(void)
3600{
3601    /* try to start inotify */
3602    return inotify_init1(0);
3603}
3604EOF
3605if compile_prog "" "" ; then
3606  inotify1=yes
3607fi
3608
3609# check if pipe2 is there
3610pipe2=no
3611cat > $TMPC << EOF
3612#include <unistd.h>
3613#include <fcntl.h>
3614
3615int main(void)
3616{
3617    int pipefd[2];
3618    return pipe2(pipefd, O_CLOEXEC);
3619}
3620EOF
3621if compile_prog "" "" ; then
3622  pipe2=yes
3623fi
3624
3625# check if accept4 is there
3626accept4=no
3627cat > $TMPC << EOF
3628#include <sys/socket.h>
3629#include <stddef.h>
3630
3631int main(void)
3632{
3633    accept4(0, NULL, NULL, SOCK_CLOEXEC);
3634    return 0;
3635}
3636EOF
3637if compile_prog "" "" ; then
3638  accept4=yes
3639fi
3640
3641# check if tee/splice is there. vmsplice was added same time.
3642splice=no
3643cat > $TMPC << EOF
3644#include <unistd.h>
3645#include <fcntl.h>
3646#include <limits.h>
3647
3648int main(void)
3649{
3650    int len, fd = 0;
3651    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3652    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3653    return 0;
3654}
3655EOF
3656if compile_prog "" "" ; then
3657  splice=yes
3658fi
3659
3660##########################################
3661# libnuma probe
3662
3663if test "$numa" != "no" ; then
3664  cat > $TMPC << EOF
3665#include <numa.h>
3666int main(void) { return numa_available(); }
3667EOF
3668
3669  if compile_prog "" "-lnuma" ; then
3670    numa=yes
3671    libs_softmmu="-lnuma $libs_softmmu"
3672  else
3673    if test "$numa" = "yes" ; then
3674      feature_not_found "numa" "install numactl devel"
3675    fi
3676    numa=no
3677  fi
3678fi
3679
3680if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3681    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3682    exit 1
3683fi
3684
3685##########################################
3686# tcmalloc probe
3687
3688if test "$tcmalloc" = "yes" ; then
3689  cat > $TMPC << EOF
3690#include <stdlib.h>
3691int main(void) { malloc(1); return 0; }
3692EOF
3693
3694  if compile_prog "" "-ltcmalloc" ; then
3695    LIBS="-ltcmalloc $LIBS"
3696  else
3697    feature_not_found "tcmalloc" "install gperftools devel"
3698  fi
3699fi
3700
3701##########################################
3702# jemalloc probe
3703
3704if test "$jemalloc" = "yes" ; then
3705  cat > $TMPC << EOF
3706#include <stdlib.h>
3707int main(void) { malloc(1); return 0; }
3708EOF
3709
3710  if compile_prog "" "-ljemalloc" ; then
3711    LIBS="-ljemalloc $LIBS"
3712  else
3713    feature_not_found "jemalloc" "install jemalloc devel"
3714  fi
3715fi
3716
3717##########################################
3718# signalfd probe
3719signalfd="no"
3720cat > $TMPC << EOF
3721#include <unistd.h>
3722#include <sys/syscall.h>
3723#include <signal.h>
3724int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3725EOF
3726
3727if compile_prog "" "" ; then
3728  signalfd=yes
3729fi
3730
3731# check if eventfd is supported
3732eventfd=no
3733cat > $TMPC << EOF
3734#include <sys/eventfd.h>
3735
3736int main(void)
3737{
3738    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3739}
3740EOF
3741if compile_prog "" "" ; then
3742  eventfd=yes
3743fi
3744
3745# check if memfd is supported
3746memfd=no
3747cat > $TMPC << EOF
3748#include <sys/memfd.h>
3749
3750int main(void)
3751{
3752    return memfd_create("foo", MFD_ALLOW_SEALING);
3753}
3754EOF
3755if compile_prog "" "" ; then
3756  memfd=yes
3757fi
3758
3759
3760
3761# check for fallocate
3762fallocate=no
3763cat > $TMPC << EOF
3764#include <fcntl.h>
3765
3766int main(void)
3767{
3768    fallocate(0, 0, 0, 0);
3769    return 0;
3770}
3771EOF
3772if compile_prog "" "" ; then
3773  fallocate=yes
3774fi
3775
3776# check for fallocate hole punching
3777fallocate_punch_hole=no
3778cat > $TMPC << EOF
3779#include <fcntl.h>
3780#include <linux/falloc.h>
3781
3782int main(void)
3783{
3784    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3785    return 0;
3786}
3787EOF
3788if compile_prog "" "" ; then
3789  fallocate_punch_hole=yes
3790fi
3791
3792# check that fallocate supports range zeroing inside the file
3793fallocate_zero_range=no
3794cat > $TMPC << EOF
3795#include <fcntl.h>
3796#include <linux/falloc.h>
3797
3798int main(void)
3799{
3800    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3801    return 0;
3802}
3803EOF
3804if compile_prog "" "" ; then
3805  fallocate_zero_range=yes
3806fi
3807
3808# check for posix_fallocate
3809posix_fallocate=no
3810cat > $TMPC << EOF
3811#include <fcntl.h>
3812
3813int main(void)
3814{
3815    posix_fallocate(0, 0, 0);
3816    return 0;
3817}
3818EOF
3819if compile_prog "" "" ; then
3820    posix_fallocate=yes
3821fi
3822
3823# check for sync_file_range
3824sync_file_range=no
3825cat > $TMPC << EOF
3826#include <fcntl.h>
3827
3828int main(void)
3829{
3830    sync_file_range(0, 0, 0, 0);
3831    return 0;
3832}
3833EOF
3834if compile_prog "" "" ; then
3835  sync_file_range=yes
3836fi
3837
3838# check for linux/fiemap.h and FS_IOC_FIEMAP
3839fiemap=no
3840cat > $TMPC << EOF
3841#include <sys/ioctl.h>
3842#include <linux/fs.h>
3843#include <linux/fiemap.h>
3844
3845int main(void)
3846{
3847    ioctl(0, FS_IOC_FIEMAP, 0);
3848    return 0;
3849}
3850EOF
3851if compile_prog "" "" ; then
3852  fiemap=yes
3853fi
3854
3855# check for dup3
3856dup3=no
3857cat > $TMPC << EOF
3858#include <unistd.h>
3859
3860int main(void)
3861{
3862    dup3(0, 0, 0);
3863    return 0;
3864}
3865EOF
3866if compile_prog "" "" ; then
3867  dup3=yes
3868fi
3869
3870# check for ppoll support
3871ppoll=no
3872cat > $TMPC << EOF
3873#include <poll.h>
3874
3875int main(void)
3876{
3877    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3878    ppoll(&pfd, 1, 0, 0);
3879    return 0;
3880}
3881EOF
3882if compile_prog "" "" ; then
3883  ppoll=yes
3884fi
3885
3886# check for prctl(PR_SET_TIMERSLACK , ... ) support
3887prctl_pr_set_timerslack=no
3888cat > $TMPC << EOF
3889#include <sys/prctl.h>
3890
3891int main(void)
3892{
3893    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3894    return 0;
3895}
3896EOF
3897if compile_prog "" "" ; then
3898  prctl_pr_set_timerslack=yes
3899fi
3900
3901# check for epoll support
3902epoll=no
3903cat > $TMPC << EOF
3904#include <sys/epoll.h>
3905
3906int main(void)
3907{
3908    epoll_create(0);
3909    return 0;
3910}
3911EOF
3912if compile_prog "" "" ; then
3913  epoll=yes
3914fi
3915
3916# epoll_create1 is a later addition
3917# so we must check separately for its presence
3918epoll_create1=no
3919cat > $TMPC << EOF
3920#include <sys/epoll.h>
3921
3922int main(void)
3923{
3924    /* Note that we use epoll_create1 as a value, not as
3925     * a function being called. This is necessary so that on
3926     * old SPARC glibc versions where the function was present in
3927     * the library but not declared in the header file we will
3928     * fail the configure check. (Otherwise we will get a compiler
3929     * warning but not an error, and will proceed to fail the
3930     * qemu compile where we compile with -Werror.)
3931     */
3932    return (int)(uintptr_t)&epoll_create1;
3933}
3934EOF
3935if compile_prog "" "" ; then
3936  epoll_create1=yes
3937fi
3938
3939# check for sendfile support
3940sendfile=no
3941cat > $TMPC << EOF
3942#include <sys/sendfile.h>
3943
3944int main(void)
3945{
3946    return sendfile(0, 0, 0, 0);
3947}
3948EOF
3949if compile_prog "" "" ; then
3950  sendfile=yes
3951fi
3952
3953# check for timerfd support (glibc 2.8 and newer)
3954timerfd=no
3955cat > $TMPC << EOF
3956#include <sys/timerfd.h>
3957
3958int main(void)
3959{
3960    return(timerfd_create(CLOCK_REALTIME, 0));
3961}
3962EOF
3963if compile_prog "" "" ; then
3964  timerfd=yes
3965fi
3966
3967# check for setns and unshare support
3968setns=no
3969cat > $TMPC << EOF
3970#include <sched.h>
3971
3972int main(void)
3973{
3974    int ret;
3975    ret = setns(0, 0);
3976    ret = unshare(0);
3977    return ret;
3978}
3979EOF
3980if compile_prog "" "" ; then
3981  setns=yes
3982fi
3983
3984# clock_adjtime probe
3985clock_adjtime=no
3986cat > $TMPC <<EOF
3987#include <time.h>
3988
3989int main(void)
3990{
3991    return clock_adjtime(0, 0);
3992}
3993EOF
3994clock_adjtime=no
3995if compile_prog "" "" ; then
3996  clock_adjtime=yes
3997fi
3998
3999# syncfs probe
4000syncfs=no
4001cat > $TMPC <<EOF
4002#include <unistd.h>
4003
4004int main(void)
4005{
4006    return syncfs(0);
4007}
4008EOF
4009syncfs=no
4010if compile_prog "" "" ; then
4011  syncfs=yes
4012fi
4013
4014# Check if tools are available to build documentation.
4015if test "$docs" != "no" ; then
4016  if has makeinfo && has pod2man; then
4017    docs=yes
4018  else
4019    if test "$docs" = "yes" ; then
4020      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4021    fi
4022    docs=no
4023  fi
4024fi
4025
4026# Search for bswap_32 function
4027byteswap_h=no
4028cat > $TMPC << EOF
4029#include <byteswap.h>
4030int main(void) { return bswap_32(0); }
4031EOF
4032if compile_prog "" "" ; then
4033  byteswap_h=yes
4034fi
4035
4036# Search for bswap32 function
4037bswap_h=no
4038cat > $TMPC << EOF
4039#include <sys/endian.h>
4040#include <sys/types.h>
4041#include <machine/bswap.h>
4042int main(void) { return bswap32(0); }
4043EOF
4044if compile_prog "" "" ; then
4045  bswap_h=yes
4046fi
4047
4048##########################################
4049# Do we have libiscsi >= 1.9.0
4050if test "$libiscsi" != "no" ; then
4051  if $pkg_config --atleast-version=1.9.0 libiscsi; then
4052    libiscsi="yes"
4053    libiscsi_cflags=$($pkg_config --cflags libiscsi)
4054    libiscsi_libs=$($pkg_config --libs libiscsi)
4055  else
4056    if test "$libiscsi" = "yes" ; then
4057      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4058    fi
4059    libiscsi="no"
4060  fi
4061fi
4062
4063##########################################
4064# Do we need libm
4065cat > $TMPC << EOF
4066#include <math.h>
4067int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4068EOF
4069if compile_prog "" "" ; then
4070  :
4071elif compile_prog "" "-lm" ; then
4072  LIBS="-lm $LIBS"
4073  libs_qga="-lm $libs_qga"
4074else
4075  error_exit "libm check failed"
4076fi
4077
4078##########################################
4079# Do we need librt
4080# uClibc provides 2 versions of clock_gettime(), one with realtime
4081# support and one without. This means that the clock_gettime() don't
4082# need -lrt. We still need it for timer_create() so we check for this
4083# function in addition.
4084cat > $TMPC <<EOF
4085#include <signal.h>
4086#include <time.h>
4087int main(void) {
4088  timer_create(CLOCK_REALTIME, NULL, NULL);
4089  return clock_gettime(CLOCK_REALTIME, NULL);
4090}
4091EOF
4092
4093if compile_prog "" "" ; then
4094  :
4095# we need pthread for static linking. use previous pthread test result
4096elif compile_prog "" "$pthread_lib -lrt" ; then
4097  LIBS="$LIBS -lrt"
4098  libs_qga="$libs_qga -lrt"
4099fi
4100
4101if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4102        "$aix" != "yes" -a "$haiku" != "yes" ; then
4103    libs_softmmu="-lutil $libs_softmmu"
4104fi
4105
4106##########################################
4107# spice probe
4108if test "$spice" != "no" ; then
4109  cat > $TMPC << EOF
4110#include <spice.h>
4111int main(void) { spice_server_new(); return 0; }
4112EOF
4113  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4114  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4115  if $pkg_config --atleast-version=0.12.0 spice-server && \
4116     $pkg_config --atleast-version=0.12.3 spice-protocol && \
4117     compile_prog "$spice_cflags" "$spice_libs" ; then
4118    spice="yes"
4119    libs_softmmu="$libs_softmmu $spice_libs"
4120    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4121    spice_protocol_version=$($pkg_config --modversion spice-protocol)
4122    spice_server_version=$($pkg_config --modversion spice-server)
4123  else
4124    if test "$spice" = "yes" ; then
4125      feature_not_found "spice" \
4126          "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4127    fi
4128    spice="no"
4129  fi
4130fi
4131
4132# check for smartcard support
4133smartcard_cflags=""
4134if test "$smartcard" != "no"; then
4135    if $pkg_config libcacard; then
4136        libcacard_cflags=$($pkg_config --cflags libcacard)
4137        libcacard_libs=$($pkg_config --libs libcacard)
4138        QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4139        libs_softmmu="$libs_softmmu $libcacard_libs"
4140        smartcard="yes"
4141    else
4142        if test "$smartcard" = "yes"; then
4143            feature_not_found "smartcard" "Install libcacard devel"
4144        fi
4145        smartcard="no"
4146    fi
4147fi
4148
4149# check for libusb
4150if test "$libusb" != "no" ; then
4151    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4152        libusb="yes"
4153        libusb_cflags=$($pkg_config --cflags libusb-1.0)
4154        libusb_libs=$($pkg_config --libs libusb-1.0)
4155        QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4156        libs_softmmu="$libs_softmmu $libusb_libs"
4157    else
4158        if test "$libusb" = "yes"; then
4159            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4160        fi
4161        libusb="no"
4162    fi
4163fi
4164
4165# check for usbredirparser for usb network redirection support
4166if test "$usb_redir" != "no" ; then
4167    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4168        usb_redir="yes"
4169        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4170        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4171        QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
4172        libs_softmmu="$libs_softmmu $usb_redir_libs"
4173    else
4174        if test "$usb_redir" = "yes"; then
4175            feature_not_found "usb-redir" "Install usbredir devel"
4176        fi
4177        usb_redir="no"
4178    fi
4179fi
4180
4181##########################################
4182# check if we have VSS SDK headers for win
4183
4184if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4185  case "$vss_win32_sdk" in
4186    "")   vss_win32_include="-isystem $source_path" ;;
4187    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4188          # handle path with spaces. So we symlink the headers into ".sdk/vss".
4189          vss_win32_include="-isystem $source_path/.sdk/vss"
4190	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4191	  ;;
4192    *)    vss_win32_include="-isystem $vss_win32_sdk"
4193  esac
4194  cat > $TMPC << EOF
4195#define __MIDL_user_allocate_free_DEFINED__
4196#include <inc/win2003/vss.h>
4197int main(void) { return VSS_CTX_BACKUP; }
4198EOF
4199  if compile_prog "$vss_win32_include" "" ; then
4200    guest_agent_with_vss="yes"
4201    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4202    libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4203    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4204  else
4205    if test "$vss_win32_sdk" != "" ; then
4206      echo "ERROR: Please download and install Microsoft VSS SDK:"
4207      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4208      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4209      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4210      echo "ERROR: The headers are extracted in the directory \`inc'."
4211      feature_not_found "VSS support"
4212    fi
4213    guest_agent_with_vss="no"
4214  fi
4215fi
4216
4217##########################################
4218# lookup Windows platform SDK (if not specified)
4219# The SDK is needed only to build .tlb (type library) file of guest agent
4220# VSS provider from the source. It is usually unnecessary because the
4221# pre-compiled .tlb file is included.
4222
4223if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4224  if test -z "$win_sdk"; then
4225    programfiles="$PROGRAMFILES"
4226    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4227    if test -n "$programfiles"; then
4228      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4229    else
4230      feature_not_found "Windows SDK"
4231    fi
4232  elif test "$win_sdk" = "no"; then
4233    win_sdk=""
4234  fi
4235fi
4236
4237##########################################
4238# check if mingw environment provides a recent ntddscsi.h
4239if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4240  cat > $TMPC << EOF
4241#include <windows.h>
4242#include <ntddscsi.h>
4243int main(void) {
4244#if !defined(IOCTL_SCSI_GET_ADDRESS)
4245#error Missing required ioctl definitions
4246#endif
4247  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4248  return addr.Lun;
4249}
4250EOF
4251  if compile_prog "" "" ; then
4252    guest_agent_ntddscsi=yes
4253    libs_qga="-lsetupapi $libs_qga"
4254  fi
4255fi
4256
4257##########################################
4258# virgl renderer probe
4259
4260if test "$virglrenderer" != "no" ; then
4261  cat > $TMPC << EOF
4262#include <virglrenderer.h>
4263int main(void) { virgl_renderer_poll(); return 0; }
4264EOF
4265  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4266  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4267  if $pkg_config virglrenderer >/dev/null 2>&1 && \
4268     compile_prog "$virgl_cflags" "$virgl_libs" ; then
4269    virglrenderer="yes"
4270  else
4271    if test "$virglrenderer" = "yes" ; then
4272      feature_not_found "virglrenderer"
4273    fi
4274    virglrenderer="no"
4275  fi
4276fi
4277
4278##########################################
4279# check if we have fdatasync
4280
4281fdatasync=no
4282cat > $TMPC << EOF
4283#include <unistd.h>
4284int main(void) {
4285#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4286return fdatasync(0);
4287#else
4288#error Not supported
4289#endif
4290}
4291EOF
4292if compile_prog "" "" ; then
4293    fdatasync=yes
4294fi
4295
4296##########################################
4297# check if we have madvise
4298
4299madvise=no
4300cat > $TMPC << EOF
4301#include <sys/types.h>
4302#include <sys/mman.h>
4303#include <stddef.h>
4304int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4305EOF
4306if compile_prog "" "" ; then
4307    madvise=yes
4308fi
4309
4310##########################################
4311# check if we have posix_madvise
4312
4313posix_madvise=no
4314cat > $TMPC << EOF
4315#include <sys/mman.h>
4316#include <stddef.h>
4317int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4318EOF
4319if compile_prog "" "" ; then
4320    posix_madvise=yes
4321fi
4322
4323##########################################
4324# check if we have posix_syslog
4325
4326posix_syslog=no
4327cat > $TMPC << EOF
4328#include <syslog.h>
4329int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4330EOF
4331if compile_prog "" "" ; then
4332    posix_syslog=yes
4333fi
4334
4335##########################################
4336# check if trace backend exists
4337
4338$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4339if test "$?" -ne 0 ; then
4340  error_exit "invalid trace backends" \
4341      "Please choose supported trace backends."
4342fi
4343
4344##########################################
4345# For 'ust' backend, test if ust headers are present
4346if have_backend "ust"; then
4347  cat > $TMPC << EOF
4348#include <lttng/tracepoint.h>
4349int main(void) { return 0; }
4350EOF
4351  if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4352    if $pkg_config lttng-ust --exists; then
4353      lttng_ust_libs=$($pkg_config --libs lttng-ust)
4354    else
4355      lttng_ust_libs="-llttng-ust -ldl"
4356    fi
4357    if $pkg_config liburcu-bp --exists; then
4358      urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4359    else
4360      urcu_bp_libs="-lurcu-bp"
4361    fi
4362
4363    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4364    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4365  else
4366    error_exit "Trace backend 'ust' missing lttng-ust header files"
4367  fi
4368fi
4369
4370##########################################
4371# For 'dtrace' backend, test if 'dtrace' command is present
4372if have_backend "dtrace"; then
4373  if ! has 'dtrace' ; then
4374    error_exit "dtrace command is not found in PATH $PATH"
4375  fi
4376  trace_backend_stap="no"
4377  if has 'stap' ; then
4378    trace_backend_stap="yes"
4379  fi
4380fi
4381
4382##########################################
4383# check and set a backend for coroutine
4384
4385# We prefer ucontext, but it's not always possible. The fallback
4386# is sigcontext. On Windows the only valid backend is the Windows
4387# specific one.
4388
4389ucontext_works=no
4390if test "$darwin" != "yes"; then
4391  cat > $TMPC << EOF
4392#include <ucontext.h>
4393#ifdef __stub_makecontext
4394#error Ignoring glibc stub makecontext which will always fail
4395#endif
4396int main(void) { makecontext(0, 0, 0); return 0; }
4397EOF
4398  if compile_prog "" "" ; then
4399    ucontext_works=yes
4400  fi
4401fi
4402
4403if test "$coroutine" = ""; then
4404  if test "$mingw32" = "yes"; then
4405    coroutine=win32
4406  elif test "$ucontext_works" = "yes"; then
4407    coroutine=ucontext
4408  else
4409    coroutine=sigaltstack
4410  fi
4411else
4412  case $coroutine in
4413  windows)
4414    if test "$mingw32" != "yes"; then
4415      error_exit "'windows' coroutine backend only valid for Windows"
4416    fi
4417    # Unfortunately the user visible backend name doesn't match the
4418    # coroutine-*.c filename for this case, so we have to adjust it here.
4419    coroutine=win32
4420    ;;
4421  ucontext)
4422    if test "$ucontext_works" != "yes"; then
4423      feature_not_found "ucontext"
4424    fi
4425    ;;
4426  sigaltstack)
4427    if test "$mingw32" = "yes"; then
4428      error_exit "only the 'windows' coroutine backend is valid for Windows"
4429    fi
4430    ;;
4431  *)
4432    error_exit "unknown coroutine backend $coroutine"
4433    ;;
4434  esac
4435fi
4436
4437if test "$coroutine_pool" = ""; then
4438  coroutine_pool=yes
4439fi
4440
4441if test "$debug_stack_usage" = "yes"; then
4442  if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4443    error_exit "stack usage debugging is not supported for $cpu"
4444  fi
4445  if test "$coroutine_pool" = "yes"; then
4446    echo "WARN: disabling coroutine pool for stack usage debugging"
4447    coroutine_pool=no
4448  fi
4449fi
4450
4451
4452##########################################
4453# check if we have open_by_handle_at
4454
4455open_by_handle_at=no
4456cat > $TMPC << EOF
4457#include <fcntl.h>
4458#if !defined(AT_EMPTY_PATH)
4459# error missing definition
4460#else
4461int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4462#endif
4463EOF
4464if compile_prog "" "" ; then
4465    open_by_handle_at=yes
4466fi
4467
4468########################################
4469# check if we have linux/magic.h
4470
4471linux_magic_h=no
4472cat > $TMPC << EOF
4473#include <linux/magic.h>
4474int main(void) {
4475  return 0;
4476}
4477EOF
4478if compile_prog "" "" ; then
4479    linux_magic_h=yes
4480fi
4481
4482########################################
4483# check whether we can disable warning option with a pragma (this is needed
4484# to silence warnings in the headers of some versions of external libraries).
4485# This test has to be compiled with -Werror as otherwise an unknown pragma is
4486# only a warning.
4487#
4488# If we can't selectively disable warning in the code, disable -Werror so that
4489# the build doesn't fail anyway.
4490
4491pragma_disable_unused_but_set=no
4492cat > $TMPC << EOF
4493#pragma GCC diagnostic push
4494#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4495#pragma GCC diagnostic ignored "-Wstrict-prototypes"
4496#pragma GCC diagnostic pop
4497
4498int main(void) {
4499    return 0;
4500}
4501EOF
4502if compile_prog "-Werror" "" ; then
4503    pragma_diagnostic_available=yes
4504else
4505    werror=no
4506fi
4507
4508########################################
4509# check if we have valgrind/valgrind.h
4510
4511valgrind_h=no
4512cat > $TMPC << EOF
4513#include <valgrind/valgrind.h>
4514int main(void) {
4515  return 0;
4516}
4517EOF
4518if compile_prog "" "" ; then
4519    valgrind_h=yes
4520fi
4521
4522########################################
4523# check if environ is declared
4524
4525has_environ=no
4526cat > $TMPC << EOF
4527#include <unistd.h>
4528int main(void) {
4529    environ = 0;
4530    return 0;
4531}
4532EOF
4533if compile_prog "" "" ; then
4534    has_environ=yes
4535fi
4536
4537########################################
4538# check if cpuid.h is usable.
4539
4540cpuid_h=no
4541cat > $TMPC << EOF
4542#include <cpuid.h>
4543int main(void) {
4544    unsigned a, b, c, d;
4545    int max = __get_cpuid_max(0, 0);
4546
4547    if (max >= 1) {
4548        __cpuid(1, a, b, c, d);
4549    }
4550
4551    if (max >= 7) {
4552        __cpuid_count(7, 0, a, b, c, d);
4553    }
4554
4555    return 0;
4556}
4557EOF
4558if compile_prog "" "" ; then
4559    cpuid_h=yes
4560fi
4561
4562########################################
4563# check if __[u]int128_t is usable.
4564
4565int128=no
4566cat > $TMPC << EOF
4567#if defined(__clang_major__) && defined(__clang_minor__)
4568# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4569#  error __int128_t does not work in CLANG before 3.2
4570# endif
4571#endif
4572__int128_t a;
4573__uint128_t b;
4574int main (void) {
4575  a = a + b;
4576  b = a * b;
4577  a = a * a;
4578  return 0;
4579}
4580EOF
4581if compile_prog "" "" ; then
4582    int128=yes
4583fi
4584
4585#########################################
4586# See if 128-bit atomic operations are supported.
4587
4588atomic128=no
4589if test "$int128" = "yes"; then
4590  cat > $TMPC << EOF
4591int main(void)
4592{
4593  unsigned __int128 x = 0, y = 0;
4594  y = __atomic_load_16(&x, 0);
4595  __atomic_store_16(&x, y, 0);
4596  __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4597  return 0;
4598}
4599EOF
4600  if compile_prog "" "" ; then
4601    atomic128=yes
4602  fi
4603fi
4604
4605#########################################
4606# See if 64-bit atomic operations are supported.
4607# Note that without __atomic builtins, we can only
4608# assume atomic loads/stores max at pointer size.
4609
4610cat > $TMPC << EOF
4611#include <stdint.h>
4612int main(void)
4613{
4614  uint64_t x = 0, y = 0;
4615#ifdef __ATOMIC_RELAXED
4616  y = __atomic_load_8(&x, 0);
4617  __atomic_store_8(&x, y, 0);
4618  __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4619  __atomic_exchange_8(&x, y, 0);
4620  __atomic_fetch_add_8(&x, y, 0);
4621#else
4622  typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4623  __sync_lock_test_and_set(&x, y);
4624  __sync_val_compare_and_swap(&x, y, 0);
4625  __sync_fetch_and_add(&x, y);
4626#endif
4627  return 0;
4628}
4629EOF
4630if compile_prog "" "" ; then
4631  atomic64=yes
4632fi
4633
4634########################################
4635# check if getauxval is available.
4636
4637getauxval=no
4638cat > $TMPC << EOF
4639#include <sys/auxv.h>
4640int main(void) {
4641  return getauxval(AT_HWCAP) == 0;
4642}
4643EOF
4644if compile_prog "" "" ; then
4645    getauxval=yes
4646fi
4647
4648########################################
4649# check if ccache is interfering with
4650# semantic analysis of macros
4651
4652unset CCACHE_CPP2
4653ccache_cpp2=no
4654cat > $TMPC << EOF
4655static const int Z = 1;
4656#define fn() ({ Z; })
4657#define TAUT(X) ((X) == Z)
4658#define PAREN(X, Y) (X == Y)
4659#define ID(X) (X)
4660int main(int argc, char *argv[])
4661{
4662    int x = 0, y = 0;
4663    x = ID(x);
4664    x = fn();
4665    fn();
4666    if (PAREN(x, y)) return 0;
4667    if (TAUT(Z)) return 0;
4668    return 0;
4669}
4670EOF
4671
4672if ! compile_object "-Werror"; then
4673    ccache_cpp2=yes
4674fi
4675
4676#################################################
4677# clang does not support glibc + FORTIFY_SOURCE.
4678
4679if test "$fortify_source" != "no"; then
4680  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4681    fortify_source="no";
4682  elif test -n "$cxx" &&
4683       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4684    fortify_source="no";
4685  else
4686    fortify_source="yes"
4687  fi
4688fi
4689
4690##########################################
4691# check if struct fsxattr is available via linux/fs.h
4692
4693have_fsxattr=no
4694cat > $TMPC << EOF
4695#include <linux/fs.h>
4696struct fsxattr foo;
4697int main(void) {
4698  return 0;
4699}
4700EOF
4701if compile_prog "" "" ; then
4702    have_fsxattr=yes
4703fi
4704
4705##########################################
4706# check if rtnetlink.h exists and is useful
4707have_rtnetlink=no
4708cat > $TMPC << EOF
4709#include <linux/rtnetlink.h>
4710int main(void) {
4711  return IFLA_PROTO_DOWN;
4712}
4713EOF
4714if compile_prog "" "" ; then
4715    have_rtnetlink=yes
4716fi
4717
4718##########################################
4719# check for usable AF_VSOCK environment
4720have_af_vsock=no
4721cat > $TMPC << EOF
4722#include <errno.h>
4723#include <sys/types.h>
4724#include <sys/socket.h>
4725#if !defined(AF_VSOCK)
4726# error missing AF_VSOCK flag
4727#endif
4728#include <linux/vm_sockets.h>
4729int main(void) {
4730    int sock, ret;
4731    struct sockaddr_vm svm;
4732    socklen_t len = sizeof(svm);
4733    sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4734    ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4735    if ((ret == -1) && (errno == ENOTCONN)) {
4736        return 0;
4737    }
4738    return -1;
4739}
4740EOF
4741if compile_prog "" "" ; then
4742    have_af_vsock=yes
4743fi
4744
4745#################################################
4746# Sparc implicitly links with --relax, which is
4747# incompatible with -r, so --no-relax should be
4748# given. It does no harm to give it on other
4749# platforms too.
4750
4751# Note: the prototype is needed since QEMU_CFLAGS
4752#       contains -Wmissing-prototypes
4753cat > $TMPC << EOF
4754extern int foo(void);
4755int foo(void) { return 0; }
4756EOF
4757if ! compile_object ""; then
4758  error_exit "Failed to compile object file for LD_REL_FLAGS test"
4759fi
4760for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
4761  if do_cc -nostdlib $i -o $TMPMO $TMPO; then
4762    LD_REL_FLAGS=$i
4763    break
4764  fi
4765done
4766if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
4767  feature_not_found "modules" "Cannot find how to build relocatable objects"
4768fi
4769
4770##########################################
4771# check for sysmacros.h
4772
4773have_sysmacros=no
4774cat > $TMPC << EOF
4775#include <sys/sysmacros.h>
4776int main(void) {
4777    return makedev(0, 0);
4778}
4779EOF
4780if compile_prog "" "" ; then
4781    have_sysmacros=yes
4782fi
4783
4784##########################################
4785# Veritas HyperScale block driver VxHS
4786# Check if libvxhs is installed
4787
4788if test "$vxhs" != "no" ; then
4789  cat > $TMPC <<EOF
4790#include <stdint.h>
4791#include <qnio/qnio_api.h>
4792
4793void *vxhs_callback;
4794
4795int main(void) {
4796    iio_init(QNIO_VERSION, vxhs_callback);
4797    return 0;
4798}
4799EOF
4800  vxhs_libs="-lvxhs -lssl"
4801  if compile_prog "" "$vxhs_libs" ; then
4802    vxhs=yes
4803  else
4804    if test "$vxhs" = "yes" ; then
4805      feature_not_found "vxhs block device" "Install libvxhs See github"
4806    fi
4807    vxhs=no
4808  fi
4809fi
4810
4811##########################################
4812# check for _Static_assert()
4813
4814have_static_assert=no
4815cat > $TMPC << EOF
4816_Static_assert(1, "success");
4817int main(void) {
4818    return 0;
4819}
4820EOF
4821if compile_prog "" "" ; then
4822    have_static_assert=yes
4823fi
4824
4825##########################################
4826# End of CC checks
4827# After here, no more $cc or $ld runs
4828
4829if test "$gcov" = "yes" ; then
4830  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4831  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4832elif test "$fortify_source" = "yes" ; then
4833  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4834elif test "$debug" = "no"; then
4835  CFLAGS="-O2 $CFLAGS"
4836fi
4837
4838##########################################
4839# Do we have libnfs
4840if test "$libnfs" != "no" ; then
4841  if $pkg_config --atleast-version=1.9.3 libnfs; then
4842    libnfs="yes"
4843    libnfs_libs=$($pkg_config --libs libnfs)
4844  else
4845    if test "$libnfs" = "yes" ; then
4846      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4847    fi
4848    libnfs="no"
4849  fi
4850fi
4851
4852# Now we've finished running tests it's OK to add -Werror to the compiler flags
4853if test "$werror" = "yes"; then
4854    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4855fi
4856
4857if test "$solaris" = "no" ; then
4858    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4859        LDFLAGS="-Wl,--warn-common $LDFLAGS"
4860    fi
4861fi
4862
4863# test if pod2man has --utf8 option
4864if pod2man --help | grep -q utf8; then
4865    POD2MAN="pod2man --utf8"
4866else
4867    POD2MAN="pod2man"
4868fi
4869
4870# Use ASLR, no-SEH and DEP if available
4871if test "$mingw32" = "yes" ; then
4872    for flag in --dynamicbase --no-seh --nxcompat; do
4873        if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4874            LDFLAGS="-Wl,$flag $LDFLAGS"
4875        fi
4876    done
4877fi
4878
4879qemu_confdir=$sysconfdir$confsuffix
4880qemu_moddir=$libdir$confsuffix
4881qemu_datadir=$datadir$confsuffix
4882qemu_localedir="$datadir/locale"
4883
4884tools=""
4885if test "$want_tools" = "yes" ; then
4886  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4887  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4888    tools="qemu-nbd\$(EXESUF) $tools"
4889    tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4890  fi
4891fi
4892if test "$softmmu" = yes ; then
4893  if test "$virtfs" != no ; then
4894    if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4895      virtfs=yes
4896      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4897    else
4898      if test "$virtfs" = yes; then
4899        error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
4900      fi
4901      virtfs=no
4902    fi
4903  fi
4904fi
4905
4906# Probe for guest agent support/options
4907
4908if [ "$guest_agent" != "no" ]; then
4909  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4910      tools="qemu-ga $tools"
4911      guest_agent=yes
4912  elif [ "$guest_agent" != yes ]; then
4913      guest_agent=no
4914  else
4915      error_exit "Guest agent is not supported on this platform"
4916  fi
4917fi
4918
4919# Guest agent Window MSI  package
4920
4921if test "$guest_agent" != yes; then
4922  if test "$guest_agent_msi" = yes; then
4923    error_exit "MSI guest agent package requires guest agent enabled"
4924  fi
4925  guest_agent_msi=no
4926elif test "$mingw32" != "yes"; then
4927  if test "$guest_agent_msi" = "yes"; then
4928    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4929  fi
4930  guest_agent_msi=no
4931elif ! has wixl; then
4932  if test "$guest_agent_msi" = "yes"; then
4933    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4934  fi
4935  guest_agent_msi=no
4936else
4937  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4938  # disabled explicitly
4939  if test "$guest_agent_msi" != "no"; then
4940    guest_agent_msi=yes
4941  fi
4942fi
4943
4944if test "$guest_agent_msi" = "yes"; then
4945  if test "$guest_agent_with_vss" = "yes"; then
4946    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4947  fi
4948
4949  if test "$QEMU_GA_MANUFACTURER" = ""; then
4950    QEMU_GA_MANUFACTURER=QEMU
4951  fi
4952
4953  if test "$QEMU_GA_DISTRO" = ""; then
4954    QEMU_GA_DISTRO=Linux
4955  fi
4956
4957  if test "$QEMU_GA_VERSION" = ""; then
4958      QEMU_GA_VERSION=$(cat $source_path/VERSION)
4959  fi
4960
4961  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
4962
4963  case "$cpu" in
4964  x86_64)
4965    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4966    ;;
4967  i386)
4968    QEMU_GA_MSI_ARCH="-D Arch=32"
4969    ;;
4970  *)
4971    error_exit "CPU $cpu not supported for building installation package"
4972    ;;
4973  esac
4974fi
4975
4976# Mac OS X ships with a broken assembler
4977roms=
4978if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4979        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4980        "$softmmu" = yes ; then
4981    # Different host OS linkers have different ideas about the name of the ELF
4982    # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
4983    # variant; and Windows uses i386pe.
4984    for emu in elf_i386 elf_i386_fbsd i386pe; do
4985        if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
4986            ld_i386_emulation="$emu"
4987            roms="optionrom"
4988            break
4989        fi
4990    done
4991fi
4992if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4993  roms="$roms spapr-rtas"
4994fi
4995
4996if test "$cpu" = "s390x" ; then
4997  roms="$roms s390-ccw"
4998fi
4999
5000# Probe for the need for relocating the user-only binary.
5001if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5002  textseg_addr=
5003  case "$cpu" in
5004    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5005      # ??? Rationale for choosing this address
5006      textseg_addr=0x60000000
5007      ;;
5008    mips)
5009      # A 256M aligned address, high in the address space, with enough
5010      # room for the code_gen_buffer above it before the stack.
5011      textseg_addr=0x60000000
5012      ;;
5013  esac
5014  if [ -n "$textseg_addr" ]; then
5015    cat > $TMPC <<EOF
5016    int main(void) { return 0; }
5017EOF
5018    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5019    if ! compile_prog "" "$textseg_ldflags"; then
5020      # In case ld does not support -Ttext-segment, edit the default linker
5021      # script via sed to set the .text start addr.  This is needed on FreeBSD
5022      # at least.
5023      if ! $ld --verbose >/dev/null 2>&1; then
5024        error_exit \
5025            "We need to link the QEMU user mode binaries at a" \
5026            "specific text address. Unfortunately your linker" \
5027            "doesn't support either the -Ttext-segment option or" \
5028            "printing the default linker script with --verbose." \
5029            "If you don't want the user mode binaries, pass the" \
5030            "--disable-user option to configure."
5031      fi
5032
5033      $ld --verbose | sed \
5034        -e '1,/==================================================/d' \
5035        -e '/==================================================/,$d' \
5036        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5037        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5038      textseg_ldflags="-Wl,-T../config-host.ld"
5039    fi
5040  fi
5041fi
5042
5043# Check that the C++ compiler exists and works with the C compiler.
5044# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5045if has $cxx; then
5046    cat > $TMPC <<EOF
5047int c_function(void);
5048int main(void) { return c_function(); }
5049EOF
5050
5051    compile_object
5052
5053    cat > $TMPCXX <<EOF
5054extern "C" {
5055   int c_function(void);
5056}
5057int c_function(void) { return 42; }
5058EOF
5059
5060    update_cxxflags
5061
5062    if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5063        # C++ compiler $cxx works ok with C compiler $cc
5064        :
5065    else
5066        echo "C++ compiler $cxx does not work with C compiler $cc"
5067        echo "Disabling C++ specific optional code"
5068        cxx=
5069    fi
5070else
5071    echo "No C++ compiler available; disabling C++ specific optional code"
5072    cxx=
5073fi
5074
5075echo_version() {
5076    if test "$1" = "yes" ; then
5077        echo "($2)"
5078    fi
5079}
5080
5081# prepend pixman and ftd flags after all config tests are done
5082QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5083libs_softmmu="$pixman_libs $libs_softmmu"
5084
5085echo "Install prefix    $prefix"
5086echo "BIOS directory    $(eval echo $qemu_datadir)"
5087echo "binary directory  $(eval echo $bindir)"
5088echo "library directory $(eval echo $libdir)"
5089echo "module directory  $(eval echo $qemu_moddir)"
5090echo "libexec directory $(eval echo $libexecdir)"
5091echo "include directory $(eval echo $includedir)"
5092echo "config directory  $(eval echo $sysconfdir)"
5093if test "$mingw32" = "no" ; then
5094echo "local state directory   $(eval echo $local_statedir)"
5095echo "Manual directory  $(eval echo $mandir)"
5096echo "ELF interp prefix $interp_prefix"
5097else
5098echo "local state directory   queried at runtime"
5099echo "Windows SDK       $win_sdk"
5100fi
5101echo "Source path       $source_path"
5102echo "C compiler        $cc"
5103echo "Host C compiler   $host_cc"
5104echo "C++ compiler      $cxx"
5105echo "Objective-C compiler $objcc"
5106echo "ARFLAGS           $ARFLAGS"
5107echo "CFLAGS            $CFLAGS"
5108echo "QEMU_CFLAGS       $QEMU_CFLAGS"
5109echo "LDFLAGS           $LDFLAGS"
5110echo "make              $make"
5111echo "install           $install"
5112echo "python            $python"
5113if test "$slirp" = "yes" ; then
5114    echo "smbd              $smbd"
5115fi
5116echo "module support    $modules"
5117echo "host CPU          $cpu"
5118echo "host big endian   $bigendian"
5119echo "target list       $target_list"
5120echo "tcg debug enabled $debug_tcg"
5121echo "gprof enabled     $gprof"
5122echo "sparse enabled    $sparse"
5123echo "strip binaries    $strip_opt"
5124echo "profiler          $profiler"
5125echo "static build      $static"
5126if test "$darwin" = "yes" ; then
5127    echo "Cocoa support     $cocoa"
5128fi
5129echo "pixman            $pixman"
5130echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
5131echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
5132echo "GTK GL support    $gtk_gl"
5133echo "VTE support       $vte $(echo_version $vte $vteversion)"
5134echo "TLS priority      $tls_priority"
5135echo "GNUTLS support    $gnutls"
5136echo "GNUTLS rnd        $gnutls_rnd"
5137echo "libgcrypt         $gcrypt"
5138echo "libgcrypt kdf     $gcrypt_kdf"
5139echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
5140echo "nettle kdf        $nettle_kdf"
5141echo "libtasn1          $tasn1"
5142echo "curses support    $curses"
5143echo "virgl support     $virglrenderer"
5144echo "curl support      $curl"
5145echo "mingw32 support   $mingw32"
5146echo "Audio drivers     $audio_drv_list"
5147echo "Block whitelist (rw) $block_drv_rw_whitelist"
5148echo "Block whitelist (ro) $block_drv_ro_whitelist"
5149echo "VirtFS support    $virtfs"
5150echo "VNC support       $vnc"
5151if test "$vnc" = "yes" ; then
5152    echo "VNC SASL support  $vnc_sasl"
5153    echo "VNC JPEG support  $vnc_jpeg"
5154    echo "VNC PNG support   $vnc_png"
5155fi
5156if test -n "$sparc_cpu"; then
5157    echo "Target Sparc Arch $sparc_cpu"
5158fi
5159echo "xen support       $xen"
5160if test "$xen" = "yes" ; then
5161  echo "xen ctrl version  $xen_ctrl_version"
5162  echo "pv dom build      $xen_pv_domain_build"
5163fi
5164echo "brlapi support    $brlapi"
5165echo "bluez  support    $bluez"
5166echo "Documentation     $docs"
5167echo "PIE               $pie"
5168echo "vde support       $vde"
5169echo "netmap support    $netmap"
5170echo "Linux AIO support $linux_aio"
5171echo "ATTR/XATTR support $attr"
5172echo "Install blobs     $blobs"
5173echo "KVM support       $kvm"
5174echo "HAX support       $hax"
5175echo "RDMA support      $rdma"
5176echo "TCG interpreter   $tcg_interpreter"
5177echo "fdt support       $fdt"
5178echo "preadv support    $preadv"
5179echo "fdatasync         $fdatasync"
5180echo "madvise           $madvise"
5181echo "posix_madvise     $posix_madvise"
5182echo "libcap-ng support $cap_ng"
5183echo "vhost-net support $vhost_net"
5184echo "vhost-scsi support $vhost_scsi"
5185echo "vhost-vsock support $vhost_vsock"
5186echo "Trace backends    $trace_backends"
5187if have_backend "simple"; then
5188echo "Trace output file $trace_file-<pid>"
5189fi
5190echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5191echo "rbd support       $rbd"
5192echo "xfsctl support    $xfs"
5193echo "smartcard support $smartcard"
5194echo "libusb            $libusb"
5195echo "usb net redir     $usb_redir"
5196echo "OpenGL support    $opengl"
5197echo "OpenGL dmabufs    $opengl_dmabuf"
5198echo "libiscsi support  $libiscsi"
5199echo "libnfs support    $libnfs"
5200echo "build guest agent $guest_agent"
5201echo "QGA VSS support   $guest_agent_with_vss"
5202echo "QGA w32 disk info $guest_agent_ntddscsi"
5203echo "QGA MSI support   $guest_agent_msi"
5204echo "seccomp support   $seccomp"
5205echo "coroutine backend $coroutine"
5206echo "coroutine pool    $coroutine_pool"
5207echo "debug stack usage $debug_stack_usage"
5208echo "GlusterFS support $glusterfs"
5209echo "gcov              $gcov_tool"
5210echo "gcov enabled      $gcov"
5211echo "TPM support       $tpm"
5212echo "libssh2 support   $libssh2"
5213echo "TPM passthrough   $tpm_passthrough"
5214echo "QOM debugging     $qom_cast_debug"
5215echo "Live block migration $live_block_migration"
5216echo "lzo support       $lzo"
5217echo "snappy support    $snappy"
5218echo "bzip2 support     $bzip2"
5219echo "NUMA host support $numa"
5220echo "tcmalloc support  $tcmalloc"
5221echo "jemalloc support  $jemalloc"
5222echo "avx2 optimization $avx2_opt"
5223echo "replication support $replication"
5224echo "VxHS block device $vxhs"
5225
5226if test "$sdl_too_old" = "yes"; then
5227echo "-> Your SDL version is too old - please upgrade to have SDL support"
5228fi
5229
5230if test "$supported_cpu" = "no"; then
5231    echo
5232    echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5233    echo
5234    echo "CPU host architecture $cpu support is not currently maintained."
5235    echo "The QEMU project intends to remove support for this host CPU in"
5236    echo "a future release if nobody volunteers to maintain it and to"
5237    echo "provide a build host for our continuous integration setup."
5238    echo "configure has succeeded and you can continue to build, but"
5239    echo "if you care about QEMU on this platform you should contact"
5240    echo "us upstream at qemu-devel@nongnu.org."
5241fi
5242
5243if test "$supported_os" = "no"; then
5244    echo
5245    echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5246    echo
5247    echo "Host OS $targetos support is not currently maintained."
5248    echo "The QEMU project intends to remove support for this host OS in"
5249    echo "a future release if nobody volunteers to maintain it and to"
5250    echo "provide a build host for our continuous integration setup."
5251    echo "configure has succeeded and you can continue to build, but"
5252    echo "if you care about QEMU on this platform you should contact"
5253    echo "us upstream at qemu-devel@nongnu.org."
5254fi
5255
5256config_host_mak="config-host.mak"
5257
5258echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5259
5260echo "# Automatically generated by configure - do not modify" > $config_host_mak
5261echo >> $config_host_mak
5262
5263echo all: >> $config_host_mak
5264echo "prefix=$prefix" >> $config_host_mak
5265echo "bindir=$bindir" >> $config_host_mak
5266echo "libdir=$libdir" >> $config_host_mak
5267echo "libexecdir=$libexecdir" >> $config_host_mak
5268echo "includedir=$includedir" >> $config_host_mak
5269echo "mandir=$mandir" >> $config_host_mak
5270echo "sysconfdir=$sysconfdir" >> $config_host_mak
5271echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5272echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5273echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5274echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5275if test "$mingw32" = "no" ; then
5276  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5277fi
5278echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5279echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5280echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
5281echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5282echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5283echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5284
5285echo "ARCH=$ARCH" >> $config_host_mak
5286
5287if test "$debug_tcg" = "yes" ; then
5288  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5289fi
5290if test "$strip_opt" = "yes" ; then
5291  echo "STRIP=${strip}" >> $config_host_mak
5292fi
5293if test "$bigendian" = "yes" ; then
5294  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5295fi
5296if test "$mingw32" = "yes" ; then
5297  echo "CONFIG_WIN32=y" >> $config_host_mak
5298  rc_version=$(cat $source_path/VERSION)
5299  version_major=${rc_version%%.*}
5300  rc_version=${rc_version#*.}
5301  version_minor=${rc_version%%.*}
5302  rc_version=${rc_version#*.}
5303  version_subminor=${rc_version%%.*}
5304  version_micro=0
5305  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5306  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5307  if test "$guest_agent_with_vss" = "yes" ; then
5308    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5309    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5310    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5311  fi
5312  if test "$guest_agent_ntddscsi" = "yes" ; then
5313    echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5314  fi
5315  if test "$guest_agent_msi" = "yes"; then
5316    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5317    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5318    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5319    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5320    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5321    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5322    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5323  fi
5324else
5325  echo "CONFIG_POSIX=y" >> $config_host_mak
5326fi
5327
5328if test "$linux" = "yes" ; then
5329  echo "CONFIG_LINUX=y" >> $config_host_mak
5330fi
5331
5332if test "$darwin" = "yes" ; then
5333  echo "CONFIG_DARWIN=y" >> $config_host_mak
5334fi
5335
5336if test "$aix" = "yes" ; then
5337  echo "CONFIG_AIX=y" >> $config_host_mak
5338fi
5339
5340if test "$solaris" = "yes" ; then
5341  echo "CONFIG_SOLARIS=y" >> $config_host_mak
5342  echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
5343  if test "$needs_libsunmath" = "yes" ; then
5344    echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
5345  fi
5346fi
5347if test "$haiku" = "yes" ; then
5348  echo "CONFIG_HAIKU=y" >> $config_host_mak
5349fi
5350if test "$static" = "yes" ; then
5351  echo "CONFIG_STATIC=y" >> $config_host_mak
5352fi
5353if test "$profiler" = "yes" ; then
5354  echo "CONFIG_PROFILER=y" >> $config_host_mak
5355fi
5356if test "$slirp" = "yes" ; then
5357  echo "CONFIG_SLIRP=y" >> $config_host_mak
5358  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5359fi
5360if test "$vde" = "yes" ; then
5361  echo "CONFIG_VDE=y" >> $config_host_mak
5362fi
5363if test "$netmap" = "yes" ; then
5364  echo "CONFIG_NETMAP=y" >> $config_host_mak
5365fi
5366if test "$l2tpv3" = "yes" ; then
5367  echo "CONFIG_L2TPV3=y" >> $config_host_mak
5368fi
5369if test "$cap_ng" = "yes" ; then
5370  echo "CONFIG_LIBCAP=y" >> $config_host_mak
5371fi
5372echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5373for drv in $audio_drv_list; do
5374    def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5375    echo "$def=y" >> $config_host_mak
5376done
5377if test "$audio_pt_int" = "yes" ; then
5378  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5379fi
5380if test "$audio_win_int" = "yes" ; then
5381  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5382fi
5383echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5384echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5385if test "$vnc" = "yes" ; then
5386  echo "CONFIG_VNC=y" >> $config_host_mak
5387fi
5388if test "$vnc_sasl" = "yes" ; then
5389  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5390fi
5391if test "$vnc_jpeg" = "yes" ; then
5392  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5393fi
5394if test "$vnc_png" = "yes" ; then
5395  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5396fi
5397if test "$fnmatch" = "yes" ; then
5398  echo "CONFIG_FNMATCH=y" >> $config_host_mak
5399fi
5400if test "$xfs" = "yes" ; then
5401  echo "CONFIG_XFS=y" >> $config_host_mak
5402fi
5403qemu_version=$(head $source_path/VERSION)
5404echo "VERSION=$qemu_version" >>$config_host_mak
5405echo "PKGVERSION=$pkgversion" >>$config_host_mak
5406echo "SRC_PATH=$source_path" >> $config_host_mak
5407echo "TARGET_DIRS=$target_list" >> $config_host_mak
5408if [ "$docs" = "yes" ] ; then
5409  echo "BUILD_DOCS=yes" >> $config_host_mak
5410fi
5411if test "$modules" = "yes"; then
5412  # $shacmd can generate a hash started with digit, which the compiler doesn't
5413  # like as an symbol. So prefix it with an underscore
5414  echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5415  echo "CONFIG_MODULES=y" >> $config_host_mak
5416fi
5417if test "$sdl" = "yes" ; then
5418  echo "CONFIG_SDL=y" >> $config_host_mak
5419  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5420  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5421fi
5422if test "$cocoa" = "yes" ; then
5423  echo "CONFIG_COCOA=y" >> $config_host_mak
5424fi
5425if test "$curses" = "yes" ; then
5426  echo "CONFIG_CURSES=y" >> $config_host_mak
5427fi
5428if test "$pipe2" = "yes" ; then
5429  echo "CONFIG_PIPE2=y" >> $config_host_mak
5430fi
5431if test "$accept4" = "yes" ; then
5432  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5433fi
5434if test "$splice" = "yes" ; then
5435  echo "CONFIG_SPLICE=y" >> $config_host_mak
5436fi
5437if test "$eventfd" = "yes" ; then
5438  echo "CONFIG_EVENTFD=y" >> $config_host_mak
5439fi
5440if test "$memfd" = "yes" ; then
5441  echo "CONFIG_MEMFD=y" >> $config_host_mak
5442fi
5443if test "$fallocate" = "yes" ; then
5444  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5445fi
5446if test "$fallocate_punch_hole" = "yes" ; then
5447  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5448fi
5449if test "$fallocate_zero_range" = "yes" ; then
5450  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5451fi
5452if test "$posix_fallocate" = "yes" ; then
5453  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5454fi
5455if test "$sync_file_range" = "yes" ; then
5456  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5457fi
5458if test "$fiemap" = "yes" ; then
5459  echo "CONFIG_FIEMAP=y" >> $config_host_mak
5460fi
5461if test "$dup3" = "yes" ; then
5462  echo "CONFIG_DUP3=y" >> $config_host_mak
5463fi
5464if test "$ppoll" = "yes" ; then
5465  echo "CONFIG_PPOLL=y" >> $config_host_mak
5466fi
5467if test "$prctl_pr_set_timerslack" = "yes" ; then
5468  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5469fi
5470if test "$epoll" = "yes" ; then
5471  echo "CONFIG_EPOLL=y" >> $config_host_mak
5472fi
5473if test "$epoll_create1" = "yes" ; then
5474  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5475fi
5476if test "$sendfile" = "yes" ; then
5477  echo "CONFIG_SENDFILE=y" >> $config_host_mak
5478fi
5479if test "$timerfd" = "yes" ; then
5480  echo "CONFIG_TIMERFD=y" >> $config_host_mak
5481fi
5482if test "$setns" = "yes" ; then
5483  echo "CONFIG_SETNS=y" >> $config_host_mak
5484fi
5485if test "$clock_adjtime" = "yes" ; then
5486  echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5487fi
5488if test "$syncfs" = "yes" ; then
5489  echo "CONFIG_SYNCFS=y" >> $config_host_mak
5490fi
5491if test "$inotify" = "yes" ; then
5492  echo "CONFIG_INOTIFY=y" >> $config_host_mak
5493fi
5494if test "$inotify1" = "yes" ; then
5495  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5496fi
5497if test "$byteswap_h" = "yes" ; then
5498  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5499fi
5500if test "$bswap_h" = "yes" ; then
5501  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5502fi
5503if test "$curl" = "yes" ; then
5504  echo "CONFIG_CURL=m" >> $config_host_mak
5505  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5506  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5507fi
5508if test "$brlapi" = "yes" ; then
5509  echo "CONFIG_BRLAPI=y" >> $config_host_mak
5510fi
5511if test "$bluez" = "yes" ; then
5512  echo "CONFIG_BLUEZ=y" >> $config_host_mak
5513  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5514fi
5515if test "$glib_subprocess" = "yes" ; then
5516  echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5517fi
5518if test "$gtk" = "yes" ; then
5519  echo "CONFIG_GTK=y" >> $config_host_mak
5520  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5521  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5522  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5523  if test "$gtk_gl" = "yes" ; then
5524    echo "CONFIG_GTK_GL=y" >> $config_host_mak
5525  fi
5526fi
5527echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5528if test "$gnutls" = "yes" ; then
5529  echo "CONFIG_GNUTLS=y" >> $config_host_mak
5530fi
5531if test "$gnutls_rnd" = "yes" ; then
5532  echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5533fi
5534if test "$gcrypt" = "yes" ; then
5535  echo "CONFIG_GCRYPT=y" >> $config_host_mak
5536  if test "$gcrypt_hmac" = "yes" ; then
5537    echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5538  fi
5539  if test "$gcrypt_kdf" = "yes" ; then
5540    echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5541  fi
5542fi
5543if test "$nettle" = "yes" ; then
5544  echo "CONFIG_NETTLE=y" >> $config_host_mak
5545  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5546  if test "$nettle_kdf" = "yes" ; then
5547    echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5548  fi
5549fi
5550if test "$tasn1" = "yes" ; then
5551  echo "CONFIG_TASN1=y" >> $config_host_mak
5552fi
5553if test "$have_ifaddrs_h" = "yes" ; then
5554    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5555fi
5556if test "$have_broken_size_max" = "yes" ; then
5557    echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5558fi
5559
5560# Work around a system header bug with some kernel/XFS header
5561# versions where they both try to define 'struct fsxattr':
5562# xfs headers will not try to redefine structs from linux headers
5563# if this macro is set.
5564if test "$have_fsxattr" = "yes" ; then
5565    echo "HAVE_FSXATTR=y" >> $config_host_mak
5566fi
5567if test "$vte" = "yes" ; then
5568  echo "CONFIG_VTE=y" >> $config_host_mak
5569  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5570fi
5571if test "$virglrenderer" = "yes" ; then
5572  echo "CONFIG_VIRGL=y" >> $config_host_mak
5573  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5574  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5575fi
5576if test "$xen" = "yes" ; then
5577  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5578  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5579  if test "$xen_pv_domain_build" = "yes" ; then
5580    echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5581  fi
5582fi
5583if test "$linux_aio" = "yes" ; then
5584  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5585fi
5586if test "$attr" = "yes" ; then
5587  echo "CONFIG_ATTR=y" >> $config_host_mak
5588fi
5589if test "$libattr" = "yes" ; then
5590  echo "CONFIG_LIBATTR=y" >> $config_host_mak
5591fi
5592if test "$virtfs" = "yes" ; then
5593  echo "CONFIG_VIRTFS=y" >> $config_host_mak
5594fi
5595if test "$vhost_scsi" = "yes" ; then
5596  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5597fi
5598if test "$vhost_net" = "yes" ; then
5599  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5600fi
5601if test "$vhost_vsock" = "yes" ; then
5602  echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5603fi
5604if test "$blobs" = "yes" ; then
5605  echo "INSTALL_BLOBS=yes" >> $config_host_mak
5606fi
5607if test "$iovec" = "yes" ; then
5608  echo "CONFIG_IOVEC=y" >> $config_host_mak
5609fi
5610if test "$preadv" = "yes" ; then
5611  echo "CONFIG_PREADV=y" >> $config_host_mak
5612fi
5613if test "$fdt" = "yes" ; then
5614  echo "CONFIG_FDT=y" >> $config_host_mak
5615fi
5616if test "$signalfd" = "yes" ; then
5617  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5618fi
5619if test "$tcg_interpreter" = "yes" ; then
5620  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5621fi
5622if test "$fdatasync" = "yes" ; then
5623  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5624fi
5625if test "$madvise" = "yes" ; then
5626  echo "CONFIG_MADVISE=y" >> $config_host_mak
5627fi
5628if test "$posix_madvise" = "yes" ; then
5629  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5630fi
5631
5632if test "$spice" = "yes" ; then
5633  echo "CONFIG_SPICE=y" >> $config_host_mak
5634fi
5635
5636if test "$smartcard" = "yes" ; then
5637  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5638fi
5639
5640if test "$libusb" = "yes" ; then
5641  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5642fi
5643
5644if test "$usb_redir" = "yes" ; then
5645  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5646fi
5647
5648if test "$opengl" = "yes" ; then
5649  echo "CONFIG_OPENGL=y" >> $config_host_mak
5650  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5651  if test "$opengl_dmabuf" = "yes" ; then
5652    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5653  fi
5654fi
5655
5656if test "$avx2_opt" = "yes" ; then
5657  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5658fi
5659
5660if test "$lzo" = "yes" ; then
5661  echo "CONFIG_LZO=y" >> $config_host_mak
5662fi
5663
5664if test "$snappy" = "yes" ; then
5665  echo "CONFIG_SNAPPY=y" >> $config_host_mak
5666fi
5667
5668if test "$bzip2" = "yes" ; then
5669  echo "CONFIG_BZIP2=y" >> $config_host_mak
5670  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5671fi
5672
5673if test "$libiscsi" = "yes" ; then
5674  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5675  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5676  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5677fi
5678
5679if test "$libnfs" = "yes" ; then
5680  echo "CONFIG_LIBNFS=m" >> $config_host_mak
5681  echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
5682fi
5683
5684if test "$seccomp" = "yes"; then
5685  echo "CONFIG_SECCOMP=y" >> $config_host_mak
5686fi
5687
5688# XXX: suppress that
5689if [ "$bsd" = "yes" ] ; then
5690  echo "CONFIG_BSD=y" >> $config_host_mak
5691fi
5692
5693if test "$localtime_r" = "yes" ; then
5694  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5695fi
5696if test "$qom_cast_debug" = "yes" ; then
5697  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5698fi
5699if test "$rbd" = "yes" ; then
5700  echo "CONFIG_RBD=m" >> $config_host_mak
5701  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5702  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5703fi
5704
5705echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5706if test "$coroutine_pool" = "yes" ; then
5707  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5708else
5709  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5710fi
5711
5712if test "$debug_stack_usage" = "yes" ; then
5713  echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5714fi
5715
5716if test "$open_by_handle_at" = "yes" ; then
5717  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5718fi
5719
5720if test "$linux_magic_h" = "yes" ; then
5721  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5722fi
5723
5724if test "$pragma_diagnostic_available" = "yes" ; then
5725  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5726fi
5727
5728if test "$valgrind_h" = "yes" ; then
5729  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5730fi
5731
5732if test "$has_environ" = "yes" ; then
5733  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5734fi
5735
5736if test "$cpuid_h" = "yes" ; then
5737  echo "CONFIG_CPUID_H=y" >> $config_host_mak
5738fi
5739
5740if test "$int128" = "yes" ; then
5741  echo "CONFIG_INT128=y" >> $config_host_mak
5742fi
5743
5744if test "$atomic128" = "yes" ; then
5745  echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5746fi
5747
5748if test "$atomic64" = "yes" ; then
5749  echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5750fi
5751
5752if test "$getauxval" = "yes" ; then
5753  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5754fi
5755
5756if test "$glusterfs" = "yes" ; then
5757  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5758  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5759  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5760fi
5761
5762if test "$glusterfs_xlator_opt" = "yes" ; then
5763  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5764fi
5765
5766if test "$glusterfs_discard" = "yes" ; then
5767  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5768fi
5769
5770if test "$glusterfs_fallocate" = "yes" ; then
5771  echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
5772fi
5773
5774if test "$glusterfs_zerofill" = "yes" ; then
5775  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5776fi
5777
5778if test "$libssh2" = "yes" ; then
5779  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5780  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5781  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5782fi
5783
5784if test "$live_block_migration" = "yes" ; then
5785  echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
5786fi
5787
5788# USB host support
5789if test "$libusb" = "yes"; then
5790  echo "HOST_USB=libusb legacy" >> $config_host_mak
5791else
5792  echo "HOST_USB=stub" >> $config_host_mak
5793fi
5794
5795# TPM passthrough support?
5796if test "$tpm" = "yes"; then
5797  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5798  if test "$tpm_passthrough" = "yes"; then
5799    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5800  fi
5801fi
5802
5803echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5804if have_backend "nop"; then
5805  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5806fi
5807if have_backend "simple"; then
5808  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5809  # Set the appropriate trace file.
5810  trace_file="\"$trace_file-\" FMT_pid"
5811fi
5812if have_backend "log"; then
5813  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5814fi
5815if have_backend "ust"; then
5816  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5817fi
5818if have_backend "dtrace"; then
5819  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5820  if test "$trace_backend_stap" = "yes" ; then
5821    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5822  fi
5823fi
5824if have_backend "ftrace"; then
5825  if test "$linux" = "yes" ; then
5826    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5827  else
5828    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5829  fi
5830fi
5831if have_backend "syslog"; then
5832  if test "$posix_syslog" = "yes" ; then
5833    echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
5834  else
5835    feature_not_found "syslog(trace backend)" "syslog not available"
5836  fi
5837fi
5838echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5839
5840if test "$rdma" = "yes" ; then
5841  echo "CONFIG_RDMA=y" >> $config_host_mak
5842fi
5843
5844if test "$have_rtnetlink" = "yes" ; then
5845  echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5846fi
5847
5848if test "$replication" = "yes" ; then
5849  echo "CONFIG_REPLICATION=y" >> $config_host_mak
5850fi
5851
5852if test "$have_af_vsock" = "yes" ; then
5853  echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
5854fi
5855
5856if test "$have_sysmacros" = "yes" ; then
5857  echo "CONFIG_SYSMACROS=y" >> $config_host_mak
5858fi
5859
5860if test "$have_static_assert" = "yes" ; then
5861  echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
5862fi
5863
5864# Hold two types of flag:
5865#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
5866#                                     a thread we have a handle to
5867#   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
5868#                                     platform
5869if test "$pthread_setname_np" = "yes" ; then
5870  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5871  echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5872fi
5873
5874if test "$vxhs" = "yes" ; then
5875  echo "CONFIG_VXHS=y" >> $config_host_mak
5876  echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
5877fi
5878
5879if test "$tcg_interpreter" = "yes"; then
5880  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5881elif test "$ARCH" = "sparc64" ; then
5882  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5883elif test "$ARCH" = "s390x" ; then
5884  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5885elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5886  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5887elif test "$ARCH" = "ppc64" ; then
5888  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5889else
5890  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5891fi
5892QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5893
5894echo "TOOLS=$tools" >> $config_host_mak
5895echo "ROMS=$roms" >> $config_host_mak
5896echo "MAKE=$make" >> $config_host_mak
5897echo "INSTALL=$install" >> $config_host_mak
5898echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5899echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5900echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5901echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5902echo "PYTHON=$python" >> $config_host_mak
5903echo "CC=$cc" >> $config_host_mak
5904if $iasl -h > /dev/null 2>&1; then
5905  echo "IASL=$iasl" >> $config_host_mak
5906fi
5907echo "CC_I386=$cc_i386" >> $config_host_mak
5908echo "HOST_CC=$host_cc" >> $config_host_mak
5909echo "CXX=$cxx" >> $config_host_mak
5910echo "OBJCC=$objcc" >> $config_host_mak
5911echo "AR=$ar" >> $config_host_mak
5912echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5913echo "AS=$as" >> $config_host_mak
5914echo "CCAS=$ccas" >> $config_host_mak
5915echo "CPP=$cpp" >> $config_host_mak
5916echo "OBJCOPY=$objcopy" >> $config_host_mak
5917echo "LD=$ld" >> $config_host_mak
5918echo "NM=$nm" >> $config_host_mak
5919echo "WINDRES=$windres" >> $config_host_mak
5920echo "CFLAGS=$CFLAGS" >> $config_host_mak
5921echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5922echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5923echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
5924echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5925if test "$sparse" = "yes" ; then
5926  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
5927  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
5928  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
5929  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
5930  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5931fi
5932if test "$cross_prefix" != ""; then
5933  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
5934else
5935  echo "AUTOCONF_HOST := "                             >> $config_host_mak
5936fi
5937echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5938echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5939echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
5940echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
5941echo "LIBS+=$LIBS" >> $config_host_mak
5942echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5943echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
5944echo "EXESUF=$EXESUF" >> $config_host_mak
5945echo "DSOSUF=$DSOSUF" >> $config_host_mak
5946echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5947echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5948echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5949echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
5950echo "POD2MAN=$POD2MAN" >> $config_host_mak
5951echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5952if test "$gcov" = "yes" ; then
5953  echo "CONFIG_GCOV=y" >> $config_host_mak
5954  echo "GCOV=$gcov_tool" >> $config_host_mak
5955fi
5956
5957# use included Linux headers
5958if test "$linux" = "yes" ; then
5959  mkdir -p linux-headers
5960  case "$cpu" in
5961  i386|x86_64|x32)
5962    linux_arch=x86
5963    ;;
5964  ppcemb|ppc|ppc64)
5965    linux_arch=powerpc
5966    ;;
5967  s390x)
5968    linux_arch=s390
5969    ;;
5970  aarch64)
5971    linux_arch=arm64
5972    ;;
5973  mips64)
5974    linux_arch=mips
5975    ;;
5976  *)
5977    # For most CPUs the kernel architecture name and QEMU CPU name match.
5978    linux_arch="$cpu"
5979    ;;
5980  esac
5981    # For non-KVM architectures we will not have asm headers
5982    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5983      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5984    fi
5985fi
5986
5987for target in $target_list; do
5988target_dir="$target"
5989config_target_mak=$target_dir/config-target.mak
5990target_name=$(echo $target | cut -d '-' -f 1)
5991target_bigendian="no"
5992
5993case "$target_name" in
5994  armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5995  target_bigendian=yes
5996  ;;
5997esac
5998target_softmmu="no"
5999target_user_only="no"
6000target_linux_user="no"
6001target_bsd_user="no"
6002case "$target" in
6003  ${target_name}-softmmu)
6004    target_softmmu="yes"
6005    ;;
6006  ${target_name}-linux-user)
6007    if test "$linux" != "yes" ; then
6008      error_exit "Target '$target' is only available on a Linux host"
6009    fi
6010    target_user_only="yes"
6011    target_linux_user="yes"
6012    ;;
6013  ${target_name}-bsd-user)
6014    if test "$bsd" != "yes" ; then
6015      error_exit "Target '$target' is only available on a BSD host"
6016    fi
6017    target_user_only="yes"
6018    target_bsd_user="yes"
6019    ;;
6020  *)
6021    error_exit "Target '$target' not recognised"
6022    exit 1
6023    ;;
6024esac
6025
6026mkdir -p $target_dir
6027echo "# Automatically generated by configure - do not modify" > $config_target_mak
6028
6029bflt="no"
6030mttcg="no"
6031interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6032gdb_xml_files=""
6033
6034TARGET_ARCH="$target_name"
6035TARGET_BASE_ARCH=""
6036TARGET_ABI_DIR=""
6037
6038case "$target_name" in
6039  i386)
6040    gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6041  ;;
6042  x86_64)
6043    TARGET_BASE_ARCH=i386
6044    gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6045  ;;
6046  alpha)
6047    mttcg="yes"
6048  ;;
6049  arm|armeb)
6050    TARGET_ARCH=arm
6051    bflt="yes"
6052    mttcg="yes"
6053    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6054  ;;
6055  aarch64)
6056    TARGET_BASE_ARCH=arm
6057    bflt="yes"
6058    mttcg="yes"
6059    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6060  ;;
6061  cris)
6062  ;;
6063  hppa)
6064  ;;
6065  lm32)
6066  ;;
6067  m68k)
6068    bflt="yes"
6069    gdb_xml_files="cf-core.xml cf-fp.xml"
6070  ;;
6071  microblaze|microblazeel)
6072    TARGET_ARCH=microblaze
6073    bflt="yes"
6074  ;;
6075  mips|mipsel)
6076    TARGET_ARCH=mips
6077    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6078  ;;
6079  mipsn32|mipsn32el)
6080    TARGET_ARCH=mips64
6081    TARGET_BASE_ARCH=mips
6082    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6083    echo "TARGET_ABI32=y" >> $config_target_mak
6084  ;;
6085  mips64|mips64el)
6086    TARGET_ARCH=mips64
6087    TARGET_BASE_ARCH=mips
6088    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6089  ;;
6090  moxie)
6091  ;;
6092  nios2)
6093  ;;
6094  or1k)
6095    TARGET_ARCH=openrisc
6096    TARGET_BASE_ARCH=openrisc
6097  ;;
6098  ppc)
6099    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6100  ;;
6101  ppcemb)
6102    TARGET_BASE_ARCH=ppc
6103    TARGET_ABI_DIR=ppc
6104    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6105  ;;
6106  ppc64)
6107    TARGET_BASE_ARCH=ppc
6108    TARGET_ABI_DIR=ppc
6109    mttcg=yes
6110    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6111  ;;
6112  ppc64le)
6113    TARGET_ARCH=ppc64
6114    TARGET_BASE_ARCH=ppc
6115    TARGET_ABI_DIR=ppc
6116    mttcg=yes
6117    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6118  ;;
6119  ppc64abi32)
6120    TARGET_ARCH=ppc64
6121    TARGET_BASE_ARCH=ppc
6122    TARGET_ABI_DIR=ppc
6123    echo "TARGET_ABI32=y" >> $config_target_mak
6124    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6125  ;;
6126  sh4|sh4eb)
6127    TARGET_ARCH=sh4
6128    bflt="yes"
6129  ;;
6130  sparc)
6131  ;;
6132  sparc64)
6133    TARGET_BASE_ARCH=sparc
6134  ;;
6135  sparc32plus)
6136    TARGET_ARCH=sparc64
6137    TARGET_BASE_ARCH=sparc
6138    TARGET_ABI_DIR=sparc
6139    echo "TARGET_ABI32=y" >> $config_target_mak
6140  ;;
6141  s390x)
6142    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
6143  ;;
6144  tilegx)
6145  ;;
6146  tricore)
6147  ;;
6148  unicore32)
6149  ;;
6150  xtensa|xtensaeb)
6151    TARGET_ARCH=xtensa
6152  ;;
6153  *)
6154    error_exit "Unsupported target CPU"
6155  ;;
6156esac
6157# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6158if [ "$TARGET_BASE_ARCH" = "" ]; then
6159  TARGET_BASE_ARCH=$TARGET_ARCH
6160fi
6161
6162symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6163
6164upper() {
6165    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6166}
6167
6168target_arch_name="$(upper $TARGET_ARCH)"
6169echo "TARGET_$target_arch_name=y" >> $config_target_mak
6170echo "TARGET_NAME=$target_name" >> $config_target_mak
6171echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6172if [ "$TARGET_ABI_DIR" = "" ]; then
6173  TARGET_ABI_DIR=$TARGET_ARCH
6174fi
6175echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6176if [ "$HOST_VARIANT_DIR" != "" ]; then
6177    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6178fi
6179case "$target_name" in
6180  i386|x86_64)
6181    if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
6182      echo "CONFIG_XEN=y" >> $config_target_mak
6183      if test "$xen_pci_passthrough" = yes; then
6184        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6185      fi
6186    fi
6187    ;;
6188  *)
6189esac
6190case "$target_name" in
6191  aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
6192    # Make sure the target and host cpus are compatible
6193    if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
6194      \( "$target_name" = "$cpu" -o \
6195      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
6196      \( "$target_name" = "ppc64"  -a "$cpu" = "ppc" \) -o \
6197      \( "$target_name" = "ppc"    -a "$cpu" = "ppc64" \) -o \
6198      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
6199      \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
6200      \( "$target_name" = "x86_64" -a "$cpu" = "i386"   \) -o \
6201      \( "$target_name" = "i386"   -a "$cpu" = "x86_64" \) -o \
6202      \( "$target_name" = "x86_64" -a "$cpu" = "x32"   \) -o \
6203      \( "$target_name" = "i386"   -a "$cpu" = "x32" \) \) ; then
6204      echo "CONFIG_KVM=y" >> $config_target_mak
6205      if test "$vhost_net" = "yes" ; then
6206        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6207        echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
6208      fi
6209    fi
6210esac
6211if test "$hax" = "yes" ; then
6212  if test "$target_softmmu" = "yes" ; then
6213    case "$target_name" in
6214    i386|x86_64)
6215      echo "CONFIG_HAX=y" >> $config_target_mak
6216    ;;
6217    esac
6218  fi
6219fi
6220if test "$target_bigendian" = "yes" ; then
6221  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6222fi
6223if test "$target_softmmu" = "yes" ; then
6224  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6225  if test "$mttcg" = "yes" ; then
6226    echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6227  fi
6228fi
6229if test "$target_user_only" = "yes" ; then
6230  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6231  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6232fi
6233if test "$target_linux_user" = "yes" ; then
6234  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6235fi
6236list=""
6237if test ! -z "$gdb_xml_files" ; then
6238  for x in $gdb_xml_files; do
6239    list="$list $source_path/gdb-xml/$x"
6240  done
6241  echo "TARGET_XML_FILES=$list" >> $config_target_mak
6242fi
6243
6244if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6245  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6246fi
6247if test "$target_bsd_user" = "yes" ; then
6248  echo "CONFIG_BSD_USER=y" >> $config_target_mak
6249fi
6250
6251# generate QEMU_CFLAGS/LDFLAGS for targets
6252
6253cflags=""
6254ldflags=""
6255
6256disas_config() {
6257  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6258  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6259}
6260
6261for i in $ARCH $TARGET_BASE_ARCH ; do
6262  case "$i" in
6263  alpha)
6264    disas_config "ALPHA"
6265  ;;
6266  aarch64)
6267    if test -n "${cxx}"; then
6268      disas_config "ARM_A64"
6269    fi
6270  ;;
6271  arm)
6272    disas_config "ARM"
6273    if test -n "${cxx}"; then
6274      disas_config "ARM_A64"
6275    fi
6276  ;;
6277  cris)
6278    disas_config "CRIS"
6279  ;;
6280  hppa)
6281    disas_config "HPPA"
6282  ;;
6283  i386|x86_64|x32)
6284    disas_config "I386"
6285  ;;
6286  ia64*)
6287    disas_config "IA64"
6288  ;;
6289  lm32)
6290    disas_config "LM32"
6291  ;;
6292  m68k)
6293    disas_config "M68K"
6294  ;;
6295  microblaze*)
6296    disas_config "MICROBLAZE"
6297  ;;
6298  mips*)
6299    disas_config "MIPS"
6300  ;;
6301  moxie*)
6302    disas_config "MOXIE"
6303  ;;
6304  nios2)
6305    disas_config "NIOS2"
6306  ;;
6307  or1k)
6308    disas_config "OPENRISC"
6309  ;;
6310  ppc*)
6311    disas_config "PPC"
6312  ;;
6313  s390*)
6314    disas_config "S390"
6315  ;;
6316  sh4)
6317    disas_config "SH4"
6318  ;;
6319  sparc*)
6320    disas_config "SPARC"
6321  ;;
6322  xtensa*)
6323    disas_config "XTENSA"
6324  ;;
6325  esac
6326done
6327if test "$tcg_interpreter" = "yes" ; then
6328  disas_config "TCI"
6329fi
6330
6331case "$ARCH" in
6332alpha)
6333  # Ensure there's only a single GP
6334  cflags="-msmall-data $cflags"
6335;;
6336esac
6337
6338if test "$gprof" = "yes" ; then
6339  echo "TARGET_GPROF=yes" >> $config_target_mak
6340  if test "$target_linux_user" = "yes" ; then
6341    cflags="-p $cflags"
6342    ldflags="-p $ldflags"
6343  fi
6344  if test "$target_softmmu" = "yes" ; then
6345    ldflags="-p $ldflags"
6346    echo "GPROF_CFLAGS=-p" >> $config_target_mak
6347  fi
6348fi
6349
6350if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6351  ldflags="$ldflags $textseg_ldflags"
6352fi
6353
6354echo "LDFLAGS+=$ldflags" >> $config_target_mak
6355echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6356
6357done # for target in $targets
6358
6359if [ "$pixman" = "internal" ]; then
6360  echo "config-host.h: subdir-pixman" >> $config_host_mak
6361fi
6362
6363if [ "$dtc_internal" = "yes" ]; then
6364  echo "config-host.h: subdir-dtc" >> $config_host_mak
6365fi
6366
6367if test "$numa" = "yes"; then
6368  echo "CONFIG_NUMA=y" >> $config_host_mak
6369fi
6370
6371if test "$ccache_cpp2" = "yes"; then
6372  echo "export CCACHE_CPP2=y" >> $config_host_mak
6373fi
6374
6375# build tree in object directory in case the source is not in the current directory
6376DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
6377DIRS="$DIRS docs fsdev"
6378DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6379DIRS="$DIRS roms/seabios roms/vgabios"
6380DIRS="$DIRS qapi-generated"
6381FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6382FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6383FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6384FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6385FILES="$FILES pc-bios/spapr-rtas/Makefile"
6386FILES="$FILES pc-bios/s390-ccw/Makefile"
6387FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6388FILES="$FILES pc-bios/qemu-icon.bmp"
6389FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
6390for bios_file in \
6391    $source_path/pc-bios/*.bin \
6392    $source_path/pc-bios/*.lid \
6393    $source_path/pc-bios/*.aml \
6394    $source_path/pc-bios/*.rom \
6395    $source_path/pc-bios/*.dtb \
6396    $source_path/pc-bios/*.img \
6397    $source_path/pc-bios/openbios-* \
6398    $source_path/pc-bios/u-boot.* \
6399    $source_path/pc-bios/palcode-*
6400do
6401    FILES="$FILES pc-bios/$(basename $bios_file)"
6402done
6403for test_file in $(find $source_path/tests/acpi-test-data -type f)
6404do
6405    FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6406done
6407mkdir -p $DIRS
6408for f in $FILES ; do
6409    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6410        symlink "$source_path/$f" "$f"
6411    fi
6412done
6413
6414# temporary config to build submodules
6415for rom in seabios vgabios ; do
6416    config_mak=roms/$rom/config.mak
6417    echo "# Automatically generated by configure - do not modify" > $config_mak
6418    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6419    echo "AS=$as" >> $config_mak
6420    echo "CCAS=$ccas" >> $config_mak
6421    echo "CC=$cc" >> $config_mak
6422    echo "BCC=bcc" >> $config_mak
6423    echo "CPP=$cpp" >> $config_mak
6424    echo "OBJCOPY=objcopy" >> $config_mak
6425    echo "IASL=$iasl" >> $config_mak
6426    echo "LD=$ld" >> $config_mak
6427done
6428
6429# set up tests data directory
6430if [ ! -e tests/data ]; then
6431    symlink "$source_path/tests/data" tests/data
6432fi
6433
6434# set up qemu-iotests in this build directory
6435iotests_common_env="tests/qemu-iotests/common.env"
6436iotests_check="tests/qemu-iotests/check"
6437
6438echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6439echo >> "$iotests_common_env"
6440echo "export PYTHON='$python'" >> "$iotests_common_env"
6441
6442if [ ! -e "$iotests_check" ]; then
6443    symlink "$source_path/$iotests_check" "$iotests_check"
6444fi
6445
6446# Save the configure command line for later reuse.
6447cat <<EOD >config.status
6448#!/bin/sh
6449# Generated by configure.
6450# Run this file to recreate the current configuration.
6451# Compiler output produced by configure, useful for debugging
6452# configure, is in config.log if it exists.
6453EOD
6454printf "exec" >>config.status
6455printf " '%s'" "$0" "$@" >>config.status
6456echo ' "$@"' >>config.status
6457chmod +x config.status
6458
6459rm -r "$TMPDIR1"
6460