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