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