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