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