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