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