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