qcow2: fix return error code in qcow2_truncate()
[qemu/ar7.git] / configure
blob6587e8014b6b5c5ab5a984eaf1fef8f58c991f29
1 #!/bin/sh
3 # qemu configure script (c) 2003 Fabrice Bellard
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE= GREP_OPTIONS=
9 unset CLICOLOR_FORCE GREP_OPTIONS
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
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.)
19 TMPDIR1="config-temp"
20 rm -rf "${TMPDIR1}"
21 mkdir -p "${TMPDIR1}"
22 if [ $? -ne 0 ]; then
23 echo "ERROR: failed to create temporary directory"
24 exit 1
27 TMPB="qemu-conf"
28 TMPC="${TMPDIR1}/${TMPB}.c"
29 TMPO="${TMPDIR1}/${TMPB}.o"
30 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31 TMPE="${TMPDIR1}/${TMPB}.exe"
32 TMPMO="${TMPDIR1}/${TMPB}.mo"
34 rm -f config.log
36 # Print a helpful header at the top of config.log
37 echo "# QEMU configure log $(date)" >> config.log
38 printf "# Configured with:" >> config.log
39 printf " '%s'" "$0" "$@" >> config.log
40 echo >> config.log
41 echo "#" >> config.log
43 print_error() {
44 (echo
45 echo "ERROR: $1"
46 while test -n "$2"; do
47 echo " $2"
48 shift
49 done
50 echo) >&2
53 error_exit() {
54 print_error "$@"
55 exit 1
58 do_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
72 # Don't bother rerunning the compile if we were already using -Werror
73 case "$*" in
74 *-Werror*)
75 return 0
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."
86 do_cc() {
87 do_compiler "$cc" "$@"
90 do_cxx() {
91 do_compiler "$cxx" "$@"
94 update_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"
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)
106 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
108 esac
109 done
112 compile_object() {
113 local_cflags="$1"
114 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
117 compile_prog() {
118 local_cflags="$1"
119 local_ldflags="$2"
120 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
123 # symbolically link $1 to $2. Portable version of "ln -sf".
124 symlink() {
125 rm -rf "$2"
126 mkdir -p "$(dirname "$2")"
127 ln -s "$1" "$2"
130 # check whether a command is available to this shell (may be either an
131 # executable or a builtin)
132 has() {
133 type "$1" >/dev/null 2>&1
136 # search for an executable in PATH
137 path_of() {
138 local_command="$1"
139 local_ifs="$IFS"
140 local_dir=""
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
149 if [ -z "$local_command" ]; then
150 return 1
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
160 done
161 # not found
162 IFS="${local_ifs:-$(printf ' \t\n')}"
163 return 1
166 have_backend () {
167 echo "$trace_backends" | grep "$1" >/dev/null
170 glob() {
171 eval test -z '"${1#'"$2"'}"'
174 supported_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
181 esac
182 return 1
185 supported_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
198 esac
199 return 1
202 supported_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
210 esac
211 return 1
214 supported_target() {
215 case "$1" in
216 *-softmmu)
218 *-linux-user)
219 if test "$linux" != "yes"; then
220 print_error "Target '$target' is only available on a Linux host"
221 return 1
224 *-bsd-user)
225 if test "$bsd" != "yes"; then
226 print_error "Target '$target' is only available on a BSD host"
227 return 1
231 print_error "Invalid target name '$target'"
232 return 1
234 esac
235 test "$tcg" = "yes" && return 0
236 supported_kvm_target "$1" && return 0
237 supported_xen_target "$1" && return 0
238 supported_hax_target "$1" && return 0
239 print_error "TCG disabled, but hardware accelerator not available for '$target'"
240 return 1
244 ld_has() {
245 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
248 # default parameters
249 source_path=$(dirname "$0")
250 cpu=""
251 iasl="iasl"
252 interp_prefix="/usr/gnemul/qemu-%M"
253 static="no"
254 cross_prefix=""
255 audio_drv_list=""
256 block_drv_rw_whitelist=""
257 block_drv_ro_whitelist=""
258 host_cc="cc"
259 libs_softmmu=""
260 libs_tools=""
261 audio_pt_int=""
262 audio_win_int=""
263 cc_i386=i386-pc-linux-gnu-gcc
264 libs_qga=""
265 debug_info="yes"
266 stack_protector=""
268 # Don't accept a target_list environment variable.
269 unset target_list
271 # Default value for a variable defining feature "foo".
272 # * foo="no" feature will only be used if --enable-foo arg is given
273 # * foo="" feature will be searched for, and if found, will be used
274 # unless --disable-foo is given
275 # * foo="yes" this value will only be set by --enable-foo flag.
276 # feature will searched for,
277 # if not found, configure exits with error
279 # Always add --enable-foo and --disable-foo command line args.
280 # Distributions want to ensure that several features are compiled in, and it
281 # is impossible without a --enable-foo that exits if a feature is not found.
283 bluez=""
284 brlapi=""
285 curl=""
286 curses=""
287 docs=""
288 fdt=""
289 netmap="no"
290 sdl=""
291 sdlabi=""
292 virtfs=""
293 mpath=""
294 vnc="yes"
295 sparse="no"
296 vde=""
297 vnc_sasl=""
298 vnc_jpeg=""
299 vnc_png=""
300 xen=""
301 xen_ctrl_version=""
302 xen_pv_domain_build="no"
303 xen_pci_passthrough=""
304 linux_aio=""
305 cap_ng=""
306 attr=""
307 libattr=""
308 xfs=""
309 tcg="yes"
311 vhost_net="no"
312 vhost_scsi="no"
313 vhost_vsock="no"
314 vhost_user=""
315 kvm="no"
316 hax="no"
317 rdma=""
318 gprof="no"
319 debug_tcg="no"
320 debug="no"
321 fortify_source=""
322 strip_opt="yes"
323 tcg_interpreter="no"
324 bigendian="no"
325 mingw32="no"
326 gcov="no"
327 gcov_tool="gcov"
328 EXESUF=""
329 DSOSUF=".so"
330 LDFLAGS_SHARED="-shared"
331 modules="no"
332 prefix="/usr/local"
333 mandir="\${prefix}/share/man"
334 datadir="\${prefix}/share"
335 firmwarepath="\${prefix}/share/qemu-firmware"
336 qemu_docdir="\${prefix}/share/doc/qemu"
337 bindir="\${prefix}/bin"
338 libdir="\${prefix}/lib"
339 libexecdir="\${prefix}/libexec"
340 includedir="\${prefix}/include"
341 sysconfdir="\${prefix}/etc"
342 local_statedir="\${prefix}/var"
343 confsuffix="/qemu"
344 slirp="yes"
345 oss_lib=""
346 bsd="no"
347 linux="no"
348 solaris="no"
349 profiler="no"
350 cocoa="no"
351 softmmu="yes"
352 linux_user="no"
353 bsd_user="no"
354 blobs="yes"
355 pkgversion=""
356 pie=""
357 qom_cast_debug="yes"
358 trace_backends="log"
359 trace_file="trace"
360 spice=""
361 rbd=""
362 smartcard=""
363 libusb=""
364 usb_redir=""
365 opengl=""
366 opengl_dmabuf="no"
367 cpuid_h="no"
368 avx2_opt="no"
369 zlib="yes"
370 lzo=""
371 snappy=""
372 bzip2=""
373 guest_agent=""
374 guest_agent_with_vss="no"
375 guest_agent_ntddscsi="no"
376 guest_agent_msi=""
377 vss_win32_sdk=""
378 win_sdk="no"
379 want_tools="yes"
380 libiscsi=""
381 libnfs=""
382 coroutine=""
383 coroutine_pool=""
384 debug_stack_usage="no"
385 crypto_afalg="no"
386 seccomp=""
387 glusterfs=""
388 glusterfs_xlator_opt="no"
389 glusterfs_discard="no"
390 glusterfs_fallocate="no"
391 glusterfs_zerofill="no"
392 gtk=""
393 gtkabi=""
394 gtk_gl="no"
395 tls_priority="NORMAL"
396 gnutls=""
397 gnutls_rnd=""
398 nettle=""
399 nettle_kdf="no"
400 gcrypt=""
401 gcrypt_hmac="no"
402 gcrypt_kdf="no"
403 vte=""
404 virglrenderer=""
405 tpm="yes"
406 libssh2=""
407 live_block_migration="yes"
408 numa=""
409 tcmalloc="no"
410 jemalloc="no"
411 replication="yes"
412 vxhs=""
414 supported_cpu="no"
415 supported_os="no"
416 bogus_os="no"
418 # parse CC options first
419 for opt do
420 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
421 case "$opt" in
422 --cross-prefix=*) cross_prefix="$optarg"
424 --cc=*) CC="$optarg"
426 --cxx=*) CXX="$optarg"
428 --source-path=*) source_path="$optarg"
430 --cpu=*) cpu="$optarg"
432 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
433 EXTRA_CFLAGS="$optarg"
435 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
436 EXTRA_CXXFLAGS="$optarg"
438 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
439 EXTRA_LDFLAGS="$optarg"
441 --enable-debug-info) debug_info="yes"
443 --disable-debug-info) debug_info="no"
445 esac
446 done
447 # OS specific
448 # Using uname is really, really broken. Once we have the right set of checks
449 # we can eliminate its usage altogether.
451 # Preferred compiler:
452 # ${CC} (if set)
453 # ${cross_prefix}gcc (if cross-prefix specified)
454 # system compiler
455 if test -z "${CC}${cross_prefix}"; then
456 cc="$host_cc"
457 else
458 cc="${CC-${cross_prefix}gcc}"
461 if test -z "${CXX}${cross_prefix}"; then
462 cxx="c++"
463 else
464 cxx="${CXX-${cross_prefix}g++}"
467 ar="${AR-${cross_prefix}ar}"
468 as="${AS-${cross_prefix}as}"
469 ccas="${CCAS-$cc}"
470 cpp="${CPP-$cc -E}"
471 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
472 ld="${LD-${cross_prefix}ld}"
473 nm="${NM-${cross_prefix}nm}"
474 strip="${STRIP-${cross_prefix}strip}"
475 windres="${WINDRES-${cross_prefix}windres}"
476 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
477 query_pkg_config() {
478 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
480 pkg_config=query_pkg_config
481 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
482 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
484 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
485 ARFLAGS="${ARFLAGS-rv}"
487 # default flags for all hosts
488 # We use -fwrapv to tell the compiler that we require a C dialect where
489 # left shift of signed integers is well defined and has the expected
490 # 2s-complement style results. (Both clang and gcc agree that it
491 # provides these semantics.)
492 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
493 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
494 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
495 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
496 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/accel/tcg -I\$(SRC_PATH)/include"
497 if test "$debug_info" = "yes"; then
498 CFLAGS="-g $CFLAGS"
499 LDFLAGS="-g $LDFLAGS"
502 # make source path absolute
503 source_path=$(cd "$source_path"; pwd)
505 # running configure in the source tree?
506 # we know that's the case if configure is there.
507 if test -f "./configure"; then
508 pwd_is_source_path="y"
509 else
510 pwd_is_source_path="n"
513 check_define() {
514 cat > $TMPC <<EOF
515 #if !defined($1)
516 #error $1 not defined
517 #endif
518 int main(void) { return 0; }
520 compile_object
523 check_include() {
524 cat > $TMPC <<EOF
525 #include <$1>
526 int main(void) { return 0; }
528 compile_object
531 write_c_skeleton() {
532 cat > $TMPC <<EOF
533 int main(void) { return 0; }
537 if check_define __linux__ ; then
538 targetos="Linux"
539 elif check_define _WIN32 ; then
540 targetos='MINGW32'
541 elif check_define __OpenBSD__ ; then
542 targetos='OpenBSD'
543 elif check_define __sun__ ; then
544 targetos='SunOS'
545 elif check_define __HAIKU__ ; then
546 targetos='Haiku'
547 elif check_define __FreeBSD__ ; then
548 targetos='FreeBSD'
549 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
550 targetos='GNU/kFreeBSD'
551 elif check_define __DragonFly__ ; then
552 targetos='DragonFly'
553 elif check_define __NetBSD__; then
554 targetos='NetBSD'
555 elif check_define __APPLE__; then
556 targetos='Darwin'
557 else
558 # This is a fatal error, but don't report it yet, because we
559 # might be going to just print the --help text, or it might
560 # be the result of a missing compiler.
561 targetos='bogus'
562 bogus_os='yes'
565 # Some host OSes need non-standard checks for which CPU to use.
566 # Note that these checks are broken for cross-compilation: if you're
567 # cross-compiling to one of these OSes then you'll need to specify
568 # the correct CPU with the --cpu option.
569 case $targetos in
570 Darwin)
571 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
572 # run 64-bit userspace code.
573 # If the user didn't specify a CPU explicitly and the kernel says this is
574 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
575 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
576 cpu="x86_64"
579 SunOS)
580 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
581 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
582 cpu="x86_64"
584 esac
586 if test ! -z "$cpu" ; then
587 # command line argument
589 elif check_define __i386__ ; then
590 cpu="i386"
591 elif check_define __x86_64__ ; then
592 if check_define __ILP32__ ; then
593 cpu="x32"
594 else
595 cpu="x86_64"
597 elif check_define __sparc__ ; then
598 if check_define __arch64__ ; then
599 cpu="sparc64"
600 else
601 cpu="sparc"
603 elif check_define _ARCH_PPC ; then
604 if check_define _ARCH_PPC64 ; then
605 cpu="ppc64"
606 else
607 cpu="ppc"
609 elif check_define __mips__ ; then
610 cpu="mips"
611 elif check_define __ia64__ ; then
612 cpu="ia64"
613 elif check_define __s390__ ; then
614 if check_define __s390x__ ; then
615 cpu="s390x"
616 else
617 cpu="s390"
619 elif check_define __arm__ ; then
620 cpu="arm"
621 elif check_define __aarch64__ ; then
622 cpu="aarch64"
623 else
624 cpu=$(uname -m)
627 ARCH=
628 # Normalise host CPU name and set ARCH.
629 # Note that this case should only have supported host CPUs, not guests.
630 case "$cpu" in
631 ppc|ppc64|s390|s390x|sparc64|x32)
632 cpu="$cpu"
633 supported_cpu="yes"
635 i386|i486|i586|i686|i86pc|BePC)
636 cpu="i386"
637 supported_cpu="yes"
639 x86_64|amd64)
640 cpu="x86_64"
641 supported_cpu="yes"
643 armv*b|armv*l|arm)
644 cpu="arm"
645 supported_cpu="yes"
647 aarch64)
648 cpu="aarch64"
649 supported_cpu="yes"
651 mips*)
652 cpu="mips"
653 supported_cpu="yes"
655 sparc|sun4[cdmuv])
656 cpu="sparc"
657 supported_cpu="yes"
660 # This will result in either an error or falling back to TCI later
661 ARCH=unknown
663 esac
664 if test -z "$ARCH"; then
665 ARCH="$cpu"
668 # OS specific
670 # host *BSD for user mode
671 HOST_VARIANT_DIR=""
673 case $targetos in
674 MINGW32*)
675 mingw32="yes"
676 hax="yes"
677 audio_possible_drivers="dsound sdl"
678 if check_include dsound.h; then
679 audio_drv_list="dsound"
680 else
681 audio_drv_list=""
683 supported_os="yes"
685 GNU/kFreeBSD)
686 bsd="yes"
687 audio_drv_list="oss"
688 audio_possible_drivers="oss sdl pa"
690 FreeBSD)
691 bsd="yes"
692 make="${MAKE-gmake}"
693 audio_drv_list="oss"
694 audio_possible_drivers="oss sdl pa"
695 # needed for kinfo_getvmmap(3) in libutil.h
696 LIBS="-lutil $LIBS"
697 # needed for kinfo_getproc
698 libs_qga="-lutil $libs_qga"
699 netmap="" # enable netmap autodetect
700 HOST_VARIANT_DIR="freebsd"
701 supported_os="yes"
703 DragonFly)
704 bsd="yes"
705 make="${MAKE-gmake}"
706 audio_drv_list="oss"
707 audio_possible_drivers="oss sdl pa"
708 HOST_VARIANT_DIR="dragonfly"
710 NetBSD)
711 bsd="yes"
712 make="${MAKE-gmake}"
713 audio_drv_list="oss"
714 audio_possible_drivers="oss sdl"
715 oss_lib="-lossaudio"
716 HOST_VARIANT_DIR="netbsd"
717 supported_os="yes"
719 OpenBSD)
720 bsd="yes"
721 make="${MAKE-gmake}"
722 audio_drv_list="sdl"
723 audio_possible_drivers="sdl"
724 HOST_VARIANT_DIR="openbsd"
726 Darwin)
727 bsd="yes"
728 darwin="yes"
729 hax="yes"
730 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
731 if [ "$cpu" = "x86_64" ] ; then
732 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
733 LDFLAGS="-arch x86_64 $LDFLAGS"
735 cocoa="yes"
736 audio_drv_list="coreaudio"
737 audio_possible_drivers="coreaudio sdl"
738 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
739 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
740 # Disable attempts to use ObjectiveC features in os/object.h since they
741 # won't work when we're compiling with gcc as a C compiler.
742 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
743 HOST_VARIANT_DIR="darwin"
744 supported_os="yes"
746 SunOS)
747 solaris="yes"
748 make="${MAKE-gmake}"
749 install="${INSTALL-ginstall}"
750 smbd="${SMBD-/usr/sfw/sbin/smbd}"
751 if test -f /usr/include/sys/soundcard.h ; then
752 audio_drv_list="oss"
754 audio_possible_drivers="oss sdl"
755 # needed for CMSG_ macros in sys/socket.h
756 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
757 # needed for TIOCWIN* defines in termios.h
758 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
759 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
760 solarisnetlibs="-lsocket -lnsl -lresolv"
761 LIBS="$solarisnetlibs $LIBS"
762 libs_qga="$solarisnetlibs $libs_qga"
764 Haiku)
765 haiku="yes"
766 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
767 LIBS="-lposix_error_mapper -lnetwork $LIBS"
769 Linux)
770 audio_drv_list="oss"
771 audio_possible_drivers="oss alsa sdl pa"
772 linux="yes"
773 linux_user="yes"
774 kvm="yes"
775 vhost_net="yes"
776 vhost_scsi="yes"
777 vhost_vsock="yes"
778 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
779 supported_os="yes"
781 esac
783 if [ "$bsd" = "yes" ] ; then
784 if [ "$darwin" != "yes" ] ; then
785 bsd_user="yes"
789 : ${make=${MAKE-make}}
790 : ${install=${INSTALL-install}}
791 : ${python=${PYTHON-python}}
792 : ${smbd=${SMBD-/usr/sbin/smbd}}
794 # Default objcc to clang if available, otherwise use CC
795 if has clang; then
796 objcc=clang
797 else
798 objcc="$cc"
801 if test "$mingw32" = "yes" ; then
802 EXESUF=".exe"
803 DSOSUF=".dll"
804 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
805 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
806 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
807 # MinGW needs -mthreads for TLS and macro _MT.
808 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
809 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
810 write_c_skeleton;
811 if compile_prog "" "-liberty" ; then
812 LIBS="-liberty $LIBS"
814 prefix="c:/Program Files/QEMU"
815 mandir="\${prefix}"
816 datadir="\${prefix}"
817 qemu_docdir="\${prefix}"
818 bindir="\${prefix}"
819 sysconfdir="\${prefix}"
820 local_statedir=
821 confsuffix=""
822 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -liphlpapi -lnetapi32 $libs_qga"
825 werror=""
827 for opt do
828 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
829 case "$opt" in
830 --help|-h) show_help=yes
832 --version|-V) exec cat $source_path/VERSION
834 --prefix=*) prefix="$optarg"
836 --interp-prefix=*) interp_prefix="$optarg"
838 --source-path=*)
840 --cross-prefix=*)
842 --cc=*)
844 --host-cc=*) host_cc="$optarg"
846 --cxx=*)
848 --iasl=*) iasl="$optarg"
850 --objcc=*) objcc="$optarg"
852 --make=*) make="$optarg"
854 --install=*) install="$optarg"
856 --python=*) python="$optarg"
858 --gcov=*) gcov_tool="$optarg"
860 --smbd=*) smbd="$optarg"
862 --extra-cflags=*)
864 --extra-cxxflags=*)
866 --extra-ldflags=*)
868 --enable-debug-info)
870 --disable-debug-info)
872 --enable-modules)
873 modules="yes"
875 --disable-modules)
876 modules="no"
878 --cpu=*)
880 --target-list=*) target_list="$optarg"
882 --enable-trace-backends=*) trace_backends="$optarg"
884 # XXX: backwards compatibility
885 --enable-trace-backend=*) trace_backends="$optarg"
887 --with-trace-file=*) trace_file="$optarg"
889 --enable-gprof) gprof="yes"
891 --enable-gcov) gcov="yes"
893 --static)
894 static="yes"
895 LDFLAGS="-static $LDFLAGS"
896 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
898 --mandir=*) mandir="$optarg"
900 --bindir=*) bindir="$optarg"
902 --libdir=*) libdir="$optarg"
904 --libexecdir=*) libexecdir="$optarg"
906 --includedir=*) includedir="$optarg"
908 --datadir=*) datadir="$optarg"
910 --with-confsuffix=*) confsuffix="$optarg"
912 --docdir=*) qemu_docdir="$optarg"
914 --sysconfdir=*) sysconfdir="$optarg"
916 --localstatedir=*) local_statedir="$optarg"
918 --firmwarepath=*) firmwarepath="$optarg"
920 --sbindir=*|--sharedstatedir=*|\
921 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
922 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
923 # These switches are silently ignored, for compatibility with
924 # autoconf-generated configure scripts. This allows QEMU's
925 # configure to be used by RPM and similar macros that set
926 # lots of directory switches by default.
928 --disable-sdl) sdl="no"
930 --enable-sdl) sdl="yes"
932 --with-sdlabi=*) sdlabi="$optarg"
934 --disable-qom-cast-debug) qom_cast_debug="no"
936 --enable-qom-cast-debug) qom_cast_debug="yes"
938 --disable-virtfs) virtfs="no"
940 --enable-virtfs) virtfs="yes"
942 --disable-mpath) mpath="no"
944 --enable-mpath) mpath="yes"
946 --disable-vnc) vnc="no"
948 --enable-vnc) vnc="yes"
950 --oss-lib=*) oss_lib="$optarg"
952 --audio-drv-list=*) audio_drv_list="$optarg"
954 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
956 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
958 --enable-debug-tcg) debug_tcg="yes"
960 --disable-debug-tcg) debug_tcg="no"
962 --enable-debug)
963 # Enable debugging options that aren't excessively noisy
964 debug_tcg="yes"
965 debug="yes"
966 strip_opt="no"
967 fortify_source="no"
969 --enable-sparse) sparse="yes"
971 --disable-sparse) sparse="no"
973 --disable-strip) strip_opt="no"
975 --disable-vnc-sasl) vnc_sasl="no"
977 --enable-vnc-sasl) vnc_sasl="yes"
979 --disable-vnc-jpeg) vnc_jpeg="no"
981 --enable-vnc-jpeg) vnc_jpeg="yes"
983 --disable-vnc-png) vnc_png="no"
985 --enable-vnc-png) vnc_png="yes"
987 --disable-slirp) slirp="no"
989 --disable-vde) vde="no"
991 --enable-vde) vde="yes"
993 --disable-netmap) netmap="no"
995 --enable-netmap) netmap="yes"
997 --disable-xen) xen="no"
999 --enable-xen) xen="yes"
1001 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1003 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1005 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1007 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1009 --disable-brlapi) brlapi="no"
1011 --enable-brlapi) brlapi="yes"
1013 --disable-bluez) bluez="no"
1015 --enable-bluez) bluez="yes"
1017 --disable-kvm) kvm="no"
1019 --enable-kvm) kvm="yes"
1021 --disable-hax) hax="no"
1023 --enable-hax) hax="yes"
1025 --disable-tcg-interpreter) tcg_interpreter="no"
1027 --enable-tcg-interpreter) tcg_interpreter="yes"
1029 --disable-cap-ng) cap_ng="no"
1031 --enable-cap-ng) cap_ng="yes"
1033 --disable-tcg) tcg="no"
1035 --enable-tcg) tcg="yes"
1037 --disable-spice) spice="no"
1039 --enable-spice) spice="yes"
1041 --disable-libiscsi) libiscsi="no"
1043 --enable-libiscsi) libiscsi="yes"
1045 --disable-libnfs) libnfs="no"
1047 --enable-libnfs) libnfs="yes"
1049 --enable-profiler) profiler="yes"
1051 --disable-cocoa) cocoa="no"
1053 --enable-cocoa)
1054 cocoa="yes" ;
1055 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1057 --disable-system) softmmu="no"
1059 --enable-system) softmmu="yes"
1061 --disable-user)
1062 linux_user="no" ;
1063 bsd_user="no" ;
1065 --enable-user) ;;
1066 --disable-linux-user) linux_user="no"
1068 --enable-linux-user) linux_user="yes"
1070 --disable-bsd-user) bsd_user="no"
1072 --enable-bsd-user) bsd_user="yes"
1074 --enable-pie) pie="yes"
1076 --disable-pie) pie="no"
1078 --enable-werror) werror="yes"
1080 --disable-werror) werror="no"
1082 --enable-stack-protector) stack_protector="yes"
1084 --disable-stack-protector) stack_protector="no"
1086 --disable-curses) curses="no"
1088 --enable-curses) curses="yes"
1090 --disable-curl) curl="no"
1092 --enable-curl) curl="yes"
1094 --disable-fdt) fdt="no"
1096 --enable-fdt) fdt="yes"
1098 --disable-linux-aio) linux_aio="no"
1100 --enable-linux-aio) linux_aio="yes"
1102 --disable-attr) attr="no"
1104 --enable-attr) attr="yes"
1106 --disable-blobs) blobs="no"
1108 --with-pkgversion=*) pkgversion=" ($optarg)"
1110 --with-coroutine=*) coroutine="$optarg"
1112 --disable-coroutine-pool) coroutine_pool="no"
1114 --enable-coroutine-pool) coroutine_pool="yes"
1116 --enable-debug-stack-usage) debug_stack_usage="yes"
1118 --enable-crypto-afalg) crypto_afalg="yes"
1120 --disable-crypto-afalg) crypto_afalg="no"
1122 --disable-docs) docs="no"
1124 --enable-docs) docs="yes"
1126 --disable-vhost-net) vhost_net="no"
1128 --enable-vhost-net) vhost_net="yes"
1130 --disable-vhost-scsi) vhost_scsi="no"
1132 --enable-vhost-scsi) vhost_scsi="yes"
1134 --disable-vhost-vsock) vhost_vsock="no"
1136 --enable-vhost-vsock) vhost_vsock="yes"
1138 --disable-opengl) opengl="no"
1140 --enable-opengl) opengl="yes"
1142 --disable-rbd) rbd="no"
1144 --enable-rbd) rbd="yes"
1146 --disable-xfsctl) xfs="no"
1148 --enable-xfsctl) xfs="yes"
1150 --disable-smartcard) smartcard="no"
1152 --enable-smartcard) smartcard="yes"
1154 --disable-libusb) libusb="no"
1156 --enable-libusb) libusb="yes"
1158 --disable-usb-redir) usb_redir="no"
1160 --enable-usb-redir) usb_redir="yes"
1162 --disable-zlib-test) zlib="no"
1164 --disable-lzo) lzo="no"
1166 --enable-lzo) lzo="yes"
1168 --disable-snappy) snappy="no"
1170 --enable-snappy) snappy="yes"
1172 --disable-bzip2) bzip2="no"
1174 --enable-bzip2) bzip2="yes"
1176 --enable-guest-agent) guest_agent="yes"
1178 --disable-guest-agent) guest_agent="no"
1180 --enable-guest-agent-msi) guest_agent_msi="yes"
1182 --disable-guest-agent-msi) guest_agent_msi="no"
1184 --with-vss-sdk) vss_win32_sdk=""
1186 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1188 --without-vss-sdk) vss_win32_sdk="no"
1190 --with-win-sdk) win_sdk=""
1192 --with-win-sdk=*) win_sdk="$optarg"
1194 --without-win-sdk) win_sdk="no"
1196 --enable-tools) want_tools="yes"
1198 --disable-tools) want_tools="no"
1200 --enable-seccomp) seccomp="yes"
1202 --disable-seccomp) seccomp="no"
1204 --disable-glusterfs) glusterfs="no"
1206 --enable-glusterfs) glusterfs="yes"
1208 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1209 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1211 --enable-vhdx|--disable-vhdx)
1212 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1214 --enable-uuid|--disable-uuid)
1215 echo "$0: $opt is obsolete, UUID support is always built" >&2
1217 --disable-gtk) gtk="no"
1219 --enable-gtk) gtk="yes"
1221 --tls-priority=*) tls_priority="$optarg"
1223 --disable-gnutls) gnutls="no"
1225 --enable-gnutls) gnutls="yes"
1227 --disable-nettle) nettle="no"
1229 --enable-nettle) nettle="yes"
1231 --disable-gcrypt) gcrypt="no"
1233 --enable-gcrypt) gcrypt="yes"
1235 --enable-rdma) rdma="yes"
1237 --disable-rdma) rdma="no"
1239 --with-gtkabi=*) gtkabi="$optarg"
1241 --disable-vte) vte="no"
1243 --enable-vte) vte="yes"
1245 --disable-virglrenderer) virglrenderer="no"
1247 --enable-virglrenderer) virglrenderer="yes"
1249 --disable-tpm) tpm="no"
1251 --enable-tpm) tpm="yes"
1253 --disable-libssh2) libssh2="no"
1255 --enable-libssh2) libssh2="yes"
1257 --disable-live-block-migration) live_block_migration="no"
1259 --enable-live-block-migration) live_block_migration="yes"
1261 --disable-numa) numa="no"
1263 --enable-numa) numa="yes"
1265 --disable-tcmalloc) tcmalloc="no"
1267 --enable-tcmalloc) tcmalloc="yes"
1269 --disable-jemalloc) jemalloc="no"
1271 --enable-jemalloc) jemalloc="yes"
1273 --disable-replication) replication="no"
1275 --enable-replication) replication="yes"
1277 --disable-vxhs) vxhs="no"
1279 --enable-vxhs) vxhs="yes"
1281 --disable-vhost-user) vhost_user="no"
1283 --enable-vhost-user)
1284 vhost_user="yes"
1285 if test "$mingw32" = "yes"; then
1286 error_exit "vhost-user isn't available on win32"
1290 echo "ERROR: unknown option $opt"
1291 echo "Try '$0 --help' for more information"
1292 exit 1
1294 esac
1295 done
1297 if test "$vhost_user" = ""; then
1298 if test "$mingw32" = "yes"; then
1299 vhost_user="no"
1300 else
1301 vhost_user="yes"
1305 case "$cpu" in
1306 ppc)
1307 CPU_CFLAGS="-m32"
1308 LDFLAGS="-m32 $LDFLAGS"
1310 ppc64)
1311 CPU_CFLAGS="-m64"
1312 LDFLAGS="-m64 $LDFLAGS"
1314 sparc)
1315 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1316 LDFLAGS="-m32 -mv8plus $LDFLAGS"
1318 sparc64)
1319 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1320 LDFLAGS="-m64 $LDFLAGS"
1322 s390)
1323 CPU_CFLAGS="-m31"
1324 LDFLAGS="-m31 $LDFLAGS"
1326 s390x)
1327 CPU_CFLAGS="-m64"
1328 LDFLAGS="-m64 $LDFLAGS"
1330 i386)
1331 CPU_CFLAGS="-m32"
1332 LDFLAGS="-m32 $LDFLAGS"
1333 cc_i386='$(CC) -m32'
1335 x86_64)
1336 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1337 # If we truly care, we should simply detect this case at
1338 # runtime and generate the fallback to serial emulation.
1339 CPU_CFLAGS="-m64 -mcx16"
1340 LDFLAGS="-m64 $LDFLAGS"
1341 cc_i386='$(CC) -m32'
1343 x32)
1344 CPU_CFLAGS="-mx32"
1345 LDFLAGS="-mx32 $LDFLAGS"
1346 cc_i386='$(CC) -m32'
1348 # No special flags required for other host CPUs
1349 esac
1351 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1352 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1354 # For user-mode emulation the host arch has to be one we explicitly
1355 # support, even if we're using TCI.
1356 if [ "$ARCH" = "unknown" ]; then
1357 bsd_user="no"
1358 linux_user="no"
1361 default_target_list=""
1363 mak_wilds=""
1365 if [ "$softmmu" = "yes" ]; then
1366 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1368 if [ "$linux_user" = "yes" ]; then
1369 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1371 if [ "$bsd_user" = "yes" ]; then
1372 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1375 for config in $mak_wilds; do
1376 default_target_list="${default_target_list} $(basename "$config" .mak)"
1377 done
1379 # Enumerate public trace backends for --help output
1380 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1382 if test x"$show_help" = x"yes" ; then
1383 cat << EOF
1385 Usage: configure [options]
1386 Options: [defaults in brackets after descriptions]
1388 Standard options:
1389 --help print this message
1390 --prefix=PREFIX install in PREFIX [$prefix]
1391 --interp-prefix=PREFIX where to find shared libraries, etc.
1392 use %M for cpu name [$interp_prefix]
1393 --target-list=LIST set target list (default: build everything)
1394 $(echo Available targets: $default_target_list | \
1395 fold -s -w 53 | sed -e 's/^/ /')
1397 Advanced options (experts only):
1398 --source-path=PATH path of source code [$source_path]
1399 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1400 --cc=CC use C compiler CC [$cc]
1401 --iasl=IASL use ACPI compiler IASL [$iasl]
1402 --host-cc=CC use C compiler CC [$host_cc] for code run at
1403 build time
1404 --cxx=CXX use C++ compiler CXX [$cxx]
1405 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1406 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1407 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1408 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1409 --make=MAKE use specified make [$make]
1410 --install=INSTALL use specified install [$install]
1411 --python=PYTHON use specified python [$python]
1412 --smbd=SMBD use specified smbd [$smbd]
1413 --static enable static build [$static]
1414 --mandir=PATH install man pages in PATH
1415 --datadir=PATH install firmware in PATH$confsuffix
1416 --docdir=PATH install documentation in PATH$confsuffix
1417 --bindir=PATH install binaries in PATH
1418 --libdir=PATH install libraries in PATH
1419 --sysconfdir=PATH install config in PATH$confsuffix
1420 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1421 --firmwarepath=PATH search PATH for firmware files
1422 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1423 --enable-debug enable common debug build options
1424 --disable-strip disable stripping binaries
1425 --disable-werror disable compilation abort on warning
1426 --disable-stack-protector disable compiler-provided stack protection
1427 --audio-drv-list=LIST set audio drivers list:
1428 Available drivers: $audio_possible_drivers
1429 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1430 --block-drv-rw-whitelist=L
1431 set block driver read-write whitelist
1432 (affects only QEMU, not qemu-img)
1433 --block-drv-ro-whitelist=L
1434 set block driver read-only whitelist
1435 (affects only QEMU, not qemu-img)
1436 --enable-trace-backends=B Set trace backend
1437 Available backends: $trace_backend_list
1438 --with-trace-file=NAME Full PATH,NAME of file to store traces
1439 Default:trace-<pid>
1440 --disable-slirp disable SLIRP userspace network connectivity
1441 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1442 --oss-lib path to OSS library
1443 --cpu=CPU Build for host CPU [$cpu]
1444 --with-coroutine=BACKEND coroutine backend. Supported options:
1445 ucontext, sigaltstack, windows
1446 --enable-gcov enable test coverage analysis with gcov
1447 --gcov=GCOV use specified gcov [$gcov_tool]
1448 --disable-blobs disable installing provided firmware blobs
1449 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1450 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1451 --tls-priority default TLS protocol/cipher priority string
1452 --enable-gprof QEMU profiling with gprof
1453 --enable-profiler profiler support
1454 --enable-xen-pv-domain-build
1455 xen pv domain builder
1456 --enable-debug-stack-usage
1457 track the maximum stack usage of stacks created by qemu_alloc_stack
1459 Optional features, enabled with --enable-FEATURE and
1460 disabled with --disable-FEATURE, default is enabled if available:
1462 system all system emulation targets
1463 user supported user emulation targets
1464 linux-user all linux usermode emulation targets
1465 bsd-user all BSD usermode emulation targets
1466 docs build documentation
1467 guest-agent build the QEMU Guest Agent
1468 guest-agent-msi build guest agent Windows MSI installation package
1469 pie Position Independent Executables
1470 modules modules support
1471 debug-tcg TCG debugging (default is disabled)
1472 debug-info debugging information
1473 sparse sparse checker
1475 gnutls GNUTLS cryptography support
1476 nettle nettle cryptography support
1477 gcrypt libgcrypt cryptography support
1478 sdl SDL UI
1479 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1480 gtk gtk UI
1481 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1482 vte vte support for the gtk UI
1483 curses curses UI
1484 vnc VNC UI support
1485 vnc-sasl SASL encryption for VNC server
1486 vnc-jpeg JPEG lossy compression for VNC server
1487 vnc-png PNG compression for VNC server
1488 cocoa Cocoa UI (Mac OS X only)
1489 virtfs VirtFS
1490 mpath Multipath persistent reservation passthrough
1491 xen xen backend driver support
1492 xen-pci-passthrough
1493 brlapi BrlAPI (Braile)
1494 curl curl connectivity
1495 fdt fdt device tree
1496 bluez bluez stack connectivity
1497 kvm KVM acceleration support
1498 hax HAX acceleration support
1499 rdma RDMA-based migration support
1500 vde support for vde network
1501 netmap support for netmap network
1502 linux-aio Linux AIO support
1503 cap-ng libcap-ng support
1504 attr attr and xattr support
1505 vhost-net vhost-net acceleration support
1506 spice spice
1507 rbd rados block device (rbd)
1508 libiscsi iscsi support
1509 libnfs nfs support
1510 smartcard smartcard support (libcacard)
1511 libusb libusb (for usb passthrough)
1512 live-block-migration Block migration in the main migration stream
1513 usb-redir usb network redirection support
1514 lzo support of lzo compression library
1515 snappy support of snappy compression library
1516 bzip2 support of bzip2 compression library
1517 (for reading bzip2-compressed dmg images)
1518 seccomp seccomp support
1519 coroutine-pool coroutine freelist (better performance)
1520 glusterfs GlusterFS backend
1521 tpm TPM support
1522 libssh2 ssh block device support
1523 numa libnuma support
1524 tcmalloc tcmalloc support
1525 jemalloc jemalloc support
1526 replication replication support
1527 vhost-vsock virtio sockets device support
1528 opengl opengl support
1529 virglrenderer virgl rendering support
1530 xfsctl xfsctl support
1531 qom-cast-debug cast debugging support
1532 tools build qemu-io, qemu-nbd and qemu-image tools
1533 vxhs Veritas HyperScale vDisk backend support
1534 crypto-afalg Linux AF_ALG crypto backend driver
1535 vhost-user vhost-user support
1537 NOTE: The object files are built at the place where configure is launched
1539 exit 0
1542 if ! has $python; then
1543 error_exit "Python not found. Use --python=/path/to/python"
1546 # Note that if the Python conditional here evaluates True we will exit
1547 # with status 1 which is a shell 'false' value.
1548 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1549 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1550 "Note that Python 3 or later is not yet supported." \
1551 "Use --python=/path/to/python to specify a supported Python."
1554 # Suppress writing compiled files
1555 python="$python -B"
1557 # Now we have handled --enable-tcg-interpreter and know we're not just
1558 # printing the help message, bail out if the host CPU isn't supported.
1559 if test "$ARCH" = "unknown"; then
1560 if test "$tcg_interpreter" = "yes" ; then
1561 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1562 else
1563 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1567 # Consult white-list to determine whether to enable werror
1568 # by default. Only enable by default for git builds
1569 if test -z "$werror" ; then
1570 if test -d "$source_path/.git" -a \
1571 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1572 werror="yes"
1573 else
1574 werror="no"
1578 # check that the C compiler works.
1579 write_c_skeleton;
1580 if compile_object ; then
1581 : C compiler works ok
1582 else
1583 error_exit "\"$cc\" either does not exist or does not work"
1585 if ! compile_prog ; then
1586 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1589 if test "$bogus_os" = "yes"; then
1590 # Now that we know that we're not printing the help and that
1591 # the compiler works (so the results of the check_defines we used
1592 # to identify the OS are reliable), if we didn't recognize the
1593 # host OS we should stop now.
1594 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1597 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1598 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1599 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1600 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1601 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1602 gcc_flags="-Wno-string-plus-int $gcc_flags"
1603 # Note that we do not add -Werror to gcc_flags here, because that would
1604 # enable it for all configure tests. If a configure test failed due
1605 # to -Werror this would just silently disable some features,
1606 # so it's too error prone.
1608 cc_has_warning_flag() {
1609 write_c_skeleton;
1611 # Use the positive sense of the flag when testing for -Wno-wombat
1612 # support (gcc will happily accept the -Wno- form of unknown
1613 # warning options).
1614 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1615 compile_prog "-Werror $optflag" ""
1618 for flag in $gcc_flags; do
1619 if cc_has_warning_flag $flag ; then
1620 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1622 done
1624 if test "$stack_protector" != "no"; then
1625 cat > $TMPC << EOF
1626 int main(int argc, char *argv[])
1628 char arr[64], *p = arr, *c = argv[0];
1629 while (*c) {
1630 *p++ = *c++;
1632 return 0;
1635 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1636 sp_on=0
1637 for flag in $gcc_flags; do
1638 # We need to check both a compile and a link, since some compiler
1639 # setups fail only on a .c->.o compile and some only at link time
1640 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1641 compile_prog "-Werror $flag" ""; then
1642 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1643 sp_on=1
1644 break
1646 done
1647 if test "$stack_protector" = yes; then
1648 if test $sp_on = 0; then
1649 error_exit "Stack protector not supported"
1654 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1655 # large functions that use global variables. The bug is in all releases of
1656 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1657 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1658 cat > $TMPC << EOF
1659 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1660 int main(void) { return 0; }
1661 #else
1662 #error No bug in this compiler.
1663 #endif
1665 if compile_prog "-Werror -fno-gcse" "" ; then
1666 TRANSLATE_OPT_CFLAGS=-fno-gcse
1669 if test "$static" = "yes" ; then
1670 if test "$modules" = "yes" ; then
1671 error_exit "static and modules are mutually incompatible"
1673 if test "$pie" = "yes" ; then
1674 error_exit "static and pie are mutually incompatible"
1675 else
1676 pie="no"
1680 # Unconditional check for compiler __thread support
1681 cat > $TMPC << EOF
1682 static __thread int tls_var;
1683 int main(void) { return tls_var; }
1686 if ! compile_prog "-Werror" "" ; then
1687 error_exit "Your compiler does not support the __thread specifier for " \
1688 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1691 if test "$pie" = ""; then
1692 case "$cpu-$targetos" in
1693 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1696 pie="no"
1698 esac
1701 if test "$pie" != "no" ; then
1702 cat > $TMPC << EOF
1704 #ifdef __linux__
1705 # define THREAD __thread
1706 #else
1707 # define THREAD
1708 #endif
1710 static THREAD int tls_var;
1712 int main(void) { return tls_var; }
1715 if compile_prog "-fPIE -DPIE" "-pie"; then
1716 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1717 LDFLAGS="-pie $LDFLAGS"
1718 pie="yes"
1719 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1720 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1722 else
1723 if test "$pie" = "yes"; then
1724 error_exit "PIE not available due to missing toolchain support"
1725 else
1726 echo "Disabling PIE due to missing toolchain support"
1727 pie="no"
1731 if compile_prog "-Werror -fno-pie" "-nopie"; then
1732 CFLAGS_NOPIE="-fno-pie"
1733 LDFLAGS_NOPIE="-nopie"
1737 ##########################################
1738 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1739 # use i686 as default anyway, but for those that don't, an explicit
1740 # specification is necessary
1742 if test "$cpu" = "i386"; then
1743 cat > $TMPC << EOF
1744 static int sfaa(int *ptr)
1746 return __sync_fetch_and_and(ptr, 0);
1749 int main(void)
1751 int val = 42;
1752 val = __sync_val_compare_and_swap(&val, 0, 1);
1753 sfaa(&val);
1754 return val;
1757 if ! compile_prog "" "" ; then
1758 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1762 #########################################
1763 # Solaris specific configure tool chain decisions
1765 if test "$solaris" = "yes" ; then
1766 if has $install; then
1768 else
1769 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1770 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1771 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1773 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1774 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1775 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1776 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1778 if has ar; then
1780 else
1781 if test -f /usr/ccs/bin/ar ; then
1782 error_exit "No path includes ar" \
1783 "Add /usr/ccs/bin to your path and rerun configure"
1785 error_exit "No path includes ar"
1789 if test -z "${target_list+xxx}" ; then
1790 for target in $default_target_list; do
1791 supported_target $target 2>/dev/null && \
1792 target_list="$target_list $target"
1793 done
1794 target_list="${target_list# }"
1795 else
1796 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1797 for target in $target_list; do
1798 # Check that we recognised the target name; this allows a more
1799 # friendly error message than if we let it fall through.
1800 case " $default_target_list " in
1801 *" $target "*)
1804 error_exit "Unknown target name '$target'"
1806 esac
1807 supported_target $target || exit 1
1808 done
1811 # see if system emulation was really requested
1812 case " $target_list " in
1813 *"-softmmu "*) softmmu=yes
1815 *) softmmu=no
1817 esac
1819 feature_not_found() {
1820 feature=$1
1821 remedy=$2
1823 error_exit "User requested feature $feature" \
1824 "configure was not able to find it." \
1825 "$remedy"
1828 # ---
1829 # big/little endian test
1830 cat > $TMPC << EOF
1831 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1832 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1833 extern int foo(short *, short *);
1834 int main(int argc, char *argv[]) {
1835 return foo(big_endian, little_endian);
1839 if compile_object ; then
1840 if grep -q BiGeNdIaN $TMPO ; then
1841 bigendian="yes"
1842 elif grep -q LiTtLeEnDiAn $TMPO ; then
1843 bigendian="no"
1844 else
1845 echo big/little test failed
1847 else
1848 echo big/little test failed
1851 ##########################################
1852 # cocoa implies not SDL or GTK
1853 # (the cocoa UI code currently assumes it is always the active UI
1854 # and doesn't interact well with other UI frontend code)
1855 if test "$cocoa" = "yes"; then
1856 if test "$sdl" = "yes"; then
1857 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1859 if test "$gtk" = "yes"; then
1860 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1862 gtk=no
1863 sdl=no
1866 # Some versions of Mac OS X incorrectly define SIZE_MAX
1867 cat > $TMPC << EOF
1868 #include <stdint.h>
1869 #include <stdio.h>
1870 int main(int argc, char *argv[]) {
1871 return printf("%zu", SIZE_MAX);
1874 have_broken_size_max=no
1875 if ! compile_object -Werror ; then
1876 have_broken_size_max=yes
1879 ##########################################
1880 # L2TPV3 probe
1882 cat > $TMPC <<EOF
1883 #include <sys/socket.h>
1884 #include <linux/ip.h>
1885 int main(void) { return sizeof(struct mmsghdr); }
1887 if compile_prog "" "" ; then
1888 l2tpv3=yes
1889 else
1890 l2tpv3=no
1893 ##########################################
1894 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1896 if test "$mingw32" = "yes"; then
1897 # Some versions of MinGW / Mingw-w64 lack localtime_r
1898 # and gmtime_r entirely.
1900 # Some versions of Mingw-w64 define a macro for
1901 # localtime_r/gmtime_r.
1903 # Some versions of Mingw-w64 will define functions
1904 # for localtime_r/gmtime_r, but only if you have
1905 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1906 # though, unistd.h and pthread.h both define
1907 # that for you.
1909 # So this #undef localtime_r and #include <unistd.h>
1910 # are not in fact redundant.
1911 cat > $TMPC << EOF
1912 #include <unistd.h>
1913 #include <time.h>
1914 #undef localtime_r
1915 int main(void) { localtime_r(NULL, NULL); return 0; }
1917 if compile_prog "" "" ; then
1918 localtime_r="yes"
1919 else
1920 localtime_r="no"
1924 ##########################################
1925 # pkg-config probe
1927 if ! has "$pkg_config_exe"; then
1928 error_exit "pkg-config binary '$pkg_config_exe' not found"
1931 ##########################################
1932 # NPTL probe
1934 if test "$linux_user" = "yes"; then
1935 cat > $TMPC <<EOF
1936 #include <sched.h>
1937 #include <linux/futex.h>
1938 int main(void) {
1939 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1940 #error bork
1941 #endif
1942 return 0;
1945 if ! compile_object ; then
1946 feature_not_found "nptl" "Install glibc and linux kernel headers."
1950 #########################################
1951 # zlib check
1953 if test "$zlib" != "no" ; then
1954 cat > $TMPC << EOF
1955 #include <zlib.h>
1956 int main(void) { zlibVersion(); return 0; }
1958 if compile_prog "" "-lz" ; then
1960 else
1961 error_exit "zlib check failed" \
1962 "Make sure to have the zlib libs and headers installed."
1965 LIBS="$LIBS -lz"
1967 ##########################################
1968 # lzo check
1970 if test "$lzo" != "no" ; then
1971 cat > $TMPC << EOF
1972 #include <lzo/lzo1x.h>
1973 int main(void) { lzo_version(); return 0; }
1975 if compile_prog "" "-llzo2" ; then
1976 libs_softmmu="$libs_softmmu -llzo2"
1977 lzo="yes"
1978 else
1979 if test "$lzo" = "yes"; then
1980 feature_not_found "liblzo2" "Install liblzo2 devel"
1982 lzo="no"
1986 ##########################################
1987 # snappy check
1989 if test "$snappy" != "no" ; then
1990 cat > $TMPC << EOF
1991 #include <snappy-c.h>
1992 int main(void) { snappy_max_compressed_length(4096); return 0; }
1994 if compile_prog "" "-lsnappy" ; then
1995 libs_softmmu="$libs_softmmu -lsnappy"
1996 snappy="yes"
1997 else
1998 if test "$snappy" = "yes"; then
1999 feature_not_found "libsnappy" "Install libsnappy devel"
2001 snappy="no"
2005 ##########################################
2006 # bzip2 check
2008 if test "$bzip2" != "no" ; then
2009 cat > $TMPC << EOF
2010 #include <bzlib.h>
2011 int main(void) { BZ2_bzlibVersion(); return 0; }
2013 if compile_prog "" "-lbz2" ; then
2014 bzip2="yes"
2015 else
2016 if test "$bzip2" = "yes"; then
2017 feature_not_found "libbzip2" "Install libbzip2 devel"
2019 bzip2="no"
2023 ##########################################
2024 # libseccomp check
2026 if test "$seccomp" != "no" ; then
2027 case "$cpu" in
2028 i386|x86_64)
2029 libseccomp_minver="2.1.0"
2031 mips)
2032 libseccomp_minver="2.2.0"
2034 arm|aarch64)
2035 libseccomp_minver="2.2.3"
2037 ppc|ppc64|s390x)
2038 libseccomp_minver="2.3.0"
2041 libseccomp_minver=""
2043 esac
2045 if test "$libseccomp_minver" != "" &&
2046 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2047 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2048 seccomp_libs="$($pkg_config --libs libseccomp)"
2049 seccomp="yes"
2050 else
2051 if test "$seccomp" = "yes" ; then
2052 if test "$libseccomp_minver" != "" ; then
2053 feature_not_found "libseccomp" \
2054 "Install libseccomp devel >= $libseccomp_minver"
2055 else
2056 feature_not_found "libseccomp" \
2057 "libseccomp is not supported for host cpu $cpu"
2060 seccomp="no"
2063 ##########################################
2064 # xen probe
2066 if test "$xen" != "no" ; then
2067 # Check whether Xen library path is specified via --extra-ldflags to avoid
2068 # overriding this setting with pkg-config output. If not, try pkg-config
2069 # to obtain all needed flags.
2071 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2072 $pkg_config --exists xencontrol ; then
2073 xen_ctrl_version="$(printf '%d%02d%02d' \
2074 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2075 xen=yes
2076 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2077 xen_pc="$xen_pc xenevtchn xendevicemodel"
2078 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2079 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2080 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2081 else
2083 xen_libs="-lxenstore -lxenctrl -lxenguest"
2084 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2086 # First we test whether Xen headers and libraries are available.
2087 # If no, we are done and there is no Xen support.
2088 # If yes, more tests are run to detect the Xen version.
2090 # Xen (any)
2091 cat > $TMPC <<EOF
2092 #include <xenctrl.h>
2093 int main(void) {
2094 return 0;
2097 if ! compile_prog "" "$xen_libs" ; then
2098 # Xen not found
2099 if test "$xen" = "yes" ; then
2100 feature_not_found "xen" "Install xen devel"
2102 xen=no
2104 # Xen unstable
2105 elif
2106 cat > $TMPC <<EOF &&
2107 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2108 #include <xenforeignmemory.h>
2109 int main(void) {
2110 xenforeignmemory_handle *xfmem;
2112 xfmem = xenforeignmemory_open(0, 0);
2113 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2115 return 0;
2118 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2119 then
2120 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2121 xen_ctrl_version=41000
2122 xen=yes
2123 elif
2124 cat > $TMPC <<EOF &&
2125 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2126 #define __XEN_TOOLS__
2127 #include <xendevicemodel.h>
2128 int main(void) {
2129 xendevicemodel_handle *xd;
2131 xd = xendevicemodel_open(0, 0);
2132 xendevicemodel_close(xd);
2134 return 0;
2137 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2138 then
2139 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2140 xen_ctrl_version=40900
2141 xen=yes
2142 elif
2143 cat > $TMPC <<EOF &&
2145 * If we have stable libs the we don't want the libxc compat
2146 * layers, regardless of what CFLAGS we may have been given.
2148 * Also, check if xengnttab_grant_copy_segment_t is defined and
2149 * grant copy operation is implemented.
2151 #undef XC_WANT_COMPAT_EVTCHN_API
2152 #undef XC_WANT_COMPAT_GNTTAB_API
2153 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2154 #include <xenctrl.h>
2155 #include <xenstore.h>
2156 #include <xenevtchn.h>
2157 #include <xengnttab.h>
2158 #include <xenforeignmemory.h>
2159 #include <stdint.h>
2160 #include <xen/hvm/hvm_info_table.h>
2161 #if !defined(HVM_MAX_VCPUS)
2162 # error HVM_MAX_VCPUS not defined
2163 #endif
2164 int main(void) {
2165 xc_interface *xc = NULL;
2166 xenforeignmemory_handle *xfmem;
2167 xenevtchn_handle *xe;
2168 xengnttab_handle *xg;
2169 xen_domain_handle_t handle;
2170 xengnttab_grant_copy_segment_t* seg = NULL;
2172 xs_daemon_open();
2174 xc = xc_interface_open(0, 0, 0);
2175 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2176 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2177 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2178 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2179 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2181 xfmem = xenforeignmemory_open(0, 0);
2182 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2184 xe = xenevtchn_open(0, 0);
2185 xenevtchn_fd(xe);
2187 xg = xengnttab_open(0, 0);
2188 xengnttab_grant_copy(xg, 0, seg);
2190 return 0;
2193 compile_prog "" "$xen_libs $xen_stable_libs"
2194 then
2195 xen_ctrl_version=40800
2196 xen=yes
2197 elif
2198 cat > $TMPC <<EOF &&
2200 * If we have stable libs the we don't want the libxc compat
2201 * layers, regardless of what CFLAGS we may have been given.
2203 #undef XC_WANT_COMPAT_EVTCHN_API
2204 #undef XC_WANT_COMPAT_GNTTAB_API
2205 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2206 #include <xenctrl.h>
2207 #include <xenstore.h>
2208 #include <xenevtchn.h>
2209 #include <xengnttab.h>
2210 #include <xenforeignmemory.h>
2211 #include <stdint.h>
2212 #include <xen/hvm/hvm_info_table.h>
2213 #if !defined(HVM_MAX_VCPUS)
2214 # error HVM_MAX_VCPUS not defined
2215 #endif
2216 int main(void) {
2217 xc_interface *xc = NULL;
2218 xenforeignmemory_handle *xfmem;
2219 xenevtchn_handle *xe;
2220 xengnttab_handle *xg;
2221 xen_domain_handle_t handle;
2223 xs_daemon_open();
2225 xc = xc_interface_open(0, 0, 0);
2226 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2227 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2228 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2229 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2230 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2232 xfmem = xenforeignmemory_open(0, 0);
2233 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2235 xe = xenevtchn_open(0, 0);
2236 xenevtchn_fd(xe);
2238 xg = xengnttab_open(0, 0);
2239 xengnttab_map_grant_ref(xg, 0, 0, 0);
2241 return 0;
2244 compile_prog "" "$xen_libs $xen_stable_libs"
2245 then
2246 xen_ctrl_version=40701
2247 xen=yes
2248 elif
2249 cat > $TMPC <<EOF &&
2250 #include <xenctrl.h>
2251 #include <stdint.h>
2252 int main(void) {
2253 xc_interface *xc = NULL;
2254 xen_domain_handle_t handle;
2255 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2256 return 0;
2259 compile_prog "" "$xen_libs"
2260 then
2261 xen_ctrl_version=40700
2262 xen=yes
2264 # Xen 4.6
2265 elif
2266 cat > $TMPC <<EOF &&
2267 #include <xenctrl.h>
2268 #include <xenstore.h>
2269 #include <stdint.h>
2270 #include <xen/hvm/hvm_info_table.h>
2271 #if !defined(HVM_MAX_VCPUS)
2272 # error HVM_MAX_VCPUS not defined
2273 #endif
2274 int main(void) {
2275 xc_interface *xc;
2276 xs_daemon_open();
2277 xc = xc_interface_open(0, 0, 0);
2278 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2279 xc_gnttab_open(NULL, 0);
2280 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2281 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2282 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2283 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2284 return 0;
2287 compile_prog "" "$xen_libs"
2288 then
2289 xen_ctrl_version=40600
2290 xen=yes
2292 # Xen 4.5
2293 elif
2294 cat > $TMPC <<EOF &&
2295 #include <xenctrl.h>
2296 #include <xenstore.h>
2297 #include <stdint.h>
2298 #include <xen/hvm/hvm_info_table.h>
2299 #if !defined(HVM_MAX_VCPUS)
2300 # error HVM_MAX_VCPUS not defined
2301 #endif
2302 int main(void) {
2303 xc_interface *xc;
2304 xs_daemon_open();
2305 xc = xc_interface_open(0, 0, 0);
2306 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2307 xc_gnttab_open(NULL, 0);
2308 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2309 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2310 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2311 return 0;
2314 compile_prog "" "$xen_libs"
2315 then
2316 xen_ctrl_version=40500
2317 xen=yes
2319 elif
2320 cat > $TMPC <<EOF &&
2321 #include <xenctrl.h>
2322 #include <xenstore.h>
2323 #include <stdint.h>
2324 #include <xen/hvm/hvm_info_table.h>
2325 #if !defined(HVM_MAX_VCPUS)
2326 # error HVM_MAX_VCPUS not defined
2327 #endif
2328 int main(void) {
2329 xc_interface *xc;
2330 xs_daemon_open();
2331 xc = xc_interface_open(0, 0, 0);
2332 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2333 xc_gnttab_open(NULL, 0);
2334 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2335 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2336 return 0;
2339 compile_prog "" "$xen_libs"
2340 then
2341 xen_ctrl_version=40200
2342 xen=yes
2344 else
2345 if test "$xen" = "yes" ; then
2346 feature_not_found "xen (unsupported version)" \
2347 "Install a supported xen (xen 4.2 or newer)"
2349 xen=no
2352 if test "$xen" = yes; then
2353 if test $xen_ctrl_version -ge 40701 ; then
2354 libs_softmmu="$xen_stable_libs $libs_softmmu"
2356 libs_softmmu="$xen_libs $libs_softmmu"
2361 if test "$xen_pci_passthrough" != "no"; then
2362 if test "$xen" = "yes" && test "$linux" = "yes"; then
2363 xen_pci_passthrough=yes
2364 else
2365 if test "$xen_pci_passthrough" = "yes"; then
2366 error_exit "User requested feature Xen PCI Passthrough" \
2367 " but this feature requires /sys from Linux"
2369 xen_pci_passthrough=no
2373 if test "$xen_pv_domain_build" = "yes" &&
2374 test "$xen" != "yes"; then
2375 error_exit "User requested Xen PV domain builder support" \
2376 "which requires Xen support."
2379 ##########################################
2380 # Sparse probe
2381 if test "$sparse" != "no" ; then
2382 if has cgcc; then
2383 sparse=yes
2384 else
2385 if test "$sparse" = "yes" ; then
2386 feature_not_found "sparse" "Install sparse binary"
2388 sparse=no
2392 ##########################################
2393 # X11 probe
2394 x11_cflags=
2395 x11_libs=-lX11
2396 if $pkg_config --exists "x11"; then
2397 x11_cflags=$($pkg_config --cflags x11)
2398 x11_libs=$($pkg_config --libs x11)
2401 ##########################################
2402 # GTK probe
2404 if test "$gtkabi" = ""; then
2405 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2406 # Use 2.0 as a fallback if that is available.
2407 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2408 gtkabi=3.0
2409 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2410 gtkabi=2.0
2411 else
2412 gtkabi=3.0
2416 if test "$gtk" != "no"; then
2417 gtkpackage="gtk+-$gtkabi"
2418 gtkx11package="gtk+-x11-$gtkabi"
2419 if test "$gtkabi" = "3.0" ; then
2420 gtkversion="3.0.0"
2421 else
2422 gtkversion="2.18.0"
2424 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2425 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2426 gtk_libs=$($pkg_config --libs $gtkpackage)
2427 gtk_version=$($pkg_config --modversion $gtkpackage)
2428 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2429 gtk_cflags="$gtk_cflags $x11_cflags"
2430 gtk_libs="$gtk_libs $x11_libs"
2432 libs_softmmu="$gtk_libs $libs_softmmu"
2433 gtk="yes"
2434 elif test "$gtk" = "yes"; then
2435 feature_not_found "gtk" "Install gtk3-devel"
2436 else
2437 gtk="no"
2442 ##########################################
2443 # GNUTLS probe
2445 gnutls_works() {
2446 # Unfortunately some distros have bad pkg-config information for gnutls
2447 # such that it claims to exist but you get a compiler error if you try
2448 # to use the options returned by --libs. Specifically, Ubuntu for --static
2449 # builds doesn't work:
2450 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2452 # So sanity check the cflags/libs before assuming gnutls can be used.
2453 if ! $pkg_config --exists "gnutls"; then
2454 return 1
2457 write_c_skeleton
2458 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2461 gnutls_gcrypt=no
2462 gnutls_nettle=no
2463 if test "$gnutls" != "no"; then
2464 if gnutls_works; then
2465 gnutls_cflags=$($pkg_config --cflags gnutls)
2466 gnutls_libs=$($pkg_config --libs gnutls)
2467 libs_softmmu="$gnutls_libs $libs_softmmu"
2468 libs_tools="$gnutls_libs $libs_tools"
2469 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2470 gnutls="yes"
2472 # gnutls_rnd requires >= 2.11.0
2473 if $pkg_config --exists "gnutls >= 2.11.0"; then
2474 gnutls_rnd="yes"
2475 else
2476 gnutls_rnd="no"
2479 if $pkg_config --exists 'gnutls >= 3.0'; then
2480 gnutls_gcrypt=no
2481 gnutls_nettle=yes
2482 elif $pkg_config --exists 'gnutls >= 2.12'; then
2483 case $($pkg_config --libs --static gnutls) in
2484 *gcrypt*)
2485 gnutls_gcrypt=yes
2486 gnutls_nettle=no
2488 *nettle*)
2489 gnutls_gcrypt=no
2490 gnutls_nettle=yes
2493 gnutls_gcrypt=yes
2494 gnutls_nettle=no
2496 esac
2497 else
2498 gnutls_gcrypt=yes
2499 gnutls_nettle=no
2501 elif test "$gnutls" = "yes"; then
2502 feature_not_found "gnutls" "Install gnutls devel"
2503 else
2504 gnutls="no"
2505 gnutls_rnd="no"
2507 else
2508 gnutls_rnd="no"
2512 # If user didn't give a --disable/enable-gcrypt flag,
2513 # then mark as disabled if user requested nettle
2514 # explicitly, or if gnutls links to nettle
2515 if test -z "$gcrypt"
2516 then
2517 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2518 then
2519 gcrypt="no"
2523 # If user didn't give a --disable/enable-nettle flag,
2524 # then mark as disabled if user requested gcrypt
2525 # explicitly, or if gnutls links to gcrypt
2526 if test -z "$nettle"
2527 then
2528 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2529 then
2530 nettle="no"
2534 has_libgcrypt_config() {
2535 if ! has "libgcrypt-config"
2536 then
2537 return 1
2540 if test -n "$cross_prefix"
2541 then
2542 host=$(libgcrypt-config --host)
2543 if test "$host-" != $cross_prefix
2544 then
2545 return 1
2549 return 0
2552 if test "$gcrypt" != "no"; then
2553 if has_libgcrypt_config; then
2554 gcrypt_cflags=$(libgcrypt-config --cflags)
2555 gcrypt_libs=$(libgcrypt-config --libs)
2556 # Debian has remove -lgpg-error from libgcrypt-config
2557 # as it "spreads unnecessary dependencies" which in
2558 # turn breaks static builds...
2559 if test "$static" = "yes"
2560 then
2561 gcrypt_libs="$gcrypt_libs -lgpg-error"
2563 libs_softmmu="$gcrypt_libs $libs_softmmu"
2564 libs_tools="$gcrypt_libs $libs_tools"
2565 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2566 gcrypt="yes"
2567 if test -z "$nettle"; then
2568 nettle="no"
2571 cat > $TMPC << EOF
2572 #include <gcrypt.h>
2573 int main(void) {
2574 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2575 GCRY_MD_SHA256,
2576 NULL, 0, 0, 0, NULL);
2577 return 0;
2580 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2581 gcrypt_kdf=yes
2584 cat > $TMPC << EOF
2585 #include <gcrypt.h>
2586 int main(void) {
2587 gcry_mac_hd_t handle;
2588 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2589 GCRY_MAC_FLAG_SECURE, NULL);
2590 return 0;
2593 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2594 gcrypt_hmac=yes
2596 else
2597 if test "$gcrypt" = "yes"; then
2598 feature_not_found "gcrypt" "Install gcrypt devel"
2599 else
2600 gcrypt="no"
2606 if test "$nettle" != "no"; then
2607 if $pkg_config --exists "nettle"; then
2608 nettle_cflags=$($pkg_config --cflags nettle)
2609 nettle_libs=$($pkg_config --libs nettle)
2610 nettle_version=$($pkg_config --modversion nettle)
2611 libs_softmmu="$nettle_libs $libs_softmmu"
2612 libs_tools="$nettle_libs $libs_tools"
2613 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2614 nettle="yes"
2616 cat > $TMPC << EOF
2617 #include <stddef.h>
2618 #include <nettle/pbkdf2.h>
2619 int main(void) {
2620 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2621 return 0;
2624 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2625 nettle_kdf=yes
2627 else
2628 if test "$nettle" = "yes"; then
2629 feature_not_found "nettle" "Install nettle devel"
2630 else
2631 nettle="no"
2636 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2637 then
2638 error_exit "Only one of gcrypt & nettle can be enabled"
2641 ##########################################
2642 # libtasn1 - only for the TLS creds/session test suite
2644 tasn1=yes
2645 tasn1_cflags=""
2646 tasn1_libs=""
2647 if $pkg_config --exists "libtasn1"; then
2648 tasn1_cflags=$($pkg_config --cflags libtasn1)
2649 tasn1_libs=$($pkg_config --libs libtasn1)
2650 else
2651 tasn1=no
2655 ##########################################
2656 # getifaddrs (for tests/test-io-channel-socket )
2658 have_ifaddrs_h=yes
2659 if ! check_include "ifaddrs.h" ; then
2660 have_ifaddrs_h=no
2663 ##########################################
2664 # VTE probe
2666 if test "$vte" != "no"; then
2667 if test "$gtkabi" = "3.0"; then
2668 vteminversion="0.32.0"
2669 if $pkg_config --exists "vte-2.91"; then
2670 vtepackage="vte-2.91"
2671 else
2672 vtepackage="vte-2.90"
2674 else
2675 vtepackage="vte"
2676 vteminversion="0.24.0"
2678 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2679 vte_cflags=$($pkg_config --cflags $vtepackage)
2680 vte_libs=$($pkg_config --libs $vtepackage)
2681 vteversion=$($pkg_config --modversion $vtepackage)
2682 libs_softmmu="$vte_libs $libs_softmmu"
2683 vte="yes"
2684 elif test "$vte" = "yes"; then
2685 if test "$gtkabi" = "3.0"; then
2686 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2687 else
2688 feature_not_found "vte" "Install libvte devel"
2690 else
2691 vte="no"
2695 ##########################################
2696 # SDL probe
2698 # Look for sdl configuration program (pkg-config or sdl-config). Try
2699 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2701 if test "$sdlabi" = ""; then
2702 if $pkg_config --exists "sdl2"; then
2703 sdlabi=2.0
2704 elif $pkg_config --exists "sdl"; then
2705 sdlabi=1.2
2706 else
2707 sdlabi=2.0
2711 if test $sdlabi = "2.0"; then
2712 sdl_config=$sdl2_config
2713 sdlname=sdl2
2714 sdlconfigname=sdl2_config
2715 elif test $sdlabi = "1.2"; then
2716 sdlname=sdl
2717 sdlconfigname=sdl_config
2718 else
2719 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2722 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2723 sdl_config=$sdlconfigname
2726 if $pkg_config $sdlname --exists; then
2727 sdlconfig="$pkg_config $sdlname"
2728 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2729 elif has ${sdl_config}; then
2730 sdlconfig="$sdl_config"
2731 sdlversion=$($sdlconfig --version)
2732 else
2733 if test "$sdl" = "yes" ; then
2734 feature_not_found "sdl" "Install SDL2-devel"
2736 sdl=no
2738 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2739 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2742 sdl_too_old=no
2743 if test "$sdl" != "no" ; then
2744 cat > $TMPC << EOF
2745 #include <SDL.h>
2746 #undef main /* We don't want SDL to override our main() */
2747 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2749 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2750 if test "$static" = "yes" ; then
2751 if $pkg_config $sdlname --exists; then
2752 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2753 else
2754 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2756 else
2757 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2759 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2760 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2761 sdl_too_old=yes
2762 else
2763 sdl=yes
2766 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2767 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2768 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2769 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2770 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2772 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2774 else
2775 sdl=no
2777 fi # static link
2778 else # sdl not found
2779 if test "$sdl" = "yes" ; then
2780 feature_not_found "sdl" "Install SDL devel"
2782 sdl=no
2783 fi # sdl compile test
2786 if test "$sdl" = "yes" ; then
2787 cat > $TMPC <<EOF
2788 #include <SDL.h>
2789 #if defined(SDL_VIDEO_DRIVER_X11)
2790 #include <X11/XKBlib.h>
2791 #else
2792 #error No x11 support
2793 #endif
2794 int main(void) { return 0; }
2796 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2797 sdl_cflags="$sdl_cflags $x11_cflags"
2798 sdl_libs="$sdl_libs $x11_libs"
2802 ##########################################
2803 # RDMA needs OpenFabrics libraries
2804 if test "$rdma" != "no" ; then
2805 cat > $TMPC <<EOF
2806 #include <rdma/rdma_cma.h>
2807 int main(void) { return 0; }
2809 rdma_libs="-lrdmacm -libverbs"
2810 if compile_prog "" "$rdma_libs" ; then
2811 rdma="yes"
2812 else
2813 if test "$rdma" = "yes" ; then
2814 error_exit \
2815 " OpenFabrics librdmacm/libibverbs not present." \
2816 " Your options:" \
2817 " (1) Fast: Install infiniband packages from your distro." \
2818 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2819 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2821 rdma="no"
2826 ##########################################
2827 # VNC SASL detection
2828 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2829 cat > $TMPC <<EOF
2830 #include <sasl/sasl.h>
2831 #include <stdio.h>
2832 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2834 # Assuming Cyrus-SASL installed in /usr prefix
2835 vnc_sasl_cflags=""
2836 vnc_sasl_libs="-lsasl2"
2837 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2838 vnc_sasl=yes
2839 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2840 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2841 else
2842 if test "$vnc_sasl" = "yes" ; then
2843 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2845 vnc_sasl=no
2849 ##########################################
2850 # VNC JPEG detection
2851 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2852 cat > $TMPC <<EOF
2853 #include <stdio.h>
2854 #include <jpeglib.h>
2855 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2857 vnc_jpeg_cflags=""
2858 vnc_jpeg_libs="-ljpeg"
2859 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2860 vnc_jpeg=yes
2861 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2862 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2863 else
2864 if test "$vnc_jpeg" = "yes" ; then
2865 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2867 vnc_jpeg=no
2871 ##########################################
2872 # VNC PNG detection
2873 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2874 cat > $TMPC <<EOF
2875 //#include <stdio.h>
2876 #include <png.h>
2877 #include <stddef.h>
2878 int main(void) {
2879 png_structp png_ptr;
2880 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2881 return png_ptr != 0;
2884 if $pkg_config libpng --exists; then
2885 vnc_png_cflags=$($pkg_config libpng --cflags)
2886 vnc_png_libs=$($pkg_config libpng --libs)
2887 else
2888 vnc_png_cflags=""
2889 vnc_png_libs="-lpng"
2891 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2892 vnc_png=yes
2893 libs_softmmu="$vnc_png_libs $libs_softmmu"
2894 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2895 else
2896 if test "$vnc_png" = "yes" ; then
2897 feature_not_found "vnc-png" "Install libpng devel"
2899 vnc_png=no
2903 ##########################################
2904 # fnmatch() probe, used for ACL routines
2905 fnmatch="no"
2906 cat > $TMPC << EOF
2907 #include <fnmatch.h>
2908 int main(void)
2910 fnmatch("foo", "foo", 0);
2911 return 0;
2914 if compile_prog "" "" ; then
2915 fnmatch="yes"
2918 ##########################################
2919 # xfsctl() probe, used for file-posix.c
2920 if test "$xfs" != "no" ; then
2921 cat > $TMPC << EOF
2922 #include <stddef.h> /* NULL */
2923 #include <xfs/xfs.h>
2924 int main(void)
2926 xfsctl(NULL, 0, 0, NULL);
2927 return 0;
2930 if compile_prog "" "" ; then
2931 xfs="yes"
2932 else
2933 if test "$xfs" = "yes" ; then
2934 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2936 xfs=no
2940 ##########################################
2941 # vde libraries probe
2942 if test "$vde" != "no" ; then
2943 vde_libs="-lvdeplug"
2944 cat > $TMPC << EOF
2945 #include <libvdeplug.h>
2946 int main(void)
2948 struct vde_open_args a = {0, 0, 0};
2949 char s[] = "";
2950 vde_open(s, s, &a);
2951 return 0;
2954 if compile_prog "" "$vde_libs" ; then
2955 vde=yes
2956 else
2957 if test "$vde" = "yes" ; then
2958 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2960 vde=no
2964 ##########################################
2965 # netmap support probe
2966 # Apart from looking for netmap headers, we make sure that the host API version
2967 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2968 # a minor/major version number. Minor new features will be marked with values up
2969 # to 15, and if something happens that requires a change to the backend we will
2970 # move above 15, submit the backend fixes and modify this two bounds.
2971 if test "$netmap" != "no" ; then
2972 cat > $TMPC << EOF
2973 #include <inttypes.h>
2974 #include <net/if.h>
2975 #include <net/netmap.h>
2976 #include <net/netmap_user.h>
2977 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2978 #error
2979 #endif
2980 int main(void) { return 0; }
2982 if compile_prog "" "" ; then
2983 netmap=yes
2984 else
2985 if test "$netmap" = "yes" ; then
2986 feature_not_found "netmap"
2988 netmap=no
2992 ##########################################
2993 # libcap-ng library probe
2994 if test "$cap_ng" != "no" ; then
2995 cap_libs="-lcap-ng"
2996 cat > $TMPC << EOF
2997 #include <cap-ng.h>
2998 int main(void)
3000 capng_capability_to_name(CAPNG_EFFECTIVE);
3001 return 0;
3004 if compile_prog "" "$cap_libs" ; then
3005 cap_ng=yes
3006 libs_tools="$cap_libs $libs_tools"
3007 else
3008 if test "$cap_ng" = "yes" ; then
3009 feature_not_found "cap_ng" "Install libcap-ng devel"
3011 cap_ng=no
3015 ##########################################
3016 # Sound support libraries probe
3018 audio_drv_probe()
3020 drv=$1
3021 hdr=$2
3022 lib=$3
3023 exp=$4
3024 cfl=$5
3025 cat > $TMPC << EOF
3026 #include <$hdr>
3027 int main(void) { $exp }
3029 if compile_prog "$cfl" "$lib" ; then
3031 else
3032 error_exit "$drv check failed" \
3033 "Make sure to have the $drv libs and headers installed."
3037 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3038 for drv in $audio_drv_list; do
3039 case $drv in
3040 alsa)
3041 audio_drv_probe $drv alsa/asoundlib.h -lasound \
3042 "return snd_pcm_close((snd_pcm_t *)0);"
3043 alsa_libs="-lasound"
3047 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3048 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3049 pulse_libs="-lpulse"
3050 audio_pt_int="yes"
3053 sdl)
3054 if test "$sdl" = "no"; then
3055 error_exit "sdl not found or disabled, can not use sdl audio driver"
3059 coreaudio)
3060 coreaudio_libs="-framework CoreAudio"
3063 dsound)
3064 dsound_libs="-lole32 -ldxguid"
3065 audio_win_int="yes"
3068 oss)
3069 oss_libs="$oss_lib"
3072 wav)
3073 # XXX: Probes for CoreAudio, DirectSound
3077 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3078 error_exit "Unknown driver '$drv' selected" \
3079 "Possible drivers are: $audio_possible_drivers"
3082 esac
3083 done
3085 ##########################################
3086 # BrlAPI probe
3088 if test "$brlapi" != "no" ; then
3089 brlapi_libs="-lbrlapi"
3090 cat > $TMPC << EOF
3091 #include <brlapi.h>
3092 #include <stddef.h>
3093 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3095 if compile_prog "" "$brlapi_libs" ; then
3096 brlapi=yes
3097 else
3098 if test "$brlapi" = "yes" ; then
3099 feature_not_found "brlapi" "Install brlapi devel"
3101 brlapi=no
3105 ##########################################
3106 # curses probe
3107 if test "$curses" != "no" ; then
3108 if test "$mingw32" = "yes" ; then
3109 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3110 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3111 else
3112 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3113 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3115 curses_found=no
3116 cat > $TMPC << EOF
3117 #include <locale.h>
3118 #include <curses.h>
3119 #include <wchar.h>
3120 int main(void) {
3121 wchar_t wch = L'w';
3122 setlocale(LC_ALL, "");
3123 resize_term(0, 0);
3124 addwstr(L"wide chars\n");
3125 addnwstr(&wch, 1);
3126 add_wch(WACS_DEGREE);
3127 return 0;
3130 IFS=:
3131 for curses_inc in $curses_inc_list; do
3132 # Make sure we get the wide character prototypes
3133 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3134 IFS=:
3135 for curses_lib in $curses_lib_list; do
3136 unset IFS
3137 if compile_prog "$curses_inc" "$curses_lib" ; then
3138 curses_found=yes
3139 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3140 libs_softmmu="$curses_lib $libs_softmmu"
3141 break
3143 done
3144 if test "$curses_found" = yes ; then
3145 break
3147 done
3148 unset IFS
3149 if test "$curses_found" = "yes" ; then
3150 curses=yes
3151 else
3152 if test "$curses" = "yes" ; then
3153 feature_not_found "curses" "Install ncurses devel"
3155 curses=no
3159 ##########################################
3160 # curl probe
3161 if test "$curl" != "no" ; then
3162 if $pkg_config libcurl --exists; then
3163 curlconfig="$pkg_config libcurl"
3164 else
3165 curlconfig=curl-config
3167 cat > $TMPC << EOF
3168 #include <curl/curl.h>
3169 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3171 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3172 curl_libs=$($curlconfig --libs 2>/dev/null)
3173 if compile_prog "$curl_cflags" "$curl_libs" ; then
3174 curl=yes
3175 else
3176 if test "$curl" = "yes" ; then
3177 feature_not_found "curl" "Install libcurl devel"
3179 curl=no
3181 fi # test "$curl"
3183 ##########################################
3184 # bluez support probe
3185 if test "$bluez" != "no" ; then
3186 cat > $TMPC << EOF
3187 #include <bluetooth/bluetooth.h>
3188 int main(void) { return bt_error(0); }
3190 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3191 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3192 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3193 bluez=yes
3194 libs_softmmu="$bluez_libs $libs_softmmu"
3195 else
3196 if test "$bluez" = "yes" ; then
3197 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3199 bluez="no"
3203 ##########################################
3204 # glib support probe
3206 if test "$mingw32" = yes; then
3207 glib_req_ver=2.30
3208 else
3209 glib_req_ver=2.22
3211 glib_modules=gthread-2.0
3212 if test "$modules" = yes; then
3213 glib_modules="$glib_modules gmodule-2.0"
3216 # This workaround is required due to a bug in pkg-config file for glib as it
3217 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3219 if test "$static" = yes -a "$mingw32" = yes; then
3220 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3223 for i in $glib_modules; do
3224 if $pkg_config --atleast-version=$glib_req_ver $i; then
3225 glib_cflags=$($pkg_config --cflags $i)
3226 glib_libs=$($pkg_config --libs $i)
3227 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3228 LIBS="$glib_libs $LIBS"
3229 libs_qga="$glib_libs $libs_qga"
3230 else
3231 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3233 done
3235 # Sanity check that the current size_t matches the
3236 # size that glib thinks it should be. This catches
3237 # problems on multi-arch where people try to build
3238 # 32-bit QEMU while pointing at 64-bit glib headers
3239 cat > $TMPC <<EOF
3240 #include <glib.h>
3241 #include <unistd.h>
3243 #define QEMU_BUILD_BUG_ON(x) \
3244 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3246 int main(void) {
3247 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3248 return 0;
3252 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3253 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3254 "You probably need to set PKG_CONFIG_LIBDIR"\
3255 "to point to the right pkg-config files for your"\
3256 "build target"
3259 # g_test_trap_subprocess added in 2.38. Used by some tests.
3260 glib_subprocess=yes
3261 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3262 glib_subprocess=no
3265 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3266 cat > $TMPC << EOF
3267 #include <glib.h>
3268 int main(void) { return 0; }
3270 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3271 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3272 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3273 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3277 ##########################################
3278 # SHA command probe for modules
3279 if test "$modules" = yes; then
3280 shacmd_probe="sha1sum sha1 shasum"
3281 for c in $shacmd_probe; do
3282 if has $c; then
3283 shacmd="$c"
3284 break
3286 done
3287 if test "$shacmd" = ""; then
3288 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3292 ##########################################
3293 # pixman support probe
3295 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3296 pixman_cflags=
3297 pixman_libs=
3298 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3299 pixman_cflags=$($pkg_config --cflags pixman-1)
3300 pixman_libs=$($pkg_config --libs pixman-1)
3301 else
3302 error_exit "pixman >= 0.21.8 not present." \
3303 "Please install the pixman devel package."
3306 ##########################################
3307 # libmpathpersist probe
3309 if test "$mpath" != "no" ; then
3310 cat > $TMPC <<EOF
3311 #include <libudev.h>
3312 #include <mpath_persist.h>
3313 unsigned mpath_mx_alloc_len = 1024;
3314 int logsink;
3315 int main(void) {
3316 struct udev *udev = udev_new();
3317 mpath_lib_init(udev);
3318 return 0;
3321 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3322 mpathpersist=yes
3323 else
3324 mpathpersist=no
3326 else
3327 mpathpersist=no
3330 ##########################################
3331 # libcap probe
3333 if test "$cap" != "no" ; then
3334 cat > $TMPC <<EOF
3335 #include <stdio.h>
3336 #include <sys/capability.h>
3337 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3339 if compile_prog "" "-lcap" ; then
3340 cap=yes
3341 else
3342 cap=no
3346 ##########################################
3347 # pthread probe
3348 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3350 pthread=no
3351 cat > $TMPC << EOF
3352 #include <pthread.h>
3353 static void *f(void *p) { return NULL; }
3354 int main(void) {
3355 pthread_t thread;
3356 pthread_create(&thread, 0, f, 0);
3357 return 0;
3360 if compile_prog "" "" ; then
3361 pthread=yes
3362 else
3363 for pthread_lib in $PTHREADLIBS_LIST; do
3364 if compile_prog "" "$pthread_lib" ; then
3365 pthread=yes
3366 found=no
3367 for lib_entry in $LIBS; do
3368 if test "$lib_entry" = "$pthread_lib"; then
3369 found=yes
3370 break
3372 done
3373 if test "$found" = "no"; then
3374 LIBS="$pthread_lib $LIBS"
3376 PTHREAD_LIB="$pthread_lib"
3377 break
3379 done
3382 if test "$mingw32" != yes -a "$pthread" = no; then
3383 error_exit "pthread check failed" \
3384 "Make sure to have the pthread libs and headers installed."
3387 # check for pthread_setname_np
3388 pthread_setname_np=no
3389 cat > $TMPC << EOF
3390 #include <pthread.h>
3392 static void *f(void *p) { return NULL; }
3393 int main(void)
3395 pthread_t thread;
3396 pthread_create(&thread, 0, f, 0);
3397 pthread_setname_np(thread, "QEMU");
3398 return 0;
3401 if compile_prog "" "$pthread_lib" ; then
3402 pthread_setname_np=yes
3405 ##########################################
3406 # rbd probe
3407 if test "$rbd" != "no" ; then
3408 cat > $TMPC <<EOF
3409 #include <stdio.h>
3410 #include <rbd/librbd.h>
3411 int main(void) {
3412 rados_t cluster;
3413 rados_create(&cluster, NULL);
3414 return 0;
3417 rbd_libs="-lrbd -lrados"
3418 if compile_prog "" "$rbd_libs" ; then
3419 rbd=yes
3420 else
3421 if test "$rbd" = "yes" ; then
3422 feature_not_found "rados block device" "Install librbd/ceph devel"
3424 rbd=no
3428 ##########################################
3429 # libssh2 probe
3430 min_libssh2_version=1.2.8
3431 if test "$libssh2" != "no" ; then
3432 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3433 libssh2_cflags=$($pkg_config libssh2 --cflags)
3434 libssh2_libs=$($pkg_config libssh2 --libs)
3435 libssh2=yes
3436 else
3437 if test "$libssh2" = "yes" ; then
3438 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3440 libssh2=no
3444 ##########################################
3445 # libssh2_sftp_fsync probe
3447 if test "$libssh2" = "yes"; then
3448 cat > $TMPC <<EOF
3449 #include <stdio.h>
3450 #include <libssh2.h>
3451 #include <libssh2_sftp.h>
3452 int main(void) {
3453 LIBSSH2_SESSION *session;
3454 LIBSSH2_SFTP *sftp;
3455 LIBSSH2_SFTP_HANDLE *sftp_handle;
3456 session = libssh2_session_init ();
3457 sftp = libssh2_sftp_init (session);
3458 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3459 libssh2_sftp_fsync (sftp_handle);
3460 return 0;
3463 # libssh2_cflags/libssh2_libs defined in previous test.
3464 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3465 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3469 ##########################################
3470 # linux-aio probe
3472 if test "$linux_aio" != "no" ; then
3473 cat > $TMPC <<EOF
3474 #include <libaio.h>
3475 #include <sys/eventfd.h>
3476 #include <stddef.h>
3477 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3479 if compile_prog "" "-laio" ; then
3480 linux_aio=yes
3481 else
3482 if test "$linux_aio" = "yes" ; then
3483 feature_not_found "linux AIO" "Install libaio devel"
3485 linux_aio=no
3489 ##########################################
3490 # TPM passthrough is only on x86 Linux
3492 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3493 tpm_passthrough=$tpm
3494 else
3495 tpm_passthrough=no
3498 ##########################################
3499 # attr probe
3501 if test "$attr" != "no" ; then
3502 cat > $TMPC <<EOF
3503 #include <stdio.h>
3504 #include <sys/types.h>
3505 #ifdef CONFIG_LIBATTR
3506 #include <attr/xattr.h>
3507 #else
3508 #include <sys/xattr.h>
3509 #endif
3510 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3512 if compile_prog "" "" ; then
3513 attr=yes
3514 # Older distros have <attr/xattr.h>, and need -lattr:
3515 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3516 attr=yes
3517 LIBS="-lattr $LIBS"
3518 libattr=yes
3519 else
3520 if test "$attr" = "yes" ; then
3521 feature_not_found "ATTR" "Install libc6 or libattr devel"
3523 attr=no
3527 ##########################################
3528 # iovec probe
3529 cat > $TMPC <<EOF
3530 #include <sys/types.h>
3531 #include <sys/uio.h>
3532 #include <unistd.h>
3533 int main(void) { return sizeof(struct iovec); }
3535 iovec=no
3536 if compile_prog "" "" ; then
3537 iovec=yes
3540 ##########################################
3541 # preadv probe
3542 cat > $TMPC <<EOF
3543 #include <sys/types.h>
3544 #include <sys/uio.h>
3545 #include <unistd.h>
3546 int main(void) { return preadv(0, 0, 0, 0); }
3548 preadv=no
3549 if compile_prog "" "" ; then
3550 preadv=yes
3553 ##########################################
3554 # fdt probe
3555 # fdt support is mandatory for at least some target architectures,
3556 # so insist on it if we're building those system emulators.
3557 fdt_required=no
3558 for target in $target_list; do
3559 case $target in
3560 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
3561 fdt_required=yes
3563 esac
3564 done
3566 if test "$fdt_required" = "yes"; then
3567 if test "$fdt" = "no"; then
3568 error_exit "fdt disabled but some requested targets require it." \
3569 "You can turn off fdt only if you also disable all the system emulation" \
3570 "targets which need it (by specifying a cut down --target-list)."
3572 fdt=yes
3575 if test "$fdt" != "no" ; then
3576 fdt_libs="-lfdt"
3577 # explicitly check for libfdt_env.h as it is missing in some stable installs
3578 # and test for required functions to make sure we are on a version >= 1.4.2
3579 cat > $TMPC << EOF
3580 #include <libfdt.h>
3581 #include <libfdt_env.h>
3582 int main(void) { fdt_first_subnode(0, 0); return 0; }
3584 if compile_prog "" "$fdt_libs" ; then
3585 # system DTC is good - use it
3586 fdt=yes
3587 elif test -d ${source_path}/dtc/libfdt ; then
3588 # have submodule DTC - use it
3589 fdt=yes
3590 dtc_internal="yes"
3591 mkdir -p dtc
3592 if [ "$pwd_is_source_path" != "y" ] ; then
3593 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3594 symlink "$source_path/dtc/scripts" "dtc/scripts"
3596 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3597 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3598 elif test "$fdt" = "yes" ; then
3599 # have neither and want - prompt for system/submodule install
3600 error_exit "DTC (libfdt) version >= 1.4.2 not present. Your options:" \
3601 " (1) Preferred: Install the DTC (libfdt) devel package" \
3602 " (2) Fetch the DTC submodule, using:" \
3603 " git submodule update --init dtc"
3604 else
3605 # don't have and don't want
3606 fdt_libs=
3607 fdt=no
3611 libs_softmmu="$libs_softmmu $fdt_libs"
3613 ##########################################
3614 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3616 if test "$opengl" != "no" ; then
3617 opengl_pkgs="epoxy libdrm gbm"
3618 if $pkg_config $opengl_pkgs x11; then
3619 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3620 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3621 opengl=yes
3622 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3623 gtk_gl="yes"
3625 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3626 else
3627 if test "$opengl" = "yes" ; then
3628 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3630 opengl_cflags=""
3631 opengl_libs=""
3632 opengl=no
3636 if test "$opengl" = "yes"; then
3637 cat > $TMPC << EOF
3638 #include <epoxy/egl.h>
3639 #ifndef EGL_MESA_image_dma_buf_export
3640 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3641 #endif
3642 int main(void) { return 0; }
3644 if compile_prog "" "" ; then
3645 opengl_dmabuf=yes
3650 ##########################################
3651 # glusterfs probe
3652 if test "$glusterfs" != "no" ; then
3653 if $pkg_config --atleast-version=3 glusterfs-api; then
3654 glusterfs="yes"
3655 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3656 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3657 if $pkg_config --atleast-version=4 glusterfs-api; then
3658 glusterfs_xlator_opt="yes"
3660 if $pkg_config --atleast-version=5 glusterfs-api; then
3661 glusterfs_discard="yes"
3663 if $pkg_config --atleast-version=6 glusterfs-api; then
3664 glusterfs_fallocate="yes"
3665 glusterfs_zerofill="yes"
3667 else
3668 if test "$glusterfs" = "yes" ; then
3669 feature_not_found "GlusterFS backend support" \
3670 "Install glusterfs-api devel >= 3"
3672 glusterfs="no"
3676 # Check for inotify functions when we are building linux-user
3677 # emulator. This is done because older glibc versions don't
3678 # have syscall stubs for these implemented. In that case we
3679 # don't provide them even if kernel supports them.
3681 inotify=no
3682 cat > $TMPC << EOF
3683 #include <sys/inotify.h>
3686 main(void)
3688 /* try to start inotify */
3689 return inotify_init();
3692 if compile_prog "" "" ; then
3693 inotify=yes
3696 inotify1=no
3697 cat > $TMPC << EOF
3698 #include <sys/inotify.h>
3701 main(void)
3703 /* try to start inotify */
3704 return inotify_init1(0);
3707 if compile_prog "" "" ; then
3708 inotify1=yes
3711 # check if pipe2 is there
3712 pipe2=no
3713 cat > $TMPC << EOF
3714 #include <unistd.h>
3715 #include <fcntl.h>
3717 int main(void)
3719 int pipefd[2];
3720 return pipe2(pipefd, O_CLOEXEC);
3723 if compile_prog "" "" ; then
3724 pipe2=yes
3727 # check if accept4 is there
3728 accept4=no
3729 cat > $TMPC << EOF
3730 #include <sys/socket.h>
3731 #include <stddef.h>
3733 int main(void)
3735 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3736 return 0;
3739 if compile_prog "" "" ; then
3740 accept4=yes
3743 # check if tee/splice is there. vmsplice was added same time.
3744 splice=no
3745 cat > $TMPC << EOF
3746 #include <unistd.h>
3747 #include <fcntl.h>
3748 #include <limits.h>
3750 int main(void)
3752 int len, fd = 0;
3753 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3754 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3755 return 0;
3758 if compile_prog "" "" ; then
3759 splice=yes
3762 ##########################################
3763 # libnuma probe
3765 if test "$numa" != "no" ; then
3766 cat > $TMPC << EOF
3767 #include <numa.h>
3768 int main(void) { return numa_available(); }
3771 if compile_prog "" "-lnuma" ; then
3772 numa=yes
3773 libs_softmmu="-lnuma $libs_softmmu"
3774 else
3775 if test "$numa" = "yes" ; then
3776 feature_not_found "numa" "install numactl devel"
3778 numa=no
3782 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3783 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3784 exit 1
3787 ##########################################
3788 # tcmalloc probe
3790 if test "$tcmalloc" = "yes" ; then
3791 cat > $TMPC << EOF
3792 #include <stdlib.h>
3793 int main(void) { malloc(1); return 0; }
3796 if compile_prog "" "-ltcmalloc" ; then
3797 LIBS="-ltcmalloc $LIBS"
3798 else
3799 feature_not_found "tcmalloc" "install gperftools devel"
3803 ##########################################
3804 # jemalloc probe
3806 if test "$jemalloc" = "yes" ; then
3807 cat > $TMPC << EOF
3808 #include <stdlib.h>
3809 int main(void) { malloc(1); return 0; }
3812 if compile_prog "" "-ljemalloc" ; then
3813 LIBS="-ljemalloc $LIBS"
3814 else
3815 feature_not_found "jemalloc" "install jemalloc devel"
3819 ##########################################
3820 # signalfd probe
3821 signalfd="no"
3822 cat > $TMPC << EOF
3823 #include <unistd.h>
3824 #include <sys/syscall.h>
3825 #include <signal.h>
3826 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3829 if compile_prog "" "" ; then
3830 signalfd=yes
3833 # check if eventfd is supported
3834 eventfd=no
3835 cat > $TMPC << EOF
3836 #include <sys/eventfd.h>
3838 int main(void)
3840 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3843 if compile_prog "" "" ; then
3844 eventfd=yes
3847 # check if memfd is supported
3848 memfd=no
3849 cat > $TMPC << EOF
3850 #include <sys/memfd.h>
3852 int main(void)
3854 return memfd_create("foo", MFD_ALLOW_SEALING);
3857 if compile_prog "" "" ; then
3858 memfd=yes
3863 # check for fallocate
3864 fallocate=no
3865 cat > $TMPC << EOF
3866 #include <fcntl.h>
3868 int main(void)
3870 fallocate(0, 0, 0, 0);
3871 return 0;
3874 if compile_prog "" "" ; then
3875 fallocate=yes
3878 # check for fallocate hole punching
3879 fallocate_punch_hole=no
3880 cat > $TMPC << EOF
3881 #include <fcntl.h>
3882 #include <linux/falloc.h>
3884 int main(void)
3886 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3887 return 0;
3890 if compile_prog "" "" ; then
3891 fallocate_punch_hole=yes
3894 # check that fallocate supports range zeroing inside the file
3895 fallocate_zero_range=no
3896 cat > $TMPC << EOF
3897 #include <fcntl.h>
3898 #include <linux/falloc.h>
3900 int main(void)
3902 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3903 return 0;
3906 if compile_prog "" "" ; then
3907 fallocate_zero_range=yes
3910 # check for posix_fallocate
3911 posix_fallocate=no
3912 cat > $TMPC << EOF
3913 #include <fcntl.h>
3915 int main(void)
3917 posix_fallocate(0, 0, 0);
3918 return 0;
3921 if compile_prog "" "" ; then
3922 posix_fallocate=yes
3925 # check for sync_file_range
3926 sync_file_range=no
3927 cat > $TMPC << EOF
3928 #include <fcntl.h>
3930 int main(void)
3932 sync_file_range(0, 0, 0, 0);
3933 return 0;
3936 if compile_prog "" "" ; then
3937 sync_file_range=yes
3940 # check for linux/fiemap.h and FS_IOC_FIEMAP
3941 fiemap=no
3942 cat > $TMPC << EOF
3943 #include <sys/ioctl.h>
3944 #include <linux/fs.h>
3945 #include <linux/fiemap.h>
3947 int main(void)
3949 ioctl(0, FS_IOC_FIEMAP, 0);
3950 return 0;
3953 if compile_prog "" "" ; then
3954 fiemap=yes
3957 # check for dup3
3958 dup3=no
3959 cat > $TMPC << EOF
3960 #include <unistd.h>
3962 int main(void)
3964 dup3(0, 0, 0);
3965 return 0;
3968 if compile_prog "" "" ; then
3969 dup3=yes
3972 # check for ppoll support
3973 ppoll=no
3974 cat > $TMPC << EOF
3975 #include <poll.h>
3977 int main(void)
3979 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3980 ppoll(&pfd, 1, 0, 0);
3981 return 0;
3984 if compile_prog "" "" ; then
3985 ppoll=yes
3988 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3989 prctl_pr_set_timerslack=no
3990 cat > $TMPC << EOF
3991 #include <sys/prctl.h>
3993 int main(void)
3995 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3996 return 0;
3999 if compile_prog "" "" ; then
4000 prctl_pr_set_timerslack=yes
4003 # check for epoll support
4004 epoll=no
4005 cat > $TMPC << EOF
4006 #include <sys/epoll.h>
4008 int main(void)
4010 epoll_create(0);
4011 return 0;
4014 if compile_prog "" "" ; then
4015 epoll=yes
4018 # epoll_create1 is a later addition
4019 # so we must check separately for its presence
4020 epoll_create1=no
4021 cat > $TMPC << EOF
4022 #include <sys/epoll.h>
4024 int main(void)
4026 /* Note that we use epoll_create1 as a value, not as
4027 * a function being called. This is necessary so that on
4028 * old SPARC glibc versions where the function was present in
4029 * the library but not declared in the header file we will
4030 * fail the configure check. (Otherwise we will get a compiler
4031 * warning but not an error, and will proceed to fail the
4032 * qemu compile where we compile with -Werror.)
4034 return (int)(uintptr_t)&epoll_create1;
4037 if compile_prog "" "" ; then
4038 epoll_create1=yes
4041 # check for sendfile support
4042 sendfile=no
4043 cat > $TMPC << EOF
4044 #include <sys/sendfile.h>
4046 int main(void)
4048 return sendfile(0, 0, 0, 0);
4051 if compile_prog "" "" ; then
4052 sendfile=yes
4055 # check for timerfd support (glibc 2.8 and newer)
4056 timerfd=no
4057 cat > $TMPC << EOF
4058 #include <sys/timerfd.h>
4060 int main(void)
4062 return(timerfd_create(CLOCK_REALTIME, 0));
4065 if compile_prog "" "" ; then
4066 timerfd=yes
4069 # check for setns and unshare support
4070 setns=no
4071 cat > $TMPC << EOF
4072 #include <sched.h>
4074 int main(void)
4076 int ret;
4077 ret = setns(0, 0);
4078 ret = unshare(0);
4079 return ret;
4082 if compile_prog "" "" ; then
4083 setns=yes
4086 # clock_adjtime probe
4087 clock_adjtime=no
4088 cat > $TMPC <<EOF
4089 #include <time.h>
4091 int main(void)
4093 return clock_adjtime(0, 0);
4096 clock_adjtime=no
4097 if compile_prog "" "" ; then
4098 clock_adjtime=yes
4101 # syncfs probe
4102 syncfs=no
4103 cat > $TMPC <<EOF
4104 #include <unistd.h>
4106 int main(void)
4108 return syncfs(0);
4111 syncfs=no
4112 if compile_prog "" "" ; then
4113 syncfs=yes
4116 # Check if tools are available to build documentation.
4117 if test "$docs" != "no" ; then
4118 if has makeinfo && has pod2man; then
4119 docs=yes
4120 else
4121 if test "$docs" = "yes" ; then
4122 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4124 docs=no
4128 # Search for bswap_32 function
4129 byteswap_h=no
4130 cat > $TMPC << EOF
4131 #include <byteswap.h>
4132 int main(void) { return bswap_32(0); }
4134 if compile_prog "" "" ; then
4135 byteswap_h=yes
4138 # Search for bswap32 function
4139 bswap_h=no
4140 cat > $TMPC << EOF
4141 #include <sys/endian.h>
4142 #include <sys/types.h>
4143 #include <machine/bswap.h>
4144 int main(void) { return bswap32(0); }
4146 if compile_prog "" "" ; then
4147 bswap_h=yes
4150 ##########################################
4151 # Do we have libiscsi >= 1.9.0
4152 if test "$libiscsi" != "no" ; then
4153 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4154 libiscsi="yes"
4155 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4156 libiscsi_libs=$($pkg_config --libs libiscsi)
4157 else
4158 if test "$libiscsi" = "yes" ; then
4159 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4161 libiscsi="no"
4165 ##########################################
4166 # Do we need libm
4167 cat > $TMPC << EOF
4168 #include <math.h>
4169 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4171 if compile_prog "" "" ; then
4173 elif compile_prog "" "-lm" ; then
4174 LIBS="-lm $LIBS"
4175 libs_qga="-lm $libs_qga"
4176 else
4177 error_exit "libm check failed"
4180 ##########################################
4181 # Do we need librt
4182 # uClibc provides 2 versions of clock_gettime(), one with realtime
4183 # support and one without. This means that the clock_gettime() don't
4184 # need -lrt. We still need it for timer_create() so we check for this
4185 # function in addition.
4186 cat > $TMPC <<EOF
4187 #include <signal.h>
4188 #include <time.h>
4189 int main(void) {
4190 timer_create(CLOCK_REALTIME, NULL, NULL);
4191 return clock_gettime(CLOCK_REALTIME, NULL);
4195 if compile_prog "" "" ; then
4197 # we need pthread for static linking. use previous pthread test result
4198 elif compile_prog "" "$pthread_lib -lrt" ; then
4199 LIBS="$LIBS -lrt"
4200 libs_qga="$libs_qga -lrt"
4203 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4204 "$haiku" != "yes" ; then
4205 libs_softmmu="-lutil $libs_softmmu"
4208 ##########################################
4209 # spice probe
4210 if test "$spice" != "no" ; then
4211 cat > $TMPC << EOF
4212 #include <spice.h>
4213 int main(void) { spice_server_new(); return 0; }
4215 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4216 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4217 if $pkg_config --atleast-version=0.12.0 spice-server && \
4218 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4219 compile_prog "$spice_cflags" "$spice_libs" ; then
4220 spice="yes"
4221 libs_softmmu="$libs_softmmu $spice_libs"
4222 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4223 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4224 spice_server_version=$($pkg_config --modversion spice-server)
4225 else
4226 if test "$spice" = "yes" ; then
4227 feature_not_found "spice" \
4228 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4230 spice="no"
4234 # check for smartcard support
4235 if test "$smartcard" != "no"; then
4236 if $pkg_config libcacard; then
4237 libcacard_cflags=$($pkg_config --cflags libcacard)
4238 libcacard_libs=$($pkg_config --libs libcacard)
4239 smartcard="yes"
4240 else
4241 if test "$smartcard" = "yes"; then
4242 feature_not_found "smartcard" "Install libcacard devel"
4244 smartcard="no"
4248 # check for libusb
4249 if test "$libusb" != "no" ; then
4250 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4251 libusb="yes"
4252 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4253 libusb_libs=$($pkg_config --libs libusb-1.0)
4254 else
4255 if test "$libusb" = "yes"; then
4256 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4258 libusb="no"
4262 # check for usbredirparser for usb network redirection support
4263 if test "$usb_redir" != "no" ; then
4264 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4265 usb_redir="yes"
4266 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4267 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4268 else
4269 if test "$usb_redir" = "yes"; then
4270 feature_not_found "usb-redir" "Install usbredir devel"
4272 usb_redir="no"
4276 ##########################################
4277 # check if we have VSS SDK headers for win
4279 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4280 case "$vss_win32_sdk" in
4281 "") vss_win32_include="-isystem $source_path" ;;
4282 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4283 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4284 vss_win32_include="-isystem $source_path/.sdk/vss"
4285 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4287 *) vss_win32_include="-isystem $vss_win32_sdk"
4288 esac
4289 cat > $TMPC << EOF
4290 #define __MIDL_user_allocate_free_DEFINED__
4291 #include <inc/win2003/vss.h>
4292 int main(void) { return VSS_CTX_BACKUP; }
4294 if compile_prog "$vss_win32_include" "" ; then
4295 guest_agent_with_vss="yes"
4296 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4297 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4298 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4299 else
4300 if test "$vss_win32_sdk" != "" ; then
4301 echo "ERROR: Please download and install Microsoft VSS SDK:"
4302 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4303 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4304 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4305 echo "ERROR: The headers are extracted in the directory \`inc'."
4306 feature_not_found "VSS support"
4308 guest_agent_with_vss="no"
4312 ##########################################
4313 # lookup Windows platform SDK (if not specified)
4314 # The SDK is needed only to build .tlb (type library) file of guest agent
4315 # VSS provider from the source. It is usually unnecessary because the
4316 # pre-compiled .tlb file is included.
4318 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4319 if test -z "$win_sdk"; then
4320 programfiles="$PROGRAMFILES"
4321 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4322 if test -n "$programfiles"; then
4323 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4324 else
4325 feature_not_found "Windows SDK"
4327 elif test "$win_sdk" = "no"; then
4328 win_sdk=""
4332 ##########################################
4333 # check if mingw environment provides a recent ntddscsi.h
4334 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4335 cat > $TMPC << EOF
4336 #include <windows.h>
4337 #include <ntddscsi.h>
4338 int main(void) {
4339 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4340 #error Missing required ioctl definitions
4341 #endif
4342 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4343 return addr.Lun;
4346 if compile_prog "" "" ; then
4347 guest_agent_ntddscsi=yes
4348 libs_qga="-lsetupapi $libs_qga"
4352 ##########################################
4353 # virgl renderer probe
4355 if test "$virglrenderer" != "no" ; then
4356 cat > $TMPC << EOF
4357 #include <virglrenderer.h>
4358 int main(void) { virgl_renderer_poll(); return 0; }
4360 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4361 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4362 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4363 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4364 virglrenderer="yes"
4365 else
4366 if test "$virglrenderer" = "yes" ; then
4367 feature_not_found "virglrenderer"
4369 virglrenderer="no"
4373 ##########################################
4374 # check if we have fdatasync
4376 fdatasync=no
4377 cat > $TMPC << EOF
4378 #include <unistd.h>
4379 int main(void) {
4380 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4381 return fdatasync(0);
4382 #else
4383 #error Not supported
4384 #endif
4387 if compile_prog "" "" ; then
4388 fdatasync=yes
4391 ##########################################
4392 # check if we have madvise
4394 madvise=no
4395 cat > $TMPC << EOF
4396 #include <sys/types.h>
4397 #include <sys/mman.h>
4398 #include <stddef.h>
4399 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4401 if compile_prog "" "" ; then
4402 madvise=yes
4405 ##########################################
4406 # check if we have posix_madvise
4408 posix_madvise=no
4409 cat > $TMPC << EOF
4410 #include <sys/mman.h>
4411 #include <stddef.h>
4412 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4414 if compile_prog "" "" ; then
4415 posix_madvise=yes
4418 ##########################################
4419 # check if we have posix_syslog
4421 posix_syslog=no
4422 cat > $TMPC << EOF
4423 #include <syslog.h>
4424 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4426 if compile_prog "" "" ; then
4427 posix_syslog=yes
4430 ##########################################
4431 # check if we have sem_timedwait
4433 sem_timedwait=no
4434 cat > $TMPC << EOF
4435 #include <semaphore.h>
4436 int main(void) { return sem_timedwait(0, 0); }
4438 if compile_prog "" "" ; then
4439 sem_timedwait=yes
4442 ##########################################
4443 # check if trace backend exists
4445 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4446 if test "$?" -ne 0 ; then
4447 error_exit "invalid trace backends" \
4448 "Please choose supported trace backends."
4451 ##########################################
4452 # For 'ust' backend, test if ust headers are present
4453 if have_backend "ust"; then
4454 cat > $TMPC << EOF
4455 #include <lttng/tracepoint.h>
4456 int main(void) { return 0; }
4458 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4459 if $pkg_config lttng-ust --exists; then
4460 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4461 else
4462 lttng_ust_libs="-llttng-ust -ldl"
4464 if $pkg_config liburcu-bp --exists; then
4465 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4466 else
4467 urcu_bp_libs="-lurcu-bp"
4470 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4471 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4472 else
4473 error_exit "Trace backend 'ust' missing lttng-ust header files"
4477 ##########################################
4478 # For 'dtrace' backend, test if 'dtrace' command is present
4479 if have_backend "dtrace"; then
4480 if ! has 'dtrace' ; then
4481 error_exit "dtrace command is not found in PATH $PATH"
4483 trace_backend_stap="no"
4484 if has 'stap' ; then
4485 trace_backend_stap="yes"
4489 ##########################################
4490 # check and set a backend for coroutine
4492 # We prefer ucontext, but it's not always possible. The fallback
4493 # is sigcontext. On Windows the only valid backend is the Windows
4494 # specific one.
4496 ucontext_works=no
4497 if test "$darwin" != "yes"; then
4498 cat > $TMPC << EOF
4499 #include <ucontext.h>
4500 #ifdef __stub_makecontext
4501 #error Ignoring glibc stub makecontext which will always fail
4502 #endif
4503 int main(void) { makecontext(0, 0, 0); return 0; }
4505 if compile_prog "" "" ; then
4506 ucontext_works=yes
4510 if test "$coroutine" = ""; then
4511 if test "$mingw32" = "yes"; then
4512 coroutine=win32
4513 elif test "$ucontext_works" = "yes"; then
4514 coroutine=ucontext
4515 else
4516 coroutine=sigaltstack
4518 else
4519 case $coroutine in
4520 windows)
4521 if test "$mingw32" != "yes"; then
4522 error_exit "'windows' coroutine backend only valid for Windows"
4524 # Unfortunately the user visible backend name doesn't match the
4525 # coroutine-*.c filename for this case, so we have to adjust it here.
4526 coroutine=win32
4528 ucontext)
4529 if test "$ucontext_works" != "yes"; then
4530 feature_not_found "ucontext"
4533 sigaltstack)
4534 if test "$mingw32" = "yes"; then
4535 error_exit "only the 'windows' coroutine backend is valid for Windows"
4539 error_exit "unknown coroutine backend $coroutine"
4541 esac
4544 if test "$coroutine_pool" = ""; then
4545 coroutine_pool=yes
4548 if test "$debug_stack_usage" = "yes"; then
4549 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4550 error_exit "stack usage debugging is not supported for $cpu"
4552 if test "$coroutine_pool" = "yes"; then
4553 echo "WARN: disabling coroutine pool for stack usage debugging"
4554 coroutine_pool=no
4559 ##########################################
4560 # check if we have open_by_handle_at
4562 open_by_handle_at=no
4563 cat > $TMPC << EOF
4564 #include <fcntl.h>
4565 #if !defined(AT_EMPTY_PATH)
4566 # error missing definition
4567 #else
4568 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4569 #endif
4571 if compile_prog "" "" ; then
4572 open_by_handle_at=yes
4575 ########################################
4576 # check if we have linux/magic.h
4578 linux_magic_h=no
4579 cat > $TMPC << EOF
4580 #include <linux/magic.h>
4581 int main(void) {
4582 return 0;
4585 if compile_prog "" "" ; then
4586 linux_magic_h=yes
4589 ########################################
4590 # check whether we can disable warning option with a pragma (this is needed
4591 # to silence warnings in the headers of some versions of external libraries).
4592 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4593 # only a warning.
4595 # If we can't selectively disable warning in the code, disable -Werror so that
4596 # the build doesn't fail anyway.
4598 pragma_disable_unused_but_set=no
4599 cat > $TMPC << EOF
4600 #pragma GCC diagnostic push
4601 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4602 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4603 #pragma GCC diagnostic pop
4605 int main(void) {
4606 return 0;
4609 if compile_prog "-Werror" "" ; then
4610 pragma_diagnostic_available=yes
4611 else
4612 werror=no
4615 ########################################
4616 # check if we have valgrind/valgrind.h
4618 valgrind_h=no
4619 cat > $TMPC << EOF
4620 #include <valgrind/valgrind.h>
4621 int main(void) {
4622 return 0;
4625 if compile_prog "" "" ; then
4626 valgrind_h=yes
4629 ########################################
4630 # check if environ is declared
4632 has_environ=no
4633 cat > $TMPC << EOF
4634 #include <unistd.h>
4635 int main(void) {
4636 environ = 0;
4637 return 0;
4640 if compile_prog "" "" ; then
4641 has_environ=yes
4644 ########################################
4645 # check if cpuid.h is usable.
4647 cat > $TMPC << EOF
4648 #include <cpuid.h>
4649 int main(void) {
4650 unsigned a, b, c, d;
4651 int max = __get_cpuid_max(0, 0);
4653 if (max >= 1) {
4654 __cpuid(1, a, b, c, d);
4657 if (max >= 7) {
4658 __cpuid_count(7, 0, a, b, c, d);
4661 return 0;
4664 if compile_prog "" "" ; then
4665 cpuid_h=yes
4668 ##########################################
4669 # avx2 optimization requirement check
4671 # There is no point enabling this if cpuid.h is not usable,
4672 # since we won't be able to select the new routines.
4674 if test $cpuid_h = yes; then
4675 cat > $TMPC << EOF
4676 #pragma GCC push_options
4677 #pragma GCC target("avx2")
4678 #include <cpuid.h>
4679 #include <immintrin.h>
4680 static int bar(void *a) {
4681 __m256i x = *(__m256i *)a;
4682 return _mm256_testz_si256(x, x);
4684 int main(int argc, char *argv[]) { return bar(argv[0]); }
4686 if compile_object "" ; then
4687 avx2_opt="yes"
4691 ########################################
4692 # check if __[u]int128_t is usable.
4694 int128=no
4695 cat > $TMPC << EOF
4696 #if defined(__clang_major__) && defined(__clang_minor__)
4697 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4698 # error __int128_t does not work in CLANG before 3.2
4699 # endif
4700 #endif
4701 __int128_t a;
4702 __uint128_t b;
4703 int main (void) {
4704 a = a + b;
4705 b = a * b;
4706 a = a * a;
4707 return 0;
4710 if compile_prog "" "" ; then
4711 int128=yes
4714 #########################################
4715 # See if 128-bit atomic operations are supported.
4717 atomic128=no
4718 if test "$int128" = "yes"; then
4719 cat > $TMPC << EOF
4720 int main(void)
4722 unsigned __int128 x = 0, y = 0;
4723 y = __atomic_load_16(&x, 0);
4724 __atomic_store_16(&x, y, 0);
4725 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4726 return 0;
4729 if compile_prog "" "" ; then
4730 atomic128=yes
4734 #########################################
4735 # See if 64-bit atomic operations are supported.
4736 # Note that without __atomic builtins, we can only
4737 # assume atomic loads/stores max at pointer size.
4739 cat > $TMPC << EOF
4740 #include <stdint.h>
4741 int main(void)
4743 uint64_t x = 0, y = 0;
4744 #ifdef __ATOMIC_RELAXED
4745 y = __atomic_load_8(&x, 0);
4746 __atomic_store_8(&x, y, 0);
4747 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4748 __atomic_exchange_8(&x, y, 0);
4749 __atomic_fetch_add_8(&x, y, 0);
4750 #else
4751 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4752 __sync_lock_test_and_set(&x, y);
4753 __sync_val_compare_and_swap(&x, y, 0);
4754 __sync_fetch_and_add(&x, y);
4755 #endif
4756 return 0;
4759 if compile_prog "" "" ; then
4760 atomic64=yes
4763 ########################################
4764 # check if getauxval is available.
4766 getauxval=no
4767 cat > $TMPC << EOF
4768 #include <sys/auxv.h>
4769 int main(void) {
4770 return getauxval(AT_HWCAP) == 0;
4773 if compile_prog "" "" ; then
4774 getauxval=yes
4777 ########################################
4778 # check if ccache is interfering with
4779 # semantic analysis of macros
4781 unset CCACHE_CPP2
4782 ccache_cpp2=no
4783 cat > $TMPC << EOF
4784 static const int Z = 1;
4785 #define fn() ({ Z; })
4786 #define TAUT(X) ((X) == Z)
4787 #define PAREN(X, Y) (X == Y)
4788 #define ID(X) (X)
4789 int main(int argc, char *argv[])
4791 int x = 0, y = 0;
4792 x = ID(x);
4793 x = fn();
4794 fn();
4795 if (PAREN(x, y)) return 0;
4796 if (TAUT(Z)) return 0;
4797 return 0;
4801 if ! compile_object "-Werror"; then
4802 ccache_cpp2=yes
4805 #################################################
4806 # clang does not support glibc + FORTIFY_SOURCE.
4808 if test "$fortify_source" != "no"; then
4809 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4810 fortify_source="no";
4811 elif test -n "$cxx" && has $cxx &&
4812 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4813 fortify_source="no";
4814 else
4815 fortify_source="yes"
4819 ##########################################
4820 # check if struct fsxattr is available via linux/fs.h
4822 have_fsxattr=no
4823 cat > $TMPC << EOF
4824 #include <linux/fs.h>
4825 struct fsxattr foo;
4826 int main(void) {
4827 return 0;
4830 if compile_prog "" "" ; then
4831 have_fsxattr=yes
4834 ##########################################
4835 # check if rtnetlink.h exists and is useful
4836 have_rtnetlink=no
4837 cat > $TMPC << EOF
4838 #include <linux/rtnetlink.h>
4839 int main(void) {
4840 return IFLA_PROTO_DOWN;
4843 if compile_prog "" "" ; then
4844 have_rtnetlink=yes
4847 ##########################################
4848 # check for usable AF_VSOCK environment
4849 have_af_vsock=no
4850 cat > $TMPC << EOF
4851 #include <errno.h>
4852 #include <sys/types.h>
4853 #include <sys/socket.h>
4854 #if !defined(AF_VSOCK)
4855 # error missing AF_VSOCK flag
4856 #endif
4857 #include <linux/vm_sockets.h>
4858 int main(void) {
4859 int sock, ret;
4860 struct sockaddr_vm svm;
4861 socklen_t len = sizeof(svm);
4862 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4863 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4864 if ((ret == -1) && (errno == ENOTCONN)) {
4865 return 0;
4867 return -1;
4870 if compile_prog "" "" ; then
4871 have_af_vsock=yes
4874 ##########################################
4875 # check for usable AF_ALG environment
4876 hava_afalg=no
4877 cat > $TMPC << EOF
4878 #include <errno.h>
4879 #include <sys/types.h>
4880 #include <sys/socket.h>
4881 #include <linux/if_alg.h>
4882 int main(void) {
4883 int sock;
4884 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
4885 return sock;
4888 if compile_prog "" "" ; then
4889 have_afalg=yes
4891 if test "$crypto_afalg" = "yes"
4892 then
4893 if test "$have_afalg" != "yes"
4894 then
4895 error_exit "AF_ALG requested but could not be detected"
4900 #################################################
4901 # Sparc implicitly links with --relax, which is
4902 # incompatible with -r, so --no-relax should be
4903 # given. It does no harm to give it on other
4904 # platforms too.
4906 # Note: the prototype is needed since QEMU_CFLAGS
4907 # contains -Wmissing-prototypes
4908 cat > $TMPC << EOF
4909 extern int foo(void);
4910 int foo(void) { return 0; }
4912 if ! compile_object ""; then
4913 error_exit "Failed to compile object file for LD_REL_FLAGS test"
4915 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
4916 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
4917 LD_REL_FLAGS=$i
4918 break
4920 done
4921 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
4922 feature_not_found "modules" "Cannot find how to build relocatable objects"
4925 ##########################################
4926 # check for sysmacros.h
4928 have_sysmacros=no
4929 cat > $TMPC << EOF
4930 #include <sys/sysmacros.h>
4931 int main(void) {
4932 return makedev(0, 0);
4935 if compile_prog "" "" ; then
4936 have_sysmacros=yes
4939 ##########################################
4940 # Veritas HyperScale block driver VxHS
4941 # Check if libvxhs is installed
4943 if test "$vxhs" != "no" ; then
4944 cat > $TMPC <<EOF
4945 #include <stdint.h>
4946 #include <qnio/qnio_api.h>
4948 void *vxhs_callback;
4950 int main(void) {
4951 iio_init(QNIO_VERSION, vxhs_callback);
4952 return 0;
4955 vxhs_libs="-lvxhs -lssl"
4956 if compile_prog "" "$vxhs_libs" ; then
4957 vxhs=yes
4958 else
4959 if test "$vxhs" = "yes" ; then
4960 feature_not_found "vxhs block device" "Install libvxhs See github"
4962 vxhs=no
4966 ##########################################
4967 # check for _Static_assert()
4969 have_static_assert=no
4970 cat > $TMPC << EOF
4971 _Static_assert(1, "success");
4972 int main(void) {
4973 return 0;
4976 if compile_prog "" "" ; then
4977 have_static_assert=yes
4980 ##########################################
4981 # check for utmpx.h, it is missing e.g. on OpenBSD
4983 have_utmpx=no
4984 cat > $TMPC << EOF
4985 #include <utmpx.h>
4986 struct utmpx user_info;
4987 int main(void) {
4988 return 0;
4991 if compile_prog "" "" ; then
4992 have_utmpx=yes
4995 ##########################################
4996 # End of CC checks
4997 # After here, no more $cc or $ld runs
4999 if test "$gcov" = "yes" ; then
5000 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5001 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5002 elif test "$fortify_source" = "yes" ; then
5003 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5004 elif test "$debug" = "no"; then
5005 CFLAGS="-O2 $CFLAGS"
5008 ##########################################
5009 # Do we have libnfs
5010 if test "$libnfs" != "no" ; then
5011 if $pkg_config --atleast-version=1.9.3 libnfs; then
5012 libnfs="yes"
5013 libnfs_libs=$($pkg_config --libs libnfs)
5014 else
5015 if test "$libnfs" = "yes" ; then
5016 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5018 libnfs="no"
5022 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5023 if test "$werror" = "yes"; then
5024 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5027 if test "$solaris" = "no" ; then
5028 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5029 LDFLAGS="-Wl,--warn-common $LDFLAGS"
5033 # test if pod2man has --utf8 option
5034 if pod2man --help | grep -q utf8; then
5035 POD2MAN="pod2man --utf8"
5036 else
5037 POD2MAN="pod2man"
5040 # Use ASLR, no-SEH and DEP if available
5041 if test "$mingw32" = "yes" ; then
5042 for flag in --dynamicbase --no-seh --nxcompat; do
5043 if ld_has $flag ; then
5044 LDFLAGS="-Wl,$flag $LDFLAGS"
5046 done
5049 qemu_confdir=$sysconfdir$confsuffix
5050 qemu_moddir=$libdir$confsuffix
5051 qemu_datadir=$datadir$confsuffix
5052 qemu_localedir="$datadir/locale"
5054 # We can only support ivshmem if we have eventfd
5055 if [ "$eventfd" = "yes" ]; then
5056 ivshmem=yes
5059 tools=""
5060 if test "$want_tools" = "yes" ; then
5061 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
5062 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5063 tools="qemu-nbd\$(EXESUF) $tools"
5065 if [ "$ivshmem" = "yes" ]; then
5066 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5069 if test "$softmmu" = yes ; then
5070 if test "$linux" = yes; then
5071 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5072 virtfs=yes
5073 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5074 else
5075 if test "$virtfs" = yes; then
5076 error_exit "VirtFS requires libcap devel and libattr devel"
5078 virtfs=no
5080 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5081 mpath=yes
5082 else
5083 if test "$mpath" = yes; then
5084 error_exit "Multipath requires libmpathpersist devel"
5086 mpath=no
5088 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5089 else
5090 if test "$virtfs" = yes; then
5091 error_exit "VirtFS is supported only on Linux"
5093 virtfs=no
5094 if test "$mpath" = yes; then
5095 error_exit "Multipath is supported only on Linux"
5097 mpath=no
5101 # Probe for guest agent support/options
5103 if [ "$guest_agent" != "no" ]; then
5104 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5105 tools="qemu-ga $tools"
5106 guest_agent=yes
5107 elif [ "$guest_agent" != yes ]; then
5108 guest_agent=no
5109 else
5110 error_exit "Guest agent is not supported on this platform"
5114 # Guest agent Window MSI package
5116 if test "$guest_agent" != yes; then
5117 if test "$guest_agent_msi" = yes; then
5118 error_exit "MSI guest agent package requires guest agent enabled"
5120 guest_agent_msi=no
5121 elif test "$mingw32" != "yes"; then
5122 if test "$guest_agent_msi" = "yes"; then
5123 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5125 guest_agent_msi=no
5126 elif ! has wixl; then
5127 if test "$guest_agent_msi" = "yes"; then
5128 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5130 guest_agent_msi=no
5131 else
5132 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5133 # disabled explicitly
5134 if test "$guest_agent_msi" != "no"; then
5135 guest_agent_msi=yes
5139 if test "$guest_agent_msi" = "yes"; then
5140 if test "$guest_agent_with_vss" = "yes"; then
5141 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5144 if test "$QEMU_GA_MANUFACTURER" = ""; then
5145 QEMU_GA_MANUFACTURER=QEMU
5148 if test "$QEMU_GA_DISTRO" = ""; then
5149 QEMU_GA_DISTRO=Linux
5152 if test "$QEMU_GA_VERSION" = ""; then
5153 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5156 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5158 case "$cpu" in
5159 x86_64)
5160 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5162 i386)
5163 QEMU_GA_MSI_ARCH="-D Arch=32"
5166 error_exit "CPU $cpu not supported for building installation package"
5168 esac
5171 # Mac OS X ships with a broken assembler
5172 roms=
5173 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5174 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5175 "$softmmu" = yes ; then
5176 # Different host OS linkers have different ideas about the name of the ELF
5177 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
5178 # variant; and Windows uses i386pe.
5179 for emu in elf_i386 elf_i386_fbsd i386pe; do
5180 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5181 ld_i386_emulation="$emu"
5182 roms="optionrom"
5183 break
5185 done
5187 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5188 roms="$roms spapr-rtas"
5191 if test "$cpu" = "s390x" ; then
5192 roms="$roms s390-ccw"
5195 # Probe for the need for relocating the user-only binary.
5196 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5197 textseg_addr=
5198 case "$cpu" in
5199 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5200 # ??? Rationale for choosing this address
5201 textseg_addr=0x60000000
5203 mips)
5204 # A 256M aligned address, high in the address space, with enough
5205 # room for the code_gen_buffer above it before the stack.
5206 textseg_addr=0x60000000
5208 esac
5209 if [ -n "$textseg_addr" ]; then
5210 cat > $TMPC <<EOF
5211 int main(void) { return 0; }
5213 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5214 if ! compile_prog "" "$textseg_ldflags"; then
5215 # In case ld does not support -Ttext-segment, edit the default linker
5216 # script via sed to set the .text start addr. This is needed on FreeBSD
5217 # at least.
5218 if ! $ld --verbose >/dev/null 2>&1; then
5219 error_exit \
5220 "We need to link the QEMU user mode binaries at a" \
5221 "specific text address. Unfortunately your linker" \
5222 "doesn't support either the -Ttext-segment option or" \
5223 "printing the default linker script with --verbose." \
5224 "If you don't want the user mode binaries, pass the" \
5225 "--disable-user option to configure."
5228 $ld --verbose | sed \
5229 -e '1,/==================================================/d' \
5230 -e '/==================================================/,$d' \
5231 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5232 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5233 textseg_ldflags="-Wl,-T../config-host.ld"
5238 # Check that the C++ compiler exists and works with the C compiler.
5239 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5240 if has $cxx; then
5241 cat > $TMPC <<EOF
5242 int c_function(void);
5243 int main(void) { return c_function(); }
5246 compile_object
5248 cat > $TMPCXX <<EOF
5249 extern "C" {
5250 int c_function(void);
5252 int c_function(void) { return 42; }
5255 update_cxxflags
5257 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5258 # C++ compiler $cxx works ok with C compiler $cc
5260 else
5261 echo "C++ compiler $cxx does not work with C compiler $cc"
5262 echo "Disabling C++ specific optional code"
5263 cxx=
5265 else
5266 echo "No C++ compiler available; disabling C++ specific optional code"
5267 cxx=
5270 echo_version() {
5271 if test "$1" = "yes" ; then
5272 echo "($2)"
5276 # prepend pixman and ftd flags after all config tests are done
5277 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5278 libs_softmmu="$pixman_libs $libs_softmmu"
5280 echo "Install prefix $prefix"
5281 echo "BIOS directory $(eval echo $qemu_datadir)"
5282 echo "firmware path $(eval echo $firmwarepath)"
5283 echo "binary directory $(eval echo $bindir)"
5284 echo "library directory $(eval echo $libdir)"
5285 echo "module directory $(eval echo $qemu_moddir)"
5286 echo "libexec directory $(eval echo $libexecdir)"
5287 echo "include directory $(eval echo $includedir)"
5288 echo "config directory $(eval echo $sysconfdir)"
5289 if test "$mingw32" = "no" ; then
5290 echo "local state directory $(eval echo $local_statedir)"
5291 echo "Manual directory $(eval echo $mandir)"
5292 echo "ELF interp prefix $interp_prefix"
5293 else
5294 echo "local state directory queried at runtime"
5295 echo "Windows SDK $win_sdk"
5297 echo "Source path $source_path"
5298 echo "C compiler $cc"
5299 echo "Host C compiler $host_cc"
5300 echo "C++ compiler $cxx"
5301 echo "Objective-C compiler $objcc"
5302 echo "ARFLAGS $ARFLAGS"
5303 echo "CFLAGS $CFLAGS"
5304 echo "QEMU_CFLAGS $QEMU_CFLAGS"
5305 echo "LDFLAGS $LDFLAGS"
5306 echo "make $make"
5307 echo "install $install"
5308 echo "python $python"
5309 if test "$slirp" = "yes" ; then
5310 echo "smbd $smbd"
5312 echo "module support $modules"
5313 echo "host CPU $cpu"
5314 echo "host big endian $bigendian"
5315 echo "target list $target_list"
5316 echo "gprof enabled $gprof"
5317 echo "sparse enabled $sparse"
5318 echo "strip binaries $strip_opt"
5319 echo "profiler $profiler"
5320 echo "static build $static"
5321 if test "$darwin" = "yes" ; then
5322 echo "Cocoa support $cocoa"
5324 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5325 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
5326 echo "GTK GL support $gtk_gl"
5327 echo "VTE support $vte $(echo_version $vte $vteversion)"
5328 echo "TLS priority $tls_priority"
5329 echo "GNUTLS support $gnutls"
5330 echo "GNUTLS rnd $gnutls_rnd"
5331 echo "libgcrypt $gcrypt"
5332 echo "libgcrypt kdf $gcrypt_kdf"
5333 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
5334 echo "nettle kdf $nettle_kdf"
5335 echo "libtasn1 $tasn1"
5336 echo "curses support $curses"
5337 echo "virgl support $virglrenderer"
5338 echo "curl support $curl"
5339 echo "mingw32 support $mingw32"
5340 echo "Audio drivers $audio_drv_list"
5341 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5342 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5343 echo "VirtFS support $virtfs"
5344 echo "Multipath support $mpath"
5345 echo "VNC support $vnc"
5346 if test "$vnc" = "yes" ; then
5347 echo "VNC SASL support $vnc_sasl"
5348 echo "VNC JPEG support $vnc_jpeg"
5349 echo "VNC PNG support $vnc_png"
5351 if test -n "$sparc_cpu"; then
5352 echo "Target Sparc Arch $sparc_cpu"
5354 echo "xen support $xen"
5355 if test "$xen" = "yes" ; then
5356 echo "xen ctrl version $xen_ctrl_version"
5357 echo "pv dom build $xen_pv_domain_build"
5359 echo "brlapi support $brlapi"
5360 echo "bluez support $bluez"
5361 echo "Documentation $docs"
5362 echo "PIE $pie"
5363 echo "vde support $vde"
5364 echo "netmap support $netmap"
5365 echo "Linux AIO support $linux_aio"
5366 echo "ATTR/XATTR support $attr"
5367 echo "Install blobs $blobs"
5368 echo "KVM support $kvm"
5369 echo "HAX support $hax"
5370 echo "TCG support $tcg"
5371 if test "$tcg" = "yes" ; then
5372 echo "TCG debug enabled $debug_tcg"
5373 echo "TCG interpreter $tcg_interpreter"
5375 echo "RDMA support $rdma"
5376 echo "fdt support $fdt"
5377 echo "preadv support $preadv"
5378 echo "fdatasync $fdatasync"
5379 echo "madvise $madvise"
5380 echo "posix_madvise $posix_madvise"
5381 echo "libcap-ng support $cap_ng"
5382 echo "vhost-net support $vhost_net"
5383 echo "vhost-scsi support $vhost_scsi"
5384 echo "vhost-vsock support $vhost_vsock"
5385 echo "vhost-user support $vhost_user"
5386 echo "Trace backends $trace_backends"
5387 if have_backend "simple"; then
5388 echo "Trace output file $trace_file-<pid>"
5390 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5391 echo "rbd support $rbd"
5392 echo "xfsctl support $xfs"
5393 echo "smartcard support $smartcard"
5394 echo "libusb $libusb"
5395 echo "usb net redir $usb_redir"
5396 echo "OpenGL support $opengl"
5397 echo "OpenGL dmabufs $opengl_dmabuf"
5398 echo "libiscsi support $libiscsi"
5399 echo "libnfs support $libnfs"
5400 echo "build guest agent $guest_agent"
5401 echo "QGA VSS support $guest_agent_with_vss"
5402 echo "QGA w32 disk info $guest_agent_ntddscsi"
5403 echo "QGA MSI support $guest_agent_msi"
5404 echo "seccomp support $seccomp"
5405 echo "coroutine backend $coroutine"
5406 echo "coroutine pool $coroutine_pool"
5407 echo "debug stack usage $debug_stack_usage"
5408 echo "crypto afalg $crypto_afalg"
5409 echo "GlusterFS support $glusterfs"
5410 echo "gcov $gcov_tool"
5411 echo "gcov enabled $gcov"
5412 echo "TPM support $tpm"
5413 echo "libssh2 support $libssh2"
5414 echo "TPM passthrough $tpm_passthrough"
5415 echo "QOM debugging $qom_cast_debug"
5416 echo "Live block migration $live_block_migration"
5417 echo "lzo support $lzo"
5418 echo "snappy support $snappy"
5419 echo "bzip2 support $bzip2"
5420 echo "NUMA host support $numa"
5421 echo "tcmalloc support $tcmalloc"
5422 echo "jemalloc support $jemalloc"
5423 echo "avx2 optimization $avx2_opt"
5424 echo "replication support $replication"
5425 echo "VxHS block device $vxhs"
5427 if test "$sdl_too_old" = "yes"; then
5428 echo "-> Your SDL version is too old - please upgrade to have SDL support"
5431 if test "$supported_cpu" = "no"; then
5432 echo
5433 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5434 echo
5435 echo "CPU host architecture $cpu support is not currently maintained."
5436 echo "The QEMU project intends to remove support for this host CPU in"
5437 echo "a future release if nobody volunteers to maintain it and to"
5438 echo "provide a build host for our continuous integration setup."
5439 echo "configure has succeeded and you can continue to build, but"
5440 echo "if you care about QEMU on this platform you should contact"
5441 echo "us upstream at qemu-devel@nongnu.org."
5444 if test "$supported_os" = "no"; then
5445 echo
5446 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5447 echo
5448 echo "Host OS $targetos support is not currently maintained."
5449 echo "The QEMU project intends to remove support for this host OS in"
5450 echo "a future release if nobody volunteers to maintain it and to"
5451 echo "provide a build host for our continuous integration setup."
5452 echo "configure has succeeded and you can continue to build, but"
5453 echo "if you care about QEMU on this platform you should contact"
5454 echo "us upstream at qemu-devel@nongnu.org."
5457 config_host_mak="config-host.mak"
5459 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5461 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5462 echo >> $config_host_mak
5464 echo all: >> $config_host_mak
5465 echo "prefix=$prefix" >> $config_host_mak
5466 echo "bindir=$bindir" >> $config_host_mak
5467 echo "libdir=$libdir" >> $config_host_mak
5468 echo "libexecdir=$libexecdir" >> $config_host_mak
5469 echo "includedir=$includedir" >> $config_host_mak
5470 echo "mandir=$mandir" >> $config_host_mak
5471 echo "sysconfdir=$sysconfdir" >> $config_host_mak
5472 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5473 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5474 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
5475 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5476 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5477 if test "$mingw32" = "no" ; then
5478 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5480 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5481 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5482 echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
5483 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5484 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5485 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5487 echo "ARCH=$ARCH" >> $config_host_mak
5489 if test "$debug_tcg" = "yes" ; then
5490 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5492 if test "$strip_opt" = "yes" ; then
5493 echo "STRIP=${strip}" >> $config_host_mak
5495 if test "$bigendian" = "yes" ; then
5496 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5498 if test "$mingw32" = "yes" ; then
5499 echo "CONFIG_WIN32=y" >> $config_host_mak
5500 rc_version=$(cat $source_path/VERSION)
5501 version_major=${rc_version%%.*}
5502 rc_version=${rc_version#*.}
5503 version_minor=${rc_version%%.*}
5504 rc_version=${rc_version#*.}
5505 version_subminor=${rc_version%%.*}
5506 version_micro=0
5507 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5508 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5509 if test "$guest_agent_with_vss" = "yes" ; then
5510 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5511 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5512 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5514 if test "$guest_agent_ntddscsi" = "yes" ; then
5515 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5517 if test "$guest_agent_msi" = "yes"; then
5518 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5519 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5520 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5521 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5522 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5523 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5524 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5526 else
5527 echo "CONFIG_POSIX=y" >> $config_host_mak
5530 if test "$linux" = "yes" ; then
5531 echo "CONFIG_LINUX=y" >> $config_host_mak
5534 if test "$darwin" = "yes" ; then
5535 echo "CONFIG_DARWIN=y" >> $config_host_mak
5538 if test "$solaris" = "yes" ; then
5539 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5541 if test "$haiku" = "yes" ; then
5542 echo "CONFIG_HAIKU=y" >> $config_host_mak
5544 if test "$static" = "yes" ; then
5545 echo "CONFIG_STATIC=y" >> $config_host_mak
5547 if test "$profiler" = "yes" ; then
5548 echo "CONFIG_PROFILER=y" >> $config_host_mak
5550 if test "$slirp" = "yes" ; then
5551 echo "CONFIG_SLIRP=y" >> $config_host_mak
5552 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5554 if test "$vde" = "yes" ; then
5555 echo "CONFIG_VDE=y" >> $config_host_mak
5556 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5558 if test "$netmap" = "yes" ; then
5559 echo "CONFIG_NETMAP=y" >> $config_host_mak
5561 if test "$l2tpv3" = "yes" ; then
5562 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5564 if test "$cap_ng" = "yes" ; then
5565 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5567 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5568 for drv in $audio_drv_list; do
5569 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5570 echo "$def=y" >> $config_host_mak
5571 done
5572 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5573 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5574 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5575 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5576 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
5577 if test "$audio_pt_int" = "yes" ; then
5578 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5580 if test "$audio_win_int" = "yes" ; then
5581 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5583 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5584 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5585 if test "$vnc" = "yes" ; then
5586 echo "CONFIG_VNC=y" >> $config_host_mak
5588 if test "$vnc_sasl" = "yes" ; then
5589 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5591 if test "$vnc_jpeg" = "yes" ; then
5592 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5594 if test "$vnc_png" = "yes" ; then
5595 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5597 if test "$fnmatch" = "yes" ; then
5598 echo "CONFIG_FNMATCH=y" >> $config_host_mak
5600 if test "$xfs" = "yes" ; then
5601 echo "CONFIG_XFS=y" >> $config_host_mak
5603 qemu_version=$(head $source_path/VERSION)
5604 echo "VERSION=$qemu_version" >>$config_host_mak
5605 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5606 echo "SRC_PATH=$source_path" >> $config_host_mak
5607 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5608 if [ "$docs" = "yes" ] ; then
5609 echo "BUILD_DOCS=yes" >> $config_host_mak
5611 if test "$modules" = "yes"; then
5612 # $shacmd can generate a hash started with digit, which the compiler doesn't
5613 # like as an symbol. So prefix it with an underscore
5614 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5615 echo "CONFIG_MODULES=y" >> $config_host_mak
5617 if test "$sdl" = "yes" ; then
5618 echo "CONFIG_SDL=y" >> $config_host_mak
5619 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5620 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5621 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
5623 if test "$cocoa" = "yes" ; then
5624 echo "CONFIG_COCOA=y" >> $config_host_mak
5626 if test "$curses" = "yes" ; then
5627 echo "CONFIG_CURSES=y" >> $config_host_mak
5629 if test "$pipe2" = "yes" ; then
5630 echo "CONFIG_PIPE2=y" >> $config_host_mak
5632 if test "$accept4" = "yes" ; then
5633 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5635 if test "$splice" = "yes" ; then
5636 echo "CONFIG_SPLICE=y" >> $config_host_mak
5638 if test "$eventfd" = "yes" ; then
5639 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5641 if test "$memfd" = "yes" ; then
5642 echo "CONFIG_MEMFD=y" >> $config_host_mak
5644 if test "$fallocate" = "yes" ; then
5645 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5647 if test "$fallocate_punch_hole" = "yes" ; then
5648 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5650 if test "$fallocate_zero_range" = "yes" ; then
5651 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5653 if test "$posix_fallocate" = "yes" ; then
5654 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5656 if test "$sync_file_range" = "yes" ; then
5657 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5659 if test "$fiemap" = "yes" ; then
5660 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5662 if test "$dup3" = "yes" ; then
5663 echo "CONFIG_DUP3=y" >> $config_host_mak
5665 if test "$ppoll" = "yes" ; then
5666 echo "CONFIG_PPOLL=y" >> $config_host_mak
5668 if test "$prctl_pr_set_timerslack" = "yes" ; then
5669 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5671 if test "$epoll" = "yes" ; then
5672 echo "CONFIG_EPOLL=y" >> $config_host_mak
5674 if test "$epoll_create1" = "yes" ; then
5675 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5677 if test "$sendfile" = "yes" ; then
5678 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5680 if test "$timerfd" = "yes" ; then
5681 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5683 if test "$setns" = "yes" ; then
5684 echo "CONFIG_SETNS=y" >> $config_host_mak
5686 if test "$clock_adjtime" = "yes" ; then
5687 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5689 if test "$syncfs" = "yes" ; then
5690 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5692 if test "$inotify" = "yes" ; then
5693 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5695 if test "$inotify1" = "yes" ; then
5696 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5698 if test "$sem_timedwait" = "yes" ; then
5699 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5701 if test "$byteswap_h" = "yes" ; then
5702 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5704 if test "$bswap_h" = "yes" ; then
5705 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5707 if test "$curl" = "yes" ; then
5708 echo "CONFIG_CURL=m" >> $config_host_mak
5709 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5710 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5712 if test "$brlapi" = "yes" ; then
5713 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5714 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
5716 if test "$bluez" = "yes" ; then
5717 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5718 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5720 if test "$glib_subprocess" = "yes" ; then
5721 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5723 if test "$gtk" = "yes" ; then
5724 echo "CONFIG_GTK=y" >> $config_host_mak
5725 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5726 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5727 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5728 if test "$gtk_gl" = "yes" ; then
5729 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5732 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5733 if test "$gnutls" = "yes" ; then
5734 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5736 if test "$gnutls_rnd" = "yes" ; then
5737 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5739 if test "$gcrypt" = "yes" ; then
5740 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5741 if test "$gcrypt_hmac" = "yes" ; then
5742 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5744 if test "$gcrypt_kdf" = "yes" ; then
5745 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5748 if test "$nettle" = "yes" ; then
5749 echo "CONFIG_NETTLE=y" >> $config_host_mak
5750 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5751 if test "$nettle_kdf" = "yes" ; then
5752 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5755 if test "$tasn1" = "yes" ; then
5756 echo "CONFIG_TASN1=y" >> $config_host_mak
5758 if test "$have_ifaddrs_h" = "yes" ; then
5759 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5761 if test "$have_broken_size_max" = "yes" ; then
5762 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5765 # Work around a system header bug with some kernel/XFS header
5766 # versions where they both try to define 'struct fsxattr':
5767 # xfs headers will not try to redefine structs from linux headers
5768 # if this macro is set.
5769 if test "$have_fsxattr" = "yes" ; then
5770 echo "HAVE_FSXATTR=y" >> $config_host_mak
5772 if test "$vte" = "yes" ; then
5773 echo "CONFIG_VTE=y" >> $config_host_mak
5774 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5776 if test "$virglrenderer" = "yes" ; then
5777 echo "CONFIG_VIRGL=y" >> $config_host_mak
5778 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5779 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5781 if test "$xen" = "yes" ; then
5782 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5783 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5784 if test "$xen_pv_domain_build" = "yes" ; then
5785 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5788 if test "$linux_aio" = "yes" ; then
5789 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5791 if test "$attr" = "yes" ; then
5792 echo "CONFIG_ATTR=y" >> $config_host_mak
5794 if test "$libattr" = "yes" ; then
5795 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5797 if test "$virtfs" = "yes" ; then
5798 echo "CONFIG_VIRTFS=y" >> $config_host_mak
5800 if test "$mpath" = "yes" ; then
5801 echo "CONFIG_MPATH=y" >> $config_host_mak
5803 if test "$vhost_scsi" = "yes" ; then
5804 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5806 if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
5807 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5809 if test "$vhost_vsock" = "yes" ; then
5810 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5812 if test "$vhost_user" = "yes" ; then
5813 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5815 if test "$blobs" = "yes" ; then
5816 echo "INSTALL_BLOBS=yes" >> $config_host_mak
5818 if test "$iovec" = "yes" ; then
5819 echo "CONFIG_IOVEC=y" >> $config_host_mak
5821 if test "$preadv" = "yes" ; then
5822 echo "CONFIG_PREADV=y" >> $config_host_mak
5824 if test "$fdt" = "yes" ; then
5825 echo "CONFIG_FDT=y" >> $config_host_mak
5827 if test "$signalfd" = "yes" ; then
5828 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5830 if test "$tcg" = "yes"; then
5831 echo "CONFIG_TCG=y" >> $config_host_mak
5832 if test "$tcg_interpreter" = "yes" ; then
5833 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5836 if test "$fdatasync" = "yes" ; then
5837 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5839 if test "$madvise" = "yes" ; then
5840 echo "CONFIG_MADVISE=y" >> $config_host_mak
5842 if test "$posix_madvise" = "yes" ; then
5843 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5846 if test "$spice" = "yes" ; then
5847 echo "CONFIG_SPICE=y" >> $config_host_mak
5850 if test "$smartcard" = "yes" ; then
5851 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5852 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
5853 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
5856 if test "$libusb" = "yes" ; then
5857 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5858 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
5859 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
5862 if test "$usb_redir" = "yes" ; then
5863 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5864 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
5865 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
5868 if test "$opengl" = "yes" ; then
5869 echo "CONFIG_OPENGL=y" >> $config_host_mak
5870 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5871 if test "$opengl_dmabuf" = "yes" ; then
5872 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5876 if test "$avx2_opt" = "yes" ; then
5877 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5880 if test "$lzo" = "yes" ; then
5881 echo "CONFIG_LZO=y" >> $config_host_mak
5884 if test "$snappy" = "yes" ; then
5885 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5888 if test "$bzip2" = "yes" ; then
5889 echo "CONFIG_BZIP2=y" >> $config_host_mak
5890 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5893 if test "$libiscsi" = "yes" ; then
5894 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5895 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5896 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5899 if test "$libnfs" = "yes" ; then
5900 echo "CONFIG_LIBNFS=m" >> $config_host_mak
5901 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
5904 if test "$seccomp" = "yes"; then
5905 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5906 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
5907 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
5910 # XXX: suppress that
5911 if [ "$bsd" = "yes" ] ; then
5912 echo "CONFIG_BSD=y" >> $config_host_mak
5915 if test "$localtime_r" = "yes" ; then
5916 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5918 if test "$qom_cast_debug" = "yes" ; then
5919 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5921 if test "$rbd" = "yes" ; then
5922 echo "CONFIG_RBD=m" >> $config_host_mak
5923 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5924 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5927 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5928 if test "$coroutine_pool" = "yes" ; then
5929 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5930 else
5931 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5934 if test "$debug_stack_usage" = "yes" ; then
5935 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5938 if test "$crypto_afalg" = "yes" ; then
5939 echo "CONFIG_AF_ALG=y" >> $config_host_mak
5942 if test "$open_by_handle_at" = "yes" ; then
5943 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5946 if test "$linux_magic_h" = "yes" ; then
5947 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5950 if test "$pragma_diagnostic_available" = "yes" ; then
5951 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5954 if test "$valgrind_h" = "yes" ; then
5955 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5958 if test "$has_environ" = "yes" ; then
5959 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5962 if test "$cpuid_h" = "yes" ; then
5963 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5966 if test "$int128" = "yes" ; then
5967 echo "CONFIG_INT128=y" >> $config_host_mak
5970 if test "$atomic128" = "yes" ; then
5971 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5974 if test "$atomic64" = "yes" ; then
5975 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5978 if test "$getauxval" = "yes" ; then
5979 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5982 if test "$glusterfs" = "yes" ; then
5983 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5984 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5985 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5988 if test "$glusterfs_xlator_opt" = "yes" ; then
5989 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5992 if test "$glusterfs_discard" = "yes" ; then
5993 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5996 if test "$glusterfs_fallocate" = "yes" ; then
5997 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6000 if test "$glusterfs_zerofill" = "yes" ; then
6001 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6004 if test "$libssh2" = "yes" ; then
6005 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6006 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6007 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6010 if test "$live_block_migration" = "yes" ; then
6011 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6014 # TPM passthrough support?
6015 if test "$tpm" = "yes"; then
6016 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6017 if test "$tpm_passthrough" = "yes"; then
6018 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6022 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6023 if have_backend "nop"; then
6024 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6026 if have_backend "simple"; then
6027 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6028 # Set the appropriate trace file.
6029 trace_file="\"$trace_file-\" FMT_pid"
6031 if have_backend "log"; then
6032 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6034 if have_backend "ust"; then
6035 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6037 if have_backend "dtrace"; then
6038 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6039 if test "$trace_backend_stap" = "yes" ; then
6040 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6043 if have_backend "ftrace"; then
6044 if test "$linux" = "yes" ; then
6045 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6046 else
6047 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6050 if have_backend "syslog"; then
6051 if test "$posix_syslog" = "yes" ; then
6052 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6053 else
6054 feature_not_found "syslog(trace backend)" "syslog not available"
6057 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6059 if test "$rdma" = "yes" ; then
6060 echo "CONFIG_RDMA=y" >> $config_host_mak
6061 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6064 if test "$have_rtnetlink" = "yes" ; then
6065 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6068 if test "$replication" = "yes" ; then
6069 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6072 if test "$have_af_vsock" = "yes" ; then
6073 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6076 if test "$have_sysmacros" = "yes" ; then
6077 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6080 if test "$have_static_assert" = "yes" ; then
6081 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6084 if test "$have_utmpx" = "yes" ; then
6085 echo "HAVE_UTMPX=y" >> $config_host_mak
6088 if test "$ivshmem" = "yes" ; then
6089 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6092 # Hold two types of flag:
6093 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6094 # a thread we have a handle to
6095 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6096 # platform
6097 if test "$pthread_setname_np" = "yes" ; then
6098 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6099 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6102 if test "$vxhs" = "yes" ; then
6103 echo "CONFIG_VXHS=y" >> $config_host_mak
6104 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6107 if test "$tcg_interpreter" = "yes"; then
6108 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6109 elif test "$ARCH" = "sparc64" ; then
6110 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6111 elif test "$ARCH" = "s390x" ; then
6112 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6113 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6114 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6115 elif test "$ARCH" = "ppc64" ; then
6116 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6117 else
6118 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6120 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6122 echo "TOOLS=$tools" >> $config_host_mak
6123 echo "ROMS=$roms" >> $config_host_mak
6124 echo "MAKE=$make" >> $config_host_mak
6125 echo "INSTALL=$install" >> $config_host_mak
6126 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6127 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6128 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6129 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6130 echo "PYTHON=$python" >> $config_host_mak
6131 echo "CC=$cc" >> $config_host_mak
6132 if $iasl -h > /dev/null 2>&1; then
6133 echo "IASL=$iasl" >> $config_host_mak
6135 echo "CC_I386=$cc_i386" >> $config_host_mak
6136 echo "HOST_CC=$host_cc" >> $config_host_mak
6137 echo "CXX=$cxx" >> $config_host_mak
6138 echo "OBJCC=$objcc" >> $config_host_mak
6139 echo "AR=$ar" >> $config_host_mak
6140 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6141 echo "AS=$as" >> $config_host_mak
6142 echo "CCAS=$ccas" >> $config_host_mak
6143 echo "CPP=$cpp" >> $config_host_mak
6144 echo "OBJCOPY=$objcopy" >> $config_host_mak
6145 echo "LD=$ld" >> $config_host_mak
6146 echo "NM=$nm" >> $config_host_mak
6147 echo "WINDRES=$windres" >> $config_host_mak
6148 echo "CFLAGS=$CFLAGS" >> $config_host_mak
6149 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6150 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6151 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6152 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6153 if test "$sparse" = "yes" ; then
6154 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
6155 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
6156 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
6157 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6158 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6160 if test "$cross_prefix" != ""; then
6161 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6162 else
6163 echo "AUTOCONF_HOST := " >> $config_host_mak
6165 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6166 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6167 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6168 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6169 echo "LIBS+=$LIBS" >> $config_host_mak
6170 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6171 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6172 echo "EXESUF=$EXESUF" >> $config_host_mak
6173 echo "DSOSUF=$DSOSUF" >> $config_host_mak
6174 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6175 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6176 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6177 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6178 echo "POD2MAN=$POD2MAN" >> $config_host_mak
6179 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6180 if test "$gcov" = "yes" ; then
6181 echo "CONFIG_GCOV=y" >> $config_host_mak
6182 echo "GCOV=$gcov_tool" >> $config_host_mak
6185 # use included Linux headers
6186 if test "$linux" = "yes" ; then
6187 mkdir -p linux-headers
6188 case "$cpu" in
6189 i386|x86_64|x32)
6190 linux_arch=x86
6192 ppcemb|ppc|ppc64)
6193 linux_arch=powerpc
6195 s390x)
6196 linux_arch=s390
6198 aarch64)
6199 linux_arch=arm64
6201 mips64)
6202 linux_arch=mips
6205 # For most CPUs the kernel architecture name and QEMU CPU name match.
6206 linux_arch="$cpu"
6208 esac
6209 # For non-KVM architectures we will not have asm headers
6210 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6211 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6215 for target in $target_list; do
6216 target_dir="$target"
6217 config_target_mak=$target_dir/config-target.mak
6218 target_name=$(echo $target | cut -d '-' -f 1)
6219 target_bigendian="no"
6221 case "$target_name" in
6222 armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6223 target_bigendian=yes
6225 esac
6226 target_softmmu="no"
6227 target_user_only="no"
6228 target_linux_user="no"
6229 target_bsd_user="no"
6230 case "$target" in
6231 ${target_name}-softmmu)
6232 target_softmmu="yes"
6234 ${target_name}-linux-user)
6235 target_user_only="yes"
6236 target_linux_user="yes"
6238 ${target_name}-bsd-user)
6239 target_user_only="yes"
6240 target_bsd_user="yes"
6243 error_exit "Target '$target' not recognised"
6244 exit 1
6246 esac
6248 mkdir -p $target_dir
6249 echo "# Automatically generated by configure - do not modify" > $config_target_mak
6251 bflt="no"
6252 mttcg="no"
6253 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6254 gdb_xml_files=""
6256 TARGET_ARCH="$target_name"
6257 TARGET_BASE_ARCH=""
6258 TARGET_ABI_DIR=""
6260 case "$target_name" in
6261 i386)
6262 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6264 x86_64)
6265 TARGET_BASE_ARCH=i386
6266 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6268 alpha)
6269 mttcg="yes"
6271 arm|armeb)
6272 TARGET_ARCH=arm
6273 bflt="yes"
6274 mttcg="yes"
6275 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6277 aarch64)
6278 TARGET_BASE_ARCH=arm
6279 bflt="yes"
6280 mttcg="yes"
6281 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6283 cris)
6285 hppa)
6287 lm32)
6289 m68k)
6290 bflt="yes"
6291 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
6293 microblaze|microblazeel)
6294 TARGET_ARCH=microblaze
6295 bflt="yes"
6297 mips|mipsel)
6298 TARGET_ARCH=mips
6299 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6301 mipsn32|mipsn32el)
6302 TARGET_ARCH=mips64
6303 TARGET_BASE_ARCH=mips
6304 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6305 echo "TARGET_ABI32=y" >> $config_target_mak
6307 mips64|mips64el)
6308 TARGET_ARCH=mips64
6309 TARGET_BASE_ARCH=mips
6310 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6312 moxie)
6314 nios2)
6316 or1k)
6317 TARGET_ARCH=openrisc
6318 TARGET_BASE_ARCH=openrisc
6320 ppc)
6321 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6323 ppcemb)
6324 TARGET_BASE_ARCH=ppc
6325 TARGET_ABI_DIR=ppc
6326 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6328 ppc64)
6329 TARGET_BASE_ARCH=ppc
6330 TARGET_ABI_DIR=ppc
6331 mttcg=yes
6332 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6334 ppc64le)
6335 TARGET_ARCH=ppc64
6336 TARGET_BASE_ARCH=ppc
6337 TARGET_ABI_DIR=ppc
6338 mttcg=yes
6339 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6341 ppc64abi32)
6342 TARGET_ARCH=ppc64
6343 TARGET_BASE_ARCH=ppc
6344 TARGET_ABI_DIR=ppc
6345 echo "TARGET_ABI32=y" >> $config_target_mak
6346 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6348 sh4|sh4eb)
6349 TARGET_ARCH=sh4
6350 bflt="yes"
6352 sparc)
6354 sparc64)
6355 TARGET_BASE_ARCH=sparc
6357 sparc32plus)
6358 TARGET_ARCH=sparc64
6359 TARGET_BASE_ARCH=sparc
6360 TARGET_ABI_DIR=sparc
6361 echo "TARGET_ABI32=y" >> $config_target_mak
6363 s390x)
6364 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
6366 tilegx)
6368 tricore)
6370 unicore32)
6372 xtensa|xtensaeb)
6373 TARGET_ARCH=xtensa
6376 error_exit "Unsupported target CPU"
6378 esac
6379 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6380 if [ "$TARGET_BASE_ARCH" = "" ]; then
6381 TARGET_BASE_ARCH=$TARGET_ARCH
6384 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6386 upper() {
6387 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6390 target_arch_name="$(upper $TARGET_ARCH)"
6391 echo "TARGET_$target_arch_name=y" >> $config_target_mak
6392 echo "TARGET_NAME=$target_name" >> $config_target_mak
6393 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6394 if [ "$TARGET_ABI_DIR" = "" ]; then
6395 TARGET_ABI_DIR=$TARGET_ARCH
6397 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6398 if [ "$HOST_VARIANT_DIR" != "" ]; then
6399 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6402 if supported_xen_target $target; then
6403 echo "CONFIG_XEN=y" >> $config_target_mak
6404 if test "$xen_pci_passthrough" = yes; then
6405 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6408 if supported_kvm_target $target; then
6409 echo "CONFIG_KVM=y" >> $config_target_mak
6410 if test "$vhost_net" = "yes" ; then
6411 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6412 if test "$vhost_user" = "yes" ; then
6413 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6417 if supported_hax_target $target; then
6418 echo "CONFIG_HAX=y" >> $config_target_mak
6420 if test "$target_bigendian" = "yes" ; then
6421 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6423 if test "$target_softmmu" = "yes" ; then
6424 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6425 if test "$mttcg" = "yes" ; then
6426 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6429 if test "$target_user_only" = "yes" ; then
6430 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6431 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6433 if test "$target_linux_user" = "yes" ; then
6434 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6436 list=""
6437 if test ! -z "$gdb_xml_files" ; then
6438 for x in $gdb_xml_files; do
6439 list="$list $source_path/gdb-xml/$x"
6440 done
6441 echo "TARGET_XML_FILES=$list" >> $config_target_mak
6444 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6445 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6447 if test "$target_bsd_user" = "yes" ; then
6448 echo "CONFIG_BSD_USER=y" >> $config_target_mak
6451 # generate QEMU_CFLAGS/LDFLAGS for targets
6453 cflags=""
6454 ldflags=""
6456 disas_config() {
6457 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6458 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6461 for i in $ARCH $TARGET_BASE_ARCH ; do
6462 case "$i" in
6463 alpha)
6464 disas_config "ALPHA"
6466 aarch64)
6467 if test -n "${cxx}"; then
6468 disas_config "ARM_A64"
6471 arm)
6472 disas_config "ARM"
6473 if test -n "${cxx}"; then
6474 disas_config "ARM_A64"
6477 cris)
6478 disas_config "CRIS"
6480 hppa)
6481 disas_config "HPPA"
6483 i386|x86_64|x32)
6484 disas_config "I386"
6486 lm32)
6487 disas_config "LM32"
6489 m68k)
6490 disas_config "M68K"
6492 microblaze*)
6493 disas_config "MICROBLAZE"
6495 mips*)
6496 disas_config "MIPS"
6498 moxie*)
6499 disas_config "MOXIE"
6501 nios2)
6502 disas_config "NIOS2"
6504 or1k)
6505 disas_config "OPENRISC"
6507 ppc*)
6508 disas_config "PPC"
6510 s390*)
6511 disas_config "S390"
6513 sh4)
6514 disas_config "SH4"
6516 sparc*)
6517 disas_config "SPARC"
6519 xtensa*)
6520 disas_config "XTENSA"
6522 esac
6523 done
6524 if test "$tcg_interpreter" = "yes" ; then
6525 disas_config "TCI"
6528 case "$ARCH" in
6529 alpha)
6530 # Ensure there's only a single GP
6531 cflags="-msmall-data $cflags"
6533 esac
6535 if test "$gprof" = "yes" ; then
6536 echo "TARGET_GPROF=yes" >> $config_target_mak
6537 if test "$target_linux_user" = "yes" ; then
6538 cflags="-p $cflags"
6539 ldflags="-p $ldflags"
6541 if test "$target_softmmu" = "yes" ; then
6542 ldflags="-p $ldflags"
6543 echo "GPROF_CFLAGS=-p" >> $config_target_mak
6547 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6548 ldflags="$ldflags $textseg_ldflags"
6551 # Newer kernels on s390 check for an S390_PGSTE program header and
6552 # enable the pgste page table extensions in that case. This makes
6553 # the vm.allocate_pgste sysctl unnecessary. We enable this program
6554 # header if
6555 # - we build on s390x
6556 # - we build the system emulation for s390x (qemu-system-s390x)
6557 # - KVM is enabled
6558 # - the linker supports --s390-pgste
6559 if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
6560 if ld_has --s390-pgste ; then
6561 ldflags="-Wl,--s390-pgste $ldflags"
6565 echo "LDFLAGS+=$ldflags" >> $config_target_mak
6566 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6568 done # for target in $targets
6570 if [ "$dtc_internal" = "yes" ]; then
6571 echo "config-host.h: subdir-dtc" >> $config_host_mak
6574 if test "$numa" = "yes"; then
6575 echo "CONFIG_NUMA=y" >> $config_host_mak
6578 if test "$ccache_cpp2" = "yes"; then
6579 echo "export CCACHE_CPP2=y" >> $config_host_mak
6582 # build tree in object directory in case the source is not in the current directory
6583 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
6584 DIRS="$DIRS docs docs/interop fsdev scsi"
6585 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6586 DIRS="$DIRS roms/seabios roms/vgabios"
6587 DIRS="$DIRS qapi-generated"
6588 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6589 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6590 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6591 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6592 FILES="$FILES pc-bios/spapr-rtas/Makefile"
6593 FILES="$FILES pc-bios/s390-ccw/Makefile"
6594 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6595 FILES="$FILES pc-bios/qemu-icon.bmp"
6596 FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
6597 for bios_file in \
6598 $source_path/pc-bios/*.bin \
6599 $source_path/pc-bios/*.lid \
6600 $source_path/pc-bios/*.aml \
6601 $source_path/pc-bios/*.rom \
6602 $source_path/pc-bios/*.dtb \
6603 $source_path/pc-bios/*.img \
6604 $source_path/pc-bios/openbios-* \
6605 $source_path/pc-bios/u-boot.* \
6606 $source_path/pc-bios/palcode-*
6608 FILES="$FILES pc-bios/$(basename $bios_file)"
6609 done
6610 for test_file in $(find $source_path/tests/acpi-test-data -type f)
6612 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6613 done
6614 mkdir -p $DIRS
6615 for f in $FILES ; do
6616 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6617 symlink "$source_path/$f" "$f"
6619 done
6621 # temporary config to build submodules
6622 for rom in seabios vgabios ; do
6623 config_mak=roms/$rom/config.mak
6624 echo "# Automatically generated by configure - do not modify" > $config_mak
6625 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6626 echo "AS=$as" >> $config_mak
6627 echo "CCAS=$ccas" >> $config_mak
6628 echo "CC=$cc" >> $config_mak
6629 echo "BCC=bcc" >> $config_mak
6630 echo "CPP=$cpp" >> $config_mak
6631 echo "OBJCOPY=objcopy" >> $config_mak
6632 echo "IASL=$iasl" >> $config_mak
6633 echo "LD=$ld" >> $config_mak
6634 done
6636 # set up tests data directory
6637 if [ ! -e tests/data ]; then
6638 symlink "$source_path/tests/data" tests/data
6641 # set up qemu-iotests in this build directory
6642 iotests_common_env="tests/qemu-iotests/common.env"
6643 iotests_check="tests/qemu-iotests/check"
6645 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6646 echo >> "$iotests_common_env"
6647 echo "export PYTHON='$python'" >> "$iotests_common_env"
6649 if [ ! -e "$iotests_check" ]; then
6650 symlink "$source_path/$iotests_check" "$iotests_check"
6653 # Save the configure command line for later reuse.
6654 cat <<EOD >config.status
6655 #!/bin/sh
6656 # Generated by configure.
6657 # Run this file to recreate the current configuration.
6658 # Compiler output produced by configure, useful for debugging
6659 # configure, is in config.log if it exists.
6661 printf "exec" >>config.status
6662 printf " '%s'" "$0" "$@" >>config.status
6663 echo ' "$@"' >>config.status
6664 chmod +x config.status
6666 rm -r "$TMPDIR1"