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