docker: change Fedora images to run with python3
[qemu/ar7.git] / configure
blob886abe6a39c03f0222eb7ac3d9a51e55bda6544d
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_hvf_target() {
215 test "$hvf" = "yes" || return 1
216 glob "$1" "*-softmmu" || return 1
217 case "${1%-softmmu}" in
218 x86_64)
219 return 0
221 esac
222 return 1
225 supported_target() {
226 case "$1" in
227 *-softmmu)
229 *-linux-user)
230 if test "$linux" != "yes"; then
231 print_error "Target '$target' is only available on a Linux host"
232 return 1
235 *-bsd-user)
236 if test "$bsd" != "yes"; then
237 print_error "Target '$target' is only available on a BSD host"
238 return 1
242 print_error "Invalid target name '$target'"
243 return 1
245 esac
246 test "$tcg" = "yes" && return 0
247 supported_kvm_target "$1" && return 0
248 supported_xen_target "$1" && return 0
249 supported_hax_target "$1" && return 0
250 supported_hvf_target "$1" && return 0
251 print_error "TCG disabled, but hardware accelerator not available for '$target'"
252 return 1
256 ld_has() {
257 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
260 # default parameters
261 source_path=$(dirname "$0")
262 cpu=""
263 iasl="iasl"
264 interp_prefix="/usr/gnemul/qemu-%M"
265 static="no"
266 cross_prefix=""
267 audio_drv_list=""
268 block_drv_rw_whitelist=""
269 block_drv_ro_whitelist=""
270 host_cc="cc"
271 libs_softmmu=""
272 libs_tools=""
273 audio_pt_int=""
274 audio_win_int=""
275 cc_i386=i386-pc-linux-gnu-gcc
276 libs_qga=""
277 debug_info="yes"
278 stack_protector=""
280 if test -e "$source_path/.git"
281 then
282 git_update=yes
283 git_submodules="ui/keycodemapdb"
284 else
285 git_update=no
286 git_submodules=""
288 git="git"
290 # Don't accept a target_list environment variable.
291 unset target_list
293 # Default value for a variable defining feature "foo".
294 # * foo="no" feature will only be used if --enable-foo arg is given
295 # * foo="" feature will be searched for, and if found, will be used
296 # unless --disable-foo is given
297 # * foo="yes" this value will only be set by --enable-foo flag.
298 # feature will searched for,
299 # if not found, configure exits with error
301 # Always add --enable-foo and --disable-foo command line args.
302 # Distributions want to ensure that several features are compiled in, and it
303 # is impossible without a --enable-foo that exits if a feature is not found.
305 bluez=""
306 brlapi=""
307 curl=""
308 curses=""
309 docs=""
310 fdt=""
311 netmap="no"
312 sdl=""
313 sdlabi=""
314 virtfs=""
315 mpath=""
316 vnc="yes"
317 sparse="no"
318 vde=""
319 vnc_sasl=""
320 vnc_jpeg=""
321 vnc_png=""
322 xkbcommon=""
323 xen=""
324 xen_ctrl_version=""
325 xen_pv_domain_build="no"
326 xen_pci_passthrough=""
327 linux_aio=""
328 cap_ng=""
329 attr=""
330 libattr=""
331 xfs=""
332 tcg="yes"
334 vhost_net="no"
335 vhost_scsi="no"
336 vhost_vsock="no"
337 vhost_user=""
338 kvm="no"
339 hax="no"
340 hvf="no"
341 rdma=""
342 gprof="no"
343 debug_tcg="no"
344 debug="no"
345 fortify_source=""
346 strip_opt="yes"
347 tcg_interpreter="no"
348 bigendian="no"
349 mingw32="no"
350 gcov="no"
351 gcov_tool="gcov"
352 EXESUF=""
353 DSOSUF=".so"
354 LDFLAGS_SHARED="-shared"
355 modules="no"
356 prefix="/usr/local"
357 mandir="\${prefix}/share/man"
358 datadir="\${prefix}/share"
359 firmwarepath="\${prefix}/share/qemu-firmware"
360 qemu_docdir="\${prefix}/share/doc/qemu"
361 bindir="\${prefix}/bin"
362 libdir="\${prefix}/lib"
363 libexecdir="\${prefix}/libexec"
364 includedir="\${prefix}/include"
365 sysconfdir="\${prefix}/etc"
366 local_statedir="\${prefix}/var"
367 confsuffix="/qemu"
368 slirp="yes"
369 oss_lib=""
370 bsd="no"
371 linux="no"
372 solaris="no"
373 profiler="no"
374 cocoa="no"
375 softmmu="yes"
376 linux_user="no"
377 bsd_user="no"
378 blobs="yes"
379 pkgversion=""
380 pie=""
381 qom_cast_debug="yes"
382 trace_backends="log"
383 trace_file="trace"
384 spice=""
385 rbd=""
386 smartcard=""
387 libusb=""
388 usb_redir=""
389 opengl=""
390 opengl_dmabuf="no"
391 cpuid_h="no"
392 avx2_opt="no"
393 zlib="yes"
394 capstone=""
395 lzo=""
396 snappy=""
397 bzip2=""
398 guest_agent=""
399 guest_agent_with_vss="no"
400 guest_agent_ntddscsi="no"
401 guest_agent_msi=""
402 vss_win32_sdk=""
403 win_sdk="no"
404 want_tools="yes"
405 libiscsi=""
406 libnfs=""
407 coroutine=""
408 coroutine_pool=""
409 debug_stack_usage="no"
410 crypto_afalg="no"
411 seccomp=""
412 glusterfs=""
413 glusterfs_xlator_opt="no"
414 glusterfs_discard="no"
415 glusterfs_fallocate="no"
416 glusterfs_zerofill="no"
417 gtk=""
418 gtkabi=""
419 gtk_gl="no"
420 tls_priority="NORMAL"
421 gnutls=""
422 gnutls_rnd=""
423 nettle=""
424 nettle_kdf="no"
425 gcrypt=""
426 gcrypt_hmac="no"
427 gcrypt_kdf="no"
428 vte=""
429 virglrenderer=""
430 tpm="yes"
431 libssh2=""
432 live_block_migration="yes"
433 numa=""
434 tcmalloc="no"
435 jemalloc="no"
436 replication="yes"
437 vxhs=""
438 libxml2=""
440 supported_cpu="no"
441 supported_os="no"
442 bogus_os="no"
443 malloc_trim=""
445 # parse CC options first
446 for opt do
447 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
448 case "$opt" in
449 --cross-prefix=*) cross_prefix="$optarg"
451 --cc=*) CC="$optarg"
453 --cxx=*) CXX="$optarg"
455 --source-path=*) source_path="$optarg"
457 --cpu=*) cpu="$optarg"
459 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
460 EXTRA_CFLAGS="$optarg"
462 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
463 EXTRA_CXXFLAGS="$optarg"
465 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
466 EXTRA_LDFLAGS="$optarg"
468 --enable-debug-info) debug_info="yes"
470 --disable-debug-info) debug_info="no"
472 esac
473 done
474 # OS specific
475 # Using uname is really, really broken. Once we have the right set of checks
476 # we can eliminate its usage altogether.
478 # Preferred compiler:
479 # ${CC} (if set)
480 # ${cross_prefix}gcc (if cross-prefix specified)
481 # system compiler
482 if test -z "${CC}${cross_prefix}"; then
483 cc="$host_cc"
484 else
485 cc="${CC-${cross_prefix}gcc}"
488 if test -z "${CXX}${cross_prefix}"; then
489 cxx="c++"
490 else
491 cxx="${CXX-${cross_prefix}g++}"
494 ar="${AR-${cross_prefix}ar}"
495 as="${AS-${cross_prefix}as}"
496 ccas="${CCAS-$cc}"
497 cpp="${CPP-$cc -E}"
498 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
499 ld="${LD-${cross_prefix}ld}"
500 ranlib="${RANLIB-${cross_prefix}ranlib}"
501 nm="${NM-${cross_prefix}nm}"
502 strip="${STRIP-${cross_prefix}strip}"
503 windres="${WINDRES-${cross_prefix}windres}"
504 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
505 query_pkg_config() {
506 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
508 pkg_config=query_pkg_config
509 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
510 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
512 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
513 ARFLAGS="${ARFLAGS-rv}"
515 # default flags for all hosts
516 # We use -fwrapv to tell the compiler that we require a C dialect where
517 # left shift of signed integers is well defined and has the expected
518 # 2s-complement style results. (Both clang and gcc agree that it
519 # provides these semantics.)
520 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
521 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
522 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
523 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
524 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/accel/tcg -I\$(SRC_PATH)/include"
525 if test "$debug_info" = "yes"; then
526 CFLAGS="-g $CFLAGS"
527 LDFLAGS="-g $LDFLAGS"
530 # make source path absolute
531 source_path=$(cd "$source_path"; pwd)
533 # running configure in the source tree?
534 # we know that's the case if configure is there.
535 if test -f "./configure"; then
536 pwd_is_source_path="y"
537 else
538 pwd_is_source_path="n"
541 check_define() {
542 cat > $TMPC <<EOF
543 #if !defined($1)
544 #error $1 not defined
545 #endif
546 int main(void) { return 0; }
548 compile_object
551 check_include() {
552 cat > $TMPC <<EOF
553 #include <$1>
554 int main(void) { return 0; }
556 compile_object
559 write_c_skeleton() {
560 cat > $TMPC <<EOF
561 int main(void) { return 0; }
565 if check_define __linux__ ; then
566 targetos="Linux"
567 elif check_define _WIN32 ; then
568 targetos='MINGW32'
569 elif check_define __OpenBSD__ ; then
570 targetos='OpenBSD'
571 elif check_define __sun__ ; then
572 targetos='SunOS'
573 elif check_define __HAIKU__ ; then
574 targetos='Haiku'
575 elif check_define __FreeBSD__ ; then
576 targetos='FreeBSD'
577 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
578 targetos='GNU/kFreeBSD'
579 elif check_define __DragonFly__ ; then
580 targetos='DragonFly'
581 elif check_define __NetBSD__; then
582 targetos='NetBSD'
583 elif check_define __APPLE__; then
584 targetos='Darwin'
585 else
586 # This is a fatal error, but don't report it yet, because we
587 # might be going to just print the --help text, or it might
588 # be the result of a missing compiler.
589 targetos='bogus'
590 bogus_os='yes'
593 # Some host OSes need non-standard checks for which CPU to use.
594 # Note that these checks are broken for cross-compilation: if you're
595 # cross-compiling to one of these OSes then you'll need to specify
596 # the correct CPU with the --cpu option.
597 case $targetos in
598 Darwin)
599 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
600 # run 64-bit userspace code.
601 # If the user didn't specify a CPU explicitly and the kernel says this is
602 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
603 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
604 cpu="x86_64"
607 SunOS)
608 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
609 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
610 cpu="x86_64"
612 esac
614 if test ! -z "$cpu" ; then
615 # command line argument
617 elif check_define __i386__ ; then
618 cpu="i386"
619 elif check_define __x86_64__ ; then
620 if check_define __ILP32__ ; then
621 cpu="x32"
622 else
623 cpu="x86_64"
625 elif check_define __sparc__ ; then
626 if check_define __arch64__ ; then
627 cpu="sparc64"
628 else
629 cpu="sparc"
631 elif check_define _ARCH_PPC ; then
632 if check_define _ARCH_PPC64 ; then
633 cpu="ppc64"
634 else
635 cpu="ppc"
637 elif check_define __mips__ ; then
638 cpu="mips"
639 elif check_define __ia64__ ; then
640 cpu="ia64"
641 elif check_define __s390__ ; then
642 if check_define __s390x__ ; then
643 cpu="s390x"
644 else
645 cpu="s390"
647 elif check_define __arm__ ; then
648 cpu="arm"
649 elif check_define __aarch64__ ; then
650 cpu="aarch64"
651 else
652 cpu=$(uname -m)
655 ARCH=
656 # Normalise host CPU name and set ARCH.
657 # Note that this case should only have supported host CPUs, not guests.
658 case "$cpu" in
659 ppc|ppc64|s390|s390x|sparc64|x32)
660 cpu="$cpu"
661 supported_cpu="yes"
663 i386|i486|i586|i686|i86pc|BePC)
664 cpu="i386"
665 supported_cpu="yes"
667 x86_64|amd64)
668 cpu="x86_64"
669 supported_cpu="yes"
671 armv*b|armv*l|arm)
672 cpu="arm"
673 supported_cpu="yes"
675 aarch64)
676 cpu="aarch64"
677 supported_cpu="yes"
679 mips*)
680 cpu="mips"
681 supported_cpu="yes"
683 sparc|sun4[cdmuv])
684 cpu="sparc"
685 supported_cpu="yes"
688 # This will result in either an error or falling back to TCI later
689 ARCH=unknown
691 esac
692 if test -z "$ARCH"; then
693 ARCH="$cpu"
696 # OS specific
698 # host *BSD for user mode
699 HOST_VARIANT_DIR=""
701 case $targetos in
702 MINGW32*)
703 mingw32="yes"
704 hax="yes"
705 audio_possible_drivers="dsound sdl"
706 if check_include dsound.h; then
707 audio_drv_list="dsound"
708 else
709 audio_drv_list=""
711 supported_os="yes"
713 GNU/kFreeBSD)
714 bsd="yes"
715 audio_drv_list="oss"
716 audio_possible_drivers="oss sdl pa"
718 FreeBSD)
719 bsd="yes"
720 make="${MAKE-gmake}"
721 audio_drv_list="oss"
722 audio_possible_drivers="oss sdl pa"
723 # needed for kinfo_getvmmap(3) in libutil.h
724 LIBS="-lutil $LIBS"
725 # needed for kinfo_getproc
726 libs_qga="-lutil $libs_qga"
727 netmap="" # enable netmap autodetect
728 HOST_VARIANT_DIR="freebsd"
729 supported_os="yes"
731 DragonFly)
732 bsd="yes"
733 make="${MAKE-gmake}"
734 audio_drv_list="oss"
735 audio_possible_drivers="oss sdl pa"
736 HOST_VARIANT_DIR="dragonfly"
738 NetBSD)
739 bsd="yes"
740 make="${MAKE-gmake}"
741 audio_drv_list="oss"
742 audio_possible_drivers="oss sdl"
743 oss_lib="-lossaudio"
744 HOST_VARIANT_DIR="netbsd"
745 supported_os="yes"
747 OpenBSD)
748 bsd="yes"
749 make="${MAKE-gmake}"
750 audio_drv_list="sdl"
751 audio_possible_drivers="sdl"
752 HOST_VARIANT_DIR="openbsd"
754 Darwin)
755 bsd="yes"
756 darwin="yes"
757 hax="yes"
758 hvf="yes"
759 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
760 if [ "$cpu" = "x86_64" ] ; then
761 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
762 LDFLAGS="-arch x86_64 $LDFLAGS"
764 cocoa="yes"
765 audio_drv_list="coreaudio"
766 audio_possible_drivers="coreaudio sdl"
767 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
768 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
769 # Disable attempts to use ObjectiveC features in os/object.h since they
770 # won't work when we're compiling with gcc as a C compiler.
771 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
772 HOST_VARIANT_DIR="darwin"
773 supported_os="yes"
775 SunOS)
776 solaris="yes"
777 make="${MAKE-gmake}"
778 install="${INSTALL-ginstall}"
779 smbd="${SMBD-/usr/sfw/sbin/smbd}"
780 if test -f /usr/include/sys/soundcard.h ; then
781 audio_drv_list="oss"
783 audio_possible_drivers="oss sdl"
784 # needed for CMSG_ macros in sys/socket.h
785 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
786 # needed for TIOCWIN* defines in termios.h
787 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
788 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
789 solarisnetlibs="-lsocket -lnsl -lresolv"
790 LIBS="$solarisnetlibs $LIBS"
791 libs_qga="$solarisnetlibs $libs_qga"
793 Haiku)
794 haiku="yes"
795 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
796 LIBS="-lposix_error_mapper -lnetwork $LIBS"
798 Linux)
799 audio_drv_list="oss"
800 audio_possible_drivers="oss alsa sdl pa"
801 linux="yes"
802 linux_user="yes"
803 kvm="yes"
804 vhost_net="yes"
805 vhost_scsi="yes"
806 vhost_vsock="yes"
807 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
808 supported_os="yes"
810 esac
812 if [ "$bsd" = "yes" ] ; then
813 if [ "$darwin" != "yes" ] ; then
814 bsd_user="yes"
818 : ${make=${MAKE-make}}
819 : ${install=${INSTALL-install}}
820 : ${python=${PYTHON-python}}
821 : ${smbd=${SMBD-/usr/sbin/smbd}}
823 # Default objcc to clang if available, otherwise use CC
824 if has clang; then
825 objcc=clang
826 else
827 objcc="$cc"
830 if test "$mingw32" = "yes" ; then
831 EXESUF=".exe"
832 DSOSUF=".dll"
833 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
834 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
835 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
836 # MinGW needs -mthreads for TLS and macro _MT.
837 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
838 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
839 write_c_skeleton;
840 if compile_prog "" "-liberty" ; then
841 LIBS="-liberty $LIBS"
843 prefix="c:/Program Files/QEMU"
844 mandir="\${prefix}"
845 datadir="\${prefix}"
846 qemu_docdir="\${prefix}"
847 bindir="\${prefix}"
848 sysconfdir="\${prefix}"
849 local_statedir=
850 confsuffix=""
851 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
854 werror=""
856 for opt do
857 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
858 case "$opt" in
859 --help|-h) show_help=yes
861 --version|-V) exec cat $source_path/VERSION
863 --prefix=*) prefix="$optarg"
865 --interp-prefix=*) interp_prefix="$optarg"
867 --source-path=*)
869 --cross-prefix=*)
871 --cc=*)
873 --host-cc=*) host_cc="$optarg"
875 --cxx=*)
877 --iasl=*) iasl="$optarg"
879 --objcc=*) objcc="$optarg"
881 --make=*) make="$optarg"
883 --install=*) install="$optarg"
885 --python=*) python="$optarg"
887 --gcov=*) gcov_tool="$optarg"
889 --smbd=*) smbd="$optarg"
891 --extra-cflags=*)
893 --extra-cxxflags=*)
895 --extra-ldflags=*)
897 --enable-debug-info)
899 --disable-debug-info)
901 --enable-modules)
902 modules="yes"
904 --disable-modules)
905 modules="no"
907 --cpu=*)
909 --target-list=*) target_list="$optarg"
911 --enable-trace-backends=*) trace_backends="$optarg"
913 # XXX: backwards compatibility
914 --enable-trace-backend=*) trace_backends="$optarg"
916 --with-trace-file=*) trace_file="$optarg"
918 --enable-gprof) gprof="yes"
920 --enable-gcov) gcov="yes"
922 --static)
923 static="yes"
924 LDFLAGS="-static $LDFLAGS"
925 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
927 --mandir=*) mandir="$optarg"
929 --bindir=*) bindir="$optarg"
931 --libdir=*) libdir="$optarg"
933 --libexecdir=*) libexecdir="$optarg"
935 --includedir=*) includedir="$optarg"
937 --datadir=*) datadir="$optarg"
939 --with-confsuffix=*) confsuffix="$optarg"
941 --docdir=*) qemu_docdir="$optarg"
943 --sysconfdir=*) sysconfdir="$optarg"
945 --localstatedir=*) local_statedir="$optarg"
947 --firmwarepath=*) firmwarepath="$optarg"
949 --sbindir=*|--sharedstatedir=*|\
950 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
951 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
952 # These switches are silently ignored, for compatibility with
953 # autoconf-generated configure scripts. This allows QEMU's
954 # configure to be used by RPM and similar macros that set
955 # lots of directory switches by default.
957 --disable-sdl) sdl="no"
959 --enable-sdl) sdl="yes"
961 --with-sdlabi=*) sdlabi="$optarg"
963 --disable-qom-cast-debug) qom_cast_debug="no"
965 --enable-qom-cast-debug) qom_cast_debug="yes"
967 --disable-virtfs) virtfs="no"
969 --enable-virtfs) virtfs="yes"
971 --disable-mpath) mpath="no"
973 --enable-mpath) mpath="yes"
975 --disable-vnc) vnc="no"
977 --enable-vnc) vnc="yes"
979 --oss-lib=*) oss_lib="$optarg"
981 --audio-drv-list=*) audio_drv_list="$optarg"
983 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
985 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
987 --enable-debug-tcg) debug_tcg="yes"
989 --disable-debug-tcg) debug_tcg="no"
991 --enable-debug)
992 # Enable debugging options that aren't excessively noisy
993 debug_tcg="yes"
994 debug="yes"
995 strip_opt="no"
996 fortify_source="no"
998 --enable-sparse) sparse="yes"
1000 --disable-sparse) sparse="no"
1002 --disable-strip) strip_opt="no"
1004 --disable-vnc-sasl) vnc_sasl="no"
1006 --enable-vnc-sasl) vnc_sasl="yes"
1008 --disable-vnc-jpeg) vnc_jpeg="no"
1010 --enable-vnc-jpeg) vnc_jpeg="yes"
1012 --disable-vnc-png) vnc_png="no"
1014 --enable-vnc-png) vnc_png="yes"
1016 --disable-slirp) slirp="no"
1018 --disable-vde) vde="no"
1020 --enable-vde) vde="yes"
1022 --disable-netmap) netmap="no"
1024 --enable-netmap) netmap="yes"
1026 --disable-xen) xen="no"
1028 --enable-xen) xen="yes"
1030 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1032 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1034 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1036 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1038 --disable-brlapi) brlapi="no"
1040 --enable-brlapi) brlapi="yes"
1042 --disable-bluez) bluez="no"
1044 --enable-bluez) bluez="yes"
1046 --disable-kvm) kvm="no"
1048 --enable-kvm) kvm="yes"
1050 --disable-hax) hax="no"
1052 --enable-hax) hax="yes"
1054 --disable-hvf) hvf="no"
1056 --enable-hvf) hvf="yes"
1058 --disable-tcg-interpreter) tcg_interpreter="no"
1060 --enable-tcg-interpreter) tcg_interpreter="yes"
1062 --disable-cap-ng) cap_ng="no"
1064 --enable-cap-ng) cap_ng="yes"
1066 --disable-tcg) tcg="no"
1068 --enable-tcg) tcg="yes"
1070 --disable-malloc-trim) malloc_trim="no"
1072 --enable-malloc-trim) malloc_trim="yes"
1074 --disable-spice) spice="no"
1076 --enable-spice) spice="yes"
1078 --disable-libiscsi) libiscsi="no"
1080 --enable-libiscsi) libiscsi="yes"
1082 --disable-libnfs) libnfs="no"
1084 --enable-libnfs) libnfs="yes"
1086 --enable-profiler) profiler="yes"
1088 --disable-cocoa) cocoa="no"
1090 --enable-cocoa)
1091 cocoa="yes" ;
1092 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1094 --disable-system) softmmu="no"
1096 --enable-system) softmmu="yes"
1098 --disable-user)
1099 linux_user="no" ;
1100 bsd_user="no" ;
1102 --enable-user) ;;
1103 --disable-linux-user) linux_user="no"
1105 --enable-linux-user) linux_user="yes"
1107 --disable-bsd-user) bsd_user="no"
1109 --enable-bsd-user) bsd_user="yes"
1111 --enable-pie) pie="yes"
1113 --disable-pie) pie="no"
1115 --enable-werror) werror="yes"
1117 --disable-werror) werror="no"
1119 --enable-stack-protector) stack_protector="yes"
1121 --disable-stack-protector) stack_protector="no"
1123 --disable-curses) curses="no"
1125 --enable-curses) curses="yes"
1127 --disable-curl) curl="no"
1129 --enable-curl) curl="yes"
1131 --disable-fdt) fdt="no"
1133 --enable-fdt) fdt="yes"
1135 --disable-linux-aio) linux_aio="no"
1137 --enable-linux-aio) linux_aio="yes"
1139 --disable-attr) attr="no"
1141 --enable-attr) attr="yes"
1143 --disable-blobs) blobs="no"
1145 --with-pkgversion=*) pkgversion=" ($optarg)"
1147 --with-coroutine=*) coroutine="$optarg"
1149 --disable-coroutine-pool) coroutine_pool="no"
1151 --enable-coroutine-pool) coroutine_pool="yes"
1153 --enable-debug-stack-usage) debug_stack_usage="yes"
1155 --enable-crypto-afalg) crypto_afalg="yes"
1157 --disable-crypto-afalg) crypto_afalg="no"
1159 --disable-docs) docs="no"
1161 --enable-docs) docs="yes"
1163 --disable-vhost-net) vhost_net="no"
1165 --enable-vhost-net) vhost_net="yes"
1167 --disable-vhost-scsi) vhost_scsi="no"
1169 --enable-vhost-scsi) vhost_scsi="yes"
1171 --disable-vhost-vsock) vhost_vsock="no"
1173 --enable-vhost-vsock) vhost_vsock="yes"
1175 --disable-opengl) opengl="no"
1177 --enable-opengl) opengl="yes"
1179 --disable-rbd) rbd="no"
1181 --enable-rbd) rbd="yes"
1183 --disable-xfsctl) xfs="no"
1185 --enable-xfsctl) xfs="yes"
1187 --disable-smartcard) smartcard="no"
1189 --enable-smartcard) smartcard="yes"
1191 --disable-libusb) libusb="no"
1193 --enable-libusb) libusb="yes"
1195 --disable-usb-redir) usb_redir="no"
1197 --enable-usb-redir) usb_redir="yes"
1199 --disable-zlib-test) zlib="no"
1201 --disable-lzo) lzo="no"
1203 --enable-lzo) lzo="yes"
1205 --disable-snappy) snappy="no"
1207 --enable-snappy) snappy="yes"
1209 --disable-bzip2) bzip2="no"
1211 --enable-bzip2) bzip2="yes"
1213 --enable-guest-agent) guest_agent="yes"
1215 --disable-guest-agent) guest_agent="no"
1217 --enable-guest-agent-msi) guest_agent_msi="yes"
1219 --disable-guest-agent-msi) guest_agent_msi="no"
1221 --with-vss-sdk) vss_win32_sdk=""
1223 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1225 --without-vss-sdk) vss_win32_sdk="no"
1227 --with-win-sdk) win_sdk=""
1229 --with-win-sdk=*) win_sdk="$optarg"
1231 --without-win-sdk) win_sdk="no"
1233 --enable-tools) want_tools="yes"
1235 --disable-tools) want_tools="no"
1237 --enable-seccomp) seccomp="yes"
1239 --disable-seccomp) seccomp="no"
1241 --disable-glusterfs) glusterfs="no"
1243 --enable-glusterfs) glusterfs="yes"
1245 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1246 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1248 --enable-vhdx|--disable-vhdx)
1249 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1251 --enable-uuid|--disable-uuid)
1252 echo "$0: $opt is obsolete, UUID support is always built" >&2
1254 --disable-gtk) gtk="no"
1256 --enable-gtk) gtk="yes"
1258 --tls-priority=*) tls_priority="$optarg"
1260 --disable-gnutls) gnutls="no"
1262 --enable-gnutls) gnutls="yes"
1264 --disable-nettle) nettle="no"
1266 --enable-nettle) nettle="yes"
1268 --disable-gcrypt) gcrypt="no"
1270 --enable-gcrypt) gcrypt="yes"
1272 --enable-rdma) rdma="yes"
1274 --disable-rdma) rdma="no"
1276 --with-gtkabi=*) gtkabi="$optarg"
1278 --disable-vte) vte="no"
1280 --enable-vte) vte="yes"
1282 --disable-virglrenderer) virglrenderer="no"
1284 --enable-virglrenderer) virglrenderer="yes"
1286 --disable-tpm) tpm="no"
1288 --enable-tpm) tpm="yes"
1290 --disable-libssh2) libssh2="no"
1292 --enable-libssh2) libssh2="yes"
1294 --disable-live-block-migration) live_block_migration="no"
1296 --enable-live-block-migration) live_block_migration="yes"
1298 --disable-numa) numa="no"
1300 --enable-numa) numa="yes"
1302 --disable-libxml2) libxml2="no"
1304 --enable-libxml2) libxml2="yes"
1306 --disable-tcmalloc) tcmalloc="no"
1308 --enable-tcmalloc) tcmalloc="yes"
1310 --disable-jemalloc) jemalloc="no"
1312 --enable-jemalloc) jemalloc="yes"
1314 --disable-replication) replication="no"
1316 --enable-replication) replication="yes"
1318 --disable-vxhs) vxhs="no"
1320 --enable-vxhs) vxhs="yes"
1322 --disable-vhost-user) vhost_user="no"
1324 --enable-vhost-user)
1325 vhost_user="yes"
1326 if test "$mingw32" = "yes"; then
1327 error_exit "vhost-user isn't available on win32"
1330 --disable-capstone) capstone="no"
1332 --enable-capstone) capstone="yes"
1334 --enable-capstone=git) capstone="git"
1336 --enable-capstone=system) capstone="system"
1338 --with-git=*) git="$optarg"
1340 --enable-git-update) git_update=yes
1342 --disable-git-update) git_update=no
1345 echo "ERROR: unknown option $opt"
1346 echo "Try '$0 --help' for more information"
1347 exit 1
1349 esac
1350 done
1352 if test "$vhost_user" = ""; then
1353 if test "$mingw32" = "yes"; then
1354 vhost_user="no"
1355 else
1356 vhost_user="yes"
1360 case "$cpu" in
1361 ppc)
1362 CPU_CFLAGS="-m32"
1363 LDFLAGS="-m32 $LDFLAGS"
1365 ppc64)
1366 CPU_CFLAGS="-m64"
1367 LDFLAGS="-m64 $LDFLAGS"
1369 sparc)
1370 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1371 LDFLAGS="-m32 -mv8plus $LDFLAGS"
1373 sparc64)
1374 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1375 LDFLAGS="-m64 $LDFLAGS"
1377 s390)
1378 CPU_CFLAGS="-m31"
1379 LDFLAGS="-m31 $LDFLAGS"
1381 s390x)
1382 CPU_CFLAGS="-m64"
1383 LDFLAGS="-m64 $LDFLAGS"
1385 i386)
1386 CPU_CFLAGS="-m32"
1387 LDFLAGS="-m32 $LDFLAGS"
1388 cc_i386='$(CC) -m32'
1390 x86_64)
1391 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1392 # If we truly care, we should simply detect this case at
1393 # runtime and generate the fallback to serial emulation.
1394 CPU_CFLAGS="-m64 -mcx16"
1395 LDFLAGS="-m64 $LDFLAGS"
1396 cc_i386='$(CC) -m32'
1398 x32)
1399 CPU_CFLAGS="-mx32"
1400 LDFLAGS="-mx32 $LDFLAGS"
1401 cc_i386='$(CC) -m32'
1403 # No special flags required for other host CPUs
1404 esac
1406 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1407 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1409 # For user-mode emulation the host arch has to be one we explicitly
1410 # support, even if we're using TCI.
1411 if [ "$ARCH" = "unknown" ]; then
1412 bsd_user="no"
1413 linux_user="no"
1416 default_target_list=""
1418 mak_wilds=""
1420 if [ "$softmmu" = "yes" ]; then
1421 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1423 if [ "$linux_user" = "yes" ]; then
1424 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1426 if [ "$bsd_user" = "yes" ]; then
1427 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1430 for config in $mak_wilds; do
1431 default_target_list="${default_target_list} $(basename "$config" .mak)"
1432 done
1434 # Enumerate public trace backends for --help output
1435 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1437 if test x"$show_help" = x"yes" ; then
1438 cat << EOF
1440 Usage: configure [options]
1441 Options: [defaults in brackets after descriptions]
1443 Standard options:
1444 --help print this message
1445 --prefix=PREFIX install in PREFIX [$prefix]
1446 --interp-prefix=PREFIX where to find shared libraries, etc.
1447 use %M for cpu name [$interp_prefix]
1448 --target-list=LIST set target list (default: build everything)
1449 $(echo Available targets: $default_target_list | \
1450 fold -s -w 53 | sed -e 's/^/ /')
1452 Advanced options (experts only):
1453 --source-path=PATH path of source code [$source_path]
1454 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1455 --cc=CC use C compiler CC [$cc]
1456 --iasl=IASL use ACPI compiler IASL [$iasl]
1457 --host-cc=CC use C compiler CC [$host_cc] for code run at
1458 build time
1459 --cxx=CXX use C++ compiler CXX [$cxx]
1460 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1461 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1462 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1463 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1464 --make=MAKE use specified make [$make]
1465 --install=INSTALL use specified install [$install]
1466 --python=PYTHON use specified python [$python]
1467 --smbd=SMBD use specified smbd [$smbd]
1468 --static enable static build [$static]
1469 --mandir=PATH install man pages in PATH
1470 --datadir=PATH install firmware in PATH$confsuffix
1471 --docdir=PATH install documentation in PATH$confsuffix
1472 --bindir=PATH install binaries in PATH
1473 --libdir=PATH install libraries in PATH
1474 --sysconfdir=PATH install config in PATH$confsuffix
1475 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1476 --firmwarepath=PATH search PATH for firmware files
1477 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1478 --enable-debug enable common debug build options
1479 --disable-strip disable stripping binaries
1480 --disable-werror disable compilation abort on warning
1481 --disable-stack-protector disable compiler-provided stack protection
1482 --audio-drv-list=LIST set audio drivers list:
1483 Available drivers: $audio_possible_drivers
1484 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1485 --block-drv-rw-whitelist=L
1486 set block driver read-write whitelist
1487 (affects only QEMU, not qemu-img)
1488 --block-drv-ro-whitelist=L
1489 set block driver read-only whitelist
1490 (affects only QEMU, not qemu-img)
1491 --enable-trace-backends=B Set trace backend
1492 Available backends: $trace_backend_list
1493 --with-trace-file=NAME Full PATH,NAME of file to store traces
1494 Default:trace-<pid>
1495 --disable-slirp disable SLIRP userspace network connectivity
1496 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1497 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1498 --oss-lib path to OSS library
1499 --cpu=CPU Build for host CPU [$cpu]
1500 --with-coroutine=BACKEND coroutine backend. Supported options:
1501 ucontext, sigaltstack, windows
1502 --enable-gcov enable test coverage analysis with gcov
1503 --gcov=GCOV use specified gcov [$gcov_tool]
1504 --disable-blobs disable installing provided firmware blobs
1505 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1506 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1507 --tls-priority default TLS protocol/cipher priority string
1508 --enable-gprof QEMU profiling with gprof
1509 --enable-profiler profiler support
1510 --enable-xen-pv-domain-build
1511 xen pv domain builder
1512 --enable-debug-stack-usage
1513 track the maximum stack usage of stacks created by qemu_alloc_stack
1515 Optional features, enabled with --enable-FEATURE and
1516 disabled with --disable-FEATURE, default is enabled if available:
1518 system all system emulation targets
1519 user supported user emulation targets
1520 linux-user all linux usermode emulation targets
1521 bsd-user all BSD usermode emulation targets
1522 docs build documentation
1523 guest-agent build the QEMU Guest Agent
1524 guest-agent-msi build guest agent Windows MSI installation package
1525 pie Position Independent Executables
1526 modules modules support
1527 debug-tcg TCG debugging (default is disabled)
1528 debug-info debugging information
1529 sparse sparse checker
1531 gnutls GNUTLS cryptography support
1532 nettle nettle cryptography support
1533 gcrypt libgcrypt cryptography support
1534 sdl SDL UI
1535 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1536 gtk gtk UI
1537 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1538 vte vte support for the gtk UI
1539 curses curses UI
1540 vnc VNC UI support
1541 vnc-sasl SASL encryption for VNC server
1542 vnc-jpeg JPEG lossy compression for VNC server
1543 vnc-png PNG compression for VNC server
1544 cocoa Cocoa UI (Mac OS X only)
1545 virtfs VirtFS
1546 mpath Multipath persistent reservation passthrough
1547 xen xen backend driver support
1548 xen-pci-passthrough
1549 brlapi BrlAPI (Braile)
1550 curl curl connectivity
1551 fdt fdt device tree
1552 bluez bluez stack connectivity
1553 kvm KVM acceleration support
1554 hax HAX acceleration support
1555 hvf Hypervisor.framework acceleration support
1556 rdma RDMA-based migration support
1557 vde support for vde network
1558 netmap support for netmap network
1559 linux-aio Linux AIO support
1560 cap-ng libcap-ng support
1561 attr attr and xattr support
1562 vhost-net vhost-net acceleration support
1563 spice spice
1564 rbd rados block device (rbd)
1565 libiscsi iscsi support
1566 libnfs nfs support
1567 smartcard smartcard support (libcacard)
1568 libusb libusb (for usb passthrough)
1569 live-block-migration Block migration in the main migration stream
1570 usb-redir usb network redirection support
1571 lzo support of lzo compression library
1572 snappy support of snappy compression library
1573 bzip2 support of bzip2 compression library
1574 (for reading bzip2-compressed dmg images)
1575 seccomp seccomp support
1576 coroutine-pool coroutine freelist (better performance)
1577 glusterfs GlusterFS backend
1578 tpm TPM support
1579 libssh2 ssh block device support
1580 numa libnuma support
1581 libxml2 for Parallels image format
1582 tcmalloc tcmalloc support
1583 jemalloc jemalloc support
1584 replication replication support
1585 vhost-vsock virtio sockets device support
1586 opengl opengl support
1587 virglrenderer virgl rendering support
1588 xfsctl xfsctl support
1589 qom-cast-debug cast debugging support
1590 tools build qemu-io, qemu-nbd and qemu-image tools
1591 vxhs Veritas HyperScale vDisk backend support
1592 crypto-afalg Linux AF_ALG crypto backend driver
1593 vhost-user vhost-user support
1594 capstone capstone disassembler support
1596 NOTE: The object files are built at the place where configure is launched
1598 exit 0
1601 if ! has $python; then
1602 error_exit "Python not found. Use --python=/path/to/python"
1605 # Note that if the Python conditional here evaluates True we will exit
1606 # with status 1 which is a shell 'false' value.
1607 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6))'; then
1608 error_exit "Cannot use '$python', Python 2 >= 2.6 or Python 3 is required." \
1609 "Use --python=/path/to/python to specify a supported Python."
1612 # Suppress writing compiled files
1613 python="$python -B"
1615 # Check that the C compiler works. Doing this here before testing
1616 # the host CPU ensures that we had a valid CC to autodetect the
1617 # $cpu var (and we should bail right here if that's not the case).
1618 # It also allows the help message to be printed without a CC.
1619 write_c_skeleton;
1620 if compile_object ; then
1621 : C compiler works ok
1622 else
1623 error_exit "\"$cc\" either does not exist or does not work"
1625 if ! compile_prog ; then
1626 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1629 # Now we have handled --enable-tcg-interpreter and know we're not just
1630 # printing the help message, bail out if the host CPU isn't supported.
1631 if test "$ARCH" = "unknown"; then
1632 if test "$tcg_interpreter" = "yes" ; then
1633 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1634 else
1635 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1639 # Consult white-list to determine whether to enable werror
1640 # by default. Only enable by default for git builds
1641 if test -z "$werror" ; then
1642 if test -d "$source_path/.git" -a \
1643 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1644 werror="yes"
1645 else
1646 werror="no"
1650 if test "$bogus_os" = "yes"; then
1651 # Now that we know that we're not printing the help and that
1652 # the compiler works (so the results of the check_defines we used
1653 # to identify the OS are reliable), if we didn't recognize the
1654 # host OS we should stop now.
1655 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1658 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1659 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1660 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1661 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1662 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1663 gcc_flags="-Wno-string-plus-int $gcc_flags"
1664 # Note that we do not add -Werror to gcc_flags here, because that would
1665 # enable it for all configure tests. If a configure test failed due
1666 # to -Werror this would just silently disable some features,
1667 # so it's too error prone.
1669 cc_has_warning_flag() {
1670 write_c_skeleton;
1672 # Use the positive sense of the flag when testing for -Wno-wombat
1673 # support (gcc will happily accept the -Wno- form of unknown
1674 # warning options).
1675 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1676 compile_prog "-Werror $optflag" ""
1679 for flag in $gcc_flags; do
1680 if cc_has_warning_flag $flag ; then
1681 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1683 done
1685 if test "$stack_protector" != "no"; then
1686 cat > $TMPC << EOF
1687 int main(int argc, char *argv[])
1689 char arr[64], *p = arr, *c = argv[0];
1690 while (*c) {
1691 *p++ = *c++;
1693 return 0;
1696 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1697 sp_on=0
1698 for flag in $gcc_flags; do
1699 # We need to check both a compile and a link, since some compiler
1700 # setups fail only on a .c->.o compile and some only at link time
1701 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1702 compile_prog "-Werror $flag" ""; then
1703 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1704 sp_on=1
1705 break
1707 done
1708 if test "$stack_protector" = yes; then
1709 if test $sp_on = 0; then
1710 error_exit "Stack protector not supported"
1715 # Disable -Wmissing-braces on older compilers that warn even for
1716 # the "universal" C zero initializer {0}.
1717 cat > $TMPC << EOF
1718 struct {
1719 int a[2];
1720 } x = {0};
1722 if compile_object "-Werror" "" ; then
1724 else
1725 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1728 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1729 # large functions that use global variables. The bug is in all releases of
1730 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1731 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1732 cat > $TMPC << EOF
1733 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1734 int main(void) { return 0; }
1735 #else
1736 #error No bug in this compiler.
1737 #endif
1739 if compile_prog "-Werror -fno-gcse" "" ; then
1740 TRANSLATE_OPT_CFLAGS=-fno-gcse
1743 if test "$static" = "yes" ; then
1744 if test "$modules" = "yes" ; then
1745 error_exit "static and modules are mutually incompatible"
1747 if test "$pie" = "yes" ; then
1748 error_exit "static and pie are mutually incompatible"
1749 else
1750 pie="no"
1754 # Unconditional check for compiler __thread support
1755 cat > $TMPC << EOF
1756 static __thread int tls_var;
1757 int main(void) { return tls_var; }
1760 if ! compile_prog "-Werror" "" ; then
1761 error_exit "Your compiler does not support the __thread specifier for " \
1762 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1765 if test "$pie" = ""; then
1766 case "$cpu-$targetos" in
1767 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1770 pie="no"
1772 esac
1775 if test "$pie" != "no" ; then
1776 cat > $TMPC << EOF
1778 #ifdef __linux__
1779 # define THREAD __thread
1780 #else
1781 # define THREAD
1782 #endif
1784 static THREAD int tls_var;
1786 int main(void) { return tls_var; }
1789 if compile_prog "-fPIE -DPIE" "-pie"; then
1790 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1791 LDFLAGS="-pie $LDFLAGS"
1792 pie="yes"
1793 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1794 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1796 else
1797 if test "$pie" = "yes"; then
1798 error_exit "PIE not available due to missing toolchain support"
1799 else
1800 echo "Disabling PIE due to missing toolchain support"
1801 pie="no"
1805 if compile_prog "-Werror -fno-pie" "-nopie"; then
1806 CFLAGS_NOPIE="-fno-pie"
1807 LDFLAGS_NOPIE="-nopie"
1811 ##########################################
1812 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1813 # use i686 as default anyway, but for those that don't, an explicit
1814 # specification is necessary
1816 if test "$cpu" = "i386"; then
1817 cat > $TMPC << EOF
1818 static int sfaa(int *ptr)
1820 return __sync_fetch_and_and(ptr, 0);
1823 int main(void)
1825 int val = 42;
1826 val = __sync_val_compare_and_swap(&val, 0, 1);
1827 sfaa(&val);
1828 return val;
1831 if ! compile_prog "" "" ; then
1832 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1836 #########################################
1837 # Solaris specific configure tool chain decisions
1839 if test "$solaris" = "yes" ; then
1840 if has $install; then
1842 else
1843 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1844 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1845 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1847 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1848 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1849 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1850 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1852 if has ar; then
1854 else
1855 if test -f /usr/ccs/bin/ar ; then
1856 error_exit "No path includes ar" \
1857 "Add /usr/ccs/bin to your path and rerun configure"
1859 error_exit "No path includes ar"
1863 if test -z "${target_list+xxx}" ; then
1864 for target in $default_target_list; do
1865 supported_target $target 2>/dev/null && \
1866 target_list="$target_list $target"
1867 done
1868 target_list="${target_list# }"
1869 else
1870 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1871 for target in $target_list; do
1872 # Check that we recognised the target name; this allows a more
1873 # friendly error message than if we let it fall through.
1874 case " $default_target_list " in
1875 *" $target "*)
1878 error_exit "Unknown target name '$target'"
1880 esac
1881 supported_target $target || exit 1
1882 done
1885 # see if system emulation was really requested
1886 case " $target_list " in
1887 *"-softmmu "*) softmmu=yes
1889 *) softmmu=no
1891 esac
1893 feature_not_found() {
1894 feature=$1
1895 remedy=$2
1897 error_exit "User requested feature $feature" \
1898 "configure was not able to find it." \
1899 "$remedy"
1902 # ---
1903 # big/little endian test
1904 cat > $TMPC << EOF
1905 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1906 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1907 extern int foo(short *, short *);
1908 int main(int argc, char *argv[]) {
1909 return foo(big_endian, little_endian);
1913 if compile_object ; then
1914 if grep -q BiGeNdIaN $TMPO ; then
1915 bigendian="yes"
1916 elif grep -q LiTtLeEnDiAn $TMPO ; then
1917 bigendian="no"
1918 else
1919 echo big/little test failed
1921 else
1922 echo big/little test failed
1925 ##########################################
1926 # cocoa implies not SDL or GTK
1927 # (the cocoa UI code currently assumes it is always the active UI
1928 # and doesn't interact well with other UI frontend code)
1929 if test "$cocoa" = "yes"; then
1930 if test "$sdl" = "yes"; then
1931 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1933 if test "$gtk" = "yes"; then
1934 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1936 gtk=no
1937 sdl=no
1940 # Some versions of Mac OS X incorrectly define SIZE_MAX
1941 cat > $TMPC << EOF
1942 #include <stdint.h>
1943 #include <stdio.h>
1944 int main(int argc, char *argv[]) {
1945 return printf("%zu", SIZE_MAX);
1948 have_broken_size_max=no
1949 if ! compile_object -Werror ; then
1950 have_broken_size_max=yes
1953 ##########################################
1954 # L2TPV3 probe
1956 cat > $TMPC <<EOF
1957 #include <sys/socket.h>
1958 #include <linux/ip.h>
1959 int main(void) { return sizeof(struct mmsghdr); }
1961 if compile_prog "" "" ; then
1962 l2tpv3=yes
1963 else
1964 l2tpv3=no
1967 ##########################################
1968 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1970 if test "$mingw32" = "yes"; then
1971 # Some versions of MinGW / Mingw-w64 lack localtime_r
1972 # and gmtime_r entirely.
1974 # Some versions of Mingw-w64 define a macro for
1975 # localtime_r/gmtime_r.
1977 # Some versions of Mingw-w64 will define functions
1978 # for localtime_r/gmtime_r, but only if you have
1979 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1980 # though, unistd.h and pthread.h both define
1981 # that for you.
1983 # So this #undef localtime_r and #include <unistd.h>
1984 # are not in fact redundant.
1985 cat > $TMPC << EOF
1986 #include <unistd.h>
1987 #include <time.h>
1988 #undef localtime_r
1989 int main(void) { localtime_r(NULL, NULL); return 0; }
1991 if compile_prog "" "" ; then
1992 localtime_r="yes"
1993 else
1994 localtime_r="no"
1998 ##########################################
1999 # pkg-config probe
2001 if ! has "$pkg_config_exe"; then
2002 error_exit "pkg-config binary '$pkg_config_exe' not found"
2005 ##########################################
2006 # NPTL probe
2008 if test "$linux_user" = "yes"; then
2009 cat > $TMPC <<EOF
2010 #include <sched.h>
2011 #include <linux/futex.h>
2012 int main(void) {
2013 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2014 #error bork
2015 #endif
2016 return 0;
2019 if ! compile_object ; then
2020 feature_not_found "nptl" "Install glibc and linux kernel headers."
2024 #########################################
2025 # zlib check
2027 if test "$zlib" != "no" ; then
2028 cat > $TMPC << EOF
2029 #include <zlib.h>
2030 int main(void) { zlibVersion(); return 0; }
2032 if compile_prog "" "-lz" ; then
2034 else
2035 error_exit "zlib check failed" \
2036 "Make sure to have the zlib libs and headers installed."
2039 LIBS="$LIBS -lz"
2041 ##########################################
2042 # lzo check
2044 if test "$lzo" != "no" ; then
2045 cat > $TMPC << EOF
2046 #include <lzo/lzo1x.h>
2047 int main(void) { lzo_version(); return 0; }
2049 if compile_prog "" "-llzo2" ; then
2050 libs_softmmu="$libs_softmmu -llzo2"
2051 lzo="yes"
2052 else
2053 if test "$lzo" = "yes"; then
2054 feature_not_found "liblzo2" "Install liblzo2 devel"
2056 lzo="no"
2060 ##########################################
2061 # snappy check
2063 if test "$snappy" != "no" ; then
2064 cat > $TMPC << EOF
2065 #include <snappy-c.h>
2066 int main(void) { snappy_max_compressed_length(4096); return 0; }
2068 if compile_prog "" "-lsnappy" ; then
2069 libs_softmmu="$libs_softmmu -lsnappy"
2070 snappy="yes"
2071 else
2072 if test "$snappy" = "yes"; then
2073 feature_not_found "libsnappy" "Install libsnappy devel"
2075 snappy="no"
2079 ##########################################
2080 # bzip2 check
2082 if test "$bzip2" != "no" ; then
2083 cat > $TMPC << EOF
2084 #include <bzlib.h>
2085 int main(void) { BZ2_bzlibVersion(); return 0; }
2087 if compile_prog "" "-lbz2" ; then
2088 bzip2="yes"
2089 else
2090 if test "$bzip2" = "yes"; then
2091 feature_not_found "libbzip2" "Install libbzip2 devel"
2093 bzip2="no"
2097 ##########################################
2098 # libseccomp check
2100 if test "$seccomp" != "no" ; then
2101 case "$cpu" in
2102 i386|x86_64)
2103 libseccomp_minver="2.1.0"
2105 mips)
2106 libseccomp_minver="2.2.0"
2108 arm|aarch64)
2109 libseccomp_minver="2.2.3"
2111 ppc|ppc64|s390x)
2112 libseccomp_minver="2.3.0"
2115 libseccomp_minver=""
2117 esac
2119 if test "$libseccomp_minver" != "" &&
2120 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2121 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2122 seccomp_libs="$($pkg_config --libs libseccomp)"
2123 seccomp="yes"
2124 else
2125 if test "$seccomp" = "yes" ; then
2126 if test "$libseccomp_minver" != "" ; then
2127 feature_not_found "libseccomp" \
2128 "Install libseccomp devel >= $libseccomp_minver"
2129 else
2130 feature_not_found "libseccomp" \
2131 "libseccomp is not supported for host cpu $cpu"
2134 seccomp="no"
2137 ##########################################
2138 # xen probe
2140 if test "$xen" != "no" ; then
2141 # Check whether Xen library path is specified via --extra-ldflags to avoid
2142 # overriding this setting with pkg-config output. If not, try pkg-config
2143 # to obtain all needed flags.
2145 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2146 $pkg_config --exists xencontrol ; then
2147 xen_ctrl_version="$(printf '%d%02d%02d' \
2148 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2149 xen=yes
2150 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2151 xen_pc="$xen_pc xenevtchn xendevicemodel"
2152 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2153 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2154 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2155 else
2157 xen_libs="-lxenstore -lxenctrl -lxenguest"
2158 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2160 # First we test whether Xen headers and libraries are available.
2161 # If no, we are done and there is no Xen support.
2162 # If yes, more tests are run to detect the Xen version.
2164 # Xen (any)
2165 cat > $TMPC <<EOF
2166 #include <xenctrl.h>
2167 int main(void) {
2168 return 0;
2171 if ! compile_prog "" "$xen_libs" ; then
2172 # Xen not found
2173 if test "$xen" = "yes" ; then
2174 feature_not_found "xen" "Install xen devel"
2176 xen=no
2178 # Xen unstable
2179 elif
2180 cat > $TMPC <<EOF &&
2181 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2182 #include <xenforeignmemory.h>
2183 int main(void) {
2184 xenforeignmemory_handle *xfmem;
2186 xfmem = xenforeignmemory_open(0, 0);
2187 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2189 return 0;
2192 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2193 then
2194 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2195 xen_ctrl_version=41000
2196 xen=yes
2197 elif
2198 cat > $TMPC <<EOF &&
2199 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2200 #define __XEN_TOOLS__
2201 #include <xendevicemodel.h>
2202 int main(void) {
2203 xendevicemodel_handle *xd;
2205 xd = xendevicemodel_open(0, 0);
2206 xendevicemodel_close(xd);
2208 return 0;
2211 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2212 then
2213 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2214 xen_ctrl_version=40900
2215 xen=yes
2216 elif
2217 cat > $TMPC <<EOF &&
2219 * If we have stable libs the we don't want the libxc compat
2220 * layers, regardless of what CFLAGS we may have been given.
2222 * Also, check if xengnttab_grant_copy_segment_t is defined and
2223 * grant copy operation is implemented.
2225 #undef XC_WANT_COMPAT_EVTCHN_API
2226 #undef XC_WANT_COMPAT_GNTTAB_API
2227 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2228 #include <xenctrl.h>
2229 #include <xenstore.h>
2230 #include <xenevtchn.h>
2231 #include <xengnttab.h>
2232 #include <xenforeignmemory.h>
2233 #include <stdint.h>
2234 #include <xen/hvm/hvm_info_table.h>
2235 #if !defined(HVM_MAX_VCPUS)
2236 # error HVM_MAX_VCPUS not defined
2237 #endif
2238 int main(void) {
2239 xc_interface *xc = NULL;
2240 xenforeignmemory_handle *xfmem;
2241 xenevtchn_handle *xe;
2242 xengnttab_handle *xg;
2243 xen_domain_handle_t handle;
2244 xengnttab_grant_copy_segment_t* seg = NULL;
2246 xs_daemon_open();
2248 xc = xc_interface_open(0, 0, 0);
2249 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2250 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2251 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2252 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2253 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2255 xfmem = xenforeignmemory_open(0, 0);
2256 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2258 xe = xenevtchn_open(0, 0);
2259 xenevtchn_fd(xe);
2261 xg = xengnttab_open(0, 0);
2262 xengnttab_grant_copy(xg, 0, seg);
2264 return 0;
2267 compile_prog "" "$xen_libs $xen_stable_libs"
2268 then
2269 xen_ctrl_version=40800
2270 xen=yes
2271 elif
2272 cat > $TMPC <<EOF &&
2274 * If we have stable libs the we don't want the libxc compat
2275 * layers, regardless of what CFLAGS we may have been given.
2277 #undef XC_WANT_COMPAT_EVTCHN_API
2278 #undef XC_WANT_COMPAT_GNTTAB_API
2279 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2280 #include <xenctrl.h>
2281 #include <xenstore.h>
2282 #include <xenevtchn.h>
2283 #include <xengnttab.h>
2284 #include <xenforeignmemory.h>
2285 #include <stdint.h>
2286 #include <xen/hvm/hvm_info_table.h>
2287 #if !defined(HVM_MAX_VCPUS)
2288 # error HVM_MAX_VCPUS not defined
2289 #endif
2290 int main(void) {
2291 xc_interface *xc = NULL;
2292 xenforeignmemory_handle *xfmem;
2293 xenevtchn_handle *xe;
2294 xengnttab_handle *xg;
2295 xen_domain_handle_t handle;
2297 xs_daemon_open();
2299 xc = xc_interface_open(0, 0, 0);
2300 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2301 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2302 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2303 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2304 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2306 xfmem = xenforeignmemory_open(0, 0);
2307 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2309 xe = xenevtchn_open(0, 0);
2310 xenevtchn_fd(xe);
2312 xg = xengnttab_open(0, 0);
2313 xengnttab_map_grant_ref(xg, 0, 0, 0);
2315 return 0;
2318 compile_prog "" "$xen_libs $xen_stable_libs"
2319 then
2320 xen_ctrl_version=40701
2321 xen=yes
2322 elif
2323 cat > $TMPC <<EOF &&
2324 #include <xenctrl.h>
2325 #include <stdint.h>
2326 int main(void) {
2327 xc_interface *xc = NULL;
2328 xen_domain_handle_t handle;
2329 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2330 return 0;
2333 compile_prog "" "$xen_libs"
2334 then
2335 xen_ctrl_version=40700
2336 xen=yes
2338 # Xen 4.6
2339 elif
2340 cat > $TMPC <<EOF &&
2341 #include <xenctrl.h>
2342 #include <xenstore.h>
2343 #include <stdint.h>
2344 #include <xen/hvm/hvm_info_table.h>
2345 #if !defined(HVM_MAX_VCPUS)
2346 # error HVM_MAX_VCPUS not defined
2347 #endif
2348 int main(void) {
2349 xc_interface *xc;
2350 xs_daemon_open();
2351 xc = xc_interface_open(0, 0, 0);
2352 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2353 xc_gnttab_open(NULL, 0);
2354 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2355 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2356 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2357 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2358 return 0;
2361 compile_prog "" "$xen_libs"
2362 then
2363 xen_ctrl_version=40600
2364 xen=yes
2366 # Xen 4.5
2367 elif
2368 cat > $TMPC <<EOF &&
2369 #include <xenctrl.h>
2370 #include <xenstore.h>
2371 #include <stdint.h>
2372 #include <xen/hvm/hvm_info_table.h>
2373 #if !defined(HVM_MAX_VCPUS)
2374 # error HVM_MAX_VCPUS not defined
2375 #endif
2376 int main(void) {
2377 xc_interface *xc;
2378 xs_daemon_open();
2379 xc = xc_interface_open(0, 0, 0);
2380 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2381 xc_gnttab_open(NULL, 0);
2382 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2383 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2384 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2385 return 0;
2388 compile_prog "" "$xen_libs"
2389 then
2390 xen_ctrl_version=40500
2391 xen=yes
2393 elif
2394 cat > $TMPC <<EOF &&
2395 #include <xenctrl.h>
2396 #include <xenstore.h>
2397 #include <stdint.h>
2398 #include <xen/hvm/hvm_info_table.h>
2399 #if !defined(HVM_MAX_VCPUS)
2400 # error HVM_MAX_VCPUS not defined
2401 #endif
2402 int main(void) {
2403 xc_interface *xc;
2404 xs_daemon_open();
2405 xc = xc_interface_open(0, 0, 0);
2406 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2407 xc_gnttab_open(NULL, 0);
2408 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2409 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2410 return 0;
2413 compile_prog "" "$xen_libs"
2414 then
2415 xen_ctrl_version=40200
2416 xen=yes
2418 else
2419 if test "$xen" = "yes" ; then
2420 feature_not_found "xen (unsupported version)" \
2421 "Install a supported xen (xen 4.2 or newer)"
2423 xen=no
2426 if test "$xen" = yes; then
2427 if test $xen_ctrl_version -ge 40701 ; then
2428 libs_softmmu="$xen_stable_libs $libs_softmmu"
2430 libs_softmmu="$xen_libs $libs_softmmu"
2435 if test "$xen_pci_passthrough" != "no"; then
2436 if test "$xen" = "yes" && test "$linux" = "yes"; then
2437 xen_pci_passthrough=yes
2438 else
2439 if test "$xen_pci_passthrough" = "yes"; then
2440 error_exit "User requested feature Xen PCI Passthrough" \
2441 " but this feature requires /sys from Linux"
2443 xen_pci_passthrough=no
2447 if test "$xen_pv_domain_build" = "yes" &&
2448 test "$xen" != "yes"; then
2449 error_exit "User requested Xen PV domain builder support" \
2450 "which requires Xen support."
2453 ##########################################
2454 # Sparse probe
2455 if test "$sparse" != "no" ; then
2456 if has cgcc; then
2457 sparse=yes
2458 else
2459 if test "$sparse" = "yes" ; then
2460 feature_not_found "sparse" "Install sparse binary"
2462 sparse=no
2466 ##########################################
2467 # X11 probe
2468 x11_cflags=
2469 x11_libs=-lX11
2470 if $pkg_config --exists "x11"; then
2471 x11_cflags=$($pkg_config --cflags x11)
2472 x11_libs=$($pkg_config --libs x11)
2475 ##########################################
2476 # GTK probe
2478 if test "$gtkabi" = ""; then
2479 # The GTK ABI was not specified explicitly, so try whether 3.0 is available.
2480 # Use 2.0 as a fallback if that is available.
2481 if $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2482 gtkabi=3.0
2483 elif $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2484 gtkabi=2.0
2485 else
2486 gtkabi=3.0
2490 if test "$gtk" != "no"; then
2491 gtkpackage="gtk+-$gtkabi"
2492 gtkx11package="gtk+-x11-$gtkabi"
2493 if test "$gtkabi" = "3.0" ; then
2494 gtkversion="3.0.0"
2495 else
2496 gtkversion="2.18.0"
2498 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2499 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2500 gtk_libs=$($pkg_config --libs $gtkpackage)
2501 gtk_version=$($pkg_config --modversion $gtkpackage)
2502 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2503 gtk_cflags="$gtk_cflags $x11_cflags"
2504 gtk_libs="$gtk_libs $x11_libs"
2506 libs_softmmu="$gtk_libs $libs_softmmu"
2507 gtk="yes"
2508 elif test "$gtk" = "yes"; then
2509 feature_not_found "gtk" "Install gtk3-devel"
2510 else
2511 gtk="no"
2516 ##########################################
2517 # GNUTLS probe
2519 gnutls_works() {
2520 # Unfortunately some distros have bad pkg-config information for gnutls
2521 # such that it claims to exist but you get a compiler error if you try
2522 # to use the options returned by --libs. Specifically, Ubuntu for --static
2523 # builds doesn't work:
2524 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2526 # So sanity check the cflags/libs before assuming gnutls can be used.
2527 if ! $pkg_config --exists "gnutls"; then
2528 return 1
2531 write_c_skeleton
2532 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2535 gnutls_gcrypt=no
2536 gnutls_nettle=no
2537 if test "$gnutls" != "no"; then
2538 if gnutls_works; then
2539 gnutls_cflags=$($pkg_config --cflags gnutls)
2540 gnutls_libs=$($pkg_config --libs gnutls)
2541 libs_softmmu="$gnutls_libs $libs_softmmu"
2542 libs_tools="$gnutls_libs $libs_tools"
2543 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2544 gnutls="yes"
2546 # gnutls_rnd requires >= 2.11.0
2547 if $pkg_config --exists "gnutls >= 2.11.0"; then
2548 gnutls_rnd="yes"
2549 else
2550 gnutls_rnd="no"
2553 if $pkg_config --exists 'gnutls >= 3.0'; then
2554 gnutls_gcrypt=no
2555 gnutls_nettle=yes
2556 elif $pkg_config --exists 'gnutls >= 2.12'; then
2557 case $($pkg_config --libs --static gnutls) in
2558 *gcrypt*)
2559 gnutls_gcrypt=yes
2560 gnutls_nettle=no
2562 *nettle*)
2563 gnutls_gcrypt=no
2564 gnutls_nettle=yes
2567 gnutls_gcrypt=yes
2568 gnutls_nettle=no
2570 esac
2571 else
2572 gnutls_gcrypt=yes
2573 gnutls_nettle=no
2575 elif test "$gnutls" = "yes"; then
2576 feature_not_found "gnutls" "Install gnutls devel"
2577 else
2578 gnutls="no"
2579 gnutls_rnd="no"
2581 else
2582 gnutls_rnd="no"
2586 # If user didn't give a --disable/enable-gcrypt flag,
2587 # then mark as disabled if user requested nettle
2588 # explicitly, or if gnutls links to nettle
2589 if test -z "$gcrypt"
2590 then
2591 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2592 then
2593 gcrypt="no"
2597 # If user didn't give a --disable/enable-nettle flag,
2598 # then mark as disabled if user requested gcrypt
2599 # explicitly, or if gnutls links to gcrypt
2600 if test -z "$nettle"
2601 then
2602 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2603 then
2604 nettle="no"
2608 has_libgcrypt_config() {
2609 if ! has "libgcrypt-config"
2610 then
2611 return 1
2614 if test -n "$cross_prefix"
2615 then
2616 host=$(libgcrypt-config --host)
2617 if test "$host-" != $cross_prefix
2618 then
2619 return 1
2623 return 0
2626 if test "$gcrypt" != "no"; then
2627 if has_libgcrypt_config; then
2628 gcrypt_cflags=$(libgcrypt-config --cflags)
2629 gcrypt_libs=$(libgcrypt-config --libs)
2630 # Debian has remove -lgpg-error from libgcrypt-config
2631 # as it "spreads unnecessary dependencies" which in
2632 # turn breaks static builds...
2633 if test "$static" = "yes"
2634 then
2635 gcrypt_libs="$gcrypt_libs -lgpg-error"
2637 libs_softmmu="$gcrypt_libs $libs_softmmu"
2638 libs_tools="$gcrypt_libs $libs_tools"
2639 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2640 gcrypt="yes"
2641 if test -z "$nettle"; then
2642 nettle="no"
2645 cat > $TMPC << EOF
2646 #include <gcrypt.h>
2647 int main(void) {
2648 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2649 GCRY_MD_SHA256,
2650 NULL, 0, 0, 0, NULL);
2651 return 0;
2654 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2655 gcrypt_kdf=yes
2658 cat > $TMPC << EOF
2659 #include <gcrypt.h>
2660 int main(void) {
2661 gcry_mac_hd_t handle;
2662 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2663 GCRY_MAC_FLAG_SECURE, NULL);
2664 return 0;
2667 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2668 gcrypt_hmac=yes
2670 else
2671 if test "$gcrypt" = "yes"; then
2672 feature_not_found "gcrypt" "Install gcrypt devel"
2673 else
2674 gcrypt="no"
2680 if test "$nettle" != "no"; then
2681 if $pkg_config --exists "nettle"; then
2682 nettle_cflags=$($pkg_config --cflags nettle)
2683 nettle_libs=$($pkg_config --libs nettle)
2684 nettle_version=$($pkg_config --modversion nettle)
2685 libs_softmmu="$nettle_libs $libs_softmmu"
2686 libs_tools="$nettle_libs $libs_tools"
2687 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2688 nettle="yes"
2690 cat > $TMPC << EOF
2691 #include <stddef.h>
2692 #include <nettle/pbkdf2.h>
2693 int main(void) {
2694 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2695 return 0;
2698 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2699 nettle_kdf=yes
2701 else
2702 if test "$nettle" = "yes"; then
2703 feature_not_found "nettle" "Install nettle devel"
2704 else
2705 nettle="no"
2710 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2711 then
2712 error_exit "Only one of gcrypt & nettle can be enabled"
2715 ##########################################
2716 # libtasn1 - only for the TLS creds/session test suite
2718 tasn1=yes
2719 tasn1_cflags=""
2720 tasn1_libs=""
2721 if $pkg_config --exists "libtasn1"; then
2722 tasn1_cflags=$($pkg_config --cflags libtasn1)
2723 tasn1_libs=$($pkg_config --libs libtasn1)
2724 else
2725 tasn1=no
2729 ##########################################
2730 # getifaddrs (for tests/test-io-channel-socket )
2732 have_ifaddrs_h=yes
2733 if ! check_include "ifaddrs.h" ; then
2734 have_ifaddrs_h=no
2737 ##########################################
2738 # VTE probe
2740 if test "$vte" != "no"; then
2741 if test "$gtkabi" = "3.0"; then
2742 vteminversion="0.32.0"
2743 if $pkg_config --exists "vte-2.91"; then
2744 vtepackage="vte-2.91"
2745 else
2746 vtepackage="vte-2.90"
2748 else
2749 vtepackage="vte"
2750 vteminversion="0.24.0"
2752 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2753 vte_cflags=$($pkg_config --cflags $vtepackage)
2754 vte_libs=$($pkg_config --libs $vtepackage)
2755 vteversion=$($pkg_config --modversion $vtepackage)
2756 libs_softmmu="$vte_libs $libs_softmmu"
2757 vte="yes"
2758 elif test "$vte" = "yes"; then
2759 if test "$gtkabi" = "3.0"; then
2760 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2761 else
2762 feature_not_found "vte" "Install libvte devel"
2764 else
2765 vte="no"
2769 ##########################################
2770 # SDL probe
2772 # Look for sdl configuration program (pkg-config or sdl-config). Try
2773 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2775 if test "$sdlabi" = ""; then
2776 if $pkg_config --exists "sdl2"; then
2777 sdlabi=2.0
2778 elif $pkg_config --exists "sdl"; then
2779 sdlabi=1.2
2780 else
2781 sdlabi=2.0
2785 if test $sdlabi = "2.0"; then
2786 sdl_config=$sdl2_config
2787 sdlname=sdl2
2788 sdlconfigname=sdl2_config
2789 elif test $sdlabi = "1.2"; then
2790 sdlname=sdl
2791 sdlconfigname=sdl_config
2792 else
2793 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2796 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2797 sdl_config=$sdlconfigname
2800 if $pkg_config $sdlname --exists; then
2801 sdlconfig="$pkg_config $sdlname"
2802 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2803 elif has ${sdl_config}; then
2804 sdlconfig="$sdl_config"
2805 sdlversion=$($sdlconfig --version)
2806 else
2807 if test "$sdl" = "yes" ; then
2808 feature_not_found "sdl" "Install SDL2-devel"
2810 sdl=no
2812 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2813 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2816 sdl_too_old=no
2817 if test "$sdl" != "no" ; then
2818 cat > $TMPC << EOF
2819 #include <SDL.h>
2820 #undef main /* We don't want SDL to override our main() */
2821 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2823 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2824 if test "$static" = "yes" ; then
2825 if $pkg_config $sdlname --exists; then
2826 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2827 else
2828 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2830 else
2831 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2833 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2834 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2835 sdl_too_old=yes
2836 else
2837 sdl=yes
2840 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2841 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2842 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2843 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2844 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2846 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2848 else
2849 sdl=no
2851 fi # static link
2852 else # sdl not found
2853 if test "$sdl" = "yes" ; then
2854 feature_not_found "sdl" "Install SDL devel"
2856 sdl=no
2857 fi # sdl compile test
2860 if test "$sdl" = "yes" ; then
2861 cat > $TMPC <<EOF
2862 #include <SDL.h>
2863 #if defined(SDL_VIDEO_DRIVER_X11)
2864 #include <X11/XKBlib.h>
2865 #else
2866 #error No x11 support
2867 #endif
2868 int main(void) { return 0; }
2870 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2871 sdl_cflags="$sdl_cflags $x11_cflags"
2872 sdl_libs="$sdl_libs $x11_libs"
2876 ##########################################
2877 # RDMA needs OpenFabrics libraries
2878 if test "$rdma" != "no" ; then
2879 cat > $TMPC <<EOF
2880 #include <rdma/rdma_cma.h>
2881 int main(void) { return 0; }
2883 rdma_libs="-lrdmacm -libverbs"
2884 if compile_prog "" "$rdma_libs" ; then
2885 rdma="yes"
2886 else
2887 if test "$rdma" = "yes" ; then
2888 error_exit \
2889 " OpenFabrics librdmacm/libibverbs not present." \
2890 " Your options:" \
2891 " (1) Fast: Install infiniband packages from your distro." \
2892 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2893 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2895 rdma="no"
2900 ##########################################
2901 # VNC SASL detection
2902 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2903 cat > $TMPC <<EOF
2904 #include <sasl/sasl.h>
2905 #include <stdio.h>
2906 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2908 # Assuming Cyrus-SASL installed in /usr prefix
2909 vnc_sasl_cflags=""
2910 vnc_sasl_libs="-lsasl2"
2911 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2912 vnc_sasl=yes
2913 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2914 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2915 else
2916 if test "$vnc_sasl" = "yes" ; then
2917 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2919 vnc_sasl=no
2923 ##########################################
2924 # VNC JPEG detection
2925 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2926 cat > $TMPC <<EOF
2927 #include <stdio.h>
2928 #include <jpeglib.h>
2929 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2931 vnc_jpeg_cflags=""
2932 vnc_jpeg_libs="-ljpeg"
2933 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2934 vnc_jpeg=yes
2935 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2936 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2937 else
2938 if test "$vnc_jpeg" = "yes" ; then
2939 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2941 vnc_jpeg=no
2945 ##########################################
2946 # VNC PNG detection
2947 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2948 cat > $TMPC <<EOF
2949 //#include <stdio.h>
2950 #include <png.h>
2951 #include <stddef.h>
2952 int main(void) {
2953 png_structp png_ptr;
2954 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2955 return png_ptr != 0;
2958 if $pkg_config libpng --exists; then
2959 vnc_png_cflags=$($pkg_config libpng --cflags)
2960 vnc_png_libs=$($pkg_config libpng --libs)
2961 else
2962 vnc_png_cflags=""
2963 vnc_png_libs="-lpng"
2965 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2966 vnc_png=yes
2967 libs_softmmu="$vnc_png_libs $libs_softmmu"
2968 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2969 else
2970 if test "$vnc_png" = "yes" ; then
2971 feature_not_found "vnc-png" "Install libpng devel"
2973 vnc_png=no
2977 ##########################################
2978 # xkbcommon probe
2979 if test "$xkbcommon" != "no" ; then
2980 if $pkg_config xkbcommon --exists; then
2981 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
2982 xkbcommon_libs=$($pkg_config xkbcommon --libs)
2983 xkbcommon=yes
2984 else
2985 if test "$xkbcommon" = "yes" ; then
2986 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
2988 xkbcommon=no
2992 ##########################################
2993 # fnmatch() probe, used for ACL routines
2994 fnmatch="no"
2995 cat > $TMPC << EOF
2996 #include <fnmatch.h>
2997 int main(void)
2999 fnmatch("foo", "foo", 0);
3000 return 0;
3003 if compile_prog "" "" ; then
3004 fnmatch="yes"
3007 ##########################################
3008 # xfsctl() probe, used for file-posix.c
3009 if test "$xfs" != "no" ; then
3010 cat > $TMPC << EOF
3011 #include <stddef.h> /* NULL */
3012 #include <xfs/xfs.h>
3013 int main(void)
3015 xfsctl(NULL, 0, 0, NULL);
3016 return 0;
3019 if compile_prog "" "" ; then
3020 xfs="yes"
3021 else
3022 if test "$xfs" = "yes" ; then
3023 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3025 xfs=no
3029 ##########################################
3030 # vde libraries probe
3031 if test "$vde" != "no" ; then
3032 vde_libs="-lvdeplug"
3033 cat > $TMPC << EOF
3034 #include <libvdeplug.h>
3035 int main(void)
3037 struct vde_open_args a = {0, 0, 0};
3038 char s[] = "";
3039 vde_open(s, s, &a);
3040 return 0;
3043 if compile_prog "" "$vde_libs" ; then
3044 vde=yes
3045 else
3046 if test "$vde" = "yes" ; then
3047 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3049 vde=no
3053 ##########################################
3054 # netmap support probe
3055 # Apart from looking for netmap headers, we make sure that the host API version
3056 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3057 # a minor/major version number. Minor new features will be marked with values up
3058 # to 15, and if something happens that requires a change to the backend we will
3059 # move above 15, submit the backend fixes and modify this two bounds.
3060 if test "$netmap" != "no" ; then
3061 cat > $TMPC << EOF
3062 #include <inttypes.h>
3063 #include <net/if.h>
3064 #include <net/netmap.h>
3065 #include <net/netmap_user.h>
3066 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3067 #error
3068 #endif
3069 int main(void) { return 0; }
3071 if compile_prog "" "" ; then
3072 netmap=yes
3073 else
3074 if test "$netmap" = "yes" ; then
3075 feature_not_found "netmap"
3077 netmap=no
3081 ##########################################
3082 # libcap-ng library probe
3083 if test "$cap_ng" != "no" ; then
3084 cap_libs="-lcap-ng"
3085 cat > $TMPC << EOF
3086 #include <cap-ng.h>
3087 int main(void)
3089 capng_capability_to_name(CAPNG_EFFECTIVE);
3090 return 0;
3093 if compile_prog "" "$cap_libs" ; then
3094 cap_ng=yes
3095 libs_tools="$cap_libs $libs_tools"
3096 else
3097 if test "$cap_ng" = "yes" ; then
3098 feature_not_found "cap_ng" "Install libcap-ng devel"
3100 cap_ng=no
3104 ##########################################
3105 # Sound support libraries probe
3107 audio_drv_probe()
3109 drv=$1
3110 hdr=$2
3111 lib=$3
3112 exp=$4
3113 cfl=$5
3114 cat > $TMPC << EOF
3115 #include <$hdr>
3116 int main(void) { $exp }
3118 if compile_prog "$cfl" "$lib" ; then
3120 else
3121 error_exit "$drv check failed" \
3122 "Make sure to have the $drv libs and headers installed."
3126 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3127 for drv in $audio_drv_list; do
3128 case $drv in
3129 alsa)
3130 audio_drv_probe $drv alsa/asoundlib.h -lasound \
3131 "return snd_pcm_close((snd_pcm_t *)0);"
3132 alsa_libs="-lasound"
3136 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3137 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3138 pulse_libs="-lpulse"
3139 audio_pt_int="yes"
3142 sdl)
3143 if test "$sdl" = "no"; then
3144 error_exit "sdl not found or disabled, can not use sdl audio driver"
3148 coreaudio)
3149 coreaudio_libs="-framework CoreAudio"
3152 dsound)
3153 dsound_libs="-lole32 -ldxguid"
3154 audio_win_int="yes"
3157 oss)
3158 oss_libs="$oss_lib"
3161 wav)
3162 # XXX: Probes for CoreAudio, DirectSound
3166 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3167 error_exit "Unknown driver '$drv' selected" \
3168 "Possible drivers are: $audio_possible_drivers"
3171 esac
3172 done
3174 ##########################################
3175 # BrlAPI probe
3177 if test "$brlapi" != "no" ; then
3178 brlapi_libs="-lbrlapi"
3179 cat > $TMPC << EOF
3180 #include <brlapi.h>
3181 #include <stddef.h>
3182 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3184 if compile_prog "" "$brlapi_libs" ; then
3185 brlapi=yes
3186 else
3187 if test "$brlapi" = "yes" ; then
3188 feature_not_found "brlapi" "Install brlapi devel"
3190 brlapi=no
3194 ##########################################
3195 # curses probe
3196 if test "$curses" != "no" ; then
3197 if test "$mingw32" = "yes" ; then
3198 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3199 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3200 else
3201 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3202 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3204 curses_found=no
3205 cat > $TMPC << EOF
3206 #include <locale.h>
3207 #include <curses.h>
3208 #include <wchar.h>
3209 int main(void) {
3210 wchar_t wch = L'w';
3211 setlocale(LC_ALL, "");
3212 resize_term(0, 0);
3213 addwstr(L"wide chars\n");
3214 addnwstr(&wch, 1);
3215 add_wch(WACS_DEGREE);
3216 return 0;
3219 IFS=:
3220 for curses_inc in $curses_inc_list; do
3221 # Make sure we get the wide character prototypes
3222 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3223 IFS=:
3224 for curses_lib in $curses_lib_list; do
3225 unset IFS
3226 if compile_prog "$curses_inc" "$curses_lib" ; then
3227 curses_found=yes
3228 QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
3229 libs_softmmu="$curses_lib $libs_softmmu"
3230 break
3232 done
3233 if test "$curses_found" = yes ; then
3234 break
3236 done
3237 unset IFS
3238 if test "$curses_found" = "yes" ; then
3239 curses=yes
3240 else
3241 if test "$curses" = "yes" ; then
3242 feature_not_found "curses" "Install ncurses devel"
3244 curses=no
3248 ##########################################
3249 # curl probe
3250 if test "$curl" != "no" ; then
3251 if $pkg_config libcurl --exists; then
3252 curlconfig="$pkg_config libcurl"
3253 else
3254 curlconfig=curl-config
3256 cat > $TMPC << EOF
3257 #include <curl/curl.h>
3258 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3260 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3261 curl_libs=$($curlconfig --libs 2>/dev/null)
3262 if compile_prog "$curl_cflags" "$curl_libs" ; then
3263 curl=yes
3264 else
3265 if test "$curl" = "yes" ; then
3266 feature_not_found "curl" "Install libcurl devel"
3268 curl=no
3270 fi # test "$curl"
3272 ##########################################
3273 # bluez support probe
3274 if test "$bluez" != "no" ; then
3275 cat > $TMPC << EOF
3276 #include <bluetooth/bluetooth.h>
3277 int main(void) { return bt_error(0); }
3279 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3280 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3281 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3282 bluez=yes
3283 libs_softmmu="$bluez_libs $libs_softmmu"
3284 else
3285 if test "$bluez" = "yes" ; then
3286 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3288 bluez="no"
3292 ##########################################
3293 # glib support probe
3295 if test "$mingw32" = yes; then
3296 glib_req_ver=2.30
3297 else
3298 glib_req_ver=2.22
3300 glib_modules=gthread-2.0
3301 if test "$modules" = yes; then
3302 glib_modules="$glib_modules gmodule-2.0"
3305 # This workaround is required due to a bug in pkg-config file for glib as it
3306 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3308 if test "$static" = yes -a "$mingw32" = yes; then
3309 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3312 for i in $glib_modules; do
3313 if $pkg_config --atleast-version=$glib_req_ver $i; then
3314 glib_cflags=$($pkg_config --cflags $i)
3315 glib_libs=$($pkg_config --libs $i)
3316 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3317 LIBS="$glib_libs $LIBS"
3318 libs_qga="$glib_libs $libs_qga"
3319 else
3320 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3322 done
3324 # Sanity check that the current size_t matches the
3325 # size that glib thinks it should be. This catches
3326 # problems on multi-arch where people try to build
3327 # 32-bit QEMU while pointing at 64-bit glib headers
3328 cat > $TMPC <<EOF
3329 #include <glib.h>
3330 #include <unistd.h>
3332 #define QEMU_BUILD_BUG_ON(x) \
3333 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3335 int main(void) {
3336 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3337 return 0;
3341 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3342 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3343 "You probably need to set PKG_CONFIG_LIBDIR"\
3344 "to point to the right pkg-config files for your"\
3345 "build target"
3348 # g_test_trap_subprocess added in 2.38. Used by some tests.
3349 glib_subprocess=yes
3350 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
3351 glib_subprocess=no
3354 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3355 cat > $TMPC << EOF
3356 #include <glib.h>
3357 int main(void) { return 0; }
3359 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3360 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3361 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3362 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3366 ##########################################
3367 # SHA command probe for modules
3368 if test "$modules" = yes; then
3369 shacmd_probe="sha1sum sha1 shasum"
3370 for c in $shacmd_probe; do
3371 if has $c; then
3372 shacmd="$c"
3373 break
3375 done
3376 if test "$shacmd" = ""; then
3377 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3381 ##########################################
3382 # pixman support probe
3384 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3385 pixman_cflags=
3386 pixman_libs=
3387 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3388 pixman_cflags=$($pkg_config --cflags pixman-1)
3389 pixman_libs=$($pkg_config --libs pixman-1)
3390 else
3391 error_exit "pixman >= 0.21.8 not present." \
3392 "Please install the pixman devel package."
3395 ##########################################
3396 # libmpathpersist probe
3398 if test "$mpath" != "no" ; then
3399 cat > $TMPC <<EOF
3400 #include <libudev.h>
3401 #include <mpath_persist.h>
3402 unsigned mpath_mx_alloc_len = 1024;
3403 int logsink;
3404 static struct config *multipath_conf;
3405 extern struct udev *udev;
3406 extern struct config *get_multipath_config(void);
3407 extern void put_multipath_config(struct config *conf);
3408 struct udev *udev;
3409 struct config *get_multipath_config(void) { return multipath_conf; }
3410 void put_multipath_config(struct config *conf) { }
3412 int main(void) {
3413 udev = udev_new();
3414 multipath_conf = mpath_lib_init();
3415 return 0;
3418 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3419 mpathpersist=yes
3420 else
3421 mpathpersist=no
3423 else
3424 mpathpersist=no
3427 ##########################################
3428 # libcap probe
3430 if test "$cap" != "no" ; then
3431 cat > $TMPC <<EOF
3432 #include <stdio.h>
3433 #include <sys/capability.h>
3434 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3436 if compile_prog "" "-lcap" ; then
3437 cap=yes
3438 else
3439 cap=no
3443 ##########################################
3444 # pthread probe
3445 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3447 pthread=no
3448 cat > $TMPC << EOF
3449 #include <pthread.h>
3450 static void *f(void *p) { return NULL; }
3451 int main(void) {
3452 pthread_t thread;
3453 pthread_create(&thread, 0, f, 0);
3454 return 0;
3457 if compile_prog "" "" ; then
3458 pthread=yes
3459 else
3460 for pthread_lib in $PTHREADLIBS_LIST; do
3461 if compile_prog "" "$pthread_lib" ; then
3462 pthread=yes
3463 found=no
3464 for lib_entry in $LIBS; do
3465 if test "$lib_entry" = "$pthread_lib"; then
3466 found=yes
3467 break
3469 done
3470 if test "$found" = "no"; then
3471 LIBS="$pthread_lib $LIBS"
3472 libs_qga="$pthread_lib $libs_qga"
3474 PTHREAD_LIB="$pthread_lib"
3475 break
3477 done
3480 if test "$mingw32" != yes -a "$pthread" = no; then
3481 error_exit "pthread check failed" \
3482 "Make sure to have the pthread libs and headers installed."
3485 # check for pthread_setname_np
3486 pthread_setname_np=no
3487 cat > $TMPC << EOF
3488 #include <pthread.h>
3490 static void *f(void *p) { return NULL; }
3491 int main(void)
3493 pthread_t thread;
3494 pthread_create(&thread, 0, f, 0);
3495 pthread_setname_np(thread, "QEMU");
3496 return 0;
3499 if compile_prog "" "$pthread_lib" ; then
3500 pthread_setname_np=yes
3503 ##########################################
3504 # rbd probe
3505 if test "$rbd" != "no" ; then
3506 cat > $TMPC <<EOF
3507 #include <stdio.h>
3508 #include <rbd/librbd.h>
3509 int main(void) {
3510 rados_t cluster;
3511 rados_create(&cluster, NULL);
3512 return 0;
3515 rbd_libs="-lrbd -lrados"
3516 if compile_prog "" "$rbd_libs" ; then
3517 rbd=yes
3518 else
3519 if test "$rbd" = "yes" ; then
3520 feature_not_found "rados block device" "Install librbd/ceph devel"
3522 rbd=no
3526 ##########################################
3527 # libssh2 probe
3528 min_libssh2_version=1.2.8
3529 if test "$libssh2" != "no" ; then
3530 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3531 libssh2_cflags=$($pkg_config libssh2 --cflags)
3532 libssh2_libs=$($pkg_config libssh2 --libs)
3533 libssh2=yes
3534 else
3535 if test "$libssh2" = "yes" ; then
3536 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3538 libssh2=no
3542 ##########################################
3543 # libssh2_sftp_fsync probe
3545 if test "$libssh2" = "yes"; then
3546 cat > $TMPC <<EOF
3547 #include <stdio.h>
3548 #include <libssh2.h>
3549 #include <libssh2_sftp.h>
3550 int main(void) {
3551 LIBSSH2_SESSION *session;
3552 LIBSSH2_SFTP *sftp;
3553 LIBSSH2_SFTP_HANDLE *sftp_handle;
3554 session = libssh2_session_init ();
3555 sftp = libssh2_sftp_init (session);
3556 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3557 libssh2_sftp_fsync (sftp_handle);
3558 return 0;
3561 # libssh2_cflags/libssh2_libs defined in previous test.
3562 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3563 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3567 ##########################################
3568 # linux-aio probe
3570 if test "$linux_aio" != "no" ; then
3571 cat > $TMPC <<EOF
3572 #include <libaio.h>
3573 #include <sys/eventfd.h>
3574 #include <stddef.h>
3575 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3577 if compile_prog "" "-laio" ; then
3578 linux_aio=yes
3579 else
3580 if test "$linux_aio" = "yes" ; then
3581 feature_not_found "linux AIO" "Install libaio devel"
3583 linux_aio=no
3587 ##########################################
3588 # TPM passthrough is only on x86 Linux
3590 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3591 tpm_passthrough=$tpm
3592 else
3593 tpm_passthrough=no
3596 # TPM emulator is for all posix systems
3597 if test "$mingw32" != "yes"; then
3598 tpm_emulator=$tpm
3599 else
3600 tpm_emulator=no
3602 ##########################################
3603 # attr probe
3605 if test "$attr" != "no" ; then
3606 cat > $TMPC <<EOF
3607 #include <stdio.h>
3608 #include <sys/types.h>
3609 #ifdef CONFIG_LIBATTR
3610 #include <attr/xattr.h>
3611 #else
3612 #include <sys/xattr.h>
3613 #endif
3614 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3616 if compile_prog "" "" ; then
3617 attr=yes
3618 # Older distros have <attr/xattr.h>, and need -lattr:
3619 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3620 attr=yes
3621 LIBS="-lattr $LIBS"
3622 libattr=yes
3623 else
3624 if test "$attr" = "yes" ; then
3625 feature_not_found "ATTR" "Install libc6 or libattr devel"
3627 attr=no
3631 ##########################################
3632 # iovec probe
3633 cat > $TMPC <<EOF
3634 #include <sys/types.h>
3635 #include <sys/uio.h>
3636 #include <unistd.h>
3637 int main(void) { return sizeof(struct iovec); }
3639 iovec=no
3640 if compile_prog "" "" ; then
3641 iovec=yes
3644 ##########################################
3645 # preadv probe
3646 cat > $TMPC <<EOF
3647 #include <sys/types.h>
3648 #include <sys/uio.h>
3649 #include <unistd.h>
3650 int main(void) { return preadv(0, 0, 0, 0); }
3652 preadv=no
3653 if compile_prog "" "" ; then
3654 preadv=yes
3657 ##########################################
3658 # fdt probe
3659 # fdt support is mandatory for at least some target architectures,
3660 # so insist on it if we're building those system emulators.
3661 fdt_required=no
3662 for target in $target_list; do
3663 case $target in
3664 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu)
3665 fdt_required=yes
3667 esac
3668 done
3670 if test "$fdt_required" = "yes"; then
3671 if test "$fdt" = "no"; then
3672 error_exit "fdt disabled but some requested targets require it." \
3673 "You can turn off fdt only if you also disable all the system emulation" \
3674 "targets which need it (by specifying a cut down --target-list)."
3676 fdt=yes
3679 if test "$fdt" != "no" ; then
3680 fdt_libs="-lfdt"
3681 # explicitly check for libfdt_env.h as it is missing in some stable installs
3682 # and test for required functions to make sure we are on a version >= 1.4.2
3683 cat > $TMPC << EOF
3684 #include <libfdt.h>
3685 #include <libfdt_env.h>
3686 int main(void) { fdt_first_subnode(0, 0); return 0; }
3688 if compile_prog "" "$fdt_libs" ; then
3689 # system DTC is good - use it
3690 fdt=yes
3691 else
3692 # have GIT checkout, so activate dtc submodule
3693 if test -e "${source_path}/.git" ; then
3694 git_submodules="${git_submodules} dtc"
3696 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3697 fdt=yes
3698 dtc_internal="yes"
3699 mkdir -p dtc
3700 if [ "$pwd_is_source_path" != "y" ] ; then
3701 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3702 symlink "$source_path/dtc/scripts" "dtc/scripts"
3704 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3705 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3706 elif test "$fdt" = "yes" ; then
3707 # Not a git build & no libfdt found, prompt for system install
3708 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3709 "Please install the DTC (libfdt) devel package"
3710 else
3711 # don't have and don't want
3712 fdt_libs=
3713 fdt=no
3718 libs_softmmu="$libs_softmmu $fdt_libs"
3720 ##########################################
3721 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3723 if test "$opengl" != "no" ; then
3724 opengl_pkgs="epoxy libdrm gbm"
3725 if $pkg_config $opengl_pkgs x11; then
3726 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3727 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3728 opengl=yes
3729 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3730 gtk_gl="yes"
3732 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3733 else
3734 if test "$opengl" = "yes" ; then
3735 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3737 opengl_cflags=""
3738 opengl_libs=""
3739 opengl=no
3743 if test "$opengl" = "yes"; then
3744 cat > $TMPC << EOF
3745 #include <epoxy/egl.h>
3746 #ifndef EGL_MESA_image_dma_buf_export
3747 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3748 #endif
3749 int main(void) { return 0; }
3751 if compile_prog "" "" ; then
3752 opengl_dmabuf=yes
3756 ##########################################
3757 # libxml2 probe
3758 if test "$libxml2" != "no" ; then
3759 if $pkg_config --exists libxml-2.0; then
3760 libxml2="yes"
3761 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3762 libxml2_libs=$($pkg_config --libs libxml-2.0)
3763 else
3764 if test "$libxml2" = "yes"; then
3765 feature_not_found "libxml2" "Install libxml2 devel"
3767 libxml2="no"
3771 ##########################################
3772 # glusterfs probe
3773 if test "$glusterfs" != "no" ; then
3774 if $pkg_config --atleast-version=3 glusterfs-api; then
3775 glusterfs="yes"
3776 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3777 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3778 if $pkg_config --atleast-version=4 glusterfs-api; then
3779 glusterfs_xlator_opt="yes"
3781 if $pkg_config --atleast-version=5 glusterfs-api; then
3782 glusterfs_discard="yes"
3784 if $pkg_config --atleast-version=6 glusterfs-api; then
3785 glusterfs_fallocate="yes"
3786 glusterfs_zerofill="yes"
3788 else
3789 if test "$glusterfs" = "yes" ; then
3790 feature_not_found "GlusterFS backend support" \
3791 "Install glusterfs-api devel >= 3"
3793 glusterfs="no"
3797 # Check for inotify functions when we are building linux-user
3798 # emulator. This is done because older glibc versions don't
3799 # have syscall stubs for these implemented. In that case we
3800 # don't provide them even if kernel supports them.
3802 inotify=no
3803 cat > $TMPC << EOF
3804 #include <sys/inotify.h>
3807 main(void)
3809 /* try to start inotify */
3810 return inotify_init();
3813 if compile_prog "" "" ; then
3814 inotify=yes
3817 inotify1=no
3818 cat > $TMPC << EOF
3819 #include <sys/inotify.h>
3822 main(void)
3824 /* try to start inotify */
3825 return inotify_init1(0);
3828 if compile_prog "" "" ; then
3829 inotify1=yes
3832 # check if pipe2 is there
3833 pipe2=no
3834 cat > $TMPC << EOF
3835 #include <unistd.h>
3836 #include <fcntl.h>
3838 int main(void)
3840 int pipefd[2];
3841 return pipe2(pipefd, O_CLOEXEC);
3844 if compile_prog "" "" ; then
3845 pipe2=yes
3848 # check if accept4 is there
3849 accept4=no
3850 cat > $TMPC << EOF
3851 #include <sys/socket.h>
3852 #include <stddef.h>
3854 int main(void)
3856 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3857 return 0;
3860 if compile_prog "" "" ; then
3861 accept4=yes
3864 # check if tee/splice is there. vmsplice was added same time.
3865 splice=no
3866 cat > $TMPC << EOF
3867 #include <unistd.h>
3868 #include <fcntl.h>
3869 #include <limits.h>
3871 int main(void)
3873 int len, fd = 0;
3874 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3875 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3876 return 0;
3879 if compile_prog "" "" ; then
3880 splice=yes
3883 ##########################################
3884 # libnuma probe
3886 if test "$numa" != "no" ; then
3887 cat > $TMPC << EOF
3888 #include <numa.h>
3889 int main(void) { return numa_available(); }
3892 if compile_prog "" "-lnuma" ; then
3893 numa=yes
3894 libs_softmmu="-lnuma $libs_softmmu"
3895 else
3896 if test "$numa" = "yes" ; then
3897 feature_not_found "numa" "install numactl devel"
3899 numa=no
3903 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3904 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3905 exit 1
3908 # Even if malloc_trim() is available, these non-libc memory allocators
3909 # do not support it.
3910 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
3911 if test "$malloc_trim" = "yes" ; then
3912 echo "Disabling malloc_trim with non-libc memory allocator"
3914 malloc_trim="no"
3917 #######################################
3918 # malloc_trim
3920 if test "$malloc_trim" != "no" ; then
3921 cat > $TMPC << EOF
3922 #include <malloc.h>
3923 int main(void) { malloc_trim(0); return 0; }
3925 if compile_prog "" "" ; then
3926 malloc_trim="yes"
3927 else
3928 malloc_trim="no"
3932 ##########################################
3933 # tcmalloc probe
3935 if test "$tcmalloc" = "yes" ; then
3936 cat > $TMPC << EOF
3937 #include <stdlib.h>
3938 int main(void) { malloc(1); return 0; }
3941 if compile_prog "" "-ltcmalloc" ; then
3942 LIBS="-ltcmalloc $LIBS"
3943 else
3944 feature_not_found "tcmalloc" "install gperftools devel"
3948 ##########################################
3949 # jemalloc probe
3951 if test "$jemalloc" = "yes" ; then
3952 cat > $TMPC << EOF
3953 #include <stdlib.h>
3954 int main(void) { malloc(1); return 0; }
3957 if compile_prog "" "-ljemalloc" ; then
3958 LIBS="-ljemalloc $LIBS"
3959 else
3960 feature_not_found "jemalloc" "install jemalloc devel"
3964 ##########################################
3965 # signalfd probe
3966 signalfd="no"
3967 cat > $TMPC << EOF
3968 #include <unistd.h>
3969 #include <sys/syscall.h>
3970 #include <signal.h>
3971 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3974 if compile_prog "" "" ; then
3975 signalfd=yes
3978 # check if eventfd is supported
3979 eventfd=no
3980 cat > $TMPC << EOF
3981 #include <sys/eventfd.h>
3983 int main(void)
3985 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3988 if compile_prog "" "" ; then
3989 eventfd=yes
3992 # check if memfd is supported
3993 memfd=no
3994 cat > $TMPC << EOF
3995 #include <sys/mman.h>
3997 int main(void)
3999 return memfd_create("foo", MFD_ALLOW_SEALING);
4002 if compile_prog "" "" ; then
4003 memfd=yes
4008 # check for fallocate
4009 fallocate=no
4010 cat > $TMPC << EOF
4011 #include <fcntl.h>
4013 int main(void)
4015 fallocate(0, 0, 0, 0);
4016 return 0;
4019 if compile_prog "" "" ; then
4020 fallocate=yes
4023 # check for fallocate hole punching
4024 fallocate_punch_hole=no
4025 cat > $TMPC << EOF
4026 #include <fcntl.h>
4027 #include <linux/falloc.h>
4029 int main(void)
4031 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4032 return 0;
4035 if compile_prog "" "" ; then
4036 fallocate_punch_hole=yes
4039 # check that fallocate supports range zeroing inside the file
4040 fallocate_zero_range=no
4041 cat > $TMPC << EOF
4042 #include <fcntl.h>
4043 #include <linux/falloc.h>
4045 int main(void)
4047 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4048 return 0;
4051 if compile_prog "" "" ; then
4052 fallocate_zero_range=yes
4055 # check for posix_fallocate
4056 posix_fallocate=no
4057 cat > $TMPC << EOF
4058 #include <fcntl.h>
4060 int main(void)
4062 posix_fallocate(0, 0, 0);
4063 return 0;
4066 if compile_prog "" "" ; then
4067 posix_fallocate=yes
4070 # check for sync_file_range
4071 sync_file_range=no
4072 cat > $TMPC << EOF
4073 #include <fcntl.h>
4075 int main(void)
4077 sync_file_range(0, 0, 0, 0);
4078 return 0;
4081 if compile_prog "" "" ; then
4082 sync_file_range=yes
4085 # check for linux/fiemap.h and FS_IOC_FIEMAP
4086 fiemap=no
4087 cat > $TMPC << EOF
4088 #include <sys/ioctl.h>
4089 #include <linux/fs.h>
4090 #include <linux/fiemap.h>
4092 int main(void)
4094 ioctl(0, FS_IOC_FIEMAP, 0);
4095 return 0;
4098 if compile_prog "" "" ; then
4099 fiemap=yes
4102 # check for dup3
4103 dup3=no
4104 cat > $TMPC << EOF
4105 #include <unistd.h>
4107 int main(void)
4109 dup3(0, 0, 0);
4110 return 0;
4113 if compile_prog "" "" ; then
4114 dup3=yes
4117 # check for ppoll support
4118 ppoll=no
4119 cat > $TMPC << EOF
4120 #include <poll.h>
4122 int main(void)
4124 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4125 ppoll(&pfd, 1, 0, 0);
4126 return 0;
4129 if compile_prog "" "" ; then
4130 ppoll=yes
4133 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4134 prctl_pr_set_timerslack=no
4135 cat > $TMPC << EOF
4136 #include <sys/prctl.h>
4138 int main(void)
4140 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4141 return 0;
4144 if compile_prog "" "" ; then
4145 prctl_pr_set_timerslack=yes
4148 # check for epoll support
4149 epoll=no
4150 cat > $TMPC << EOF
4151 #include <sys/epoll.h>
4153 int main(void)
4155 epoll_create(0);
4156 return 0;
4159 if compile_prog "" "" ; then
4160 epoll=yes
4163 # epoll_create1 is a later addition
4164 # so we must check separately for its presence
4165 epoll_create1=no
4166 cat > $TMPC << EOF
4167 #include <sys/epoll.h>
4169 int main(void)
4171 /* Note that we use epoll_create1 as a value, not as
4172 * a function being called. This is necessary so that on
4173 * old SPARC glibc versions where the function was present in
4174 * the library but not declared in the header file we will
4175 * fail the configure check. (Otherwise we will get a compiler
4176 * warning but not an error, and will proceed to fail the
4177 * qemu compile where we compile with -Werror.)
4179 return (int)(uintptr_t)&epoll_create1;
4182 if compile_prog "" "" ; then
4183 epoll_create1=yes
4186 # check for sendfile support
4187 sendfile=no
4188 cat > $TMPC << EOF
4189 #include <sys/sendfile.h>
4191 int main(void)
4193 return sendfile(0, 0, 0, 0);
4196 if compile_prog "" "" ; then
4197 sendfile=yes
4200 # check for timerfd support (glibc 2.8 and newer)
4201 timerfd=no
4202 cat > $TMPC << EOF
4203 #include <sys/timerfd.h>
4205 int main(void)
4207 return(timerfd_create(CLOCK_REALTIME, 0));
4210 if compile_prog "" "" ; then
4211 timerfd=yes
4214 # check for setns and unshare support
4215 setns=no
4216 cat > $TMPC << EOF
4217 #include <sched.h>
4219 int main(void)
4221 int ret;
4222 ret = setns(0, 0);
4223 ret = unshare(0);
4224 return ret;
4227 if compile_prog "" "" ; then
4228 setns=yes
4231 # clock_adjtime probe
4232 clock_adjtime=no
4233 cat > $TMPC <<EOF
4234 #include <time.h>
4236 int main(void)
4238 return clock_adjtime(0, 0);
4241 clock_adjtime=no
4242 if compile_prog "" "" ; then
4243 clock_adjtime=yes
4246 # syncfs probe
4247 syncfs=no
4248 cat > $TMPC <<EOF
4249 #include <unistd.h>
4251 int main(void)
4253 return syncfs(0);
4256 syncfs=no
4257 if compile_prog "" "" ; then
4258 syncfs=yes
4261 # Check if tools are available to build documentation.
4262 if test "$docs" != "no" ; then
4263 if has makeinfo && has pod2man; then
4264 docs=yes
4265 else
4266 if test "$docs" = "yes" ; then
4267 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4269 docs=no
4273 # Search for bswap_32 function
4274 byteswap_h=no
4275 cat > $TMPC << EOF
4276 #include <byteswap.h>
4277 int main(void) { return bswap_32(0); }
4279 if compile_prog "" "" ; then
4280 byteswap_h=yes
4283 # Search for bswap32 function
4284 bswap_h=no
4285 cat > $TMPC << EOF
4286 #include <sys/endian.h>
4287 #include <sys/types.h>
4288 #include <machine/bswap.h>
4289 int main(void) { return bswap32(0); }
4291 if compile_prog "" "" ; then
4292 bswap_h=yes
4295 ##########################################
4296 # Do we have libiscsi >= 1.9.0
4297 if test "$libiscsi" != "no" ; then
4298 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4299 libiscsi="yes"
4300 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4301 libiscsi_libs=$($pkg_config --libs libiscsi)
4302 else
4303 if test "$libiscsi" = "yes" ; then
4304 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4306 libiscsi="no"
4310 ##########################################
4311 # Do we need libm
4312 cat > $TMPC << EOF
4313 #include <math.h>
4314 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4316 if compile_prog "" "" ; then
4318 elif compile_prog "" "-lm" ; then
4319 LIBS="-lm $LIBS"
4320 libs_qga="-lm $libs_qga"
4321 else
4322 error_exit "libm check failed"
4325 ##########################################
4326 # Do we need librt
4327 # uClibc provides 2 versions of clock_gettime(), one with realtime
4328 # support and one without. This means that the clock_gettime() don't
4329 # need -lrt. We still need it for timer_create() so we check for this
4330 # function in addition.
4331 cat > $TMPC <<EOF
4332 #include <signal.h>
4333 #include <time.h>
4334 int main(void) {
4335 timer_create(CLOCK_REALTIME, NULL, NULL);
4336 return clock_gettime(CLOCK_REALTIME, NULL);
4340 if compile_prog "" "" ; then
4342 # we need pthread for static linking. use previous pthread test result
4343 elif compile_prog "" "$pthread_lib -lrt" ; then
4344 LIBS="$LIBS -lrt"
4345 libs_qga="$libs_qga -lrt"
4348 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4349 "$haiku" != "yes" ; then
4350 libs_softmmu="-lutil $libs_softmmu"
4353 ##########################################
4354 # spice probe
4355 if test "$spice" != "no" ; then
4356 cat > $TMPC << EOF
4357 #include <spice.h>
4358 int main(void) { spice_server_new(); return 0; }
4360 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4361 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4362 if $pkg_config --atleast-version=0.12.0 spice-server && \
4363 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4364 compile_prog "$spice_cflags" "$spice_libs" ; then
4365 spice="yes"
4366 libs_softmmu="$libs_softmmu $spice_libs"
4367 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4368 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4369 spice_server_version=$($pkg_config --modversion spice-server)
4370 else
4371 if test "$spice" = "yes" ; then
4372 feature_not_found "spice" \
4373 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4375 spice="no"
4379 # check for smartcard support
4380 if test "$smartcard" != "no"; then
4381 if $pkg_config libcacard; then
4382 libcacard_cflags=$($pkg_config --cflags libcacard)
4383 libcacard_libs=$($pkg_config --libs libcacard)
4384 smartcard="yes"
4385 else
4386 if test "$smartcard" = "yes"; then
4387 feature_not_found "smartcard" "Install libcacard devel"
4389 smartcard="no"
4393 # check for libusb
4394 if test "$libusb" != "no" ; then
4395 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4396 libusb="yes"
4397 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4398 libusb_libs=$($pkg_config --libs libusb-1.0)
4399 else
4400 if test "$libusb" = "yes"; then
4401 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4403 libusb="no"
4407 # check for usbredirparser for usb network redirection support
4408 if test "$usb_redir" != "no" ; then
4409 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4410 usb_redir="yes"
4411 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4412 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4413 else
4414 if test "$usb_redir" = "yes"; then
4415 feature_not_found "usb-redir" "Install usbredir devel"
4417 usb_redir="no"
4421 ##########################################
4422 # check if we have VSS SDK headers for win
4424 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4425 case "$vss_win32_sdk" in
4426 "") vss_win32_include="-isystem $source_path" ;;
4427 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4428 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4429 vss_win32_include="-isystem $source_path/.sdk/vss"
4430 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4432 *) vss_win32_include="-isystem $vss_win32_sdk"
4433 esac
4434 cat > $TMPC << EOF
4435 #define __MIDL_user_allocate_free_DEFINED__
4436 #include <inc/win2003/vss.h>
4437 int main(void) { return VSS_CTX_BACKUP; }
4439 if compile_prog "$vss_win32_include" "" ; then
4440 guest_agent_with_vss="yes"
4441 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4442 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4443 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4444 else
4445 if test "$vss_win32_sdk" != "" ; then
4446 echo "ERROR: Please download and install Microsoft VSS SDK:"
4447 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4448 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4449 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4450 echo "ERROR: The headers are extracted in the directory \`inc'."
4451 feature_not_found "VSS support"
4453 guest_agent_with_vss="no"
4457 ##########################################
4458 # lookup Windows platform SDK (if not specified)
4459 # The SDK is needed only to build .tlb (type library) file of guest agent
4460 # VSS provider from the source. It is usually unnecessary because the
4461 # pre-compiled .tlb file is included.
4463 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4464 if test -z "$win_sdk"; then
4465 programfiles="$PROGRAMFILES"
4466 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4467 if test -n "$programfiles"; then
4468 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4469 else
4470 feature_not_found "Windows SDK"
4472 elif test "$win_sdk" = "no"; then
4473 win_sdk=""
4477 ##########################################
4478 # check if mingw environment provides a recent ntddscsi.h
4479 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4480 cat > $TMPC << EOF
4481 #include <windows.h>
4482 #include <ntddscsi.h>
4483 int main(void) {
4484 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4485 #error Missing required ioctl definitions
4486 #endif
4487 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4488 return addr.Lun;
4491 if compile_prog "" "" ; then
4492 guest_agent_ntddscsi=yes
4493 libs_qga="-lsetupapi $libs_qga"
4497 ##########################################
4498 # virgl renderer probe
4500 if test "$virglrenderer" != "no" ; then
4501 cat > $TMPC << EOF
4502 #include <virglrenderer.h>
4503 int main(void) { virgl_renderer_poll(); return 0; }
4505 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4506 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4507 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4508 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4509 virglrenderer="yes"
4510 else
4511 if test "$virglrenderer" = "yes" ; then
4512 feature_not_found "virglrenderer"
4514 virglrenderer="no"
4518 ##########################################
4519 # capstone
4521 case "$capstone" in
4522 "" | yes)
4523 if $pkg_config capstone; then
4524 capstone=system
4525 elif test -e "${source_path}/.git" ; then
4526 capstone=git
4527 elif test -e "${source_path}/capstone/Makefile" ; then
4528 capstone=internal
4529 elif test -z "$capstone" ; then
4530 capstone=no
4531 else
4532 feature_not_found "capstone" "Install capstone devel or git submodule"
4536 system)
4537 if ! $pkg_config capstone; then
4538 feature_not_found "capstone" "Install capstone devel"
4541 esac
4543 case "$capstone" in
4544 git | internal)
4545 if test "$capstone" = git; then
4546 git_submodules="${git_submodules} capstone"
4548 mkdir -p capstone
4549 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4550 if test "$mingw32" = "yes"; then
4551 LIBCAPSTONE=capstone.lib
4552 else
4553 LIBCAPSTONE=libcapstone.a
4555 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4558 system)
4559 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4560 LIBS="$($pkg_config --libs capstone) $LIBS"
4566 error_exit "Unknown state for capstone: $capstone"
4568 esac
4570 ##########################################
4571 # check if we have fdatasync
4573 fdatasync=no
4574 cat > $TMPC << EOF
4575 #include <unistd.h>
4576 int main(void) {
4577 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4578 return fdatasync(0);
4579 #else
4580 #error Not supported
4581 #endif
4584 if compile_prog "" "" ; then
4585 fdatasync=yes
4588 ##########################################
4589 # check if we have madvise
4591 madvise=no
4592 cat > $TMPC << EOF
4593 #include <sys/types.h>
4594 #include <sys/mman.h>
4595 #include <stddef.h>
4596 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4598 if compile_prog "" "" ; then
4599 madvise=yes
4602 ##########################################
4603 # check if we have posix_madvise
4605 posix_madvise=no
4606 cat > $TMPC << EOF
4607 #include <sys/mman.h>
4608 #include <stddef.h>
4609 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4611 if compile_prog "" "" ; then
4612 posix_madvise=yes
4615 ##########################################
4616 # check if we have posix_syslog
4618 posix_syslog=no
4619 cat > $TMPC << EOF
4620 #include <syslog.h>
4621 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4623 if compile_prog "" "" ; then
4624 posix_syslog=yes
4627 ##########################################
4628 # check if we have sem_timedwait
4630 sem_timedwait=no
4631 cat > $TMPC << EOF
4632 #include <semaphore.h>
4633 int main(void) { return sem_timedwait(0, 0); }
4635 if compile_prog "" "" ; then
4636 sem_timedwait=yes
4639 ##########################################
4640 # check if trace backend exists
4642 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4643 if test "$?" -ne 0 ; then
4644 error_exit "invalid trace backends" \
4645 "Please choose supported trace backends."
4648 ##########################################
4649 # For 'ust' backend, test if ust headers are present
4650 if have_backend "ust"; then
4651 cat > $TMPC << EOF
4652 #include <lttng/tracepoint.h>
4653 int main(void) { return 0; }
4655 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4656 if $pkg_config lttng-ust --exists; then
4657 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4658 else
4659 lttng_ust_libs="-llttng-ust -ldl"
4661 if $pkg_config liburcu-bp --exists; then
4662 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4663 else
4664 urcu_bp_libs="-lurcu-bp"
4667 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4668 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4669 else
4670 error_exit "Trace backend 'ust' missing lttng-ust header files"
4674 ##########################################
4675 # For 'dtrace' backend, test if 'dtrace' command is present
4676 if have_backend "dtrace"; then
4677 if ! has 'dtrace' ; then
4678 error_exit "dtrace command is not found in PATH $PATH"
4680 trace_backend_stap="no"
4681 if has 'stap' ; then
4682 trace_backend_stap="yes"
4686 ##########################################
4687 # check and set a backend for coroutine
4689 # We prefer ucontext, but it's not always possible. The fallback
4690 # is sigcontext. On Windows the only valid backend is the Windows
4691 # specific one.
4693 ucontext_works=no
4694 if test "$darwin" != "yes"; then
4695 cat > $TMPC << EOF
4696 #include <ucontext.h>
4697 #ifdef __stub_makecontext
4698 #error Ignoring glibc stub makecontext which will always fail
4699 #endif
4700 int main(void) { makecontext(0, 0, 0); return 0; }
4702 if compile_prog "" "" ; then
4703 ucontext_works=yes
4707 if test "$coroutine" = ""; then
4708 if test "$mingw32" = "yes"; then
4709 coroutine=win32
4710 elif test "$ucontext_works" = "yes"; then
4711 coroutine=ucontext
4712 else
4713 coroutine=sigaltstack
4715 else
4716 case $coroutine in
4717 windows)
4718 if test "$mingw32" != "yes"; then
4719 error_exit "'windows' coroutine backend only valid for Windows"
4721 # Unfortunately the user visible backend name doesn't match the
4722 # coroutine-*.c filename for this case, so we have to adjust it here.
4723 coroutine=win32
4725 ucontext)
4726 if test "$ucontext_works" != "yes"; then
4727 feature_not_found "ucontext"
4730 sigaltstack)
4731 if test "$mingw32" = "yes"; then
4732 error_exit "only the 'windows' coroutine backend is valid for Windows"
4736 error_exit "unknown coroutine backend $coroutine"
4738 esac
4741 if test "$coroutine_pool" = ""; then
4742 coroutine_pool=yes
4745 if test "$debug_stack_usage" = "yes"; then
4746 if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4747 error_exit "stack usage debugging is not supported for $cpu"
4749 if test "$coroutine_pool" = "yes"; then
4750 echo "WARN: disabling coroutine pool for stack usage debugging"
4751 coroutine_pool=no
4756 ##########################################
4757 # check if we have open_by_handle_at
4759 open_by_handle_at=no
4760 cat > $TMPC << EOF
4761 #include <fcntl.h>
4762 #if !defined(AT_EMPTY_PATH)
4763 # error missing definition
4764 #else
4765 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4766 #endif
4768 if compile_prog "" "" ; then
4769 open_by_handle_at=yes
4772 ########################################
4773 # check if we have linux/magic.h
4775 linux_magic_h=no
4776 cat > $TMPC << EOF
4777 #include <linux/magic.h>
4778 int main(void) {
4779 return 0;
4782 if compile_prog "" "" ; then
4783 linux_magic_h=yes
4786 ########################################
4787 # check whether we can disable warning option with a pragma (this is needed
4788 # to silence warnings in the headers of some versions of external libraries).
4789 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4790 # only a warning.
4792 # If we can't selectively disable warning in the code, disable -Werror so that
4793 # the build doesn't fail anyway.
4795 pragma_disable_unused_but_set=no
4796 cat > $TMPC << EOF
4797 #pragma GCC diagnostic push
4798 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4799 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4800 #pragma GCC diagnostic pop
4802 int main(void) {
4803 return 0;
4806 if compile_prog "-Werror" "" ; then
4807 pragma_diagnostic_available=yes
4808 else
4809 werror=no
4812 ########################################
4813 # check if we have valgrind/valgrind.h
4815 valgrind_h=no
4816 cat > $TMPC << EOF
4817 #include <valgrind/valgrind.h>
4818 int main(void) {
4819 return 0;
4822 if compile_prog "" "" ; then
4823 valgrind_h=yes
4826 ########################################
4827 # check if environ is declared
4829 has_environ=no
4830 cat > $TMPC << EOF
4831 #include <unistd.h>
4832 int main(void) {
4833 environ = 0;
4834 return 0;
4837 if compile_prog "" "" ; then
4838 has_environ=yes
4841 ########################################
4842 # check if cpuid.h is usable.
4844 cat > $TMPC << EOF
4845 #include <cpuid.h>
4846 int main(void) {
4847 unsigned a, b, c, d;
4848 int max = __get_cpuid_max(0, 0);
4850 if (max >= 1) {
4851 __cpuid(1, a, b, c, d);
4854 if (max >= 7) {
4855 __cpuid_count(7, 0, a, b, c, d);
4858 return 0;
4861 if compile_prog "" "" ; then
4862 cpuid_h=yes
4865 ##########################################
4866 # avx2 optimization requirement check
4868 # There is no point enabling this if cpuid.h is not usable,
4869 # since we won't be able to select the new routines.
4871 if test $cpuid_h = yes; then
4872 cat > $TMPC << EOF
4873 #pragma GCC push_options
4874 #pragma GCC target("avx2")
4875 #include <cpuid.h>
4876 #include <immintrin.h>
4877 static int bar(void *a) {
4878 __m256i x = *(__m256i *)a;
4879 return _mm256_testz_si256(x, x);
4881 int main(int argc, char *argv[]) { return bar(argv[0]); }
4883 if compile_object "" ; then
4884 avx2_opt="yes"
4888 ########################################
4889 # check if __[u]int128_t is usable.
4891 int128=no
4892 cat > $TMPC << EOF
4893 #if defined(__clang_major__) && defined(__clang_minor__)
4894 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4895 # error __int128_t does not work in CLANG before 3.2
4896 # endif
4897 #endif
4898 __int128_t a;
4899 __uint128_t b;
4900 int main (void) {
4901 a = a + b;
4902 b = a * b;
4903 a = a * a;
4904 return 0;
4907 if compile_prog "" "" ; then
4908 int128=yes
4911 #########################################
4912 # See if 128-bit atomic operations are supported.
4914 atomic128=no
4915 if test "$int128" = "yes"; then
4916 cat > $TMPC << EOF
4917 int main(void)
4919 unsigned __int128 x = 0, y = 0;
4920 y = __atomic_load_16(&x, 0);
4921 __atomic_store_16(&x, y, 0);
4922 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4923 return 0;
4926 if compile_prog "" "" ; then
4927 atomic128=yes
4931 #########################################
4932 # See if 64-bit atomic operations are supported.
4933 # Note that without __atomic builtins, we can only
4934 # assume atomic loads/stores max at pointer size.
4936 cat > $TMPC << EOF
4937 #include <stdint.h>
4938 int main(void)
4940 uint64_t x = 0, y = 0;
4941 #ifdef __ATOMIC_RELAXED
4942 y = __atomic_load_8(&x, 0);
4943 __atomic_store_8(&x, y, 0);
4944 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4945 __atomic_exchange_8(&x, y, 0);
4946 __atomic_fetch_add_8(&x, y, 0);
4947 #else
4948 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4949 __sync_lock_test_and_set(&x, y);
4950 __sync_val_compare_and_swap(&x, y, 0);
4951 __sync_fetch_and_add(&x, y);
4952 #endif
4953 return 0;
4956 if compile_prog "" "" ; then
4957 atomic64=yes
4960 ########################################
4961 # check if getauxval is available.
4963 getauxval=no
4964 cat > $TMPC << EOF
4965 #include <sys/auxv.h>
4966 int main(void) {
4967 return getauxval(AT_HWCAP) == 0;
4970 if compile_prog "" "" ; then
4971 getauxval=yes
4974 ########################################
4975 # check if ccache is interfering with
4976 # semantic analysis of macros
4978 unset CCACHE_CPP2
4979 ccache_cpp2=no
4980 cat > $TMPC << EOF
4981 static const int Z = 1;
4982 #define fn() ({ Z; })
4983 #define TAUT(X) ((X) == Z)
4984 #define PAREN(X, Y) (X == Y)
4985 #define ID(X) (X)
4986 int main(int argc, char *argv[])
4988 int x = 0, y = 0;
4989 x = ID(x);
4990 x = fn();
4991 fn();
4992 if (PAREN(x, y)) return 0;
4993 if (TAUT(Z)) return 0;
4994 return 0;
4998 if ! compile_object "-Werror"; then
4999 ccache_cpp2=yes
5002 #################################################
5003 # clang does not support glibc + FORTIFY_SOURCE.
5005 if test "$fortify_source" != "no"; then
5006 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5007 fortify_source="no";
5008 elif test -n "$cxx" && has $cxx &&
5009 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5010 fortify_source="no";
5011 else
5012 fortify_source="yes"
5016 ##########################################
5017 # check if struct fsxattr is available via linux/fs.h
5019 have_fsxattr=no
5020 cat > $TMPC << EOF
5021 #include <linux/fs.h>
5022 struct fsxattr foo;
5023 int main(void) {
5024 return 0;
5027 if compile_prog "" "" ; then
5028 have_fsxattr=yes
5031 ##########################################
5032 # check if rtnetlink.h exists and is useful
5033 have_rtnetlink=no
5034 cat > $TMPC << EOF
5035 #include <linux/rtnetlink.h>
5036 int main(void) {
5037 return IFLA_PROTO_DOWN;
5040 if compile_prog "" "" ; then
5041 have_rtnetlink=yes
5044 ##########################################
5045 # check for usable AF_VSOCK environment
5046 have_af_vsock=no
5047 cat > $TMPC << EOF
5048 #include <errno.h>
5049 #include <sys/types.h>
5050 #include <sys/socket.h>
5051 #if !defined(AF_VSOCK)
5052 # error missing AF_VSOCK flag
5053 #endif
5054 #include <linux/vm_sockets.h>
5055 int main(void) {
5056 int sock, ret;
5057 struct sockaddr_vm svm;
5058 socklen_t len = sizeof(svm);
5059 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5060 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5061 if ((ret == -1) && (errno == ENOTCONN)) {
5062 return 0;
5064 return -1;
5067 if compile_prog "" "" ; then
5068 have_af_vsock=yes
5071 ##########################################
5072 # check for usable AF_ALG environment
5073 hava_afalg=no
5074 cat > $TMPC << EOF
5075 #include <errno.h>
5076 #include <sys/types.h>
5077 #include <sys/socket.h>
5078 #include <linux/if_alg.h>
5079 int main(void) {
5080 int sock;
5081 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5082 return sock;
5085 if compile_prog "" "" ; then
5086 have_afalg=yes
5088 if test "$crypto_afalg" = "yes"
5089 then
5090 if test "$have_afalg" != "yes"
5091 then
5092 error_exit "AF_ALG requested but could not be detected"
5097 #################################################
5098 # Check to see if we have the Hypervisor framework
5099 if [ "$darwin" = "yes" ] ; then
5100 cat > $TMPC << EOF
5101 #include <Hypervisor/hv.h>
5102 int main() { return 0;}
5104 if ! compile_object ""; then
5105 hvf='no'
5106 else
5107 hvf='yes'
5108 LDFLAGS="-framework Hypervisor $LDFLAGS"
5112 #################################################
5113 # Sparc implicitly links with --relax, which is
5114 # incompatible with -r, so --no-relax should be
5115 # given. It does no harm to give it on other
5116 # platforms too.
5118 # Note: the prototype is needed since QEMU_CFLAGS
5119 # contains -Wmissing-prototypes
5120 cat > $TMPC << EOF
5121 extern int foo(void);
5122 int foo(void) { return 0; }
5124 if ! compile_object ""; then
5125 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5127 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5128 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5129 LD_REL_FLAGS=$i
5130 break
5132 done
5133 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5134 feature_not_found "modules" "Cannot find how to build relocatable objects"
5137 ##########################################
5138 # check for sysmacros.h
5140 have_sysmacros=no
5141 cat > $TMPC << EOF
5142 #include <sys/sysmacros.h>
5143 int main(void) {
5144 return makedev(0, 0);
5147 if compile_prog "" "" ; then
5148 have_sysmacros=yes
5151 ##########################################
5152 # Veritas HyperScale block driver VxHS
5153 # Check if libvxhs is installed
5155 if test "$vxhs" != "no" ; then
5156 cat > $TMPC <<EOF
5157 #include <stdint.h>
5158 #include <qnio/qnio_api.h>
5160 void *vxhs_callback;
5162 int main(void) {
5163 iio_init(QNIO_VERSION, vxhs_callback);
5164 return 0;
5167 vxhs_libs="-lvxhs -lssl"
5168 if compile_prog "" "$vxhs_libs" ; then
5169 vxhs=yes
5170 else
5171 if test "$vxhs" = "yes" ; then
5172 feature_not_found "vxhs block device" "Install libvxhs See github"
5174 vxhs=no
5178 ##########################################
5179 # check for _Static_assert()
5181 have_static_assert=no
5182 cat > $TMPC << EOF
5183 _Static_assert(1, "success");
5184 int main(void) {
5185 return 0;
5188 if compile_prog "" "" ; then
5189 have_static_assert=yes
5192 ##########################################
5193 # check for utmpx.h, it is missing e.g. on OpenBSD
5195 have_utmpx=no
5196 cat > $TMPC << EOF
5197 #include <utmpx.h>
5198 struct utmpx user_info;
5199 int main(void) {
5200 return 0;
5203 if compile_prog "" "" ; then
5204 have_utmpx=yes
5207 ##########################################
5208 # End of CC checks
5209 # After here, no more $cc or $ld runs
5211 if test "$gcov" = "yes" ; then
5212 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5213 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5214 elif test "$fortify_source" = "yes" ; then
5215 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5216 elif test "$debug" = "yes"; then
5217 if compile_prog "-Og" ""; then
5218 CFLAGS="-Og $CFLAGS"
5219 elif compile_prog "-O1" ""; then
5220 CFLAGS="-O1 $CFLAGS"
5222 # Workaround GCC false-positive Wuninitialized bugs with Og or O1:
5223 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24639
5224 if cc_has_warning_flag "-Wno-maybe-uninitialized"; then
5225 CFLAGS="-Wno-maybe-uninitialized $CFLAGS"
5227 else
5228 CFLAGS="-O2 $CFLAGS"
5231 ##########################################
5232 # Do we have libnfs
5233 if test "$libnfs" != "no" ; then
5234 if $pkg_config --atleast-version=1.9.3 libnfs; then
5235 libnfs="yes"
5236 libnfs_libs=$($pkg_config --libs libnfs)
5237 else
5238 if test "$libnfs" = "yes" ; then
5239 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5241 libnfs="no"
5245 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5246 if test "$werror" = "yes"; then
5247 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5250 if test "$solaris" = "no" ; then
5251 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5252 LDFLAGS="-Wl,--warn-common $LDFLAGS"
5256 # test if pod2man has --utf8 option
5257 if pod2man --help | grep -q utf8; then
5258 POD2MAN="pod2man --utf8"
5259 else
5260 POD2MAN="pod2man"
5263 # Use ASLR, no-SEH and DEP if available
5264 if test "$mingw32" = "yes" ; then
5265 for flag in --dynamicbase --no-seh --nxcompat; do
5266 if ld_has $flag ; then
5267 LDFLAGS="-Wl,$flag $LDFLAGS"
5269 done
5272 qemu_confdir=$sysconfdir$confsuffix
5273 qemu_moddir=$libdir$confsuffix
5274 qemu_datadir=$datadir$confsuffix
5275 qemu_localedir="$datadir/locale"
5277 # We can only support ivshmem if we have eventfd
5278 if [ "$eventfd" = "yes" ]; then
5279 ivshmem=yes
5282 tools=""
5283 if test "$want_tools" = "yes" ; then
5284 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
5285 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5286 tools="qemu-nbd\$(EXESUF) $tools"
5288 if [ "$ivshmem" = "yes" ]; then
5289 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5292 if test "$softmmu" = yes ; then
5293 if test "$linux" = yes; then
5294 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5295 virtfs=yes
5296 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5297 else
5298 if test "$virtfs" = yes; then
5299 error_exit "VirtFS requires libcap devel and libattr devel"
5301 virtfs=no
5303 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5304 mpath=yes
5305 else
5306 if test "$mpath" = yes; then
5307 error_exit "Multipath requires libmpathpersist devel"
5309 mpath=no
5311 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5312 else
5313 if test "$virtfs" = yes; then
5314 error_exit "VirtFS is supported only on Linux"
5316 virtfs=no
5317 if test "$mpath" = yes; then
5318 error_exit "Multipath is supported only on Linux"
5320 mpath=no
5322 if test "$xkbcommon" = "yes"; then
5323 tools="qemu-keymap\$(EXESUF) $tools"
5327 # Probe for guest agent support/options
5329 if [ "$guest_agent" != "no" ]; then
5330 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5331 tools="qemu-ga $tools"
5332 guest_agent=yes
5333 elif [ "$guest_agent" != yes ]; then
5334 guest_agent=no
5335 else
5336 error_exit "Guest agent is not supported on this platform"
5340 # Guest agent Window MSI package
5342 if test "$guest_agent" != yes; then
5343 if test "$guest_agent_msi" = yes; then
5344 error_exit "MSI guest agent package requires guest agent enabled"
5346 guest_agent_msi=no
5347 elif test "$mingw32" != "yes"; then
5348 if test "$guest_agent_msi" = "yes"; then
5349 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5351 guest_agent_msi=no
5352 elif ! has wixl; then
5353 if test "$guest_agent_msi" = "yes"; then
5354 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5356 guest_agent_msi=no
5357 else
5358 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5359 # disabled explicitly
5360 if test "$guest_agent_msi" != "no"; then
5361 guest_agent_msi=yes
5365 if test "$guest_agent_msi" = "yes"; then
5366 if test "$guest_agent_with_vss" = "yes"; then
5367 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5370 if test "$QEMU_GA_MANUFACTURER" = ""; then
5371 QEMU_GA_MANUFACTURER=QEMU
5374 if test "$QEMU_GA_DISTRO" = ""; then
5375 QEMU_GA_DISTRO=Linux
5378 if test "$QEMU_GA_VERSION" = ""; then
5379 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5382 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5384 case "$cpu" in
5385 x86_64)
5386 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5388 i386)
5389 QEMU_GA_MSI_ARCH="-D Arch=32"
5392 error_exit "CPU $cpu not supported for building installation package"
5394 esac
5397 # Mac OS X ships with a broken assembler
5398 roms=
5399 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5400 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5401 "$softmmu" = yes ; then
5402 # Different host OS linkers have different ideas about the name of the ELF
5403 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5404 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5405 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5406 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5407 ld_i386_emulation="$emu"
5408 roms="optionrom"
5409 break
5411 done
5413 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5414 roms="$roms spapr-rtas"
5417 if test "$cpu" = "s390x" ; then
5418 roms="$roms s390-ccw"
5421 # Probe for the need for relocating the user-only binary.
5422 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5423 textseg_addr=
5424 case "$cpu" in
5425 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5426 # ??? Rationale for choosing this address
5427 textseg_addr=0x60000000
5429 mips)
5430 # A 256M aligned address, high in the address space, with enough
5431 # room for the code_gen_buffer above it before the stack.
5432 textseg_addr=0x60000000
5434 esac
5435 if [ -n "$textseg_addr" ]; then
5436 cat > $TMPC <<EOF
5437 int main(void) { return 0; }
5439 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5440 if ! compile_prog "" "$textseg_ldflags"; then
5441 # In case ld does not support -Ttext-segment, edit the default linker
5442 # script via sed to set the .text start addr. This is needed on FreeBSD
5443 # at least.
5444 if ! $ld --verbose >/dev/null 2>&1; then
5445 error_exit \
5446 "We need to link the QEMU user mode binaries at a" \
5447 "specific text address. Unfortunately your linker" \
5448 "doesn't support either the -Ttext-segment option or" \
5449 "printing the default linker script with --verbose." \
5450 "If you don't want the user mode binaries, pass the" \
5451 "--disable-user option to configure."
5454 $ld --verbose | sed \
5455 -e '1,/==================================================/d' \
5456 -e '/==================================================/,$d' \
5457 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5458 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5459 textseg_ldflags="-Wl,-T../config-host.ld"
5464 # Check that the C++ compiler exists and works with the C compiler.
5465 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5466 if has $cxx; then
5467 cat > $TMPC <<EOF
5468 int c_function(void);
5469 int main(void) { return c_function(); }
5472 compile_object
5474 cat > $TMPCXX <<EOF
5475 extern "C" {
5476 int c_function(void);
5478 int c_function(void) { return 42; }
5481 update_cxxflags
5483 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5484 # C++ compiler $cxx works ok with C compiler $cc
5486 else
5487 echo "C++ compiler $cxx does not work with C compiler $cc"
5488 echo "Disabling C++ specific optional code"
5489 cxx=
5491 else
5492 echo "No C++ compiler available; disabling C++ specific optional code"
5493 cxx=
5496 echo_version() {
5497 if test "$1" = "yes" ; then
5498 echo "($2)"
5502 # prepend pixman and ftd flags after all config tests are done
5503 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5504 libs_softmmu="$pixman_libs $libs_softmmu"
5506 echo "Install prefix $prefix"
5507 echo "BIOS directory $(eval echo $qemu_datadir)"
5508 echo "firmware path $(eval echo $firmwarepath)"
5509 echo "binary directory $(eval echo $bindir)"
5510 echo "library directory $(eval echo $libdir)"
5511 echo "module directory $(eval echo $qemu_moddir)"
5512 echo "libexec directory $(eval echo $libexecdir)"
5513 echo "include directory $(eval echo $includedir)"
5514 echo "config directory $(eval echo $sysconfdir)"
5515 if test "$mingw32" = "no" ; then
5516 echo "local state directory $(eval echo $local_statedir)"
5517 echo "Manual directory $(eval echo $mandir)"
5518 echo "ELF interp prefix $interp_prefix"
5519 else
5520 echo "local state directory queried at runtime"
5521 echo "Windows SDK $win_sdk"
5523 echo "Source path $source_path"
5524 echo "GIT binary $git"
5525 echo "GIT submodules $git_submodules"
5526 echo "C compiler $cc"
5527 echo "Host C compiler $host_cc"
5528 echo "C++ compiler $cxx"
5529 echo "Objective-C compiler $objcc"
5530 echo "ARFLAGS $ARFLAGS"
5531 echo "CFLAGS $CFLAGS"
5532 echo "QEMU_CFLAGS $QEMU_CFLAGS"
5533 echo "LDFLAGS $LDFLAGS"
5534 echo "make $make"
5535 echo "install $install"
5536 echo "python $python"
5537 if test "$slirp" = "yes" ; then
5538 echo "smbd $smbd"
5540 echo "module support $modules"
5541 echo "host CPU $cpu"
5542 echo "host big endian $bigendian"
5543 echo "target list $target_list"
5544 echo "gprof enabled $gprof"
5545 echo "sparse enabled $sparse"
5546 echo "strip binaries $strip_opt"
5547 echo "profiler $profiler"
5548 echo "static build $static"
5549 if test "$darwin" = "yes" ; then
5550 echo "Cocoa support $cocoa"
5552 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5553 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
5554 echo "GTK GL support $gtk_gl"
5555 echo "VTE support $vte $(echo_version $vte $vteversion)"
5556 echo "TLS priority $tls_priority"
5557 echo "GNUTLS support $gnutls"
5558 echo "GNUTLS rnd $gnutls_rnd"
5559 echo "libgcrypt $gcrypt"
5560 echo "libgcrypt kdf $gcrypt_kdf"
5561 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
5562 echo "nettle kdf $nettle_kdf"
5563 echo "libtasn1 $tasn1"
5564 echo "curses support $curses"
5565 echo "virgl support $virglrenderer"
5566 echo "curl support $curl"
5567 echo "mingw32 support $mingw32"
5568 echo "Audio drivers $audio_drv_list"
5569 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5570 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5571 echo "VirtFS support $virtfs"
5572 echo "Multipath support $mpath"
5573 echo "VNC support $vnc"
5574 if test "$vnc" = "yes" ; then
5575 echo "VNC SASL support $vnc_sasl"
5576 echo "VNC JPEG support $vnc_jpeg"
5577 echo "VNC PNG support $vnc_png"
5579 if test -n "$sparc_cpu"; then
5580 echo "Target Sparc Arch $sparc_cpu"
5582 echo "xen support $xen"
5583 if test "$xen" = "yes" ; then
5584 echo "xen ctrl version $xen_ctrl_version"
5585 echo "pv dom build $xen_pv_domain_build"
5587 echo "brlapi support $brlapi"
5588 echo "bluez support $bluez"
5589 echo "Documentation $docs"
5590 echo "PIE $pie"
5591 echo "vde support $vde"
5592 echo "netmap support $netmap"
5593 echo "Linux AIO support $linux_aio"
5594 echo "ATTR/XATTR support $attr"
5595 echo "Install blobs $blobs"
5596 echo "KVM support $kvm"
5597 echo "HAX support $hax"
5598 echo "HVF support $hvf"
5599 echo "TCG support $tcg"
5600 if test "$tcg" = "yes" ; then
5601 echo "TCG debug enabled $debug_tcg"
5602 echo "TCG interpreter $tcg_interpreter"
5604 echo "malloc trim support $malloc_trim"
5605 echo "RDMA support $rdma"
5606 echo "fdt support $fdt"
5607 echo "preadv support $preadv"
5608 echo "fdatasync $fdatasync"
5609 echo "madvise $madvise"
5610 echo "posix_madvise $posix_madvise"
5611 echo "libcap-ng support $cap_ng"
5612 echo "vhost-net support $vhost_net"
5613 echo "vhost-scsi support $vhost_scsi"
5614 echo "vhost-vsock support $vhost_vsock"
5615 echo "vhost-user support $vhost_user"
5616 echo "Trace backends $trace_backends"
5617 if have_backend "simple"; then
5618 echo "Trace output file $trace_file-<pid>"
5620 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5621 echo "rbd support $rbd"
5622 echo "xfsctl support $xfs"
5623 echo "smartcard support $smartcard"
5624 echo "libusb $libusb"
5625 echo "usb net redir $usb_redir"
5626 echo "OpenGL support $opengl"
5627 echo "OpenGL dmabufs $opengl_dmabuf"
5628 echo "libiscsi support $libiscsi"
5629 echo "libnfs support $libnfs"
5630 echo "build guest agent $guest_agent"
5631 echo "QGA VSS support $guest_agent_with_vss"
5632 echo "QGA w32 disk info $guest_agent_ntddscsi"
5633 echo "QGA MSI support $guest_agent_msi"
5634 echo "seccomp support $seccomp"
5635 echo "coroutine backend $coroutine"
5636 echo "coroutine pool $coroutine_pool"
5637 echo "debug stack usage $debug_stack_usage"
5638 echo "crypto afalg $crypto_afalg"
5639 echo "GlusterFS support $glusterfs"
5640 echo "gcov $gcov_tool"
5641 echo "gcov enabled $gcov"
5642 echo "TPM support $tpm"
5643 echo "libssh2 support $libssh2"
5644 echo "TPM passthrough $tpm_passthrough"
5645 echo "TPM emulator $tpm_emulator"
5646 echo "QOM debugging $qom_cast_debug"
5647 echo "Live block migration $live_block_migration"
5648 echo "lzo support $lzo"
5649 echo "snappy support $snappy"
5650 echo "bzip2 support $bzip2"
5651 echo "NUMA host support $numa"
5652 echo "libxml2 $libxml2"
5653 echo "tcmalloc support $tcmalloc"
5654 echo "jemalloc support $jemalloc"
5655 echo "avx2 optimization $avx2_opt"
5656 echo "replication support $replication"
5657 echo "VxHS block device $vxhs"
5658 echo "capstone $capstone"
5660 if test "$sdl_too_old" = "yes"; then
5661 echo "-> Your SDL version is too old - please upgrade to have SDL support"
5664 if test "$gtkabi" = "2.0"; then
5665 echo
5666 echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
5667 echo "WARNING: future releases. Please switch to using GTK 3.0"
5670 if test "$sdlabi" = "1.2"; then
5671 echo
5672 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
5673 echo "WARNING: future releases. Please switch to using SDL 2.0"
5676 if test "$supported_cpu" = "no"; then
5677 echo
5678 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5679 echo
5680 echo "CPU host architecture $cpu support is not currently maintained."
5681 echo "The QEMU project intends to remove support for this host CPU in"
5682 echo "a future release if nobody volunteers to maintain it and to"
5683 echo "provide a build host for our continuous integration setup."
5684 echo "configure has succeeded and you can continue to build, but"
5685 echo "if you care about QEMU on this platform you should contact"
5686 echo "us upstream at qemu-devel@nongnu.org."
5689 if test "$supported_os" = "no"; then
5690 echo
5691 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5692 echo
5693 echo "Host OS $targetos support is not currently maintained."
5694 echo "The QEMU project intends to remove support for this host OS in"
5695 echo "a future release if nobody volunteers to maintain it and to"
5696 echo "provide a build host for our continuous integration setup."
5697 echo "configure has succeeded and you can continue to build, but"
5698 echo "if you care about QEMU on this platform you should contact"
5699 echo "us upstream at qemu-devel@nongnu.org."
5702 config_host_mak="config-host.mak"
5704 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5706 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5707 echo >> $config_host_mak
5709 echo all: >> $config_host_mak
5710 echo "prefix=$prefix" >> $config_host_mak
5711 echo "bindir=$bindir" >> $config_host_mak
5712 echo "libdir=$libdir" >> $config_host_mak
5713 echo "libexecdir=$libexecdir" >> $config_host_mak
5714 echo "includedir=$includedir" >> $config_host_mak
5715 echo "mandir=$mandir" >> $config_host_mak
5716 echo "sysconfdir=$sysconfdir" >> $config_host_mak
5717 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5718 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5719 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
5720 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5721 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5722 if test "$mingw32" = "no" ; then
5723 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5725 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5726 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5727 echo "extra_cxxflags=$EXTRA_CXXFLAGS" >> $config_host_mak
5728 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5729 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5730 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5731 echo "GIT=$git" >> $config_host_mak
5732 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5733 echo "GIT_UPDATE=$git_update" >> $config_host_mak
5735 echo "ARCH=$ARCH" >> $config_host_mak
5737 if test "$debug_tcg" = "yes" ; then
5738 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5740 if test "$strip_opt" = "yes" ; then
5741 echo "STRIP=${strip}" >> $config_host_mak
5743 if test "$bigendian" = "yes" ; then
5744 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5746 if test "$mingw32" = "yes" ; then
5747 echo "CONFIG_WIN32=y" >> $config_host_mak
5748 rc_version=$(cat $source_path/VERSION)
5749 version_major=${rc_version%%.*}
5750 rc_version=${rc_version#*.}
5751 version_minor=${rc_version%%.*}
5752 rc_version=${rc_version#*.}
5753 version_subminor=${rc_version%%.*}
5754 version_micro=0
5755 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5756 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5757 if test "$guest_agent_with_vss" = "yes" ; then
5758 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5759 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5760 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5762 if test "$guest_agent_ntddscsi" = "yes" ; then
5763 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5765 if test "$guest_agent_msi" = "yes"; then
5766 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
5767 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5768 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5769 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5770 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5771 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5772 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5774 else
5775 echo "CONFIG_POSIX=y" >> $config_host_mak
5778 if test "$linux" = "yes" ; then
5779 echo "CONFIG_LINUX=y" >> $config_host_mak
5782 if test "$darwin" = "yes" ; then
5783 echo "CONFIG_DARWIN=y" >> $config_host_mak
5786 if test "$solaris" = "yes" ; then
5787 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5789 if test "$haiku" = "yes" ; then
5790 echo "CONFIG_HAIKU=y" >> $config_host_mak
5792 if test "$static" = "yes" ; then
5793 echo "CONFIG_STATIC=y" >> $config_host_mak
5795 if test "$profiler" = "yes" ; then
5796 echo "CONFIG_PROFILER=y" >> $config_host_mak
5798 if test "$slirp" = "yes" ; then
5799 echo "CONFIG_SLIRP=y" >> $config_host_mak
5800 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5802 if test "$vde" = "yes" ; then
5803 echo "CONFIG_VDE=y" >> $config_host_mak
5804 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5806 if test "$netmap" = "yes" ; then
5807 echo "CONFIG_NETMAP=y" >> $config_host_mak
5809 if test "$l2tpv3" = "yes" ; then
5810 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5812 if test "$cap_ng" = "yes" ; then
5813 echo "CONFIG_LIBCAP=y" >> $config_host_mak
5815 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5816 for drv in $audio_drv_list; do
5817 def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5818 echo "$def=y" >> $config_host_mak
5819 done
5820 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5821 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5822 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5823 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5824 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
5825 if test "$audio_pt_int" = "yes" ; then
5826 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5828 if test "$audio_win_int" = "yes" ; then
5829 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5831 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5832 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5833 if test "$vnc" = "yes" ; then
5834 echo "CONFIG_VNC=y" >> $config_host_mak
5836 if test "$vnc_sasl" = "yes" ; then
5837 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5839 if test "$vnc_jpeg" = "yes" ; then
5840 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5842 if test "$vnc_png" = "yes" ; then
5843 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5845 if test "$xkbcommon" = "yes" ; then
5846 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
5847 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
5849 if test "$fnmatch" = "yes" ; then
5850 echo "CONFIG_FNMATCH=y" >> $config_host_mak
5852 if test "$xfs" = "yes" ; then
5853 echo "CONFIG_XFS=y" >> $config_host_mak
5855 qemu_version=$(head $source_path/VERSION)
5856 echo "VERSION=$qemu_version" >>$config_host_mak
5857 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5858 echo "SRC_PATH=$source_path" >> $config_host_mak
5859 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5860 if [ "$docs" = "yes" ] ; then
5861 echo "BUILD_DOCS=yes" >> $config_host_mak
5863 if test "$modules" = "yes"; then
5864 # $shacmd can generate a hash started with digit, which the compiler doesn't
5865 # like as an symbol. So prefix it with an underscore
5866 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5867 echo "CONFIG_MODULES=y" >> $config_host_mak
5869 if test "$sdl" = "yes" ; then
5870 echo "CONFIG_SDL=y" >> $config_host_mak
5871 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5872 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5873 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
5875 if test "$cocoa" = "yes" ; then
5876 echo "CONFIG_COCOA=y" >> $config_host_mak
5878 if test "$curses" = "yes" ; then
5879 echo "CONFIG_CURSES=y" >> $config_host_mak
5881 if test "$pipe2" = "yes" ; then
5882 echo "CONFIG_PIPE2=y" >> $config_host_mak
5884 if test "$accept4" = "yes" ; then
5885 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5887 if test "$splice" = "yes" ; then
5888 echo "CONFIG_SPLICE=y" >> $config_host_mak
5890 if test "$eventfd" = "yes" ; then
5891 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5893 if test "$memfd" = "yes" ; then
5894 echo "CONFIG_MEMFD=y" >> $config_host_mak
5896 if test "$fallocate" = "yes" ; then
5897 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5899 if test "$fallocate_punch_hole" = "yes" ; then
5900 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5902 if test "$fallocate_zero_range" = "yes" ; then
5903 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5905 if test "$posix_fallocate" = "yes" ; then
5906 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5908 if test "$sync_file_range" = "yes" ; then
5909 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5911 if test "$fiemap" = "yes" ; then
5912 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5914 if test "$dup3" = "yes" ; then
5915 echo "CONFIG_DUP3=y" >> $config_host_mak
5917 if test "$ppoll" = "yes" ; then
5918 echo "CONFIG_PPOLL=y" >> $config_host_mak
5920 if test "$prctl_pr_set_timerslack" = "yes" ; then
5921 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5923 if test "$epoll" = "yes" ; then
5924 echo "CONFIG_EPOLL=y" >> $config_host_mak
5926 if test "$epoll_create1" = "yes" ; then
5927 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5929 if test "$sendfile" = "yes" ; then
5930 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5932 if test "$timerfd" = "yes" ; then
5933 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5935 if test "$setns" = "yes" ; then
5936 echo "CONFIG_SETNS=y" >> $config_host_mak
5938 if test "$clock_adjtime" = "yes" ; then
5939 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5941 if test "$syncfs" = "yes" ; then
5942 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5944 if test "$inotify" = "yes" ; then
5945 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5947 if test "$inotify1" = "yes" ; then
5948 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5950 if test "$sem_timedwait" = "yes" ; then
5951 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5953 if test "$byteswap_h" = "yes" ; then
5954 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5956 if test "$bswap_h" = "yes" ; then
5957 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5959 if test "$curl" = "yes" ; then
5960 echo "CONFIG_CURL=m" >> $config_host_mak
5961 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5962 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5964 if test "$brlapi" = "yes" ; then
5965 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5966 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
5968 if test "$bluez" = "yes" ; then
5969 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5970 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5972 if test "$glib_subprocess" = "yes" ; then
5973 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5975 if test "$gtk" = "yes" ; then
5976 echo "CONFIG_GTK=y" >> $config_host_mak
5977 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5978 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5979 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5980 if test "$gtk_gl" = "yes" ; then
5981 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5984 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5985 if test "$gnutls" = "yes" ; then
5986 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5988 if test "$gnutls_rnd" = "yes" ; then
5989 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5991 if test "$gcrypt" = "yes" ; then
5992 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5993 if test "$gcrypt_hmac" = "yes" ; then
5994 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5996 if test "$gcrypt_kdf" = "yes" ; then
5997 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6000 if test "$nettle" = "yes" ; then
6001 echo "CONFIG_NETTLE=y" >> $config_host_mak
6002 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6003 if test "$nettle_kdf" = "yes" ; then
6004 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6007 if test "$tasn1" = "yes" ; then
6008 echo "CONFIG_TASN1=y" >> $config_host_mak
6010 if test "$have_ifaddrs_h" = "yes" ; then
6011 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6013 if test "$have_broken_size_max" = "yes" ; then
6014 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6017 # Work around a system header bug with some kernel/XFS header
6018 # versions where they both try to define 'struct fsxattr':
6019 # xfs headers will not try to redefine structs from linux headers
6020 # if this macro is set.
6021 if test "$have_fsxattr" = "yes" ; then
6022 echo "HAVE_FSXATTR=y" >> $config_host_mak
6024 if test "$vte" = "yes" ; then
6025 echo "CONFIG_VTE=y" >> $config_host_mak
6026 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6028 if test "$virglrenderer" = "yes" ; then
6029 echo "CONFIG_VIRGL=y" >> $config_host_mak
6030 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6031 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6033 if test "$xen" = "yes" ; then
6034 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6035 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6036 if test "$xen_pv_domain_build" = "yes" ; then
6037 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6040 if test "$linux_aio" = "yes" ; then
6041 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6043 if test "$attr" = "yes" ; then
6044 echo "CONFIG_ATTR=y" >> $config_host_mak
6046 if test "$libattr" = "yes" ; then
6047 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6049 if test "$virtfs" = "yes" ; then
6050 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6052 if test "$mpath" = "yes" ; then
6053 echo "CONFIG_MPATH=y" >> $config_host_mak
6055 if test "$vhost_scsi" = "yes" ; then
6056 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6058 if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6059 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6061 if test "$vhost_vsock" = "yes" ; then
6062 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6064 if test "$vhost_user" = "yes" ; then
6065 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6067 if test "$blobs" = "yes" ; then
6068 echo "INSTALL_BLOBS=yes" >> $config_host_mak
6070 if test "$iovec" = "yes" ; then
6071 echo "CONFIG_IOVEC=y" >> $config_host_mak
6073 if test "$preadv" = "yes" ; then
6074 echo "CONFIG_PREADV=y" >> $config_host_mak
6076 if test "$fdt" = "yes" ; then
6077 echo "CONFIG_FDT=y" >> $config_host_mak
6079 if test "$signalfd" = "yes" ; then
6080 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6082 if test "$tcg" = "yes"; then
6083 echo "CONFIG_TCG=y" >> $config_host_mak
6084 if test "$tcg_interpreter" = "yes" ; then
6085 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6088 if test "$fdatasync" = "yes" ; then
6089 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6091 if test "$madvise" = "yes" ; then
6092 echo "CONFIG_MADVISE=y" >> $config_host_mak
6094 if test "$posix_madvise" = "yes" ; then
6095 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6098 if test "$spice" = "yes" ; then
6099 echo "CONFIG_SPICE=y" >> $config_host_mak
6102 if test "$smartcard" = "yes" ; then
6103 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6104 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6105 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6108 if test "$libusb" = "yes" ; then
6109 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6110 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6111 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6114 if test "$usb_redir" = "yes" ; then
6115 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6116 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6117 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6120 if test "$opengl" = "yes" ; then
6121 echo "CONFIG_OPENGL=y" >> $config_host_mak
6122 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6123 if test "$opengl_dmabuf" = "yes" ; then
6124 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6128 if test "$malloc_trim" = "yes" ; then
6129 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6132 if test "$avx2_opt" = "yes" ; then
6133 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6136 if test "$lzo" = "yes" ; then
6137 echo "CONFIG_LZO=y" >> $config_host_mak
6140 if test "$snappy" = "yes" ; then
6141 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6144 if test "$bzip2" = "yes" ; then
6145 echo "CONFIG_BZIP2=y" >> $config_host_mak
6146 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6149 if test "$libiscsi" = "yes" ; then
6150 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6151 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6152 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6155 if test "$libnfs" = "yes" ; then
6156 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6157 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6160 if test "$seccomp" = "yes"; then
6161 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6162 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6163 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6166 # XXX: suppress that
6167 if [ "$bsd" = "yes" ] ; then
6168 echo "CONFIG_BSD=y" >> $config_host_mak
6171 if test "$localtime_r" = "yes" ; then
6172 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6174 if test "$qom_cast_debug" = "yes" ; then
6175 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6177 if test "$rbd" = "yes" ; then
6178 echo "CONFIG_RBD=m" >> $config_host_mak
6179 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6180 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6183 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6184 if test "$coroutine_pool" = "yes" ; then
6185 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6186 else
6187 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6190 if test "$debug_stack_usage" = "yes" ; then
6191 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6194 if test "$crypto_afalg" = "yes" ; then
6195 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6198 if test "$open_by_handle_at" = "yes" ; then
6199 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6202 if test "$linux_magic_h" = "yes" ; then
6203 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6206 if test "$pragma_diagnostic_available" = "yes" ; then
6207 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6210 if test "$valgrind_h" = "yes" ; then
6211 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6214 if test "$has_environ" = "yes" ; then
6215 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6218 if test "$cpuid_h" = "yes" ; then
6219 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6222 if test "$int128" = "yes" ; then
6223 echo "CONFIG_INT128=y" >> $config_host_mak
6226 if test "$atomic128" = "yes" ; then
6227 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6230 if test "$atomic64" = "yes" ; then
6231 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6234 if test "$getauxval" = "yes" ; then
6235 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6238 if test "$glusterfs" = "yes" ; then
6239 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6240 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6241 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6244 if test "$glusterfs_xlator_opt" = "yes" ; then
6245 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6248 if test "$glusterfs_discard" = "yes" ; then
6249 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6252 if test "$glusterfs_fallocate" = "yes" ; then
6253 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6256 if test "$glusterfs_zerofill" = "yes" ; then
6257 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6260 if test "$libssh2" = "yes" ; then
6261 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6262 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6263 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6266 if test "$live_block_migration" = "yes" ; then
6267 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6270 if test "$tpm" = "yes"; then
6271 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6272 # TPM passthrough support?
6273 if test "$tpm_passthrough" = "yes"; then
6274 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6276 # TPM emulator support?
6277 if test "$tpm_emulator" = "yes"; then
6278 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6282 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6283 if have_backend "nop"; then
6284 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6286 if have_backend "simple"; then
6287 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6288 # Set the appropriate trace file.
6289 trace_file="\"$trace_file-\" FMT_pid"
6291 if have_backend "log"; then
6292 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6294 if have_backend "ust"; then
6295 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6297 if have_backend "dtrace"; then
6298 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6299 if test "$trace_backend_stap" = "yes" ; then
6300 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6303 if have_backend "ftrace"; then
6304 if test "$linux" = "yes" ; then
6305 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6306 else
6307 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6310 if have_backend "syslog"; then
6311 if test "$posix_syslog" = "yes" ; then
6312 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6313 else
6314 feature_not_found "syslog(trace backend)" "syslog not available"
6317 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6319 if test "$rdma" = "yes" ; then
6320 echo "CONFIG_RDMA=y" >> $config_host_mak
6321 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6324 if test "$have_rtnetlink" = "yes" ; then
6325 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6328 if test "$libxml2" = "yes" ; then
6329 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6330 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6331 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6334 if test "$replication" = "yes" ; then
6335 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6338 if test "$have_af_vsock" = "yes" ; then
6339 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6342 if test "$have_sysmacros" = "yes" ; then
6343 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6346 if test "$have_static_assert" = "yes" ; then
6347 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6350 if test "$have_utmpx" = "yes" ; then
6351 echo "HAVE_UTMPX=y" >> $config_host_mak
6354 if test "$ivshmem" = "yes" ; then
6355 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6357 if test "$capstone" != "no" ; then
6358 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6361 # Hold two types of flag:
6362 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6363 # a thread we have a handle to
6364 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6365 # platform
6366 if test "$pthread_setname_np" = "yes" ; then
6367 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6368 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6371 if test "$vxhs" = "yes" ; then
6372 echo "CONFIG_VXHS=y" >> $config_host_mak
6373 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6376 if test "$tcg_interpreter" = "yes"; then
6377 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6378 elif test "$ARCH" = "sparc64" ; then
6379 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6380 elif test "$ARCH" = "s390x" ; then
6381 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6382 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6383 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6384 elif test "$ARCH" = "ppc64" ; then
6385 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6386 else
6387 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6389 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
6391 echo "TOOLS=$tools" >> $config_host_mak
6392 echo "ROMS=$roms" >> $config_host_mak
6393 echo "MAKE=$make" >> $config_host_mak
6394 echo "INSTALL=$install" >> $config_host_mak
6395 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6396 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6397 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6398 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6399 echo "PYTHON=$python" >> $config_host_mak
6400 echo "CC=$cc" >> $config_host_mak
6401 if $iasl -h > /dev/null 2>&1; then
6402 echo "IASL=$iasl" >> $config_host_mak
6404 echo "CC_I386=$cc_i386" >> $config_host_mak
6405 echo "HOST_CC=$host_cc" >> $config_host_mak
6406 echo "CXX=$cxx" >> $config_host_mak
6407 echo "OBJCC=$objcc" >> $config_host_mak
6408 echo "AR=$ar" >> $config_host_mak
6409 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6410 echo "AS=$as" >> $config_host_mak
6411 echo "CCAS=$ccas" >> $config_host_mak
6412 echo "CPP=$cpp" >> $config_host_mak
6413 echo "OBJCOPY=$objcopy" >> $config_host_mak
6414 echo "LD=$ld" >> $config_host_mak
6415 echo "RANLIB=$ranlib" >> $config_host_mak
6416 echo "NM=$nm" >> $config_host_mak
6417 echo "WINDRES=$windres" >> $config_host_mak
6418 echo "CFLAGS=$CFLAGS" >> $config_host_mak
6419 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6420 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6421 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6422 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6423 if test "$sparse" = "yes" ; then
6424 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
6425 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
6426 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
6427 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6428 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6430 if test "$cross_prefix" != ""; then
6431 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6432 else
6433 echo "AUTOCONF_HOST := " >> $config_host_mak
6435 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6436 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6437 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6438 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6439 echo "LIBS+=$LIBS" >> $config_host_mak
6440 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6441 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6442 echo "EXESUF=$EXESUF" >> $config_host_mak
6443 echo "DSOSUF=$DSOSUF" >> $config_host_mak
6444 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6445 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6446 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6447 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6448 echo "POD2MAN=$POD2MAN" >> $config_host_mak
6449 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6450 if test "$gcov" = "yes" ; then
6451 echo "CONFIG_GCOV=y" >> $config_host_mak
6452 echo "GCOV=$gcov_tool" >> $config_host_mak
6455 # use included Linux headers
6456 if test "$linux" = "yes" ; then
6457 mkdir -p linux-headers
6458 case "$cpu" in
6459 i386|x86_64|x32)
6460 linux_arch=x86
6462 ppcemb|ppc|ppc64)
6463 linux_arch=powerpc
6465 s390x)
6466 linux_arch=s390
6468 aarch64)
6469 linux_arch=arm64
6471 mips64)
6472 linux_arch=mips
6475 # For most CPUs the kernel architecture name and QEMU CPU name match.
6476 linux_arch="$cpu"
6478 esac
6479 # For non-KVM architectures we will not have asm headers
6480 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6481 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6485 for target in $target_list; do
6486 target_dir="$target"
6487 config_target_mak=$target_dir/config-target.mak
6488 target_name=$(echo $target | cut -d '-' -f 1)
6489 target_bigendian="no"
6491 case "$target_name" in
6492 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6493 target_bigendian=yes
6495 esac
6496 target_softmmu="no"
6497 target_user_only="no"
6498 target_linux_user="no"
6499 target_bsd_user="no"
6500 case "$target" in
6501 ${target_name}-softmmu)
6502 target_softmmu="yes"
6504 ${target_name}-linux-user)
6505 target_user_only="yes"
6506 target_linux_user="yes"
6508 ${target_name}-bsd-user)
6509 target_user_only="yes"
6510 target_bsd_user="yes"
6513 error_exit "Target '$target' not recognised"
6514 exit 1
6516 esac
6518 mkdir -p $target_dir
6519 echo "# Automatically generated by configure - do not modify" > $config_target_mak
6521 bflt="no"
6522 mttcg="no"
6523 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6524 gdb_xml_files=""
6526 TARGET_ARCH="$target_name"
6527 TARGET_BASE_ARCH=""
6528 TARGET_ABI_DIR=""
6530 case "$target_name" in
6531 i386)
6532 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6534 x86_64)
6535 TARGET_BASE_ARCH=i386
6536 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6538 alpha)
6539 mttcg="yes"
6541 arm|armeb)
6542 TARGET_ARCH=arm
6543 bflt="yes"
6544 mttcg="yes"
6545 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6547 aarch64|aarch64_be)
6548 TARGET_ARCH=aarch64
6549 TARGET_BASE_ARCH=arm
6550 bflt="yes"
6551 mttcg="yes"
6552 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6554 cris)
6556 hppa)
6557 mttcg="yes"
6559 lm32)
6561 m68k)
6562 bflt="yes"
6563 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
6565 microblaze|microblazeel)
6566 TARGET_ARCH=microblaze
6567 bflt="yes"
6569 mips|mipsel)
6570 TARGET_ARCH=mips
6571 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6573 mipsn32|mipsn32el)
6574 TARGET_ARCH=mips64
6575 TARGET_BASE_ARCH=mips
6576 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6577 echo "TARGET_ABI32=y" >> $config_target_mak
6579 mips64|mips64el)
6580 TARGET_ARCH=mips64
6581 TARGET_BASE_ARCH=mips
6582 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6584 moxie)
6586 nios2)
6588 or1k)
6589 TARGET_ARCH=openrisc
6590 TARGET_BASE_ARCH=openrisc
6592 ppc)
6593 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6595 ppcemb)
6596 TARGET_BASE_ARCH=ppc
6597 TARGET_ABI_DIR=ppc
6598 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6600 ppc64)
6601 TARGET_BASE_ARCH=ppc
6602 TARGET_ABI_DIR=ppc
6603 mttcg=yes
6604 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6606 ppc64le)
6607 TARGET_ARCH=ppc64
6608 TARGET_BASE_ARCH=ppc
6609 TARGET_ABI_DIR=ppc
6610 mttcg=yes
6611 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6613 ppc64abi32)
6614 TARGET_ARCH=ppc64
6615 TARGET_BASE_ARCH=ppc
6616 TARGET_ABI_DIR=ppc
6617 echo "TARGET_ABI32=y" >> $config_target_mak
6618 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6620 sh4|sh4eb)
6621 TARGET_ARCH=sh4
6622 bflt="yes"
6624 sparc)
6626 sparc64)
6627 TARGET_BASE_ARCH=sparc
6629 sparc32plus)
6630 TARGET_ARCH=sparc64
6631 TARGET_BASE_ARCH=sparc
6632 TARGET_ABI_DIR=sparc
6633 echo "TARGET_ABI32=y" >> $config_target_mak
6635 s390x)
6636 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
6638 tilegx)
6640 tricore)
6642 unicore32)
6644 xtensa|xtensaeb)
6645 TARGET_ARCH=xtensa
6648 error_exit "Unsupported target CPU"
6650 esac
6651 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6652 if [ "$TARGET_BASE_ARCH" = "" ]; then
6653 TARGET_BASE_ARCH=$TARGET_ARCH
6656 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6658 upper() {
6659 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6662 target_arch_name="$(upper $TARGET_ARCH)"
6663 echo "TARGET_$target_arch_name=y" >> $config_target_mak
6664 echo "TARGET_NAME=$target_name" >> $config_target_mak
6665 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6666 if [ "$TARGET_ABI_DIR" = "" ]; then
6667 TARGET_ABI_DIR=$TARGET_ARCH
6669 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6670 if [ "$HOST_VARIANT_DIR" != "" ]; then
6671 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6674 if supported_xen_target $target; then
6675 echo "CONFIG_XEN=y" >> $config_target_mak
6676 if test "$xen_pci_passthrough" = yes; then
6677 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6680 if supported_kvm_target $target; then
6681 echo "CONFIG_KVM=y" >> $config_target_mak
6682 if test "$vhost_net" = "yes" ; then
6683 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6684 if test "$vhost_user" = "yes" ; then
6685 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6689 if supported_hax_target $target; then
6690 echo "CONFIG_HAX=y" >> $config_target_mak
6692 if supported_hvf_target $target; then
6693 echo "CONFIG_HVF=y" >> $config_target_mak
6695 if test "$target_bigendian" = "yes" ; then
6696 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6698 if test "$target_softmmu" = "yes" ; then
6699 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6700 if test "$mttcg" = "yes" ; then
6701 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6704 if test "$target_user_only" = "yes" ; then
6705 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6706 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6708 if test "$target_linux_user" = "yes" ; then
6709 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6711 list=""
6712 if test ! -z "$gdb_xml_files" ; then
6713 for x in $gdb_xml_files; do
6714 list="$list $source_path/gdb-xml/$x"
6715 done
6716 echo "TARGET_XML_FILES=$list" >> $config_target_mak
6719 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6720 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6722 if test "$target_bsd_user" = "yes" ; then
6723 echo "CONFIG_BSD_USER=y" >> $config_target_mak
6726 # generate QEMU_CFLAGS/LDFLAGS for targets
6728 cflags=""
6729 ldflags=""
6731 disas_config() {
6732 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6733 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6736 for i in $ARCH $TARGET_BASE_ARCH ; do
6737 case "$i" in
6738 alpha)
6739 disas_config "ALPHA"
6741 aarch64)
6742 if test -n "${cxx}"; then
6743 disas_config "ARM_A64"
6746 arm)
6747 disas_config "ARM"
6748 if test -n "${cxx}"; then
6749 disas_config "ARM_A64"
6752 cris)
6753 disas_config "CRIS"
6755 hppa)
6756 disas_config "HPPA"
6758 i386|x86_64|x32)
6759 disas_config "I386"
6761 lm32)
6762 disas_config "LM32"
6764 m68k)
6765 disas_config "M68K"
6767 microblaze*)
6768 disas_config "MICROBLAZE"
6770 mips*)
6771 disas_config "MIPS"
6773 moxie*)
6774 disas_config "MOXIE"
6776 nios2)
6777 disas_config "NIOS2"
6779 or1k)
6780 disas_config "OPENRISC"
6782 ppc*)
6783 disas_config "PPC"
6785 s390*)
6786 disas_config "S390"
6788 sh4)
6789 disas_config "SH4"
6791 sparc*)
6792 disas_config "SPARC"
6794 xtensa*)
6795 disas_config "XTENSA"
6797 esac
6798 done
6799 if test "$tcg_interpreter" = "yes" ; then
6800 disas_config "TCI"
6803 case "$ARCH" in
6804 alpha)
6805 # Ensure there's only a single GP
6806 cflags="-msmall-data $cflags"
6808 esac
6810 if test "$gprof" = "yes" ; then
6811 echo "TARGET_GPROF=yes" >> $config_target_mak
6812 if test "$target_linux_user" = "yes" ; then
6813 cflags="-p $cflags"
6814 ldflags="-p $ldflags"
6816 if test "$target_softmmu" = "yes" ; then
6817 ldflags="-p $ldflags"
6818 echo "GPROF_CFLAGS=-p" >> $config_target_mak
6822 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6823 ldflags="$ldflags $textseg_ldflags"
6826 # Newer kernels on s390 check for an S390_PGSTE program header and
6827 # enable the pgste page table extensions in that case. This makes
6828 # the vm.allocate_pgste sysctl unnecessary. We enable this program
6829 # header if
6830 # - we build on s390x
6831 # - we build the system emulation for s390x (qemu-system-s390x)
6832 # - KVM is enabled
6833 # - the linker supports --s390-pgste
6834 if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
6835 if ld_has --s390-pgste ; then
6836 ldflags="-Wl,--s390-pgste $ldflags"
6840 echo "LDFLAGS+=$ldflags" >> $config_target_mak
6841 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6843 done # for target in $targets
6845 if [ "$dtc_internal" = "yes" ]; then
6846 echo "config-host.h: subdir-dtc" >> $config_host_mak
6848 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
6849 echo "config-host.h: subdir-capstone" >> $config_host_mak
6851 if test -n "$LIBCAPSTONE"; then
6852 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
6855 if test "$numa" = "yes"; then
6856 echo "CONFIG_NUMA=y" >> $config_host_mak
6859 if test "$ccache_cpp2" = "yes"; then
6860 echo "export CCACHE_CPP2=y" >> $config_host_mak
6863 # build tree in object directory in case the source is not in the current directory
6864 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
6865 DIRS="$DIRS docs docs/interop fsdev scsi"
6866 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6867 DIRS="$DIRS roms/seabios roms/vgabios"
6868 DIRS="$DIRS qapi-generated"
6869 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6870 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6871 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6872 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6873 FILES="$FILES pc-bios/spapr-rtas/Makefile"
6874 FILES="$FILES pc-bios/s390-ccw/Makefile"
6875 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6876 FILES="$FILES pc-bios/qemu-icon.bmp"
6877 FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
6878 for bios_file in \
6879 $source_path/pc-bios/*.bin \
6880 $source_path/pc-bios/*.lid \
6881 $source_path/pc-bios/*.aml \
6882 $source_path/pc-bios/*.rom \
6883 $source_path/pc-bios/*.dtb \
6884 $source_path/pc-bios/*.img \
6885 $source_path/pc-bios/openbios-* \
6886 $source_path/pc-bios/u-boot.* \
6887 $source_path/pc-bios/palcode-*
6889 FILES="$FILES pc-bios/$(basename $bios_file)"
6890 done
6891 for test_file in $(find $source_path/tests/acpi-test-data -type f)
6893 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6894 done
6895 mkdir -p $DIRS
6896 for f in $FILES ; do
6897 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6898 symlink "$source_path/$f" "$f"
6900 done
6902 # temporary config to build submodules
6903 for rom in seabios vgabios ; do
6904 config_mak=roms/$rom/config.mak
6905 echo "# Automatically generated by configure - do not modify" > $config_mak
6906 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6907 echo "AS=$as" >> $config_mak
6908 echo "CCAS=$ccas" >> $config_mak
6909 echo "CC=$cc" >> $config_mak
6910 echo "BCC=bcc" >> $config_mak
6911 echo "CPP=$cpp" >> $config_mak
6912 echo "OBJCOPY=objcopy" >> $config_mak
6913 echo "IASL=$iasl" >> $config_mak
6914 echo "LD=$ld" >> $config_mak
6915 echo "RANLIB=$ranlib" >> $config_mak
6916 done
6918 # set up tests data directory
6919 if [ ! -e tests/data ]; then
6920 symlink "$source_path/tests/data" tests/data
6923 # set up qemu-iotests in this build directory
6924 iotests_common_env="tests/qemu-iotests/common.env"
6925 iotests_check="tests/qemu-iotests/check"
6927 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6928 echo >> "$iotests_common_env"
6929 echo "export PYTHON='$python'" >> "$iotests_common_env"
6931 if [ ! -e "$iotests_check" ]; then
6932 symlink "$source_path/$iotests_check" "$iotests_check"
6935 # Save the configure command line for later reuse.
6936 cat <<EOD >config.status
6937 #!/bin/sh
6938 # Generated by configure.
6939 # Run this file to recreate the current configuration.
6940 # Compiler output produced by configure, useful for debugging
6941 # configure, is in config.log if it exists.
6943 printf "exec" >>config.status
6944 printf " '%s'" "$0" "$@" >>config.status
6945 echo ' "$@"' >>config.status
6946 chmod +x config.status
6948 rm -r "$TMPDIR1"