cpu-exec: don't overwrite exception_index
[qemu/armbru.git] / configure
blobe31d6a7fee88900559fb2ccd1a94a784993d047d
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 if test -e "$source_path/.git"
269 then
270 git_submodules="ui/keycodemapdb"
271 else
272 git_submodules=""
275 # Don't accept a target_list environment variable.
276 unset target_list
278 # Default value for a variable defining feature "foo".
279 # * foo="no" feature will only be used if --enable-foo arg is given
280 # * foo="" feature will be searched for, and if found, will be used
281 # unless --disable-foo is given
282 # * foo="yes" this value will only be set by --enable-foo flag.
283 # feature will searched for,
284 # if not found, configure exits with error
286 # Always add --enable-foo and --disable-foo command line args.
287 # Distributions want to ensure that several features are compiled in, and it
288 # is impossible without a --enable-foo that exits if a feature is not found.
290 bluez=""
291 brlapi=""
292 curl=""
293 curses=""
294 docs=""
295 fdt=""
296 netmap="no"
297 sdl=""
298 sdlabi=""
299 virtfs=""
300 mpath=""
301 vnc="yes"
302 sparse="no"
303 vde=""
304 vnc_sasl=""
305 vnc_jpeg=""
306 vnc_png=""
307 xkbcommon=""
308 xen=""
309 xen_ctrl_version=""
310 xen_pv_domain_build="no"
311 xen_pci_passthrough=""
312 linux_aio=""
313 cap_ng=""
314 attr=""
315 libattr=""
316 xfs=""
317 tcg="yes"
319 vhost_net="no"
320 vhost_scsi="no"
321 vhost_vsock="no"
322 vhost_user=""
323 kvm="no"
324 hax="no"
325 rdma=""
326 gprof="no"
327 debug_tcg="no"
328 debug="no"
329 fortify_source=""
330 strip_opt="yes"
331 tcg_interpreter="no"
332 bigendian="no"
333 mingw32="no"
334 gcov="no"
335 gcov_tool="gcov"
336 EXESUF=""
337 DSOSUF=".so"
338 LDFLAGS_SHARED="-shared"
339 modules="no"
340 prefix="/usr/local"
341 mandir="\${prefix}/share/man"
342 datadir="\${prefix}/share"
343 firmwarepath="\${prefix}/share/qemu-firmware"
344 qemu_docdir="\${prefix}/share/doc/qemu"
345 bindir="\${prefix}/bin"
346 libdir="\${prefix}/lib"
347 libexecdir="\${prefix}/libexec"
348 includedir="\${prefix}/include"
349 sysconfdir="\${prefix}/etc"
350 local_statedir="\${prefix}/var"
351 confsuffix="/qemu"
352 slirp="yes"
353 oss_lib=""
354 bsd="no"
355 linux="no"
356 solaris="no"
357 profiler="no"
358 cocoa="no"
359 softmmu="yes"
360 linux_user="no"
361 bsd_user="no"
362 blobs="yes"
363 pkgversion=""
364 pie=""
365 qom_cast_debug="yes"
366 trace_backends="log"
367 trace_file="trace"
368 spice=""
369 rbd=""
370 smartcard=""
371 libusb=""
372 usb_redir=""
373 opengl=""
374 opengl_dmabuf="no"
375 cpuid_h="no"
376 avx2_opt="no"
377 zlib="yes"
378 capstone=""
379 lzo=""
380 snappy=""
381 bzip2=""
382 guest_agent=""
383 guest_agent_with_vss="no"
384 guest_agent_ntddscsi="no"
385 guest_agent_msi=""
386 vss_win32_sdk=""
387 win_sdk="no"
388 want_tools="yes"
389 libiscsi=""
390 libnfs=""
391 coroutine=""
392 coroutine_pool=""
393 debug_stack_usage="no"
394 crypto_afalg="no"
395 seccomp=""
396 glusterfs=""
397 glusterfs_xlator_opt="no"
398 glusterfs_discard="no"
399 glusterfs_fallocate="no"
400 glusterfs_zerofill="no"
401 gtk=""
402 gtkabi=""
403 gtk_gl="no"
404 tls_priority="NORMAL"
405 gnutls=""
406 gnutls_rnd=""
407 nettle=""
408 nettle_kdf="no"
409 gcrypt=""
410 gcrypt_hmac="no"
411 gcrypt_kdf="no"
412 vte=""
413 virglrenderer=""
414 tpm="yes"
415 libssh2=""
416 live_block_migration="yes"
417 numa=""
418 tcmalloc="no"
419 jemalloc="no"
420 replication="yes"
421 vxhs=""
423 supported_cpu="no"
424 supported_os="no"
425 bogus_os="no"
427 # parse CC options first
428 for opt do
429 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
430 case "$opt" in
431 --cross-prefix=*) cross_prefix="$optarg"
433 --cc=*) CC="$optarg"
435 --cxx=*) CXX="$optarg"
437 --source-path=*) source_path="$optarg"
439 --cpu=*) cpu="$optarg"
441 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
442 EXTRA_CFLAGS="$optarg"
444 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
445 EXTRA_CXXFLAGS="$optarg"
447 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
448 EXTRA_LDFLAGS="$optarg"
450 --enable-debug-info) debug_info="yes"
452 --disable-debug-info) debug_info="no"
454 esac
455 done
456 # OS specific
457 # Using uname is really, really broken. Once we have the right set of checks
458 # we can eliminate its usage altogether.
460 # Preferred compiler:
461 # ${CC} (if set)
462 # ${cross_prefix}gcc (if cross-prefix specified)
463 # system compiler
464 if test -z "${CC}${cross_prefix}"; then
465 cc="$host_cc"
466 else
467 cc="${CC-${cross_prefix}gcc}"
470 if test -z "${CXX}${cross_prefix}"; then
471 cxx="c++"
472 else
473 cxx="${CXX-${cross_prefix}g++}"
476 ar="${AR-${cross_prefix}ar}"
477 as="${AS-${cross_prefix}as}"
478 ccas="${CCAS-$cc}"
479 cpp="${CPP-$cc -E}"
480 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
481 ld="${LD-${cross_prefix}ld}"
482 nm="${NM-${cross_prefix}nm}"
483 strip="${STRIP-${cross_prefix}strip}"
484 windres="${WINDRES-${cross_prefix}windres}"
485 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
486 query_pkg_config() {
487 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
489 pkg_config=query_pkg_config
490 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
491 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
493 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
494 ARFLAGS="${ARFLAGS-rv}"
496 # default flags for all hosts
497 # We use -fwrapv to tell the compiler that we require a C dialect where
498 # left shift of signed integers is well defined and has the expected
499 # 2s-complement style results. (Both clang and gcc agree that it
500 # provides these semantics.)
501 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
502 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
503 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
504 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
505 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/accel/tcg -I\$(SRC_PATH)/include"
506 if test "$debug_info" = "yes"; then
507 CFLAGS="-g $CFLAGS"
508 LDFLAGS="-g $LDFLAGS"
511 # make source path absolute
512 source_path=$(cd "$source_path"; pwd)
514 # running configure in the source tree?
515 # we know that's the case if configure is there.
516 if test -f "./configure"; then
517 pwd_is_source_path="y"
518 else
519 pwd_is_source_path="n"
522 check_define() {
523 cat > $TMPC <<EOF
524 #if !defined($1)
525 #error $1 not defined
526 #endif
527 int main(void) { return 0; }
529 compile_object
532 check_include() {
533 cat > $TMPC <<EOF
534 #include <$1>
535 int main(void) { return 0; }
537 compile_object
540 write_c_skeleton() {
541 cat > $TMPC <<EOF
542 int main(void) { return 0; }
546 if check_define __linux__ ; then
547 targetos="Linux"
548 elif check_define _WIN32 ; then
549 targetos='MINGW32'
550 elif check_define __OpenBSD__ ; then
551 targetos='OpenBSD'
552 elif check_define __sun__ ; then
553 targetos='SunOS'
554 elif check_define __HAIKU__ ; then
555 targetos='Haiku'
556 elif check_define __FreeBSD__ ; then
557 targetos='FreeBSD'
558 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
559 targetos='GNU/kFreeBSD'
560 elif check_define __DragonFly__ ; then
561 targetos='DragonFly'
562 elif check_define __NetBSD__; then
563 targetos='NetBSD'
564 elif check_define __APPLE__; then
565 targetos='Darwin'
566 else
567 # This is a fatal error, but don't report it yet, because we
568 # might be going to just print the --help text, or it might
569 # be the result of a missing compiler.
570 targetos='bogus'
571 bogus_os='yes'
574 # Some host OSes need non-standard checks for which CPU to use.
575 # Note that these checks are broken for cross-compilation: if you're
576 # cross-compiling to one of these OSes then you'll need to specify
577 # the correct CPU with the --cpu option.
578 case $targetos in
579 Darwin)
580 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
581 # run 64-bit userspace code.
582 # If the user didn't specify a CPU explicitly and the kernel says this is
583 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
584 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
585 cpu="x86_64"
588 SunOS)
589 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
590 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
591 cpu="x86_64"
593 esac
595 if test ! -z "$cpu" ; then
596 # command line argument
598 elif check_define __i386__ ; then
599 cpu="i386"
600 elif check_define __x86_64__ ; then
601 if check_define __ILP32__ ; then
602 cpu="x32"
603 else
604 cpu="x86_64"
606 elif check_define __sparc__ ; then
607 if check_define __arch64__ ; then
608 cpu="sparc64"
609 else
610 cpu="sparc"
612 elif check_define _ARCH_PPC ; then
613 if check_define _ARCH_PPC64 ; then
614 cpu="ppc64"
615 else
616 cpu="ppc"
618 elif check_define __mips__ ; then
619 cpu="mips"
620 elif check_define __ia64__ ; then
621 cpu="ia64"
622 elif check_define __s390__ ; then
623 if check_define __s390x__ ; then
624 cpu="s390x"
625 else
626 cpu="s390"
628 elif check_define __arm__ ; then
629 cpu="arm"
630 elif check_define __aarch64__ ; then
631 cpu="aarch64"
632 else
633 cpu=$(uname -m)
636 ARCH=
637 # Normalise host CPU name and set ARCH.
638 # Note that this case should only have supported host CPUs, not guests.
639 case "$cpu" in
640 ppc|ppc64|s390|s390x|sparc64|x32)
641 cpu="$cpu"
642 supported_cpu="yes"
644 i386|i486|i586|i686|i86pc|BePC)
645 cpu="i386"
646 supported_cpu="yes"
648 x86_64|amd64)
649 cpu="x86_64"
650 supported_cpu="yes"
652 armv*b|armv*l|arm)
653 cpu="arm"
654 supported_cpu="yes"
656 aarch64)
657 cpu="aarch64"
658 supported_cpu="yes"
660 mips*)
661 cpu="mips"
662 supported_cpu="yes"
664 sparc|sun4[cdmuv])
665 cpu="sparc"
666 supported_cpu="yes"
669 # This will result in either an error or falling back to TCI later
670 ARCH=unknown
672 esac
673 if test -z "$ARCH"; then
674 ARCH="$cpu"
677 # OS specific
679 # host *BSD for user mode
680 HOST_VARIANT_DIR=""
682 case $targetos in
683 MINGW32*)
684 mingw32="yes"
685 hax="yes"
686 audio_possible_drivers="dsound sdl"
687 if check_include dsound.h; then
688 audio_drv_list="dsound"
689 else
690 audio_drv_list=""
692 supported_os="yes"
694 GNU/kFreeBSD)
695 bsd="yes"
696 audio_drv_list="oss"
697 audio_possible_drivers="oss sdl pa"
699 FreeBSD)
700 bsd="yes"
701 make="${MAKE-gmake}"
702 audio_drv_list="oss"
703 audio_possible_drivers="oss sdl pa"
704 # needed for kinfo_getvmmap(3) in libutil.h
705 LIBS="-lutil $LIBS"
706 # needed for kinfo_getproc
707 libs_qga="-lutil $libs_qga"
708 netmap="" # enable netmap autodetect
709 HOST_VARIANT_DIR="freebsd"
710 supported_os="yes"
712 DragonFly)
713 bsd="yes"
714 make="${MAKE-gmake}"
715 audio_drv_list="oss"
716 audio_possible_drivers="oss sdl pa"
717 HOST_VARIANT_DIR="dragonfly"
719 NetBSD)
720 bsd="yes"
721 make="${MAKE-gmake}"
722 audio_drv_list="oss"
723 audio_possible_drivers="oss sdl"
724 oss_lib="-lossaudio"
725 HOST_VARIANT_DIR="netbsd"
726 supported_os="yes"
728 OpenBSD)
729 bsd="yes"
730 make="${MAKE-gmake}"
731 audio_drv_list="sdl"
732 audio_possible_drivers="sdl"
733 HOST_VARIANT_DIR="openbsd"
735 Darwin)
736 bsd="yes"
737 darwin="yes"
738 hax="yes"
739 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
740 if [ "$cpu" = "x86_64" ] ; then
741 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
742 LDFLAGS="-arch x86_64 $LDFLAGS"
744 cocoa="yes"
745 audio_drv_list="coreaudio"
746 audio_possible_drivers="coreaudio sdl"
747 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
748 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
749 # Disable attempts to use ObjectiveC features in os/object.h since they
750 # won't work when we're compiling with gcc as a C compiler.
751 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
752 HOST_VARIANT_DIR="darwin"
753 supported_os="yes"
755 SunOS)
756 solaris="yes"
757 make="${MAKE-gmake}"
758 install="${INSTALL-ginstall}"
759 smbd="${SMBD-/usr/sfw/sbin/smbd}"
760 if test -f /usr/include/sys/soundcard.h ; then
761 audio_drv_list="oss"
763 audio_possible_drivers="oss sdl"
764 # needed for CMSG_ macros in sys/socket.h
765 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
766 # needed for TIOCWIN* defines in termios.h
767 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
768 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
769 solarisnetlibs="-lsocket -lnsl -lresolv"
770 LIBS="$solarisnetlibs $LIBS"
771 libs_qga="$solarisnetlibs $libs_qga"
773 Haiku)
774 haiku="yes"
775 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
776 LIBS="-lposix_error_mapper -lnetwork $LIBS"
778 Linux)
779 audio_drv_list="oss"
780 audio_possible_drivers="oss alsa sdl pa"
781 linux="yes"
782 linux_user="yes"
783 kvm="yes"
784 vhost_net="yes"
785 vhost_scsi="yes"
786 vhost_vsock="yes"
787 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
788 supported_os="yes"
790 esac
792 if [ "$bsd" = "yes" ] ; then
793 if [ "$darwin" != "yes" ] ; then
794 bsd_user="yes"
798 : ${make=${MAKE-make}}
799 : ${install=${INSTALL-install}}
800 : ${python=${PYTHON-python}}
801 : ${smbd=${SMBD-/usr/sbin/smbd}}
803 # Default objcc to clang if available, otherwise use CC
804 if has clang; then
805 objcc=clang
806 else
807 objcc="$cc"
810 if test "$mingw32" = "yes" ; then
811 EXESUF=".exe"
812 DSOSUF=".dll"
813 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
814 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
815 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
816 # MinGW needs -mthreads for TLS and macro _MT.
817 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
818 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
819 write_c_skeleton;
820 if compile_prog "" "-liberty" ; then
821 LIBS="-liberty $LIBS"
823 prefix="c:/Program Files/QEMU"
824 mandir="\${prefix}"
825 datadir="\${prefix}"
826 qemu_docdir="\${prefix}"
827 bindir="\${prefix}"
828 sysconfdir="\${prefix}"
829 local_statedir=
830 confsuffix=""
831 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
834 werror=""
836 for opt do
837 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
838 case "$opt" in
839 --help|-h) show_help=yes
841 --version|-V) exec cat $source_path/VERSION
843 --prefix=*) prefix="$optarg"
845 --interp-prefix=*) interp_prefix="$optarg"
847 --source-path=*)
849 --cross-prefix=*)
851 --cc=*)
853 --host-cc=*) host_cc="$optarg"
855 --cxx=*)
857 --iasl=*) iasl="$optarg"
859 --objcc=*) objcc="$optarg"
861 --make=*) make="$optarg"
863 --install=*) install="$optarg"
865 --python=*) python="$optarg"
867 --gcov=*) gcov_tool="$optarg"
869 --smbd=*) smbd="$optarg"
871 --extra-cflags=*)
873 --extra-cxxflags=*)
875 --extra-ldflags=*)
877 --enable-debug-info)
879 --disable-debug-info)
881 --enable-modules)
882 modules="yes"
884 --disable-modules)
885 modules="no"
887 --cpu=*)
889 --target-list=*) target_list="$optarg"
891 --enable-trace-backends=*) trace_backends="$optarg"
893 # XXX: backwards compatibility
894 --enable-trace-backend=*) trace_backends="$optarg"
896 --with-trace-file=*) trace_file="$optarg"
898 --enable-gprof) gprof="yes"
900 --enable-gcov) gcov="yes"
902 --static)
903 static="yes"
904 LDFLAGS="-static $LDFLAGS"
905 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
907 --mandir=*) mandir="$optarg"
909 --bindir=*) bindir="$optarg"
911 --libdir=*) libdir="$optarg"
913 --libexecdir=*) libexecdir="$optarg"
915 --includedir=*) includedir="$optarg"
917 --datadir=*) datadir="$optarg"
919 --with-confsuffix=*) confsuffix="$optarg"
921 --docdir=*) qemu_docdir="$optarg"
923 --sysconfdir=*) sysconfdir="$optarg"
925 --localstatedir=*) local_statedir="$optarg"
927 --firmwarepath=*) firmwarepath="$optarg"
929 --sbindir=*|--sharedstatedir=*|\
930 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
931 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
932 # These switches are silently ignored, for compatibility with
933 # autoconf-generated configure scripts. This allows QEMU's
934 # configure to be used by RPM and similar macros that set
935 # lots of directory switches by default.
937 --disable-sdl) sdl="no"
939 --enable-sdl) sdl="yes"
941 --with-sdlabi=*) sdlabi="$optarg"
943 --disable-qom-cast-debug) qom_cast_debug="no"
945 --enable-qom-cast-debug) qom_cast_debug="yes"
947 --disable-virtfs) virtfs="no"
949 --enable-virtfs) virtfs="yes"
951 --disable-mpath) mpath="no"
953 --enable-mpath) mpath="yes"
955 --disable-vnc) vnc="no"
957 --enable-vnc) vnc="yes"
959 --oss-lib=*) oss_lib="$optarg"
961 --audio-drv-list=*) audio_drv_list="$optarg"
963 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
965 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
967 --enable-debug-tcg) debug_tcg="yes"
969 --disable-debug-tcg) debug_tcg="no"
971 --enable-debug)
972 # Enable debugging options that aren't excessively noisy
973 debug_tcg="yes"
974 debug="yes"
975 strip_opt="no"
976 fortify_source="no"
978 --enable-sparse) sparse="yes"
980 --disable-sparse) sparse="no"
982 --disable-strip) strip_opt="no"
984 --disable-vnc-sasl) vnc_sasl="no"
986 --enable-vnc-sasl) vnc_sasl="yes"
988 --disable-vnc-jpeg) vnc_jpeg="no"
990 --enable-vnc-jpeg) vnc_jpeg="yes"
992 --disable-vnc-png) vnc_png="no"
994 --enable-vnc-png) vnc_png="yes"
996 --disable-slirp) slirp="no"
998 --disable-vde) vde="no"
1000 --enable-vde) vde="yes"
1002 --disable-netmap) netmap="no"
1004 --enable-netmap) netmap="yes"
1006 --disable-xen) xen="no"
1008 --enable-xen) xen="yes"
1010 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1012 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1014 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1016 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1018 --disable-brlapi) brlapi="no"
1020 --enable-brlapi) brlapi="yes"
1022 --disable-bluez) bluez="no"
1024 --enable-bluez) bluez="yes"
1026 --disable-kvm) kvm="no"
1028 --enable-kvm) kvm="yes"
1030 --disable-hax) hax="no"
1032 --enable-hax) hax="yes"
1034 --disable-tcg-interpreter) tcg_interpreter="no"
1036 --enable-tcg-interpreter) tcg_interpreter="yes"
1038 --disable-cap-ng) cap_ng="no"
1040 --enable-cap-ng) cap_ng="yes"
1042 --disable-tcg) tcg="no"
1044 --enable-tcg) tcg="yes"
1046 --disable-spice) spice="no"
1048 --enable-spice) spice="yes"
1050 --disable-libiscsi) libiscsi="no"
1052 --enable-libiscsi) libiscsi="yes"
1054 --disable-libnfs) libnfs="no"
1056 --enable-libnfs) libnfs="yes"
1058 --enable-profiler) profiler="yes"
1060 --disable-cocoa) cocoa="no"
1062 --enable-cocoa)
1063 cocoa="yes" ;
1064 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1066 --disable-system) softmmu="no"
1068 --enable-system) softmmu="yes"
1070 --disable-user)
1071 linux_user="no" ;
1072 bsd_user="no" ;
1074 --enable-user) ;;
1075 --disable-linux-user) linux_user="no"
1077 --enable-linux-user) linux_user="yes"
1079 --disable-bsd-user) bsd_user="no"
1081 --enable-bsd-user) bsd_user="yes"
1083 --enable-pie) pie="yes"
1085 --disable-pie) pie="no"
1087 --enable-werror) werror="yes"
1089 --disable-werror) werror="no"
1091 --enable-stack-protector) stack_protector="yes"
1093 --disable-stack-protector) stack_protector="no"
1095 --disable-curses) curses="no"
1097 --enable-curses) curses="yes"
1099 --disable-curl) curl="no"
1101 --enable-curl) curl="yes"
1103 --disable-fdt) fdt="no"
1105 --enable-fdt) fdt="yes"
1107 --disable-linux-aio) linux_aio="no"
1109 --enable-linux-aio) linux_aio="yes"
1111 --disable-attr) attr="no"
1113 --enable-attr) attr="yes"
1115 --disable-blobs) blobs="no"
1117 --with-pkgversion=*) pkgversion=" ($optarg)"
1119 --with-coroutine=*) coroutine="$optarg"
1121 --disable-coroutine-pool) coroutine_pool="no"
1123 --enable-coroutine-pool) coroutine_pool="yes"
1125 --enable-debug-stack-usage) debug_stack_usage="yes"
1127 --enable-crypto-afalg) crypto_afalg="yes"
1129 --disable-crypto-afalg) crypto_afalg="no"
1131 --disable-docs) docs="no"
1133 --enable-docs) docs="yes"
1135 --disable-vhost-net) vhost_net="no"
1137 --enable-vhost-net) vhost_net="yes"
1139 --disable-vhost-scsi) vhost_scsi="no"
1141 --enable-vhost-scsi) vhost_scsi="yes"
1143 --disable-vhost-vsock) vhost_vsock="no"
1145 --enable-vhost-vsock) vhost_vsock="yes"
1147 --disable-opengl) opengl="no"
1149 --enable-opengl) opengl="yes"
1151 --disable-rbd) rbd="no"
1153 --enable-rbd) rbd="yes"
1155 --disable-xfsctl) xfs="no"
1157 --enable-xfsctl) xfs="yes"
1159 --disable-smartcard) smartcard="no"
1161 --enable-smartcard) smartcard="yes"
1163 --disable-libusb) libusb="no"
1165 --enable-libusb) libusb="yes"
1167 --disable-usb-redir) usb_redir="no"
1169 --enable-usb-redir) usb_redir="yes"
1171 --disable-zlib-test) zlib="no"
1173 --disable-lzo) lzo="no"
1175 --enable-lzo) lzo="yes"
1177 --disable-snappy) snappy="no"
1179 --enable-snappy) snappy="yes"
1181 --disable-bzip2) bzip2="no"
1183 --enable-bzip2) bzip2="yes"
1185 --enable-guest-agent) guest_agent="yes"
1187 --disable-guest-agent) guest_agent="no"
1189 --enable-guest-agent-msi) guest_agent_msi="yes"
1191 --disable-guest-agent-msi) guest_agent_msi="no"
1193 --with-vss-sdk) vss_win32_sdk=""
1195 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1197 --without-vss-sdk) vss_win32_sdk="no"
1199 --with-win-sdk) win_sdk=""
1201 --with-win-sdk=*) win_sdk="$optarg"
1203 --without-win-sdk) win_sdk="no"
1205 --enable-tools) want_tools="yes"
1207 --disable-tools) want_tools="no"
1209 --enable-seccomp) seccomp="yes"
1211 --disable-seccomp) seccomp="no"
1213 --disable-glusterfs) glusterfs="no"
1215 --enable-glusterfs) glusterfs="yes"
1217 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1218 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1220 --enable-vhdx|--disable-vhdx)
1221 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1223 --enable-uuid|--disable-uuid)
1224 echo "$0: $opt is obsolete, UUID support is always built" >&2
1226 --disable-gtk) gtk="no"
1228 --enable-gtk) gtk="yes"
1230 --tls-priority=*) tls_priority="$optarg"
1232 --disable-gnutls) gnutls="no"
1234 --enable-gnutls) gnutls="yes"
1236 --disable-nettle) nettle="no"
1238 --enable-nettle) nettle="yes"
1240 --disable-gcrypt) gcrypt="no"
1242 --enable-gcrypt) gcrypt="yes"
1244 --enable-rdma) rdma="yes"
1246 --disable-rdma) rdma="no"
1248 --with-gtkabi=*) gtkabi="$optarg"
1250 --disable-vte) vte="no"
1252 --enable-vte) vte="yes"
1254 --disable-virglrenderer) virglrenderer="no"
1256 --enable-virglrenderer) virglrenderer="yes"
1258 --disable-tpm) tpm="no"
1260 --enable-tpm) tpm="yes"
1262 --disable-libssh2) libssh2="no"
1264 --enable-libssh2) libssh2="yes"
1266 --disable-live-block-migration) live_block_migration="no"
1268 --enable-live-block-migration) live_block_migration="yes"
1270 --disable-numa) numa="no"
1272 --enable-numa) numa="yes"
1274 --disable-tcmalloc) tcmalloc="no"
1276 --enable-tcmalloc) tcmalloc="yes"
1278 --disable-jemalloc) jemalloc="no"
1280 --enable-jemalloc) jemalloc="yes"
1282 --disable-replication) replication="no"
1284 --enable-replication) replication="yes"
1286 --disable-vxhs) vxhs="no"
1288 --enable-vxhs) vxhs="yes"
1290 --disable-vhost-user) vhost_user="no"
1292 --enable-vhost-user)
1293 vhost_user="yes"
1294 if test "$mingw32" = "yes"; then
1295 error_exit "vhost-user isn't available on win32"
1298 --disable-capstone) capstone="no"
1300 --enable-capstone) capstone="yes"
1302 --enable-capstone=git) capstone="git"
1304 --enable-capstone=system) capstone="system"
1307 echo "ERROR: unknown option $opt"
1308 echo "Try '$0 --help' for more information"
1309 exit 1
1311 esac
1312 done
1314 if test "$vhost_user" = ""; then
1315 if test "$mingw32" = "yes"; then
1316 vhost_user="no"
1317 else
1318 vhost_user="yes"
1322 case "$cpu" in
1323 ppc)
1324 CPU_CFLAGS="-m32"
1325 LDFLAGS="-m32 $LDFLAGS"
1327 ppc64)
1328 CPU_CFLAGS="-m64"
1329 LDFLAGS="-m64 $LDFLAGS"
1331 sparc)
1332 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1333 LDFLAGS="-m32 -mv8plus $LDFLAGS"
1335 sparc64)
1336 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1337 LDFLAGS="-m64 $LDFLAGS"
1339 s390)
1340 CPU_CFLAGS="-m31"
1341 LDFLAGS="-m31 $LDFLAGS"
1343 s390x)
1344 CPU_CFLAGS="-m64"
1345 LDFLAGS="-m64 $LDFLAGS"
1347 i386)
1348 CPU_CFLAGS="-m32"
1349 LDFLAGS="-m32 $LDFLAGS"
1350 cc_i386='$(CC) -m32'
1352 x86_64)
1353 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1354 # If we truly care, we should simply detect this case at
1355 # runtime and generate the fallback to serial emulation.
1356 CPU_CFLAGS="-m64 -mcx16"
1357 LDFLAGS="-m64 $LDFLAGS"
1358 cc_i386='$(CC) -m32'
1360 x32)
1361 CPU_CFLAGS="-mx32"
1362 LDFLAGS="-mx32 $LDFLAGS"
1363 cc_i386='$(CC) -m32'
1365 # No special flags required for other host CPUs
1366 esac
1368 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1369 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1371 # For user-mode emulation the host arch has to be one we explicitly
1372 # support, even if we're using TCI.
1373 if [ "$ARCH" = "unknown" ]; then
1374 bsd_user="no"
1375 linux_user="no"
1378 default_target_list=""
1380 mak_wilds=""
1382 if [ "$softmmu" = "yes" ]; then
1383 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1385 if [ "$linux_user" = "yes" ]; then
1386 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1388 if [ "$bsd_user" = "yes" ]; then
1389 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1392 for config in $mak_wilds; do
1393 default_target_list="${default_target_list} $(basename "$config" .mak)"
1394 done
1396 # Enumerate public trace backends for --help output
1397 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1399 if test x"$show_help" = x"yes" ; then
1400 cat << EOF
1402 Usage: configure [options]
1403 Options: [defaults in brackets after descriptions]
1405 Standard options:
1406 --help print this message
1407 --prefix=PREFIX install in PREFIX [$prefix]
1408 --interp-prefix=PREFIX where to find shared libraries, etc.
1409 use %M for cpu name [$interp_prefix]
1410 --target-list=LIST set target list (default: build everything)
1411 $(echo Available targets: $default_target_list | \
1412 fold -s -w 53 | sed -e 's/^/ /')
1414 Advanced options (experts only):
1415 --source-path=PATH path of source code [$source_path]
1416 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1417 --cc=CC use C compiler CC [$cc]
1418 --iasl=IASL use ACPI compiler IASL [$iasl]
1419 --host-cc=CC use C compiler CC [$host_cc] for code run at
1420 build time
1421 --cxx=CXX use C++ compiler CXX [$cxx]
1422 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1423 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1424 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1425 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1426 --make=MAKE use specified make [$make]
1427 --install=INSTALL use specified install [$install]
1428 --python=PYTHON use specified python [$python]
1429 --smbd=SMBD use specified smbd [$smbd]
1430 --static enable static build [$static]
1431 --mandir=PATH install man pages in PATH
1432 --datadir=PATH install firmware in PATH$confsuffix
1433 --docdir=PATH install documentation in PATH$confsuffix
1434 --bindir=PATH install binaries in PATH
1435 --libdir=PATH install libraries in PATH
1436 --sysconfdir=PATH install config in PATH$confsuffix
1437 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1438 --firmwarepath=PATH search PATH for firmware files
1439 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1440 --enable-debug enable common debug build options
1441 --disable-strip disable stripping binaries
1442 --disable-werror disable compilation abort on warning
1443 --disable-stack-protector disable compiler-provided stack protection
1444 --audio-drv-list=LIST set audio drivers list:
1445 Available drivers: $audio_possible_drivers
1446 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1447 --block-drv-rw-whitelist=L
1448 set block driver read-write whitelist
1449 (affects only QEMU, not qemu-img)
1450 --block-drv-ro-whitelist=L
1451 set block driver read-only whitelist
1452 (affects only QEMU, not qemu-img)
1453 --enable-trace-backends=B Set trace backend
1454 Available backends: $trace_backend_list
1455 --with-trace-file=NAME Full PATH,NAME of file to store traces
1456 Default:trace-<pid>
1457 --disable-slirp disable SLIRP userspace network connectivity
1458 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1459 --oss-lib path to OSS library
1460 --cpu=CPU Build for host CPU [$cpu]
1461 --with-coroutine=BACKEND coroutine backend. Supported options:
1462 ucontext, sigaltstack, windows
1463 --enable-gcov enable test coverage analysis with gcov
1464 --gcov=GCOV use specified gcov [$gcov_tool]
1465 --disable-blobs disable installing provided firmware blobs
1466 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1467 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1468 --tls-priority default TLS protocol/cipher priority string
1469 --enable-gprof QEMU profiling with gprof
1470 --enable-profiler profiler support
1471 --enable-xen-pv-domain-build
1472 xen pv domain builder
1473 --enable-debug-stack-usage
1474 track the maximum stack usage of stacks created by qemu_alloc_stack
1476 Optional features, enabled with --enable-FEATURE and
1477 disabled with --disable-FEATURE, default is enabled if available:
1479 system all system emulation targets
1480 user supported user emulation targets
1481 linux-user all linux usermode emulation targets
1482 bsd-user all BSD usermode emulation targets
1483 docs build documentation
1484 guest-agent build the QEMU Guest Agent
1485 guest-agent-msi build guest agent Windows MSI installation package
1486 pie Position Independent Executables
1487 modules modules support
1488 debug-tcg TCG debugging (default is disabled)
1489 debug-info debugging information
1490 sparse sparse checker
1492 gnutls GNUTLS cryptography support
1493 nettle nettle cryptography support
1494 gcrypt libgcrypt cryptography support
1495 sdl SDL UI
1496 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1497 gtk gtk UI
1498 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1499 vte vte support for the gtk UI
1500 curses curses UI
1501 vnc VNC UI support
1502 vnc-sasl SASL encryption for VNC server
1503 vnc-jpeg JPEG lossy compression for VNC server
1504 vnc-png PNG compression for VNC server
1505 cocoa Cocoa UI (Mac OS X only)
1506 virtfs VirtFS
1507 mpath Multipath persistent reservation passthrough
1508 xen xen backend driver support
1509 xen-pci-passthrough
1510 brlapi BrlAPI (Braile)
1511 curl curl connectivity
1512 fdt fdt device tree
1513 bluez bluez stack connectivity
1514 kvm KVM acceleration support
1515 hax HAX acceleration support
1516 rdma RDMA-based migration support
1517 vde support for vde network
1518 netmap support for netmap network
1519 linux-aio Linux AIO support
1520 cap-ng libcap-ng support
1521 attr attr and xattr support
1522 vhost-net vhost-net acceleration support
1523 spice spice
1524 rbd rados block device (rbd)
1525 libiscsi iscsi support
1526 libnfs nfs support
1527 smartcard smartcard support (libcacard)
1528 libusb libusb (for usb passthrough)
1529 live-block-migration Block migration in the main migration stream
1530 usb-redir usb network redirection support
1531 lzo support of lzo compression library
1532 snappy support of snappy compression library
1533 bzip2 support of bzip2 compression library
1534 (for reading bzip2-compressed dmg images)
1535 seccomp seccomp support
1536 coroutine-pool coroutine freelist (better performance)
1537 glusterfs GlusterFS backend
1538 tpm TPM support
1539 libssh2 ssh block device support
1540 numa libnuma support
1541 tcmalloc tcmalloc support
1542 jemalloc jemalloc support
1543 replication replication support
1544 vhost-vsock virtio sockets device support
1545 opengl opengl support
1546 virglrenderer virgl rendering support
1547 xfsctl xfsctl support
1548 qom-cast-debug cast debugging support
1549 tools build qemu-io, qemu-nbd and qemu-image tools
1550 vxhs Veritas HyperScale vDisk backend support
1551 crypto-afalg Linux AF_ALG crypto backend driver
1552 vhost-user vhost-user support
1553 capstone capstone disassembler support
1555 NOTE: The object files are built at the place where configure is launched
1557 exit 0
1560 if ! has $python; then
1561 error_exit "Python not found. Use --python=/path/to/python"
1564 # Note that if the Python conditional here evaluates True we will exit
1565 # with status 1 which is a shell 'false' value.
1566 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1567 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1568 "Note that Python 3 or later is not yet supported." \
1569 "Use --python=/path/to/python to specify a supported Python."
1572 # Suppress writing compiled files
1573 python="$python -B"
1575 # Now we have handled --enable-tcg-interpreter and know we're not just
1576 # printing the help message, bail out if the host CPU isn't supported.
1577 if test "$ARCH" = "unknown"; then
1578 if test "$tcg_interpreter" = "yes" ; then
1579 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1580 else
1581 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1585 # Consult white-list to determine whether to enable werror
1586 # by default. Only enable by default for git builds
1587 if test -z "$werror" ; then
1588 if test -d "$source_path/.git" -a \
1589 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1590 werror="yes"
1591 else
1592 werror="no"
1596 # check that the C compiler works.
1597 write_c_skeleton;
1598 if compile_object ; then
1599 : C compiler works ok
1600 else
1601 error_exit "\"$cc\" either does not exist or does not work"
1603 if ! compile_prog ; then
1604 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1607 if test "$bogus_os" = "yes"; then
1608 # Now that we know that we're not printing the help and that
1609 # the compiler works (so the results of the check_defines we used
1610 # to identify the OS are reliable), if we didn't recognize the
1611 # host OS we should stop now.
1612 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1615 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1616 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1617 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1618 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1619 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1620 gcc_flags="-Wno-string-plus-int $gcc_flags"
1621 # Note that we do not add -Werror to gcc_flags here, because that would
1622 # enable it for all configure tests. If a configure test failed due
1623 # to -Werror this would just silently disable some features,
1624 # so it's too error prone.
1626 cc_has_warning_flag() {
1627 write_c_skeleton;
1629 # Use the positive sense of the flag when testing for -Wno-wombat
1630 # support (gcc will happily accept the -Wno- form of unknown
1631 # warning options).
1632 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1633 compile_prog "-Werror $optflag" ""
1636 for flag in $gcc_flags; do
1637 if cc_has_warning_flag $flag ; then
1638 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1640 done
1642 if test "$stack_protector" != "no"; then
1643 cat > $TMPC << EOF
1644 int main(int argc, char *argv[])
1646 char arr[64], *p = arr, *c = argv[0];
1647 while (*c) {
1648 *p++ = *c++;
1650 return 0;
1653 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1654 sp_on=0
1655 for flag in $gcc_flags; do
1656 # We need to check both a compile and a link, since some compiler
1657 # setups fail only on a .c->.o compile and some only at link time
1658 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1659 compile_prog "-Werror $flag" ""; then
1660 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1661 sp_on=1
1662 break
1664 done
1665 if test "$stack_protector" = yes; then
1666 if test $sp_on = 0; then
1667 error_exit "Stack protector not supported"
1672 # Disable -Wmissing-braces on older compilers that warn even for
1673 # the "universal" C zero initializer {0}.
1674 cat > $TMPC << EOF
1675 struct {
1676 int a[2];
1677 } x = {0};
1679 if compile_object "-Werror" "" ; then
1681 else
1682 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1685 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1686 # large functions that use global variables. The bug is in all releases of
1687 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1688 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1689 cat > $TMPC << EOF
1690 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1691 int main(void) { return 0; }
1692 #else
1693 #error No bug in this compiler.
1694 #endif
1696 if compile_prog "-Werror -fno-gcse" "" ; then
1697 TRANSLATE_OPT_CFLAGS=-fno-gcse
1700 if test "$static" = "yes" ; then
1701 if test "$modules" = "yes" ; then
1702 error_exit "static and modules are mutually incompatible"
1704 if test "$pie" = "yes" ; then
1705 error_exit "static and pie are mutually incompatible"
1706 else
1707 pie="no"
1711 # Unconditional check for compiler __thread support
1712 cat > $TMPC << EOF
1713 static __thread int tls_var;
1714 int main(void) { return tls_var; }
1717 if ! compile_prog "-Werror" "" ; then
1718 error_exit "Your compiler does not support the __thread specifier for " \
1719 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1722 if test "$pie" = ""; then
1723 case "$cpu-$targetos" in
1724 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1727 pie="no"
1729 esac
1732 if test "$pie" != "no" ; then
1733 cat > $TMPC << EOF
1735 #ifdef __linux__
1736 # define THREAD __thread
1737 #else
1738 # define THREAD
1739 #endif
1741 static THREAD int tls_var;
1743 int main(void) { return tls_var; }
1746 if compile_prog "-fPIE -DPIE" "-pie"; then
1747 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1748 LDFLAGS="-pie $LDFLAGS"
1749 pie="yes"
1750 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1751 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1753 else
1754 if test "$pie" = "yes"; then
1755 error_exit "PIE not available due to missing toolchain support"
1756 else
1757 echo "Disabling PIE due to missing toolchain support"
1758 pie="no"
1762 if compile_prog "-Werror -fno-pie" "-nopie"; then
1763 CFLAGS_NOPIE="-fno-pie"
1764 LDFLAGS_NOPIE="-nopie"
1768 ##########################################
1769 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1770 # use i686 as default anyway, but for those that don't, an explicit
1771 # specification is necessary
1773 if test "$cpu" = "i386"; then
1774 cat > $TMPC << EOF
1775 static int sfaa(int *ptr)
1777 return __sync_fetch_and_and(ptr, 0);
1780 int main(void)
1782 int val = 42;
1783 val = __sync_val_compare_and_swap(&val, 0, 1);
1784 sfaa(&val);
1785 return val;
1788 if ! compile_prog "" "" ; then
1789 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1793 #########################################
1794 # Solaris specific configure tool chain decisions
1796 if test "$solaris" = "yes" ; then
1797 if has $install; then
1799 else
1800 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1801 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1802 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1804 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1805 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1806 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1807 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1809 if has ar; then
1811 else
1812 if test -f /usr/ccs/bin/ar ; then
1813 error_exit "No path includes ar" \
1814 "Add /usr/ccs/bin to your path and rerun configure"
1816 error_exit "No path includes ar"
1820 if test -z "${target_list+xxx}" ; then
1821 for target in $default_target_list; do
1822 supported_target $target 2>/dev/null && \
1823 target_list="$target_list $target"
1824 done
1825 target_list="${target_list# }"
1826 else
1827 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1828 for target in $target_list; do
1829 # Check that we recognised the target name; this allows a more
1830 # friendly error message than if we let it fall through.
1831 case " $default_target_list " in
1832 *" $target "*)
1835 error_exit "Unknown target name '$target'"
1837 esac
1838 supported_target $target || exit 1
1839 done
1842 # see if system emulation was really requested
1843 case " $target_list " in
1844 *"-softmmu "*) softmmu=yes
1846 *) softmmu=no
1848 esac
1850 feature_not_found() {
1851 feature=$1
1852 remedy=$2
1854 error_exit "User requested feature $feature" \
1855 "configure was not able to find it." \
1856 "$remedy"
1859 # ---
1860 # big/little endian test
1861 cat > $TMPC << EOF
1862 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1863 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1864 extern int foo(short *, short *);
1865 int main(int argc, char *argv[]) {
1866 return foo(big_endian, little_endian);
1870 if compile_object ; then
1871 if grep -q BiGeNdIaN $TMPO ; then
1872 bigendian="yes"
1873 elif grep -q LiTtLeEnDiAn $TMPO ; then
1874 bigendian="no"
1875 else
1876 echo big/little test failed
1878 else
1879 echo big/little test failed
1882 ##########################################
1883 # cocoa implies not SDL or GTK
1884 # (the cocoa UI code currently assumes it is always the active UI
1885 # and doesn't interact well with other UI frontend code)
1886 if test "$cocoa" = "yes"; then
1887 if test "$sdl" = "yes"; then
1888 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1890 if test "$gtk" = "yes"; then
1891 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1893 gtk=no
1894 sdl=no
1897 # Some versions of Mac OS X incorrectly define SIZE_MAX
1898 cat > $TMPC << EOF
1899 #include <stdint.h>
1900 #include <stdio.h>
1901 int main(int argc, char *argv[]) {
1902 return printf("%zu", SIZE_MAX);
1905 have_broken_size_max=no
1906 if ! compile_object -Werror ; then
1907 have_broken_size_max=yes
1910 ##########################################
1911 # L2TPV3 probe
1913 cat > $TMPC <<EOF
1914 #include <sys/socket.h>
1915 #include <linux/ip.h>
1916 int main(void) { return sizeof(struct mmsghdr); }
1918 if compile_prog "" "" ; then
1919 l2tpv3=yes
1920 else
1921 l2tpv3=no
1924 ##########################################
1925 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1927 if test "$mingw32" = "yes"; then
1928 # Some versions of MinGW / Mingw-w64 lack localtime_r
1929 # and gmtime_r entirely.
1931 # Some versions of Mingw-w64 define a macro for
1932 # localtime_r/gmtime_r.
1934 # Some versions of Mingw-w64 will define functions
1935 # for localtime_r/gmtime_r, but only if you have
1936 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1937 # though, unistd.h and pthread.h both define
1938 # that for you.
1940 # So this #undef localtime_r and #include <unistd.h>
1941 # are not in fact redundant.
1942 cat > $TMPC << EOF
1943 #include <unistd.h>
1944 #include <time.h>
1945 #undef localtime_r
1946 int main(void) { localtime_r(NULL, NULL); return 0; }
1948 if compile_prog "" "" ; then
1949 localtime_r="yes"
1950 else
1951 localtime_r="no"
1955 ##########################################
1956 # pkg-config probe
1958 if ! has "$pkg_config_exe"; then
1959 error_exit "pkg-config binary '$pkg_config_exe' not found"
1962 ##########################################
1963 # NPTL probe
1965 if test "$linux_user" = "yes"; then
1966 cat > $TMPC <<EOF
1967 #include <sched.h>
1968 #include <linux/futex.h>
1969 int main(void) {
1970 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1971 #error bork
1972 #endif
1973 return 0;
1976 if ! compile_object ; then
1977 feature_not_found "nptl" "Install glibc and linux kernel headers."
1981 #########################################
1982 # zlib check
1984 if test "$zlib" != "no" ; then
1985 cat > $TMPC << EOF
1986 #include <zlib.h>
1987 int main(void) { zlibVersion(); return 0; }
1989 if compile_prog "" "-lz" ; then
1991 else
1992 error_exit "zlib check failed" \
1993 "Make sure to have the zlib libs and headers installed."
1996 LIBS="$LIBS -lz"
1998 ##########################################
1999 # lzo check
2001 if test "$lzo" != "no" ; then
2002 cat > $TMPC << EOF
2003 #include <lzo/lzo1x.h>
2004 int main(void) { lzo_version(); return 0; }
2006 if compile_prog "" "-llzo2" ; then
2007 libs_softmmu="$libs_softmmu -llzo2"
2008 lzo="yes"
2009 else
2010 if test "$lzo" = "yes"; then
2011 feature_not_found "liblzo2" "Install liblzo2 devel"
2013 lzo="no"
2017 ##########################################
2018 # snappy check
2020 if test "$snappy" != "no" ; then
2021 cat > $TMPC << EOF
2022 #include <snappy-c.h>
2023 int main(void) { snappy_max_compressed_length(4096); return 0; }
2025 if compile_prog "" "-lsnappy" ; then
2026 libs_softmmu="$libs_softmmu -lsnappy"
2027 snappy="yes"
2028 else
2029 if test "$snappy" = "yes"; then
2030 feature_not_found "libsnappy" "Install libsnappy devel"
2032 snappy="no"
2036 ##########################################
2037 # bzip2 check
2039 if test "$bzip2" != "no" ; then
2040 cat > $TMPC << EOF
2041 #include <bzlib.h>
2042 int main(void) { BZ2_bzlibVersion(); return 0; }
2044 if compile_prog "" "-lbz2" ; then
2045 bzip2="yes"
2046 else
2047 if test "$bzip2" = "yes"; then
2048 feature_not_found "libbzip2" "Install libbzip2 devel"
2050 bzip2="no"
2054 ##########################################
2055 # libseccomp check
2057 if test "$seccomp" != "no" ; then
2058 case "$cpu" in
2059 i386|x86_64)
2060 libseccomp_minver="2.1.0"
2062 mips)
2063 libseccomp_minver="2.2.0"
2065 arm|aarch64)
2066 libseccomp_minver="2.2.3"
2068 ppc|ppc64|s390x)
2069 libseccomp_minver="2.3.0"
2072 libseccomp_minver=""
2074 esac
2076 if test "$libseccomp_minver" != "" &&
2077 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2078 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2079 seccomp_libs="$($pkg_config --libs libseccomp)"
2080 seccomp="yes"
2081 else
2082 if test "$seccomp" = "yes" ; then
2083 if test "$libseccomp_minver" != "" ; then
2084 feature_not_found "libseccomp" \
2085 "Install libseccomp devel >= $libseccomp_minver"
2086 else
2087 feature_not_found "libseccomp" \
2088 "libseccomp is not supported for host cpu $cpu"
2091 seccomp="no"
2094 ##########################################
2095 # xen probe
2097 if test "$xen" != "no" ; then
2098 # Check whether Xen library path is specified via --extra-ldflags to avoid
2099 # overriding this setting with pkg-config output. If not, try pkg-config
2100 # to obtain all needed flags.
2102 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2103 $pkg_config --exists xencontrol ; then
2104 xen_ctrl_version="$(printf '%d%02d%02d' \
2105 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2106 xen=yes
2107 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2108 xen_pc="$xen_pc xenevtchn xendevicemodel"
2109 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2110 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2111 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2112 else
2114 xen_libs="-lxenstore -lxenctrl -lxenguest"
2115 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2117 # First we test whether Xen headers and libraries are available.
2118 # If no, we are done and there is no Xen support.
2119 # If yes, more tests are run to detect the Xen version.
2121 # Xen (any)
2122 cat > $TMPC <<EOF
2123 #include <xenctrl.h>
2124 int main(void) {
2125 return 0;
2128 if ! compile_prog "" "$xen_libs" ; then
2129 # Xen not found
2130 if test "$xen" = "yes" ; then
2131 feature_not_found "xen" "Install xen devel"
2133 xen=no
2135 # Xen unstable
2136 elif
2137 cat > $TMPC <<EOF &&
2138 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2139 #include <xenforeignmemory.h>
2140 int main(void) {
2141 xenforeignmemory_handle *xfmem;
2143 xfmem = xenforeignmemory_open(0, 0);
2144 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2146 return 0;
2149 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2150 then
2151 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2152 xen_ctrl_version=41000
2153 xen=yes
2154 elif
2155 cat > $TMPC <<EOF &&
2156 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2157 #define __XEN_TOOLS__
2158 #include <xendevicemodel.h>
2159 int main(void) {
2160 xendevicemodel_handle *xd;
2162 xd = xendevicemodel_open(0, 0);
2163 xendevicemodel_close(xd);
2165 return 0;
2168 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2169 then
2170 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2171 xen_ctrl_version=40900
2172 xen=yes
2173 elif
2174 cat > $TMPC <<EOF &&
2176 * If we have stable libs the we don't want the libxc compat
2177 * layers, regardless of what CFLAGS we may have been given.
2179 * Also, check if xengnttab_grant_copy_segment_t is defined and
2180 * grant copy operation is implemented.
2182 #undef XC_WANT_COMPAT_EVTCHN_API
2183 #undef XC_WANT_COMPAT_GNTTAB_API
2184 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2185 #include <xenctrl.h>
2186 #include <xenstore.h>
2187 #include <xenevtchn.h>
2188 #include <xengnttab.h>
2189 #include <xenforeignmemory.h>
2190 #include <stdint.h>
2191 #include <xen/hvm/hvm_info_table.h>
2192 #if !defined(HVM_MAX_VCPUS)
2193 # error HVM_MAX_VCPUS not defined
2194 #endif
2195 int main(void) {
2196 xc_interface *xc = NULL;
2197 xenforeignmemory_handle *xfmem;
2198 xenevtchn_handle *xe;
2199 xengnttab_handle *xg;
2200 xen_domain_handle_t handle;
2201 xengnttab_grant_copy_segment_t* seg = NULL;
2203 xs_daemon_open();
2205 xc = xc_interface_open(0, 0, 0);
2206 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2207 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2208 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2209 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2210 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2212 xfmem = xenforeignmemory_open(0, 0);
2213 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2215 xe = xenevtchn_open(0, 0);
2216 xenevtchn_fd(xe);
2218 xg = xengnttab_open(0, 0);
2219 xengnttab_grant_copy(xg, 0, seg);
2221 return 0;
2224 compile_prog "" "$xen_libs $xen_stable_libs"
2225 then
2226 xen_ctrl_version=40800
2227 xen=yes
2228 elif
2229 cat > $TMPC <<EOF &&
2231 * If we have stable libs the we don't want the libxc compat
2232 * layers, regardless of what CFLAGS we may have been given.
2234 #undef XC_WANT_COMPAT_EVTCHN_API
2235 #undef XC_WANT_COMPAT_GNTTAB_API
2236 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2237 #include <xenctrl.h>
2238 #include <xenstore.h>
2239 #include <xenevtchn.h>
2240 #include <xengnttab.h>
2241 #include <xenforeignmemory.h>
2242 #include <stdint.h>
2243 #include <xen/hvm/hvm_info_table.h>
2244 #if !defined(HVM_MAX_VCPUS)
2245 # error HVM_MAX_VCPUS not defined
2246 #endif
2247 int main(void) {
2248 xc_interface *xc = NULL;
2249 xenforeignmemory_handle *xfmem;
2250 xenevtchn_handle *xe;
2251 xengnttab_handle *xg;
2252 xen_domain_handle_t handle;
2254 xs_daemon_open();
2256 xc = xc_interface_open(0, 0, 0);
2257 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2258 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2259 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2260 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2261 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2263 xfmem = xenforeignmemory_open(0, 0);
2264 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2266 xe = xenevtchn_open(0, 0);
2267 xenevtchn_fd(xe);
2269 xg = xengnttab_open(0, 0);
2270 xengnttab_map_grant_ref(xg, 0, 0, 0);
2272 return 0;
2275 compile_prog "" "$xen_libs $xen_stable_libs"
2276 then
2277 xen_ctrl_version=40701
2278 xen=yes
2279 elif
2280 cat > $TMPC <<EOF &&
2281 #include <xenctrl.h>
2282 #include <stdint.h>
2283 int main(void) {
2284 xc_interface *xc = NULL;
2285 xen_domain_handle_t handle;
2286 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2287 return 0;
2290 compile_prog "" "$xen_libs"
2291 then
2292 xen_ctrl_version=40700
2293 xen=yes
2295 # Xen 4.6
2296 elif
2297 cat > $TMPC <<EOF &&
2298 #include <xenctrl.h>
2299 #include <xenstore.h>
2300 #include <stdint.h>
2301 #include <xen/hvm/hvm_info_table.h>
2302 #if !defined(HVM_MAX_VCPUS)
2303 # error HVM_MAX_VCPUS not defined
2304 #endif
2305 int main(void) {
2306 xc_interface *xc;
2307 xs_daemon_open();
2308 xc = xc_interface_open(0, 0, 0);
2309 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2310 xc_gnttab_open(NULL, 0);
2311 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2312 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2313 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2314 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2315 return 0;
2318 compile_prog "" "$xen_libs"
2319 then
2320 xen_ctrl_version=40600
2321 xen=yes
2323 # Xen 4.5
2324 elif
2325 cat > $TMPC <<EOF &&
2326 #include <xenctrl.h>
2327 #include <xenstore.h>
2328 #include <stdint.h>
2329 #include <xen/hvm/hvm_info_table.h>
2330 #if !defined(HVM_MAX_VCPUS)
2331 # error HVM_MAX_VCPUS not defined
2332 #endif
2333 int main(void) {
2334 xc_interface *xc;
2335 xs_daemon_open();
2336 xc = xc_interface_open(0, 0, 0);
2337 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2338 xc_gnttab_open(NULL, 0);
2339 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2340 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2341 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2342 return 0;
2345 compile_prog "" "$xen_libs"
2346 then
2347 xen_ctrl_version=40500
2348 xen=yes
2350 elif
2351 cat > $TMPC <<EOF &&
2352 #include <xenctrl.h>
2353 #include <xenstore.h>
2354 #include <stdint.h>
2355 #include <xen/hvm/hvm_info_table.h>
2356 #if !defined(HVM_MAX_VCPUS)
2357 # error HVM_MAX_VCPUS not defined
2358 #endif
2359 int main(void) {
2360 xc_interface *xc;
2361 xs_daemon_open();
2362 xc = xc_interface_open(0, 0, 0);
2363 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2364 xc_gnttab_open(NULL, 0);
2365 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2366 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2367 return 0;
2370 compile_prog "" "$xen_libs"
2371 then
2372 xen_ctrl_version=40200
2373 xen=yes
2375 else
2376 if test "$xen" = "yes" ; then
2377 feature_not_found "xen (unsupported version)" \
2378 "Install a supported xen (xen 4.2 or newer)"
2380 xen=no
2383 if test "$xen" = yes; then
2384 if test $xen_ctrl_version -ge 40701 ; then
2385 libs_softmmu="$xen_stable_libs $libs_softmmu"
2387 libs_softmmu="$xen_libs $libs_softmmu"
2392 if test "$xen_pci_passthrough" != "no"; then
2393 if test "$xen" = "yes" && test "$linux" = "yes"; then
2394 xen_pci_passthrough=yes
2395 else
2396 if test "$xen_pci_passthrough" = "yes"; then
2397 error_exit "User requested feature Xen PCI Passthrough" \
2398 " but this feature requires /sys from Linux"
2400 xen_pci_passthrough=no
2404 if test "$xen_pv_domain_build" = "yes" &&
2405 test "$xen" != "yes"; then
2406 error_exit "User requested Xen PV domain builder support" \
2407 "which requires Xen support."
2410 ##########################################
2411 # Sparse probe
2412 if test "$sparse" != "no" ; then
2413 if has cgcc; then
2414 sparse=yes
2415 else
2416 if test "$sparse" = "yes" ; then
2417 feature_not_found "sparse" "Install sparse binary"
2419 sparse=no
2423 ##########################################
2424 # X11 probe
2425 x11_cflags=
2426 x11_libs=-lX11
2427 if $pkg_config --exists "x11"; then
2428 x11_cflags=$($pkg_config --cflags x11)
2429 x11_libs=$($pkg_config --libs x11)
2432 ##########################################
2433 # GTK probe
2435 if test "$gtkabi" = ""; then
2436 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2437 # Use 2.0 as a fallback if that is available.
2438 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2439 gtkabi=3.0
2440 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2441 gtkabi=2.0
2442 else
2443 gtkabi=3.0
2447 if test "$gtk" != "no"; then
2448 gtkpackage="gtk+-$gtkabi"
2449 gtkx11package="gtk+-x11-$gtkabi"
2450 if test "$gtkabi" = "3.0" ; then
2451 gtkversion="3.0.0"
2452 else
2453 gtkversion="2.18.0"
2455 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2456 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2457 gtk_libs=$($pkg_config --libs $gtkpackage)
2458 gtk_version=$($pkg_config --modversion $gtkpackage)
2459 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2460 gtk_cflags="$gtk_cflags $x11_cflags"
2461 gtk_libs="$gtk_libs $x11_libs"
2463 libs_softmmu="$gtk_libs $libs_softmmu"
2464 gtk="yes"
2465 elif test "$gtk" = "yes"; then
2466 feature_not_found "gtk" "Install gtk3-devel"
2467 else
2468 gtk="no"
2473 ##########################################
2474 # GNUTLS probe
2476 gnutls_works() {
2477 # Unfortunately some distros have bad pkg-config information for gnutls
2478 # such that it claims to exist but you get a compiler error if you try
2479 # to use the options returned by --libs. Specifically, Ubuntu for --static
2480 # builds doesn't work:
2481 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2483 # So sanity check the cflags/libs before assuming gnutls can be used.
2484 if ! $pkg_config --exists "gnutls"; then
2485 return 1
2488 write_c_skeleton
2489 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2492 gnutls_gcrypt=no
2493 gnutls_nettle=no
2494 if test "$gnutls" != "no"; then
2495 if gnutls_works; then
2496 gnutls_cflags=$($pkg_config --cflags gnutls)
2497 gnutls_libs=$($pkg_config --libs gnutls)
2498 libs_softmmu="$gnutls_libs $libs_softmmu"
2499 libs_tools="$gnutls_libs $libs_tools"
2500 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2501 gnutls="yes"
2503 # gnutls_rnd requires >= 2.11.0
2504 if $pkg_config --exists "gnutls >= 2.11.0"; then
2505 gnutls_rnd="yes"
2506 else
2507 gnutls_rnd="no"
2510 if $pkg_config --exists 'gnutls >= 3.0'; then
2511 gnutls_gcrypt=no
2512 gnutls_nettle=yes
2513 elif $pkg_config --exists 'gnutls >= 2.12'; then
2514 case $($pkg_config --libs --static gnutls) in
2515 *gcrypt*)
2516 gnutls_gcrypt=yes
2517 gnutls_nettle=no
2519 *nettle*)
2520 gnutls_gcrypt=no
2521 gnutls_nettle=yes
2524 gnutls_gcrypt=yes
2525 gnutls_nettle=no
2527 esac
2528 else
2529 gnutls_gcrypt=yes
2530 gnutls_nettle=no
2532 elif test "$gnutls" = "yes"; then
2533 feature_not_found "gnutls" "Install gnutls devel"
2534 else
2535 gnutls="no"
2536 gnutls_rnd="no"
2538 else
2539 gnutls_rnd="no"
2543 # If user didn't give a --disable/enable-gcrypt flag,
2544 # then mark as disabled if user requested nettle
2545 # explicitly, or if gnutls links to nettle
2546 if test -z "$gcrypt"
2547 then
2548 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2549 then
2550 gcrypt="no"
2554 # If user didn't give a --disable/enable-nettle flag,
2555 # then mark as disabled if user requested gcrypt
2556 # explicitly, or if gnutls links to gcrypt
2557 if test -z "$nettle"
2558 then
2559 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2560 then
2561 nettle="no"
2565 has_libgcrypt_config() {
2566 if ! has "libgcrypt-config"
2567 then
2568 return 1
2571 if test -n "$cross_prefix"
2572 then
2573 host=$(libgcrypt-config --host)
2574 if test "$host-" != $cross_prefix
2575 then
2576 return 1
2580 return 0
2583 if test "$gcrypt" != "no"; then
2584 if has_libgcrypt_config; then
2585 gcrypt_cflags=$(libgcrypt-config --cflags)
2586 gcrypt_libs=$(libgcrypt-config --libs)
2587 # Debian has remove -lgpg-error from libgcrypt-config
2588 # as it "spreads unnecessary dependencies" which in
2589 # turn breaks static builds...
2590 if test "$static" = "yes"
2591 then
2592 gcrypt_libs="$gcrypt_libs -lgpg-error"
2594 libs_softmmu="$gcrypt_libs $libs_softmmu"
2595 libs_tools="$gcrypt_libs $libs_tools"
2596 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2597 gcrypt="yes"
2598 if test -z "$nettle"; then
2599 nettle="no"
2602 cat > $TMPC << EOF
2603 #include <gcrypt.h>
2604 int main(void) {
2605 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2606 GCRY_MD_SHA256,
2607 NULL, 0, 0, 0, NULL);
2608 return 0;
2611 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2612 gcrypt_kdf=yes
2615 cat > $TMPC << EOF
2616 #include <gcrypt.h>
2617 int main(void) {
2618 gcry_mac_hd_t handle;
2619 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2620 GCRY_MAC_FLAG_SECURE, NULL);
2621 return 0;
2624 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2625 gcrypt_hmac=yes
2627 else
2628 if test "$gcrypt" = "yes"; then
2629 feature_not_found "gcrypt" "Install gcrypt devel"
2630 else
2631 gcrypt="no"
2637 if test "$nettle" != "no"; then
2638 if $pkg_config --exists "nettle"; then
2639 nettle_cflags=$($pkg_config --cflags nettle)
2640 nettle_libs=$($pkg_config --libs nettle)
2641 nettle_version=$($pkg_config --modversion nettle)
2642 libs_softmmu="$nettle_libs $libs_softmmu"
2643 libs_tools="$nettle_libs $libs_tools"
2644 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2645 nettle="yes"
2647 cat > $TMPC << EOF
2648 #include <stddef.h>
2649 #include <nettle/pbkdf2.h>
2650 int main(void) {
2651 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2652 return 0;
2655 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2656 nettle_kdf=yes
2658 else
2659 if test "$nettle" = "yes"; then
2660 feature_not_found "nettle" "Install nettle devel"
2661 else
2662 nettle="no"
2667 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2668 then
2669 error_exit "Only one of gcrypt & nettle can be enabled"
2672 ##########################################
2673 # libtasn1 - only for the TLS creds/session test suite
2675 tasn1=yes
2676 tasn1_cflags=""
2677 tasn1_libs=""
2678 if $pkg_config --exists "libtasn1"; then
2679 tasn1_cflags=$($pkg_config --cflags libtasn1)
2680 tasn1_libs=$($pkg_config --libs libtasn1)
2681 else
2682 tasn1=no
2686 ##########################################
2687 # getifaddrs (for tests/test-io-channel-socket )
2689 have_ifaddrs_h=yes
2690 if ! check_include "ifaddrs.h" ; then
2691 have_ifaddrs_h=no
2694 ##########################################
2695 # VTE probe
2697 if test "$vte" != "no"; then
2698 if test "$gtkabi" = "3.0"; then
2699 vteminversion="0.32.0"
2700 if $pkg_config --exists "vte-2.91"; then
2701 vtepackage="vte-2.91"
2702 else
2703 vtepackage="vte-2.90"
2705 else
2706 vtepackage="vte"
2707 vteminversion="0.24.0"
2709 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2710 vte_cflags=$($pkg_config --cflags $vtepackage)
2711 vte_libs=$($pkg_config --libs $vtepackage)
2712 vteversion=$($pkg_config --modversion $vtepackage)
2713 libs_softmmu="$vte_libs $libs_softmmu"
2714 vte="yes"
2715 elif test "$vte" = "yes"; then
2716 if test "$gtkabi" = "3.0"; then
2717 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2718 else
2719 feature_not_found "vte" "Install libvte devel"
2721 else
2722 vte="no"
2726 ##########################################
2727 # SDL probe
2729 # Look for sdl configuration program (pkg-config or sdl-config). Try
2730 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2732 if test "$sdlabi" = ""; then
2733 if $pkg_config --exists "sdl2"; then
2734 sdlabi=2.0
2735 elif $pkg_config --exists "sdl"; then
2736 sdlabi=1.2
2737 else
2738 sdlabi=2.0
2742 if test $sdlabi = "2.0"; then
2743 sdl_config=$sdl2_config
2744 sdlname=sdl2
2745 sdlconfigname=sdl2_config
2746 elif test $sdlabi = "1.2"; then
2747 sdlname=sdl
2748 sdlconfigname=sdl_config
2749 else
2750 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2753 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2754 sdl_config=$sdlconfigname
2757 if $pkg_config $sdlname --exists; then
2758 sdlconfig="$pkg_config $sdlname"
2759 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2760 elif has ${sdl_config}; then
2761 sdlconfig="$sdl_config"
2762 sdlversion=$($sdlconfig --version)
2763 else
2764 if test "$sdl" = "yes" ; then
2765 feature_not_found "sdl" "Install SDL2-devel"
2767 sdl=no
2769 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2770 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2773 sdl_too_old=no
2774 if test "$sdl" != "no" ; then
2775 cat > $TMPC << EOF
2776 #include <SDL.h>
2777 #undef main /* We don't want SDL to override our main() */
2778 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2780 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2781 if test "$static" = "yes" ; then
2782 if $pkg_config $sdlname --exists; then
2783 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2784 else
2785 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2787 else
2788 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2790 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2791 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2792 sdl_too_old=yes
2793 else
2794 sdl=yes
2797 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2798 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2799 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2800 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2801 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2803 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2805 else
2806 sdl=no
2808 fi # static link
2809 else # sdl not found
2810 if test "$sdl" = "yes" ; then
2811 feature_not_found "sdl" "Install SDL devel"
2813 sdl=no
2814 fi # sdl compile test
2817 if test "$sdl" = "yes" ; then
2818 cat > $TMPC <<EOF
2819 #include <SDL.h>
2820 #if defined(SDL_VIDEO_DRIVER_X11)
2821 #include <X11/XKBlib.h>
2822 #else
2823 #error No x11 support
2824 #endif
2825 int main(void) { return 0; }
2827 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2828 sdl_cflags="$sdl_cflags $x11_cflags"
2829 sdl_libs="$sdl_libs $x11_libs"
2833 ##########################################
2834 # RDMA needs OpenFabrics libraries
2835 if test "$rdma" != "no" ; then
2836 cat > $TMPC <<EOF
2837 #include <rdma/rdma_cma.h>
2838 int main(void) { return 0; }
2840 rdma_libs="-lrdmacm -libverbs"
2841 if compile_prog "" "$rdma_libs" ; then
2842 rdma="yes"
2843 else
2844 if test "$rdma" = "yes" ; then
2845 error_exit \
2846 " OpenFabrics librdmacm/libibverbs not present." \
2847 " Your options:" \
2848 " (1) Fast: Install infiniband packages from your distro." \
2849 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2850 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2852 rdma="no"
2857 ##########################################
2858 # VNC SASL detection
2859 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2860 cat > $TMPC <<EOF
2861 #include <sasl/sasl.h>
2862 #include <stdio.h>
2863 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2865 # Assuming Cyrus-SASL installed in /usr prefix
2866 vnc_sasl_cflags=""
2867 vnc_sasl_libs="-lsasl2"
2868 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2869 vnc_sasl=yes
2870 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2871 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2872 else
2873 if test "$vnc_sasl" = "yes" ; then
2874 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2876 vnc_sasl=no
2880 ##########################################
2881 # VNC JPEG detection
2882 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2883 cat > $TMPC <<EOF
2884 #include <stdio.h>
2885 #include <jpeglib.h>
2886 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2888 vnc_jpeg_cflags=""
2889 vnc_jpeg_libs="-ljpeg"
2890 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2891 vnc_jpeg=yes
2892 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2893 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2894 else
2895 if test "$vnc_jpeg" = "yes" ; then
2896 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2898 vnc_jpeg=no
2902 ##########################################
2903 # VNC PNG detection
2904 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2905 cat > $TMPC <<EOF
2906 //#include <stdio.h>
2907 #include <png.h>
2908 #include <stddef.h>
2909 int main(void) {
2910 png_structp png_ptr;
2911 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2912 return png_ptr != 0;
2915 if $pkg_config libpng --exists; then
2916 vnc_png_cflags=$($pkg_config libpng --cflags)
2917 vnc_png_libs=$($pkg_config libpng --libs)
2918 else
2919 vnc_png_cflags=""
2920 vnc_png_libs="-lpng"
2922 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2923 vnc_png=yes
2924 libs_softmmu="$vnc_png_libs $libs_softmmu"
2925 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2926 else
2927 if test "$vnc_png" = "yes" ; then
2928 feature_not_found "vnc-png" "Install libpng devel"
2930 vnc_png=no
2934 ##########################################
2935 # xkbcommon probe
2936 if test "$xkbcommon" != "no" ; then
2937 if $pkg_config xkbcommon --exists; then
2938 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
2939 xkbcommon_libs=$($pkg_config xkbcommon --libs)
2940 xkbcommon=yes
2941 else
2942 if test "$xkbcommon" = "yes" ; then
2943 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
2945 xkbcommon=no
2949 ##########################################
2950 # fnmatch() probe, used for ACL routines
2951 fnmatch="no"
2952 cat > $TMPC << EOF
2953 #include <fnmatch.h>
2954 int main(void)
2956 fnmatch("foo", "foo", 0);
2957 return 0;
2960 if compile_prog "" "" ; then
2961 fnmatch="yes"
2964 ##########################################
2965 # xfsctl() probe, used for file-posix.c
2966 if test "$xfs" != "no" ; then
2967 cat > $TMPC << EOF
2968 #include <stddef.h> /* NULL */
2969 #include <xfs/xfs.h>
2970 int main(void)
2972 xfsctl(NULL, 0, 0, NULL);
2973 return 0;
2976 if compile_prog "" "" ; then
2977 xfs="yes"
2978 else
2979 if test "$xfs" = "yes" ; then
2980 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2982 xfs=no
2986 ##########################################
2987 # vde libraries probe
2988 if test "$vde" != "no" ; then
2989 vde_libs="-lvdeplug"
2990 cat > $TMPC << EOF
2991 #include <libvdeplug.h>
2992 int main(void)
2994 struct vde_open_args a = {0, 0, 0};
2995 char s[] = "";
2996 vde_open(s, s, &a);
2997 return 0;
3000 if compile_prog "" "$vde_libs" ; then
3001 vde=yes
3002 else
3003 if test "$vde" = "yes" ; then
3004 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3006 vde=no
3010 ##########################################
3011 # netmap support probe
3012 # Apart from looking for netmap headers, we make sure that the host API version
3013 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3014 # a minor/major version number. Minor new features will be marked with values up
3015 # to 15, and if something happens that requires a change to the backend we will
3016 # move above 15, submit the backend fixes and modify this two bounds.
3017 if test "$netmap" != "no" ; then
3018 cat > $TMPC << EOF
3019 #include <inttypes.h>
3020 #include <net/if.h>
3021 #include <net/netmap.h>
3022 #include <net/netmap_user.h>
3023 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3024 #error
3025 #endif
3026 int main(void) { return 0; }
3028 if compile_prog "" "" ; then
3029 netmap=yes
3030 else
3031 if test "$netmap" = "yes" ; then
3032 feature_not_found "netmap"
3034 netmap=no
3038 ##########################################
3039 # libcap-ng library probe
3040 if test "$cap_ng" != "no" ; then
3041 cap_libs="-lcap-ng"
3042 cat > $TMPC << EOF
3043 #include <cap-ng.h>
3044 int main(void)
3046 capng_capability_to_name(CAPNG_EFFECTIVE);
3047 return 0;
3050 if compile_prog "" "$cap_libs" ; then
3051 cap_ng=yes
3052 libs_tools="$cap_libs $libs_tools"
3053 else
3054 if test "$cap_ng" = "yes" ; then
3055 feature_not_found "cap_ng" "Install libcap-ng devel"
3057 cap_ng=no
3061 ##########################################
3062 # Sound support libraries probe
3064 audio_drv_probe()
3066 drv=$1
3067 hdr=$2
3068 lib=$3
3069 exp=$4
3070 cfl=$5
3071 cat > $TMPC << EOF
3072 #include <$hdr>
3073 int main(void) { $exp }
3075 if compile_prog "$cfl" "$lib" ; then
3077 else
3078 error_exit "$drv check failed" \
3079 "Make sure to have the $drv libs and headers installed."
3083 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3084 for drv in $audio_drv_list; do
3085 case $drv in
3086 alsa)
3087 audio_drv_probe $drv alsa/asoundlib.h -lasound \
3088 "return snd_pcm_close((snd_pcm_t *)0);"
3089 alsa_libs="-lasound"
3093 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3094 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3095 pulse_libs="-lpulse"
3096 audio_pt_int="yes"
3099 sdl)
3100 if test "$sdl" = "no"; then
3101 error_exit "sdl not found or disabled, can not use sdl audio driver"
3105 coreaudio)
3106 coreaudio_libs="-framework CoreAudio"
3109 dsound)
3110 dsound_libs="-lole32 -ldxguid"
3111 audio_win_int="yes"
3114 oss)
3115 oss_libs="$oss_lib"
3118 wav)
3119 # XXX: Probes for CoreAudio, DirectSound
3123 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3124 error_exit "Unknown driver '$drv' selected" \
3125 "Possible drivers are: $audio_possible_drivers"
3128 esac
3129 done
3131 ##########################################
3132 # BrlAPI probe
3134 if test "$brlapi" != "no" ; then
3135 brlapi_libs="-lbrlapi"
3136 cat > $TMPC << EOF
3137 #include <brlapi.h>
3138 #include <stddef.h>
3139 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3141 if compile_prog "" "$brlapi_libs" ; then
3142 brlapi=yes
3143 else
3144 if test "$brlapi" = "yes" ; then
3145 feature_not_found "brlapi" "Install brlapi devel"
3147 brlapi=no
3151 ##########################################
3152 # curses probe
3153 if test "$curses" != "no" ; then
3154 if test "$mingw32" = "yes" ; then
3155 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3156 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3157 else
3158 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3159 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3161 curses_found=no
3162 cat > $TMPC << EOF
3163 #include <locale.h>
3164 #include <curses.h>
3165 #include <wchar.h>
3166 int main(void) {
3167 wchar_t wch = L'w';
3168 setlocale(LC_ALL, "");
3169 resize_term(0, 0);
3170 addwstr(L"wide chars\n");
3171 addnwstr(&wch, 1);
3172 add_wch(WACS_DEGREE);
3173 return 0;
3176 IFS=:
3177 for curses_inc in $curses_inc_list; do
3178 # Make sure we get the wide character prototypes
3179 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3180 IFS=:
3181 for curses_lib in $curses_lib_list; do
3182 unset IFS
3183 if compile_prog "$curses_inc" "$curses_lib" ; then
3184 curses_found=yes
3185 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3186 libs_softmmu="$curses_lib $libs_softmmu"
3187 break
3189 done
3190 if test "$curses_found" = yes ; then
3191 break
3193 done
3194 unset IFS
3195 if test "$curses_found" = "yes" ; then
3196 curses=yes
3197 else
3198 if test "$curses" = "yes" ; then
3199 feature_not_found "curses" "Install ncurses devel"
3201 curses=no
3205 ##########################################
3206 # curl probe
3207 if test "$curl" != "no" ; then
3208 if $pkg_config libcurl --exists; then
3209 curlconfig="$pkg_config libcurl"
3210 else
3211 curlconfig=curl-config
3213 cat > $TMPC << EOF
3214 #include <curl/curl.h>
3215 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3217 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3218 curl_libs=$($curlconfig --libs 2>/dev/null)
3219 if compile_prog "$curl_cflags" "$curl_libs" ; then
3220 curl=yes
3221 else
3222 if test "$curl" = "yes" ; then
3223 feature_not_found "curl" "Install libcurl devel"
3225 curl=no
3227 fi # test "$curl"
3229 ##########################################
3230 # bluez support probe
3231 if test "$bluez" != "no" ; then
3232 cat > $TMPC << EOF
3233 #include <bluetooth/bluetooth.h>
3234 int main(void) { return bt_error(0); }
3236 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3237 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3238 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3239 bluez=yes
3240 libs_softmmu="$bluez_libs $libs_softmmu"
3241 else
3242 if test "$bluez" = "yes" ; then
3243 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3245 bluez="no"
3249 ##########################################
3250 # glib support probe
3252 if test "$mingw32" = yes; then
3253 glib_req_ver=2.30
3254 else
3255 glib_req_ver=2.22
3257 glib_modules=gthread-2.0
3258 if test "$modules" = yes; then
3259 glib_modules="$glib_modules gmodule-2.0"
3262 # This workaround is required due to a bug in pkg-config file for glib as it
3263 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3265 if test "$static" = yes -a "$mingw32" = yes; then
3266 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3269 for i in $glib_modules; do
3270 if $pkg_config --atleast-version=$glib_req_ver $i; then
3271 glib_cflags=$($pkg_config --cflags $i)
3272 glib_libs=$($pkg_config --libs $i)
3273 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3274 LIBS="$glib_libs $LIBS"
3275 libs_qga="$glib_libs $libs_qga"
3276 else
3277 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3279 done
3281 # Sanity check that the current size_t matches the
3282 # size that glib thinks it should be. This catches
3283 # problems on multi-arch where people try to build
3284 # 32-bit QEMU while pointing at 64-bit glib headers
3285 cat > $TMPC <<EOF
3286 #include <glib.h>
3287 #include <unistd.h>
3289 #define QEMU_BUILD_BUG_ON(x) \
3290 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3292 int main(void) {
3293 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3294 return 0;
3298 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3299 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3300 "You probably need to set PKG_CONFIG_LIBDIR"\
3301 "to point to the right pkg-config files for your"\
3302 "build target"
3305 # g_test_trap_subprocess added in 2.38. Used by some tests.
3306 glib_subprocess=yes
3307 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3308 glib_subprocess=no
3311 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3312 cat > $TMPC << EOF
3313 #include <glib.h>
3314 int main(void) { return 0; }
3316 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3317 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3318 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3319 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3323 ##########################################
3324 # SHA command probe for modules
3325 if test "$modules" = yes; then
3326 shacmd_probe="sha1sum sha1 shasum"
3327 for c in $shacmd_probe; do
3328 if has $c; then
3329 shacmd="$c"
3330 break
3332 done
3333 if test "$shacmd" = ""; then
3334 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3338 ##########################################
3339 # pixman support probe
3341 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3342 pixman_cflags=
3343 pixman_libs=
3344 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3345 pixman_cflags=$($pkg_config --cflags pixman-1)
3346 pixman_libs=$($pkg_config --libs pixman-1)
3347 else
3348 error_exit "pixman >= 0.21.8 not present." \
3349 "Please install the pixman devel package."
3352 ##########################################
3353 # libmpathpersist probe
3355 if test "$mpath" != "no" ; then
3356 cat > $TMPC <<EOF
3357 #include <libudev.h>
3358 #include <mpath_persist.h>
3359 unsigned mpath_mx_alloc_len = 1024;
3360 int logsink;
3361 static struct config *multipath_conf;
3362 extern struct udev *udev;
3363 extern struct config *get_multipath_config(void);
3364 extern void put_multipath_config(struct config *conf);
3365 struct udev *udev;
3366 struct config *get_multipath_config(void) { return multipath_conf; }
3367 void put_multipath_config(struct config *conf) { }
3369 int main(void) {
3370 udev = udev_new();
3371 multipath_conf = mpath_lib_init();
3372 return 0;
3375 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3376 mpathpersist=yes
3377 else
3378 mpathpersist=no
3380 else
3381 mpathpersist=no
3384 ##########################################
3385 # libcap probe
3387 if test "$cap" != "no" ; then
3388 cat > $TMPC <<EOF
3389 #include <stdio.h>
3390 #include <sys/capability.h>
3391 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3393 if compile_prog "" "-lcap" ; then
3394 cap=yes
3395 else
3396 cap=no
3400 ##########################################
3401 # pthread probe
3402 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3404 pthread=no
3405 cat > $TMPC << EOF
3406 #include <pthread.h>
3407 static void *f(void *p) { return NULL; }
3408 int main(void) {
3409 pthread_t thread;
3410 pthread_create(&thread, 0, f, 0);
3411 return 0;
3414 if compile_prog "" "" ; then
3415 pthread=yes
3416 else
3417 for pthread_lib in $PTHREADLIBS_LIST; do
3418 if compile_prog "" "$pthread_lib" ; then
3419 pthread=yes
3420 found=no
3421 for lib_entry in $LIBS; do
3422 if test "$lib_entry" = "$pthread_lib"; then
3423 found=yes
3424 break
3426 done
3427 if test "$found" = "no"; then
3428 LIBS="$pthread_lib $LIBS"
3430 PTHREAD_LIB="$pthread_lib"
3431 break
3433 done
3436 if test "$mingw32" != yes -a "$pthread" = no; then
3437 error_exit "pthread check failed" \
3438 "Make sure to have the pthread libs and headers installed."
3441 # check for pthread_setname_np
3442 pthread_setname_np=no
3443 cat > $TMPC << EOF
3444 #include <pthread.h>
3446 static void *f(void *p) { return NULL; }
3447 int main(void)
3449 pthread_t thread;
3450 pthread_create(&thread, 0, f, 0);
3451 pthread_setname_np(thread, "QEMU");
3452 return 0;
3455 if compile_prog "" "$pthread_lib" ; then
3456 pthread_setname_np=yes
3459 ##########################################
3460 # rbd probe
3461 if test "$rbd" != "no" ; then
3462 cat > $TMPC <<EOF
3463 #include <stdio.h>
3464 #include <rbd/librbd.h>
3465 int main(void) {
3466 rados_t cluster;
3467 rados_create(&cluster, NULL);
3468 return 0;
3471 rbd_libs="-lrbd -lrados"
3472 if compile_prog "" "$rbd_libs" ; then
3473 rbd=yes
3474 else
3475 if test "$rbd" = "yes" ; then
3476 feature_not_found "rados block device" "Install librbd/ceph devel"
3478 rbd=no
3482 ##########################################
3483 # libssh2 probe
3484 min_libssh2_version=1.2.8
3485 if test "$libssh2" != "no" ; then
3486 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3487 libssh2_cflags=$($pkg_config libssh2 --cflags)
3488 libssh2_libs=$($pkg_config libssh2 --libs)
3489 libssh2=yes
3490 else
3491 if test "$libssh2" = "yes" ; then
3492 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3494 libssh2=no
3498 ##########################################
3499 # libssh2_sftp_fsync probe
3501 if test "$libssh2" = "yes"; then
3502 cat > $TMPC <<EOF
3503 #include <stdio.h>
3504 #include <libssh2.h>
3505 #include <libssh2_sftp.h>
3506 int main(void) {
3507 LIBSSH2_SESSION *session;
3508 LIBSSH2_SFTP *sftp;
3509 LIBSSH2_SFTP_HANDLE *sftp_handle;
3510 session = libssh2_session_init ();
3511 sftp = libssh2_sftp_init (session);
3512 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3513 libssh2_sftp_fsync (sftp_handle);
3514 return 0;
3517 # libssh2_cflags/libssh2_libs defined in previous test.
3518 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3519 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3523 ##########################################
3524 # linux-aio probe
3526 if test "$linux_aio" != "no" ; then
3527 cat > $TMPC <<EOF
3528 #include <libaio.h>
3529 #include <sys/eventfd.h>
3530 #include <stddef.h>
3531 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3533 if compile_prog "" "-laio" ; then
3534 linux_aio=yes
3535 else
3536 if test "$linux_aio" = "yes" ; then
3537 feature_not_found "linux AIO" "Install libaio devel"
3539 linux_aio=no
3543 ##########################################
3544 # TPM passthrough is only on x86 Linux
3546 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3547 tpm_passthrough=$tpm
3548 else
3549 tpm_passthrough=no
3552 # TPM emulator is for all posix systems
3553 if test "$mingw32" != "yes"; then
3554 tpm_emulator=$tpm
3555 else
3556 tpm_emulator=no
3558 ##########################################
3559 # attr probe
3561 if test "$attr" != "no" ; then
3562 cat > $TMPC <<EOF
3563 #include <stdio.h>
3564 #include <sys/types.h>
3565 #ifdef CONFIG_LIBATTR
3566 #include <attr/xattr.h>
3567 #else
3568 #include <sys/xattr.h>
3569 #endif
3570 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3572 if compile_prog "" "" ; then
3573 attr=yes
3574 # Older distros have <attr/xattr.h>, and need -lattr:
3575 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3576 attr=yes
3577 LIBS="-lattr $LIBS"
3578 libattr=yes
3579 else
3580 if test "$attr" = "yes" ; then
3581 feature_not_found "ATTR" "Install libc6 or libattr devel"
3583 attr=no
3587 ##########################################
3588 # iovec probe
3589 cat > $TMPC <<EOF
3590 #include <sys/types.h>
3591 #include <sys/uio.h>
3592 #include <unistd.h>
3593 int main(void) { return sizeof(struct iovec); }
3595 iovec=no
3596 if compile_prog "" "" ; then
3597 iovec=yes
3600 ##########################################
3601 # preadv probe
3602 cat > $TMPC <<EOF
3603 #include <sys/types.h>
3604 #include <sys/uio.h>
3605 #include <unistd.h>
3606 int main(void) { return preadv(0, 0, 0, 0); }
3608 preadv=no
3609 if compile_prog "" "" ; then
3610 preadv=yes
3613 ##########################################
3614 # fdt probe
3615 # fdt support is mandatory for at least some target architectures,
3616 # so insist on it if we're building those system emulators.
3617 fdt_required=no
3618 for target in $target_list; do
3619 case $target in
3620 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
3621 fdt_required=yes
3623 esac
3624 done
3626 if test "$fdt_required" = "yes"; then
3627 if test "$fdt" = "no"; then
3628 error_exit "fdt disabled but some requested targets require it." \
3629 "You can turn off fdt only if you also disable all the system emulation" \
3630 "targets which need it (by specifying a cut down --target-list)."
3632 fdt=yes
3635 if test "$fdt" != "no" ; then
3636 fdt_libs="-lfdt"
3637 # explicitly check for libfdt_env.h as it is missing in some stable installs
3638 # and test for required functions to make sure we are on a version >= 1.4.2
3639 cat > $TMPC << EOF
3640 #include <libfdt.h>
3641 #include <libfdt_env.h>
3642 int main(void) { fdt_first_subnode(0, 0); return 0; }
3644 if compile_prog "" "$fdt_libs" ; then
3645 # system DTC is good - use it
3646 fdt=yes
3647 else
3648 # have GIT checkout, so activate dtc submodule
3649 if test -e "${source_path}/.git" ; then
3650 git_submodules="${git_submodules} dtc"
3652 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3653 fdt=yes
3654 dtc_internal="yes"
3655 mkdir -p dtc
3656 if [ "$pwd_is_source_path" != "y" ] ; then
3657 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3658 symlink "$source_path/dtc/scripts" "dtc/scripts"
3660 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3661 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3662 elif test "$fdt" = "yes" ; then
3663 # Not a git build & no libfdt found, prompt for system install
3664 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3665 "Please install the DTC (libfdt) devel package"
3666 else
3667 # don't have and don't want
3668 fdt_libs=
3669 fdt=no
3674 libs_softmmu="$libs_softmmu $fdt_libs"
3676 ##########################################
3677 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3679 if test "$opengl" != "no" ; then
3680 opengl_pkgs="epoxy libdrm gbm"
3681 if $pkg_config $opengl_pkgs x11; then
3682 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3683 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3684 opengl=yes
3685 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3686 gtk_gl="yes"
3688 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3689 else
3690 if test "$opengl" = "yes" ; then
3691 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3693 opengl_cflags=""
3694 opengl_libs=""
3695 opengl=no
3699 if test "$opengl" = "yes"; then
3700 cat > $TMPC << EOF
3701 #include <epoxy/egl.h>
3702 #ifndef EGL_MESA_image_dma_buf_export
3703 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3704 #endif
3705 int main(void) { return 0; }
3707 if compile_prog "" "" ; then
3708 opengl_dmabuf=yes
3713 ##########################################
3714 # glusterfs probe
3715 if test "$glusterfs" != "no" ; then
3716 if $pkg_config --atleast-version=3 glusterfs-api; then
3717 glusterfs="yes"
3718 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3719 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3720 if $pkg_config --atleast-version=4 glusterfs-api; then
3721 glusterfs_xlator_opt="yes"
3723 if $pkg_config --atleast-version=5 glusterfs-api; then
3724 glusterfs_discard="yes"
3726 if $pkg_config --atleast-version=6 glusterfs-api; then
3727 glusterfs_fallocate="yes"
3728 glusterfs_zerofill="yes"
3730 else
3731 if test "$glusterfs" = "yes" ; then
3732 feature_not_found "GlusterFS backend support" \
3733 "Install glusterfs-api devel >= 3"
3735 glusterfs="no"
3739 # Check for inotify functions when we are building linux-user
3740 # emulator. This is done because older glibc versions don't
3741 # have syscall stubs for these implemented. In that case we
3742 # don't provide them even if kernel supports them.
3744 inotify=no
3745 cat > $TMPC << EOF
3746 #include <sys/inotify.h>
3749 main(void)
3751 /* try to start inotify */
3752 return inotify_init();
3755 if compile_prog "" "" ; then
3756 inotify=yes
3759 inotify1=no
3760 cat > $TMPC << EOF
3761 #include <sys/inotify.h>
3764 main(void)
3766 /* try to start inotify */
3767 return inotify_init1(0);
3770 if compile_prog "" "" ; then
3771 inotify1=yes
3774 # check if pipe2 is there
3775 pipe2=no
3776 cat > $TMPC << EOF
3777 #include <unistd.h>
3778 #include <fcntl.h>
3780 int main(void)
3782 int pipefd[2];
3783 return pipe2(pipefd, O_CLOEXEC);
3786 if compile_prog "" "" ; then
3787 pipe2=yes
3790 # check if accept4 is there
3791 accept4=no
3792 cat > $TMPC << EOF
3793 #include <sys/socket.h>
3794 #include <stddef.h>
3796 int main(void)
3798 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3799 return 0;
3802 if compile_prog "" "" ; then
3803 accept4=yes
3806 # check if tee/splice is there. vmsplice was added same time.
3807 splice=no
3808 cat > $TMPC << EOF
3809 #include <unistd.h>
3810 #include <fcntl.h>
3811 #include <limits.h>
3813 int main(void)
3815 int len, fd = 0;
3816 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3817 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3818 return 0;
3821 if compile_prog "" "" ; then
3822 splice=yes
3825 ##########################################
3826 # libnuma probe
3828 if test "$numa" != "no" ; then
3829 cat > $TMPC << EOF
3830 #include <numa.h>
3831 int main(void) { return numa_available(); }
3834 if compile_prog "" "-lnuma" ; then
3835 numa=yes
3836 libs_softmmu="-lnuma $libs_softmmu"
3837 else
3838 if test "$numa" = "yes" ; then
3839 feature_not_found "numa" "install numactl devel"
3841 numa=no
3845 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3846 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3847 exit 1
3850 ##########################################
3851 # tcmalloc probe
3853 if test "$tcmalloc" = "yes" ; then
3854 cat > $TMPC << EOF
3855 #include <stdlib.h>
3856 int main(void) { malloc(1); return 0; }
3859 if compile_prog "" "-ltcmalloc" ; then
3860 LIBS="-ltcmalloc $LIBS"
3861 else
3862 feature_not_found "tcmalloc" "install gperftools devel"
3866 ##########################################
3867 # jemalloc probe
3869 if test "$jemalloc" = "yes" ; then
3870 cat > $TMPC << EOF
3871 #include <stdlib.h>
3872 int main(void) { malloc(1); return 0; }
3875 if compile_prog "" "-ljemalloc" ; then
3876 LIBS="-ljemalloc $LIBS"
3877 else
3878 feature_not_found "jemalloc" "install jemalloc devel"
3882 ##########################################
3883 # signalfd probe
3884 signalfd="no"
3885 cat > $TMPC << EOF
3886 #include <unistd.h>
3887 #include <sys/syscall.h>
3888 #include <signal.h>
3889 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3892 if compile_prog "" "" ; then
3893 signalfd=yes
3896 # check if eventfd is supported
3897 eventfd=no
3898 cat > $TMPC << EOF
3899 #include <sys/eventfd.h>
3901 int main(void)
3903 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3906 if compile_prog "" "" ; then
3907 eventfd=yes
3910 # check if memfd is supported
3911 memfd=no
3912 cat > $TMPC << EOF
3913 #include <sys/memfd.h>
3915 int main(void)
3917 return memfd_create("foo", MFD_ALLOW_SEALING);
3920 if compile_prog "" "" ; then
3921 memfd=yes
3926 # check for fallocate
3927 fallocate=no
3928 cat > $TMPC << EOF
3929 #include <fcntl.h>
3931 int main(void)
3933 fallocate(0, 0, 0, 0);
3934 return 0;
3937 if compile_prog "" "" ; then
3938 fallocate=yes
3941 # check for fallocate hole punching
3942 fallocate_punch_hole=no
3943 cat > $TMPC << EOF
3944 #include <fcntl.h>
3945 #include <linux/falloc.h>
3947 int main(void)
3949 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3950 return 0;
3953 if compile_prog "" "" ; then
3954 fallocate_punch_hole=yes
3957 # check that fallocate supports range zeroing inside the file
3958 fallocate_zero_range=no
3959 cat > $TMPC << EOF
3960 #include <fcntl.h>
3961 #include <linux/falloc.h>
3963 int main(void)
3965 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3966 return 0;
3969 if compile_prog "" "" ; then
3970 fallocate_zero_range=yes
3973 # check for posix_fallocate
3974 posix_fallocate=no
3975 cat > $TMPC << EOF
3976 #include <fcntl.h>
3978 int main(void)
3980 posix_fallocate(0, 0, 0);
3981 return 0;
3984 if compile_prog "" "" ; then
3985 posix_fallocate=yes
3988 # check for sync_file_range
3989 sync_file_range=no
3990 cat > $TMPC << EOF
3991 #include <fcntl.h>
3993 int main(void)
3995 sync_file_range(0, 0, 0, 0);
3996 return 0;
3999 if compile_prog "" "" ; then
4000 sync_file_range=yes
4003 # check for linux/fiemap.h and FS_IOC_FIEMAP
4004 fiemap=no
4005 cat > $TMPC << EOF
4006 #include <sys/ioctl.h>
4007 #include <linux/fs.h>
4008 #include <linux/fiemap.h>
4010 int main(void)
4012 ioctl(0, FS_IOC_FIEMAP, 0);
4013 return 0;
4016 if compile_prog "" "" ; then
4017 fiemap=yes
4020 # check for dup3
4021 dup3=no
4022 cat > $TMPC << EOF
4023 #include <unistd.h>
4025 int main(void)
4027 dup3(0, 0, 0);
4028 return 0;
4031 if compile_prog "" "" ; then
4032 dup3=yes
4035 # check for ppoll support
4036 ppoll=no
4037 cat > $TMPC << EOF
4038 #include <poll.h>
4040 int main(void)
4042 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4043 ppoll(&pfd, 1, 0, 0);
4044 return 0;
4047 if compile_prog "" "" ; then
4048 ppoll=yes
4051 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4052 prctl_pr_set_timerslack=no
4053 cat > $TMPC << EOF
4054 #include <sys/prctl.h>
4056 int main(void)
4058 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4059 return 0;
4062 if compile_prog "" "" ; then
4063 prctl_pr_set_timerslack=yes
4066 # check for epoll support
4067 epoll=no
4068 cat > $TMPC << EOF
4069 #include <sys/epoll.h>
4071 int main(void)
4073 epoll_create(0);
4074 return 0;
4077 if compile_prog "" "" ; then
4078 epoll=yes
4081 # epoll_create1 is a later addition
4082 # so we must check separately for its presence
4083 epoll_create1=no
4084 cat > $TMPC << EOF
4085 #include <sys/epoll.h>
4087 int main(void)
4089 /* Note that we use epoll_create1 as a value, not as
4090 * a function being called. This is necessary so that on
4091 * old SPARC glibc versions where the function was present in
4092 * the library but not declared in the header file we will
4093 * fail the configure check. (Otherwise we will get a compiler
4094 * warning but not an error, and will proceed to fail the
4095 * qemu compile where we compile with -Werror.)
4097 return (int)(uintptr_t)&epoll_create1;
4100 if compile_prog "" "" ; then
4101 epoll_create1=yes
4104 # check for sendfile support
4105 sendfile=no
4106 cat > $TMPC << EOF
4107 #include <sys/sendfile.h>
4109 int main(void)
4111 return sendfile(0, 0, 0, 0);
4114 if compile_prog "" "" ; then
4115 sendfile=yes
4118 # check for timerfd support (glibc 2.8 and newer)
4119 timerfd=no
4120 cat > $TMPC << EOF
4121 #include <sys/timerfd.h>
4123 int main(void)
4125 return(timerfd_create(CLOCK_REALTIME, 0));
4128 if compile_prog "" "" ; then
4129 timerfd=yes
4132 # check for setns and unshare support
4133 setns=no
4134 cat > $TMPC << EOF
4135 #include <sched.h>
4137 int main(void)
4139 int ret;
4140 ret = setns(0, 0);
4141 ret = unshare(0);
4142 return ret;
4145 if compile_prog "" "" ; then
4146 setns=yes
4149 # clock_adjtime probe
4150 clock_adjtime=no
4151 cat > $TMPC <<EOF
4152 #include <time.h>
4154 int main(void)
4156 return clock_adjtime(0, 0);
4159 clock_adjtime=no
4160 if compile_prog "" "" ; then
4161 clock_adjtime=yes
4164 # syncfs probe
4165 syncfs=no
4166 cat > $TMPC <<EOF
4167 #include <unistd.h>
4169 int main(void)
4171 return syncfs(0);
4174 syncfs=no
4175 if compile_prog "" "" ; then
4176 syncfs=yes
4179 # Check if tools are available to build documentation.
4180 if test "$docs" != "no" ; then
4181 if has makeinfo && has pod2man; then
4182 docs=yes
4183 else
4184 if test "$docs" = "yes" ; then
4185 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4187 docs=no
4191 # Search for bswap_32 function
4192 byteswap_h=no
4193 cat > $TMPC << EOF
4194 #include <byteswap.h>
4195 int main(void) { return bswap_32(0); }
4197 if compile_prog "" "" ; then
4198 byteswap_h=yes
4201 # Search for bswap32 function
4202 bswap_h=no
4203 cat > $TMPC << EOF
4204 #include <sys/endian.h>
4205 #include <sys/types.h>
4206 #include <machine/bswap.h>
4207 int main(void) { return bswap32(0); }
4209 if compile_prog "" "" ; then
4210 bswap_h=yes
4213 ##########################################
4214 # Do we have libiscsi >= 1.9.0
4215 if test "$libiscsi" != "no" ; then
4216 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4217 libiscsi="yes"
4218 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4219 libiscsi_libs=$($pkg_config --libs libiscsi)
4220 else
4221 if test "$libiscsi" = "yes" ; then
4222 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4224 libiscsi="no"
4228 ##########################################
4229 # Do we need libm
4230 cat > $TMPC << EOF
4231 #include <math.h>
4232 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4234 if compile_prog "" "" ; then
4236 elif compile_prog "" "-lm" ; then
4237 LIBS="-lm $LIBS"
4238 libs_qga="-lm $libs_qga"
4239 else
4240 error_exit "libm check failed"
4243 ##########################################
4244 # Do we need librt
4245 # uClibc provides 2 versions of clock_gettime(), one with realtime
4246 # support and one without. This means that the clock_gettime() don't
4247 # need -lrt. We still need it for timer_create() so we check for this
4248 # function in addition.
4249 cat > $TMPC <<EOF
4250 #include <signal.h>
4251 #include <time.h>
4252 int main(void) {
4253 timer_create(CLOCK_REALTIME, NULL, NULL);
4254 return clock_gettime(CLOCK_REALTIME, NULL);
4258 if compile_prog "" "" ; then
4260 # we need pthread for static linking. use previous pthread test result
4261 elif compile_prog "" "$pthread_lib -lrt" ; then
4262 LIBS="$LIBS -lrt"
4263 libs_qga="$libs_qga -lrt"
4266 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4267 "$haiku" != "yes" ; then
4268 libs_softmmu="-lutil $libs_softmmu"
4271 ##########################################
4272 # spice probe
4273 if test "$spice" != "no" ; then
4274 cat > $TMPC << EOF
4275 #include <spice.h>
4276 int main(void) { spice_server_new(); return 0; }
4278 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4279 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4280 if $pkg_config --atleast-version=0.12.0 spice-server && \
4281 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4282 compile_prog "$spice_cflags" "$spice_libs" ; then
4283 spice="yes"
4284 libs_softmmu="$libs_softmmu $spice_libs"
4285 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4286 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4287 spice_server_version=$($pkg_config --modversion spice-server)
4288 else
4289 if test "$spice" = "yes" ; then
4290 feature_not_found "spice" \
4291 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4293 spice="no"
4297 # check for smartcard support
4298 if test "$smartcard" != "no"; then
4299 if $pkg_config libcacard; then
4300 libcacard_cflags=$($pkg_config --cflags libcacard)
4301 libcacard_libs=$($pkg_config --libs libcacard)
4302 smartcard="yes"
4303 else
4304 if test "$smartcard" = "yes"; then
4305 feature_not_found "smartcard" "Install libcacard devel"
4307 smartcard="no"
4311 # check for libusb
4312 if test "$libusb" != "no" ; then
4313 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4314 libusb="yes"
4315 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4316 libusb_libs=$($pkg_config --libs libusb-1.0)
4317 else
4318 if test "$libusb" = "yes"; then
4319 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4321 libusb="no"
4325 # check for usbredirparser for usb network redirection support
4326 if test "$usb_redir" != "no" ; then
4327 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4328 usb_redir="yes"
4329 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4330 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4331 else
4332 if test "$usb_redir" = "yes"; then
4333 feature_not_found "usb-redir" "Install usbredir devel"
4335 usb_redir="no"
4339 ##########################################
4340 # check if we have VSS SDK headers for win
4342 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4343 case "$vss_win32_sdk" in
4344 "") vss_win32_include="-isystem $source_path" ;;
4345 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4346 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4347 vss_win32_include="-isystem $source_path/.sdk/vss"
4348 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4350 *) vss_win32_include="-isystem $vss_win32_sdk"
4351 esac
4352 cat > $TMPC << EOF
4353 #define __MIDL_user_allocate_free_DEFINED__
4354 #include <inc/win2003/vss.h>
4355 int main(void) { return VSS_CTX_BACKUP; }
4357 if compile_prog "$vss_win32_include" "" ; then
4358 guest_agent_with_vss="yes"
4359 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4360 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4361 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4362 else
4363 if test "$vss_win32_sdk" != "" ; then
4364 echo "ERROR: Please download and install Microsoft VSS SDK:"
4365 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4366 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4367 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4368 echo "ERROR: The headers are extracted in the directory \`inc'."
4369 feature_not_found "VSS support"
4371 guest_agent_with_vss="no"
4375 ##########################################
4376 # lookup Windows platform SDK (if not specified)
4377 # The SDK is needed only to build .tlb (type library) file of guest agent
4378 # VSS provider from the source. It is usually unnecessary because the
4379 # pre-compiled .tlb file is included.
4381 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4382 if test -z "$win_sdk"; then
4383 programfiles="$PROGRAMFILES"
4384 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4385 if test -n "$programfiles"; then
4386 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4387 else
4388 feature_not_found "Windows SDK"
4390 elif test "$win_sdk" = "no"; then
4391 win_sdk=""
4395 ##########################################
4396 # check if mingw environment provides a recent ntddscsi.h
4397 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4398 cat > $TMPC << EOF
4399 #include <windows.h>
4400 #include <ntddscsi.h>
4401 int main(void) {
4402 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4403 #error Missing required ioctl definitions
4404 #endif
4405 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4406 return addr.Lun;
4409 if compile_prog "" "" ; then
4410 guest_agent_ntddscsi=yes
4411 libs_qga="-lsetupapi $libs_qga"
4415 ##########################################
4416 # virgl renderer probe
4418 if test "$virglrenderer" != "no" ; then
4419 cat > $TMPC << EOF
4420 #include <virglrenderer.h>
4421 int main(void) { virgl_renderer_poll(); return 0; }
4423 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4424 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4425 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4426 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4427 virglrenderer="yes"
4428 else
4429 if test "$virglrenderer" = "yes" ; then
4430 feature_not_found "virglrenderer"
4432 virglrenderer="no"
4436 ##########################################
4437 # capstone
4439 case "$capstone" in
4440 "" | yes)
4441 if $pkg_config capstone; then
4442 capstone=system
4443 elif test -e "${source_path}/.git" ; then
4444 capstone=git
4445 elif test -e "${source_path}/capstone/Makefile" ; then
4446 capstone=internal
4447 elif test -z "$capstone" ; then
4448 capstone=no
4449 else
4450 feature_not_found "capstone" "Install capstone devel or git submodule"
4454 system)
4455 if ! $pkg_config capstone; then
4456 feature_not_found "capstone" "Install capstone devel"
4459 esac
4461 case "$capstone" in
4462 git | internal)
4463 if test "$capstone" = git; then
4464 git_submodules="${git_submodules} capstone"
4466 mkdir -p capstone
4467 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4468 if test "$mingw32" = "yes"; then
4469 LIBCAPSTONE=capstone.lib
4470 else
4471 LIBCAPSTONE=libcapstone.a
4473 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4476 system)
4477 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4478 LIBS="$($pkg_config --libs capstone) $LIBS"
4484 error_exit "Unknown state for capstone: $capstone"
4486 esac
4488 ##########################################
4489 # check if we have fdatasync
4491 fdatasync=no
4492 cat > $TMPC << EOF
4493 #include <unistd.h>
4494 int main(void) {
4495 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4496 return fdatasync(0);
4497 #else
4498 #error Not supported
4499 #endif
4502 if compile_prog "" "" ; then
4503 fdatasync=yes
4506 ##########################################
4507 # check if we have madvise
4509 madvise=no
4510 cat > $TMPC << EOF
4511 #include <sys/types.h>
4512 #include <sys/mman.h>
4513 #include <stddef.h>
4514 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4516 if compile_prog "" "" ; then
4517 madvise=yes
4520 ##########################################
4521 # check if we have posix_madvise
4523 posix_madvise=no
4524 cat > $TMPC << EOF
4525 #include <sys/mman.h>
4526 #include <stddef.h>
4527 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4529 if compile_prog "" "" ; then
4530 posix_madvise=yes
4533 ##########################################
4534 # check if we have posix_syslog
4536 posix_syslog=no
4537 cat > $TMPC << EOF
4538 #include <syslog.h>
4539 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4541 if compile_prog "" "" ; then
4542 posix_syslog=yes
4545 ##########################################
4546 # check if we have sem_timedwait
4548 sem_timedwait=no
4549 cat > $TMPC << EOF
4550 #include <semaphore.h>
4551 int main(void) { return sem_timedwait(0, 0); }
4553 if compile_prog "" "" ; then
4554 sem_timedwait=yes
4557 ##########################################
4558 # check if trace backend exists
4560 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4561 if test "$?" -ne 0 ; then
4562 error_exit "invalid trace backends" \
4563 "Please choose supported trace backends."
4566 ##########################################
4567 # For 'ust' backend, test if ust headers are present
4568 if have_backend "ust"; then
4569 cat > $TMPC << EOF
4570 #include <lttng/tracepoint.h>
4571 int main(void) { return 0; }
4573 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4574 if $pkg_config lttng-ust --exists; then
4575 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4576 else
4577 lttng_ust_libs="-llttng-ust -ldl"
4579 if $pkg_config liburcu-bp --exists; then
4580 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4581 else
4582 urcu_bp_libs="-lurcu-bp"
4585 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4586 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4587 else
4588 error_exit "Trace backend 'ust' missing lttng-ust header files"
4592 ##########################################
4593 # For 'dtrace' backend, test if 'dtrace' command is present
4594 if have_backend "dtrace"; then
4595 if ! has 'dtrace' ; then
4596 error_exit "dtrace command is not found in PATH $PATH"
4598 trace_backend_stap="no"
4599 if has 'stap' ; then
4600 trace_backend_stap="yes"
4604 ##########################################
4605 # check and set a backend for coroutine
4607 # We prefer ucontext, but it's not always possible. The fallback
4608 # is sigcontext. On Windows the only valid backend is the Windows
4609 # specific one.
4611 ucontext_works=no
4612 if test "$darwin" != "yes"; then
4613 cat > $TMPC << EOF
4614 #include <ucontext.h>
4615 #ifdef __stub_makecontext
4616 #error Ignoring glibc stub makecontext which will always fail
4617 #endif
4618 int main(void) { makecontext(0, 0, 0); return 0; }
4620 if compile_prog "" "" ; then
4621 ucontext_works=yes
4625 if test "$coroutine" = ""; then
4626 if test "$mingw32" = "yes"; then
4627 coroutine=win32
4628 elif test "$ucontext_works" = "yes"; then
4629 coroutine=ucontext
4630 else
4631 coroutine=sigaltstack
4633 else
4634 case $coroutine in
4635 windows)
4636 if test "$mingw32" != "yes"; then
4637 error_exit "'windows' coroutine backend only valid for Windows"
4639 # Unfortunately the user visible backend name doesn't match the
4640 # coroutine-*.c filename for this case, so we have to adjust it here.
4641 coroutine=win32
4643 ucontext)
4644 if test "$ucontext_works" != "yes"; then
4645 feature_not_found "ucontext"
4648 sigaltstack)
4649 if test "$mingw32" = "yes"; then
4650 error_exit "only the 'windows' coroutine backend is valid for Windows"
4654 error_exit "unknown coroutine backend $coroutine"
4656 esac
4659 if test "$coroutine_pool" = ""; then
4660 coroutine_pool=yes
4663 if test "$debug_stack_usage" = "yes"; then
4664 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4665 error_exit "stack usage debugging is not supported for $cpu"
4667 if test "$coroutine_pool" = "yes"; then
4668 echo "WARN: disabling coroutine pool for stack usage debugging"
4669 coroutine_pool=no
4674 ##########################################
4675 # check if we have open_by_handle_at
4677 open_by_handle_at=no
4678 cat > $TMPC << EOF
4679 #include <fcntl.h>
4680 #if !defined(AT_EMPTY_PATH)
4681 # error missing definition
4682 #else
4683 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4684 #endif
4686 if compile_prog "" "" ; then
4687 open_by_handle_at=yes
4690 ########################################
4691 # check if we have linux/magic.h
4693 linux_magic_h=no
4694 cat > $TMPC << EOF
4695 #include <linux/magic.h>
4696 int main(void) {
4697 return 0;
4700 if compile_prog "" "" ; then
4701 linux_magic_h=yes
4704 ########################################
4705 # check whether we can disable warning option with a pragma (this is needed
4706 # to silence warnings in the headers of some versions of external libraries).
4707 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4708 # only a warning.
4710 # If we can't selectively disable warning in the code, disable -Werror so that
4711 # the build doesn't fail anyway.
4713 pragma_disable_unused_but_set=no
4714 cat > $TMPC << EOF
4715 #pragma GCC diagnostic push
4716 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4717 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4718 #pragma GCC diagnostic pop
4720 int main(void) {
4721 return 0;
4724 if compile_prog "-Werror" "" ; then
4725 pragma_diagnostic_available=yes
4726 else
4727 werror=no
4730 ########################################
4731 # check if we have valgrind/valgrind.h
4733 valgrind_h=no
4734 cat > $TMPC << EOF
4735 #include <valgrind/valgrind.h>
4736 int main(void) {
4737 return 0;
4740 if compile_prog "" "" ; then
4741 valgrind_h=yes
4744 ########################################
4745 # check if environ is declared
4747 has_environ=no
4748 cat > $TMPC << EOF
4749 #include <unistd.h>
4750 int main(void) {
4751 environ = 0;
4752 return 0;
4755 if compile_prog "" "" ; then
4756 has_environ=yes
4759 ########################################
4760 # check if cpuid.h is usable.
4762 cat > $TMPC << EOF
4763 #include <cpuid.h>
4764 int main(void) {
4765 unsigned a, b, c, d;
4766 int max = __get_cpuid_max(0, 0);
4768 if (max >= 1) {
4769 __cpuid(1, a, b, c, d);
4772 if (max >= 7) {
4773 __cpuid_count(7, 0, a, b, c, d);
4776 return 0;
4779 if compile_prog "" "" ; then
4780 cpuid_h=yes
4783 ##########################################
4784 # avx2 optimization requirement check
4786 # There is no point enabling this if cpuid.h is not usable,
4787 # since we won't be able to select the new routines.
4789 if test $cpuid_h = yes; then
4790 cat > $TMPC << EOF
4791 #pragma GCC push_options
4792 #pragma GCC target("avx2")
4793 #include <cpuid.h>
4794 #include <immintrin.h>
4795 static int bar(void *a) {
4796 __m256i x = *(__m256i *)a;
4797 return _mm256_testz_si256(x, x);
4799 int main(int argc, char *argv[]) { return bar(argv[0]); }
4801 if compile_object "" ; then
4802 avx2_opt="yes"
4806 ########################################
4807 # check if __[u]int128_t is usable.
4809 int128=no
4810 cat > $TMPC << EOF
4811 #if defined(__clang_major__) && defined(__clang_minor__)
4812 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4813 # error __int128_t does not work in CLANG before 3.2
4814 # endif
4815 #endif
4816 __int128_t a;
4817 __uint128_t b;
4818 int main (void) {
4819 a = a + b;
4820 b = a * b;
4821 a = a * a;
4822 return 0;
4825 if compile_prog "" "" ; then
4826 int128=yes
4829 #########################################
4830 # See if 128-bit atomic operations are supported.
4832 atomic128=no
4833 if test "$int128" = "yes"; then
4834 cat > $TMPC << EOF
4835 int main(void)
4837 unsigned __int128 x = 0, y = 0;
4838 y = __atomic_load_16(&x, 0);
4839 __atomic_store_16(&x, y, 0);
4840 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4841 return 0;
4844 if compile_prog "" "" ; then
4845 atomic128=yes
4849 #########################################
4850 # See if 64-bit atomic operations are supported.
4851 # Note that without __atomic builtins, we can only
4852 # assume atomic loads/stores max at pointer size.
4854 cat > $TMPC << EOF
4855 #include <stdint.h>
4856 int main(void)
4858 uint64_t x = 0, y = 0;
4859 #ifdef __ATOMIC_RELAXED
4860 y = __atomic_load_8(&x, 0);
4861 __atomic_store_8(&x, y, 0);
4862 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4863 __atomic_exchange_8(&x, y, 0);
4864 __atomic_fetch_add_8(&x, y, 0);
4865 #else
4866 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4867 __sync_lock_test_and_set(&x, y);
4868 __sync_val_compare_and_swap(&x, y, 0);
4869 __sync_fetch_and_add(&x, y);
4870 #endif
4871 return 0;
4874 if compile_prog "" "" ; then
4875 atomic64=yes
4878 ########################################
4879 # check if getauxval is available.
4881 getauxval=no
4882 cat > $TMPC << EOF
4883 #include <sys/auxv.h>
4884 int main(void) {
4885 return getauxval(AT_HWCAP) == 0;
4888 if compile_prog "" "" ; then
4889 getauxval=yes
4892 ########################################
4893 # check if ccache is interfering with
4894 # semantic analysis of macros
4896 unset CCACHE_CPP2
4897 ccache_cpp2=no
4898 cat > $TMPC << EOF
4899 static const int Z = 1;
4900 #define fn() ({ Z; })
4901 #define TAUT(X) ((X) == Z)
4902 #define PAREN(X, Y) (X == Y)
4903 #define ID(X) (X)
4904 int main(int argc, char *argv[])
4906 int x = 0, y = 0;
4907 x = ID(x);
4908 x = fn();
4909 fn();
4910 if (PAREN(x, y)) return 0;
4911 if (TAUT(Z)) return 0;
4912 return 0;
4916 if ! compile_object "-Werror"; then
4917 ccache_cpp2=yes
4920 #################################################
4921 # clang does not support glibc + FORTIFY_SOURCE.
4923 if test "$fortify_source" != "no"; then
4924 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4925 fortify_source="no";
4926 elif test -n "$cxx" && has $cxx &&
4927 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4928 fortify_source="no";
4929 else
4930 fortify_source="yes"
4934 ##########################################
4935 # check if struct fsxattr is available via linux/fs.h
4937 have_fsxattr=no
4938 cat > $TMPC << EOF
4939 #include <linux/fs.h>
4940 struct fsxattr foo;
4941 int main(void) {
4942 return 0;
4945 if compile_prog "" "" ; then
4946 have_fsxattr=yes
4949 ##########################################
4950 # check if rtnetlink.h exists and is useful
4951 have_rtnetlink=no
4952 cat > $TMPC << EOF
4953 #include <linux/rtnetlink.h>
4954 int main(void) {
4955 return IFLA_PROTO_DOWN;
4958 if compile_prog "" "" ; then
4959 have_rtnetlink=yes
4962 ##########################################
4963 # check for usable AF_VSOCK environment
4964 have_af_vsock=no
4965 cat > $TMPC << EOF
4966 #include <errno.h>
4967 #include <sys/types.h>
4968 #include <sys/socket.h>
4969 #if !defined(AF_VSOCK)
4970 # error missing AF_VSOCK flag
4971 #endif
4972 #include <linux/vm_sockets.h>
4973 int main(void) {
4974 int sock, ret;
4975 struct sockaddr_vm svm;
4976 socklen_t len = sizeof(svm);
4977 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4978 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4979 if ((ret == -1) && (errno == ENOTCONN)) {
4980 return 0;
4982 return -1;
4985 if compile_prog "" "" ; then
4986 have_af_vsock=yes
4989 ##########################################
4990 # check for usable AF_ALG environment
4991 hava_afalg=no
4992 cat > $TMPC << EOF
4993 #include <errno.h>
4994 #include <sys/types.h>
4995 #include <sys/socket.h>
4996 #include <linux/if_alg.h>
4997 int main(void) {
4998 int sock;
4999 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5000 return sock;
5003 if compile_prog "" "" ; then
5004 have_afalg=yes
5006 if test "$crypto_afalg" = "yes"
5007 then
5008 if test "$have_afalg" != "yes"
5009 then
5010 error_exit "AF_ALG requested but could not be detected"
5015 #################################################
5016 # Sparc implicitly links with --relax, which is
5017 # incompatible with -r, so --no-relax should be
5018 # given. It does no harm to give it on other
5019 # platforms too.
5021 # Note: the prototype is needed since QEMU_CFLAGS
5022 # contains -Wmissing-prototypes
5023 cat > $TMPC << EOF
5024 extern int foo(void);
5025 int foo(void) { return 0; }
5027 if ! compile_object ""; then
5028 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5030 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5031 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5032 LD_REL_FLAGS=$i
5033 break
5035 done
5036 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5037 feature_not_found "modules" "Cannot find how to build relocatable objects"
5040 ##########################################
5041 # check for sysmacros.h
5043 have_sysmacros=no
5044 cat > $TMPC << EOF
5045 #include <sys/sysmacros.h>
5046 int main(void) {
5047 return makedev(0, 0);
5050 if compile_prog "" "" ; then
5051 have_sysmacros=yes
5054 ##########################################
5055 # Veritas HyperScale block driver VxHS
5056 # Check if libvxhs is installed
5058 if test "$vxhs" != "no" ; then
5059 cat > $TMPC <<EOF
5060 #include <stdint.h>
5061 #include <qnio/qnio_api.h>
5063 void *vxhs_callback;
5065 int main(void) {
5066 iio_init(QNIO_VERSION, vxhs_callback);
5067 return 0;
5070 vxhs_libs="-lvxhs -lssl"
5071 if compile_prog "" "$vxhs_libs" ; then
5072 vxhs=yes
5073 else
5074 if test "$vxhs" = "yes" ; then
5075 feature_not_found "vxhs block device" "Install libvxhs See github"
5077 vxhs=no
5081 ##########################################
5082 # check for _Static_assert()
5084 have_static_assert=no
5085 cat > $TMPC << EOF
5086 _Static_assert(1, "success");
5087 int main(void) {
5088 return 0;
5091 if compile_prog "" "" ; then
5092 have_static_assert=yes
5095 ##########################################
5096 # check for utmpx.h, it is missing e.g. on OpenBSD
5098 have_utmpx=no
5099 cat > $TMPC << EOF
5100 #include <utmpx.h>
5101 struct utmpx user_info;
5102 int main(void) {
5103 return 0;
5106 if compile_prog "" "" ; then
5107 have_utmpx=yes
5110 ##########################################
5111 # End of CC checks
5112 # After here, no more $cc or $ld runs
5114 if test "$gcov" = "yes" ; then
5115 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5116 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5117 elif test "$fortify_source" = "yes" ; then
5118 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5119 elif test "$debug" = "no"; then
5120 CFLAGS="-O2 $CFLAGS"
5123 ##########################################
5124 # Do we have libnfs
5125 if test "$libnfs" != "no" ; then
5126 if $pkg_config --atleast-version=1.9.3 libnfs; then
5127 libnfs="yes"
5128 libnfs_libs=$($pkg_config --libs libnfs)
5129 else
5130 if test "$libnfs" = "yes" ; then
5131 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5133 libnfs="no"
5137 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5138 if test "$werror" = "yes"; then
5139 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5142 if test "$solaris" = "no" ; then
5143 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5144 LDFLAGS="-Wl,--warn-common $LDFLAGS"
5148 # test if pod2man has --utf8 option
5149 if pod2man --help | grep -q utf8; then
5150 POD2MAN="pod2man --utf8"
5151 else
5152 POD2MAN="pod2man"
5155 # Use ASLR, no-SEH and DEP if available
5156 if test "$mingw32" = "yes" ; then
5157 for flag in --dynamicbase --no-seh --nxcompat; do
5158 if ld_has $flag ; then
5159 LDFLAGS="-Wl,$flag $LDFLAGS"
5161 done
5164 qemu_confdir=$sysconfdir$confsuffix
5165 qemu_moddir=$libdir$confsuffix
5166 qemu_datadir=$datadir$confsuffix
5167 qemu_localedir="$datadir/locale"
5169 # We can only support ivshmem if we have eventfd
5170 if [ "$eventfd" = "yes" ]; then
5171 ivshmem=yes
5174 tools=""
5175 if test "$want_tools" = "yes" ; then
5176 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
5177 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5178 tools="qemu-nbd\$(EXESUF) $tools"
5180 if [ "$ivshmem" = "yes" ]; then
5181 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5184 if test "$softmmu" = yes ; then
5185 if test "$linux" = yes; then
5186 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5187 virtfs=yes
5188 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5189 else
5190 if test "$virtfs" = yes; then
5191 error_exit "VirtFS requires libcap devel and libattr devel"
5193 virtfs=no
5195 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5196 mpath=yes
5197 else
5198 if test "$mpath" = yes; then
5199 error_exit "Multipath requires libmpathpersist devel"
5201 mpath=no
5203 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5204 else
5205 if test "$virtfs" = yes; then
5206 error_exit "VirtFS is supported only on Linux"
5208 virtfs=no
5209 if test "$mpath" = yes; then
5210 error_exit "Multipath is supported only on Linux"
5212 mpath=no
5214 if test "$xkbcommon" = "yes"; then
5215 tools="qemu-keymap\$(EXESUF) $tools"
5219 # Probe for guest agent support/options
5221 if [ "$guest_agent" != "no" ]; then
5222 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5223 tools="qemu-ga $tools"
5224 guest_agent=yes
5225 elif [ "$guest_agent" != yes ]; then
5226 guest_agent=no
5227 else
5228 error_exit "Guest agent is not supported on this platform"
5232 # Guest agent Window MSI package
5234 if test "$guest_agent" != yes; then
5235 if test "$guest_agent_msi" = yes; then
5236 error_exit "MSI guest agent package requires guest agent enabled"
5238 guest_agent_msi=no
5239 elif test "$mingw32" != "yes"; then
5240 if test "$guest_agent_msi" = "yes"; then
5241 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5243 guest_agent_msi=no
5244 elif ! has wixl; then
5245 if test "$guest_agent_msi" = "yes"; then
5246 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5248 guest_agent_msi=no
5249 else
5250 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5251 # disabled explicitly
5252 if test "$guest_agent_msi" != "no"; then
5253 guest_agent_msi=yes
5257 if test "$guest_agent_msi" = "yes"; then
5258 if test "$guest_agent_with_vss" = "yes"; then
5259 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5262 if test "$QEMU_GA_MANUFACTURER" = ""; then
5263 QEMU_GA_MANUFACTURER=QEMU
5266 if test "$QEMU_GA_DISTRO" = ""; then
5267 QEMU_GA_DISTRO=Linux
5270 if test "$QEMU_GA_VERSION" = ""; then
5271 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5274 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5276 case "$cpu" in
5277 x86_64)
5278 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5280 i386)
5281 QEMU_GA_MSI_ARCH="-D Arch=32"
5284 error_exit "CPU $cpu not supported for building installation package"
5286 esac
5289 # Mac OS X ships with a broken assembler
5290 roms=
5291 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5292 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5293 "$softmmu" = yes ; then
5294 # Different host OS linkers have different ideas about the name of the ELF
5295 # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
5296 # variant; and Windows uses i386pe.
5297 for emu in elf_i386 elf_i386_fbsd i386pe; do
5298 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5299 ld_i386_emulation="$emu"
5300 roms="optionrom"
5301 break
5303 done
5305 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5306 roms="$roms spapr-rtas"
5309 if test "$cpu" = "s390x" ; then
5310 roms="$roms s390-ccw"
5313 # Probe for the need for relocating the user-only binary.
5314 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5315 textseg_addr=
5316 case "$cpu" in
5317 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5318 # ??? Rationale for choosing this address
5319 textseg_addr=0x60000000
5321 mips)
5322 # A 256M aligned address, high in the address space, with enough
5323 # room for the code_gen_buffer above it before the stack.
5324 textseg_addr=0x60000000
5326 esac
5327 if [ -n "$textseg_addr" ]; then
5328 cat > $TMPC <<EOF
5329 int main(void) { return 0; }
5331 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5332 if ! compile_prog "" "$textseg_ldflags"; then
5333 # In case ld does not support -Ttext-segment, edit the default linker
5334 # script via sed to set the .text start addr. This is needed on FreeBSD
5335 # at least.
5336 if ! $ld --verbose >/dev/null 2>&1; then
5337 error_exit \
5338 "We need to link the QEMU user mode binaries at a" \
5339 "specific text address. Unfortunately your linker" \
5340 "doesn't support either the -Ttext-segment option or" \
5341 "printing the default linker script with --verbose." \
5342 "If you don't want the user mode binaries, pass the" \
5343 "--disable-user option to configure."
5346 $ld --verbose | sed \
5347 -e '1,/==================================================/d' \
5348 -e '/==================================================/,$d' \
5349 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5350 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5351 textseg_ldflags="-Wl,-T../config-host.ld"
5356 # Check that the C++ compiler exists and works with the C compiler.
5357 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5358 if has $cxx; then
5359 cat > $TMPC <<EOF
5360 int c_function(void);
5361 int main(void) { return c_function(); }
5364 compile_object
5366 cat > $TMPCXX <<EOF
5367 extern "C" {
5368 int c_function(void);
5370 int c_function(void) { return 42; }
5373 update_cxxflags
5375 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5376 # C++ compiler $cxx works ok with C compiler $cc
5378 else
5379 echo "C++ compiler $cxx does not work with C compiler $cc"
5380 echo "Disabling C++ specific optional code"
5381 cxx=
5383 else
5384 echo "No C++ compiler available; disabling C++ specific optional code"
5385 cxx=
5388 echo_version() {
5389 if test "$1" = "yes" ; then
5390 echo "($2)"
5394 # prepend pixman and ftd flags after all config tests are done
5395 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5396 libs_softmmu="$pixman_libs $libs_softmmu"
5398 echo "Install prefix $prefix"
5399 echo "BIOS directory $(eval echo $qemu_datadir)"
5400 echo "firmware path $(eval echo $firmwarepath)"
5401 echo "binary directory $(eval echo $bindir)"
5402 echo "library directory $(eval echo $libdir)"
5403 echo "module directory $(eval echo $qemu_moddir)"
5404 echo "libexec directory $(eval echo $libexecdir)"
5405 echo "include directory $(eval echo $includedir)"
5406 echo "config directory $(eval echo $sysconfdir)"
5407 if test "$mingw32" = "no" ; then
5408 echo "local state directory $(eval echo $local_statedir)"
5409 echo "Manual directory $(eval echo $mandir)"
5410 echo "ELF interp prefix $interp_prefix"
5411 else
5412 echo "local state directory queried at runtime"
5413 echo "Windows SDK $win_sdk"
5415 echo "Source path $source_path"
5416 echo "GIT submodules $git_submodules"
5417 echo "C compiler $cc"
5418 echo "Host C compiler $host_cc"
5419 echo "C++ compiler $cxx"
5420 echo "Objective-C compiler $objcc"
5421 echo "ARFLAGS $ARFLAGS"
5422 echo "CFLAGS $CFLAGS"
5423 echo "QEMU_CFLAGS $QEMU_CFLAGS"
5424 echo "LDFLAGS $LDFLAGS"
5425 echo "make $make"
5426 echo "install $install"
5427 echo "python $python"
5428 if test "$slirp" = "yes" ; then
5429 echo "smbd $smbd"
5431 echo "module support $modules"
5432 echo "host CPU $cpu"
5433 echo "host big endian $bigendian"
5434 echo "target list $target_list"
5435 echo "gprof enabled $gprof"
5436 echo "sparse enabled $sparse"
5437 echo "strip binaries $strip_opt"
5438 echo "profiler $profiler"
5439 echo "static build $static"
5440 if test "$darwin" = "yes" ; then
5441 echo "Cocoa support $cocoa"
5443 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5444 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
5445 echo "GTK GL support $gtk_gl"
5446 echo "VTE support $vte $(echo_version $vte $vteversion)"
5447 echo "TLS priority $tls_priority"
5448 echo "GNUTLS support $gnutls"
5449 echo "GNUTLS rnd $gnutls_rnd"
5450 echo "libgcrypt $gcrypt"
5451 echo "libgcrypt kdf $gcrypt_kdf"
5452 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
5453 echo "nettle kdf $nettle_kdf"
5454 echo "libtasn1 $tasn1"
5455 echo "curses support $curses"
5456 echo "virgl support $virglrenderer"
5457 echo "curl support $curl"
5458 echo "mingw32 support $mingw32"
5459 echo "Audio drivers $audio_drv_list"
5460 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5461 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5462 echo "VirtFS support $virtfs"
5463 echo "Multipath support $mpath"
5464 echo "VNC support $vnc"
5465 if test "$vnc" = "yes" ; then
5466 echo "VNC SASL support $vnc_sasl"
5467 echo "VNC JPEG support $vnc_jpeg"
5468 echo "VNC PNG support $vnc_png"
5470 if test -n "$sparc_cpu"; then
5471 echo "Target Sparc Arch $sparc_cpu"
5473 echo "xen support $xen"
5474 if test "$xen" = "yes" ; then
5475 echo "xen ctrl version $xen_ctrl_version"
5476 echo "pv dom build $xen_pv_domain_build"
5478 echo "brlapi support $brlapi"
5479 echo "bluez support $bluez"
5480 echo "Documentation $docs"
5481 echo "PIE $pie"
5482 echo "vde support $vde"
5483 echo "netmap support $netmap"
5484 echo "Linux AIO support $linux_aio"
5485 echo "ATTR/XATTR support $attr"
5486 echo "Install blobs $blobs"
5487 echo "KVM support $kvm"
5488 echo "HAX support $hax"
5489 echo "TCG support $tcg"
5490 if test "$tcg" = "yes" ; then
5491 echo "TCG debug enabled $debug_tcg"
5492 echo "TCG interpreter $tcg_interpreter"
5494 echo "RDMA support $rdma"
5495 echo "fdt support $fdt"
5496 echo "preadv support $preadv"
5497 echo "fdatasync $fdatasync"
5498 echo "madvise $madvise"
5499 echo "posix_madvise $posix_madvise"
5500 echo "libcap-ng support $cap_ng"
5501 echo "vhost-net support $vhost_net"
5502 echo "vhost-scsi support $vhost_scsi"
5503 echo "vhost-vsock support $vhost_vsock"
5504 echo "vhost-user support $vhost_user"
5505 echo "Trace backends $trace_backends"
5506 if have_backend "simple"; then
5507 echo "Trace output file $trace_file-<pid>"
5509 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5510 echo "rbd support $rbd"
5511 echo "xfsctl support $xfs"
5512 echo "smartcard support $smartcard"
5513 echo "libusb $libusb"
5514 echo "usb net redir $usb_redir"
5515 echo "OpenGL support $opengl"
5516 echo "OpenGL dmabufs $opengl_dmabuf"
5517 echo "libiscsi support $libiscsi"
5518 echo "libnfs support $libnfs"
5519 echo "build guest agent $guest_agent"
5520 echo "QGA VSS support $guest_agent_with_vss"
5521 echo "QGA w32 disk info $guest_agent_ntddscsi"
5522 echo "QGA MSI support $guest_agent_msi"
5523 echo "seccomp support $seccomp"
5524 echo "coroutine backend $coroutine"
5525 echo "coroutine pool $coroutine_pool"
5526 echo "debug stack usage $debug_stack_usage"
5527 echo "crypto afalg $crypto_afalg"
5528 echo "GlusterFS support $glusterfs"
5529 echo "gcov $gcov_tool"
5530 echo "gcov enabled $gcov"
5531 echo "TPM support $tpm"
5532 echo "libssh2 support $libssh2"
5533 echo "TPM passthrough $tpm_passthrough"
5534 echo "TPM emulator $tpm_emulator"
5535 echo "QOM debugging $qom_cast_debug"
5536 echo "Live block migration $live_block_migration"
5537 echo "lzo support $lzo"
5538 echo "snappy support $snappy"
5539 echo "bzip2 support $bzip2"
5540 echo "NUMA host support $numa"
5541 echo "tcmalloc support $tcmalloc"
5542 echo "jemalloc support $jemalloc"
5543 echo "avx2 optimization $avx2_opt"
5544 echo "replication support $replication"
5545 echo "VxHS block device $vxhs"
5546 echo "capstone $capstone"
5548 if test "$sdl_too_old" = "yes"; then
5549 echo "-> Your SDL version is too old - please upgrade to have SDL support"
5552 if test "$supported_cpu" = "no"; then
5553 echo
5554 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5555 echo
5556 echo "CPU host architecture $cpu support is not currently maintained."
5557 echo "The QEMU project intends to remove support for this host CPU in"
5558 echo "a future release if nobody volunteers to maintain it and to"
5559 echo "provide a build host for our continuous integration setup."
5560 echo "configure has succeeded and you can continue to build, but"
5561 echo "if you care about QEMU on this platform you should contact"
5562 echo "us upstream at qemu-devel@nongnu.org."
5565 if test "$supported_os" = "no"; then
5566 echo
5567 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5568 echo
5569 echo "Host OS $targetos support is not currently maintained."
5570 echo "The QEMU project intends to remove support for this host OS in"
5571 echo "a future release if nobody volunteers to maintain it and to"
5572 echo "provide a build host for our continuous integration setup."
5573 echo "configure has succeeded and you can continue to build, but"
5574 echo "if you care about QEMU on this platform you should contact"
5575 echo "us upstream at qemu-devel@nongnu.org."
5578 config_host_mak="config-host.mak"
5580 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5582 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5583 echo >> $config_host_mak
5585 echo all: >> $config_host_mak
5586 echo "prefix=$prefix" >> $config_host_mak
5587 echo "bindir=$bindir" >> $config_host_mak
5588 echo "libdir=$libdir" >> $config_host_mak
5589 echo "libexecdir=$libexecdir" >> $config_host_mak
5590 echo "includedir=$includedir" >> $config_host_mak
5591 echo "mandir=$mandir" >> $config_host_mak
5592 echo "sysconfdir=$sysconfdir" >> $config_host_mak
5593 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5594 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5595 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
5596 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5597 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5598 if test "$mingw32" = "no" ; then
5599 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5601 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5602 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5603 echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
5604 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5605 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5606 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5607 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5609 echo "ARCH=$ARCH" >> $config_host_mak
5611 if test "$debug_tcg" = "yes" ; then
5612 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5614 if test "$strip_opt" = "yes" ; then
5615 echo "STRIP=${strip}" >> $config_host_mak
5617 if test "$bigendian" = "yes" ; then
5618 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5620 if test "$mingw32" = "yes" ; then
5621 echo "CONFIG_WIN32=y" >> $config_host_mak
5622 rc_version=$(cat $source_path/VERSION)
5623 version_major=${rc_version%%.*}
5624 rc_version=${rc_version#*.}
5625 version_minor=${rc_version%%.*}
5626 rc_version=${rc_version#*.}
5627 version_subminor=${rc_version%%.*}
5628 version_micro=0
5629 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5630 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5631 if test "$guest_agent_with_vss" = "yes" ; then
5632 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5633 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5634 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5636 if test "$guest_agent_ntddscsi" = "yes" ; then
5637 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5639 if test "$guest_agent_msi" = "yes"; then
5640 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5641 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5642 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5643 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5644 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5645 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5646 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5648 else
5649 echo "CONFIG_POSIX=y" >> $config_host_mak
5652 if test "$linux" = "yes" ; then
5653 echo "CONFIG_LINUX=y" >> $config_host_mak
5656 if test "$darwin" = "yes" ; then
5657 echo "CONFIG_DARWIN=y" >> $config_host_mak
5660 if test "$solaris" = "yes" ; then
5661 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5663 if test "$haiku" = "yes" ; then
5664 echo "CONFIG_HAIKU=y" >> $config_host_mak
5666 if test "$static" = "yes" ; then
5667 echo "CONFIG_STATIC=y" >> $config_host_mak
5669 if test "$profiler" = "yes" ; then
5670 echo "CONFIG_PROFILER=y" >> $config_host_mak
5672 if test "$slirp" = "yes" ; then
5673 echo "CONFIG_SLIRP=y" >> $config_host_mak
5674 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5676 if test "$vde" = "yes" ; then
5677 echo "CONFIG_VDE=y" >> $config_host_mak
5678 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5680 if test "$netmap" = "yes" ; then
5681 echo "CONFIG_NETMAP=y" >> $config_host_mak
5683 if test "$l2tpv3" = "yes" ; then
5684 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5686 if test "$cap_ng" = "yes" ; then
5687 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5689 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5690 for drv in $audio_drv_list; do
5691 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5692 echo "$def=y" >> $config_host_mak
5693 done
5694 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5695 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5696 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5697 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5698 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
5699 if test "$audio_pt_int" = "yes" ; then
5700 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5702 if test "$audio_win_int" = "yes" ; then
5703 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5705 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5706 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5707 if test "$vnc" = "yes" ; then
5708 echo "CONFIG_VNC=y" >> $config_host_mak
5710 if test "$vnc_sasl" = "yes" ; then
5711 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5713 if test "$vnc_jpeg" = "yes" ; then
5714 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5716 if test "$vnc_png" = "yes" ; then
5717 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5719 if test "$xkbcommon" = "yes" ; then
5720 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
5721 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
5723 if test "$fnmatch" = "yes" ; then
5724 echo "CONFIG_FNMATCH=y" >> $config_host_mak
5726 if test "$xfs" = "yes" ; then
5727 echo "CONFIG_XFS=y" >> $config_host_mak
5729 qemu_version=$(head $source_path/VERSION)
5730 echo "VERSION=$qemu_version" >>$config_host_mak
5731 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5732 echo "SRC_PATH=$source_path" >> $config_host_mak
5733 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5734 if [ "$docs" = "yes" ] ; then
5735 echo "BUILD_DOCS=yes" >> $config_host_mak
5737 if test "$modules" = "yes"; then
5738 # $shacmd can generate a hash started with digit, which the compiler doesn't
5739 # like as an symbol. So prefix it with an underscore
5740 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5741 echo "CONFIG_MODULES=y" >> $config_host_mak
5743 if test "$sdl" = "yes" ; then
5744 echo "CONFIG_SDL=y" >> $config_host_mak
5745 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5746 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5747 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
5749 if test "$cocoa" = "yes" ; then
5750 echo "CONFIG_COCOA=y" >> $config_host_mak
5752 if test "$curses" = "yes" ; then
5753 echo "CONFIG_CURSES=y" >> $config_host_mak
5755 if test "$pipe2" = "yes" ; then
5756 echo "CONFIG_PIPE2=y" >> $config_host_mak
5758 if test "$accept4" = "yes" ; then
5759 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5761 if test "$splice" = "yes" ; then
5762 echo "CONFIG_SPLICE=y" >> $config_host_mak
5764 if test "$eventfd" = "yes" ; then
5765 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5767 if test "$memfd" = "yes" ; then
5768 echo "CONFIG_MEMFD=y" >> $config_host_mak
5770 if test "$fallocate" = "yes" ; then
5771 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5773 if test "$fallocate_punch_hole" = "yes" ; then
5774 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5776 if test "$fallocate_zero_range" = "yes" ; then
5777 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5779 if test "$posix_fallocate" = "yes" ; then
5780 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5782 if test "$sync_file_range" = "yes" ; then
5783 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5785 if test "$fiemap" = "yes" ; then
5786 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5788 if test "$dup3" = "yes" ; then
5789 echo "CONFIG_DUP3=y" >> $config_host_mak
5791 if test "$ppoll" = "yes" ; then
5792 echo "CONFIG_PPOLL=y" >> $config_host_mak
5794 if test "$prctl_pr_set_timerslack" = "yes" ; then
5795 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5797 if test "$epoll" = "yes" ; then
5798 echo "CONFIG_EPOLL=y" >> $config_host_mak
5800 if test "$epoll_create1" = "yes" ; then
5801 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5803 if test "$sendfile" = "yes" ; then
5804 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5806 if test "$timerfd" = "yes" ; then
5807 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5809 if test "$setns" = "yes" ; then
5810 echo "CONFIG_SETNS=y" >> $config_host_mak
5812 if test "$clock_adjtime" = "yes" ; then
5813 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5815 if test "$syncfs" = "yes" ; then
5816 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5818 if test "$inotify" = "yes" ; then
5819 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5821 if test "$inotify1" = "yes" ; then
5822 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5824 if test "$sem_timedwait" = "yes" ; then
5825 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5827 if test "$byteswap_h" = "yes" ; then
5828 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5830 if test "$bswap_h" = "yes" ; then
5831 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5833 if test "$curl" = "yes" ; then
5834 echo "CONFIG_CURL=m" >> $config_host_mak
5835 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5836 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5838 if test "$brlapi" = "yes" ; then
5839 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5840 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
5842 if test "$bluez" = "yes" ; then
5843 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5844 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5846 if test "$glib_subprocess" = "yes" ; then
5847 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5849 if test "$gtk" = "yes" ; then
5850 echo "CONFIG_GTK=y" >> $config_host_mak
5851 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5852 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5853 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5854 if test "$gtk_gl" = "yes" ; then
5855 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5858 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5859 if test "$gnutls" = "yes" ; then
5860 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5862 if test "$gnutls_rnd" = "yes" ; then
5863 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5865 if test "$gcrypt" = "yes" ; then
5866 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5867 if test "$gcrypt_hmac" = "yes" ; then
5868 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5870 if test "$gcrypt_kdf" = "yes" ; then
5871 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5874 if test "$nettle" = "yes" ; then
5875 echo "CONFIG_NETTLE=y" >> $config_host_mak
5876 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5877 if test "$nettle_kdf" = "yes" ; then
5878 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5881 if test "$tasn1" = "yes" ; then
5882 echo "CONFIG_TASN1=y" >> $config_host_mak
5884 if test "$have_ifaddrs_h" = "yes" ; then
5885 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5887 if test "$have_broken_size_max" = "yes" ; then
5888 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5891 # Work around a system header bug with some kernel/XFS header
5892 # versions where they both try to define 'struct fsxattr':
5893 # xfs headers will not try to redefine structs from linux headers
5894 # if this macro is set.
5895 if test "$have_fsxattr" = "yes" ; then
5896 echo "HAVE_FSXATTR=y" >> $config_host_mak
5898 if test "$vte" = "yes" ; then
5899 echo "CONFIG_VTE=y" >> $config_host_mak
5900 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5902 if test "$virglrenderer" = "yes" ; then
5903 echo "CONFIG_VIRGL=y" >> $config_host_mak
5904 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5905 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5907 if test "$xen" = "yes" ; then
5908 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5909 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5910 if test "$xen_pv_domain_build" = "yes" ; then
5911 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5914 if test "$linux_aio" = "yes" ; then
5915 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5917 if test "$attr" = "yes" ; then
5918 echo "CONFIG_ATTR=y" >> $config_host_mak
5920 if test "$libattr" = "yes" ; then
5921 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5923 if test "$virtfs" = "yes" ; then
5924 echo "CONFIG_VIRTFS=y" >> $config_host_mak
5926 if test "$mpath" = "yes" ; then
5927 echo "CONFIG_MPATH=y" >> $config_host_mak
5929 if test "$vhost_scsi" = "yes" ; then
5930 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5932 if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
5933 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5935 if test "$vhost_vsock" = "yes" ; then
5936 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5938 if test "$vhost_user" = "yes" ; then
5939 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5941 if test "$blobs" = "yes" ; then
5942 echo "INSTALL_BLOBS=yes" >> $config_host_mak
5944 if test "$iovec" = "yes" ; then
5945 echo "CONFIG_IOVEC=y" >> $config_host_mak
5947 if test "$preadv" = "yes" ; then
5948 echo "CONFIG_PREADV=y" >> $config_host_mak
5950 if test "$fdt" = "yes" ; then
5951 echo "CONFIG_FDT=y" >> $config_host_mak
5953 if test "$signalfd" = "yes" ; then
5954 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5956 if test "$tcg" = "yes"; then
5957 echo "CONFIG_TCG=y" >> $config_host_mak
5958 if test "$tcg_interpreter" = "yes" ; then
5959 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5962 if test "$fdatasync" = "yes" ; then
5963 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5965 if test "$madvise" = "yes" ; then
5966 echo "CONFIG_MADVISE=y" >> $config_host_mak
5968 if test "$posix_madvise" = "yes" ; then
5969 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5972 if test "$spice" = "yes" ; then
5973 echo "CONFIG_SPICE=y" >> $config_host_mak
5976 if test "$smartcard" = "yes" ; then
5977 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5978 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
5979 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
5982 if test "$libusb" = "yes" ; then
5983 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5984 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
5985 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
5988 if test "$usb_redir" = "yes" ; then
5989 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5990 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
5991 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
5994 if test "$opengl" = "yes" ; then
5995 echo "CONFIG_OPENGL=y" >> $config_host_mak
5996 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5997 if test "$opengl_dmabuf" = "yes" ; then
5998 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6002 if test "$avx2_opt" = "yes" ; then
6003 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6006 if test "$lzo" = "yes" ; then
6007 echo "CONFIG_LZO=y" >> $config_host_mak
6010 if test "$snappy" = "yes" ; then
6011 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6014 if test "$bzip2" = "yes" ; then
6015 echo "CONFIG_BZIP2=y" >> $config_host_mak
6016 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6019 if test "$libiscsi" = "yes" ; then
6020 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6021 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6022 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6025 if test "$libnfs" = "yes" ; then
6026 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6027 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6030 if test "$seccomp" = "yes"; then
6031 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6032 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6033 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6036 # XXX: suppress that
6037 if [ "$bsd" = "yes" ] ; then
6038 echo "CONFIG_BSD=y" >> $config_host_mak
6041 if test "$localtime_r" = "yes" ; then
6042 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6044 if test "$qom_cast_debug" = "yes" ; then
6045 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6047 if test "$rbd" = "yes" ; then
6048 echo "CONFIG_RBD=m" >> $config_host_mak
6049 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6050 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6053 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6054 if test "$coroutine_pool" = "yes" ; then
6055 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6056 else
6057 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6060 if test "$debug_stack_usage" = "yes" ; then
6061 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6064 if test "$crypto_afalg" = "yes" ; then
6065 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6068 if test "$open_by_handle_at" = "yes" ; then
6069 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6072 if test "$linux_magic_h" = "yes" ; then
6073 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6076 if test "$pragma_diagnostic_available" = "yes" ; then
6077 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6080 if test "$valgrind_h" = "yes" ; then
6081 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6084 if test "$has_environ" = "yes" ; then
6085 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6088 if test "$cpuid_h" = "yes" ; then
6089 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6092 if test "$int128" = "yes" ; then
6093 echo "CONFIG_INT128=y" >> $config_host_mak
6096 if test "$atomic128" = "yes" ; then
6097 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6100 if test "$atomic64" = "yes" ; then
6101 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6104 if test "$getauxval" = "yes" ; then
6105 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6108 if test "$glusterfs" = "yes" ; then
6109 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6110 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6111 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6114 if test "$glusterfs_xlator_opt" = "yes" ; then
6115 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6118 if test "$glusterfs_discard" = "yes" ; then
6119 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6122 if test "$glusterfs_fallocate" = "yes" ; then
6123 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6126 if test "$glusterfs_zerofill" = "yes" ; then
6127 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6130 if test "$libssh2" = "yes" ; then
6131 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6132 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6133 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6136 if test "$live_block_migration" = "yes" ; then
6137 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6140 if test "$tpm" = "yes"; then
6141 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6142 # TPM passthrough support?
6143 if test "$tpm_passthrough" = "yes"; then
6144 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6146 # TPM emulator support?
6147 if test "$tpm_emulator" = "yes"; then
6148 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6152 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6153 if have_backend "nop"; then
6154 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6156 if have_backend "simple"; then
6157 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6158 # Set the appropriate trace file.
6159 trace_file="\"$trace_file-\" FMT_pid"
6161 if have_backend "log"; then
6162 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6164 if have_backend "ust"; then
6165 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6167 if have_backend "dtrace"; then
6168 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6169 if test "$trace_backend_stap" = "yes" ; then
6170 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6173 if have_backend "ftrace"; then
6174 if test "$linux" = "yes" ; then
6175 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6176 else
6177 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6180 if have_backend "syslog"; then
6181 if test "$posix_syslog" = "yes" ; then
6182 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6183 else
6184 feature_not_found "syslog(trace backend)" "syslog not available"
6187 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6189 if test "$rdma" = "yes" ; then
6190 echo "CONFIG_RDMA=y" >> $config_host_mak
6191 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6194 if test "$have_rtnetlink" = "yes" ; then
6195 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6198 if test "$replication" = "yes" ; then
6199 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6202 if test "$have_af_vsock" = "yes" ; then
6203 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6206 if test "$have_sysmacros" = "yes" ; then
6207 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6210 if test "$have_static_assert" = "yes" ; then
6211 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6214 if test "$have_utmpx" = "yes" ; then
6215 echo "HAVE_UTMPX=y" >> $config_host_mak
6218 if test "$ivshmem" = "yes" ; then
6219 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6221 if test "$capstone" != "no" ; then
6222 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6225 # Hold two types of flag:
6226 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6227 # a thread we have a handle to
6228 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6229 # platform
6230 if test "$pthread_setname_np" = "yes" ; then
6231 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6232 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6235 if test "$vxhs" = "yes" ; then
6236 echo "CONFIG_VXHS=y" >> $config_host_mak
6237 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6240 if test "$tcg_interpreter" = "yes"; then
6241 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6242 elif test "$ARCH" = "sparc64" ; then
6243 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6244 elif test "$ARCH" = "s390x" ; then
6245 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6246 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6247 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6248 elif test "$ARCH" = "ppc64" ; then
6249 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6250 else
6251 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6253 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6255 echo "TOOLS=$tools" >> $config_host_mak
6256 echo "ROMS=$roms" >> $config_host_mak
6257 echo "MAKE=$make" >> $config_host_mak
6258 echo "INSTALL=$install" >> $config_host_mak
6259 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6260 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6261 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6262 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6263 echo "PYTHON=$python" >> $config_host_mak
6264 echo "CC=$cc" >> $config_host_mak
6265 if $iasl -h > /dev/null 2>&1; then
6266 echo "IASL=$iasl" >> $config_host_mak
6268 echo "CC_I386=$cc_i386" >> $config_host_mak
6269 echo "HOST_CC=$host_cc" >> $config_host_mak
6270 echo "CXX=$cxx" >> $config_host_mak
6271 echo "OBJCC=$objcc" >> $config_host_mak
6272 echo "AR=$ar" >> $config_host_mak
6273 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6274 echo "AS=$as" >> $config_host_mak
6275 echo "CCAS=$ccas" >> $config_host_mak
6276 echo "CPP=$cpp" >> $config_host_mak
6277 echo "OBJCOPY=$objcopy" >> $config_host_mak
6278 echo "LD=$ld" >> $config_host_mak
6279 echo "NM=$nm" >> $config_host_mak
6280 echo "WINDRES=$windres" >> $config_host_mak
6281 echo "CFLAGS=$CFLAGS" >> $config_host_mak
6282 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6283 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6284 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6285 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6286 if test "$sparse" = "yes" ; then
6287 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
6288 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
6289 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
6290 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6291 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6293 if test "$cross_prefix" != ""; then
6294 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6295 else
6296 echo "AUTOCONF_HOST := " >> $config_host_mak
6298 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6299 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6300 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6301 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6302 echo "LIBS+=$LIBS" >> $config_host_mak
6303 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6304 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6305 echo "EXESUF=$EXESUF" >> $config_host_mak
6306 echo "DSOSUF=$DSOSUF" >> $config_host_mak
6307 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6308 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6309 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6310 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6311 echo "POD2MAN=$POD2MAN" >> $config_host_mak
6312 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6313 if test "$gcov" = "yes" ; then
6314 echo "CONFIG_GCOV=y" >> $config_host_mak
6315 echo "GCOV=$gcov_tool" >> $config_host_mak
6318 # use included Linux headers
6319 if test "$linux" = "yes" ; then
6320 mkdir -p linux-headers
6321 case "$cpu" in
6322 i386|x86_64|x32)
6323 linux_arch=x86
6325 ppcemb|ppc|ppc64)
6326 linux_arch=powerpc
6328 s390x)
6329 linux_arch=s390
6331 aarch64)
6332 linux_arch=arm64
6334 mips64)
6335 linux_arch=mips
6338 # For most CPUs the kernel architecture name and QEMU CPU name match.
6339 linux_arch="$cpu"
6341 esac
6342 # For non-KVM architectures we will not have asm headers
6343 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6344 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6348 for target in $target_list; do
6349 target_dir="$target"
6350 config_target_mak=$target_dir/config-target.mak
6351 target_name=$(echo $target | cut -d '-' -f 1)
6352 target_bigendian="no"
6354 case "$target_name" in
6355 armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6356 target_bigendian=yes
6358 esac
6359 target_softmmu="no"
6360 target_user_only="no"
6361 target_linux_user="no"
6362 target_bsd_user="no"
6363 case "$target" in
6364 ${target_name}-softmmu)
6365 target_softmmu="yes"
6367 ${target_name}-linux-user)
6368 target_user_only="yes"
6369 target_linux_user="yes"
6371 ${target_name}-bsd-user)
6372 target_user_only="yes"
6373 target_bsd_user="yes"
6376 error_exit "Target '$target' not recognised"
6377 exit 1
6379 esac
6381 mkdir -p $target_dir
6382 echo "# Automatically generated by configure - do not modify" > $config_target_mak
6384 bflt="no"
6385 mttcg="no"
6386 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6387 gdb_xml_files=""
6389 TARGET_ARCH="$target_name"
6390 TARGET_BASE_ARCH=""
6391 TARGET_ABI_DIR=""
6393 case "$target_name" in
6394 i386)
6395 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6397 x86_64)
6398 TARGET_BASE_ARCH=i386
6399 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6401 alpha)
6402 mttcg="yes"
6404 arm|armeb)
6405 TARGET_ARCH=arm
6406 bflt="yes"
6407 mttcg="yes"
6408 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6410 aarch64)
6411 TARGET_BASE_ARCH=arm
6412 bflt="yes"
6413 mttcg="yes"
6414 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6416 cris)
6418 hppa)
6420 lm32)
6422 m68k)
6423 bflt="yes"
6424 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
6426 microblaze|microblazeel)
6427 TARGET_ARCH=microblaze
6428 bflt="yes"
6430 mips|mipsel)
6431 TARGET_ARCH=mips
6432 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6434 mipsn32|mipsn32el)
6435 TARGET_ARCH=mips64
6436 TARGET_BASE_ARCH=mips
6437 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6438 echo "TARGET_ABI32=y" >> $config_target_mak
6440 mips64|mips64el)
6441 TARGET_ARCH=mips64
6442 TARGET_BASE_ARCH=mips
6443 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6445 moxie)
6447 nios2)
6449 or1k)
6450 TARGET_ARCH=openrisc
6451 TARGET_BASE_ARCH=openrisc
6453 ppc)
6454 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6456 ppcemb)
6457 TARGET_BASE_ARCH=ppc
6458 TARGET_ABI_DIR=ppc
6459 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6461 ppc64)
6462 TARGET_BASE_ARCH=ppc
6463 TARGET_ABI_DIR=ppc
6464 mttcg=yes
6465 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6467 ppc64le)
6468 TARGET_ARCH=ppc64
6469 TARGET_BASE_ARCH=ppc
6470 TARGET_ABI_DIR=ppc
6471 mttcg=yes
6472 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6474 ppc64abi32)
6475 TARGET_ARCH=ppc64
6476 TARGET_BASE_ARCH=ppc
6477 TARGET_ABI_DIR=ppc
6478 echo "TARGET_ABI32=y" >> $config_target_mak
6479 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6481 sh4|sh4eb)
6482 TARGET_ARCH=sh4
6483 bflt="yes"
6485 sparc)
6487 sparc64)
6488 TARGET_BASE_ARCH=sparc
6490 sparc32plus)
6491 TARGET_ARCH=sparc64
6492 TARGET_BASE_ARCH=sparc
6493 TARGET_ABI_DIR=sparc
6494 echo "TARGET_ABI32=y" >> $config_target_mak
6496 s390x)
6497 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
6499 tilegx)
6501 tricore)
6503 unicore32)
6505 xtensa|xtensaeb)
6506 TARGET_ARCH=xtensa
6509 error_exit "Unsupported target CPU"
6511 esac
6512 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6513 if [ "$TARGET_BASE_ARCH" = "" ]; then
6514 TARGET_BASE_ARCH=$TARGET_ARCH
6517 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6519 upper() {
6520 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6523 target_arch_name="$(upper $TARGET_ARCH)"
6524 echo "TARGET_$target_arch_name=y" >> $config_target_mak
6525 echo "TARGET_NAME=$target_name" >> $config_target_mak
6526 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6527 if [ "$TARGET_ABI_DIR" = "" ]; then
6528 TARGET_ABI_DIR=$TARGET_ARCH
6530 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6531 if [ "$HOST_VARIANT_DIR" != "" ]; then
6532 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6535 if supported_xen_target $target; then
6536 echo "CONFIG_XEN=y" >> $config_target_mak
6537 if test "$xen_pci_passthrough" = yes; then
6538 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6541 if supported_kvm_target $target; then
6542 echo "CONFIG_KVM=y" >> $config_target_mak
6543 if test "$vhost_net" = "yes" ; then
6544 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6545 if test "$vhost_user" = "yes" ; then
6546 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6550 if supported_hax_target $target; then
6551 echo "CONFIG_HAX=y" >> $config_target_mak
6553 if test "$target_bigendian" = "yes" ; then
6554 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6556 if test "$target_softmmu" = "yes" ; then
6557 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6558 if test "$mttcg" = "yes" ; then
6559 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6562 if test "$target_user_only" = "yes" ; then
6563 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6564 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6566 if test "$target_linux_user" = "yes" ; then
6567 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6569 list=""
6570 if test ! -z "$gdb_xml_files" ; then
6571 for x in $gdb_xml_files; do
6572 list="$list $source_path/gdb-xml/$x"
6573 done
6574 echo "TARGET_XML_FILES=$list" >> $config_target_mak
6577 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6578 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6580 if test "$target_bsd_user" = "yes" ; then
6581 echo "CONFIG_BSD_USER=y" >> $config_target_mak
6584 # generate QEMU_CFLAGS/LDFLAGS for targets
6586 cflags=""
6587 ldflags=""
6589 disas_config() {
6590 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6591 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6594 for i in $ARCH $TARGET_BASE_ARCH ; do
6595 case "$i" in
6596 alpha)
6597 disas_config "ALPHA"
6599 aarch64)
6600 if test -n "${cxx}"; then
6601 disas_config "ARM_A64"
6604 arm)
6605 disas_config "ARM"
6606 if test -n "${cxx}"; then
6607 disas_config "ARM_A64"
6610 cris)
6611 disas_config "CRIS"
6613 hppa)
6614 disas_config "HPPA"
6616 i386|x86_64|x32)
6617 disas_config "I386"
6619 lm32)
6620 disas_config "LM32"
6622 m68k)
6623 disas_config "M68K"
6625 microblaze*)
6626 disas_config "MICROBLAZE"
6628 mips*)
6629 disas_config "MIPS"
6631 moxie*)
6632 disas_config "MOXIE"
6634 nios2)
6635 disas_config "NIOS2"
6637 or1k)
6638 disas_config "OPENRISC"
6640 ppc*)
6641 disas_config "PPC"
6643 s390*)
6644 disas_config "S390"
6646 sh4)
6647 disas_config "SH4"
6649 sparc*)
6650 disas_config "SPARC"
6652 xtensa*)
6653 disas_config "XTENSA"
6655 esac
6656 done
6657 if test "$tcg_interpreter" = "yes" ; then
6658 disas_config "TCI"
6661 case "$ARCH" in
6662 alpha)
6663 # Ensure there's only a single GP
6664 cflags="-msmall-data $cflags"
6666 esac
6668 if test "$gprof" = "yes" ; then
6669 echo "TARGET_GPROF=yes" >> $config_target_mak
6670 if test "$target_linux_user" = "yes" ; then
6671 cflags="-p $cflags"
6672 ldflags="-p $ldflags"
6674 if test "$target_softmmu" = "yes" ; then
6675 ldflags="-p $ldflags"
6676 echo "GPROF_CFLAGS=-p" >> $config_target_mak
6680 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6681 ldflags="$ldflags $textseg_ldflags"
6684 # Newer kernels on s390 check for an S390_PGSTE program header and
6685 # enable the pgste page table extensions in that case. This makes
6686 # the vm.allocate_pgste sysctl unnecessary. We enable this program
6687 # header if
6688 # - we build on s390x
6689 # - we build the system emulation for s390x (qemu-system-s390x)
6690 # - KVM is enabled
6691 # - the linker supports --s390-pgste
6692 if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
6693 if ld_has --s390-pgste ; then
6694 ldflags="-Wl,--s390-pgste $ldflags"
6698 echo "LDFLAGS+=$ldflags" >> $config_target_mak
6699 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6701 done # for target in $targets
6703 if [ "$dtc_internal" = "yes" ]; then
6704 echo "config-host.h: subdir-dtc" >> $config_host_mak
6706 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
6707 echo "config-host.h: subdir-capstone" >> $config_host_mak
6709 if test -n "$LIBCAPSTONE"; then
6710 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
6713 if test "$numa" = "yes"; then
6714 echo "CONFIG_NUMA=y" >> $config_host_mak
6717 if test "$ccache_cpp2" = "yes"; then
6718 echo "export CCACHE_CPP2=y" >> $config_host_mak
6721 # build tree in object directory in case the source is not in the current directory
6722 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
6723 DIRS="$DIRS docs docs/interop fsdev scsi"
6724 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6725 DIRS="$DIRS roms/seabios roms/vgabios"
6726 DIRS="$DIRS qapi-generated"
6727 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6728 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6729 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6730 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6731 FILES="$FILES pc-bios/spapr-rtas/Makefile"
6732 FILES="$FILES pc-bios/s390-ccw/Makefile"
6733 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6734 FILES="$FILES pc-bios/qemu-icon.bmp"
6735 FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
6736 for bios_file in \
6737 $source_path/pc-bios/*.bin \
6738 $source_path/pc-bios/*.lid \
6739 $source_path/pc-bios/*.aml \
6740 $source_path/pc-bios/*.rom \
6741 $source_path/pc-bios/*.dtb \
6742 $source_path/pc-bios/*.img \
6743 $source_path/pc-bios/openbios-* \
6744 $source_path/pc-bios/u-boot.* \
6745 $source_path/pc-bios/palcode-*
6747 FILES="$FILES pc-bios/$(basename $bios_file)"
6748 done
6749 for test_file in $(find $source_path/tests/acpi-test-data -type f)
6751 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6752 done
6753 mkdir -p $DIRS
6754 for f in $FILES ; do
6755 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6756 symlink "$source_path/$f" "$f"
6758 done
6760 # temporary config to build submodules
6761 for rom in seabios vgabios ; do
6762 config_mak=roms/$rom/config.mak
6763 echo "# Automatically generated by configure - do not modify" > $config_mak
6764 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6765 echo "AS=$as" >> $config_mak
6766 echo "CCAS=$ccas" >> $config_mak
6767 echo "CC=$cc" >> $config_mak
6768 echo "BCC=bcc" >> $config_mak
6769 echo "CPP=$cpp" >> $config_mak
6770 echo "OBJCOPY=objcopy" >> $config_mak
6771 echo "IASL=$iasl" >> $config_mak
6772 echo "LD=$ld" >> $config_mak
6773 done
6775 # set up tests data directory
6776 if [ ! -e tests/data ]; then
6777 symlink "$source_path/tests/data" tests/data
6780 # set up qemu-iotests in this build directory
6781 iotests_common_env="tests/qemu-iotests/common.env"
6782 iotests_check="tests/qemu-iotests/check"
6784 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6785 echo >> "$iotests_common_env"
6786 echo "export PYTHON='$python'" >> "$iotests_common_env"
6788 if [ ! -e "$iotests_check" ]; then
6789 symlink "$source_path/$iotests_check" "$iotests_check"
6792 # Save the configure command line for later reuse.
6793 cat <<EOD >config.status
6794 #!/bin/sh
6795 # Generated by configure.
6796 # Run this file to recreate the current configuration.
6797 # Compiler output produced by configure, useful for debugging
6798 # configure, is in config.log if it exists.
6800 printf "exec" >>config.status
6801 printf " '%s'" "$0" "$@" >>config.status
6802 echo ' "$@"' >>config.status
6803 chmod +x config.status
6805 rm -r "$TMPDIR1"