qemu-iotests: fix filename containing checks
[qemu/ar7.git] / configure
blob1ee09bd11279cd1b4904672eb7e705f4ae5cde76
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 if test -n "$BASH_VERSION"; then eval '
64 echo >>config.log "
65 funcs: ${FUNCNAME[*]}
66 lines: ${BASH_LINENO[*]}"
67 '; fi
68 echo $compiler "$@" >> config.log
69 $compiler "$@" >> config.log 2>&1 || return $?
70 # Test passed. If this is an --enable-werror build, rerun
71 # the test with -Werror and bail out if it fails. This
72 # makes warning-generating-errors in configure test code
73 # obvious to developers.
74 if test "$werror" != "yes"; then
75 return 0
77 # Don't bother rerunning the compile if we were already using -Werror
78 case "$*" in
79 *-Werror*)
80 return 0
82 esac
83 echo $compiler -Werror "$@" >> config.log
84 $compiler -Werror "$@" >> config.log 2>&1 && return $?
85 error_exit "configure test passed without -Werror but failed with -Werror." \
86 "This is probably a bug in the configure script. The failing command" \
87 "will be at the bottom of config.log." \
88 "You can run configure with --disable-werror to bypass this check."
91 do_cc() {
92 do_compiler "$cc" "$@"
95 do_cxx() {
96 do_compiler "$cxx" "$@"
99 update_cxxflags() {
100 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
101 # options which some versions of GCC's C++ compiler complain about
102 # because they only make sense for C programs.
103 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
105 for arg in $QEMU_CFLAGS; do
106 case $arg in
107 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
108 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
111 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
113 esac
114 done
117 compile_object() {
118 local_cflags="$1"
119 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
122 compile_prog() {
123 local_cflags="$1"
124 local_ldflags="$2"
125 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
128 # symbolically link $1 to $2. Portable version of "ln -sf".
129 symlink() {
130 rm -rf "$2"
131 mkdir -p "$(dirname "$2")"
132 ln -s "$1" "$2"
135 # check whether a command is available to this shell (may be either an
136 # executable or a builtin)
137 has() {
138 type "$1" >/dev/null 2>&1
141 # search for an executable in PATH
142 path_of() {
143 local_command="$1"
144 local_ifs="$IFS"
145 local_dir=""
147 # pathname has a dir component?
148 if [ "${local_command#*/}" != "$local_command" ]; then
149 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
150 echo "$local_command"
151 return 0
154 if [ -z "$local_command" ]; then
155 return 1
158 IFS=:
159 for local_dir in $PATH; do
160 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
161 echo "$local_dir/$local_command"
162 IFS="${local_ifs:-$(printf ' \t\n')}"
163 return 0
165 done
166 # not found
167 IFS="${local_ifs:-$(printf ' \t\n')}"
168 return 1
171 have_backend () {
172 echo "$trace_backends" | grep "$1" >/dev/null
175 glob() {
176 eval test -z '"${1#'"$2"'}"'
179 supported_hax_target() {
180 test "$hax" = "yes" || return 1
181 glob "$1" "*-softmmu" || return 1
182 case "${1%-softmmu}" in
183 i386|x86_64)
184 return 0
186 esac
187 return 1
190 supported_kvm_target() {
191 test "$kvm" = "yes" || return 1
192 glob "$1" "*-softmmu" || return 1
193 case "${1%-softmmu}:$cpu" in
194 arm:arm | aarch64:aarch64 | \
195 i386:i386 | i386:x86_64 | i386:x32 | \
196 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
197 mips:mips | mipsel:mips | \
198 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | \
199 s390x:s390x)
200 return 0
202 esac
203 return 1
206 supported_xen_target() {
207 test "$xen" = "yes" || return 1
208 glob "$1" "*-softmmu" || return 1
209 # Only i386 and x86_64 provide the xenpv machine.
210 case "${1%-softmmu}" in
211 i386|x86_64)
212 return 0
214 esac
215 return 1
218 supported_hvf_target() {
219 test "$hvf" = "yes" || return 1
220 glob "$1" "*-softmmu" || return 1
221 case "${1%-softmmu}" in
222 x86_64)
223 return 0
225 esac
226 return 1
229 supported_whpx_target() {
230 test "$whpx" = "yes" || return 1
231 glob "$1" "*-softmmu" || return 1
232 case "${1%-softmmu}" in
233 i386|x86_64)
234 return 0
236 esac
237 return 1
240 supported_target() {
241 case "$1" in
242 *-softmmu)
244 *-linux-user)
245 if test "$linux" != "yes"; then
246 print_error "Target '$target' is only available on a Linux host"
247 return 1
250 *-bsd-user)
251 if test "$bsd" != "yes"; then
252 print_error "Target '$target' is only available on a BSD host"
253 return 1
257 print_error "Invalid target name '$target'"
258 return 1
260 esac
261 test "$tcg" = "yes" && return 0
262 supported_kvm_target "$1" && return 0
263 supported_xen_target "$1" && return 0
264 supported_hax_target "$1" && return 0
265 supported_hvf_target "$1" && return 0
266 supported_whpx_target "$1" && return 0
267 print_error "TCG disabled, but hardware accelerator not available for '$target'"
268 return 1
272 ld_has() {
273 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
276 # default parameters
277 source_path=$(dirname "$0")
278 cpu=""
279 iasl="iasl"
280 interp_prefix="/usr/gnemul/qemu-%M"
281 static="no"
282 cross_prefix=""
283 audio_drv_list=""
284 block_drv_rw_whitelist=""
285 block_drv_ro_whitelist=""
286 host_cc="cc"
287 libs_softmmu=""
288 libs_tools=""
289 audio_pt_int=""
290 audio_win_int=""
291 libs_qga=""
292 debug_info="yes"
293 stack_protector=""
295 if test -e "$source_path/.git"
296 then
297 git_update=yes
298 git_submodules="ui/keycodemapdb"
299 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
300 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
301 else
302 git_update=no
303 git_submodules=""
305 if ! test -f "$source_path/ui/keycodemapdb/README"
306 then
307 echo
308 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
309 echo
310 echo "This is not a GIT checkout but module content appears to"
311 echo "be missing. Do not use 'git archive' or GitHub download links"
312 echo "to acquire QEMU source archives. Non-GIT builds are only"
313 echo "supported with source archives linked from:"
314 echo
315 echo " https://www.qemu.org/download/"
316 echo
317 echo "Developers working with GIT can use scripts/archive-source.sh"
318 echo "if they need to create valid source archives."
319 echo
320 exit 1
323 git="git"
325 # Don't accept a target_list environment variable.
326 unset target_list
328 # Default value for a variable defining feature "foo".
329 # * foo="no" feature will only be used if --enable-foo arg is given
330 # * foo="" feature will be searched for, and if found, will be used
331 # unless --disable-foo is given
332 # * foo="yes" this value will only be set by --enable-foo flag.
333 # feature will searched for,
334 # if not found, configure exits with error
336 # Always add --enable-foo and --disable-foo command line args.
337 # Distributions want to ensure that several features are compiled in, and it
338 # is impossible without a --enable-foo that exits if a feature is not found.
340 bluez=""
341 brlapi=""
342 curl=""
343 curses=""
344 docs=""
345 fdt=""
346 netmap="no"
347 sdl=""
348 sdlabi=""
349 virtfs=""
350 mpath=""
351 vnc="yes"
352 sparse="no"
353 vde=""
354 vnc_sasl=""
355 vnc_jpeg=""
356 vnc_png=""
357 xkbcommon=""
358 xen=""
359 xen_ctrl_version=""
360 xen_pv_domain_build="no"
361 xen_pci_passthrough=""
362 linux_aio=""
363 cap_ng=""
364 attr=""
365 libattr=""
366 xfs=""
367 tcg="yes"
368 membarrier=""
369 vhost_net="no"
370 vhost_crypto="no"
371 vhost_scsi="no"
372 vhost_vsock="no"
373 vhost_user=""
374 kvm="no"
375 hax="no"
376 hvf="no"
377 whpx="no"
378 rdma=""
379 pvrdma=""
380 gprof="no"
381 debug_tcg="no"
382 debug="no"
383 sanitizers="no"
384 fortify_source=""
385 strip_opt="yes"
386 tcg_interpreter="no"
387 bigendian="no"
388 mingw32="no"
389 gcov="no"
390 gcov_tool="gcov"
391 EXESUF=""
392 DSOSUF=".so"
393 LDFLAGS_SHARED="-shared"
394 modules="no"
395 prefix="/usr/local"
396 mandir="\${prefix}/share/man"
397 datadir="\${prefix}/share"
398 firmwarepath="\${prefix}/share/qemu-firmware"
399 qemu_docdir="\${prefix}/share/doc/qemu"
400 bindir="\${prefix}/bin"
401 libdir="\${prefix}/lib"
402 libexecdir="\${prefix}/libexec"
403 includedir="\${prefix}/include"
404 sysconfdir="\${prefix}/etc"
405 local_statedir="\${prefix}/var"
406 confsuffix="/qemu"
407 slirp="yes"
408 oss_lib=""
409 bsd="no"
410 linux="no"
411 solaris="no"
412 profiler="no"
413 cocoa="no"
414 softmmu="yes"
415 linux_user="no"
416 bsd_user="no"
417 blobs="yes"
418 pkgversion=""
419 pie=""
420 qom_cast_debug="yes"
421 trace_backends="log"
422 trace_file="trace"
423 spice=""
424 rbd=""
425 smartcard=""
426 libusb=""
427 usb_redir=""
428 opengl=""
429 opengl_dmabuf="no"
430 cpuid_h="no"
431 avx2_opt=""
432 zlib="yes"
433 capstone=""
434 lzo=""
435 snappy=""
436 bzip2=""
437 guest_agent=""
438 guest_agent_with_vss="no"
439 guest_agent_ntddscsi="no"
440 guest_agent_msi=""
441 vss_win32_sdk=""
442 win_sdk="no"
443 want_tools="yes"
444 libiscsi=""
445 libnfs=""
446 coroutine=""
447 coroutine_pool=""
448 debug_stack_usage="no"
449 crypto_afalg="no"
450 seccomp=""
451 glusterfs=""
452 glusterfs_xlator_opt="no"
453 glusterfs_discard="no"
454 glusterfs_fallocate="no"
455 glusterfs_zerofill="no"
456 gtk=""
457 gtk_gl="no"
458 tls_priority="NORMAL"
459 gnutls=""
460 nettle=""
461 gcrypt=""
462 gcrypt_hmac="no"
463 vte=""
464 virglrenderer=""
465 tpm="yes"
466 libssh2=""
467 live_block_migration="yes"
468 numa=""
469 tcmalloc="no"
470 jemalloc="no"
471 replication="yes"
472 vxhs=""
473 libxml2=""
474 docker="no"
475 debug_mutex="no"
476 libpmem=""
478 # cross compilers defaults, can be overridden with --cross-cc-ARCH
479 cross_cc_aarch64="aarch64-linux-gnu-gcc"
480 cross_cc_aarch64_be="$cross_cc_aarch64"
481 cross_cc_cflags_aarch64_be="-mbig-endian"
482 cross_cc_arm="arm-linux-gnueabihf-gcc"
483 cross_cc_cflags_armeb="-mbig-endian"
484 cross_cc_i386="i386-pc-linux-gnu-gcc"
485 cross_cc_cflags_i386=""
486 cross_cc_powerpc="powerpc-linux-gnu-gcc"
487 cross_cc_powerpc="powerpc-linux-gnu-gcc"
489 enabled_cross_compilers=""
491 supported_cpu="no"
492 supported_os="no"
493 bogus_os="no"
494 malloc_trim=""
496 # parse CC options first
497 for opt do
498 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
499 case "$opt" in
500 --cross-prefix=*) cross_prefix="$optarg"
502 --cc=*) CC="$optarg"
504 --cxx=*) CXX="$optarg"
506 --source-path=*) source_path="$optarg"
508 --cpu=*) cpu="$optarg"
510 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
512 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
514 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
515 EXTRA_LDFLAGS="$optarg"
517 --enable-debug-info) debug_info="yes"
519 --disable-debug-info) debug_info="no"
521 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
523 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
524 eval "cross_cc_cflags_${cc_arch}=\$optarg"
526 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
527 eval "cross_cc_${cc_arch}=\$optarg"
529 esac
530 done
531 # OS specific
532 # Using uname is really, really broken. Once we have the right set of checks
533 # we can eliminate its usage altogether.
535 # Preferred compiler:
536 # ${CC} (if set)
537 # ${cross_prefix}gcc (if cross-prefix specified)
538 # system compiler
539 if test -z "${CC}${cross_prefix}"; then
540 cc="$host_cc"
541 else
542 cc="${CC-${cross_prefix}gcc}"
545 if test -z "${CXX}${cross_prefix}"; then
546 cxx="c++"
547 else
548 cxx="${CXX-${cross_prefix}g++}"
551 ar="${AR-${cross_prefix}ar}"
552 as="${AS-${cross_prefix}as}"
553 ccas="${CCAS-$cc}"
554 cpp="${CPP-$cc -E}"
555 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
556 ld="${LD-${cross_prefix}ld}"
557 ranlib="${RANLIB-${cross_prefix}ranlib}"
558 nm="${NM-${cross_prefix}nm}"
559 strip="${STRIP-${cross_prefix}strip}"
560 windres="${WINDRES-${cross_prefix}windres}"
561 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
562 query_pkg_config() {
563 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
565 pkg_config=query_pkg_config
566 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
567 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
569 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
570 ARFLAGS="${ARFLAGS-rv}"
572 # default flags for all hosts
573 # We use -fwrapv to tell the compiler that we require a C dialect where
574 # left shift of signed integers is well defined and has the expected
575 # 2s-complement style results. (Both clang and gcc agree that it
576 # provides these semantics.)
577 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
578 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
579 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
580 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
581 QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
582 if test "$debug_info" = "yes"; then
583 CFLAGS="-g $CFLAGS"
584 LDFLAGS="-g $LDFLAGS"
587 # make source path absolute
588 source_path=$(cd "$source_path"; pwd)
590 # running configure in the source tree?
591 # we know that's the case if configure is there.
592 if test -f "./configure"; then
593 pwd_is_source_path="y"
594 else
595 pwd_is_source_path="n"
598 check_define() {
599 cat > $TMPC <<EOF
600 #if !defined($1)
601 #error $1 not defined
602 #endif
603 int main(void) { return 0; }
605 compile_object
608 check_include() {
609 cat > $TMPC <<EOF
610 #include <$1>
611 int main(void) { return 0; }
613 compile_object
616 write_c_skeleton() {
617 cat > $TMPC <<EOF
618 int main(void) { return 0; }
622 if check_define __linux__ ; then
623 targetos="Linux"
624 elif check_define _WIN32 ; then
625 targetos='MINGW32'
626 elif check_define __OpenBSD__ ; then
627 targetos='OpenBSD'
628 elif check_define __sun__ ; then
629 targetos='SunOS'
630 elif check_define __HAIKU__ ; then
631 targetos='Haiku'
632 elif check_define __FreeBSD__ ; then
633 targetos='FreeBSD'
634 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
635 targetos='GNU/kFreeBSD'
636 elif check_define __DragonFly__ ; then
637 targetos='DragonFly'
638 elif check_define __NetBSD__; then
639 targetos='NetBSD'
640 elif check_define __APPLE__; then
641 targetos='Darwin'
642 else
643 # This is a fatal error, but don't report it yet, because we
644 # might be going to just print the --help text, or it might
645 # be the result of a missing compiler.
646 targetos='bogus'
647 bogus_os='yes'
650 # Some host OSes need non-standard checks for which CPU to use.
651 # Note that these checks are broken for cross-compilation: if you're
652 # cross-compiling to one of these OSes then you'll need to specify
653 # the correct CPU with the --cpu option.
654 case $targetos in
655 Darwin)
656 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
657 # run 64-bit userspace code.
658 # If the user didn't specify a CPU explicitly and the kernel says this is
659 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
660 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
661 cpu="x86_64"
664 SunOS)
665 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
666 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
667 cpu="x86_64"
669 esac
671 if test ! -z "$cpu" ; then
672 # command line argument
674 elif check_define __i386__ ; then
675 cpu="i386"
676 elif check_define __x86_64__ ; then
677 if check_define __ILP32__ ; then
678 cpu="x32"
679 else
680 cpu="x86_64"
682 elif check_define __sparc__ ; then
683 if check_define __arch64__ ; then
684 cpu="sparc64"
685 else
686 cpu="sparc"
688 elif check_define _ARCH_PPC ; then
689 if check_define _ARCH_PPC64 ; then
690 cpu="ppc64"
691 else
692 cpu="ppc"
694 elif check_define __mips__ ; then
695 cpu="mips"
696 elif check_define __s390__ ; then
697 if check_define __s390x__ ; then
698 cpu="s390x"
699 else
700 cpu="s390"
702 elif check_define __arm__ ; then
703 cpu="arm"
704 elif check_define __aarch64__ ; then
705 cpu="aarch64"
706 else
707 cpu=$(uname -m)
710 ARCH=
711 # Normalise host CPU name and set ARCH.
712 # Note that this case should only have supported host CPUs, not guests.
713 case "$cpu" in
714 ppc|ppc64|s390|s390x|sparc64|x32)
715 cpu="$cpu"
716 supported_cpu="yes"
717 eval "cross_cc_${cpu}=\$host_cc"
719 i386|i486|i586|i686|i86pc|BePC)
720 cpu="i386"
721 supported_cpu="yes"
722 cross_cc_i386=$host_cc
724 x86_64|amd64)
725 cpu="x86_64"
726 supported_cpu="yes"
727 cross_cc_x86_64=$host_cc
729 armv*b|armv*l|arm)
730 cpu="arm"
731 supported_cpu="yes"
732 cross_cc_arm=$host_cc
734 aarch64)
735 cpu="aarch64"
736 supported_cpu="yes"
737 cross_cc_aarch64=$host_cc
739 mips*)
740 cpu="mips"
741 supported_cpu="yes"
742 cross_cc_mips=$host_cc
744 sparc|sun4[cdmuv])
745 cpu="sparc"
746 supported_cpu="yes"
747 cross_cc_sparc=$host_cc
750 # This will result in either an error or falling back to TCI later
751 ARCH=unknown
753 esac
754 if test -z "$ARCH"; then
755 ARCH="$cpu"
758 # OS specific
760 # host *BSD for user mode
761 HOST_VARIANT_DIR=""
763 case $targetos in
764 MINGW32*)
765 mingw32="yes"
766 hax="yes"
767 audio_possible_drivers="dsound sdl"
768 if check_include dsound.h; then
769 audio_drv_list="dsound"
770 else
771 audio_drv_list=""
773 supported_os="yes"
775 GNU/kFreeBSD)
776 bsd="yes"
777 audio_drv_list="oss"
778 audio_possible_drivers="oss sdl pa"
780 FreeBSD)
781 bsd="yes"
782 make="${MAKE-gmake}"
783 audio_drv_list="oss"
784 audio_possible_drivers="oss sdl pa"
785 # needed for kinfo_getvmmap(3) in libutil.h
786 LIBS="-lutil $LIBS"
787 # needed for kinfo_getproc
788 libs_qga="-lutil $libs_qga"
789 netmap="" # enable netmap autodetect
790 HOST_VARIANT_DIR="freebsd"
791 supported_os="yes"
793 DragonFly)
794 bsd="yes"
795 make="${MAKE-gmake}"
796 audio_drv_list="oss"
797 audio_possible_drivers="oss sdl pa"
798 HOST_VARIANT_DIR="dragonfly"
800 NetBSD)
801 bsd="yes"
802 make="${MAKE-gmake}"
803 audio_drv_list="oss"
804 audio_possible_drivers="oss sdl"
805 oss_lib="-lossaudio"
806 HOST_VARIANT_DIR="netbsd"
807 supported_os="yes"
809 OpenBSD)
810 bsd="yes"
811 make="${MAKE-gmake}"
812 audio_drv_list="sdl"
813 audio_possible_drivers="sdl"
814 HOST_VARIANT_DIR="openbsd"
815 supported_os="yes"
817 Darwin)
818 bsd="yes"
819 darwin="yes"
820 hax="yes"
821 hvf="yes"
822 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
823 if [ "$cpu" = "x86_64" ] ; then
824 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
825 LDFLAGS="-arch x86_64 $LDFLAGS"
827 cocoa="yes"
828 audio_drv_list="coreaudio"
829 audio_possible_drivers="coreaudio sdl"
830 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
831 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
832 # Disable attempts to use ObjectiveC features in os/object.h since they
833 # won't work when we're compiling with gcc as a C compiler.
834 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
835 HOST_VARIANT_DIR="darwin"
836 supported_os="yes"
838 SunOS)
839 solaris="yes"
840 make="${MAKE-gmake}"
841 install="${INSTALL-ginstall}"
842 smbd="${SMBD-/usr/sfw/sbin/smbd}"
843 if test -f /usr/include/sys/soundcard.h ; then
844 audio_drv_list="oss"
846 audio_possible_drivers="oss sdl"
847 # needed for CMSG_ macros in sys/socket.h
848 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
849 # needed for TIOCWIN* defines in termios.h
850 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
851 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
852 solarisnetlibs="-lsocket -lnsl -lresolv"
853 LIBS="$solarisnetlibs $LIBS"
854 libs_qga="$solarisnetlibs $libs_qga"
856 Haiku)
857 haiku="yes"
858 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
859 LIBS="-lposix_error_mapper -lnetwork $LIBS"
861 Linux)
862 audio_drv_list="oss"
863 audio_possible_drivers="oss alsa sdl pa"
864 linux="yes"
865 linux_user="yes"
866 kvm="yes"
867 vhost_net="yes"
868 vhost_crypto="yes"
869 vhost_scsi="yes"
870 vhost_vsock="yes"
871 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
872 supported_os="yes"
874 esac
876 if [ "$bsd" = "yes" ] ; then
877 if [ "$darwin" != "yes" ] ; then
878 bsd_user="yes"
882 : ${make=${MAKE-make}}
883 : ${install=${INSTALL-install}}
884 : ${python=${PYTHON-python}}
885 : ${smbd=${SMBD-/usr/sbin/smbd}}
887 # Default objcc to clang if available, otherwise use CC
888 if has clang; then
889 objcc=clang
890 else
891 objcc="$cc"
894 if test "$mingw32" = "yes" ; then
895 EXESUF=".exe"
896 DSOSUF=".dll"
897 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
898 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
899 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
900 # MinGW needs -mthreads for TLS and macro _MT.
901 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
902 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
903 write_c_skeleton;
904 if compile_prog "" "-liberty" ; then
905 LIBS="-liberty $LIBS"
907 prefix="c:/Program Files/QEMU"
908 mandir="\${prefix}"
909 datadir="\${prefix}"
910 qemu_docdir="\${prefix}"
911 bindir="\${prefix}"
912 sysconfdir="\${prefix}"
913 local_statedir=
914 confsuffix=""
915 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
918 werror=""
920 for opt do
921 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
922 case "$opt" in
923 --help|-h) show_help=yes
925 --version|-V) exec cat $source_path/VERSION
927 --prefix=*) prefix="$optarg"
929 --interp-prefix=*) interp_prefix="$optarg"
931 --source-path=*)
933 --cross-prefix=*)
935 --cc=*)
937 --host-cc=*) host_cc="$optarg"
939 --cxx=*)
941 --iasl=*) iasl="$optarg"
943 --objcc=*) objcc="$optarg"
945 --make=*) make="$optarg"
947 --install=*) install="$optarg"
949 --python=*) python="$optarg"
951 --gcov=*) gcov_tool="$optarg"
953 --smbd=*) smbd="$optarg"
955 --extra-cflags=*)
957 --extra-cxxflags=*)
959 --extra-ldflags=*)
961 --enable-debug-info)
963 --disable-debug-info)
965 --cross-cc-*)
967 --enable-modules)
968 modules="yes"
970 --disable-modules)
971 modules="no"
973 --cpu=*)
975 --target-list=*) target_list="$optarg"
977 --enable-trace-backends=*) trace_backends="$optarg"
979 # XXX: backwards compatibility
980 --enable-trace-backend=*) trace_backends="$optarg"
982 --with-trace-file=*) trace_file="$optarg"
984 --enable-gprof) gprof="yes"
986 --enable-gcov) gcov="yes"
988 --static)
989 static="yes"
990 LDFLAGS="-static $LDFLAGS"
991 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
993 --mandir=*) mandir="$optarg"
995 --bindir=*) bindir="$optarg"
997 --libdir=*) libdir="$optarg"
999 --libexecdir=*) libexecdir="$optarg"
1001 --includedir=*) includedir="$optarg"
1003 --datadir=*) datadir="$optarg"
1005 --with-confsuffix=*) confsuffix="$optarg"
1007 --docdir=*) qemu_docdir="$optarg"
1009 --sysconfdir=*) sysconfdir="$optarg"
1011 --localstatedir=*) local_statedir="$optarg"
1013 --firmwarepath=*) firmwarepath="$optarg"
1015 --host=*|--build=*|\
1016 --disable-dependency-tracking|\
1017 --sbindir=*|--sharedstatedir=*|\
1018 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1019 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1020 # These switches are silently ignored, for compatibility with
1021 # autoconf-generated configure scripts. This allows QEMU's
1022 # configure to be used by RPM and similar macros that set
1023 # lots of directory switches by default.
1025 --disable-sdl) sdl="no"
1027 --enable-sdl) sdl="yes"
1029 --with-sdlabi=*) sdlabi="$optarg"
1031 --disable-qom-cast-debug) qom_cast_debug="no"
1033 --enable-qom-cast-debug) qom_cast_debug="yes"
1035 --disable-virtfs) virtfs="no"
1037 --enable-virtfs) virtfs="yes"
1039 --disable-mpath) mpath="no"
1041 --enable-mpath) mpath="yes"
1043 --disable-vnc) vnc="no"
1045 --enable-vnc) vnc="yes"
1047 --oss-lib=*) oss_lib="$optarg"
1049 --audio-drv-list=*) audio_drv_list="$optarg"
1051 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1053 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1055 --enable-debug-tcg) debug_tcg="yes"
1057 --disable-debug-tcg) debug_tcg="no"
1059 --enable-debug)
1060 # Enable debugging options that aren't excessively noisy
1061 debug_tcg="yes"
1062 debug_mutex="yes"
1063 debug="yes"
1064 strip_opt="no"
1065 fortify_source="no"
1067 --enable-sanitizers) sanitizers="yes"
1069 --disable-sanitizers) sanitizers="no"
1071 --enable-sparse) sparse="yes"
1073 --disable-sparse) sparse="no"
1075 --disable-strip) strip_opt="no"
1077 --disable-vnc-sasl) vnc_sasl="no"
1079 --enable-vnc-sasl) vnc_sasl="yes"
1081 --disable-vnc-jpeg) vnc_jpeg="no"
1083 --enable-vnc-jpeg) vnc_jpeg="yes"
1085 --disable-vnc-png) vnc_png="no"
1087 --enable-vnc-png) vnc_png="yes"
1089 --disable-slirp) slirp="no"
1091 --disable-vde) vde="no"
1093 --enable-vde) vde="yes"
1095 --disable-netmap) netmap="no"
1097 --enable-netmap) netmap="yes"
1099 --disable-xen) xen="no"
1101 --enable-xen) xen="yes"
1103 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1105 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1107 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
1109 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
1111 --disable-brlapi) brlapi="no"
1113 --enable-brlapi) brlapi="yes"
1115 --disable-bluez) bluez="no"
1117 --enable-bluez) bluez="yes"
1119 --disable-kvm) kvm="no"
1121 --enable-kvm) kvm="yes"
1123 --disable-hax) hax="no"
1125 --enable-hax) hax="yes"
1127 --disable-hvf) hvf="no"
1129 --enable-hvf) hvf="yes"
1131 --disable-whpx) whpx="no"
1133 --enable-whpx) whpx="yes"
1135 --disable-tcg-interpreter) tcg_interpreter="no"
1137 --enable-tcg-interpreter) tcg_interpreter="yes"
1139 --disable-cap-ng) cap_ng="no"
1141 --enable-cap-ng) cap_ng="yes"
1143 --disable-tcg) tcg="no"
1145 --enable-tcg) tcg="yes"
1147 --disable-malloc-trim) malloc_trim="no"
1149 --enable-malloc-trim) malloc_trim="yes"
1151 --disable-spice) spice="no"
1153 --enable-spice) spice="yes"
1155 --disable-libiscsi) libiscsi="no"
1157 --enable-libiscsi) libiscsi="yes"
1159 --disable-libnfs) libnfs="no"
1161 --enable-libnfs) libnfs="yes"
1163 --enable-profiler) profiler="yes"
1165 --disable-cocoa) cocoa="no"
1167 --enable-cocoa)
1168 cocoa="yes" ;
1169 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1171 --disable-system) softmmu="no"
1173 --enable-system) softmmu="yes"
1175 --disable-user)
1176 linux_user="no" ;
1177 bsd_user="no" ;
1179 --enable-user) ;;
1180 --disable-linux-user) linux_user="no"
1182 --enable-linux-user) linux_user="yes"
1184 --disable-bsd-user) bsd_user="no"
1186 --enable-bsd-user) bsd_user="yes"
1188 --enable-pie) pie="yes"
1190 --disable-pie) pie="no"
1192 --enable-werror) werror="yes"
1194 --disable-werror) werror="no"
1196 --enable-stack-protector) stack_protector="yes"
1198 --disable-stack-protector) stack_protector="no"
1200 --disable-curses) curses="no"
1202 --enable-curses) curses="yes"
1204 --disable-curl) curl="no"
1206 --enable-curl) curl="yes"
1208 --disable-fdt) fdt="no"
1210 --enable-fdt) fdt="yes"
1212 --disable-linux-aio) linux_aio="no"
1214 --enable-linux-aio) linux_aio="yes"
1216 --disable-attr) attr="no"
1218 --enable-attr) attr="yes"
1220 --disable-membarrier) membarrier="no"
1222 --enable-membarrier) membarrier="yes"
1224 --disable-blobs) blobs="no"
1226 --with-pkgversion=*) pkgversion="$optarg"
1228 --with-coroutine=*) coroutine="$optarg"
1230 --disable-coroutine-pool) coroutine_pool="no"
1232 --enable-coroutine-pool) coroutine_pool="yes"
1234 --enable-debug-stack-usage) debug_stack_usage="yes"
1236 --enable-crypto-afalg) crypto_afalg="yes"
1238 --disable-crypto-afalg) crypto_afalg="no"
1240 --disable-docs) docs="no"
1242 --enable-docs) docs="yes"
1244 --disable-vhost-net) vhost_net="no"
1246 --enable-vhost-net) vhost_net="yes"
1248 --disable-vhost-crypto) vhost_crypto="no"
1250 --enable-vhost-crypto)
1251 vhost_crypto="yes"
1252 if test "$mingw32" = "yes"; then
1253 error_exit "vhost-crypto isn't available on win32"
1256 --disable-vhost-scsi) vhost_scsi="no"
1258 --enable-vhost-scsi) vhost_scsi="yes"
1260 --disable-vhost-vsock) vhost_vsock="no"
1262 --enable-vhost-vsock) vhost_vsock="yes"
1264 --disable-opengl) opengl="no"
1266 --enable-opengl) opengl="yes"
1268 --disable-rbd) rbd="no"
1270 --enable-rbd) rbd="yes"
1272 --disable-xfsctl) xfs="no"
1274 --enable-xfsctl) xfs="yes"
1276 --disable-smartcard) smartcard="no"
1278 --enable-smartcard) smartcard="yes"
1280 --disable-libusb) libusb="no"
1282 --enable-libusb) libusb="yes"
1284 --disable-usb-redir) usb_redir="no"
1286 --enable-usb-redir) usb_redir="yes"
1288 --disable-zlib-test) zlib="no"
1290 --disable-lzo) lzo="no"
1292 --enable-lzo) lzo="yes"
1294 --disable-snappy) snappy="no"
1296 --enable-snappy) snappy="yes"
1298 --disable-bzip2) bzip2="no"
1300 --enable-bzip2) bzip2="yes"
1302 --enable-guest-agent) guest_agent="yes"
1304 --disable-guest-agent) guest_agent="no"
1306 --enable-guest-agent-msi) guest_agent_msi="yes"
1308 --disable-guest-agent-msi) guest_agent_msi="no"
1310 --with-vss-sdk) vss_win32_sdk=""
1312 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1314 --without-vss-sdk) vss_win32_sdk="no"
1316 --with-win-sdk) win_sdk=""
1318 --with-win-sdk=*) win_sdk="$optarg"
1320 --without-win-sdk) win_sdk="no"
1322 --enable-tools) want_tools="yes"
1324 --disable-tools) want_tools="no"
1326 --enable-seccomp) seccomp="yes"
1328 --disable-seccomp) seccomp="no"
1330 --disable-glusterfs) glusterfs="no"
1332 --disable-avx2) avx2_opt="no"
1334 --enable-avx2) avx2_opt="yes"
1336 --enable-glusterfs) glusterfs="yes"
1338 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1339 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1341 --enable-vhdx|--disable-vhdx)
1342 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1344 --enable-uuid|--disable-uuid)
1345 echo "$0: $opt is obsolete, UUID support is always built" >&2
1347 --disable-gtk) gtk="no"
1349 --enable-gtk) gtk="yes"
1351 --tls-priority=*) tls_priority="$optarg"
1353 --disable-gnutls) gnutls="no"
1355 --enable-gnutls) gnutls="yes"
1357 --disable-nettle) nettle="no"
1359 --enable-nettle) nettle="yes"
1361 --disable-gcrypt) gcrypt="no"
1363 --enable-gcrypt) gcrypt="yes"
1365 --enable-rdma) rdma="yes"
1367 --disable-rdma) rdma="no"
1369 --enable-pvrdma) pvrdma="yes"
1371 --disable-pvrdma) pvrdma="no"
1373 --disable-vte) vte="no"
1375 --enable-vte) vte="yes"
1377 --disable-virglrenderer) virglrenderer="no"
1379 --enable-virglrenderer) virglrenderer="yes"
1381 --disable-tpm) tpm="no"
1383 --enable-tpm) tpm="yes"
1385 --disable-libssh2) libssh2="no"
1387 --enable-libssh2) libssh2="yes"
1389 --disable-live-block-migration) live_block_migration="no"
1391 --enable-live-block-migration) live_block_migration="yes"
1393 --disable-numa) numa="no"
1395 --enable-numa) numa="yes"
1397 --disable-libxml2) libxml2="no"
1399 --enable-libxml2) libxml2="yes"
1401 --disable-tcmalloc) tcmalloc="no"
1403 --enable-tcmalloc) tcmalloc="yes"
1405 --disable-jemalloc) jemalloc="no"
1407 --enable-jemalloc) jemalloc="yes"
1409 --disable-replication) replication="no"
1411 --enable-replication) replication="yes"
1413 --disable-vxhs) vxhs="no"
1415 --enable-vxhs) vxhs="yes"
1417 --disable-vhost-user) vhost_user="no"
1419 --enable-vhost-user)
1420 vhost_user="yes"
1421 if test "$mingw32" = "yes"; then
1422 error_exit "vhost-user isn't available on win32"
1425 --disable-capstone) capstone="no"
1427 --enable-capstone) capstone="yes"
1429 --enable-capstone=git) capstone="git"
1431 --enable-capstone=system) capstone="system"
1433 --with-git=*) git="$optarg"
1435 --enable-git-update) git_update=yes
1437 --disable-git-update) git_update=no
1439 --enable-debug-mutex) debug_mutex=yes
1441 --disable-debug-mutex) debug_mutex=no
1443 --enable-libpmem) libpmem=yes
1445 --disable-libpmem) libpmem=no
1448 echo "ERROR: unknown option $opt"
1449 echo "Try '$0 --help' for more information"
1450 exit 1
1452 esac
1453 done
1455 if test "$vhost_user" = ""; then
1456 if test "$mingw32" = "yes"; then
1457 vhost_user="no"
1458 else
1459 vhost_user="yes"
1463 case "$cpu" in
1464 ppc)
1465 CPU_CFLAGS="-m32"
1466 LDFLAGS="-m32 $LDFLAGS"
1467 cross_cc_powerpc=$cc
1468 cross_cc_cflags_powerpc=$CPU_CFLAGS
1470 ppc64)
1471 CPU_CFLAGS="-m64"
1472 LDFLAGS="-m64 $LDFLAGS"
1473 cross_cc_ppc64=$cc
1474 cross_cc_cflags_ppc64=$CPU_CFLAGS
1476 sparc)
1477 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1478 LDFLAGS="-m32 -mv8plus $LDFLAGS"
1479 cross_cc_sparc=$cc
1480 cross_cc_cflags_sparc=$CPU_CFLAGS
1482 sparc64)
1483 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1484 LDFLAGS="-m64 $LDFLAGS"
1485 cross_cc_sparc64=$cc
1486 cross_cc_cflags_sparc64=$CPU_CFLAGS
1488 s390)
1489 CPU_CFLAGS="-m31"
1490 LDFLAGS="-m31 $LDFLAGS"
1491 cross_cc_s390=$cc
1492 cross_cc_cflags_s390=$CPU_CFLAGS
1494 s390x)
1495 CPU_CFLAGS="-m64"
1496 LDFLAGS="-m64 $LDFLAGS"
1497 cross_cc_s390x=$cc
1498 cross_cc_cflags_s390x=$CPU_CFLAGS
1500 i386)
1501 CPU_CFLAGS="-m32"
1502 LDFLAGS="-m32 $LDFLAGS"
1503 cross_cc_i386=$cc
1504 cross_cc_cflags_i386=$CPU_CFLAGS
1506 x86_64)
1507 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1508 # If we truly care, we should simply detect this case at
1509 # runtime and generate the fallback to serial emulation.
1510 CPU_CFLAGS="-m64 -mcx16"
1511 LDFLAGS="-m64 $LDFLAGS"
1512 cross_cc_x86_64=$cc
1513 cross_cc_cflags_x86_64=$CPU_CFLAGS
1515 x32)
1516 CPU_CFLAGS="-mx32"
1517 LDFLAGS="-mx32 $LDFLAGS"
1518 cross_cc_i386=$cc
1519 cross_cc_cflags_i386=$CPU_CFLAGS
1521 # No special flags required for other host CPUs
1522 esac
1524 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1526 # For user-mode emulation the host arch has to be one we explicitly
1527 # support, even if we're using TCI.
1528 if [ "$ARCH" = "unknown" ]; then
1529 bsd_user="no"
1530 linux_user="no"
1533 default_target_list=""
1535 mak_wilds=""
1537 if [ "$softmmu" = "yes" ]; then
1538 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1540 if [ "$linux_user" = "yes" ]; then
1541 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1543 if [ "$bsd_user" = "yes" ]; then
1544 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1547 for config in $mak_wilds; do
1548 default_target_list="${default_target_list} $(basename "$config" .mak)"
1549 done
1551 # Enumerate public trace backends for --help output
1552 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1554 if test x"$show_help" = x"yes" ; then
1555 cat << EOF
1557 Usage: configure [options]
1558 Options: [defaults in brackets after descriptions]
1560 Standard options:
1561 --help print this message
1562 --prefix=PREFIX install in PREFIX [$prefix]
1563 --interp-prefix=PREFIX where to find shared libraries, etc.
1564 use %M for cpu name [$interp_prefix]
1565 --target-list=LIST set target list (default: build everything)
1566 $(echo Available targets: $default_target_list | \
1567 fold -s -w 53 | sed -e 's/^/ /')
1569 Advanced options (experts only):
1570 --source-path=PATH path of source code [$source_path]
1571 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1572 --cc=CC use C compiler CC [$cc]
1573 --iasl=IASL use ACPI compiler IASL [$iasl]
1574 --host-cc=CC use C compiler CC [$host_cc] for code run at
1575 build time
1576 --cxx=CXX use C++ compiler CXX [$cxx]
1577 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1578 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1579 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1580 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1581 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1582 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1583 --make=MAKE use specified make [$make]
1584 --install=INSTALL use specified install [$install]
1585 --python=PYTHON use specified python [$python]
1586 --smbd=SMBD use specified smbd [$smbd]
1587 --with-git=GIT use specified git [$git]
1588 --static enable static build [$static]
1589 --mandir=PATH install man pages in PATH
1590 --datadir=PATH install firmware in PATH$confsuffix
1591 --docdir=PATH install documentation in PATH$confsuffix
1592 --bindir=PATH install binaries in PATH
1593 --libdir=PATH install libraries in PATH
1594 --libexecdir=PATH install helper binaries in PATH
1595 --sysconfdir=PATH install config in PATH$confsuffix
1596 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1597 --firmwarepath=PATH search PATH for firmware files
1598 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1599 --with-pkgversion=VERS use specified string as sub-version of the package
1600 --enable-debug enable common debug build options
1601 --enable-sanitizers enable default sanitizers
1602 --disable-strip disable stripping binaries
1603 --disable-werror disable compilation abort on warning
1604 --disable-stack-protector disable compiler-provided stack protection
1605 --audio-drv-list=LIST set audio drivers list:
1606 Available drivers: $audio_possible_drivers
1607 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1608 --block-drv-rw-whitelist=L
1609 set block driver read-write whitelist
1610 (affects only QEMU, not qemu-img)
1611 --block-drv-ro-whitelist=L
1612 set block driver read-only whitelist
1613 (affects only QEMU, not qemu-img)
1614 --enable-trace-backends=B Set trace backend
1615 Available backends: $trace_backend_list
1616 --with-trace-file=NAME Full PATH,NAME of file to store traces
1617 Default:trace-<pid>
1618 --disable-slirp disable SLIRP userspace network connectivity
1619 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1620 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1621 --oss-lib path to OSS library
1622 --cpu=CPU Build for host CPU [$cpu]
1623 --with-coroutine=BACKEND coroutine backend. Supported options:
1624 ucontext, sigaltstack, windows
1625 --enable-gcov enable test coverage analysis with gcov
1626 --gcov=GCOV use specified gcov [$gcov_tool]
1627 --disable-blobs disable installing provided firmware blobs
1628 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1629 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1630 --tls-priority default TLS protocol/cipher priority string
1631 --enable-gprof QEMU profiling with gprof
1632 --enable-profiler profiler support
1633 --enable-xen-pv-domain-build
1634 xen pv domain builder
1635 --enable-debug-stack-usage
1636 track the maximum stack usage of stacks created by qemu_alloc_stack
1638 Optional features, enabled with --enable-FEATURE and
1639 disabled with --disable-FEATURE, default is enabled if available:
1641 system all system emulation targets
1642 user supported user emulation targets
1643 linux-user all linux usermode emulation targets
1644 bsd-user all BSD usermode emulation targets
1645 docs build documentation
1646 guest-agent build the QEMU Guest Agent
1647 guest-agent-msi build guest agent Windows MSI installation package
1648 pie Position Independent Executables
1649 modules modules support
1650 debug-tcg TCG debugging (default is disabled)
1651 debug-info debugging information
1652 sparse sparse checker
1654 gnutls GNUTLS cryptography support
1655 nettle nettle cryptography support
1656 gcrypt libgcrypt cryptography support
1657 sdl SDL UI
1658 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1659 gtk gtk UI
1660 vte vte support for the gtk UI
1661 curses curses UI
1662 vnc VNC UI support
1663 vnc-sasl SASL encryption for VNC server
1664 vnc-jpeg JPEG lossy compression for VNC server
1665 vnc-png PNG compression for VNC server
1666 cocoa Cocoa UI (Mac OS X only)
1667 virtfs VirtFS
1668 mpath Multipath persistent reservation passthrough
1669 xen xen backend driver support
1670 xen-pci-passthrough PCI passthrough support for Xen
1671 brlapi BrlAPI (Braile)
1672 curl curl connectivity
1673 membarrier membarrier system call (for Linux 4.14+ or Windows)
1674 fdt fdt device tree
1675 bluez bluez stack connectivity
1676 kvm KVM acceleration support
1677 hax HAX acceleration support
1678 hvf Hypervisor.framework acceleration support
1679 whpx Windows Hypervisor Platform acceleration support
1680 rdma Enable RDMA-based migration
1681 pvrdma Enable PVRDMA support
1682 vde support for vde network
1683 netmap support for netmap network
1684 linux-aio Linux AIO support
1685 cap-ng libcap-ng support
1686 attr attr and xattr support
1687 vhost-net vhost-net acceleration support
1688 vhost-crypto vhost-crypto acceleration support
1689 spice spice
1690 rbd rados block device (rbd)
1691 libiscsi iscsi support
1692 libnfs nfs support
1693 smartcard smartcard support (libcacard)
1694 libusb libusb (for usb passthrough)
1695 live-block-migration Block migration in the main migration stream
1696 usb-redir usb network redirection support
1697 lzo support of lzo compression library
1698 snappy support of snappy compression library
1699 bzip2 support of bzip2 compression library
1700 (for reading bzip2-compressed dmg images)
1701 seccomp seccomp support
1702 coroutine-pool coroutine freelist (better performance)
1703 glusterfs GlusterFS backend
1704 tpm TPM support
1705 libssh2 ssh block device support
1706 numa libnuma support
1707 libxml2 for Parallels image format
1708 tcmalloc tcmalloc support
1709 jemalloc jemalloc support
1710 avx2 AVX2 optimization support
1711 replication replication support
1712 vhost-vsock virtio sockets device support
1713 opengl opengl support
1714 virglrenderer virgl rendering support
1715 xfsctl xfsctl support
1716 qom-cast-debug cast debugging support
1717 tools build qemu-io, qemu-nbd and qemu-image tools
1718 vxhs Veritas HyperScale vDisk backend support
1719 crypto-afalg Linux AF_ALG crypto backend driver
1720 vhost-user vhost-user support
1721 capstone capstone disassembler support
1722 debug-mutex mutex debugging support
1723 libpmem libpmem support
1725 NOTE: The object files are built at the place where configure is launched
1727 exit 0
1730 if ! has $python; then
1731 error_exit "Python not found. Use --python=/path/to/python"
1734 # Note that if the Python conditional here evaluates True we will exit
1735 # with status 1 which is a shell 'false' value.
1736 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1737 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
1738 "Use --python=/path/to/python to specify a supported Python."
1741 # Suppress writing compiled files
1742 python="$python -B"
1744 # Check that the C compiler works. Doing this here before testing
1745 # the host CPU ensures that we had a valid CC to autodetect the
1746 # $cpu var (and we should bail right here if that's not the case).
1747 # It also allows the help message to be printed without a CC.
1748 write_c_skeleton;
1749 if compile_object ; then
1750 : C compiler works ok
1751 else
1752 error_exit "\"$cc\" either does not exist or does not work"
1754 if ! compile_prog ; then
1755 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1758 # Now we have handled --enable-tcg-interpreter and know we're not just
1759 # printing the help message, bail out if the host CPU isn't supported.
1760 if test "$ARCH" = "unknown"; then
1761 if test "$tcg_interpreter" = "yes" ; then
1762 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1763 else
1764 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1768 # Consult white-list to determine whether to enable werror
1769 # by default. Only enable by default for git builds
1770 if test -z "$werror" ; then
1771 if test -d "$source_path/.git" -a \
1772 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1773 werror="yes"
1774 else
1775 werror="no"
1779 if test "$bogus_os" = "yes"; then
1780 # Now that we know that we're not printing the help and that
1781 # the compiler works (so the results of the check_defines we used
1782 # to identify the OS are reliable), if we didn't recognize the
1783 # host OS we should stop now.
1784 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1787 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1788 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1789 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1790 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1791 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1792 gcc_flags="-Wno-string-plus-int $gcc_flags"
1793 gcc_flags="-Wno-error=address-of-packed-member $gcc_flags"
1794 # Note that we do not add -Werror to gcc_flags here, because that would
1795 # enable it for all configure tests. If a configure test failed due
1796 # to -Werror this would just silently disable some features,
1797 # so it's too error prone.
1799 cc_has_warning_flag() {
1800 write_c_skeleton;
1802 # Use the positive sense of the flag when testing for -Wno-wombat
1803 # support (gcc will happily accept the -Wno- form of unknown
1804 # warning options).
1805 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1806 compile_prog "-Werror $optflag" ""
1809 for flag in $gcc_flags; do
1810 if cc_has_warning_flag $flag ; then
1811 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1813 done
1815 if test "$stack_protector" != "no"; then
1816 cat > $TMPC << EOF
1817 int main(int argc, char *argv[])
1819 char arr[64], *p = arr, *c = argv[0];
1820 while (*c) {
1821 *p++ = *c++;
1823 return 0;
1826 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1827 sp_on=0
1828 for flag in $gcc_flags; do
1829 # We need to check both a compile and a link, since some compiler
1830 # setups fail only on a .c->.o compile and some only at link time
1831 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1832 compile_prog "-Werror $flag" ""; then
1833 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1834 sp_on=1
1835 break
1837 done
1838 if test "$stack_protector" = yes; then
1839 if test $sp_on = 0; then
1840 error_exit "Stack protector not supported"
1845 # Disable -Wmissing-braces on older compilers that warn even for
1846 # the "universal" C zero initializer {0}.
1847 cat > $TMPC << EOF
1848 struct {
1849 int a[2];
1850 } x = {0};
1852 if compile_object "-Werror" "" ; then
1854 else
1855 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1858 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1859 # large functions that use global variables. The bug is in all releases of
1860 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1861 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1862 cat > $TMPC << EOF
1863 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1864 int main(void) { return 0; }
1865 #else
1866 #error No bug in this compiler.
1867 #endif
1869 if compile_prog "-Werror -fno-gcse" "" ; then
1870 TRANSLATE_OPT_CFLAGS=-fno-gcse
1873 if test "$static" = "yes" ; then
1874 if test "$modules" = "yes" ; then
1875 error_exit "static and modules are mutually incompatible"
1877 if test "$pie" = "yes" ; then
1878 error_exit "static and pie are mutually incompatible"
1879 else
1880 pie="no"
1884 # Unconditional check for compiler __thread support
1885 cat > $TMPC << EOF
1886 static __thread int tls_var;
1887 int main(void) { return tls_var; }
1890 if ! compile_prog "-Werror" "" ; then
1891 error_exit "Your compiler does not support the __thread specifier for " \
1892 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1895 if test "$pie" = ""; then
1896 case "$cpu-$targetos" in
1897 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1900 pie="no"
1902 esac
1905 if test "$pie" != "no" ; then
1906 cat > $TMPC << EOF
1908 #ifdef __linux__
1909 # define THREAD __thread
1910 #else
1911 # define THREAD
1912 #endif
1914 static THREAD int tls_var;
1916 int main(void) { return tls_var; }
1919 if compile_prog "-fPIE -DPIE" "-pie"; then
1920 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1921 LDFLAGS="-pie $LDFLAGS"
1922 pie="yes"
1923 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1924 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1926 else
1927 if test "$pie" = "yes"; then
1928 error_exit "PIE not available due to missing toolchain support"
1929 else
1930 echo "Disabling PIE due to missing toolchain support"
1931 pie="no"
1935 if compile_prog "-Werror -fno-pie" "-nopie"; then
1936 CFLAGS_NOPIE="-fno-pie"
1937 LDFLAGS_NOPIE="-nopie"
1941 ##########################################
1942 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1943 # use i686 as default anyway, but for those that don't, an explicit
1944 # specification is necessary
1946 if test "$cpu" = "i386"; then
1947 cat > $TMPC << EOF
1948 static int sfaa(int *ptr)
1950 return __sync_fetch_and_and(ptr, 0);
1953 int main(void)
1955 int val = 42;
1956 val = __sync_val_compare_and_swap(&val, 0, 1);
1957 sfaa(&val);
1958 return val;
1961 if ! compile_prog "" "" ; then
1962 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1966 #########################################
1967 # Solaris specific configure tool chain decisions
1969 if test "$solaris" = "yes" ; then
1970 if has $install; then
1972 else
1973 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1974 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1975 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1977 if test "$(path_of $install)" = "/usr/sbin/install" ; then
1978 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1979 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1980 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1982 if has ar; then
1984 else
1985 if test -f /usr/ccs/bin/ar ; then
1986 error_exit "No path includes ar" \
1987 "Add /usr/ccs/bin to your path and rerun configure"
1989 error_exit "No path includes ar"
1993 if test -z "${target_list+xxx}" ; then
1994 for target in $default_target_list; do
1995 supported_target $target 2>/dev/null && \
1996 target_list="$target_list $target"
1997 done
1998 target_list="${target_list# }"
1999 else
2000 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2001 for target in $target_list; do
2002 # Check that we recognised the target name; this allows a more
2003 # friendly error message than if we let it fall through.
2004 case " $default_target_list " in
2005 *" $target "*)
2008 error_exit "Unknown target name '$target'"
2010 esac
2011 supported_target $target || exit 1
2012 done
2015 # see if system emulation was really requested
2016 case " $target_list " in
2017 *"-softmmu "*) softmmu=yes
2019 *) softmmu=no
2021 esac
2023 feature_not_found() {
2024 feature=$1
2025 remedy=$2
2027 error_exit "User requested feature $feature" \
2028 "configure was not able to find it." \
2029 "$remedy"
2032 # ---
2033 # big/little endian test
2034 cat > $TMPC << EOF
2035 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2036 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2037 extern int foo(short *, short *);
2038 int main(int argc, char *argv[]) {
2039 return foo(big_endian, little_endian);
2043 if compile_object ; then
2044 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2045 bigendian="yes"
2046 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2047 bigendian="no"
2048 else
2049 echo big/little test failed
2051 else
2052 echo big/little test failed
2055 ##########################################
2056 # cocoa implies not SDL or GTK
2057 # (the cocoa UI code currently assumes it is always the active UI
2058 # and doesn't interact well with other UI frontend code)
2059 if test "$cocoa" = "yes"; then
2060 if test "$sdl" = "yes"; then
2061 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2063 if test "$gtk" = "yes"; then
2064 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2066 gtk=no
2067 sdl=no
2070 # Some versions of Mac OS X incorrectly define SIZE_MAX
2071 cat > $TMPC << EOF
2072 #include <stdint.h>
2073 #include <stdio.h>
2074 int main(int argc, char *argv[]) {
2075 return printf("%zu", SIZE_MAX);
2078 have_broken_size_max=no
2079 if ! compile_object -Werror ; then
2080 have_broken_size_max=yes
2083 ##########################################
2084 # L2TPV3 probe
2086 cat > $TMPC <<EOF
2087 #include <sys/socket.h>
2088 #include <linux/ip.h>
2089 int main(void) { return sizeof(struct mmsghdr); }
2091 if compile_prog "" "" ; then
2092 l2tpv3=yes
2093 else
2094 l2tpv3=no
2097 ##########################################
2098 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2100 if test "$mingw32" = "yes"; then
2101 # Some versions of MinGW / Mingw-w64 lack localtime_r
2102 # and gmtime_r entirely.
2104 # Some versions of Mingw-w64 define a macro for
2105 # localtime_r/gmtime_r.
2107 # Some versions of Mingw-w64 will define functions
2108 # for localtime_r/gmtime_r, but only if you have
2109 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2110 # though, unistd.h and pthread.h both define
2111 # that for you.
2113 # So this #undef localtime_r and #include <unistd.h>
2114 # are not in fact redundant.
2115 cat > $TMPC << EOF
2116 #include <unistd.h>
2117 #include <time.h>
2118 #undef localtime_r
2119 int main(void) { localtime_r(NULL, NULL); return 0; }
2121 if compile_prog "" "" ; then
2122 localtime_r="yes"
2123 else
2124 localtime_r="no"
2128 ##########################################
2129 # pkg-config probe
2131 if ! has "$pkg_config_exe"; then
2132 error_exit "pkg-config binary '$pkg_config_exe' not found"
2135 ##########################################
2136 # NPTL probe
2138 if test "$linux_user" = "yes"; then
2139 cat > $TMPC <<EOF
2140 #include <sched.h>
2141 #include <linux/futex.h>
2142 int main(void) {
2143 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2144 #error bork
2145 #endif
2146 return 0;
2149 if ! compile_object ; then
2150 feature_not_found "nptl" "Install glibc and linux kernel headers."
2154 #########################################
2155 # zlib check
2157 if test "$zlib" != "no" ; then
2158 cat > $TMPC << EOF
2159 #include <zlib.h>
2160 int main(void) { zlibVersion(); return 0; }
2162 if compile_prog "" "-lz" ; then
2164 else
2165 error_exit "zlib check failed" \
2166 "Make sure to have the zlib libs and headers installed."
2169 LIBS="$LIBS -lz"
2171 ##########################################
2172 # lzo check
2174 if test "$lzo" != "no" ; then
2175 cat > $TMPC << EOF
2176 #include <lzo/lzo1x.h>
2177 int main(void) { lzo_version(); return 0; }
2179 if compile_prog "" "-llzo2" ; then
2180 libs_softmmu="$libs_softmmu -llzo2"
2181 lzo="yes"
2182 else
2183 if test "$lzo" = "yes"; then
2184 feature_not_found "liblzo2" "Install liblzo2 devel"
2186 lzo="no"
2190 ##########################################
2191 # snappy check
2193 if test "$snappy" != "no" ; then
2194 cat > $TMPC << EOF
2195 #include <snappy-c.h>
2196 int main(void) { snappy_max_compressed_length(4096); return 0; }
2198 if compile_prog "" "-lsnappy" ; then
2199 libs_softmmu="$libs_softmmu -lsnappy"
2200 snappy="yes"
2201 else
2202 if test "$snappy" = "yes"; then
2203 feature_not_found "libsnappy" "Install libsnappy devel"
2205 snappy="no"
2209 ##########################################
2210 # bzip2 check
2212 if test "$bzip2" != "no" ; then
2213 cat > $TMPC << EOF
2214 #include <bzlib.h>
2215 int main(void) { BZ2_bzlibVersion(); return 0; }
2217 if compile_prog "" "-lbz2" ; then
2218 bzip2="yes"
2219 else
2220 if test "$bzip2" = "yes"; then
2221 feature_not_found "libbzip2" "Install libbzip2 devel"
2223 bzip2="no"
2227 ##########################################
2228 # libseccomp check
2230 libseccomp_minver="2.2.0"
2231 if test "$seccomp" != "no" ; then
2232 case "$cpu" in
2233 i386|x86_64|mips)
2235 arm|aarch64)
2236 libseccomp_minver="2.2.3"
2238 ppc|ppc64|s390x)
2239 libseccomp_minver="2.3.0"
2242 libseccomp_minver=""
2244 esac
2246 if test "$libseccomp_minver" != "" &&
2247 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2248 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2249 seccomp_libs="$($pkg_config --libs libseccomp)"
2250 seccomp="yes"
2251 else
2252 if test "$seccomp" = "yes" ; then
2253 if test "$libseccomp_minver" != "" ; then
2254 feature_not_found "libseccomp" \
2255 "Install libseccomp devel >= $libseccomp_minver"
2256 else
2257 feature_not_found "libseccomp" \
2258 "libseccomp is not supported for host cpu $cpu"
2261 seccomp="no"
2264 ##########################################
2265 # xen probe
2267 if test "$xen" != "no" ; then
2268 # Check whether Xen library path is specified via --extra-ldflags to avoid
2269 # overriding this setting with pkg-config output. If not, try pkg-config
2270 # to obtain all needed flags.
2272 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2273 $pkg_config --exists xencontrol ; then
2274 xen_ctrl_version="$(printf '%d%02d%02d' \
2275 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2276 xen=yes
2277 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2278 xen_pc="$xen_pc xenevtchn xendevicemodel"
2279 if $pkg_config --exists xentoolcore; then
2280 xen_pc="$xen_pc xentoolcore"
2282 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2283 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2284 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS"
2285 else
2287 xen_libs="-lxenstore -lxenctrl -lxenguest"
2288 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2290 # First we test whether Xen headers and libraries are available.
2291 # If no, we are done and there is no Xen support.
2292 # If yes, more tests are run to detect the Xen version.
2294 # Xen (any)
2295 cat > $TMPC <<EOF
2296 #include <xenctrl.h>
2297 int main(void) {
2298 return 0;
2301 if ! compile_prog "" "$xen_libs" ; then
2302 # Xen not found
2303 if test "$xen" = "yes" ; then
2304 feature_not_found "xen" "Install xen devel"
2306 xen=no
2308 # Xen unstable
2309 elif
2310 cat > $TMPC <<EOF &&
2311 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2312 #define __XEN_TOOLS__
2313 #include <xendevicemodel.h>
2314 #include <xenforeignmemory.h>
2315 int main(void) {
2316 xendevicemodel_handle *xd;
2317 xenforeignmemory_handle *xfmem;
2319 xd = xendevicemodel_open(0, 0);
2320 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2322 xfmem = xenforeignmemory_open(0, 0);
2323 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2325 return 0;
2328 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2329 then
2330 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2331 xen_ctrl_version=41100
2332 xen=yes
2333 elif
2334 cat > $TMPC <<EOF &&
2335 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2336 #include <xenforeignmemory.h>
2337 #include <xentoolcore.h>
2338 int main(void) {
2339 xenforeignmemory_handle *xfmem;
2341 xfmem = xenforeignmemory_open(0, 0);
2342 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2343 xentoolcore_restrict_all(0);
2345 return 0;
2348 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2349 then
2350 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2351 xen_ctrl_version=41000
2352 xen=yes
2353 elif
2354 cat > $TMPC <<EOF &&
2355 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2356 #define __XEN_TOOLS__
2357 #include <xendevicemodel.h>
2358 int main(void) {
2359 xendevicemodel_handle *xd;
2361 xd = xendevicemodel_open(0, 0);
2362 xendevicemodel_close(xd);
2364 return 0;
2367 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2368 then
2369 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2370 xen_ctrl_version=40900
2371 xen=yes
2372 elif
2373 cat > $TMPC <<EOF &&
2375 * If we have stable libs the we don't want the libxc compat
2376 * layers, regardless of what CFLAGS we may have been given.
2378 * Also, check if xengnttab_grant_copy_segment_t is defined and
2379 * grant copy operation is implemented.
2381 #undef XC_WANT_COMPAT_EVTCHN_API
2382 #undef XC_WANT_COMPAT_GNTTAB_API
2383 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2384 #include <xenctrl.h>
2385 #include <xenstore.h>
2386 #include <xenevtchn.h>
2387 #include <xengnttab.h>
2388 #include <xenforeignmemory.h>
2389 #include <stdint.h>
2390 #include <xen/hvm/hvm_info_table.h>
2391 #if !defined(HVM_MAX_VCPUS)
2392 # error HVM_MAX_VCPUS not defined
2393 #endif
2394 int main(void) {
2395 xc_interface *xc = NULL;
2396 xenforeignmemory_handle *xfmem;
2397 xenevtchn_handle *xe;
2398 xengnttab_handle *xg;
2399 xen_domain_handle_t handle;
2400 xengnttab_grant_copy_segment_t* seg = NULL;
2402 xs_daemon_open();
2404 xc = xc_interface_open(0, 0, 0);
2405 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2406 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2407 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2408 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2409 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2411 xfmem = xenforeignmemory_open(0, 0);
2412 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2414 xe = xenevtchn_open(0, 0);
2415 xenevtchn_fd(xe);
2417 xg = xengnttab_open(0, 0);
2418 xengnttab_grant_copy(xg, 0, seg);
2420 return 0;
2423 compile_prog "" "$xen_libs $xen_stable_libs"
2424 then
2425 xen_ctrl_version=40800
2426 xen=yes
2427 elif
2428 cat > $TMPC <<EOF &&
2430 * If we have stable libs the we don't want the libxc compat
2431 * layers, regardless of what CFLAGS we may have been given.
2433 #undef XC_WANT_COMPAT_EVTCHN_API
2434 #undef XC_WANT_COMPAT_GNTTAB_API
2435 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2436 #include <xenctrl.h>
2437 #include <xenstore.h>
2438 #include <xenevtchn.h>
2439 #include <xengnttab.h>
2440 #include <xenforeignmemory.h>
2441 #include <stdint.h>
2442 #include <xen/hvm/hvm_info_table.h>
2443 #if !defined(HVM_MAX_VCPUS)
2444 # error HVM_MAX_VCPUS not defined
2445 #endif
2446 int main(void) {
2447 xc_interface *xc = NULL;
2448 xenforeignmemory_handle *xfmem;
2449 xenevtchn_handle *xe;
2450 xengnttab_handle *xg;
2451 xen_domain_handle_t handle;
2453 xs_daemon_open();
2455 xc = xc_interface_open(0, 0, 0);
2456 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2457 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2458 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2459 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2460 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2462 xfmem = xenforeignmemory_open(0, 0);
2463 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2465 xe = xenevtchn_open(0, 0);
2466 xenevtchn_fd(xe);
2468 xg = xengnttab_open(0, 0);
2469 xengnttab_map_grant_ref(xg, 0, 0, 0);
2471 return 0;
2474 compile_prog "" "$xen_libs $xen_stable_libs"
2475 then
2476 xen_ctrl_version=40701
2477 xen=yes
2478 elif
2479 cat > $TMPC <<EOF &&
2480 #include <xenctrl.h>
2481 #include <stdint.h>
2482 int main(void) {
2483 xc_interface *xc = NULL;
2484 xen_domain_handle_t handle;
2485 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2486 return 0;
2489 compile_prog "" "$xen_libs"
2490 then
2491 xen_ctrl_version=40700
2492 xen=yes
2494 # Xen 4.6
2495 elif
2496 cat > $TMPC <<EOF &&
2497 #include <xenctrl.h>
2498 #include <xenstore.h>
2499 #include <stdint.h>
2500 #include <xen/hvm/hvm_info_table.h>
2501 #if !defined(HVM_MAX_VCPUS)
2502 # error HVM_MAX_VCPUS not defined
2503 #endif
2504 int main(void) {
2505 xc_interface *xc;
2506 xs_daemon_open();
2507 xc = xc_interface_open(0, 0, 0);
2508 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2509 xc_gnttab_open(NULL, 0);
2510 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2511 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2512 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2513 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2514 return 0;
2517 compile_prog "" "$xen_libs"
2518 then
2519 xen_ctrl_version=40600
2520 xen=yes
2522 # Xen 4.5
2523 elif
2524 cat > $TMPC <<EOF &&
2525 #include <xenctrl.h>
2526 #include <xenstore.h>
2527 #include <stdint.h>
2528 #include <xen/hvm/hvm_info_table.h>
2529 #if !defined(HVM_MAX_VCPUS)
2530 # error HVM_MAX_VCPUS not defined
2531 #endif
2532 int main(void) {
2533 xc_interface *xc;
2534 xs_daemon_open();
2535 xc = xc_interface_open(0, 0, 0);
2536 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2537 xc_gnttab_open(NULL, 0);
2538 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2539 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2540 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2541 return 0;
2544 compile_prog "" "$xen_libs"
2545 then
2546 xen_ctrl_version=40500
2547 xen=yes
2549 elif
2550 cat > $TMPC <<EOF &&
2551 #include <xenctrl.h>
2552 #include <xenstore.h>
2553 #include <stdint.h>
2554 #include <xen/hvm/hvm_info_table.h>
2555 #if !defined(HVM_MAX_VCPUS)
2556 # error HVM_MAX_VCPUS not defined
2557 #endif
2558 int main(void) {
2559 xc_interface *xc;
2560 xs_daemon_open();
2561 xc = xc_interface_open(0, 0, 0);
2562 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2563 xc_gnttab_open(NULL, 0);
2564 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2565 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2566 return 0;
2569 compile_prog "" "$xen_libs"
2570 then
2571 xen_ctrl_version=40200
2572 xen=yes
2574 else
2575 if test "$xen" = "yes" ; then
2576 feature_not_found "xen (unsupported version)" \
2577 "Install a supported xen (xen 4.2 or newer)"
2579 xen=no
2582 if test "$xen" = yes; then
2583 if test $xen_ctrl_version -ge 40701 ; then
2584 libs_softmmu="$xen_stable_libs $libs_softmmu"
2586 libs_softmmu="$xen_libs $libs_softmmu"
2591 if test "$xen_pci_passthrough" != "no"; then
2592 if test "$xen" = "yes" && test "$linux" = "yes"; then
2593 xen_pci_passthrough=yes
2594 else
2595 if test "$xen_pci_passthrough" = "yes"; then
2596 error_exit "User requested feature Xen PCI Passthrough" \
2597 " but this feature requires /sys from Linux"
2599 xen_pci_passthrough=no
2603 if test "$xen_pv_domain_build" = "yes" &&
2604 test "$xen" != "yes"; then
2605 error_exit "User requested Xen PV domain builder support" \
2606 "which requires Xen support."
2609 ##########################################
2610 # Windows Hypervisor Platform accelerator (WHPX) check
2611 if test "$whpx" != "no" ; then
2612 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2613 whpx="yes"
2614 else
2615 if test "$whpx" = "yes"; then
2616 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2618 whpx="no"
2622 ##########################################
2623 # Sparse probe
2624 if test "$sparse" != "no" ; then
2625 if has cgcc; then
2626 sparse=yes
2627 else
2628 if test "$sparse" = "yes" ; then
2629 feature_not_found "sparse" "Install sparse binary"
2631 sparse=no
2635 ##########################################
2636 # X11 probe
2637 if $pkg_config --exists "x11"; then
2638 have_x11=yes
2639 x11_cflags=$($pkg_config --cflags x11)
2640 x11_libs=$($pkg_config --libs x11)
2643 ##########################################
2644 # GTK probe
2646 if test "$gtk" != "no"; then
2647 gtkpackage="gtk+-3.0"
2648 gtkx11package="gtk+-x11-3.0"
2649 gtkversion="3.14.0"
2650 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2651 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2652 gtk_libs=$($pkg_config --libs $gtkpackage)
2653 gtk_version=$($pkg_config --modversion $gtkpackage)
2654 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2655 need_x11=yes
2656 gtk_cflags="$gtk_cflags $x11_cflags"
2657 gtk_libs="$gtk_libs $x11_libs"
2659 gtk="yes"
2660 elif test "$gtk" = "yes"; then
2661 feature_not_found "gtk" "Install gtk3-devel"
2662 else
2663 gtk="no"
2668 ##########################################
2669 # GNUTLS probe
2671 if test "$gnutls" != "no"; then
2672 if $pkg_config --exists "gnutls >= 3.1.18"; then
2673 gnutls_cflags=$($pkg_config --cflags gnutls)
2674 gnutls_libs=$($pkg_config --libs gnutls)
2675 libs_softmmu="$gnutls_libs $libs_softmmu"
2676 libs_tools="$gnutls_libs $libs_tools"
2677 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2678 gnutls="yes"
2679 elif test "$gnutls" = "yes"; then
2680 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2681 else
2682 gnutls="no"
2687 # If user didn't give a --disable/enable-gcrypt flag,
2688 # then mark as disabled if user requested nettle
2689 # explicitly
2690 if test -z "$gcrypt"
2691 then
2692 if test "$nettle" = "yes"
2693 then
2694 gcrypt="no"
2698 # If user didn't give a --disable/enable-nettle flag,
2699 # then mark as disabled if user requested gcrypt
2700 # explicitly
2701 if test -z "$nettle"
2702 then
2703 if test "$gcrypt" = "yes"
2704 then
2705 nettle="no"
2709 has_libgcrypt() {
2710 if ! has "libgcrypt-config"
2711 then
2712 return 1
2715 if test -n "$cross_prefix"
2716 then
2717 host=$(libgcrypt-config --host)
2718 if test "$host-" != $cross_prefix
2719 then
2720 return 1
2724 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2725 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2727 if test $maj != 1 || test $min -lt 5
2728 then
2729 return 1
2732 return 0
2736 if test "$nettle" != "no"; then
2737 if $pkg_config --exists "nettle >= 2.7.1"; then
2738 nettle_cflags=$($pkg_config --cflags nettle)
2739 nettle_libs=$($pkg_config --libs nettle)
2740 nettle_version=$($pkg_config --modversion nettle)
2741 libs_softmmu="$nettle_libs $libs_softmmu"
2742 libs_tools="$nettle_libs $libs_tools"
2743 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2744 nettle="yes"
2746 if test -z "$gcrypt"; then
2747 gcrypt="no"
2749 else
2750 if test "$nettle" = "yes"; then
2751 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2752 else
2753 nettle="no"
2758 if test "$gcrypt" != "no"; then
2759 if has_libgcrypt; then
2760 gcrypt_cflags=$(libgcrypt-config --cflags)
2761 gcrypt_libs=$(libgcrypt-config --libs)
2762 # Debian has remove -lgpg-error from libgcrypt-config
2763 # as it "spreads unnecessary dependencies" which in
2764 # turn breaks static builds...
2765 if test "$static" = "yes"
2766 then
2767 gcrypt_libs="$gcrypt_libs -lgpg-error"
2769 libs_softmmu="$gcrypt_libs $libs_softmmu"
2770 libs_tools="$gcrypt_libs $libs_tools"
2771 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2772 gcrypt="yes"
2774 cat > $TMPC << EOF
2775 #include <gcrypt.h>
2776 int main(void) {
2777 gcry_mac_hd_t handle;
2778 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2779 GCRY_MAC_FLAG_SECURE, NULL);
2780 return 0;
2783 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2784 gcrypt_hmac=yes
2786 else
2787 if test "$gcrypt" = "yes"; then
2788 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
2789 else
2790 gcrypt="no"
2796 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2797 then
2798 error_exit "Only one of gcrypt & nettle can be enabled"
2801 ##########################################
2802 # libtasn1 - only for the TLS creds/session test suite
2804 tasn1=yes
2805 tasn1_cflags=""
2806 tasn1_libs=""
2807 if $pkg_config --exists "libtasn1"; then
2808 tasn1_cflags=$($pkg_config --cflags libtasn1)
2809 tasn1_libs=$($pkg_config --libs libtasn1)
2810 else
2811 tasn1=no
2815 ##########################################
2816 # getifaddrs (for tests/test-io-channel-socket )
2818 have_ifaddrs_h=yes
2819 if ! check_include "ifaddrs.h" ; then
2820 have_ifaddrs_h=no
2823 ##########################################
2824 # VTE probe
2826 if test "$vte" != "no"; then
2827 vteminversion="0.32.0"
2828 if $pkg_config --exists "vte-2.91"; then
2829 vtepackage="vte-2.91"
2830 else
2831 vtepackage="vte-2.90"
2833 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2834 vte_cflags=$($pkg_config --cflags $vtepackage)
2835 vte_libs=$($pkg_config --libs $vtepackage)
2836 vteversion=$($pkg_config --modversion $vtepackage)
2837 vte="yes"
2838 elif test "$vte" = "yes"; then
2839 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2840 else
2841 vte="no"
2845 ##########################################
2846 # SDL probe
2848 # Look for sdl configuration program (pkg-config or sdl-config). Try
2849 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2851 sdl_probe ()
2853 sdl_too_old=no
2854 if test "$sdlabi" = ""; then
2855 if $pkg_config --exists "sdl2"; then
2856 sdlabi=2.0
2857 elif $pkg_config --exists "sdl"; then
2858 sdlabi=1.2
2859 else
2860 sdlabi=2.0
2864 if test $sdlabi = "2.0"; then
2865 sdl_config=$sdl2_config
2866 sdlname=sdl2
2867 sdlconfigname=sdl2_config
2868 elif test $sdlabi = "1.2"; then
2869 sdlname=sdl
2870 sdlconfigname=sdl_config
2871 else
2872 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2875 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2876 sdl_config=$sdlconfigname
2879 if $pkg_config $sdlname --exists; then
2880 sdlconfig="$pkg_config $sdlname"
2881 sdlversion=$($sdlconfig --modversion 2>/dev/null)
2882 elif has ${sdl_config}; then
2883 sdlconfig="$sdl_config"
2884 sdlversion=$($sdlconfig --version)
2885 else
2886 if test "$sdl" = "yes" ; then
2887 feature_not_found "sdl" "Install SDL2-devel"
2889 sdl=no
2890 # no need to do the rest
2891 return
2893 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2894 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2897 cat > $TMPC << EOF
2898 #include <SDL.h>
2899 #undef main /* We don't want SDL to override our main() */
2900 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2902 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2903 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
2904 if test "$static" = "yes" ; then
2905 if $pkg_config $sdlname --exists; then
2906 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null)
2907 else
2908 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2910 else
2911 sdl_libs=$($sdlconfig --libs 2>/dev/null)
2913 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2914 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2915 sdl_too_old=yes
2916 else
2917 sdl=yes
2920 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2921 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2922 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2923 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2924 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2926 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2928 else
2929 sdl=no
2931 fi # static link
2932 else # sdl not found
2933 if test "$sdl" = "yes" ; then
2934 feature_not_found "sdl" "Install SDL devel"
2936 sdl=no
2937 fi # sdl compile test
2940 if test "$sdl" != "no" ; then
2941 sdl_probe
2944 if test "$sdl" = "yes" ; then
2945 cat > $TMPC <<EOF
2946 #include <SDL.h>
2947 #if defined(SDL_VIDEO_DRIVER_X11)
2948 #include <X11/XKBlib.h>
2949 #else
2950 #error No x11 support
2951 #endif
2952 int main(void) { return 0; }
2954 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2955 need_x11=yes
2956 sdl_cflags="$sdl_cflags $x11_cflags"
2957 sdl_libs="$sdl_libs $x11_libs"
2961 ##########################################
2962 # RDMA needs OpenFabrics libraries
2963 if test "$rdma" != "no" ; then
2964 cat > $TMPC <<EOF
2965 #include <rdma/rdma_cma.h>
2966 int main(void) { return 0; }
2968 rdma_libs="-lrdmacm -libverbs -libumad"
2969 if compile_prog "" "$rdma_libs" ; then
2970 rdma="yes"
2971 libs_softmmu="$libs_softmmu $rdma_libs"
2972 else
2973 if test "$rdma" = "yes" ; then
2974 error_exit \
2975 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
2976 " Your options:" \
2977 " (1) Fast: Install infiniband packages (devel) from your distro." \
2978 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2979 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2981 rdma="no"
2985 ##########################################
2986 # PVRDMA detection
2988 cat > $TMPC <<EOF &&
2989 #include <sys/mman.h>
2992 main(void)
2994 char buf = 0;
2995 void *addr = &buf;
2996 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
2998 return 0;
3002 if test "$rdma" = "yes" ; then
3003 case "$pvrdma" in
3005 if compile_prog "" ""; then
3006 pvrdma="yes"
3007 else
3008 pvrdma="no"
3011 "yes")
3012 if ! compile_prog "" ""; then
3013 error_exit "PVRDMA is not supported since mremap is not implemented"
3015 pvrdma="yes"
3017 "no")
3018 pvrdma="no"
3020 esac
3021 else
3022 if test "$pvrdma" = "yes" ; then
3023 error_exit "PVRDMA requires rdma suppport"
3025 pvrdma="no"
3028 ##########################################
3029 # VNC SASL detection
3030 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
3031 cat > $TMPC <<EOF
3032 #include <sasl/sasl.h>
3033 #include <stdio.h>
3034 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3036 # Assuming Cyrus-SASL installed in /usr prefix
3037 vnc_sasl_cflags=""
3038 vnc_sasl_libs="-lsasl2"
3039 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3040 vnc_sasl=yes
3041 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3042 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3043 else
3044 if test "$vnc_sasl" = "yes" ; then
3045 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3047 vnc_sasl=no
3051 ##########################################
3052 # VNC JPEG detection
3053 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
3054 cat > $TMPC <<EOF
3055 #include <stdio.h>
3056 #include <jpeglib.h>
3057 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3059 vnc_jpeg_cflags=""
3060 vnc_jpeg_libs="-ljpeg"
3061 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3062 vnc_jpeg=yes
3063 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3064 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3065 else
3066 if test "$vnc_jpeg" = "yes" ; then
3067 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3069 vnc_jpeg=no
3073 ##########################################
3074 # VNC PNG detection
3075 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
3076 cat > $TMPC <<EOF
3077 //#include <stdio.h>
3078 #include <png.h>
3079 #include <stddef.h>
3080 int main(void) {
3081 png_structp png_ptr;
3082 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3083 return png_ptr != 0;
3086 if $pkg_config libpng --exists; then
3087 vnc_png_cflags=$($pkg_config libpng --cflags)
3088 vnc_png_libs=$($pkg_config libpng --libs)
3089 else
3090 vnc_png_cflags=""
3091 vnc_png_libs="-lpng"
3093 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3094 vnc_png=yes
3095 libs_softmmu="$vnc_png_libs $libs_softmmu"
3096 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3097 else
3098 if test "$vnc_png" = "yes" ; then
3099 feature_not_found "vnc-png" "Install libpng devel"
3101 vnc_png=no
3105 ##########################################
3106 # xkbcommon probe
3107 if test "$xkbcommon" != "no" ; then
3108 if $pkg_config xkbcommon --exists; then
3109 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3110 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3111 xkbcommon=yes
3112 else
3113 if test "$xkbcommon" = "yes" ; then
3114 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3116 xkbcommon=no
3120 ##########################################
3121 # fnmatch() probe, used for ACL routines
3122 fnmatch="no"
3123 cat > $TMPC << EOF
3124 #include <fnmatch.h>
3125 int main(void)
3127 fnmatch("foo", "foo", 0);
3128 return 0;
3131 if compile_prog "" "" ; then
3132 fnmatch="yes"
3135 ##########################################
3136 # xfsctl() probe, used for file-posix.c
3137 if test "$xfs" != "no" ; then
3138 cat > $TMPC << EOF
3139 #include <stddef.h> /* NULL */
3140 #include <xfs/xfs.h>
3141 int main(void)
3143 xfsctl(NULL, 0, 0, NULL);
3144 return 0;
3147 if compile_prog "" "" ; then
3148 xfs="yes"
3149 else
3150 if test "$xfs" = "yes" ; then
3151 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3153 xfs=no
3157 ##########################################
3158 # vde libraries probe
3159 if test "$vde" != "no" ; then
3160 vde_libs="-lvdeplug"
3161 cat > $TMPC << EOF
3162 #include <libvdeplug.h>
3163 int main(void)
3165 struct vde_open_args a = {0, 0, 0};
3166 char s[] = "";
3167 vde_open(s, s, &a);
3168 return 0;
3171 if compile_prog "" "$vde_libs" ; then
3172 vde=yes
3173 else
3174 if test "$vde" = "yes" ; then
3175 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3177 vde=no
3181 ##########################################
3182 # netmap support probe
3183 # Apart from looking for netmap headers, we make sure that the host API version
3184 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3185 # a minor/major version number. Minor new features will be marked with values up
3186 # to 15, and if something happens that requires a change to the backend we will
3187 # move above 15, submit the backend fixes and modify this two bounds.
3188 if test "$netmap" != "no" ; then
3189 cat > $TMPC << EOF
3190 #include <inttypes.h>
3191 #include <net/if.h>
3192 #include <net/netmap.h>
3193 #include <net/netmap_user.h>
3194 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3195 #error
3196 #endif
3197 int main(void) { return 0; }
3199 if compile_prog "" "" ; then
3200 netmap=yes
3201 else
3202 if test "$netmap" = "yes" ; then
3203 feature_not_found "netmap"
3205 netmap=no
3209 ##########################################
3210 # libcap-ng library probe
3211 if test "$cap_ng" != "no" ; then
3212 cap_libs="-lcap-ng"
3213 cat > $TMPC << EOF
3214 #include <cap-ng.h>
3215 int main(void)
3217 capng_capability_to_name(CAPNG_EFFECTIVE);
3218 return 0;
3221 if compile_prog "" "$cap_libs" ; then
3222 cap_ng=yes
3223 libs_tools="$cap_libs $libs_tools"
3224 else
3225 if test "$cap_ng" = "yes" ; then
3226 feature_not_found "cap_ng" "Install libcap-ng devel"
3228 cap_ng=no
3232 ##########################################
3233 # Sound support libraries probe
3235 audio_drv_probe()
3237 drv=$1
3238 hdr=$2
3239 lib=$3
3240 exp=$4
3241 cfl=$5
3242 cat > $TMPC << EOF
3243 #include <$hdr>
3244 int main(void) { $exp }
3246 if compile_prog "$cfl" "$lib" ; then
3248 else
3249 error_exit "$drv check failed" \
3250 "Make sure to have the $drv libs and headers installed."
3254 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3255 for drv in $audio_drv_list; do
3256 case $drv in
3257 alsa)
3258 audio_drv_probe $drv alsa/asoundlib.h -lasound \
3259 "return snd_pcm_close((snd_pcm_t *)0);"
3260 alsa_libs="-lasound"
3264 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
3265 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
3266 pulse_libs="-lpulse"
3267 audio_pt_int="yes"
3270 sdl)
3271 if test "$sdl" = "no"; then
3272 error_exit "sdl not found or disabled, can not use sdl audio driver"
3276 coreaudio)
3277 coreaudio_libs="-framework CoreAudio"
3280 dsound)
3281 dsound_libs="-lole32 -ldxguid"
3282 audio_win_int="yes"
3285 oss)
3286 oss_libs="$oss_lib"
3289 wav)
3290 # XXX: Probes for CoreAudio, DirectSound
3294 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3295 error_exit "Unknown driver '$drv' selected" \
3296 "Possible drivers are: $audio_possible_drivers"
3299 esac
3300 done
3302 ##########################################
3303 # BrlAPI probe
3305 if test "$brlapi" != "no" ; then
3306 brlapi_libs="-lbrlapi"
3307 cat > $TMPC << EOF
3308 #include <brlapi.h>
3309 #include <stddef.h>
3310 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3312 if compile_prog "" "$brlapi_libs" ; then
3313 brlapi=yes
3314 else
3315 if test "$brlapi" = "yes" ; then
3316 feature_not_found "brlapi" "Install brlapi devel"
3318 brlapi=no
3322 ##########################################
3323 # curses probe
3324 if test "$curses" != "no" ; then
3325 if test "$mingw32" = "yes" ; then
3326 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3327 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3328 else
3329 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3330 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3332 curses_found=no
3333 cat > $TMPC << EOF
3334 #include <locale.h>
3335 #include <curses.h>
3336 #include <wchar.h>
3337 int main(void) {
3338 wchar_t wch = L'w';
3339 setlocale(LC_ALL, "");
3340 resize_term(0, 0);
3341 addwstr(L"wide chars\n");
3342 addnwstr(&wch, 1);
3343 add_wch(WACS_DEGREE);
3344 return 0;
3347 IFS=:
3348 for curses_inc in $curses_inc_list; do
3349 # Make sure we get the wide character prototypes
3350 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3351 IFS=:
3352 for curses_lib in $curses_lib_list; do
3353 unset IFS
3354 if compile_prog "$curses_inc" "$curses_lib" ; then
3355 curses_found=yes
3356 break
3358 done
3359 if test "$curses_found" = yes ; then
3360 break
3362 done
3363 unset IFS
3364 if test "$curses_found" = "yes" ; then
3365 curses=yes
3366 else
3367 if test "$curses" = "yes" ; then
3368 feature_not_found "curses" "Install ncurses devel"
3370 curses=no
3374 ##########################################
3375 # curl probe
3376 if test "$curl" != "no" ; then
3377 if $pkg_config libcurl --exists; then
3378 curlconfig="$pkg_config libcurl"
3379 else
3380 curlconfig=curl-config
3382 cat > $TMPC << EOF
3383 #include <curl/curl.h>
3384 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3386 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3387 curl_libs=$($curlconfig --libs 2>/dev/null)
3388 if compile_prog "$curl_cflags" "$curl_libs" ; then
3389 curl=yes
3390 else
3391 if test "$curl" = "yes" ; then
3392 feature_not_found "curl" "Install libcurl devel"
3394 curl=no
3396 fi # test "$curl"
3398 ##########################################
3399 # bluez support probe
3400 if test "$bluez" != "no" ; then
3401 cat > $TMPC << EOF
3402 #include <bluetooth/bluetooth.h>
3403 int main(void) { return bt_error(0); }
3405 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3406 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3407 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3408 bluez=yes
3409 libs_softmmu="$bluez_libs $libs_softmmu"
3410 else
3411 if test "$bluez" = "yes" ; then
3412 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3414 bluez="no"
3418 ##########################################
3419 # glib support probe
3421 glib_req_ver=2.40
3422 glib_modules=gthread-2.0
3423 if test "$modules" = yes; then
3424 glib_modules="$glib_modules gmodule-export-2.0"
3427 # This workaround is required due to a bug in pkg-config file for glib as it
3428 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3430 if test "$static" = yes -a "$mingw32" = yes; then
3431 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3434 for i in $glib_modules; do
3435 if $pkg_config --atleast-version=$glib_req_ver $i; then
3436 glib_cflags=$($pkg_config --cflags $i)
3437 glib_libs=$($pkg_config --libs $i)
3438 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3439 LIBS="$glib_libs $LIBS"
3440 libs_qga="$glib_libs $libs_qga"
3441 else
3442 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3444 done
3446 # Sanity check that the current size_t matches the
3447 # size that glib thinks it should be. This catches
3448 # problems on multi-arch where people try to build
3449 # 32-bit QEMU while pointing at 64-bit glib headers
3450 cat > $TMPC <<EOF
3451 #include <glib.h>
3452 #include <unistd.h>
3454 #define QEMU_BUILD_BUG_ON(x) \
3455 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3457 int main(void) {
3458 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3459 return 0;
3463 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3464 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3465 "You probably need to set PKG_CONFIG_LIBDIR"\
3466 "to point to the right pkg-config files for your"\
3467 "build target"
3470 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3471 cat > $TMPC << EOF
3472 #include <glib.h>
3473 int main(void) { return 0; }
3475 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3476 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3477 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3478 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3482 ##########################################
3483 # SHA command probe for modules
3484 if test "$modules" = yes; then
3485 shacmd_probe="sha1sum sha1 shasum"
3486 for c in $shacmd_probe; do
3487 if has $c; then
3488 shacmd="$c"
3489 break
3491 done
3492 if test "$shacmd" = ""; then
3493 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3497 ##########################################
3498 # pixman support probe
3500 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3501 pixman_cflags=
3502 pixman_libs=
3503 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3504 pixman_cflags=$($pkg_config --cflags pixman-1)
3505 pixman_libs=$($pkg_config --libs pixman-1)
3506 else
3507 error_exit "pixman >= 0.21.8 not present." \
3508 "Please install the pixman devel package."
3511 ##########################################
3512 # libmpathpersist probe
3514 if test "$mpath" != "no" ; then
3515 # probe for the new API
3516 cat > $TMPC <<EOF
3517 #include <libudev.h>
3518 #include <mpath_persist.h>
3519 unsigned mpath_mx_alloc_len = 1024;
3520 int logsink;
3521 static struct config *multipath_conf;
3522 extern struct udev *udev;
3523 extern struct config *get_multipath_config(void);
3524 extern void put_multipath_config(struct config *conf);
3525 struct udev *udev;
3526 struct config *get_multipath_config(void) { return multipath_conf; }
3527 void put_multipath_config(struct config *conf) { }
3529 int main(void) {
3530 udev = udev_new();
3531 multipath_conf = mpath_lib_init();
3532 return 0;
3535 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3536 mpathpersist=yes
3537 mpathpersist_new_api=yes
3538 else
3539 # probe for the old API
3540 cat > $TMPC <<EOF
3541 #include <libudev.h>
3542 #include <mpath_persist.h>
3543 unsigned mpath_mx_alloc_len = 1024;
3544 int logsink;
3545 int main(void) {
3546 struct udev *udev = udev_new();
3547 mpath_lib_init(udev);
3548 return 0;
3551 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3552 mpathpersist=yes
3553 mpathpersist_new_api=no
3554 else
3555 mpathpersist=no
3558 else
3559 mpathpersist=no
3562 ##########################################
3563 # libcap probe
3565 if test "$cap" != "no" ; then
3566 cat > $TMPC <<EOF
3567 #include <stdio.h>
3568 #include <sys/capability.h>
3569 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3571 if compile_prog "" "-lcap" ; then
3572 cap=yes
3573 else
3574 cap=no
3578 ##########################################
3579 # pthread probe
3580 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3582 pthread=no
3583 cat > $TMPC << EOF
3584 #include <pthread.h>
3585 static void *f(void *p) { return NULL; }
3586 int main(void) {
3587 pthread_t thread;
3588 pthread_create(&thread, 0, f, 0);
3589 return 0;
3592 if compile_prog "" "" ; then
3593 pthread=yes
3594 else
3595 for pthread_lib in $PTHREADLIBS_LIST; do
3596 if compile_prog "" "$pthread_lib" ; then
3597 pthread=yes
3598 found=no
3599 for lib_entry in $LIBS; do
3600 if test "$lib_entry" = "$pthread_lib"; then
3601 found=yes
3602 break
3604 done
3605 if test "$found" = "no"; then
3606 LIBS="$pthread_lib $LIBS"
3607 libs_qga="$pthread_lib $libs_qga"
3609 PTHREAD_LIB="$pthread_lib"
3610 break
3612 done
3615 if test "$mingw32" != yes -a "$pthread" = no; then
3616 error_exit "pthread check failed" \
3617 "Make sure to have the pthread libs and headers installed."
3620 # check for pthread_setname_np
3621 pthread_setname_np=no
3622 cat > $TMPC << EOF
3623 #include <pthread.h>
3625 static void *f(void *p) { return NULL; }
3626 int main(void)
3628 pthread_t thread;
3629 pthread_create(&thread, 0, f, 0);
3630 pthread_setname_np(thread, "QEMU");
3631 return 0;
3634 if compile_prog "" "$pthread_lib" ; then
3635 pthread_setname_np=yes
3638 ##########################################
3639 # rbd probe
3640 if test "$rbd" != "no" ; then
3641 cat > $TMPC <<EOF
3642 #include <stdio.h>
3643 #include <rbd/librbd.h>
3644 int main(void) {
3645 rados_t cluster;
3646 rados_create(&cluster, NULL);
3647 return 0;
3650 rbd_libs="-lrbd -lrados"
3651 if compile_prog "" "$rbd_libs" ; then
3652 rbd=yes
3653 else
3654 if test "$rbd" = "yes" ; then
3655 feature_not_found "rados block device" "Install librbd/ceph devel"
3657 rbd=no
3661 ##########################################
3662 # libssh2 probe
3663 min_libssh2_version=1.2.8
3664 if test "$libssh2" != "no" ; then
3665 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3666 libssh2_cflags=$($pkg_config libssh2 --cflags)
3667 libssh2_libs=$($pkg_config libssh2 --libs)
3668 libssh2=yes
3669 else
3670 if test "$libssh2" = "yes" ; then
3671 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3673 libssh2=no
3677 ##########################################
3678 # libssh2_sftp_fsync probe
3680 if test "$libssh2" = "yes"; then
3681 cat > $TMPC <<EOF
3682 #include <stdio.h>
3683 #include <libssh2.h>
3684 #include <libssh2_sftp.h>
3685 int main(void) {
3686 LIBSSH2_SESSION *session;
3687 LIBSSH2_SFTP *sftp;
3688 LIBSSH2_SFTP_HANDLE *sftp_handle;
3689 session = libssh2_session_init ();
3690 sftp = libssh2_sftp_init (session);
3691 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3692 libssh2_sftp_fsync (sftp_handle);
3693 return 0;
3696 # libssh2_cflags/libssh2_libs defined in previous test.
3697 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3698 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3702 ##########################################
3703 # linux-aio probe
3705 if test "$linux_aio" != "no" ; then
3706 cat > $TMPC <<EOF
3707 #include <libaio.h>
3708 #include <sys/eventfd.h>
3709 #include <stddef.h>
3710 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3712 if compile_prog "" "-laio" ; then
3713 linux_aio=yes
3714 else
3715 if test "$linux_aio" = "yes" ; then
3716 feature_not_found "linux AIO" "Install libaio devel"
3718 linux_aio=no
3722 ##########################################
3723 # TPM passthrough is only on x86 Linux
3725 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3726 tpm_passthrough=$tpm
3727 else
3728 tpm_passthrough=no
3731 # TPM emulator is for all posix systems
3732 if test "$mingw32" != "yes"; then
3733 tpm_emulator=$tpm
3734 else
3735 tpm_emulator=no
3737 ##########################################
3738 # attr probe
3740 if test "$attr" != "no" ; then
3741 cat > $TMPC <<EOF
3742 #include <stdio.h>
3743 #include <sys/types.h>
3744 #ifdef CONFIG_LIBATTR
3745 #include <attr/xattr.h>
3746 #else
3747 #include <sys/xattr.h>
3748 #endif
3749 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3751 if compile_prog "" "" ; then
3752 attr=yes
3753 # Older distros have <attr/xattr.h>, and need -lattr:
3754 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3755 attr=yes
3756 LIBS="-lattr $LIBS"
3757 libattr=yes
3758 else
3759 if test "$attr" = "yes" ; then
3760 feature_not_found "ATTR" "Install libc6 or libattr devel"
3762 attr=no
3766 ##########################################
3767 # iovec probe
3768 cat > $TMPC <<EOF
3769 #include <sys/types.h>
3770 #include <sys/uio.h>
3771 #include <unistd.h>
3772 int main(void) { return sizeof(struct iovec); }
3774 iovec=no
3775 if compile_prog "" "" ; then
3776 iovec=yes
3779 ##########################################
3780 # preadv probe
3781 cat > $TMPC <<EOF
3782 #include <sys/types.h>
3783 #include <sys/uio.h>
3784 #include <unistd.h>
3785 int main(void) { return preadv(0, 0, 0, 0); }
3787 preadv=no
3788 if compile_prog "" "" ; then
3789 preadv=yes
3792 ##########################################
3793 # fdt probe
3794 # fdt support is mandatory for at least some target architectures,
3795 # so insist on it if we're building those system emulators.
3796 fdt_required=no
3797 for target in $target_list; do
3798 case $target in
3799 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
3800 fdt_required=yes
3802 esac
3803 done
3805 if test "$fdt_required" = "yes"; then
3806 if test "$fdt" = "no"; then
3807 error_exit "fdt disabled but some requested targets require it." \
3808 "You can turn off fdt only if you also disable all the system emulation" \
3809 "targets which need it (by specifying a cut down --target-list)."
3811 fdt=yes
3814 if test "$fdt" != "no" ; then
3815 fdt_libs="-lfdt"
3816 # explicitly check for libfdt_env.h as it is missing in some stable installs
3817 # and test for required functions to make sure we are on a version >= 1.4.2
3818 cat > $TMPC << EOF
3819 #include <libfdt.h>
3820 #include <libfdt_env.h>
3821 int main(void) { fdt_first_subnode(0, 0); return 0; }
3823 if compile_prog "" "$fdt_libs" ; then
3824 # system DTC is good - use it
3825 fdt=system
3826 else
3827 # have GIT checkout, so activate dtc submodule
3828 if test -e "${source_path}/.git" ; then
3829 git_submodules="${git_submodules} dtc"
3831 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
3832 fdt=git
3833 mkdir -p dtc
3834 if [ "$pwd_is_source_path" != "y" ] ; then
3835 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3836 symlink "$source_path/dtc/scripts" "dtc/scripts"
3838 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3839 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
3840 fdt_libs="$fdt_libs"
3841 elif test "$fdt" = "yes" ; then
3842 # Not a git build & no libfdt found, prompt for system install
3843 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
3844 "Please install the DTC (libfdt) devel package"
3845 else
3846 # don't have and don't want
3847 fdt_libs=
3848 fdt=no
3853 libs_softmmu="$libs_softmmu $fdt_libs"
3855 ##########################################
3856 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3858 if test "$opengl" != "no" ; then
3859 opengl_pkgs="epoxy gbm"
3860 if $pkg_config $opengl_pkgs; then
3861 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3862 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
3863 opengl=yes
3864 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3865 gtk_gl="yes"
3867 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
3868 else
3869 if test "$opengl" = "yes" ; then
3870 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3872 opengl_cflags=""
3873 opengl_libs=""
3874 opengl=no
3878 if test "$opengl" = "yes"; then
3879 cat > $TMPC << EOF
3880 #include <epoxy/egl.h>
3881 #ifndef EGL_MESA_image_dma_buf_export
3882 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3883 #endif
3884 int main(void) { return 0; }
3886 if compile_prog "" "" ; then
3887 opengl_dmabuf=yes
3891 ##########################################
3892 # libxml2 probe
3893 if test "$libxml2" != "no" ; then
3894 if $pkg_config --exists libxml-2.0; then
3895 libxml2="yes"
3896 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3897 libxml2_libs=$($pkg_config --libs libxml-2.0)
3898 else
3899 if test "$libxml2" = "yes"; then
3900 feature_not_found "libxml2" "Install libxml2 devel"
3902 libxml2="no"
3906 ##########################################
3907 # glusterfs probe
3908 if test "$glusterfs" != "no" ; then
3909 if $pkg_config --atleast-version=3 glusterfs-api; then
3910 glusterfs="yes"
3911 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3912 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3913 if $pkg_config --atleast-version=4 glusterfs-api; then
3914 glusterfs_xlator_opt="yes"
3916 if $pkg_config --atleast-version=5 glusterfs-api; then
3917 glusterfs_discard="yes"
3919 if $pkg_config --atleast-version=6 glusterfs-api; then
3920 glusterfs_fallocate="yes"
3921 glusterfs_zerofill="yes"
3923 else
3924 if test "$glusterfs" = "yes" ; then
3925 feature_not_found "GlusterFS backend support" \
3926 "Install glusterfs-api devel >= 3"
3928 glusterfs="no"
3932 # Check for inotify functions when we are building linux-user
3933 # emulator. This is done because older glibc versions don't
3934 # have syscall stubs for these implemented. In that case we
3935 # don't provide them even if kernel supports them.
3937 inotify=no
3938 cat > $TMPC << EOF
3939 #include <sys/inotify.h>
3942 main(void)
3944 /* try to start inotify */
3945 return inotify_init();
3948 if compile_prog "" "" ; then
3949 inotify=yes
3952 inotify1=no
3953 cat > $TMPC << EOF
3954 #include <sys/inotify.h>
3957 main(void)
3959 /* try to start inotify */
3960 return inotify_init1(0);
3963 if compile_prog "" "" ; then
3964 inotify1=yes
3967 # check if pipe2 is there
3968 pipe2=no
3969 cat > $TMPC << EOF
3970 #include <unistd.h>
3971 #include <fcntl.h>
3973 int main(void)
3975 int pipefd[2];
3976 return pipe2(pipefd, O_CLOEXEC);
3979 if compile_prog "" "" ; then
3980 pipe2=yes
3983 # check if accept4 is there
3984 accept4=no
3985 cat > $TMPC << EOF
3986 #include <sys/socket.h>
3987 #include <stddef.h>
3989 int main(void)
3991 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3992 return 0;
3995 if compile_prog "" "" ; then
3996 accept4=yes
3999 # check if tee/splice is there. vmsplice was added same time.
4000 splice=no
4001 cat > $TMPC << EOF
4002 #include <unistd.h>
4003 #include <fcntl.h>
4004 #include <limits.h>
4006 int main(void)
4008 int len, fd = 0;
4009 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4010 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4011 return 0;
4014 if compile_prog "" "" ; then
4015 splice=yes
4018 ##########################################
4019 # libnuma probe
4021 if test "$numa" != "no" ; then
4022 cat > $TMPC << EOF
4023 #include <numa.h>
4024 int main(void) { return numa_available(); }
4027 if compile_prog "" "-lnuma" ; then
4028 numa=yes
4029 libs_softmmu="-lnuma $libs_softmmu"
4030 else
4031 if test "$numa" = "yes" ; then
4032 feature_not_found "numa" "install numactl devel"
4034 numa=no
4038 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4039 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4040 exit 1
4043 # Even if malloc_trim() is available, these non-libc memory allocators
4044 # do not support it.
4045 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4046 if test "$malloc_trim" = "yes" ; then
4047 echo "Disabling malloc_trim with non-libc memory allocator"
4049 malloc_trim="no"
4052 #######################################
4053 # malloc_trim
4055 if test "$malloc_trim" != "no" ; then
4056 cat > $TMPC << EOF
4057 #include <malloc.h>
4058 int main(void) { malloc_trim(0); return 0; }
4060 if compile_prog "" "" ; then
4061 malloc_trim="yes"
4062 else
4063 malloc_trim="no"
4067 ##########################################
4068 # tcmalloc probe
4070 if test "$tcmalloc" = "yes" ; then
4071 cat > $TMPC << EOF
4072 #include <stdlib.h>
4073 int main(void) { malloc(1); return 0; }
4076 if compile_prog "" "-ltcmalloc" ; then
4077 LIBS="-ltcmalloc $LIBS"
4078 else
4079 feature_not_found "tcmalloc" "install gperftools devel"
4083 ##########################################
4084 # jemalloc probe
4086 if test "$jemalloc" = "yes" ; then
4087 cat > $TMPC << EOF
4088 #include <stdlib.h>
4089 int main(void) { malloc(1); return 0; }
4092 if compile_prog "" "-ljemalloc" ; then
4093 LIBS="-ljemalloc $LIBS"
4094 else
4095 feature_not_found "jemalloc" "install jemalloc devel"
4099 ##########################################
4100 # signalfd probe
4101 signalfd="no"
4102 cat > $TMPC << EOF
4103 #include <unistd.h>
4104 #include <sys/syscall.h>
4105 #include <signal.h>
4106 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4109 if compile_prog "" "" ; then
4110 signalfd=yes
4113 # check if eventfd is supported
4114 eventfd=no
4115 cat > $TMPC << EOF
4116 #include <sys/eventfd.h>
4118 int main(void)
4120 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4123 if compile_prog "" "" ; then
4124 eventfd=yes
4127 # check if memfd is supported
4128 memfd=no
4129 cat > $TMPC << EOF
4130 #include <sys/mman.h>
4132 int main(void)
4134 return memfd_create("foo", MFD_ALLOW_SEALING);
4137 if compile_prog "" "" ; then
4138 memfd=yes
4141 # check for usbfs
4142 have_usbfs=no
4143 if test "$linux_user" = "yes"; then
4144 if check_include linux/usbdevice_fs.h; then
4145 have_usbfs=yes
4147 have_usbfs=yes
4150 # check for fallocate
4151 fallocate=no
4152 cat > $TMPC << EOF
4153 #include <fcntl.h>
4155 int main(void)
4157 fallocate(0, 0, 0, 0);
4158 return 0;
4161 if compile_prog "" "" ; then
4162 fallocate=yes
4165 # check for fallocate hole punching
4166 fallocate_punch_hole=no
4167 cat > $TMPC << EOF
4168 #include <fcntl.h>
4169 #include <linux/falloc.h>
4171 int main(void)
4173 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4174 return 0;
4177 if compile_prog "" "" ; then
4178 fallocate_punch_hole=yes
4181 # check that fallocate supports range zeroing inside the file
4182 fallocate_zero_range=no
4183 cat > $TMPC << EOF
4184 #include <fcntl.h>
4185 #include <linux/falloc.h>
4187 int main(void)
4189 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4190 return 0;
4193 if compile_prog "" "" ; then
4194 fallocate_zero_range=yes
4197 # check for posix_fallocate
4198 posix_fallocate=no
4199 cat > $TMPC << EOF
4200 #include <fcntl.h>
4202 int main(void)
4204 posix_fallocate(0, 0, 0);
4205 return 0;
4208 if compile_prog "" "" ; then
4209 posix_fallocate=yes
4212 # check for sync_file_range
4213 sync_file_range=no
4214 cat > $TMPC << EOF
4215 #include <fcntl.h>
4217 int main(void)
4219 sync_file_range(0, 0, 0, 0);
4220 return 0;
4223 if compile_prog "" "" ; then
4224 sync_file_range=yes
4227 # check for linux/fiemap.h and FS_IOC_FIEMAP
4228 fiemap=no
4229 cat > $TMPC << EOF
4230 #include <sys/ioctl.h>
4231 #include <linux/fs.h>
4232 #include <linux/fiemap.h>
4234 int main(void)
4236 ioctl(0, FS_IOC_FIEMAP, 0);
4237 return 0;
4240 if compile_prog "" "" ; then
4241 fiemap=yes
4244 # check for dup3
4245 dup3=no
4246 cat > $TMPC << EOF
4247 #include <unistd.h>
4249 int main(void)
4251 dup3(0, 0, 0);
4252 return 0;
4255 if compile_prog "" "" ; then
4256 dup3=yes
4259 # check for ppoll support
4260 ppoll=no
4261 cat > $TMPC << EOF
4262 #include <poll.h>
4264 int main(void)
4266 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4267 ppoll(&pfd, 1, 0, 0);
4268 return 0;
4271 if compile_prog "" "" ; then
4272 ppoll=yes
4275 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4276 prctl_pr_set_timerslack=no
4277 cat > $TMPC << EOF
4278 #include <sys/prctl.h>
4280 int main(void)
4282 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4283 return 0;
4286 if compile_prog "" "" ; then
4287 prctl_pr_set_timerslack=yes
4290 # check for epoll support
4291 epoll=no
4292 cat > $TMPC << EOF
4293 #include <sys/epoll.h>
4295 int main(void)
4297 epoll_create(0);
4298 return 0;
4301 if compile_prog "" "" ; then
4302 epoll=yes
4305 # epoll_create1 is a later addition
4306 # so we must check separately for its presence
4307 epoll_create1=no
4308 cat > $TMPC << EOF
4309 #include <sys/epoll.h>
4311 int main(void)
4313 /* Note that we use epoll_create1 as a value, not as
4314 * a function being called. This is necessary so that on
4315 * old SPARC glibc versions where the function was present in
4316 * the library but not declared in the header file we will
4317 * fail the configure check. (Otherwise we will get a compiler
4318 * warning but not an error, and will proceed to fail the
4319 * qemu compile where we compile with -Werror.)
4321 return (int)(uintptr_t)&epoll_create1;
4324 if compile_prog "" "" ; then
4325 epoll_create1=yes
4328 # check for sendfile support
4329 sendfile=no
4330 cat > $TMPC << EOF
4331 #include <sys/sendfile.h>
4333 int main(void)
4335 return sendfile(0, 0, 0, 0);
4338 if compile_prog "" "" ; then
4339 sendfile=yes
4342 # check for timerfd support (glibc 2.8 and newer)
4343 timerfd=no
4344 cat > $TMPC << EOF
4345 #include <sys/timerfd.h>
4347 int main(void)
4349 return(timerfd_create(CLOCK_REALTIME, 0));
4352 if compile_prog "" "" ; then
4353 timerfd=yes
4356 # check for setns and unshare support
4357 setns=no
4358 cat > $TMPC << EOF
4359 #include <sched.h>
4361 int main(void)
4363 int ret;
4364 ret = setns(0, 0);
4365 ret = unshare(0);
4366 return ret;
4369 if compile_prog "" "" ; then
4370 setns=yes
4373 # clock_adjtime probe
4374 clock_adjtime=no
4375 cat > $TMPC <<EOF
4376 #include <time.h>
4378 int main(void)
4380 return clock_adjtime(0, 0);
4383 clock_adjtime=no
4384 if compile_prog "" "" ; then
4385 clock_adjtime=yes
4388 # syncfs probe
4389 syncfs=no
4390 cat > $TMPC <<EOF
4391 #include <unistd.h>
4393 int main(void)
4395 return syncfs(0);
4398 syncfs=no
4399 if compile_prog "" "" ; then
4400 syncfs=yes
4403 # Check if tools are available to build documentation.
4404 if test "$docs" != "no" ; then
4405 if has makeinfo && has pod2man; then
4406 docs=yes
4407 else
4408 if test "$docs" = "yes" ; then
4409 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4411 docs=no
4415 # Search for bswap_32 function
4416 byteswap_h=no
4417 cat > $TMPC << EOF
4418 #include <byteswap.h>
4419 int main(void) { return bswap_32(0); }
4421 if compile_prog "" "" ; then
4422 byteswap_h=yes
4425 # Search for bswap32 function
4426 bswap_h=no
4427 cat > $TMPC << EOF
4428 #include <sys/endian.h>
4429 #include <sys/types.h>
4430 #include <machine/bswap.h>
4431 int main(void) { return bswap32(0); }
4433 if compile_prog "" "" ; then
4434 bswap_h=yes
4437 ##########################################
4438 # Do we have libiscsi >= 1.9.0
4439 if test "$libiscsi" != "no" ; then
4440 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4441 libiscsi="yes"
4442 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4443 libiscsi_libs=$($pkg_config --libs libiscsi)
4444 else
4445 if test "$libiscsi" = "yes" ; then
4446 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4448 libiscsi="no"
4452 ##########################################
4453 # Do we need libm
4454 cat > $TMPC << EOF
4455 #include <math.h>
4456 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4458 if compile_prog "" "" ; then
4460 elif compile_prog "" "-lm" ; then
4461 LIBS="-lm $LIBS"
4462 libs_qga="-lm $libs_qga"
4463 else
4464 error_exit "libm check failed"
4467 ##########################################
4468 # Do we need librt
4469 # uClibc provides 2 versions of clock_gettime(), one with realtime
4470 # support and one without. This means that the clock_gettime() don't
4471 # need -lrt. We still need it for timer_create() so we check for this
4472 # function in addition.
4473 cat > $TMPC <<EOF
4474 #include <signal.h>
4475 #include <time.h>
4476 int main(void) {
4477 timer_create(CLOCK_REALTIME, NULL, NULL);
4478 return clock_gettime(CLOCK_REALTIME, NULL);
4482 if compile_prog "" "" ; then
4484 # we need pthread for static linking. use previous pthread test result
4485 elif compile_prog "" "$pthread_lib -lrt" ; then
4486 LIBS="$LIBS -lrt"
4487 libs_qga="$libs_qga -lrt"
4490 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4491 "$haiku" != "yes" ; then
4492 libs_softmmu="-lutil $libs_softmmu"
4495 ##########################################
4496 # spice probe
4497 if test "$spice" != "no" ; then
4498 cat > $TMPC << EOF
4499 #include <spice.h>
4500 int main(void) { spice_server_new(); return 0; }
4502 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4503 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4504 if $pkg_config --atleast-version=0.12.0 spice-server && \
4505 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4506 compile_prog "$spice_cflags" "$spice_libs" ; then
4507 spice="yes"
4508 libs_softmmu="$libs_softmmu $spice_libs"
4509 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4510 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4511 spice_server_version=$($pkg_config --modversion spice-server)
4512 else
4513 if test "$spice" = "yes" ; then
4514 feature_not_found "spice" \
4515 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4517 spice="no"
4521 # check for smartcard support
4522 if test "$smartcard" != "no"; then
4523 if $pkg_config --atleast-version=2.5.1 libcacard; then
4524 libcacard_cflags=$($pkg_config --cflags libcacard)
4525 libcacard_libs=$($pkg_config --libs libcacard)
4526 smartcard="yes"
4527 else
4528 if test "$smartcard" = "yes"; then
4529 feature_not_found "smartcard" "Install libcacard devel"
4531 smartcard="no"
4535 # check for libusb
4536 if test "$libusb" != "no" ; then
4537 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4538 libusb="yes"
4539 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4540 libusb_libs=$($pkg_config --libs libusb-1.0)
4541 else
4542 if test "$libusb" = "yes"; then
4543 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4545 libusb="no"
4549 # check for usbredirparser for usb network redirection support
4550 if test "$usb_redir" != "no" ; then
4551 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4552 usb_redir="yes"
4553 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4554 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4555 else
4556 if test "$usb_redir" = "yes"; then
4557 feature_not_found "usb-redir" "Install usbredir devel"
4559 usb_redir="no"
4563 ##########################################
4564 # check if we have VSS SDK headers for win
4566 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4567 case "$vss_win32_sdk" in
4568 "") vss_win32_include="-isystem $source_path" ;;
4569 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4570 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4571 vss_win32_include="-isystem $source_path/.sdk/vss"
4572 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4574 *) vss_win32_include="-isystem $vss_win32_sdk"
4575 esac
4576 cat > $TMPC << EOF
4577 #define __MIDL_user_allocate_free_DEFINED__
4578 #include <inc/win2003/vss.h>
4579 int main(void) { return VSS_CTX_BACKUP; }
4581 if compile_prog "$vss_win32_include" "" ; then
4582 guest_agent_with_vss="yes"
4583 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4584 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4585 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4586 else
4587 if test "$vss_win32_sdk" != "" ; then
4588 echo "ERROR: Please download and install Microsoft VSS SDK:"
4589 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4590 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4591 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4592 echo "ERROR: The headers are extracted in the directory \`inc'."
4593 feature_not_found "VSS support"
4595 guest_agent_with_vss="no"
4599 ##########################################
4600 # lookup Windows platform SDK (if not specified)
4601 # The SDK is needed only to build .tlb (type library) file of guest agent
4602 # VSS provider from the source. It is usually unnecessary because the
4603 # pre-compiled .tlb file is included.
4605 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4606 if test -z "$win_sdk"; then
4607 programfiles="$PROGRAMFILES"
4608 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4609 if test -n "$programfiles"; then
4610 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4611 else
4612 feature_not_found "Windows SDK"
4614 elif test "$win_sdk" = "no"; then
4615 win_sdk=""
4619 ##########################################
4620 # check if mingw environment provides a recent ntddscsi.h
4621 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4622 cat > $TMPC << EOF
4623 #include <windows.h>
4624 #include <ntddscsi.h>
4625 int main(void) {
4626 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4627 #error Missing required ioctl definitions
4628 #endif
4629 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4630 return addr.Lun;
4633 if compile_prog "" "" ; then
4634 guest_agent_ntddscsi=yes
4635 libs_qga="-lsetupapi $libs_qga"
4639 ##########################################
4640 # virgl renderer probe
4642 if test "$virglrenderer" != "no" ; then
4643 cat > $TMPC << EOF
4644 #include <virglrenderer.h>
4645 int main(void) { virgl_renderer_poll(); return 0; }
4647 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4648 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4649 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4650 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4651 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4652 virglrenderer="yes"
4653 else
4654 if test "$virglrenderer" = "yes" ; then
4655 feature_not_found "virglrenderer"
4657 virglrenderer="no"
4661 ##########################################
4662 # capstone
4664 case "$capstone" in
4665 "" | yes)
4666 if $pkg_config capstone; then
4667 capstone=system
4668 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then
4669 capstone=git
4670 elif test -e "${source_path}/capstone/Makefile" ; then
4671 capstone=internal
4672 elif test -z "$capstone" ; then
4673 capstone=no
4674 else
4675 feature_not_found "capstone" "Install capstone devel or git submodule"
4679 system)
4680 if ! $pkg_config capstone; then
4681 feature_not_found "capstone" "Install capstone devel"
4684 esac
4686 case "$capstone" in
4687 git | internal)
4688 if test "$capstone" = git; then
4689 git_submodules="${git_submodules} capstone"
4691 mkdir -p capstone
4692 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
4693 if test "$mingw32" = "yes"; then
4694 LIBCAPSTONE=capstone.lib
4695 else
4696 LIBCAPSTONE=libcapstone.a
4698 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS"
4701 system)
4702 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
4703 LIBS="$($pkg_config --libs capstone) $LIBS"
4709 error_exit "Unknown state for capstone: $capstone"
4711 esac
4713 ##########################################
4714 # check if we have fdatasync
4716 fdatasync=no
4717 cat > $TMPC << EOF
4718 #include <unistd.h>
4719 int main(void) {
4720 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4721 return fdatasync(0);
4722 #else
4723 #error Not supported
4724 #endif
4727 if compile_prog "" "" ; then
4728 fdatasync=yes
4731 ##########################################
4732 # check if we have madvise
4734 madvise=no
4735 cat > $TMPC << EOF
4736 #include <sys/types.h>
4737 #include <sys/mman.h>
4738 #include <stddef.h>
4739 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4741 if compile_prog "" "" ; then
4742 madvise=yes
4745 ##########################################
4746 # check if we have posix_madvise
4748 posix_madvise=no
4749 cat > $TMPC << EOF
4750 #include <sys/mman.h>
4751 #include <stddef.h>
4752 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4754 if compile_prog "" "" ; then
4755 posix_madvise=yes
4758 ##########################################
4759 # check if we have posix_memalign()
4761 posix_memalign=no
4762 cat > $TMPC << EOF
4763 #include <stdlib.h>
4764 int main(void) {
4765 void *p;
4766 return posix_memalign(&p, 8, 8);
4769 if compile_prog "" "" ; then
4770 posix_memalign=yes
4773 ##########################################
4774 # check if we have posix_syslog
4776 posix_syslog=no
4777 cat > $TMPC << EOF
4778 #include <syslog.h>
4779 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4781 if compile_prog "" "" ; then
4782 posix_syslog=yes
4785 ##########################################
4786 # check if we have sem_timedwait
4788 sem_timedwait=no
4789 cat > $TMPC << EOF
4790 #include <semaphore.h>
4791 int main(void) { return sem_timedwait(0, 0); }
4793 if compile_prog "" "" ; then
4794 sem_timedwait=yes
4797 ##########################################
4798 # check if we have strchrnul
4800 strchrnul=no
4801 cat > $TMPC << EOF
4802 #include <string.h>
4803 int main(void);
4804 // Use a haystack that the compiler shouldn't be able to constant fold
4805 char *haystack = (char*)&main;
4806 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4808 if compile_prog "" "" ; then
4809 strchrnul=yes
4812 ##########################################
4813 # check if trace backend exists
4815 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4816 if test "$?" -ne 0 ; then
4817 error_exit "invalid trace backends" \
4818 "Please choose supported trace backends."
4821 ##########################################
4822 # For 'ust' backend, test if ust headers are present
4823 if have_backend "ust"; then
4824 cat > $TMPC << EOF
4825 #include <lttng/tracepoint.h>
4826 int main(void) { return 0; }
4828 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4829 if $pkg_config lttng-ust --exists; then
4830 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4831 else
4832 lttng_ust_libs="-llttng-ust -ldl"
4834 if $pkg_config liburcu-bp --exists; then
4835 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4836 else
4837 urcu_bp_libs="-lurcu-bp"
4840 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4841 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4842 else
4843 error_exit "Trace backend 'ust' missing lttng-ust header files"
4847 ##########################################
4848 # For 'dtrace' backend, test if 'dtrace' command is present
4849 if have_backend "dtrace"; then
4850 if ! has 'dtrace' ; then
4851 error_exit "dtrace command is not found in PATH $PATH"
4853 trace_backend_stap="no"
4854 if has 'stap' ; then
4855 trace_backend_stap="yes"
4859 ##########################################
4860 # check and set a backend for coroutine
4862 # We prefer ucontext, but it's not always possible. The fallback
4863 # is sigcontext. On Windows the only valid backend is the Windows
4864 # specific one.
4866 ucontext_works=no
4867 if test "$darwin" != "yes"; then
4868 cat > $TMPC << EOF
4869 #include <ucontext.h>
4870 #ifdef __stub_makecontext
4871 #error Ignoring glibc stub makecontext which will always fail
4872 #endif
4873 int main(void) { makecontext(0, 0, 0); return 0; }
4875 if compile_prog "" "" ; then
4876 ucontext_works=yes
4880 if test "$coroutine" = ""; then
4881 if test "$mingw32" = "yes"; then
4882 coroutine=win32
4883 elif test "$ucontext_works" = "yes"; then
4884 coroutine=ucontext
4885 else
4886 coroutine=sigaltstack
4888 else
4889 case $coroutine in
4890 windows)
4891 if test "$mingw32" != "yes"; then
4892 error_exit "'windows' coroutine backend only valid for Windows"
4894 # Unfortunately the user visible backend name doesn't match the
4895 # coroutine-*.c filename for this case, so we have to adjust it here.
4896 coroutine=win32
4898 ucontext)
4899 if test "$ucontext_works" != "yes"; then
4900 feature_not_found "ucontext"
4903 sigaltstack)
4904 if test "$mingw32" = "yes"; then
4905 error_exit "only the 'windows' coroutine backend is valid for Windows"
4909 error_exit "unknown coroutine backend $coroutine"
4911 esac
4914 if test "$coroutine_pool" = ""; then
4915 coroutine_pool=yes
4918 if test "$debug_stack_usage" = "yes"; then
4919 if test "$coroutine_pool" = "yes"; then
4920 echo "WARN: disabling coroutine pool for stack usage debugging"
4921 coroutine_pool=no
4926 ##########################################
4927 # check if we have open_by_handle_at
4929 open_by_handle_at=no
4930 cat > $TMPC << EOF
4931 #include <fcntl.h>
4932 #if !defined(AT_EMPTY_PATH)
4933 # error missing definition
4934 #else
4935 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4936 #endif
4938 if compile_prog "" "" ; then
4939 open_by_handle_at=yes
4942 ########################################
4943 # check if we have linux/magic.h
4945 linux_magic_h=no
4946 cat > $TMPC << EOF
4947 #include <linux/magic.h>
4948 int main(void) {
4949 return 0;
4952 if compile_prog "" "" ; then
4953 linux_magic_h=yes
4956 ########################################
4957 # check whether we can disable warning option with a pragma (this is needed
4958 # to silence warnings in the headers of some versions of external libraries).
4959 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4960 # only a warning.
4962 # If we can't selectively disable warning in the code, disable -Werror so that
4963 # the build doesn't fail anyway.
4965 pragma_disable_unused_but_set=no
4966 cat > $TMPC << EOF
4967 #pragma GCC diagnostic push
4968 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4969 #pragma GCC diagnostic pop
4971 int main(void) {
4972 return 0;
4975 if compile_prog "-Werror" "" ; then
4976 pragma_diagnostic_available=yes
4977 else
4978 werror=no
4981 ########################################
4982 # check if we have valgrind/valgrind.h
4984 valgrind_h=no
4985 cat > $TMPC << EOF
4986 #include <valgrind/valgrind.h>
4987 int main(void) {
4988 return 0;
4991 if compile_prog "" "" ; then
4992 valgrind_h=yes
4995 ########################################
4996 # check if environ is declared
4998 has_environ=no
4999 cat > $TMPC << EOF
5000 #include <unistd.h>
5001 int main(void) {
5002 environ = 0;
5003 return 0;
5006 if compile_prog "" "" ; then
5007 has_environ=yes
5010 ########################################
5011 # check if cpuid.h is usable.
5013 cat > $TMPC << EOF
5014 #include <cpuid.h>
5015 int main(void) {
5016 unsigned a, b, c, d;
5017 int max = __get_cpuid_max(0, 0);
5019 if (max >= 1) {
5020 __cpuid(1, a, b, c, d);
5023 if (max >= 7) {
5024 __cpuid_count(7, 0, a, b, c, d);
5027 return 0;
5030 if compile_prog "" "" ; then
5031 cpuid_h=yes
5034 ##########################################
5035 # avx2 optimization requirement check
5037 # There is no point enabling this if cpuid.h is not usable,
5038 # since we won't be able to select the new routines.
5040 if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then
5041 cat > $TMPC << EOF
5042 #pragma GCC push_options
5043 #pragma GCC target("avx2")
5044 #include <cpuid.h>
5045 #include <immintrin.h>
5046 static int bar(void *a) {
5047 __m256i x = *(__m256i *)a;
5048 return _mm256_testz_si256(x, x);
5050 int main(int argc, char *argv[]) { return bar(argv[0]); }
5052 if compile_object "" ; then
5053 avx2_opt="yes"
5054 else
5055 avx2_opt="no"
5059 ########################################
5060 # check if __[u]int128_t is usable.
5062 int128=no
5063 cat > $TMPC << EOF
5064 #if defined(__clang_major__) && defined(__clang_minor__)
5065 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
5066 # error __int128_t does not work in CLANG before 3.2
5067 # endif
5068 #endif
5069 __int128_t a;
5070 __uint128_t b;
5071 int main (void) {
5072 a = a + b;
5073 b = a * b;
5074 a = a * a;
5075 return 0;
5078 if compile_prog "" "" ; then
5079 int128=yes
5082 #########################################
5083 # See if 128-bit atomic operations are supported.
5085 atomic128=no
5086 if test "$int128" = "yes"; then
5087 cat > $TMPC << EOF
5088 int main(void)
5090 unsigned __int128 x = 0, y = 0;
5091 y = __atomic_load_16(&x, 0);
5092 __atomic_store_16(&x, y, 0);
5093 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5094 return 0;
5097 if compile_prog "" "" ; then
5098 atomic128=yes
5102 cmpxchg128=no
5103 if test "$int128" = yes -a "$atomic128" = no; then
5104 cat > $TMPC << EOF
5105 int main(void)
5107 unsigned __int128 x = 0, y = 0;
5108 __sync_val_compare_and_swap_16(&x, y, x);
5109 return 0;
5112 if compile_prog "" "" ; then
5113 cmpxchg128=yes
5117 #########################################
5118 # See if 64-bit atomic operations are supported.
5119 # Note that without __atomic builtins, we can only
5120 # assume atomic loads/stores max at pointer size.
5122 cat > $TMPC << EOF
5123 #include <stdint.h>
5124 int main(void)
5126 uint64_t x = 0, y = 0;
5127 #ifdef __ATOMIC_RELAXED
5128 y = __atomic_load_8(&x, 0);
5129 __atomic_store_8(&x, y, 0);
5130 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5131 __atomic_exchange_8(&x, y, 0);
5132 __atomic_fetch_add_8(&x, y, 0);
5133 #else
5134 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5135 __sync_lock_test_and_set(&x, y);
5136 __sync_val_compare_and_swap(&x, y, 0);
5137 __sync_fetch_and_add(&x, y);
5138 #endif
5139 return 0;
5142 if compile_prog "" "" ; then
5143 atomic64=yes
5146 ########################################
5147 # See if 16-byte vector operations are supported.
5148 # Even without a vector unit the compiler may expand these.
5149 # There is a bug in old GCC for PPC that crashes here.
5150 # Unfortunately it's the system compiler for Centos 7.
5152 cat > $TMPC << EOF
5153 typedef unsigned char U1 __attribute__((vector_size(16)));
5154 typedef unsigned short U2 __attribute__((vector_size(16)));
5155 typedef unsigned int U4 __attribute__((vector_size(16)));
5156 typedef unsigned long long U8 __attribute__((vector_size(16)));
5157 typedef signed char S1 __attribute__((vector_size(16)));
5158 typedef signed short S2 __attribute__((vector_size(16)));
5159 typedef signed int S4 __attribute__((vector_size(16)));
5160 typedef signed long long S8 __attribute__((vector_size(16)));
5161 static U1 a1, b1;
5162 static U2 a2, b2;
5163 static U4 a4, b4;
5164 static U8 a8, b8;
5165 static S1 c1;
5166 static S2 c2;
5167 static S4 c4;
5168 static S8 c8;
5169 static int i;
5170 void helper(void *d, void *a, int shift, int i);
5171 void helper(void *d, void *a, int shift, int i)
5173 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5174 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5175 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5176 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5178 int main(void)
5180 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5181 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5182 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5183 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5184 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5185 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5186 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5187 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5188 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5189 return 0;
5193 vector16=no
5194 if compile_prog "" "" ; then
5195 vector16=yes
5198 ########################################
5199 # check if getauxval is available.
5201 getauxval=no
5202 cat > $TMPC << EOF
5203 #include <sys/auxv.h>
5204 int main(void) {
5205 return getauxval(AT_HWCAP) == 0;
5208 if compile_prog "" "" ; then
5209 getauxval=yes
5212 ########################################
5213 # check if ccache is interfering with
5214 # semantic analysis of macros
5216 unset CCACHE_CPP2
5217 ccache_cpp2=no
5218 cat > $TMPC << EOF
5219 static const int Z = 1;
5220 #define fn() ({ Z; })
5221 #define TAUT(X) ((X) == Z)
5222 #define PAREN(X, Y) (X == Y)
5223 #define ID(X) (X)
5224 int main(int argc, char *argv[])
5226 int x = 0, y = 0;
5227 x = ID(x);
5228 x = fn();
5229 fn();
5230 if (PAREN(x, y)) return 0;
5231 if (TAUT(Z)) return 0;
5232 return 0;
5236 if ! compile_object "-Werror"; then
5237 ccache_cpp2=yes
5240 #################################################
5241 # clang does not support glibc + FORTIFY_SOURCE.
5243 if test "$fortify_source" != "no"; then
5244 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5245 fortify_source="no";
5246 elif test -n "$cxx" && has $cxx &&
5247 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5248 fortify_source="no";
5249 else
5250 fortify_source="yes"
5254 ###############################################
5255 # Check if copy_file_range is provided by glibc
5256 have_copy_file_range=no
5257 cat > $TMPC << EOF
5258 #include <unistd.h>
5259 int main(void) {
5260 copy_file_range(0, NULL, 0, NULL, 0, 0);
5261 return 0;
5264 if compile_prog "" "" ; then
5265 have_copy_file_range=yes
5268 ##########################################
5269 # check if struct fsxattr is available via linux/fs.h
5271 have_fsxattr=no
5272 cat > $TMPC << EOF
5273 #include <linux/fs.h>
5274 struct fsxattr foo;
5275 int main(void) {
5276 return 0;
5279 if compile_prog "" "" ; then
5280 have_fsxattr=yes
5283 ##########################################
5284 # check for usable membarrier system call
5285 if test "$membarrier" = "yes"; then
5286 have_membarrier=no
5287 if test "$mingw32" = "yes" ; then
5288 have_membarrier=yes
5289 elif test "$linux" = "yes" ; then
5290 cat > $TMPC << EOF
5291 #include <linux/membarrier.h>
5292 #include <sys/syscall.h>
5293 #include <unistd.h>
5294 #include <stdlib.h>
5295 int main(void) {
5296 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5297 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5298 exit(0);
5301 if compile_prog "" "" ; then
5302 have_membarrier=yes
5305 if test "$have_membarrier" = "no"; then
5306 feature_not_found "membarrier" "membarrier system call not available"
5308 else
5309 # Do not enable it by default even for Mingw32, because it doesn't
5310 # work on Wine.
5311 membarrier=no
5314 ##########################################
5315 # check if rtnetlink.h exists and is useful
5316 have_rtnetlink=no
5317 cat > $TMPC << EOF
5318 #include <linux/rtnetlink.h>
5319 int main(void) {
5320 return IFLA_PROTO_DOWN;
5323 if compile_prog "" "" ; then
5324 have_rtnetlink=yes
5327 ##########################################
5328 # check for usable AF_VSOCK environment
5329 have_af_vsock=no
5330 cat > $TMPC << EOF
5331 #include <errno.h>
5332 #include <sys/types.h>
5333 #include <sys/socket.h>
5334 #if !defined(AF_VSOCK)
5335 # error missing AF_VSOCK flag
5336 #endif
5337 #include <linux/vm_sockets.h>
5338 int main(void) {
5339 int sock, ret;
5340 struct sockaddr_vm svm;
5341 socklen_t len = sizeof(svm);
5342 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5343 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5344 if ((ret == -1) && (errno == ENOTCONN)) {
5345 return 0;
5347 return -1;
5350 if compile_prog "" "" ; then
5351 have_af_vsock=yes
5354 ##########################################
5355 # check for usable AF_ALG environment
5356 hava_afalg=no
5357 cat > $TMPC << EOF
5358 #include <errno.h>
5359 #include <sys/types.h>
5360 #include <sys/socket.h>
5361 #include <linux/if_alg.h>
5362 int main(void) {
5363 int sock;
5364 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5365 return sock;
5368 if compile_prog "" "" ; then
5369 have_afalg=yes
5371 if test "$crypto_afalg" = "yes"
5372 then
5373 if test "$have_afalg" != "yes"
5374 then
5375 error_exit "AF_ALG requested but could not be detected"
5380 #################################################
5381 # Check to see if we have the Hypervisor framework
5382 if [ "$darwin" = "yes" ] ; then
5383 cat > $TMPC << EOF
5384 #include <Hypervisor/hv.h>
5385 int main() { return 0;}
5387 if ! compile_object ""; then
5388 hvf='no'
5389 else
5390 hvf='yes'
5391 LDFLAGS="-framework Hypervisor $LDFLAGS"
5395 #################################################
5396 # Sparc implicitly links with --relax, which is
5397 # incompatible with -r, so --no-relax should be
5398 # given. It does no harm to give it on other
5399 # platforms too.
5401 # Note: the prototype is needed since QEMU_CFLAGS
5402 # contains -Wmissing-prototypes
5403 cat > $TMPC << EOF
5404 extern int foo(void);
5405 int foo(void) { return 0; }
5407 if ! compile_object ""; then
5408 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5410 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5411 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5412 LD_REL_FLAGS=$i
5413 break
5415 done
5416 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5417 feature_not_found "modules" "Cannot find how to build relocatable objects"
5420 ##########################################
5421 # check for sysmacros.h
5423 have_sysmacros=no
5424 cat > $TMPC << EOF
5425 #include <sys/sysmacros.h>
5426 int main(void) {
5427 return makedev(0, 0);
5430 if compile_prog "" "" ; then
5431 have_sysmacros=yes
5434 ##########################################
5435 # Veritas HyperScale block driver VxHS
5436 # Check if libvxhs is installed
5438 if test "$vxhs" != "no" ; then
5439 cat > $TMPC <<EOF
5440 #include <stdint.h>
5441 #include <qnio/qnio_api.h>
5443 void *vxhs_callback;
5445 int main(void) {
5446 iio_init(QNIO_VERSION, vxhs_callback);
5447 return 0;
5450 vxhs_libs="-lvxhs -lssl"
5451 if compile_prog "" "$vxhs_libs" ; then
5452 vxhs=yes
5453 else
5454 if test "$vxhs" = "yes" ; then
5455 feature_not_found "vxhs block device" "Install libvxhs See github"
5457 vxhs=no
5461 ##########################################
5462 # check for _Static_assert()
5464 have_static_assert=no
5465 cat > $TMPC << EOF
5466 _Static_assert(1, "success");
5467 int main(void) {
5468 return 0;
5471 if compile_prog "" "" ; then
5472 have_static_assert=yes
5475 ##########################################
5476 # check for utmpx.h, it is missing e.g. on OpenBSD
5478 have_utmpx=no
5479 cat > $TMPC << EOF
5480 #include <utmpx.h>
5481 struct utmpx user_info;
5482 int main(void) {
5483 return 0;
5486 if compile_prog "" "" ; then
5487 have_utmpx=yes
5490 ##########################################
5491 # checks for sanitizers
5493 have_asan=no
5494 have_ubsan=no
5495 have_asan_iface_h=no
5496 have_asan_iface_fiber=no
5498 if test "$sanitizers" = "yes" ; then
5499 write_c_skeleton
5500 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5501 have_asan=yes
5504 # we could use a simple skeleton for flags checks, but this also
5505 # detect the static linking issue of ubsan, see also:
5506 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5507 cat > $TMPC << EOF
5508 #include <stdlib.h>
5509 int main(void) {
5510 void *tmp = malloc(10);
5511 return *(int *)(tmp + 2);
5514 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5515 have_ubsan=yes
5518 if check_include "sanitizer/asan_interface.h" ; then
5519 have_asan_iface_h=yes
5522 cat > $TMPC << EOF
5523 #include <sanitizer/asan_interface.h>
5524 int main(void) {
5525 __sanitizer_start_switch_fiber(0, 0, 0);
5526 return 0;
5529 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5530 have_asan_iface_fiber=yes
5534 ##########################################
5535 # Docker and cross-compiler support
5537 # This is specifically for building test
5538 # cases for foreign architectures, not
5539 # cross-compiling QEMU itself.
5541 if has "docker"; then
5542 docker=$($python $source_path/tests/docker/docker.py probe)
5545 ##########################################
5546 # check for libpmem
5548 if test "$libpmem" != "no"; then
5549 if $pkg_config --exists "libpmem"; then
5550 libpmem="yes"
5551 libpmem_libs=$($pkg_config --libs libpmem)
5552 libpmem_cflags=$($pkg_config --cflags libpmem)
5553 libs_softmmu="$libs_softmmu $libpmem_libs"
5554 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5555 else
5556 if test "$libpmem" = "yes" ; then
5557 feature_not_found "libpmem" "Install nvml or pmdk"
5559 libpmem="no"
5563 ##########################################
5564 # End of CC checks
5565 # After here, no more $cc or $ld runs
5567 write_c_skeleton
5569 if test "$gcov" = "yes" ; then
5570 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5571 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5572 elif test "$fortify_source" = "yes" ; then
5573 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5574 elif test "$debug" = "no"; then
5575 CFLAGS="-O2 $CFLAGS"
5578 if test "$have_asan" = "yes"; then
5579 CFLAGS="-fsanitize=address $CFLAGS"
5580 if test "$have_asan_iface_h" = "no" ; then
5581 echo "ASAN build enabled, but ASAN header missing." \
5582 "Without code annotation, the report may be inferior."
5583 elif test "$have_asan_iface_fiber" = "no" ; then
5584 echo "ASAN build enabled, but ASAN header is too old." \
5585 "Without code annotation, the report may be inferior."
5588 if test "$have_ubsan" = "yes"; then
5589 CFLAGS="-fsanitize=undefined $CFLAGS"
5592 ##########################################
5593 # Do we have libnfs
5594 if test "$libnfs" != "no" ; then
5595 if $pkg_config --atleast-version=1.9.3 libnfs; then
5596 libnfs="yes"
5597 libnfs_libs=$($pkg_config --libs libnfs)
5598 else
5599 if test "$libnfs" = "yes" ; then
5600 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5602 libnfs="no"
5606 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5607 if test "$werror" = "yes"; then
5608 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5611 if test "$solaris" = "no" ; then
5612 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5613 LDFLAGS="-Wl,--warn-common $LDFLAGS"
5617 # test if pod2man has --utf8 option
5618 if pod2man --help | grep -q utf8; then
5619 POD2MAN="pod2man --utf8"
5620 else
5621 POD2MAN="pod2man"
5624 # Use ASLR, no-SEH and DEP if available
5625 if test "$mingw32" = "yes" ; then
5626 for flag in --dynamicbase --no-seh --nxcompat; do
5627 if ld_has $flag ; then
5628 LDFLAGS="-Wl,$flag $LDFLAGS"
5630 done
5633 qemu_confdir=$sysconfdir$confsuffix
5634 qemu_moddir=$libdir$confsuffix
5635 qemu_datadir=$datadir$confsuffix
5636 qemu_localedir="$datadir/locale"
5638 # We can only support ivshmem if we have eventfd
5639 if [ "$eventfd" = "yes" ]; then
5640 ivshmem=yes
5643 tools=""
5644 if test "$want_tools" = "yes" ; then
5645 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
5646 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5647 tools="qemu-nbd\$(EXESUF) $tools"
5649 if [ "$ivshmem" = "yes" ]; then
5650 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5652 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then
5653 tools="elf2dmp $tools"
5656 if test "$softmmu" = yes ; then
5657 if test "$linux" = yes; then
5658 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5659 virtfs=yes
5660 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5661 else
5662 if test "$virtfs" = yes; then
5663 error_exit "VirtFS requires libcap devel and libattr devel"
5665 virtfs=no
5667 if test "$mpath" != no && test "$mpathpersist" = yes ; then
5668 mpath=yes
5669 else
5670 if test "$mpath" = yes; then
5671 error_exit "Multipath requires libmpathpersist devel"
5673 mpath=no
5675 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5676 else
5677 if test "$virtfs" = yes; then
5678 error_exit "VirtFS is supported only on Linux"
5680 virtfs=no
5681 if test "$mpath" = yes; then
5682 error_exit "Multipath is supported only on Linux"
5684 mpath=no
5686 if test "$xkbcommon" = "yes"; then
5687 tools="qemu-keymap\$(EXESUF) $tools"
5691 # Probe for guest agent support/options
5693 if [ "$guest_agent" != "no" ]; then
5694 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5695 tools="qemu-ga $tools"
5696 guest_agent=yes
5697 elif [ "$guest_agent" != yes ]; then
5698 guest_agent=no
5699 else
5700 error_exit "Guest agent is not supported on this platform"
5704 # Guest agent Window MSI package
5706 if test "$guest_agent" != yes; then
5707 if test "$guest_agent_msi" = yes; then
5708 error_exit "MSI guest agent package requires guest agent enabled"
5710 guest_agent_msi=no
5711 elif test "$mingw32" != "yes"; then
5712 if test "$guest_agent_msi" = "yes"; then
5713 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5715 guest_agent_msi=no
5716 elif ! has wixl; then
5717 if test "$guest_agent_msi" = "yes"; then
5718 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5720 guest_agent_msi=no
5721 else
5722 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5723 # disabled explicitly
5724 if test "$guest_agent_msi" != "no"; then
5725 guest_agent_msi=yes
5729 if test "$guest_agent_msi" = "yes"; then
5730 if test "$guest_agent_with_vss" = "yes"; then
5731 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5734 if test "$QEMU_GA_MANUFACTURER" = ""; then
5735 QEMU_GA_MANUFACTURER=QEMU
5738 if test "$QEMU_GA_DISTRO" = ""; then
5739 QEMU_GA_DISTRO=Linux
5742 if test "$QEMU_GA_VERSION" = ""; then
5743 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5746 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5748 case "$cpu" in
5749 x86_64)
5750 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5752 i386)
5753 QEMU_GA_MSI_ARCH="-D Arch=32"
5756 error_exit "CPU $cpu not supported for building installation package"
5758 esac
5761 # Mac OS X ships with a broken assembler
5762 roms=
5763 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5764 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5765 "$softmmu" = yes ; then
5766 # Different host OS linkers have different ideas about the name of the ELF
5767 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5768 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5769 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5770 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5771 ld_i386_emulation="$emu"
5772 roms="optionrom"
5773 break
5775 done
5777 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5778 roms="$roms spapr-rtas"
5781 if test "$cpu" = "s390x" ; then
5782 roms="$roms s390-ccw"
5785 # Probe for the need for relocating the user-only binary.
5786 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5787 textseg_addr=
5788 case "$cpu" in
5789 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5790 # ??? Rationale for choosing this address
5791 textseg_addr=0x60000000
5793 mips)
5794 # A 256M aligned address, high in the address space, with enough
5795 # room for the code_gen_buffer above it before the stack.
5796 textseg_addr=0x60000000
5798 esac
5799 if [ -n "$textseg_addr" ]; then
5800 cat > $TMPC <<EOF
5801 int main(void) { return 0; }
5803 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5804 if ! compile_prog "" "$textseg_ldflags"; then
5805 # In case ld does not support -Ttext-segment, edit the default linker
5806 # script via sed to set the .text start addr. This is needed on FreeBSD
5807 # at least.
5808 if ! $ld --verbose >/dev/null 2>&1; then
5809 error_exit \
5810 "We need to link the QEMU user mode binaries at a" \
5811 "specific text address. Unfortunately your linker" \
5812 "doesn't support either the -Ttext-segment option or" \
5813 "printing the default linker script with --verbose." \
5814 "If you don't want the user mode binaries, pass the" \
5815 "--disable-user option to configure."
5818 $ld --verbose | sed \
5819 -e '1,/==================================================/d' \
5820 -e '/==================================================/,$d' \
5821 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5822 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5823 textseg_ldflags="-Wl,-T../config-host.ld"
5828 # Check that the C++ compiler exists and works with the C compiler.
5829 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5830 if has $cxx; then
5831 cat > $TMPC <<EOF
5832 int c_function(void);
5833 int main(void) { return c_function(); }
5836 compile_object
5838 cat > $TMPCXX <<EOF
5839 extern "C" {
5840 int c_function(void);
5842 int c_function(void) { return 42; }
5845 update_cxxflags
5847 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5848 # C++ compiler $cxx works ok with C compiler $cc
5850 else
5851 echo "C++ compiler $cxx does not work with C compiler $cc"
5852 echo "Disabling C++ specific optional code"
5853 cxx=
5855 else
5856 echo "No C++ compiler available; disabling C++ specific optional code"
5857 cxx=
5860 echo_version() {
5861 if test "$1" = "yes" ; then
5862 echo "($2)"
5866 # prepend pixman and ftd flags after all config tests are done
5867 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5868 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
5869 libs_softmmu="$pixman_libs $libs_softmmu"
5871 echo "Install prefix $prefix"
5872 echo "BIOS directory $(eval echo $qemu_datadir)"
5873 echo "firmware path $(eval echo $firmwarepath)"
5874 echo "binary directory $(eval echo $bindir)"
5875 echo "library directory $(eval echo $libdir)"
5876 echo "module directory $(eval echo $qemu_moddir)"
5877 echo "libexec directory $(eval echo $libexecdir)"
5878 echo "include directory $(eval echo $includedir)"
5879 echo "config directory $(eval echo $sysconfdir)"
5880 if test "$mingw32" = "no" ; then
5881 echo "local state directory $(eval echo $local_statedir)"
5882 echo "Manual directory $(eval echo $mandir)"
5883 echo "ELF interp prefix $interp_prefix"
5884 else
5885 echo "local state directory queried at runtime"
5886 echo "Windows SDK $win_sdk"
5888 echo "Source path $source_path"
5889 echo "GIT binary $git"
5890 echo "GIT submodules $git_submodules"
5891 echo "C compiler $cc"
5892 echo "Host C compiler $host_cc"
5893 echo "C++ compiler $cxx"
5894 echo "Objective-C compiler $objcc"
5895 echo "ARFLAGS $ARFLAGS"
5896 echo "CFLAGS $CFLAGS"
5897 echo "QEMU_CFLAGS $QEMU_CFLAGS"
5898 echo "LDFLAGS $LDFLAGS"
5899 echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
5900 echo "make $make"
5901 echo "install $install"
5902 echo "python $python"
5903 if test "$slirp" = "yes" ; then
5904 echo "smbd $smbd"
5906 echo "module support $modules"
5907 echo "host CPU $cpu"
5908 echo "host big endian $bigendian"
5909 echo "target list $target_list"
5910 echo "gprof enabled $gprof"
5911 echo "sparse enabled $sparse"
5912 echo "strip binaries $strip_opt"
5913 echo "profiler $profiler"
5914 echo "static build $static"
5915 if test "$darwin" = "yes" ; then
5916 echo "Cocoa support $cocoa"
5918 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
5919 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
5920 echo "GTK GL support $gtk_gl"
5921 echo "VTE support $vte $(echo_version $vte $vteversion)"
5922 echo "TLS priority $tls_priority"
5923 echo "GNUTLS support $gnutls"
5924 echo "libgcrypt $gcrypt"
5925 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
5926 echo "libtasn1 $tasn1"
5927 echo "curses support $curses"
5928 echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
5929 echo "curl support $curl"
5930 echo "mingw32 support $mingw32"
5931 echo "Audio drivers $audio_drv_list"
5932 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5933 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5934 echo "VirtFS support $virtfs"
5935 echo "Multipath support $mpath"
5936 echo "VNC support $vnc"
5937 if test "$vnc" = "yes" ; then
5938 echo "VNC SASL support $vnc_sasl"
5939 echo "VNC JPEG support $vnc_jpeg"
5940 echo "VNC PNG support $vnc_png"
5942 if test -n "$sparc_cpu"; then
5943 echo "Target Sparc Arch $sparc_cpu"
5945 echo "xen support $xen"
5946 if test "$xen" = "yes" ; then
5947 echo "xen ctrl version $xen_ctrl_version"
5948 echo "pv dom build $xen_pv_domain_build"
5950 echo "brlapi support $brlapi"
5951 echo "bluez support $bluez"
5952 echo "Documentation $docs"
5953 echo "PIE $pie"
5954 echo "vde support $vde"
5955 echo "netmap support $netmap"
5956 echo "Linux AIO support $linux_aio"
5957 echo "ATTR/XATTR support $attr"
5958 echo "Install blobs $blobs"
5959 echo "KVM support $kvm"
5960 echo "HAX support $hax"
5961 echo "HVF support $hvf"
5962 echo "WHPX support $whpx"
5963 echo "TCG support $tcg"
5964 if test "$tcg" = "yes" ; then
5965 echo "TCG debug enabled $debug_tcg"
5966 echo "TCG interpreter $tcg_interpreter"
5968 echo "malloc trim support $malloc_trim"
5969 echo "RDMA support $rdma"
5970 echo "PVRDMA support $pvrdma"
5971 echo "fdt support $fdt"
5972 echo "membarrier $membarrier"
5973 echo "preadv support $preadv"
5974 echo "fdatasync $fdatasync"
5975 echo "madvise $madvise"
5976 echo "posix_madvise $posix_madvise"
5977 echo "posix_memalign $posix_memalign"
5978 echo "libcap-ng support $cap_ng"
5979 echo "vhost-net support $vhost_net"
5980 echo "vhost-crypto support $vhost_crypto"
5981 echo "vhost-scsi support $vhost_scsi"
5982 echo "vhost-vsock support $vhost_vsock"
5983 echo "vhost-user support $vhost_user"
5984 echo "Trace backends $trace_backends"
5985 if have_backend "simple"; then
5986 echo "Trace output file $trace_file-<pid>"
5988 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5989 echo "rbd support $rbd"
5990 echo "xfsctl support $xfs"
5991 echo "smartcard support $smartcard"
5992 echo "libusb $libusb"
5993 echo "usb net redir $usb_redir"
5994 echo "OpenGL support $opengl"
5995 echo "OpenGL dmabufs $opengl_dmabuf"
5996 echo "libiscsi support $libiscsi"
5997 echo "libnfs support $libnfs"
5998 echo "build guest agent $guest_agent"
5999 echo "QGA VSS support $guest_agent_with_vss"
6000 echo "QGA w32 disk info $guest_agent_ntddscsi"
6001 echo "QGA MSI support $guest_agent_msi"
6002 echo "seccomp support $seccomp"
6003 echo "coroutine backend $coroutine"
6004 echo "coroutine pool $coroutine_pool"
6005 echo "debug stack usage $debug_stack_usage"
6006 echo "mutex debugging $debug_mutex"
6007 echo "crypto afalg $crypto_afalg"
6008 echo "GlusterFS support $glusterfs"
6009 echo "gcov $gcov_tool"
6010 echo "gcov enabled $gcov"
6011 echo "TPM support $tpm"
6012 echo "libssh2 support $libssh2"
6013 echo "TPM passthrough $tpm_passthrough"
6014 echo "TPM emulator $tpm_emulator"
6015 echo "QOM debugging $qom_cast_debug"
6016 echo "Live block migration $live_block_migration"
6017 echo "lzo support $lzo"
6018 echo "snappy support $snappy"
6019 echo "bzip2 support $bzip2"
6020 echo "NUMA host support $numa"
6021 echo "libxml2 $libxml2"
6022 echo "tcmalloc support $tcmalloc"
6023 echo "jemalloc support $jemalloc"
6024 echo "avx2 optimization $avx2_opt"
6025 echo "replication support $replication"
6026 echo "VxHS block device $vxhs"
6027 echo "capstone $capstone"
6028 echo "docker $docker"
6029 echo "libpmem support $libpmem"
6031 if test "$sdl_too_old" = "yes"; then
6032 echo "-> Your SDL version is too old - please upgrade to have SDL support"
6035 if test "$sdlabi" = "1.2"; then
6036 echo
6037 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
6038 echo "WARNING: future releases. Please switch to using SDL 2.0"
6041 if test "$supported_cpu" = "no"; then
6042 echo
6043 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6044 echo
6045 echo "CPU host architecture $cpu support is not currently maintained."
6046 echo "The QEMU project intends to remove support for this host CPU in"
6047 echo "a future release if nobody volunteers to maintain it and to"
6048 echo "provide a build host for our continuous integration setup."
6049 echo "configure has succeeded and you can continue to build, but"
6050 echo "if you care about QEMU on this platform you should contact"
6051 echo "us upstream at qemu-devel@nongnu.org."
6054 if test "$supported_os" = "no"; then
6055 echo
6056 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6057 echo
6058 echo "Host OS $targetos support is not currently maintained."
6059 echo "The QEMU project intends to remove support for this host OS in"
6060 echo "a future release if nobody volunteers to maintain it and to"
6061 echo "provide a build host for our continuous integration setup."
6062 echo "configure has succeeded and you can continue to build, but"
6063 echo "if you care about QEMU on this platform you should contact"
6064 echo "us upstream at qemu-devel@nongnu.org."
6067 config_host_mak="config-host.mak"
6069 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6071 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6072 echo >> $config_host_mak
6074 echo all: >> $config_host_mak
6075 echo "prefix=$prefix" >> $config_host_mak
6076 echo "bindir=$bindir" >> $config_host_mak
6077 echo "libdir=$libdir" >> $config_host_mak
6078 echo "libexecdir=$libexecdir" >> $config_host_mak
6079 echo "includedir=$includedir" >> $config_host_mak
6080 echo "mandir=$mandir" >> $config_host_mak
6081 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6082 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6083 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6084 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6085 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6086 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6087 if test "$mingw32" = "no" ; then
6088 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6090 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6091 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6092 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6093 echo "GIT=$git" >> $config_host_mak
6094 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6095 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6097 echo "ARCH=$ARCH" >> $config_host_mak
6099 if test "$debug_tcg" = "yes" ; then
6100 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6102 if test "$strip_opt" = "yes" ; then
6103 echo "STRIP=${strip}" >> $config_host_mak
6105 if test "$bigendian" = "yes" ; then
6106 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6108 if test "$mingw32" = "yes" ; then
6109 echo "CONFIG_WIN32=y" >> $config_host_mak
6110 rc_version=$(cat $source_path/VERSION)
6111 version_major=${rc_version%%.*}
6112 rc_version=${rc_version#*.}
6113 version_minor=${rc_version%%.*}
6114 rc_version=${rc_version#*.}
6115 version_subminor=${rc_version%%.*}
6116 version_micro=0
6117 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6118 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6119 if test "$guest_agent_with_vss" = "yes" ; then
6120 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6121 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6122 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6124 if test "$guest_agent_ntddscsi" = "yes" ; then
6125 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6127 if test "$guest_agent_msi" = "yes"; then
6128 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6129 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6130 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6131 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6132 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6133 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6134 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6136 else
6137 echo "CONFIG_POSIX=y" >> $config_host_mak
6140 if test "$linux" = "yes" ; then
6141 echo "CONFIG_LINUX=y" >> $config_host_mak
6144 if test "$darwin" = "yes" ; then
6145 echo "CONFIG_DARWIN=y" >> $config_host_mak
6148 if test "$solaris" = "yes" ; then
6149 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6151 if test "$haiku" = "yes" ; then
6152 echo "CONFIG_HAIKU=y" >> $config_host_mak
6154 if test "$static" = "yes" ; then
6155 echo "CONFIG_STATIC=y" >> $config_host_mak
6157 if test "$profiler" = "yes" ; then
6158 echo "CONFIG_PROFILER=y" >> $config_host_mak
6160 if test "$slirp" = "yes" ; then
6161 echo "CONFIG_SLIRP=y" >> $config_host_mak
6162 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6164 if test "$vde" = "yes" ; then
6165 echo "CONFIG_VDE=y" >> $config_host_mak
6166 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6168 if test "$netmap" = "yes" ; then
6169 echo "CONFIG_NETMAP=y" >> $config_host_mak
6171 if test "$l2tpv3" = "yes" ; then
6172 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6174 if test "$cap_ng" = "yes" ; then
6175 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6177 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6178 for drv in $audio_drv_list; do
6179 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6180 case "$drv" in
6181 alsa | oss | pa | sdl)
6182 echo "$def=m" >> $config_host_mak ;;
6184 echo "$def=y" >> $config_host_mak ;;
6185 esac
6186 done
6187 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6188 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6189 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6190 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6191 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6192 if test "$audio_pt_int" = "yes" ; then
6193 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6195 if test "$audio_win_int" = "yes" ; then
6196 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6198 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6199 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6200 if test "$vnc" = "yes" ; then
6201 echo "CONFIG_VNC=y" >> $config_host_mak
6203 if test "$vnc_sasl" = "yes" ; then
6204 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6206 if test "$vnc_jpeg" = "yes" ; then
6207 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6209 if test "$vnc_png" = "yes" ; then
6210 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6212 if test "$xkbcommon" = "yes" ; then
6213 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6214 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6216 if test "$fnmatch" = "yes" ; then
6217 echo "CONFIG_FNMATCH=y" >> $config_host_mak
6219 if test "$xfs" = "yes" ; then
6220 echo "CONFIG_XFS=y" >> $config_host_mak
6222 qemu_version=$(head $source_path/VERSION)
6223 echo "VERSION=$qemu_version" >>$config_host_mak
6224 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6225 echo "SRC_PATH=$source_path" >> $config_host_mak
6226 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6227 if [ "$docs" = "yes" ] ; then
6228 echo "BUILD_DOCS=yes" >> $config_host_mak
6230 if test "$modules" = "yes"; then
6231 # $shacmd can generate a hash started with digit, which the compiler doesn't
6232 # like as an symbol. So prefix it with an underscore
6233 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6234 echo "CONFIG_MODULES=y" >> $config_host_mak
6236 if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6237 echo "CONFIG_X11=y" >> $config_host_mak
6238 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6239 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6241 if test "$sdl" = "yes" ; then
6242 echo "CONFIG_SDL=m" >> $config_host_mak
6243 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
6244 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6245 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6247 if test "$cocoa" = "yes" ; then
6248 echo "CONFIG_COCOA=y" >> $config_host_mak
6250 if test "$curses" = "yes" ; then
6251 echo "CONFIG_CURSES=m" >> $config_host_mak
6252 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6253 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6255 if test "$pipe2" = "yes" ; then
6256 echo "CONFIG_PIPE2=y" >> $config_host_mak
6258 if test "$accept4" = "yes" ; then
6259 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6261 if test "$splice" = "yes" ; then
6262 echo "CONFIG_SPLICE=y" >> $config_host_mak
6264 if test "$eventfd" = "yes" ; then
6265 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6267 if test "$memfd" = "yes" ; then
6268 echo "CONFIG_MEMFD=y" >> $config_host_mak
6270 if test "$have_usbfs" = "yes" ; then
6271 echo "CONFIG_USBFS=y" >> $config_host_mak
6273 if test "$fallocate" = "yes" ; then
6274 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6276 if test "$fallocate_punch_hole" = "yes" ; then
6277 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6279 if test "$fallocate_zero_range" = "yes" ; then
6280 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6282 if test "$posix_fallocate" = "yes" ; then
6283 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6285 if test "$sync_file_range" = "yes" ; then
6286 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6288 if test "$fiemap" = "yes" ; then
6289 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6291 if test "$dup3" = "yes" ; then
6292 echo "CONFIG_DUP3=y" >> $config_host_mak
6294 if test "$ppoll" = "yes" ; then
6295 echo "CONFIG_PPOLL=y" >> $config_host_mak
6297 if test "$prctl_pr_set_timerslack" = "yes" ; then
6298 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6300 if test "$epoll" = "yes" ; then
6301 echo "CONFIG_EPOLL=y" >> $config_host_mak
6303 if test "$epoll_create1" = "yes" ; then
6304 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6306 if test "$sendfile" = "yes" ; then
6307 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6309 if test "$timerfd" = "yes" ; then
6310 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6312 if test "$setns" = "yes" ; then
6313 echo "CONFIG_SETNS=y" >> $config_host_mak
6315 if test "$clock_adjtime" = "yes" ; then
6316 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6318 if test "$syncfs" = "yes" ; then
6319 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6321 if test "$inotify" = "yes" ; then
6322 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6324 if test "$inotify1" = "yes" ; then
6325 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6327 if test "$sem_timedwait" = "yes" ; then
6328 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6330 if test "$strchrnul" = "yes" ; then
6331 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6333 if test "$byteswap_h" = "yes" ; then
6334 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6336 if test "$bswap_h" = "yes" ; then
6337 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6339 if test "$curl" = "yes" ; then
6340 echo "CONFIG_CURL=m" >> $config_host_mak
6341 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6342 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6344 if test "$brlapi" = "yes" ; then
6345 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6346 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6348 if test "$bluez" = "yes" ; then
6349 echo "CONFIG_BLUEZ=y" >> $config_host_mak
6350 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6352 if test "$gtk" = "yes" ; then
6353 echo "CONFIG_GTK=m" >> $config_host_mak
6354 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6355 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6356 if test "$gtk_gl" = "yes" ; then
6357 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6360 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6361 if test "$gnutls" = "yes" ; then
6362 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6364 if test "$gcrypt" = "yes" ; then
6365 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6366 if test "$gcrypt_hmac" = "yes" ; then
6367 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6370 if test "$nettle" = "yes" ; then
6371 echo "CONFIG_NETTLE=y" >> $config_host_mak
6372 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6374 if test "$tasn1" = "yes" ; then
6375 echo "CONFIG_TASN1=y" >> $config_host_mak
6377 if test "$have_ifaddrs_h" = "yes" ; then
6378 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6380 if test "$have_broken_size_max" = "yes" ; then
6381 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6384 # Work around a system header bug with some kernel/XFS header
6385 # versions where they both try to define 'struct fsxattr':
6386 # xfs headers will not try to redefine structs from linux headers
6387 # if this macro is set.
6388 if test "$have_fsxattr" = "yes" ; then
6389 echo "HAVE_FSXATTR=y" >> $config_host_mak
6391 if test "$have_copy_file_range" = "yes" ; then
6392 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6394 if test "$vte" = "yes" ; then
6395 echo "CONFIG_VTE=y" >> $config_host_mak
6396 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6397 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6399 if test "$virglrenderer" = "yes" ; then
6400 echo "CONFIG_VIRGL=y" >> $config_host_mak
6401 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6402 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6404 if test "$xen" = "yes" ; then
6405 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6406 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6407 if test "$xen_pv_domain_build" = "yes" ; then
6408 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6411 if test "$linux_aio" = "yes" ; then
6412 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6414 if test "$attr" = "yes" ; then
6415 echo "CONFIG_ATTR=y" >> $config_host_mak
6417 if test "$libattr" = "yes" ; then
6418 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6420 if test "$virtfs" = "yes" ; then
6421 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6423 if test "$mpath" = "yes" ; then
6424 echo "CONFIG_MPATH=y" >> $config_host_mak
6425 if test "$mpathpersist_new_api" = "yes"; then
6426 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6429 if test "$vhost_scsi" = "yes" ; then
6430 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6432 if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6433 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6435 if test "$vhost_crypto" = "yes" ; then
6436 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6438 if test "$vhost_vsock" = "yes" ; then
6439 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6441 if test "$vhost_user" = "yes" ; then
6442 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6444 if test "$blobs" = "yes" ; then
6445 echo "INSTALL_BLOBS=yes" >> $config_host_mak
6447 if test "$iovec" = "yes" ; then
6448 echo "CONFIG_IOVEC=y" >> $config_host_mak
6450 if test "$preadv" = "yes" ; then
6451 echo "CONFIG_PREADV=y" >> $config_host_mak
6453 if test "$fdt" != "no" ; then
6454 echo "CONFIG_FDT=y" >> $config_host_mak
6456 if test "$membarrier" = "yes" ; then
6457 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6459 if test "$signalfd" = "yes" ; then
6460 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6462 if test "$tcg" = "yes"; then
6463 echo "CONFIG_TCG=y" >> $config_host_mak
6464 if test "$tcg_interpreter" = "yes" ; then
6465 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6468 if test "$fdatasync" = "yes" ; then
6469 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6471 if test "$madvise" = "yes" ; then
6472 echo "CONFIG_MADVISE=y" >> $config_host_mak
6474 if test "$posix_madvise" = "yes" ; then
6475 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6477 if test "$posix_memalign" = "yes" ; then
6478 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6481 if test "$spice" = "yes" ; then
6482 echo "CONFIG_SPICE=y" >> $config_host_mak
6485 if test "$smartcard" = "yes" ; then
6486 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6487 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6488 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6491 if test "$libusb" = "yes" ; then
6492 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6493 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6494 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6497 if test "$usb_redir" = "yes" ; then
6498 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6499 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6500 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6503 if test "$opengl" = "yes" ; then
6504 echo "CONFIG_OPENGL=y" >> $config_host_mak
6505 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6506 if test "$opengl_dmabuf" = "yes" ; then
6507 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6511 if test "$malloc_trim" = "yes" ; then
6512 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6515 if test "$avx2_opt" = "yes" ; then
6516 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6519 if test "$lzo" = "yes" ; then
6520 echo "CONFIG_LZO=y" >> $config_host_mak
6523 if test "$snappy" = "yes" ; then
6524 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6527 if test "$bzip2" = "yes" ; then
6528 echo "CONFIG_BZIP2=y" >> $config_host_mak
6529 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6532 if test "$libiscsi" = "yes" ; then
6533 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6534 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6535 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6538 if test "$libnfs" = "yes" ; then
6539 echo "CONFIG_LIBNFS=m" >> $config_host_mak
6540 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6543 if test "$seccomp" = "yes"; then
6544 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6545 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6546 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6549 # XXX: suppress that
6550 if [ "$bsd" = "yes" ] ; then
6551 echo "CONFIG_BSD=y" >> $config_host_mak
6554 if test "$localtime_r" = "yes" ; then
6555 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6557 if test "$qom_cast_debug" = "yes" ; then
6558 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6560 if test "$rbd" = "yes" ; then
6561 echo "CONFIG_RBD=m" >> $config_host_mak
6562 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6563 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6566 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6567 if test "$coroutine_pool" = "yes" ; then
6568 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6569 else
6570 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6573 if test "$debug_stack_usage" = "yes" ; then
6574 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6577 if test "$crypto_afalg" = "yes" ; then
6578 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6581 if test "$open_by_handle_at" = "yes" ; then
6582 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6585 if test "$linux_magic_h" = "yes" ; then
6586 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6589 if test "$pragma_diagnostic_available" = "yes" ; then
6590 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6593 if test "$valgrind_h" = "yes" ; then
6594 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6597 if test "$have_asan_iface_fiber" = "yes" ; then
6598 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6601 if test "$has_environ" = "yes" ; then
6602 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6605 if test "$cpuid_h" = "yes" ; then
6606 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6609 if test "$int128" = "yes" ; then
6610 echo "CONFIG_INT128=y" >> $config_host_mak
6613 if test "$atomic128" = "yes" ; then
6614 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6617 if test "$cmpxchg128" = "yes" ; then
6618 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6621 if test "$atomic64" = "yes" ; then
6622 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6625 if test "$vector16" = "yes" ; then
6626 echo "CONFIG_VECTOR16=y" >> $config_host_mak
6629 if test "$getauxval" = "yes" ; then
6630 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6633 if test "$glusterfs" = "yes" ; then
6634 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6635 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6636 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6639 if test "$glusterfs_xlator_opt" = "yes" ; then
6640 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6643 if test "$glusterfs_discard" = "yes" ; then
6644 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6647 if test "$glusterfs_fallocate" = "yes" ; then
6648 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6651 if test "$glusterfs_zerofill" = "yes" ; then
6652 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6655 if test "$libssh2" = "yes" ; then
6656 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6657 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6658 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6661 if test "$live_block_migration" = "yes" ; then
6662 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6665 if test "$tpm" = "yes"; then
6666 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6667 # TPM passthrough support?
6668 if test "$tpm_passthrough" = "yes"; then
6669 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6671 # TPM emulator support?
6672 if test "$tpm_emulator" = "yes"; then
6673 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6677 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6678 if have_backend "nop"; then
6679 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6681 if have_backend "simple"; then
6682 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6683 # Set the appropriate trace file.
6684 trace_file="\"$trace_file-\" FMT_pid"
6686 if have_backend "log"; then
6687 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6689 if have_backend "ust"; then
6690 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6692 if have_backend "dtrace"; then
6693 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6694 if test "$trace_backend_stap" = "yes" ; then
6695 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6698 if have_backend "ftrace"; then
6699 if test "$linux" = "yes" ; then
6700 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6701 else
6702 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6705 if have_backend "syslog"; then
6706 if test "$posix_syslog" = "yes" ; then
6707 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6708 else
6709 feature_not_found "syslog(trace backend)" "syslog not available"
6712 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6714 if test "$rdma" = "yes" ; then
6715 echo "CONFIG_RDMA=y" >> $config_host_mak
6716 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6719 if test "$pvrdma" = "yes" ; then
6720 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6723 if test "$have_rtnetlink" = "yes" ; then
6724 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6727 if test "$libxml2" = "yes" ; then
6728 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6729 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6730 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6733 if test "$replication" = "yes" ; then
6734 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6737 if test "$have_af_vsock" = "yes" ; then
6738 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6741 if test "$have_sysmacros" = "yes" ; then
6742 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6745 if test "$have_static_assert" = "yes" ; then
6746 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6749 if test "$have_utmpx" = "yes" ; then
6750 echo "HAVE_UTMPX=y" >> $config_host_mak
6753 if test "$ivshmem" = "yes" ; then
6754 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6756 if test "$capstone" != "no" ; then
6757 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6759 if test "$debug_mutex" = "yes" ; then
6760 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6763 # Hold two types of flag:
6764 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6765 # a thread we have a handle to
6766 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
6767 # platform
6768 if test "$pthread_setname_np" = "yes" ; then
6769 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6770 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6773 if test "$vxhs" = "yes" ; then
6774 echo "CONFIG_VXHS=y" >> $config_host_mak
6775 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6778 if test "$libpmem" = "yes" ; then
6779 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6782 if test "$tcg_interpreter" = "yes"; then
6783 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6784 elif test "$ARCH" = "sparc64" ; then
6785 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6786 elif test "$ARCH" = "s390x" ; then
6787 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6788 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6789 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6790 elif test "$ARCH" = "ppc64" ; then
6791 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6792 else
6793 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6795 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
6797 echo "TOOLS=$tools" >> $config_host_mak
6798 echo "ROMS=$roms" >> $config_host_mak
6799 echo "MAKE=$make" >> $config_host_mak
6800 echo "INSTALL=$install" >> $config_host_mak
6801 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6802 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6803 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6804 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6805 echo "PYTHON=$python" >> $config_host_mak
6806 echo "CC=$cc" >> $config_host_mak
6807 if $iasl -h > /dev/null 2>&1; then
6808 echo "IASL=$iasl" >> $config_host_mak
6810 echo "HOST_CC=$host_cc" >> $config_host_mak
6811 echo "CXX=$cxx" >> $config_host_mak
6812 echo "OBJCC=$objcc" >> $config_host_mak
6813 echo "AR=$ar" >> $config_host_mak
6814 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6815 echo "AS=$as" >> $config_host_mak
6816 echo "CCAS=$ccas" >> $config_host_mak
6817 echo "CPP=$cpp" >> $config_host_mak
6818 echo "OBJCOPY=$objcopy" >> $config_host_mak
6819 echo "LD=$ld" >> $config_host_mak
6820 echo "RANLIB=$ranlib" >> $config_host_mak
6821 echo "NM=$nm" >> $config_host_mak
6822 echo "WINDRES=$windres" >> $config_host_mak
6823 echo "CFLAGS=$CFLAGS" >> $config_host_mak
6824 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6825 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6826 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6827 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6828 if test "$sparse" = "yes" ; then
6829 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
6830 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
6831 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
6832 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
6833 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6835 if test "$cross_prefix" != ""; then
6836 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
6837 else
6838 echo "AUTOCONF_HOST := " >> $config_host_mak
6840 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6841 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6842 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6843 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6844 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6845 echo "LIBS+=$LIBS" >> $config_host_mak
6846 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6847 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6848 echo "EXESUF=$EXESUF" >> $config_host_mak
6849 echo "DSOSUF=$DSOSUF" >> $config_host_mak
6850 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6851 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6852 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6853 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6854 echo "POD2MAN=$POD2MAN" >> $config_host_mak
6855 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6856 if test "$gcov" = "yes" ; then
6857 echo "CONFIG_GCOV=y" >> $config_host_mak
6858 echo "GCOV=$gcov_tool" >> $config_host_mak
6861 if test "$docker" != "no"; then
6862 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
6865 # use included Linux headers
6866 if test "$linux" = "yes" ; then
6867 mkdir -p linux-headers
6868 case "$cpu" in
6869 i386|x86_64|x32)
6870 linux_arch=x86
6872 ppc|ppc64)
6873 linux_arch=powerpc
6875 s390x)
6876 linux_arch=s390
6878 aarch64)
6879 linux_arch=arm64
6881 mips64)
6882 linux_arch=mips
6885 # For most CPUs the kernel architecture name and QEMU CPU name match.
6886 linux_arch="$cpu"
6888 esac
6889 # For non-KVM architectures we will not have asm headers
6890 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6891 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6895 for target in $target_list; do
6896 target_dir="$target"
6897 config_target_mak=$target_dir/config-target.mak
6898 target_name=$(echo $target | cut -d '-' -f 1)
6899 target_bigendian="no"
6901 case "$target_name" in
6902 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6903 target_bigendian=yes
6905 esac
6906 target_softmmu="no"
6907 target_user_only="no"
6908 target_linux_user="no"
6909 target_bsd_user="no"
6910 case "$target" in
6911 ${target_name}-softmmu)
6912 target_softmmu="yes"
6914 ${target_name}-linux-user)
6915 target_user_only="yes"
6916 target_linux_user="yes"
6918 ${target_name}-bsd-user)
6919 target_user_only="yes"
6920 target_bsd_user="yes"
6923 error_exit "Target '$target' not recognised"
6924 exit 1
6926 esac
6928 target_compiler=""
6929 target_compiler_static=""
6930 target_compiler_cflags=""
6932 mkdir -p $target_dir
6933 echo "# Automatically generated by configure - do not modify" > $config_target_mak
6935 bflt="no"
6936 mttcg="no"
6937 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6938 gdb_xml_files=""
6940 TARGET_ARCH="$target_name"
6941 TARGET_BASE_ARCH=""
6942 TARGET_ABI_DIR=""
6944 case "$target_name" in
6945 i386)
6946 mttcg="yes"
6947 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6948 target_compiler=$cross_cc_i386
6949 target_compiler_cflags=$cross_cc_ccflags_i386
6951 x86_64)
6952 TARGET_BASE_ARCH=i386
6953 mttcg="yes"
6954 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6955 target_compiler=$cross_cc_x86_64
6957 alpha)
6958 mttcg="yes"
6959 target_compiler=$cross_cc_alpha
6961 arm|armeb)
6962 TARGET_ARCH=arm
6963 bflt="yes"
6964 mttcg="yes"
6965 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6966 target_compiler=$cross_cc_arm
6967 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
6969 aarch64|aarch64_be)
6970 TARGET_ARCH=aarch64
6971 TARGET_BASE_ARCH=arm
6972 bflt="yes"
6973 mttcg="yes"
6974 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6975 target_compiler=$cross_cc_aarch64
6976 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
6978 cris)
6979 target_compiler=$cross_cc_cris
6981 hppa)
6982 mttcg="yes"
6983 target_compiler=$cross_cc_hppa
6985 lm32)
6986 target_compiler=$cross_cc_lm32
6988 m68k)
6989 bflt="yes"
6990 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
6991 target_compiler=$cross_cc_m68k
6993 microblaze|microblazeel)
6994 TARGET_ARCH=microblaze
6995 bflt="yes"
6996 echo "TARGET_ABI32=y" >> $config_target_mak
6997 target_compiler=$cross_cc_microblaze
6999 mips|mipsel)
7000 TARGET_ARCH=mips
7001 target_compiler=$cross_cc_mips
7002 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7004 mipsn32|mipsn32el)
7005 TARGET_ARCH=mips64
7006 TARGET_BASE_ARCH=mips
7007 target_compiler=$cross_cc_mipsn32
7008 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7009 echo "TARGET_ABI32=y" >> $config_target_mak
7011 mips64|mips64el)
7012 TARGET_ARCH=mips64
7013 TARGET_BASE_ARCH=mips
7014 target_compiler=$cross_cc_mips64
7015 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7017 moxie)
7018 target_compiler=$cross_cc_moxie
7020 nios2)
7021 target_compiler=$cross_cc_nios2
7023 or1k)
7024 target_compiler=$cross_cc_or1k
7025 TARGET_ARCH=openrisc
7026 TARGET_BASE_ARCH=openrisc
7028 ppc)
7029 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7030 target_compiler=$cross_cc_powerpc
7032 ppc64)
7033 TARGET_BASE_ARCH=ppc
7034 TARGET_ABI_DIR=ppc
7035 mttcg=yes
7036 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7037 target_compiler=$cross_cc_ppc64
7039 ppc64le)
7040 TARGET_ARCH=ppc64
7041 TARGET_BASE_ARCH=ppc
7042 TARGET_ABI_DIR=ppc
7043 mttcg=yes
7044 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7045 target_compiler=$cross_cc_ppc64le
7047 ppc64abi32)
7048 TARGET_ARCH=ppc64
7049 TARGET_BASE_ARCH=ppc
7050 TARGET_ABI_DIR=ppc
7051 echo "TARGET_ABI32=y" >> $config_target_mak
7052 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7053 target_compiler=$cross_cc_ppc64abi32
7055 riscv32)
7056 TARGET_BASE_ARCH=riscv
7057 TARGET_ABI_DIR=riscv
7058 mttcg=yes
7059 target_compiler=$cross_cc_riscv32
7061 riscv64)
7062 TARGET_BASE_ARCH=riscv
7063 TARGET_ABI_DIR=riscv
7064 mttcg=yes
7065 target_compiler=$cross_cc_riscv64
7067 sh4|sh4eb)
7068 TARGET_ARCH=sh4
7069 bflt="yes"
7070 target_compiler=$cross_cc_sh4
7072 sparc)
7073 target_compiler=$cross_cc_sparc
7075 sparc64)
7076 TARGET_BASE_ARCH=sparc
7077 target_compiler=$cross_cc_sparc64
7079 sparc32plus)
7080 TARGET_ARCH=sparc64
7081 TARGET_BASE_ARCH=sparc
7082 TARGET_ABI_DIR=sparc
7083 target_compiler=$cross_cc_sparc32plus
7084 echo "TARGET_ABI32=y" >> $config_target_mak
7086 s390x)
7087 mttcg=yes
7088 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7089 target_compiler=$cross_cc_s390x
7091 tilegx)
7092 target_compiler=$cross_cc_tilegx
7094 tricore)
7095 target_compiler=$cross_cc_tricore
7097 unicore32)
7098 target_compiler=$cross_cc_unicore32
7100 xtensa|xtensaeb)
7101 TARGET_ARCH=xtensa
7102 mttcg="yes"
7103 target_compiler=$cross_cc_xtensa
7106 error_exit "Unsupported target CPU"
7108 esac
7109 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7110 if [ "$TARGET_BASE_ARCH" = "" ]; then
7111 TARGET_BASE_ARCH=$TARGET_ARCH
7114 # Do we have a cross compiler for this target?
7115 if has $target_compiler; then
7117 write_c_skeleton
7119 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
7120 # For host systems we might get away with building without -static
7121 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
7122 target_compiler=""
7123 else
7124 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7125 target_compiler_static="n"
7127 else
7128 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7129 target_compiler_static="y"
7131 else
7132 target_compiler=""
7135 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7137 upper() {
7138 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7141 target_arch_name="$(upper $TARGET_ARCH)"
7142 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7143 echo "TARGET_NAME=$target_name" >> $config_target_mak
7144 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7145 if [ "$TARGET_ABI_DIR" = "" ]; then
7146 TARGET_ABI_DIR=$TARGET_ARCH
7148 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7149 if [ "$HOST_VARIANT_DIR" != "" ]; then
7150 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7153 if supported_xen_target $target; then
7154 echo "CONFIG_XEN=y" >> $config_target_mak
7155 if test "$xen_pci_passthrough" = yes; then
7156 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7159 if supported_kvm_target $target; then
7160 echo "CONFIG_KVM=y" >> $config_target_mak
7161 if test "$vhost_net" = "yes" ; then
7162 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
7163 if test "$vhost_user" = "yes" ; then
7164 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
7168 if supported_hax_target $target; then
7169 echo "CONFIG_HAX=y" >> $config_target_mak
7171 if supported_hvf_target $target; then
7172 echo "CONFIG_HVF=y" >> $config_target_mak
7174 if supported_whpx_target $target; then
7175 echo "CONFIG_WHPX=y" >> $config_target_mak
7177 if test "$target_bigendian" = "yes" ; then
7178 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7180 if test "$target_softmmu" = "yes" ; then
7181 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7182 if test "$mttcg" = "yes" ; then
7183 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7186 if test "$target_user_only" = "yes" ; then
7187 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7188 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7190 if test "$target_linux_user" = "yes" ; then
7191 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7193 list=""
7194 if test ! -z "$gdb_xml_files" ; then
7195 for x in $gdb_xml_files; do
7196 list="$list $source_path/gdb-xml/$x"
7197 done
7198 echo "TARGET_XML_FILES=$list" >> $config_target_mak
7201 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
7202 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7204 if test "$target_bsd_user" = "yes" ; then
7205 echo "CONFIG_BSD_USER=y" >> $config_target_mak
7208 if test -n "$target_compiler"; then
7209 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7211 if test -n "$target_compiler_static"; then
7212 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7215 if test -n "$target_compiler_cflags"; then
7216 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7221 # generate QEMU_CFLAGS/LDFLAGS for targets
7223 cflags=""
7224 ldflags=""
7226 disas_config() {
7227 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7228 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7231 for i in $ARCH $TARGET_BASE_ARCH ; do
7232 case "$i" in
7233 alpha)
7234 disas_config "ALPHA"
7236 aarch64)
7237 if test -n "${cxx}"; then
7238 disas_config "ARM_A64"
7241 arm)
7242 disas_config "ARM"
7243 if test -n "${cxx}"; then
7244 disas_config "ARM_A64"
7247 cris)
7248 disas_config "CRIS"
7250 hppa)
7251 disas_config "HPPA"
7253 i386|x86_64|x32)
7254 disas_config "I386"
7256 lm32)
7257 disas_config "LM32"
7259 m68k)
7260 disas_config "M68K"
7262 microblaze*)
7263 disas_config "MICROBLAZE"
7265 mips*)
7266 disas_config "MIPS"
7268 moxie*)
7269 disas_config "MOXIE"
7271 nios2)
7272 disas_config "NIOS2"
7274 or1k)
7275 disas_config "OPENRISC"
7277 ppc*)
7278 disas_config "PPC"
7280 riscv)
7281 disas_config "RISCV"
7283 s390*)
7284 disas_config "S390"
7286 sh4)
7287 disas_config "SH4"
7289 sparc*)
7290 disas_config "SPARC"
7292 xtensa*)
7293 disas_config "XTENSA"
7295 esac
7296 done
7297 if test "$tcg_interpreter" = "yes" ; then
7298 disas_config "TCI"
7301 case "$ARCH" in
7302 alpha)
7303 # Ensure there's only a single GP
7304 cflags="-msmall-data $cflags"
7306 esac
7308 if test "$gprof" = "yes" ; then
7309 echo "TARGET_GPROF=yes" >> $config_target_mak
7310 if test "$target_linux_user" = "yes" ; then
7311 cflags="-p $cflags"
7312 ldflags="-p $ldflags"
7314 if test "$target_softmmu" = "yes" ; then
7315 ldflags="-p $ldflags"
7316 echo "GPROF_CFLAGS=-p" >> $config_target_mak
7320 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
7321 ldflags="$ldflags $textseg_ldflags"
7324 # Newer kernels on s390 check for an S390_PGSTE program header and
7325 # enable the pgste page table extensions in that case. This makes
7326 # the vm.allocate_pgste sysctl unnecessary. We enable this program
7327 # header if
7328 # - we build on s390x
7329 # - we build the system emulation for s390x (qemu-system-s390x)
7330 # - KVM is enabled
7331 # - the linker supports --s390-pgste
7332 if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7333 if ld_has --s390-pgste ; then
7334 ldflags="-Wl,--s390-pgste $ldflags"
7338 echo "LDFLAGS+=$ldflags" >> $config_target_mak
7339 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7341 done # for target in $targets
7343 if test -n "$enabled_cross_compilers"; then
7344 echo
7345 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7348 if [ "$fdt" = "git" ]; then
7349 echo "config-host.h: subdir-dtc" >> $config_host_mak
7351 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7352 echo "config-host.h: subdir-capstone" >> $config_host_mak
7354 if test -n "$LIBCAPSTONE"; then
7355 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7358 if test "$numa" = "yes"; then
7359 echo "CONFIG_NUMA=y" >> $config_host_mak
7362 if test "$ccache_cpp2" = "yes"; then
7363 echo "export CCACHE_CPP2=y" >> $config_host_mak
7366 # build tree in object directory in case the source is not in the current directory
7367 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7368 DIRS="$DIRS tests/fp"
7369 DIRS="$DIRS docs docs/interop fsdev scsi"
7370 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7371 DIRS="$DIRS roms/seabios roms/vgabios"
7372 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7373 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7374 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7375 FILES="$FILES tests/fp/Makefile"
7376 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
7377 FILES="$FILES pc-bios/spapr-rtas/Makefile"
7378 FILES="$FILES pc-bios/s390-ccw/Makefile"
7379 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
7380 FILES="$FILES pc-bios/qemu-icon.bmp"
7381 FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
7382 for bios_file in \
7383 $source_path/pc-bios/*.bin \
7384 $source_path/pc-bios/*.lid \
7385 $source_path/pc-bios/*.aml \
7386 $source_path/pc-bios/*.rom \
7387 $source_path/pc-bios/*.dtb \
7388 $source_path/pc-bios/*.img \
7389 $source_path/pc-bios/openbios-* \
7390 $source_path/pc-bios/u-boot.* \
7391 $source_path/pc-bios/palcode-*
7393 FILES="$FILES pc-bios/$(basename $bios_file)"
7394 done
7395 for test_file in $(find $source_path/tests/acpi-test-data -type f)
7397 FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
7398 done
7399 for test_file in $(find $source_path/tests/hex-loader-check-data -type f)
7401 FILES="$FILES tests/hex-loader-check-data$(echo $test_file | sed -e 's/.*hex-loader-check-data//')"
7402 done
7403 mkdir -p $DIRS
7404 for f in $FILES ; do
7405 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7406 symlink "$source_path/$f" "$f"
7408 done
7410 # temporary config to build submodules
7411 for rom in seabios vgabios ; do
7412 config_mak=roms/$rom/config.mak
7413 echo "# Automatically generated by configure - do not modify" > $config_mak
7414 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7415 echo "AS=$as" >> $config_mak
7416 echo "CCAS=$ccas" >> $config_mak
7417 echo "CC=$cc" >> $config_mak
7418 echo "BCC=bcc" >> $config_mak
7419 echo "CPP=$cpp" >> $config_mak
7420 echo "OBJCOPY=objcopy" >> $config_mak
7421 echo "IASL=$iasl" >> $config_mak
7422 echo "LD=$ld" >> $config_mak
7423 echo "RANLIB=$ranlib" >> $config_mak
7424 done
7426 # set up tests data directory
7427 for tests_subdir in acceptance data; do
7428 if [ ! -e tests/$tests_subdir ]; then
7429 symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
7431 done
7433 # set up qemu-iotests in this build directory
7434 iotests_common_env="tests/qemu-iotests/common.env"
7435 iotests_check="tests/qemu-iotests/check"
7437 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7438 echo >> "$iotests_common_env"
7439 echo "export PYTHON='$python'" >> "$iotests_common_env"
7441 if [ ! -e "$iotests_check" ]; then
7442 symlink "$source_path/$iotests_check" "$iotests_check"
7445 # Save the configure command line for later reuse.
7446 cat <<EOD >config.status
7447 #!/bin/sh
7448 # Generated by configure.
7449 # Run this file to recreate the current configuration.
7450 # Compiler output produced by configure, useful for debugging
7451 # configure, is in config.log if it exists.
7454 preserve_env() {
7455 envname=$1
7457 eval envval=\$$envname
7459 if test -n "$envval"
7460 then
7461 echo "$envname='$envval'" >> config.status
7462 echo "export $envname" >> config.status
7463 else
7464 echo "unset $envname" >> config.status
7468 # Preserve various env variables that influence what
7469 # features/build target configure will detect
7470 preserve_env AR
7471 preserve_env AS
7472 preserve_env CC
7473 preserve_env CPP
7474 preserve_env CXX
7475 preserve_env INSTALL
7476 preserve_env LD
7477 preserve_env LD_LIBRARY_PATH
7478 preserve_env LIBTOOL
7479 preserve_env MAKE
7480 preserve_env NM
7481 preserve_env OBJCOPY
7482 preserve_env PATH
7483 preserve_env PKG_CONFIG
7484 preserve_env PKG_CONFIG_LIBDIR
7485 preserve_env PKG_CONFIG_PATH
7486 preserve_env PYTHON
7487 preserve_env SDL_CONFIG
7488 preserve_env SDL2_CONFIG
7489 preserve_env SMBD
7490 preserve_env STRIP
7491 preserve_env WINDRES
7493 printf "exec" >>config.status
7494 printf " '%s'" "$0" "$@" >>config.status
7495 echo ' "$@"' >>config.status
7496 chmod +x config.status
7498 rm -r "$TMPDIR1"