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