configure: Clarify URL to source downloads
[qemu/ar7.git] / configure
blob4d991511220f42d3bbfa127aa6c818182c79ce44
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)
110 -std=gnu99)
111 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
114 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
116 esac
117 done
120 compile_object() {
121 local_cflags="$1"
122 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
125 compile_prog() {
126 local_cflags="$1"
127 local_ldflags="$2"
128 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
131 # symbolically link $1 to $2. Portable version of "ln -sf".
132 symlink() {
133 rm -rf "$2"
134 mkdir -p "$(dirname "$2")"
135 ln -s "$1" "$2"
138 # check whether a command is available to this shell (may be either an
139 # executable or a builtin)
140 has() {
141 type "$1" >/dev/null 2>&1
144 # search for an executable in PATH
145 path_of() {
146 local_command="$1"
147 local_ifs="$IFS"
148 local_dir=""
150 # pathname has a dir component?
151 if [ "${local_command#*/}" != "$local_command" ]; then
152 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
153 echo "$local_command"
154 return 0
157 if [ -z "$local_command" ]; then
158 return 1
161 IFS=:
162 for local_dir in $PATH; do
163 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
164 echo "$local_dir/$local_command"
165 IFS="${local_ifs:-$(printf ' \t\n')}"
166 return 0
168 done
169 # not found
170 IFS="${local_ifs:-$(printf ' \t\n')}"
171 return 1
174 have_backend () {
175 echo "$trace_backends" | grep "$1" >/dev/null
178 glob() {
179 eval test -z '"${1#'"$2"'}"'
182 supported_hax_target() {
183 test "$hax" = "yes" || return 1
184 glob "$1" "*-softmmu" || return 1
185 case "${1%-softmmu}" in
186 i386|x86_64)
187 return 0
189 esac
190 return 1
193 supported_kvm_target() {
194 test "$kvm" = "yes" || return 1
195 glob "$1" "*-softmmu" || return 1
196 case "${1%-softmmu}:$cpu" in
197 arm:arm | aarch64:aarch64 | \
198 i386:i386 | i386:x86_64 | i386:x32 | \
199 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
200 mips:mips | mipsel:mips | \
201 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
202 s390x:s390x)
203 return 0
205 esac
206 return 1
209 supported_xen_target() {
210 test "$xen" = "yes" || return 1
211 glob "$1" "*-softmmu" || return 1
212 # Only i386 and x86_64 provide the xenpv machine.
213 case "${1%-softmmu}" in
214 i386|x86_64)
215 return 0
217 esac
218 return 1
221 supported_hvf_target() {
222 test "$hvf" = "yes" || return 1
223 glob "$1" "*-softmmu" || return 1
224 case "${1%-softmmu}" in
225 x86_64)
226 return 0
228 esac
229 return 1
232 supported_whpx_target() {
233 test "$whpx" = "yes" || return 1
234 glob "$1" "*-softmmu" || return 1
235 case "${1%-softmmu}" in
236 i386|x86_64)
237 return 0
239 esac
240 return 1
243 supported_target() {
244 case "$1" in
245 *-softmmu)
247 *-linux-user)
248 if test "$linux" != "yes"; then
249 print_error "Target '$target' is only available on a Linux host"
250 return 1
253 *-bsd-user)
254 if test "$bsd" != "yes"; then
255 print_error "Target '$target' is only available on a BSD host"
256 return 1
260 print_error "Invalid target name '$target'"
261 return 1
263 esac
264 test "$tcg" = "yes" && return 0
265 supported_kvm_target "$1" && return 0
266 supported_xen_target "$1" && return 0
267 supported_hax_target "$1" && return 0
268 supported_hvf_target "$1" && return 0
269 supported_whpx_target "$1" && return 0
270 print_error "TCG disabled, but hardware accelerator not available for '$target'"
271 return 1
275 ld_has() {
276 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
279 # make source path absolute
280 source_path=$(cd "$(dirname -- "$0")"; pwd)
282 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
283 then
284 error_exit "main directory cannot contain spaces nor colons"
287 # default parameters
288 cpu=""
289 iasl="iasl"
290 interp_prefix="/usr/gnemul/qemu-%M"
291 static="no"
292 cross_prefix=""
293 audio_drv_list=""
294 block_drv_rw_whitelist=""
295 block_drv_ro_whitelist=""
296 host_cc="cc"
297 libs_cpu=""
298 libs_softmmu=""
299 libs_tools=""
300 audio_pt_int=""
301 audio_win_int=""
302 libs_qga=""
303 debug_info="yes"
304 stack_protector=""
306 if test -e "$source_path/.git"
307 then
308 git_update=yes
309 git_submodules="ui/keycodemapdb"
310 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
311 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
312 else
313 git_update=no
314 git_submodules=""
316 if ! test -f "$source_path/ui/keycodemapdb/README"
317 then
318 echo
319 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
320 echo
321 echo "This is not a GIT checkout but module content appears to"
322 echo "be missing. Do not use 'git archive' or GitHub download links"
323 echo "to acquire QEMU source archives. Non-GIT builds are only"
324 echo "supported with source archives linked from:"
325 echo
326 echo " https://www.qemu.org/download/#source"
327 echo
328 echo "Developers working with GIT can use scripts/archive-source.sh"
329 echo "if they need to create valid source archives."
330 echo
331 exit 1
334 git="git"
336 # Don't accept a target_list environment variable.
337 unset target_list
338 unset target_list_exclude
340 # Default value for a variable defining feature "foo".
341 # * foo="no" feature will only be used if --enable-foo arg is given
342 # * foo="" feature will be searched for, and if found, will be used
343 # unless --disable-foo is given
344 # * foo="yes" this value will only be set by --enable-foo flag.
345 # feature will searched for,
346 # if not found, configure exits with error
348 # Always add --enable-foo and --disable-foo command line args.
349 # Distributions want to ensure that several features are compiled in, and it
350 # is impossible without a --enable-foo that exits if a feature is not found.
352 bluez=""
353 brlapi=""
354 curl=""
355 curses=""
356 docs=""
357 fdt=""
358 netmap="no"
359 sdl=""
360 sdl_image=""
361 virtfs=""
362 mpath=""
363 vnc="yes"
364 sparse="no"
365 vde=""
366 vnc_sasl=""
367 vnc_jpeg=""
368 vnc_png=""
369 xkbcommon=""
370 xen=""
371 xen_ctrl_version=""
372 xen_pci_passthrough=""
373 linux_aio=""
374 cap_ng=""
375 attr=""
376 libattr=""
377 xfs=""
378 tcg="yes"
379 membarrier=""
380 vhost_net=""
381 vhost_crypto=""
382 vhost_scsi=""
383 vhost_vsock=""
384 vhost_user=""
385 kvm="no"
386 hax="no"
387 hvf="no"
388 whpx="no"
389 rdma=""
390 pvrdma=""
391 gprof="no"
392 debug_tcg="no"
393 debug="no"
394 sanitizers="no"
395 fortify_source=""
396 strip_opt="yes"
397 tcg_interpreter="no"
398 bigendian="no"
399 mingw32="no"
400 gcov="no"
401 gcov_tool="gcov"
402 EXESUF=""
403 DSOSUF=".so"
404 LDFLAGS_SHARED="-shared"
405 modules="no"
406 prefix="/usr/local"
407 mandir="\${prefix}/share/man"
408 datadir="\${prefix}/share"
409 firmwarepath="\${prefix}/share/qemu-firmware"
410 qemu_docdir="\${prefix}/share/doc/qemu"
411 bindir="\${prefix}/bin"
412 libdir="\${prefix}/lib"
413 libexecdir="\${prefix}/libexec"
414 includedir="\${prefix}/include"
415 sysconfdir="\${prefix}/etc"
416 local_statedir="\${prefix}/var"
417 confsuffix="/qemu"
418 slirp=""
419 oss_lib=""
420 bsd="no"
421 linux="no"
422 solaris="no"
423 profiler="no"
424 cocoa="no"
425 softmmu="yes"
426 linux_user="no"
427 bsd_user="no"
428 blobs="yes"
429 pkgversion=""
430 pie=""
431 qom_cast_debug="yes"
432 trace_backends="log"
433 trace_file="trace"
434 spice=""
435 rbd=""
436 smartcard=""
437 libusb=""
438 usb_redir=""
439 opengl=""
440 opengl_dmabuf="no"
441 cpuid_h="no"
442 avx2_opt=""
443 zlib="yes"
444 capstone=""
445 lzo=""
446 snappy=""
447 bzip2=""
448 lzfse=""
449 guest_agent=""
450 guest_agent_with_vss="no"
451 guest_agent_ntddscsi="no"
452 guest_agent_msi=""
453 vss_win32_sdk=""
454 win_sdk="no"
455 want_tools="yes"
456 libiscsi=""
457 libnfs=""
458 coroutine=""
459 coroutine_pool=""
460 debug_stack_usage="no"
461 crypto_afalg="no"
462 seccomp=""
463 glusterfs=""
464 glusterfs_xlator_opt="no"
465 glusterfs_discard="no"
466 glusterfs_fallocate="no"
467 glusterfs_zerofill="no"
468 glusterfs_ftruncate_has_stat="no"
469 glusterfs_iocb_has_stat="no"
470 gtk=""
471 gtk_gl="no"
472 tls_priority="NORMAL"
473 gnutls=""
474 nettle=""
475 gcrypt=""
476 gcrypt_hmac="no"
477 auth_pam=""
478 vte=""
479 virglrenderer=""
480 tpm=""
481 libssh=""
482 live_block_migration="yes"
483 numa=""
484 tcmalloc="no"
485 jemalloc="no"
486 replication="yes"
487 vxhs=""
488 bochs="yes"
489 cloop="yes"
490 dmg="yes"
491 qcow1="yes"
492 vdi="yes"
493 vvfat="yes"
494 qed="yes"
495 parallels="yes"
496 sheepdog="yes"
497 libxml2=""
498 docker="no"
499 debug_mutex="no"
500 libpmem=""
501 default_devices="yes"
503 # cross compilers defaults, can be overridden with --cross-cc-ARCH
504 cross_cc_aarch64="aarch64-linux-gnu-gcc"
505 cross_cc_aarch64_be="$cross_cc_aarch64"
506 cross_cc_cflags_aarch64_be="-mbig-endian"
507 cross_cc_arm="arm-linux-gnueabihf-gcc"
508 cross_cc_cflags_armeb="-mbig-endian"
509 cross_cc_i386="i386-pc-linux-gnu-gcc"
510 cross_cc_cflags_i386=""
511 cross_cc_ppc="powerpc-linux-gnu-gcc"
512 cross_cc_cflags_ppc="-m32"
513 cross_cc_ppc64="powerpc-linux-gnu-gcc"
514 cross_cc_cflags_ppc64="-m64"
515 cross_cc_ppc64le="powerpc64le-linux-gnu-gcc"
517 enabled_cross_compilers=""
519 supported_cpu="no"
520 supported_os="no"
521 bogus_os="no"
522 malloc_trim=""
524 # parse CC options first
525 for opt do
526 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
527 case "$opt" in
528 --cross-prefix=*) cross_prefix="$optarg"
530 --cc=*) CC="$optarg"
532 --cxx=*) CXX="$optarg"
534 --cpu=*) cpu="$optarg"
536 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
538 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
540 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
541 EXTRA_LDFLAGS="$optarg"
543 --enable-debug-info) debug_info="yes"
545 --disable-debug-info) debug_info="no"
547 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
549 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
550 eval "cross_cc_cflags_${cc_arch}=\$optarg"
552 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
553 eval "cross_cc_${cc_arch}=\$optarg"
555 esac
556 done
557 # OS specific
558 # Using uname is really, really broken. Once we have the right set of checks
559 # we can eliminate its usage altogether.
561 # Preferred compiler:
562 # ${CC} (if set)
563 # ${cross_prefix}gcc (if cross-prefix specified)
564 # system compiler
565 if test -z "${CC}${cross_prefix}"; then
566 cc="$host_cc"
567 else
568 cc="${CC-${cross_prefix}gcc}"
571 if test -z "${CXX}${cross_prefix}"; then
572 cxx="c++"
573 else
574 cxx="${CXX-${cross_prefix}g++}"
577 ar="${AR-${cross_prefix}ar}"
578 as="${AS-${cross_prefix}as}"
579 ccas="${CCAS-$cc}"
580 cpp="${CPP-$cc -E}"
581 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
582 ld="${LD-${cross_prefix}ld}"
583 ranlib="${RANLIB-${cross_prefix}ranlib}"
584 nm="${NM-${cross_prefix}nm}"
585 strip="${STRIP-${cross_prefix}strip}"
586 windres="${WINDRES-${cross_prefix}windres}"
587 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
588 query_pkg_config() {
589 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
591 pkg_config=query_pkg_config
592 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
594 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
595 ARFLAGS="${ARFLAGS-rv}"
597 # default flags for all hosts
598 # We use -fwrapv to tell the compiler that we require a C dialect where
599 # left shift of signed integers is well defined and has the expected
600 # 2s-complement style results. (Both clang and gcc agree that it
601 # provides these semantics.)
602 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
603 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
604 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
605 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
606 QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
607 if test "$debug_info" = "yes"; then
608 CFLAGS="-g $CFLAGS"
609 LDFLAGS="-g $LDFLAGS"
612 # running configure in the source tree?
613 # we know that's the case if configure is there.
614 if test -f "./configure"; then
615 pwd_is_source_path="y"
616 else
617 pwd_is_source_path="n"
620 check_define() {
621 cat > $TMPC <<EOF
622 #if !defined($1)
623 #error $1 not defined
624 #endif
625 int main(void) { return 0; }
627 compile_object
630 check_include() {
631 cat > $TMPC <<EOF
632 #include <$1>
633 int main(void) { return 0; }
635 compile_object
638 write_c_skeleton() {
639 cat > $TMPC <<EOF
640 int main(void) { return 0; }
644 if check_define __linux__ ; then
645 targetos="Linux"
646 elif check_define _WIN32 ; then
647 targetos='MINGW32'
648 elif check_define __OpenBSD__ ; then
649 targetos='OpenBSD'
650 elif check_define __sun__ ; then
651 targetos='SunOS'
652 elif check_define __HAIKU__ ; then
653 targetos='Haiku'
654 elif check_define __FreeBSD__ ; then
655 targetos='FreeBSD'
656 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
657 targetos='GNU/kFreeBSD'
658 elif check_define __DragonFly__ ; then
659 targetos='DragonFly'
660 elif check_define __NetBSD__; then
661 targetos='NetBSD'
662 elif check_define __APPLE__; then
663 targetos='Darwin'
664 else
665 # This is a fatal error, but don't report it yet, because we
666 # might be going to just print the --help text, or it might
667 # be the result of a missing compiler.
668 targetos='bogus'
669 bogus_os='yes'
672 # Some host OSes need non-standard checks for which CPU to use.
673 # Note that these checks are broken for cross-compilation: if you're
674 # cross-compiling to one of these OSes then you'll need to specify
675 # the correct CPU with the --cpu option.
676 case $targetos in
677 Darwin)
678 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
679 # run 64-bit userspace code.
680 # If the user didn't specify a CPU explicitly and the kernel says this is
681 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
682 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
683 cpu="x86_64"
686 SunOS)
687 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
688 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
689 cpu="x86_64"
691 esac
693 if test ! -z "$cpu" ; then
694 # command line argument
696 elif check_define __i386__ ; then
697 cpu="i386"
698 elif check_define __x86_64__ ; then
699 if check_define __ILP32__ ; then
700 cpu="x32"
701 else
702 cpu="x86_64"
704 elif check_define __sparc__ ; then
705 if check_define __arch64__ ; then
706 cpu="sparc64"
707 else
708 cpu="sparc"
710 elif check_define _ARCH_PPC ; then
711 if check_define _ARCH_PPC64 ; then
712 if check_define _LITTLE_ENDIAN ; then
713 cpu="ppc64le"
714 else
715 cpu="ppc64"
717 else
718 cpu="ppc"
720 elif check_define __mips__ ; then
721 cpu="mips"
722 elif check_define __s390__ ; then
723 if check_define __s390x__ ; then
724 cpu="s390x"
725 else
726 cpu="s390"
728 elif check_define __riscv ; then
729 if check_define _LP64 ; then
730 cpu="riscv64"
731 else
732 cpu="riscv32"
734 elif check_define __arm__ ; then
735 cpu="arm"
736 elif check_define __aarch64__ ; then
737 cpu="aarch64"
738 else
739 cpu=$(uname -m)
742 ARCH=
743 # Normalise host CPU name and set ARCH.
744 # Note that this case should only have supported host CPUs, not guests.
745 case "$cpu" in
746 ppc|ppc64|s390|s390x|sparc64|x32|riscv32|riscv64)
747 supported_cpu="yes"
748 eval "cross_cc_${cpu}=\$host_cc"
750 ppc64le)
751 ARCH="ppc64"
752 supported_cpu="yes"
753 cross_cc_ppc64le=$host_cc
755 i386|i486|i586|i686|i86pc|BePC)
756 cpu="i386"
757 supported_cpu="yes"
758 cross_cc_i386=$host_cc
760 x86_64|amd64)
761 cpu="x86_64"
762 supported_cpu="yes"
763 cross_cc_x86_64=$host_cc
765 armv*b|armv*l|arm)
766 cpu="arm"
767 supported_cpu="yes"
768 cross_cc_arm=$host_cc
770 aarch64)
771 cpu="aarch64"
772 supported_cpu="yes"
773 cross_cc_aarch64=$host_cc
775 mips*)
776 cpu="mips"
777 supported_cpu="yes"
778 cross_cc_mips=$host_cc
780 sparc|sun4[cdmuv])
781 cpu="sparc"
782 supported_cpu="yes"
783 cross_cc_sparc=$host_cc
786 # This will result in either an error or falling back to TCI later
787 ARCH=unknown
789 esac
790 if test -z "$ARCH"; then
791 ARCH="$cpu"
794 # OS specific
796 # host *BSD for user mode
797 HOST_VARIANT_DIR=""
799 case $targetos in
800 MINGW32*)
801 mingw32="yes"
802 hax="yes"
803 vhost_user="no"
804 audio_possible_drivers="dsound sdl"
805 if check_include dsound.h; then
806 audio_drv_list="dsound"
807 else
808 audio_drv_list=""
810 supported_os="yes"
812 GNU/kFreeBSD)
813 bsd="yes"
814 audio_drv_list="oss try-sdl"
815 audio_possible_drivers="oss sdl pa"
817 FreeBSD)
818 bsd="yes"
819 make="${MAKE-gmake}"
820 audio_drv_list="oss try-sdl"
821 audio_possible_drivers="oss sdl pa"
822 # needed for kinfo_getvmmap(3) in libutil.h
823 LIBS="-lutil $LIBS"
824 # needed for kinfo_getproc
825 libs_qga="-lutil $libs_qga"
826 netmap="" # enable netmap autodetect
827 HOST_VARIANT_DIR="freebsd"
828 supported_os="yes"
830 DragonFly)
831 bsd="yes"
832 make="${MAKE-gmake}"
833 audio_drv_list="oss try-sdl"
834 audio_possible_drivers="oss sdl pa"
835 HOST_VARIANT_DIR="dragonfly"
837 NetBSD)
838 bsd="yes"
839 hax="yes"
840 make="${MAKE-gmake}"
841 audio_drv_list="oss try-sdl"
842 audio_possible_drivers="oss sdl"
843 oss_lib="-lossaudio"
844 HOST_VARIANT_DIR="netbsd"
845 supported_os="yes"
847 OpenBSD)
848 bsd="yes"
849 make="${MAKE-gmake}"
850 audio_drv_list="try-sdl"
851 audio_possible_drivers="sdl"
852 HOST_VARIANT_DIR="openbsd"
853 supported_os="yes"
855 Darwin)
856 bsd="yes"
857 darwin="yes"
858 hax="yes"
859 hvf="yes"
860 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
861 if [ "$cpu" = "x86_64" ] ; then
862 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
863 LDFLAGS="-arch x86_64 $LDFLAGS"
865 cocoa="yes"
866 audio_drv_list="coreaudio try-sdl"
867 audio_possible_drivers="coreaudio sdl"
868 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
869 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
870 # Disable attempts to use ObjectiveC features in os/object.h since they
871 # won't work when we're compiling with gcc as a C compiler.
872 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
873 HOST_VARIANT_DIR="darwin"
874 supported_os="yes"
876 SunOS)
877 solaris="yes"
878 make="${MAKE-gmake}"
879 install="${INSTALL-ginstall}"
880 smbd="${SMBD-/usr/sfw/sbin/smbd}"
881 if test -f /usr/include/sys/soundcard.h ; then
882 audio_drv_list="oss try-sdl"
884 audio_possible_drivers="oss sdl"
885 # needed for CMSG_ macros in sys/socket.h
886 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
887 # needed for TIOCWIN* defines in termios.h
888 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
889 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
890 solarisnetlibs="-lsocket -lnsl -lresolv"
891 LIBS="$solarisnetlibs $LIBS"
892 libs_qga="$solarisnetlibs $libs_qga"
894 Haiku)
895 haiku="yes"
896 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
897 LIBS="-lposix_error_mapper -lnetwork $LIBS"
899 Linux)
900 audio_drv_list="try-pa oss"
901 audio_possible_drivers="oss alsa sdl pa"
902 linux="yes"
903 linux_user="yes"
904 kvm="yes"
905 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
906 supported_os="yes"
907 libudev="yes"
909 esac
911 if [ "$bsd" = "yes" ] ; then
912 if [ "$darwin" != "yes" ] ; then
913 bsd_user="yes"
917 : ${make=${MAKE-make}}
918 : ${install=${INSTALL-install}}
919 # We prefer python 3.x. A bare 'python' is traditionally
920 # python 2.x, but some distros have it as python 3.x, so
921 # we check that before python2
922 python=
923 for binary in "${PYTHON-python3}" python python2
925 if has "$binary"
926 then
927 python="$binary"
928 break
930 done
931 : ${smbd=${SMBD-/usr/sbin/smbd}}
933 # Default objcc to clang if available, otherwise use CC
934 if has clang; then
935 objcc=clang
936 else
937 objcc="$cc"
940 if test "$mingw32" = "yes" ; then
941 EXESUF=".exe"
942 DSOSUF=".dll"
943 # MinGW needs -mthreads for TLS and macro _MT.
944 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
945 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
946 write_c_skeleton;
947 if compile_prog "" "-liberty" ; then
948 LIBS="-liberty $LIBS"
950 prefix="c:/Program Files/QEMU"
951 mandir="\${prefix}"
952 datadir="\${prefix}"
953 qemu_docdir="\${prefix}"
954 bindir="\${prefix}"
955 sysconfdir="\${prefix}"
956 local_statedir=
957 confsuffix=""
958 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
961 werror=""
963 for opt do
964 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
965 case "$opt" in
966 --help|-h) show_help=yes
968 --version|-V) exec cat $source_path/VERSION
970 --prefix=*) prefix="$optarg"
972 --interp-prefix=*) interp_prefix="$optarg"
974 --cross-prefix=*)
976 --cc=*)
978 --host-cc=*) host_cc="$optarg"
980 --cxx=*)
982 --iasl=*) iasl="$optarg"
984 --objcc=*) objcc="$optarg"
986 --make=*) make="$optarg"
988 --install=*) install="$optarg"
990 --python=*) python="$optarg"
992 --gcov=*) gcov_tool="$optarg"
994 --smbd=*) smbd="$optarg"
996 --extra-cflags=*)
998 --extra-cxxflags=*)
1000 --extra-ldflags=*)
1002 --enable-debug-info)
1004 --disable-debug-info)
1006 --cross-cc-*)
1008 --enable-modules)
1009 modules="yes"
1011 --disable-modules)
1012 modules="no"
1014 --cpu=*)
1016 --target-list=*) target_list="$optarg"
1017 if test "$target_list_exclude"; then
1018 error_exit "Can't mix --target-list with --target-list-exclude"
1021 --target-list-exclude=*) target_list_exclude="$optarg"
1022 if test "$target_list"; then
1023 error_exit "Can't mix --target-list-exclude with --target-list"
1026 --enable-trace-backends=*) trace_backends="$optarg"
1028 # XXX: backwards compatibility
1029 --enable-trace-backend=*) trace_backends="$optarg"
1031 --with-trace-file=*) trace_file="$optarg"
1033 --with-default-devices) default_devices="yes"
1035 --without-default-devices) default_devices="no"
1037 --enable-gprof) gprof="yes"
1039 --enable-gcov) gcov="yes"
1041 --static)
1042 static="yes"
1043 LDFLAGS="-static $LDFLAGS"
1044 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1046 --mandir=*) mandir="$optarg"
1048 --bindir=*) bindir="$optarg"
1050 --libdir=*) libdir="$optarg"
1052 --libexecdir=*) libexecdir="$optarg"
1054 --includedir=*) includedir="$optarg"
1056 --datadir=*) datadir="$optarg"
1058 --with-confsuffix=*) confsuffix="$optarg"
1060 --docdir=*) qemu_docdir="$optarg"
1062 --sysconfdir=*) sysconfdir="$optarg"
1064 --localstatedir=*) local_statedir="$optarg"
1066 --firmwarepath=*) firmwarepath="$optarg"
1068 --host=*|--build=*|\
1069 --disable-dependency-tracking|\
1070 --sbindir=*|--sharedstatedir=*|\
1071 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1072 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1073 # These switches are silently ignored, for compatibility with
1074 # autoconf-generated configure scripts. This allows QEMU's
1075 # configure to be used by RPM and similar macros that set
1076 # lots of directory switches by default.
1078 --disable-sdl) sdl="no"
1080 --enable-sdl) sdl="yes"
1082 --disable-sdl-image) sdl_image="no"
1084 --enable-sdl-image) sdl_image="yes"
1086 --disable-qom-cast-debug) qom_cast_debug="no"
1088 --enable-qom-cast-debug) qom_cast_debug="yes"
1090 --disable-virtfs) virtfs="no"
1092 --enable-virtfs) virtfs="yes"
1094 --disable-mpath) mpath="no"
1096 --enable-mpath) mpath="yes"
1098 --disable-vnc) vnc="no"
1100 --enable-vnc) vnc="yes"
1102 --oss-lib=*) oss_lib="$optarg"
1104 --audio-drv-list=*) audio_drv_list="$optarg"
1106 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1108 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1110 --enable-debug-tcg) debug_tcg="yes"
1112 --disable-debug-tcg) debug_tcg="no"
1114 --enable-debug)
1115 # Enable debugging options that aren't excessively noisy
1116 debug_tcg="yes"
1117 debug_mutex="yes"
1118 debug="yes"
1119 strip_opt="no"
1120 fortify_source="no"
1122 --enable-sanitizers) sanitizers="yes"
1124 --disable-sanitizers) sanitizers="no"
1126 --enable-sparse) sparse="yes"
1128 --disable-sparse) sparse="no"
1130 --disable-strip) strip_opt="no"
1132 --disable-vnc-sasl) vnc_sasl="no"
1134 --enable-vnc-sasl) vnc_sasl="yes"
1136 --disable-vnc-jpeg) vnc_jpeg="no"
1138 --enable-vnc-jpeg) vnc_jpeg="yes"
1140 --disable-vnc-png) vnc_png="no"
1142 --enable-vnc-png) vnc_png="yes"
1144 --disable-slirp) slirp="no"
1146 --enable-slirp=git) slirp="git"
1148 --enable-slirp=system) slirp="system"
1150 --disable-vde) vde="no"
1152 --enable-vde) vde="yes"
1154 --disable-netmap) netmap="no"
1156 --enable-netmap) netmap="yes"
1158 --disable-xen) xen="no"
1160 --enable-xen) xen="yes"
1162 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1164 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1166 --disable-brlapi) brlapi="no"
1168 --enable-brlapi) brlapi="yes"
1170 --disable-bluez) bluez="no"
1172 --enable-bluez) bluez="yes"
1174 --disable-kvm) kvm="no"
1176 --enable-kvm) kvm="yes"
1178 --disable-hax) hax="no"
1180 --enable-hax) hax="yes"
1182 --disable-hvf) hvf="no"
1184 --enable-hvf) hvf="yes"
1186 --disable-whpx) whpx="no"
1188 --enable-whpx) whpx="yes"
1190 --disable-tcg-interpreter) tcg_interpreter="no"
1192 --enable-tcg-interpreter) tcg_interpreter="yes"
1194 --disable-cap-ng) cap_ng="no"
1196 --enable-cap-ng) cap_ng="yes"
1198 --disable-tcg) tcg="no"
1200 --enable-tcg) tcg="yes"
1202 --disable-malloc-trim) malloc_trim="no"
1204 --enable-malloc-trim) malloc_trim="yes"
1206 --disable-spice) spice="no"
1208 --enable-spice) spice="yes"
1210 --disable-libiscsi) libiscsi="no"
1212 --enable-libiscsi) libiscsi="yes"
1214 --disable-libnfs) libnfs="no"
1216 --enable-libnfs) libnfs="yes"
1218 --enable-profiler) profiler="yes"
1220 --disable-cocoa) cocoa="no"
1222 --enable-cocoa)
1223 cocoa="yes" ;
1224 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1226 --disable-system) softmmu="no"
1228 --enable-system) softmmu="yes"
1230 --disable-user)
1231 linux_user="no" ;
1232 bsd_user="no" ;
1234 --enable-user) ;;
1235 --disable-linux-user) linux_user="no"
1237 --enable-linux-user) linux_user="yes"
1239 --disable-bsd-user) bsd_user="no"
1241 --enable-bsd-user) bsd_user="yes"
1243 --enable-pie) pie="yes"
1245 --disable-pie) pie="no"
1247 --enable-werror) werror="yes"
1249 --disable-werror) werror="no"
1251 --enable-stack-protector) stack_protector="yes"
1253 --disable-stack-protector) stack_protector="no"
1255 --disable-curses) curses="no"
1257 --enable-curses) curses="yes"
1259 --disable-iconv) iconv="no"
1261 --enable-iconv) iconv="yes"
1263 --disable-curl) curl="no"
1265 --enable-curl) curl="yes"
1267 --disable-fdt) fdt="no"
1269 --enable-fdt) fdt="yes"
1271 --disable-linux-aio) linux_aio="no"
1273 --enable-linux-aio) linux_aio="yes"
1275 --disable-attr) attr="no"
1277 --enable-attr) attr="yes"
1279 --disable-membarrier) membarrier="no"
1281 --enable-membarrier) membarrier="yes"
1283 --disable-blobs) blobs="no"
1285 --with-pkgversion=*) pkgversion="$optarg"
1287 --with-coroutine=*) coroutine="$optarg"
1289 --disable-coroutine-pool) coroutine_pool="no"
1291 --enable-coroutine-pool) coroutine_pool="yes"
1293 --enable-debug-stack-usage) debug_stack_usage="yes"
1295 --enable-crypto-afalg) crypto_afalg="yes"
1297 --disable-crypto-afalg) crypto_afalg="no"
1299 --disable-docs) docs="no"
1301 --enable-docs) docs="yes"
1303 --disable-vhost-net) vhost_net="no"
1305 --enable-vhost-net) vhost_net="yes"
1307 --disable-vhost-crypto) vhost_crypto="no"
1309 --enable-vhost-crypto) vhost_crypto="yes"
1311 --disable-vhost-scsi) vhost_scsi="no"
1313 --enable-vhost-scsi) vhost_scsi="yes"
1315 --disable-vhost-vsock) vhost_vsock="no"
1317 --enable-vhost-vsock) vhost_vsock="yes"
1319 --disable-opengl) opengl="no"
1321 --enable-opengl) opengl="yes"
1323 --disable-rbd) rbd="no"
1325 --enable-rbd) rbd="yes"
1327 --disable-xfsctl) xfs="no"
1329 --enable-xfsctl) xfs="yes"
1331 --disable-smartcard) smartcard="no"
1333 --enable-smartcard) smartcard="yes"
1335 --disable-libusb) libusb="no"
1337 --enable-libusb) libusb="yes"
1339 --disable-usb-redir) usb_redir="no"
1341 --enable-usb-redir) usb_redir="yes"
1343 --disable-zlib-test) zlib="no"
1345 --disable-lzo) lzo="no"
1347 --enable-lzo) lzo="yes"
1349 --disable-snappy) snappy="no"
1351 --enable-snappy) snappy="yes"
1353 --disable-bzip2) bzip2="no"
1355 --enable-bzip2) bzip2="yes"
1357 --enable-lzfse) lzfse="yes"
1359 --disable-lzfse) lzfse="no"
1361 --enable-guest-agent) guest_agent="yes"
1363 --disable-guest-agent) guest_agent="no"
1365 --enable-guest-agent-msi) guest_agent_msi="yes"
1367 --disable-guest-agent-msi) guest_agent_msi="no"
1369 --with-vss-sdk) vss_win32_sdk=""
1371 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1373 --without-vss-sdk) vss_win32_sdk="no"
1375 --with-win-sdk) win_sdk=""
1377 --with-win-sdk=*) win_sdk="$optarg"
1379 --without-win-sdk) win_sdk="no"
1381 --enable-tools) want_tools="yes"
1383 --disable-tools) want_tools="no"
1385 --enable-seccomp) seccomp="yes"
1387 --disable-seccomp) seccomp="no"
1389 --disable-glusterfs) glusterfs="no"
1391 --disable-avx2) avx2_opt="no"
1393 --enable-avx2) avx2_opt="yes"
1395 --enable-glusterfs) glusterfs="yes"
1397 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1398 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1400 --enable-vhdx|--disable-vhdx)
1401 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1403 --enable-uuid|--disable-uuid)
1404 echo "$0: $opt is obsolete, UUID support is always built" >&2
1406 --disable-gtk) gtk="no"
1408 --enable-gtk) gtk="yes"
1410 --tls-priority=*) tls_priority="$optarg"
1412 --disable-gnutls) gnutls="no"
1414 --enable-gnutls) gnutls="yes"
1416 --disable-nettle) nettle="no"
1418 --enable-nettle) nettle="yes"
1420 --disable-gcrypt) gcrypt="no"
1422 --enable-gcrypt) gcrypt="yes"
1424 --disable-auth-pam) auth_pam="no"
1426 --enable-auth-pam) auth_pam="yes"
1428 --enable-rdma) rdma="yes"
1430 --disable-rdma) rdma="no"
1432 --enable-pvrdma) pvrdma="yes"
1434 --disable-pvrdma) pvrdma="no"
1436 --disable-vte) vte="no"
1438 --enable-vte) vte="yes"
1440 --disable-virglrenderer) virglrenderer="no"
1442 --enable-virglrenderer) virglrenderer="yes"
1444 --disable-tpm) tpm="no"
1446 --enable-tpm) tpm="yes"
1448 --disable-libssh) libssh="no"
1450 --enable-libssh) libssh="yes"
1452 --disable-live-block-migration) live_block_migration="no"
1454 --enable-live-block-migration) live_block_migration="yes"
1456 --disable-numa) numa="no"
1458 --enable-numa) numa="yes"
1460 --disable-libxml2) libxml2="no"
1462 --enable-libxml2) libxml2="yes"
1464 --disable-tcmalloc) tcmalloc="no"
1466 --enable-tcmalloc) tcmalloc="yes"
1468 --disable-jemalloc) jemalloc="no"
1470 --enable-jemalloc) jemalloc="yes"
1472 --disable-replication) replication="no"
1474 --enable-replication) replication="yes"
1476 --disable-vxhs) vxhs="no"
1478 --enable-vxhs) vxhs="yes"
1480 --disable-bochs) bochs="no"
1482 --enable-bochs) bochs="yes"
1484 --disable-cloop) cloop="no"
1486 --enable-cloop) cloop="yes"
1488 --disable-dmg) dmg="no"
1490 --enable-dmg) dmg="yes"
1492 --disable-qcow1) qcow1="no"
1494 --enable-qcow1) qcow1="yes"
1496 --disable-vdi) vdi="no"
1498 --enable-vdi) vdi="yes"
1500 --disable-vvfat) vvfat="no"
1502 --enable-vvfat) vvfat="yes"
1504 --disable-qed) qed="no"
1506 --enable-qed) qed="yes"
1508 --disable-parallels) parallels="no"
1510 --enable-parallels) parallels="yes"
1512 --disable-sheepdog) sheepdog="no"
1514 --enable-sheepdog) sheepdog="yes"
1516 --disable-vhost-user) vhost_user="no"
1518 --enable-vhost-user) vhost_user="yes"
1520 --disable-vhost-kernel) vhost_kernel="no"
1522 --enable-vhost-kernel) vhost_kernel="yes"
1524 --disable-capstone) capstone="no"
1526 --enable-capstone) capstone="yes"
1528 --enable-capstone=git) capstone="git"
1530 --enable-capstone=system) capstone="system"
1532 --with-git=*) git="$optarg"
1534 --enable-git-update) git_update=yes
1536 --disable-git-update) git_update=no
1538 --enable-debug-mutex) debug_mutex=yes
1540 --disable-debug-mutex) debug_mutex=no
1542 --enable-libpmem) libpmem=yes
1544 --disable-libpmem) libpmem=no
1547 echo "ERROR: unknown option $opt"
1548 echo "Try '$0 --help' for more information"
1549 exit 1
1551 esac
1552 done
1554 case "$cpu" in
1555 ppc)
1556 CPU_CFLAGS="-m32"
1557 LDFLAGS="-m32 $LDFLAGS"
1558 cross_cc_ppc=$cc
1559 cross_cc_cflags_ppc="$CPU_CFLAGS"
1561 ppc64)
1562 CPU_CFLAGS="-m64"
1563 LDFLAGS="-m64 $LDFLAGS"
1564 cross_cc_ppc64=$cc
1565 cross_cc_cflags_ppc64="$CPU_CFLAGS"
1567 sparc)
1568 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1569 LDFLAGS="-m32 -mv8plus $LDFLAGS"
1570 cross_cc_sparc=$cc
1571 cross_cc_cflags_sparc="$CPU_CFLAGS"
1573 sparc64)
1574 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1575 LDFLAGS="-m64 $LDFLAGS"
1576 cross_cc_sparc64=$cc
1577 cross_cc_cflags_sparc64="$CPU_CFLAGS"
1579 s390)
1580 CPU_CFLAGS="-m31"
1581 LDFLAGS="-m31 $LDFLAGS"
1582 cross_cc_s390=$cc
1583 cross_cc_cflags_s390="$CPU_CFLAGS"
1585 s390x)
1586 CPU_CFLAGS="-m64"
1587 LDFLAGS="-m64 $LDFLAGS"
1588 cross_cc_s390x=$cc
1589 cross_cc_cflags_s390x="$CPU_CFLAGS"
1591 i386)
1592 CPU_CFLAGS="-m32"
1593 LDFLAGS="-m32 $LDFLAGS"
1594 cross_cc_i386=$cc
1595 cross_cc_cflags_i386="$CPU_CFLAGS"
1597 x86_64)
1598 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1599 # If we truly care, we should simply detect this case at
1600 # runtime and generate the fallback to serial emulation.
1601 CPU_CFLAGS="-m64 -mcx16"
1602 LDFLAGS="-m64 $LDFLAGS"
1603 cross_cc_x86_64=$cc
1604 cross_cc_cflags_x86_64="$CPU_CFLAGS"
1606 x32)
1607 CPU_CFLAGS="-mx32"
1608 LDFLAGS="-mx32 $LDFLAGS"
1609 cross_cc_i386=$cc
1610 cross_cc_cflags_i386="$CPU_CFLAGS"
1612 # No special flags required for other host CPUs
1613 esac
1615 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1617 # For user-mode emulation the host arch has to be one we explicitly
1618 # support, even if we're using TCI.
1619 if [ "$ARCH" = "unknown" ]; then
1620 bsd_user="no"
1621 linux_user="no"
1624 default_target_list=""
1626 mak_wilds=""
1628 if [ "$softmmu" = "yes" ]; then
1629 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1631 if [ "$linux_user" = "yes" ]; then
1632 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1634 if [ "$bsd_user" = "yes" ]; then
1635 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1638 if test -z "$target_list_exclude"; then
1639 for config in $mak_wilds; do
1640 default_target_list="${default_target_list} $(basename "$config" .mak)"
1641 done
1642 else
1643 exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1644 for config in $mak_wilds; do
1645 target="$(basename "$config" .mak)"
1646 exclude="no"
1647 for excl in $exclude_list; do
1648 if test "$excl" = "$target"; then
1649 exclude="yes"
1650 break;
1652 done
1653 if test "$exclude" = "no"; then
1654 default_target_list="${default_target_list} $target"
1656 done
1659 # Enumerate public trace backends for --help output
1660 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1662 if test x"$show_help" = x"yes" ; then
1663 cat << EOF
1665 Usage: configure [options]
1666 Options: [defaults in brackets after descriptions]
1668 Standard options:
1669 --help print this message
1670 --prefix=PREFIX install in PREFIX [$prefix]
1671 --interp-prefix=PREFIX where to find shared libraries, etc.
1672 use %M for cpu name [$interp_prefix]
1673 --target-list=LIST set target list (default: build everything)
1674 $(echo Available targets: $default_target_list | \
1675 fold -s -w 53 | sed -e 's/^/ /')
1676 --target-list-exclude=LIST exclude a set of targets from the default target-list
1678 Advanced options (experts only):
1679 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1680 --cc=CC use C compiler CC [$cc]
1681 --iasl=IASL use ACPI compiler IASL [$iasl]
1682 --host-cc=CC use C compiler CC [$host_cc] for code run at
1683 build time
1684 --cxx=CXX use C++ compiler CXX [$cxx]
1685 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1686 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1687 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1688 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1689 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1690 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1691 --make=MAKE use specified make [$make]
1692 --install=INSTALL use specified install [$install]
1693 --python=PYTHON use specified python [$python]
1694 --smbd=SMBD use specified smbd [$smbd]
1695 --with-git=GIT use specified git [$git]
1696 --static enable static build [$static]
1697 --mandir=PATH install man pages in PATH
1698 --datadir=PATH install firmware in PATH$confsuffix
1699 --docdir=PATH install documentation in PATH$confsuffix
1700 --bindir=PATH install binaries in PATH
1701 --libdir=PATH install libraries in PATH
1702 --libexecdir=PATH install helper binaries in PATH
1703 --sysconfdir=PATH install config in PATH$confsuffix
1704 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1705 --firmwarepath=PATH search PATH for firmware files
1706 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1707 --with-pkgversion=VERS use specified string as sub-version of the package
1708 --enable-debug enable common debug build options
1709 --enable-sanitizers enable default sanitizers
1710 --disable-strip disable stripping binaries
1711 --disable-werror disable compilation abort on warning
1712 --disable-stack-protector disable compiler-provided stack protection
1713 --audio-drv-list=LIST set audio drivers list:
1714 Available drivers: $audio_possible_drivers
1715 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1716 --block-drv-rw-whitelist=L
1717 set block driver read-write whitelist
1718 (affects only QEMU, not qemu-img)
1719 --block-drv-ro-whitelist=L
1720 set block driver read-only whitelist
1721 (affects only QEMU, not qemu-img)
1722 --enable-trace-backends=B Set trace backend
1723 Available backends: $trace_backend_list
1724 --with-trace-file=NAME Full PATH,NAME of file to store traces
1725 Default:trace-<pid>
1726 --disable-slirp disable SLIRP userspace network connectivity
1727 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1728 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1729 --oss-lib path to OSS library
1730 --cpu=CPU Build for host CPU [$cpu]
1731 --with-coroutine=BACKEND coroutine backend. Supported options:
1732 ucontext, sigaltstack, windows
1733 --enable-gcov enable test coverage analysis with gcov
1734 --gcov=GCOV use specified gcov [$gcov_tool]
1735 --disable-blobs disable installing provided firmware blobs
1736 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1737 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1738 --tls-priority default TLS protocol/cipher priority string
1739 --enable-gprof QEMU profiling with gprof
1740 --enable-profiler profiler support
1741 --enable-debug-stack-usage
1742 track the maximum stack usage of stacks created by qemu_alloc_stack
1744 Optional features, enabled with --enable-FEATURE and
1745 disabled with --disable-FEATURE, default is enabled if available:
1747 system all system emulation targets
1748 user supported user emulation targets
1749 linux-user all linux usermode emulation targets
1750 bsd-user all BSD usermode emulation targets
1751 docs build documentation
1752 guest-agent build the QEMU Guest Agent
1753 guest-agent-msi build guest agent Windows MSI installation package
1754 pie Position Independent Executables
1755 modules modules support
1756 debug-tcg TCG debugging (default is disabled)
1757 debug-info debugging information
1758 sparse sparse checker
1760 gnutls GNUTLS cryptography support
1761 nettle nettle cryptography support
1762 gcrypt libgcrypt cryptography support
1763 auth-pam PAM access control
1764 sdl SDL UI
1765 sdl-image SDL Image support for icons
1766 gtk gtk UI
1767 vte vte support for the gtk UI
1768 curses curses UI
1769 iconv font glyph conversion support
1770 vnc VNC UI support
1771 vnc-sasl SASL encryption for VNC server
1772 vnc-jpeg JPEG lossy compression for VNC server
1773 vnc-png PNG compression for VNC server
1774 cocoa Cocoa UI (Mac OS X only)
1775 virtfs VirtFS
1776 mpath Multipath persistent reservation passthrough
1777 xen xen backend driver support
1778 xen-pci-passthrough PCI passthrough support for Xen
1779 brlapi BrlAPI (Braile)
1780 curl curl connectivity
1781 membarrier membarrier system call (for Linux 4.14+ or Windows)
1782 fdt fdt device tree
1783 bluez bluez stack connectivity
1784 kvm KVM acceleration support
1785 hax HAX acceleration support
1786 hvf Hypervisor.framework acceleration support
1787 whpx Windows Hypervisor Platform acceleration support
1788 rdma Enable RDMA-based migration
1789 pvrdma Enable PVRDMA support
1790 vde support for vde network
1791 netmap support for netmap network
1792 linux-aio Linux AIO support
1793 cap-ng libcap-ng support
1794 attr attr and xattr support
1795 vhost-net vhost-net kernel acceleration support
1796 vhost-vsock virtio sockets device support
1797 vhost-scsi vhost-scsi kernel target support
1798 vhost-crypto vhost-user-crypto backend support
1799 vhost-kernel vhost kernel backend support
1800 vhost-user vhost-user backend support
1801 spice spice
1802 rbd rados block device (rbd)
1803 libiscsi iscsi support
1804 libnfs nfs support
1805 smartcard smartcard support (libcacard)
1806 libusb libusb (for usb passthrough)
1807 live-block-migration Block migration in the main migration stream
1808 usb-redir usb network redirection support
1809 lzo support of lzo compression library
1810 snappy support of snappy compression library
1811 bzip2 support of bzip2 compression library
1812 (for reading bzip2-compressed dmg images)
1813 lzfse support of lzfse compression library
1814 (for reading lzfse-compressed dmg images)
1815 seccomp seccomp support
1816 coroutine-pool coroutine freelist (better performance)
1817 glusterfs GlusterFS backend
1818 tpm TPM support
1819 libssh ssh block device support
1820 numa libnuma support
1821 libxml2 for Parallels image format
1822 tcmalloc tcmalloc support
1823 jemalloc jemalloc support
1824 avx2 AVX2 optimization support
1825 replication replication support
1826 opengl opengl support
1827 virglrenderer virgl rendering support
1828 xfsctl xfsctl support
1829 qom-cast-debug cast debugging support
1830 tools build qemu-io, qemu-nbd and qemu-img tools
1831 vxhs Veritas HyperScale vDisk backend support
1832 bochs bochs image format support
1833 cloop cloop image format support
1834 dmg dmg image format support
1835 qcow1 qcow v1 image format support
1836 vdi vdi image format support
1837 vvfat vvfat image format support
1838 qed qed image format support
1839 parallels parallels image format support
1840 sheepdog sheepdog block driver support
1841 crypto-afalg Linux AF_ALG crypto backend driver
1842 capstone capstone disassembler support
1843 debug-mutex mutex debugging support
1844 libpmem libpmem support
1846 NOTE: The object files are built at the place where configure is launched
1848 exit 0
1851 # Remove old dependency files to make sure that they get properly regenerated
1852 rm -f */config-devices.mak.d
1854 if test -z "$python"
1855 then
1856 error_exit "Python not found. Use --python=/path/to/python"
1859 # Note that if the Python conditional here evaluates True we will exit
1860 # with status 1 which is a shell 'false' value.
1861 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1862 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
1863 "Use --python=/path/to/python to specify a supported Python."
1866 # Preserve python version since some functionality is dependent on it
1867 python_version=$($python -V 2>&1 | sed -e 's/Python\ //')
1869 # Suppress writing compiled files
1870 python="$python -B"
1872 # Check that the C compiler works. Doing this here before testing
1873 # the host CPU ensures that we had a valid CC to autodetect the
1874 # $cpu var (and we should bail right here if that's not the case).
1875 # It also allows the help message to be printed without a CC.
1876 write_c_skeleton;
1877 if compile_object ; then
1878 : C compiler works ok
1879 else
1880 error_exit "\"$cc\" either does not exist or does not work"
1882 if ! compile_prog ; then
1883 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1886 # Now we have handled --enable-tcg-interpreter and know we're not just
1887 # printing the help message, bail out if the host CPU isn't supported.
1888 if test "$ARCH" = "unknown"; then
1889 if test "$tcg_interpreter" = "yes" ; then
1890 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1891 else
1892 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1896 # Consult white-list to determine whether to enable werror
1897 # by default. Only enable by default for git builds
1898 if test -z "$werror" ; then
1899 if test -e "$source_path/.git" && \
1900 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1901 werror="yes"
1902 else
1903 werror="no"
1907 if test "$bogus_os" = "yes"; then
1908 # Now that we know that we're not printing the help and that
1909 # the compiler works (so the results of the check_defines we used
1910 # to identify the OS are reliable), if we didn't recognize the
1911 # host OS we should stop now.
1912 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1915 # Check whether the compiler matches our minimum requirements:
1916 cat > $TMPC << EOF
1917 #if defined(__clang_major__) && defined(__clang_minor__)
1918 # ifdef __apple_build_version__
1919 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1920 # error You need at least XCode Clang v5.1 to compile QEMU
1921 # endif
1922 # else
1923 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1924 # error You need at least Clang v3.4 to compile QEMU
1925 # endif
1926 # endif
1927 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1928 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1929 # error You need at least GCC v4.8 to compile QEMU
1930 # endif
1931 #else
1932 # error You either need GCC or Clang to compiler QEMU
1933 #endif
1934 int main (void) { return 0; }
1936 if ! compile_prog "" "" ; then
1937 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1940 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1941 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1942 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1943 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1944 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1945 gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
1946 # Note that we do not add -Werror to gcc_flags here, because that would
1947 # enable it for all configure tests. If a configure test failed due
1948 # to -Werror this would just silently disable some features,
1949 # so it's too error prone.
1951 cc_has_warning_flag() {
1952 write_c_skeleton;
1954 # Use the positive sense of the flag when testing for -Wno-wombat
1955 # support (gcc will happily accept the -Wno- form of unknown
1956 # warning options).
1957 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1958 compile_prog "-Werror $optflag" ""
1961 for flag in $gcc_flags; do
1962 if cc_has_warning_flag $flag ; then
1963 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1965 done
1967 if test "$stack_protector" != "no"; then
1968 cat > $TMPC << EOF
1969 int main(int argc, char *argv[])
1971 char arr[64], *p = arr, *c = argv[0];
1972 while (*c) {
1973 *p++ = *c++;
1975 return 0;
1978 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1979 sp_on=0
1980 for flag in $gcc_flags; do
1981 # We need to check both a compile and a link, since some compiler
1982 # setups fail only on a .c->.o compile and some only at link time
1983 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1984 compile_prog "-Werror $flag" ""; then
1985 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1986 sp_on=1
1987 break
1989 done
1990 if test "$stack_protector" = yes; then
1991 if test $sp_on = 0; then
1992 error_exit "Stack protector not supported"
1997 # Disable -Wmissing-braces on older compilers that warn even for
1998 # the "universal" C zero initializer {0}.
1999 cat > $TMPC << EOF
2000 struct {
2001 int a[2];
2002 } x = {0};
2004 if compile_object "-Werror" "" ; then
2006 else
2007 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2010 # Static linking is not possible with modules or PIE
2011 if test "$static" = "yes" ; then
2012 if test "$modules" = "yes" ; then
2013 error_exit "static and modules are mutually incompatible"
2015 if test "$pie" = "yes" ; then
2016 error_exit "static and pie are mutually incompatible"
2017 else
2018 pie="no"
2022 # Unconditional check for compiler __thread support
2023 cat > $TMPC << EOF
2024 static __thread int tls_var;
2025 int main(void) { return tls_var; }
2028 if ! compile_prog "-Werror" "" ; then
2029 error_exit "Your compiler does not support the __thread specifier for " \
2030 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2033 if test "$pie" = ""; then
2034 case "$cpu-$targetos" in
2035 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
2038 pie="no"
2040 esac
2043 if test "$pie" != "no" ; then
2044 cat > $TMPC << EOF
2046 #ifdef __linux__
2047 # define THREAD __thread
2048 #else
2049 # define THREAD
2050 #endif
2052 static THREAD int tls_var;
2054 int main(void) { return tls_var; }
2057 if compile_prog "-fPIE -DPIE" "-pie"; then
2058 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2059 LDFLAGS="-pie $LDFLAGS"
2060 pie="yes"
2061 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2062 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2064 else
2065 if test "$pie" = "yes"; then
2066 error_exit "PIE not available due to missing toolchain support"
2067 else
2068 echo "Disabling PIE due to missing toolchain support"
2069 pie="no"
2073 if compile_prog "-Werror -fno-pie" "-nopie"; then
2074 CFLAGS_NOPIE="-fno-pie"
2075 LDFLAGS_NOPIE="-nopie"
2079 ##########################################
2080 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2081 # use i686 as default anyway, but for those that don't, an explicit
2082 # specification is necessary
2084 if test "$cpu" = "i386"; then
2085 cat > $TMPC << EOF
2086 static int sfaa(int *ptr)
2088 return __sync_fetch_and_and(ptr, 0);
2091 int main(void)
2093 int val = 42;
2094 val = __sync_val_compare_and_swap(&val, 0, 1);
2095 sfaa(&val);
2096 return val;
2099 if ! compile_prog "" "" ; then
2100 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2104 #########################################
2105 # Solaris specific configure tool chain decisions
2107 if test "$solaris" = "yes" ; then
2108 if has $install; then
2110 else
2111 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2112 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2113 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2115 if test "$(path_of $install)" = "/usr/sbin/install" ; then
2116 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2117 "try ginstall from the GNU fileutils available from www.blastwave.org" \
2118 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2120 if has ar; then
2122 else
2123 if test -f /usr/ccs/bin/ar ; then
2124 error_exit "No path includes ar" \
2125 "Add /usr/ccs/bin to your path and rerun configure"
2127 error_exit "No path includes ar"
2131 if test -z "${target_list+xxx}" ; then
2132 for target in $default_target_list; do
2133 supported_target $target 2>/dev/null && \
2134 target_list="$target_list $target"
2135 done
2136 target_list="${target_list# }"
2137 else
2138 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2139 for target in $target_list; do
2140 # Check that we recognised the target name; this allows a more
2141 # friendly error message than if we let it fall through.
2142 case " $default_target_list " in
2143 *" $target "*)
2146 error_exit "Unknown target name '$target'"
2148 esac
2149 supported_target $target || exit 1
2150 done
2153 # see if system emulation was really requested
2154 case " $target_list " in
2155 *"-softmmu "*) softmmu=yes
2157 *) softmmu=no
2159 esac
2161 feature_not_found() {
2162 feature=$1
2163 remedy=$2
2165 error_exit "User requested feature $feature" \
2166 "configure was not able to find it." \
2167 "$remedy"
2170 # ---
2171 # big/little endian test
2172 cat > $TMPC << EOF
2173 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2174 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2175 extern int foo(short *, short *);
2176 int main(int argc, char *argv[]) {
2177 return foo(big_endian, little_endian);
2181 if compile_object ; then
2182 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2183 bigendian="yes"
2184 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2185 bigendian="no"
2186 else
2187 echo big/little test failed
2189 else
2190 echo big/little test failed
2193 ##########################################
2194 # cocoa implies not SDL or GTK
2195 # (the cocoa UI code currently assumes it is always the active UI
2196 # and doesn't interact well with other UI frontend code)
2197 if test "$cocoa" = "yes"; then
2198 if test "$sdl" = "yes"; then
2199 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2201 if test "$gtk" = "yes"; then
2202 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2204 gtk=no
2205 sdl=no
2208 # Some versions of Mac OS X incorrectly define SIZE_MAX
2209 cat > $TMPC << EOF
2210 #include <stdint.h>
2211 #include <stdio.h>
2212 int main(int argc, char *argv[]) {
2213 return printf("%zu", SIZE_MAX);
2216 have_broken_size_max=no
2217 if ! compile_object -Werror ; then
2218 have_broken_size_max=yes
2221 ##########################################
2222 # L2TPV3 probe
2224 cat > $TMPC <<EOF
2225 #include <sys/socket.h>
2226 #include <linux/ip.h>
2227 int main(void) { return sizeof(struct mmsghdr); }
2229 if compile_prog "" "" ; then
2230 l2tpv3=yes
2231 else
2232 l2tpv3=no
2235 #########################################
2236 # vhost interdependencies and host support
2238 # vhost backends
2239 test "$vhost_user" = "" && vhost_user=yes
2240 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2241 error_exit "vhost-user isn't available on win32"
2243 test "$vhost_kernel" = "" && vhost_kernel=$linux
2244 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2245 error_exit "vhost-kernel is only available on Linux"
2248 # vhost-kernel devices
2249 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2250 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2251 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2253 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2254 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2255 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2258 # vhost-user backends
2259 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2260 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2261 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2263 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2264 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2265 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2268 # OR the vhost-kernel and vhost-user values for simplicity
2269 if test "$vhost_net" = ""; then
2270 test "$vhost_net_user" = "yes" && vhost_net=yes
2271 test "$vhost_kernel" = "yes" && vhost_net=yes
2274 ##########################################
2275 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2277 if test "$mingw32" = "yes"; then
2278 # Some versions of MinGW / Mingw-w64 lack localtime_r
2279 # and gmtime_r entirely.
2281 # Some versions of Mingw-w64 define a macro for
2282 # localtime_r/gmtime_r.
2284 # Some versions of Mingw-w64 will define functions
2285 # for localtime_r/gmtime_r, but only if you have
2286 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2287 # though, unistd.h and pthread.h both define
2288 # that for you.
2290 # So this #undef localtime_r and #include <unistd.h>
2291 # are not in fact redundant.
2292 cat > $TMPC << EOF
2293 #include <unistd.h>
2294 #include <time.h>
2295 #undef localtime_r
2296 int main(void) { localtime_r(NULL, NULL); return 0; }
2298 if compile_prog "" "" ; then
2299 localtime_r="yes"
2300 else
2301 localtime_r="no"
2305 ##########################################
2306 # pkg-config probe
2308 if ! has "$pkg_config_exe"; then
2309 error_exit "pkg-config binary '$pkg_config_exe' not found"
2312 ##########################################
2313 # NPTL probe
2315 if test "$linux_user" = "yes"; then
2316 cat > $TMPC <<EOF
2317 #include <sched.h>
2318 #include <linux/futex.h>
2319 int main(void) {
2320 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2321 #error bork
2322 #endif
2323 return 0;
2326 if ! compile_object ; then
2327 feature_not_found "nptl" "Install glibc and linux kernel headers."
2331 ##########################################
2332 # lzo check
2334 if test "$lzo" != "no" ; then
2335 cat > $TMPC << EOF
2336 #include <lzo/lzo1x.h>
2337 int main(void) { lzo_version(); return 0; }
2339 if compile_prog "" "-llzo2" ; then
2340 libs_softmmu="$libs_softmmu -llzo2"
2341 lzo="yes"
2342 else
2343 if test "$lzo" = "yes"; then
2344 feature_not_found "liblzo2" "Install liblzo2 devel"
2346 lzo="no"
2350 ##########################################
2351 # snappy check
2353 if test "$snappy" != "no" ; then
2354 cat > $TMPC << EOF
2355 #include <snappy-c.h>
2356 int main(void) { snappy_max_compressed_length(4096); return 0; }
2358 if compile_prog "" "-lsnappy" ; then
2359 libs_softmmu="$libs_softmmu -lsnappy"
2360 snappy="yes"
2361 else
2362 if test "$snappy" = "yes"; then
2363 feature_not_found "libsnappy" "Install libsnappy devel"
2365 snappy="no"
2369 ##########################################
2370 # bzip2 check
2372 if test "$bzip2" != "no" ; then
2373 cat > $TMPC << EOF
2374 #include <bzlib.h>
2375 int main(void) { BZ2_bzlibVersion(); return 0; }
2377 if compile_prog "" "-lbz2" ; then
2378 bzip2="yes"
2379 else
2380 if test "$bzip2" = "yes"; then
2381 feature_not_found "libbzip2" "Install libbzip2 devel"
2383 bzip2="no"
2387 ##########################################
2388 # lzfse check
2390 if test "$lzfse" != "no" ; then
2391 cat > $TMPC << EOF
2392 #include <lzfse.h>
2393 int main(void) { lzfse_decode_scratch_size(); return 0; }
2395 if compile_prog "" "-llzfse" ; then
2396 lzfse="yes"
2397 else
2398 if test "$lzfse" = "yes"; then
2399 feature_not_found "lzfse" "Install lzfse devel"
2401 lzfse="no"
2405 ##########################################
2406 # libseccomp check
2408 if test "$seccomp" != "no" ; then
2409 libseccomp_minver="2.3.0"
2410 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2411 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2412 seccomp_libs="$($pkg_config --libs libseccomp)"
2413 seccomp="yes"
2414 else
2415 if test "$seccomp" = "yes" ; then
2416 feature_not_found "libseccomp" \
2417 "Install libseccomp devel >= $libseccomp_minver"
2419 seccomp="no"
2422 ##########################################
2423 # xen probe
2425 if test "$xen" != "no" ; then
2426 # Check whether Xen library path is specified via --extra-ldflags to avoid
2427 # overriding this setting with pkg-config output. If not, try pkg-config
2428 # to obtain all needed flags.
2430 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2431 $pkg_config --exists xencontrol ; then
2432 xen_ctrl_version="$(printf '%d%02d%02d' \
2433 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2434 xen=yes
2435 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2436 xen_pc="$xen_pc xenevtchn xendevicemodel"
2437 if $pkg_config --exists xentoolcore; then
2438 xen_pc="$xen_pc xentoolcore"
2440 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2441 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2442 else
2444 xen_libs="-lxenstore -lxenctrl -lxenguest"
2445 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2447 # First we test whether Xen headers and libraries are available.
2448 # If no, we are done and there is no Xen support.
2449 # If yes, more tests are run to detect the Xen version.
2451 # Xen (any)
2452 cat > $TMPC <<EOF
2453 #include <xenctrl.h>
2454 int main(void) {
2455 return 0;
2458 if ! compile_prog "" "$xen_libs" ; then
2459 # Xen not found
2460 if test "$xen" = "yes" ; then
2461 feature_not_found "xen" "Install xen devel"
2463 xen=no
2465 # Xen unstable
2466 elif
2467 cat > $TMPC <<EOF &&
2468 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2469 #define __XEN_TOOLS__
2470 #include <xendevicemodel.h>
2471 #include <xenforeignmemory.h>
2472 int main(void) {
2473 xendevicemodel_handle *xd;
2474 xenforeignmemory_handle *xfmem;
2476 xd = xendevicemodel_open(0, 0);
2477 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2479 xfmem = xenforeignmemory_open(0, 0);
2480 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2482 return 0;
2485 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2486 then
2487 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2488 xen_ctrl_version=41100
2489 xen=yes
2490 elif
2491 cat > $TMPC <<EOF &&
2492 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2493 #include <xenforeignmemory.h>
2494 #include <xentoolcore.h>
2495 int main(void) {
2496 xenforeignmemory_handle *xfmem;
2498 xfmem = xenforeignmemory_open(0, 0);
2499 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2500 xentoolcore_restrict_all(0);
2502 return 0;
2505 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2506 then
2507 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2508 xen_ctrl_version=41000
2509 xen=yes
2510 elif
2511 cat > $TMPC <<EOF &&
2512 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2513 #define __XEN_TOOLS__
2514 #include <xendevicemodel.h>
2515 int main(void) {
2516 xendevicemodel_handle *xd;
2518 xd = xendevicemodel_open(0, 0);
2519 xendevicemodel_close(xd);
2521 return 0;
2524 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2525 then
2526 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2527 xen_ctrl_version=40900
2528 xen=yes
2529 elif
2530 cat > $TMPC <<EOF &&
2532 * If we have stable libs the we don't want the libxc compat
2533 * layers, regardless of what CFLAGS we may have been given.
2535 * Also, check if xengnttab_grant_copy_segment_t is defined and
2536 * grant copy operation is implemented.
2538 #undef XC_WANT_COMPAT_EVTCHN_API
2539 #undef XC_WANT_COMPAT_GNTTAB_API
2540 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2541 #include <xenctrl.h>
2542 #include <xenstore.h>
2543 #include <xenevtchn.h>
2544 #include <xengnttab.h>
2545 #include <xenforeignmemory.h>
2546 #include <stdint.h>
2547 #include <xen/hvm/hvm_info_table.h>
2548 #if !defined(HVM_MAX_VCPUS)
2549 # error HVM_MAX_VCPUS not defined
2550 #endif
2551 int main(void) {
2552 xc_interface *xc = NULL;
2553 xenforeignmemory_handle *xfmem;
2554 xenevtchn_handle *xe;
2555 xengnttab_handle *xg;
2556 xengnttab_grant_copy_segment_t* seg = NULL;
2558 xs_daemon_open();
2560 xc = xc_interface_open(0, 0, 0);
2561 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2562 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2563 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2564 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2566 xfmem = xenforeignmemory_open(0, 0);
2567 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2569 xe = xenevtchn_open(0, 0);
2570 xenevtchn_fd(xe);
2572 xg = xengnttab_open(0, 0);
2573 xengnttab_grant_copy(xg, 0, seg);
2575 return 0;
2578 compile_prog "" "$xen_libs $xen_stable_libs"
2579 then
2580 xen_ctrl_version=40800
2581 xen=yes
2582 elif
2583 cat > $TMPC <<EOF &&
2585 * If we have stable libs the we don't want the libxc compat
2586 * layers, regardless of what CFLAGS we may have been given.
2588 #undef XC_WANT_COMPAT_EVTCHN_API
2589 #undef XC_WANT_COMPAT_GNTTAB_API
2590 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2591 #include <xenctrl.h>
2592 #include <xenstore.h>
2593 #include <xenevtchn.h>
2594 #include <xengnttab.h>
2595 #include <xenforeignmemory.h>
2596 #include <stdint.h>
2597 #include <xen/hvm/hvm_info_table.h>
2598 #if !defined(HVM_MAX_VCPUS)
2599 # error HVM_MAX_VCPUS not defined
2600 #endif
2601 int main(void) {
2602 xc_interface *xc = NULL;
2603 xenforeignmemory_handle *xfmem;
2604 xenevtchn_handle *xe;
2605 xengnttab_handle *xg;
2607 xs_daemon_open();
2609 xc = xc_interface_open(0, 0, 0);
2610 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2611 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2612 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2613 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2615 xfmem = xenforeignmemory_open(0, 0);
2616 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2618 xe = xenevtchn_open(0, 0);
2619 xenevtchn_fd(xe);
2621 xg = xengnttab_open(0, 0);
2622 xengnttab_map_grant_ref(xg, 0, 0, 0);
2624 return 0;
2627 compile_prog "" "$xen_libs $xen_stable_libs"
2628 then
2629 xen_ctrl_version=40701
2630 xen=yes
2632 # Xen 4.6
2633 elif
2634 cat > $TMPC <<EOF &&
2635 #include <xenctrl.h>
2636 #include <xenstore.h>
2637 #include <stdint.h>
2638 #include <xen/hvm/hvm_info_table.h>
2639 #if !defined(HVM_MAX_VCPUS)
2640 # error HVM_MAX_VCPUS not defined
2641 #endif
2642 int main(void) {
2643 xc_interface *xc;
2644 xs_daemon_open();
2645 xc = xc_interface_open(0, 0, 0);
2646 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2647 xc_gnttab_open(NULL, 0);
2648 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2649 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2650 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2651 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2652 return 0;
2655 compile_prog "" "$xen_libs"
2656 then
2657 xen_ctrl_version=40600
2658 xen=yes
2660 # Xen 4.5
2661 elif
2662 cat > $TMPC <<EOF &&
2663 #include <xenctrl.h>
2664 #include <xenstore.h>
2665 #include <stdint.h>
2666 #include <xen/hvm/hvm_info_table.h>
2667 #if !defined(HVM_MAX_VCPUS)
2668 # error HVM_MAX_VCPUS not defined
2669 #endif
2670 int main(void) {
2671 xc_interface *xc;
2672 xs_daemon_open();
2673 xc = xc_interface_open(0, 0, 0);
2674 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2675 xc_gnttab_open(NULL, 0);
2676 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2677 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2678 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2679 return 0;
2682 compile_prog "" "$xen_libs"
2683 then
2684 xen_ctrl_version=40500
2685 xen=yes
2687 elif
2688 cat > $TMPC <<EOF &&
2689 #include <xenctrl.h>
2690 #include <xenstore.h>
2691 #include <stdint.h>
2692 #include <xen/hvm/hvm_info_table.h>
2693 #if !defined(HVM_MAX_VCPUS)
2694 # error HVM_MAX_VCPUS not defined
2695 #endif
2696 int main(void) {
2697 xc_interface *xc;
2698 xs_daemon_open();
2699 xc = xc_interface_open(0, 0, 0);
2700 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2701 xc_gnttab_open(NULL, 0);
2702 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2703 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2704 return 0;
2707 compile_prog "" "$xen_libs"
2708 then
2709 xen_ctrl_version=40200
2710 xen=yes
2712 else
2713 if test "$xen" = "yes" ; then
2714 feature_not_found "xen (unsupported version)" \
2715 "Install a supported xen (xen 4.2 or newer)"
2717 xen=no
2720 if test "$xen" = yes; then
2721 if test $xen_ctrl_version -ge 40701 ; then
2722 libs_softmmu="$xen_stable_libs $libs_softmmu"
2724 libs_softmmu="$xen_libs $libs_softmmu"
2729 if test "$xen_pci_passthrough" != "no"; then
2730 if test "$xen" = "yes" && test "$linux" = "yes"; then
2731 xen_pci_passthrough=yes
2732 else
2733 if test "$xen_pci_passthrough" = "yes"; then
2734 error_exit "User requested feature Xen PCI Passthrough" \
2735 " but this feature requires /sys from Linux"
2737 xen_pci_passthrough=no
2741 ##########################################
2742 # Windows Hypervisor Platform accelerator (WHPX) check
2743 if test "$whpx" != "no" ; then
2744 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2745 whpx="yes"
2746 else
2747 if test "$whpx" = "yes"; then
2748 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2750 whpx="no"
2754 ##########################################
2755 # Sparse probe
2756 if test "$sparse" != "no" ; then
2757 if has cgcc; then
2758 sparse=yes
2759 else
2760 if test "$sparse" = "yes" ; then
2761 feature_not_found "sparse" "Install sparse binary"
2763 sparse=no
2767 ##########################################
2768 # X11 probe
2769 if $pkg_config --exists "x11"; then
2770 have_x11=yes
2771 x11_cflags=$($pkg_config --cflags x11)
2772 x11_libs=$($pkg_config --libs x11)
2775 ##########################################
2776 # GTK probe
2778 if test "$gtk" != "no"; then
2779 gtkpackage="gtk+-3.0"
2780 gtkx11package="gtk+-x11-3.0"
2781 gtkversion="3.14.0"
2782 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2783 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2784 gtk_libs=$($pkg_config --libs $gtkpackage)
2785 gtk_version=$($pkg_config --modversion $gtkpackage)
2786 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2787 need_x11=yes
2788 gtk_cflags="$gtk_cflags $x11_cflags"
2789 gtk_libs="$gtk_libs $x11_libs"
2791 gtk="yes"
2792 elif test "$gtk" = "yes"; then
2793 feature_not_found "gtk" "Install gtk3-devel"
2794 else
2795 gtk="no"
2800 ##########################################
2801 # GNUTLS probe
2803 if test "$gnutls" != "no"; then
2804 pass="no"
2805 if $pkg_config --exists "gnutls >= 3.1.18"; then
2806 gnutls_cflags=$($pkg_config --cflags gnutls)
2807 gnutls_libs=$($pkg_config --libs gnutls)
2808 # Packaging for the static libraries is not always correct.
2809 # At least ubuntu 18.04 ships only shared libraries.
2810 write_c_skeleton
2811 if compile_prog "" "$gnutls_libs" ; then
2812 LIBS="$gnutls_libs $LIBS"
2813 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2814 pass="yes"
2817 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2818 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2819 else
2820 gnutls="$pass"
2825 # If user didn't give a --disable/enable-gcrypt flag,
2826 # then mark as disabled if user requested nettle
2827 # explicitly
2828 if test -z "$gcrypt"
2829 then
2830 if test "$nettle" = "yes"
2831 then
2832 gcrypt="no"
2836 # If user didn't give a --disable/enable-nettle flag,
2837 # then mark as disabled if user requested gcrypt
2838 # explicitly
2839 if test -z "$nettle"
2840 then
2841 if test "$gcrypt" = "yes"
2842 then
2843 nettle="no"
2847 has_libgcrypt() {
2848 if ! has "libgcrypt-config"
2849 then
2850 return 1
2853 if test -n "$cross_prefix"
2854 then
2855 host=$(libgcrypt-config --host)
2856 if test "$host-" != $cross_prefix
2857 then
2858 return 1
2862 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2863 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2865 if test $maj != 1 || test $min -lt 5
2866 then
2867 return 1
2870 return 0
2874 if test "$nettle" != "no"; then
2875 pass="no"
2876 if $pkg_config --exists "nettle >= 2.7.1"; then
2877 nettle_cflags=$($pkg_config --cflags nettle)
2878 nettle_libs=$($pkg_config --libs nettle)
2879 nettle_version=$($pkg_config --modversion nettle)
2880 # Link test to make sure the given libraries work (e.g for static).
2881 write_c_skeleton
2882 if compile_prog "" "$nettle_libs" ; then
2883 LIBS="$nettle_libs $LIBS"
2884 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2885 if test -z "$gcrypt"; then
2886 gcrypt="no"
2888 pass="yes"
2891 if test "$pass" = "no" && test "$nettle" = "yes"; then
2892 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2893 else
2894 nettle="$pass"
2898 if test "$gcrypt" != "no"; then
2899 pass="no"
2900 if has_libgcrypt; then
2901 gcrypt_cflags=$(libgcrypt-config --cflags)
2902 gcrypt_libs=$(libgcrypt-config --libs)
2903 # Debian has removed -lgpg-error from libgcrypt-config
2904 # as it "spreads unnecessary dependencies" which in
2905 # turn breaks static builds...
2906 if test "$static" = "yes"
2907 then
2908 gcrypt_libs="$gcrypt_libs -lgpg-error"
2911 # Link test to make sure the given libraries work (e.g for static).
2912 write_c_skeleton
2913 if compile_prog "" "$gcrypt_libs" ; then
2914 LIBS="$gcrypt_libs $LIBS"
2915 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2916 pass="yes"
2919 if test "$pass" = "yes"; then
2920 gcrypt="yes"
2921 cat > $TMPC << EOF
2922 #include <gcrypt.h>
2923 int main(void) {
2924 gcry_mac_hd_t handle;
2925 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2926 GCRY_MAC_FLAG_SECURE, NULL);
2927 return 0;
2930 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2931 gcrypt_hmac=yes
2933 elif test "$gcrypt" = "yes"; then
2934 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
2935 else
2936 gcrypt="no"
2941 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2942 then
2943 error_exit "Only one of gcrypt & nettle can be enabled"
2946 ##########################################
2947 # libtasn1 - only for the TLS creds/session test suite
2949 tasn1=yes
2950 tasn1_cflags=""
2951 tasn1_libs=""
2952 if $pkg_config --exists "libtasn1"; then
2953 tasn1_cflags=$($pkg_config --cflags libtasn1)
2954 tasn1_libs=$($pkg_config --libs libtasn1)
2955 else
2956 tasn1=no
2960 ##########################################
2961 # PAM probe
2963 if test "$auth_pam" != "no"; then
2964 cat > $TMPC <<EOF
2965 #include <security/pam_appl.h>
2966 #include <stdio.h>
2967 int main(void) {
2968 const char *service_name = "qemu";
2969 const char *user = "frank";
2970 const struct pam_conv pam_conv = { 0 };
2971 pam_handle_t *pamh = NULL;
2972 pam_start(service_name, user, &pam_conv, &pamh);
2973 return 0;
2976 if compile_prog "" "-lpam" ; then
2977 auth_pam=yes
2978 else
2979 if test "$auth_pam" = "yes"; then
2980 feature_not_found "PAM" "Install PAM development package"
2981 else
2982 auth_pam=no
2987 ##########################################
2988 # getifaddrs (for tests/test-io-channel-socket )
2990 have_ifaddrs_h=yes
2991 if ! check_include "ifaddrs.h" ; then
2992 have_ifaddrs_h=no
2995 ##########################################
2996 # VTE probe
2998 if test "$vte" != "no"; then
2999 vteminversion="0.32.0"
3000 if $pkg_config --exists "vte-2.91"; then
3001 vtepackage="vte-2.91"
3002 else
3003 vtepackage="vte-2.90"
3005 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3006 vte_cflags=$($pkg_config --cflags $vtepackage)
3007 vte_libs=$($pkg_config --libs $vtepackage)
3008 vteversion=$($pkg_config --modversion $vtepackage)
3009 vte="yes"
3010 elif test "$vte" = "yes"; then
3011 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3012 else
3013 vte="no"
3017 ##########################################
3018 # SDL probe
3020 # Look for sdl configuration program (pkg-config or sdl-config). Try
3021 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
3023 sdl_probe ()
3025 if $pkg_config sdl2 --exists; then
3026 sdlconfig="$pkg_config sdl2"
3027 sdlversion=$($sdlconfig --modversion 2>/dev/null)
3028 elif has ${sdl_config}; then
3029 sdlconfig="$sdl2_config"
3030 sdlversion=$($sdlconfig --version)
3031 else
3032 if test "$sdl" = "yes" ; then
3033 feature_not_found "sdl" "Install SDL2-devel"
3035 sdl=no
3036 # no need to do the rest
3037 return
3039 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
3040 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3043 cat > $TMPC << EOF
3044 #include <SDL.h>
3045 #undef main /* We don't want SDL to override our main() */
3046 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3048 sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3049 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
3050 if test "$static" = "yes" ; then
3051 if $pkg_config sdl2 --exists; then
3052 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3053 else
3054 sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3056 else
3057 sdl_libs=$($sdlconfig --libs 2>/dev/null)
3059 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3060 sdl=yes
3062 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3063 if test "$sdl" = "yes" && test "$static" = "yes" ; then
3064 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3065 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3066 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3068 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3070 else
3071 sdl=no
3073 fi # static link
3074 else # sdl not found
3075 if test "$sdl" = "yes" ; then
3076 feature_not_found "sdl" "Install SDL2 devel"
3078 sdl=no
3079 fi # sdl compile test
3082 sdl_image_probe ()
3084 if test "$sdl_image" != "no" ; then
3085 if $pkg_config SDL2_image --exists; then
3086 if test "$static" = "yes"; then
3087 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3088 else
3089 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3091 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3092 sdl_image=yes
3094 sdl_cflags="$sdl_cflags $sdl_image_cflags"
3095 sdl_libs="$sdl_libs $sdl_image_libs"
3096 else
3097 if test "$sdl_image" = "yes" ; then
3098 feature_not_found "sdl_image" "Install SDL Image devel"
3099 else
3100 sdl_image=no
3106 if test "$sdl" != "no" ; then
3107 sdl_probe
3110 if test "$sdl" = "yes" ; then
3111 sdl_image_probe
3112 else
3113 if test "$sdl_image" = "yes"; then
3114 echo "warning: SDL Image requested, but SDL is not available, disabling"
3116 sdl_image=no
3119 if test "$sdl" = "yes" ; then
3120 cat > $TMPC <<EOF
3121 #include <SDL.h>
3122 #if defined(SDL_VIDEO_DRIVER_X11)
3123 #include <X11/XKBlib.h>
3124 #else
3125 #error No x11 support
3126 #endif
3127 int main(void) { return 0; }
3129 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3130 need_x11=yes
3131 sdl_cflags="$sdl_cflags $x11_cflags"
3132 sdl_libs="$sdl_libs $x11_libs"
3136 ##########################################
3137 # RDMA needs OpenFabrics libraries
3138 if test "$rdma" != "no" ; then
3139 cat > $TMPC <<EOF
3140 #include <rdma/rdma_cma.h>
3141 int main(void) { return 0; }
3143 rdma_libs="-lrdmacm -libverbs -libumad"
3144 if compile_prog "" "$rdma_libs" ; then
3145 rdma="yes"
3146 libs_softmmu="$libs_softmmu $rdma_libs"
3147 else
3148 if test "$rdma" = "yes" ; then
3149 error_exit \
3150 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3151 " Your options:" \
3152 " (1) Fast: Install infiniband packages (devel) from your distro." \
3153 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3154 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3156 rdma="no"
3160 ##########################################
3161 # PVRDMA detection
3163 cat > $TMPC <<EOF &&
3164 #include <sys/mman.h>
3167 main(void)
3169 char buf = 0;
3170 void *addr = &buf;
3171 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3173 return 0;
3177 if test "$rdma" = "yes" ; then
3178 case "$pvrdma" in
3180 if compile_prog "" ""; then
3181 pvrdma="yes"
3182 else
3183 pvrdma="no"
3186 "yes")
3187 if ! compile_prog "" ""; then
3188 error_exit "PVRDMA is not supported since mremap is not implemented"
3190 pvrdma="yes"
3192 "no")
3193 pvrdma="no"
3195 esac
3196 else
3197 if test "$pvrdma" = "yes" ; then
3198 error_exit "PVRDMA requires rdma suppport"
3200 pvrdma="no"
3203 ##########################################
3204 # VNC SASL detection
3205 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3206 cat > $TMPC <<EOF
3207 #include <sasl/sasl.h>
3208 #include <stdio.h>
3209 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3211 # Assuming Cyrus-SASL installed in /usr prefix
3212 vnc_sasl_cflags=""
3213 vnc_sasl_libs="-lsasl2"
3214 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3215 vnc_sasl=yes
3216 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3217 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3218 else
3219 if test "$vnc_sasl" = "yes" ; then
3220 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3222 vnc_sasl=no
3226 ##########################################
3227 # VNC JPEG detection
3228 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3229 cat > $TMPC <<EOF
3230 #include <stdio.h>
3231 #include <jpeglib.h>
3232 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3234 vnc_jpeg_cflags=""
3235 vnc_jpeg_libs="-ljpeg"
3236 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3237 vnc_jpeg=yes
3238 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3239 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3240 else
3241 if test "$vnc_jpeg" = "yes" ; then
3242 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3244 vnc_jpeg=no
3248 ##########################################
3249 # VNC PNG detection
3250 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3251 cat > $TMPC <<EOF
3252 //#include <stdio.h>
3253 #include <png.h>
3254 #include <stddef.h>
3255 int main(void) {
3256 png_structp png_ptr;
3257 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3258 return png_ptr != 0;
3261 if $pkg_config libpng --exists; then
3262 vnc_png_cflags=$($pkg_config libpng --cflags)
3263 vnc_png_libs=$($pkg_config libpng --libs)
3264 else
3265 vnc_png_cflags=""
3266 vnc_png_libs="-lpng"
3268 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3269 vnc_png=yes
3270 libs_softmmu="$vnc_png_libs $libs_softmmu"
3271 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3272 else
3273 if test "$vnc_png" = "yes" ; then
3274 feature_not_found "vnc-png" "Install libpng devel"
3276 vnc_png=no
3280 ##########################################
3281 # xkbcommon probe
3282 if test "$xkbcommon" != "no" ; then
3283 if $pkg_config xkbcommon --exists; then
3284 xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3285 xkbcommon_libs=$($pkg_config xkbcommon --libs)
3286 xkbcommon=yes
3287 else
3288 if test "$xkbcommon" = "yes" ; then
3289 feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3291 xkbcommon=no
3296 ##########################################
3297 # xfsctl() probe, used for file-posix.c
3298 if test "$xfs" != "no" ; then
3299 cat > $TMPC << EOF
3300 #include <stddef.h> /* NULL */
3301 #include <xfs/xfs.h>
3302 int main(void)
3304 xfsctl(NULL, 0, 0, NULL);
3305 return 0;
3308 if compile_prog "" "" ; then
3309 xfs="yes"
3310 else
3311 if test "$xfs" = "yes" ; then
3312 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3314 xfs=no
3318 ##########################################
3319 # vde libraries probe
3320 if test "$vde" != "no" ; then
3321 vde_libs="-lvdeplug"
3322 cat > $TMPC << EOF
3323 #include <libvdeplug.h>
3324 int main(void)
3326 struct vde_open_args a = {0, 0, 0};
3327 char s[] = "";
3328 vde_open(s, s, &a);
3329 return 0;
3332 if compile_prog "" "$vde_libs" ; then
3333 vde=yes
3334 else
3335 if test "$vde" = "yes" ; then
3336 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3338 vde=no
3342 ##########################################
3343 # netmap support probe
3344 # Apart from looking for netmap headers, we make sure that the host API version
3345 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3346 # a minor/major version number. Minor new features will be marked with values up
3347 # to 15, and if something happens that requires a change to the backend we will
3348 # move above 15, submit the backend fixes and modify this two bounds.
3349 if test "$netmap" != "no" ; then
3350 cat > $TMPC << EOF
3351 #include <inttypes.h>
3352 #include <net/if.h>
3353 #include <net/netmap.h>
3354 #include <net/netmap_user.h>
3355 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3356 #error
3357 #endif
3358 int main(void) { return 0; }
3360 if compile_prog "" "" ; then
3361 netmap=yes
3362 else
3363 if test "$netmap" = "yes" ; then
3364 feature_not_found "netmap"
3366 netmap=no
3370 ##########################################
3371 # libcap-ng library probe
3372 if test "$cap_ng" != "no" ; then
3373 cap_libs="-lcap-ng"
3374 cat > $TMPC << EOF
3375 #include <cap-ng.h>
3376 int main(void)
3378 capng_capability_to_name(CAPNG_EFFECTIVE);
3379 return 0;
3382 if compile_prog "" "$cap_libs" ; then
3383 cap_ng=yes
3384 libs_tools="$cap_libs $libs_tools"
3385 else
3386 if test "$cap_ng" = "yes" ; then
3387 feature_not_found "cap_ng" "Install libcap-ng devel"
3389 cap_ng=no
3393 ##########################################
3394 # Sound support libraries probe
3396 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3397 for drv in $audio_drv_list; do
3398 case $drv in
3399 alsa | try-alsa)
3400 if $pkg_config alsa --exists; then
3401 alsa_libs=$($pkg_config alsa --libs)
3402 if test "$drv" = "try-alsa"; then
3403 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3405 else
3406 if test "$drv" = "try-alsa"; then
3407 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3408 else
3409 error_exit "$drv check failed" \
3410 "Make sure to have the $drv libs and headers installed."
3415 pa | try-pa)
3416 if $pkg_config libpulse --exists; then
3417 pulse_libs=$($pkg_config libpulse --libs)
3418 audio_pt_int="yes"
3419 if test "$drv" = "try-pa"; then
3420 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3422 else
3423 if test "$drv" = "try-pa"; then
3424 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3425 else
3426 error_exit "$drv check failed" \
3427 "Make sure to have the $drv libs and headers installed."
3432 sdl)
3433 if test "$sdl" = "no"; then
3434 error_exit "sdl not found or disabled, can not use sdl audio driver"
3438 try-sdl)
3439 if test "$sdl" = "no"; then
3440 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3441 else
3442 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3446 coreaudio)
3447 coreaudio_libs="-framework CoreAudio"
3450 dsound)
3451 dsound_libs="-lole32 -ldxguid"
3452 audio_win_int="yes"
3455 oss)
3456 oss_libs="$oss_lib"
3460 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3461 error_exit "Unknown driver '$drv' selected" \
3462 "Possible drivers are: $audio_possible_drivers"
3465 esac
3466 done
3468 ##########################################
3469 # BrlAPI probe
3471 if test "$brlapi" != "no" ; then
3472 brlapi_libs="-lbrlapi"
3473 cat > $TMPC << EOF
3474 #include <brlapi.h>
3475 #include <stddef.h>
3476 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3478 if compile_prog "" "$brlapi_libs" ; then
3479 brlapi=yes
3480 else
3481 if test "$brlapi" = "yes" ; then
3482 feature_not_found "brlapi" "Install brlapi devel"
3484 brlapi=no
3488 ##########################################
3489 # iconv probe
3490 if test "$iconv" != "no" ; then
3491 cat > $TMPC << EOF
3492 #include <iconv.h>
3493 int main(void) {
3494 iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3495 return conv != (iconv_t) -1;
3498 iconv_prefix_list="/usr/local:/usr"
3499 iconv_lib_list=":-liconv"
3500 IFS=:
3501 for iconv_prefix in $iconv_prefix_list; do
3502 IFS=:
3503 iconv_cflags="-I$iconv_prefix/include"
3504 iconv_ldflags="-L$iconv_prefix/lib"
3505 for iconv_link in $iconv_lib_list; do
3506 unset IFS
3507 iconv_lib="$iconv_ldflags $iconv_link"
3508 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3509 if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3510 iconv_found=yes
3511 break
3513 done
3514 if test "$iconv_found" = yes ; then
3515 break
3517 done
3518 if test "$iconv_found" = "yes" ; then
3519 iconv=yes
3520 else
3521 if test "$iconv" = "yes" ; then
3522 feature_not_found "iconv" "Install iconv devel"
3524 iconv=no
3528 ##########################################
3529 # curses probe
3530 if test "$iconv" = "no" ; then
3531 # curses will need iconv
3532 curses=no
3534 if test "$curses" != "no" ; then
3535 if test "$mingw32" = "yes" ; then
3536 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3537 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3538 else
3539 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3540 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3542 curses_found=no
3543 cat > $TMPC << EOF
3544 #include <locale.h>
3545 #include <curses.h>
3546 #include <wchar.h>
3547 #include <langinfo.h>
3548 int main(void) {
3549 const char *codeset;
3550 wchar_t wch = L'w';
3551 setlocale(LC_ALL, "");
3552 resize_term(0, 0);
3553 addwstr(L"wide chars\n");
3554 addnwstr(&wch, 1);
3555 add_wch(WACS_DEGREE);
3556 codeset = nl_langinfo(CODESET);
3557 return codeset != 0;
3560 IFS=:
3561 for curses_inc in $curses_inc_list; do
3562 # Make sure we get the wide character prototypes
3563 curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3564 IFS=:
3565 for curses_lib in $curses_lib_list; do
3566 unset IFS
3567 if compile_prog "$curses_inc" "$curses_lib" ; then
3568 curses_found=yes
3569 break
3571 done
3572 if test "$curses_found" = yes ; then
3573 break
3575 done
3576 unset IFS
3577 if test "$curses_found" = "yes" ; then
3578 curses=yes
3579 else
3580 if test "$curses" = "yes" ; then
3581 feature_not_found "curses" "Install ncurses devel"
3583 curses=no
3587 ##########################################
3588 # curl probe
3589 if test "$curl" != "no" ; then
3590 if $pkg_config libcurl --exists; then
3591 curlconfig="$pkg_config libcurl"
3592 else
3593 curlconfig=curl-config
3595 cat > $TMPC << EOF
3596 #include <curl/curl.h>
3597 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3599 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3600 curl_libs=$($curlconfig --libs 2>/dev/null)
3601 if compile_prog "$curl_cflags" "$curl_libs" ; then
3602 curl=yes
3603 else
3604 if test "$curl" = "yes" ; then
3605 feature_not_found "curl" "Install libcurl devel"
3607 curl=no
3609 fi # test "$curl"
3611 ##########################################
3612 # bluez support probe
3613 if test "$bluez" != "no" ; then
3614 cat > $TMPC << EOF
3615 #include <bluetooth/bluetooth.h>
3616 int main(void) { return bt_error(0); }
3618 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3619 bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3620 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3621 bluez=yes
3622 libs_softmmu="$bluez_libs $libs_softmmu"
3623 else
3624 if test "$bluez" = "yes" ; then
3625 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3627 bluez="no"
3631 ##########################################
3632 # glib support probe
3634 glib_req_ver=2.40
3635 glib_modules=gthread-2.0
3636 if test "$modules" = yes; then
3637 glib_modules="$glib_modules gmodule-export-2.0"
3640 # This workaround is required due to a bug in pkg-config file for glib as it
3641 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3643 if test "$static" = yes && test "$mingw32" = yes; then
3644 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3647 for i in $glib_modules; do
3648 if $pkg_config --atleast-version=$glib_req_ver $i; then
3649 glib_cflags=$($pkg_config --cflags $i)
3650 glib_libs=$($pkg_config --libs $i)
3651 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3652 LIBS="$glib_libs $LIBS"
3653 libs_qga="$glib_libs $libs_qga"
3654 else
3655 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3657 done
3659 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3660 gio=yes
3661 gio_cflags=$($pkg_config --cflags gio-2.0)
3662 gio_libs=$($pkg_config --libs gio-2.0)
3663 else
3664 gio=no
3667 # Sanity check that the current size_t matches the
3668 # size that glib thinks it should be. This catches
3669 # problems on multi-arch where people try to build
3670 # 32-bit QEMU while pointing at 64-bit glib headers
3671 cat > $TMPC <<EOF
3672 #include <glib.h>
3673 #include <unistd.h>
3675 #define QEMU_BUILD_BUG_ON(x) \
3676 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3678 int main(void) {
3679 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3680 return 0;
3684 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3685 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3686 "You probably need to set PKG_CONFIG_LIBDIR"\
3687 "to point to the right pkg-config files for your"\
3688 "build target"
3691 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3692 cat > $TMPC << EOF
3693 #include <glib.h>
3694 int main(void) { return 0; }
3696 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3697 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3698 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3699 CFLAGS="-Wno-unknown-attributes $CFLAGS"
3703 #########################################
3704 # zlib check
3706 if test "$zlib" != "no" ; then
3707 if $pkg_config --exists zlib; then
3708 zlib_cflags=$($pkg_config --cflags zlib)
3709 zlib_libs=$($pkg_config --libs zlib)
3710 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3711 LIBS="$zlib_libs $LIBS"
3712 else
3713 cat > $TMPC << EOF
3714 #include <zlib.h>
3715 int main(void) { zlibVersion(); return 0; }
3717 if compile_prog "" "-lz" ; then
3718 LIBS="$LIBS -lz"
3719 else
3720 error_exit "zlib check failed" \
3721 "Make sure to have the zlib libs and headers installed."
3726 ##########################################
3727 # SHA command probe for modules
3728 if test "$modules" = yes; then
3729 shacmd_probe="sha1sum sha1 shasum"
3730 for c in $shacmd_probe; do
3731 if has $c; then
3732 shacmd="$c"
3733 break
3735 done
3736 if test "$shacmd" = ""; then
3737 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3741 ##########################################
3742 # pixman support probe
3744 if test "$want_tools" = "no" && test "$softmmu" = "no"; then
3745 pixman_cflags=
3746 pixman_libs=
3747 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3748 pixman_cflags=$($pkg_config --cflags pixman-1)
3749 pixman_libs=$($pkg_config --libs pixman-1)
3750 else
3751 error_exit "pixman >= 0.21.8 not present." \
3752 "Please install the pixman devel package."
3755 ##########################################
3756 # libmpathpersist probe
3758 if test "$mpath" != "no" ; then
3759 # probe for the new API
3760 cat > $TMPC <<EOF
3761 #include <libudev.h>
3762 #include <mpath_persist.h>
3763 unsigned mpath_mx_alloc_len = 1024;
3764 int logsink;
3765 static struct config *multipath_conf;
3766 extern struct udev *udev;
3767 extern struct config *get_multipath_config(void);
3768 extern void put_multipath_config(struct config *conf);
3769 struct udev *udev;
3770 struct config *get_multipath_config(void) { return multipath_conf; }
3771 void put_multipath_config(struct config *conf) { }
3773 int main(void) {
3774 udev = udev_new();
3775 multipath_conf = mpath_lib_init();
3776 return 0;
3779 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3780 mpathpersist=yes
3781 mpathpersist_new_api=yes
3782 else
3783 # probe for the old API
3784 cat > $TMPC <<EOF
3785 #include <libudev.h>
3786 #include <mpath_persist.h>
3787 unsigned mpath_mx_alloc_len = 1024;
3788 int logsink;
3789 int main(void) {
3790 struct udev *udev = udev_new();
3791 mpath_lib_init(udev);
3792 return 0;
3795 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3796 mpathpersist=yes
3797 mpathpersist_new_api=no
3798 else
3799 mpathpersist=no
3802 else
3803 mpathpersist=no
3806 ##########################################
3807 # libcap probe
3809 if test "$cap" != "no" ; then
3810 cat > $TMPC <<EOF
3811 #include <stdio.h>
3812 #include <sys/capability.h>
3813 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3815 if compile_prog "" "-lcap" ; then
3816 cap=yes
3817 else
3818 cap=no
3822 ##########################################
3823 # pthread probe
3824 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3826 pthread=no
3827 cat > $TMPC << EOF
3828 #include <pthread.h>
3829 static void *f(void *p) { return NULL; }
3830 int main(void) {
3831 pthread_t thread;
3832 pthread_create(&thread, 0, f, 0);
3833 return 0;
3836 if compile_prog "" "" ; then
3837 pthread=yes
3838 else
3839 for pthread_lib in $PTHREADLIBS_LIST; do
3840 if compile_prog "" "$pthread_lib" ; then
3841 pthread=yes
3842 found=no
3843 for lib_entry in $LIBS; do
3844 if test "$lib_entry" = "$pthread_lib"; then
3845 found=yes
3846 break
3848 done
3849 if test "$found" = "no"; then
3850 LIBS="$pthread_lib $LIBS"
3851 libs_qga="$pthread_lib $libs_qga"
3853 PTHREAD_LIB="$pthread_lib"
3854 break
3856 done
3859 if test "$mingw32" != yes && test "$pthread" = no; then
3860 error_exit "pthread check failed" \
3861 "Make sure to have the pthread libs and headers installed."
3864 # check for pthread_setname_np with thread id
3865 pthread_setname_np_w_tid=no
3866 cat > $TMPC << EOF
3867 #include <pthread.h>
3869 static void *f(void *p) { return NULL; }
3870 int main(void)
3872 pthread_t thread;
3873 pthread_create(&thread, 0, f, 0);
3874 pthread_setname_np(thread, "QEMU");
3875 return 0;
3878 if compile_prog "" "$pthread_lib" ; then
3879 pthread_setname_np_w_tid=yes
3882 # check for pthread_setname_np without thread id
3883 pthread_setname_np_wo_tid=no
3884 cat > $TMPC << EOF
3885 #include <pthread.h>
3887 static void *f(void *p) { pthread_setname_np("QEMU"); }
3888 int main(void)
3890 pthread_t thread;
3891 pthread_create(&thread, 0, f, 0);
3892 return 0;
3895 if compile_prog "" "$pthread_lib" ; then
3896 pthread_setname_np_wo_tid=yes
3899 ##########################################
3900 # rbd probe
3901 if test "$rbd" != "no" ; then
3902 cat > $TMPC <<EOF
3903 #include <stdio.h>
3904 #include <rbd/librbd.h>
3905 int main(void) {
3906 rados_t cluster;
3907 rados_create(&cluster, NULL);
3908 return 0;
3911 rbd_libs="-lrbd -lrados"
3912 if compile_prog "" "$rbd_libs" ; then
3913 rbd=yes
3914 else
3915 if test "$rbd" = "yes" ; then
3916 feature_not_found "rados block device" "Install librbd/ceph devel"
3918 rbd=no
3922 ##########################################
3923 # libssh probe
3924 if test "$libssh" != "no" ; then
3925 if $pkg_config --exists libssh; then
3926 libssh_cflags=$($pkg_config libssh --cflags)
3927 libssh_libs=$($pkg_config libssh --libs)
3928 libssh=yes
3929 else
3930 if test "$libssh" = "yes" ; then
3931 error_exit "libssh required for --enable-libssh"
3933 libssh=no
3937 ##########################################
3938 # Check for libssh 0.8
3939 # This is done like this instead of using the LIBSSH_VERSION_* and
3940 # SSH_VERSION_* macros because some distributions in the past shipped
3941 # snapshots of the future 0.8 from Git, and those snapshots did not
3942 # have updated version numbers (still referring to 0.7.0).
3944 if test "$libssh" = "yes"; then
3945 cat > $TMPC <<EOF
3946 #include <libssh/libssh.h>
3947 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3949 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3950 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3954 ##########################################
3955 # linux-aio probe
3957 if test "$linux_aio" != "no" ; then
3958 cat > $TMPC <<EOF
3959 #include <libaio.h>
3960 #include <sys/eventfd.h>
3961 #include <stddef.h>
3962 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3964 if compile_prog "" "-laio" ; then
3965 linux_aio=yes
3966 else
3967 if test "$linux_aio" = "yes" ; then
3968 feature_not_found "linux AIO" "Install libaio devel"
3970 linux_aio=no
3974 ##########################################
3975 # TPM emulation is only on POSIX
3977 if test "$tpm" = ""; then
3978 if test "$mingw32" = "yes"; then
3979 tpm=no
3980 else
3981 tpm=yes
3983 elif test "$tpm" = "yes"; then
3984 if test "$mingw32" = "yes" ; then
3985 error_exit "TPM emulation only available on POSIX systems"
3989 ##########################################
3990 # attr probe
3992 if test "$attr" != "no" ; then
3993 cat > $TMPC <<EOF
3994 #include <stdio.h>
3995 #include <sys/types.h>
3996 #ifdef CONFIG_LIBATTR
3997 #include <attr/xattr.h>
3998 #else
3999 #include <sys/xattr.h>
4000 #endif
4001 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4003 if compile_prog "" "" ; then
4004 attr=yes
4005 # Older distros have <attr/xattr.h>, and need -lattr:
4006 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4007 attr=yes
4008 LIBS="-lattr $LIBS"
4009 libattr=yes
4010 else
4011 if test "$attr" = "yes" ; then
4012 feature_not_found "ATTR" "Install libc6 or libattr devel"
4014 attr=no
4018 ##########################################
4019 # iovec probe
4020 cat > $TMPC <<EOF
4021 #include <sys/types.h>
4022 #include <sys/uio.h>
4023 #include <unistd.h>
4024 int main(void) { return sizeof(struct iovec); }
4026 iovec=no
4027 if compile_prog "" "" ; then
4028 iovec=yes
4031 ##########################################
4032 # preadv probe
4033 cat > $TMPC <<EOF
4034 #include <sys/types.h>
4035 #include <sys/uio.h>
4036 #include <unistd.h>
4037 int main(void) { return preadv(0, 0, 0, 0); }
4039 preadv=no
4040 if compile_prog "" "" ; then
4041 preadv=yes
4044 ##########################################
4045 # fdt probe
4046 # fdt support is mandatory for at least some target architectures,
4047 # so insist on it if we're building those system emulators.
4048 fdt_required=no
4049 for target in $target_list; do
4050 case $target in
4051 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
4052 fdt_required=yes
4054 esac
4055 done
4057 if test "$fdt_required" = "yes"; then
4058 if test "$fdt" = "no"; then
4059 error_exit "fdt disabled but some requested targets require it." \
4060 "You can turn off fdt only if you also disable all the system emulation" \
4061 "targets which need it (by specifying a cut down --target-list)."
4063 fdt=yes
4066 if test "$fdt" != "no" ; then
4067 fdt_libs="-lfdt"
4068 # explicitly check for libfdt_env.h as it is missing in some stable installs
4069 # and test for required functions to make sure we are on a version >= 1.4.2
4070 cat > $TMPC << EOF
4071 #include <libfdt.h>
4072 #include <libfdt_env.h>
4073 int main(void) { fdt_check_full(NULL, 0); return 0; }
4075 if compile_prog "" "$fdt_libs" ; then
4076 # system DTC is good - use it
4077 fdt=system
4078 else
4079 # have GIT checkout, so activate dtc submodule
4080 if test -e "${source_path}/.git" ; then
4081 git_submodules="${git_submodules} dtc"
4083 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4084 fdt=git
4085 mkdir -p dtc
4086 if [ "$pwd_is_source_path" != "y" ] ; then
4087 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4088 symlink "$source_path/dtc/scripts" "dtc/scripts"
4090 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
4091 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4092 fdt_libs="$fdt_libs"
4093 elif test "$fdt" = "yes" ; then
4094 # Not a git build & no libfdt found, prompt for system install
4095 error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4096 "Please install the DTC (libfdt) devel package"
4097 else
4098 # don't have and don't want
4099 fdt_libs=
4100 fdt=no
4105 libs_softmmu="$libs_softmmu $fdt_libs"
4107 ##########################################
4108 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4110 gbm="no"
4111 if $pkg_config gbm; then
4112 gbm_cflags="$($pkg_config --cflags gbm)"
4113 gbm_libs="$($pkg_config --libs gbm)"
4114 gbm="yes"
4117 if test "$opengl" != "no" ; then
4118 opengl_pkgs="epoxy gbm"
4119 if $pkg_config $opengl_pkgs; then
4120 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4121 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4122 opengl=yes
4123 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4124 gtk_gl="yes"
4126 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4127 else
4128 if test "$opengl" = "yes" ; then
4129 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4131 opengl_cflags=""
4132 opengl_libs=""
4133 opengl=no
4137 if test "$opengl" = "yes"; then
4138 cat > $TMPC << EOF
4139 #include <epoxy/egl.h>
4140 #ifndef EGL_MESA_image_dma_buf_export
4141 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4142 #endif
4143 int main(void) { return 0; }
4145 if compile_prog "" "" ; then
4146 opengl_dmabuf=yes
4150 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4151 for target in $target_list; do
4152 case $target in
4153 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4154 need_x11=yes
4156 esac
4157 done
4160 ##########################################
4161 # libxml2 probe
4162 if test "$libxml2" != "no" ; then
4163 if $pkg_config --exists libxml-2.0; then
4164 libxml2="yes"
4165 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4166 libxml2_libs=$($pkg_config --libs libxml-2.0)
4167 else
4168 if test "$libxml2" = "yes"; then
4169 feature_not_found "libxml2" "Install libxml2 devel"
4171 libxml2="no"
4175 ##########################################
4176 # glusterfs probe
4177 if test "$glusterfs" != "no" ; then
4178 if $pkg_config --atleast-version=3 glusterfs-api; then
4179 glusterfs="yes"
4180 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4181 glusterfs_libs=$($pkg_config --libs glusterfs-api)
4182 if $pkg_config --atleast-version=4 glusterfs-api; then
4183 glusterfs_xlator_opt="yes"
4185 if $pkg_config --atleast-version=5 glusterfs-api; then
4186 glusterfs_discard="yes"
4188 if $pkg_config --atleast-version=6 glusterfs-api; then
4189 glusterfs_fallocate="yes"
4190 glusterfs_zerofill="yes"
4192 cat > $TMPC << EOF
4193 #include <glusterfs/api/glfs.h>
4196 main(void)
4198 /* new glfs_ftruncate() passes two additional args */
4199 return glfs_ftruncate(NULL, 0, NULL, NULL);
4202 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4203 glusterfs_ftruncate_has_stat="yes"
4205 cat > $TMPC << EOF
4206 #include <glusterfs/api/glfs.h>
4208 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4209 static void
4210 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4214 main(void)
4216 glfs_io_cbk iocb = &glusterfs_iocb;
4217 iocb(NULL, 0 , NULL, NULL, NULL);
4218 return 0;
4221 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4222 glusterfs_iocb_has_stat="yes"
4224 else
4225 if test "$glusterfs" = "yes" ; then
4226 feature_not_found "GlusterFS backend support" \
4227 "Install glusterfs-api devel >= 3"
4229 glusterfs="no"
4233 # Check for inotify functions when we are building linux-user
4234 # emulator. This is done because older glibc versions don't
4235 # have syscall stubs for these implemented. In that case we
4236 # don't provide them even if kernel supports them.
4238 inotify=no
4239 cat > $TMPC << EOF
4240 #include <sys/inotify.h>
4243 main(void)
4245 /* try to start inotify */
4246 return inotify_init();
4249 if compile_prog "" "" ; then
4250 inotify=yes
4253 inotify1=no
4254 cat > $TMPC << EOF
4255 #include <sys/inotify.h>
4258 main(void)
4260 /* try to start inotify */
4261 return inotify_init1(0);
4264 if compile_prog "" "" ; then
4265 inotify1=yes
4268 # check if pipe2 is there
4269 pipe2=no
4270 cat > $TMPC << EOF
4271 #include <unistd.h>
4272 #include <fcntl.h>
4274 int main(void)
4276 int pipefd[2];
4277 return pipe2(pipefd, O_CLOEXEC);
4280 if compile_prog "" "" ; then
4281 pipe2=yes
4284 # check if accept4 is there
4285 accept4=no
4286 cat > $TMPC << EOF
4287 #include <sys/socket.h>
4288 #include <stddef.h>
4290 int main(void)
4292 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4293 return 0;
4296 if compile_prog "" "" ; then
4297 accept4=yes
4300 # check if tee/splice is there. vmsplice was added same time.
4301 splice=no
4302 cat > $TMPC << EOF
4303 #include <unistd.h>
4304 #include <fcntl.h>
4305 #include <limits.h>
4307 int main(void)
4309 int len, fd = 0;
4310 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4311 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4312 return 0;
4315 if compile_prog "" "" ; then
4316 splice=yes
4319 ##########################################
4320 # libnuma probe
4322 if test "$numa" != "no" ; then
4323 cat > $TMPC << EOF
4324 #include <numa.h>
4325 int main(void) { return numa_available(); }
4328 if compile_prog "" "-lnuma" ; then
4329 numa=yes
4330 libs_softmmu="-lnuma $libs_softmmu"
4331 else
4332 if test "$numa" = "yes" ; then
4333 feature_not_found "numa" "install numactl devel"
4335 numa=no
4339 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4340 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4341 exit 1
4344 # Even if malloc_trim() is available, these non-libc memory allocators
4345 # do not support it.
4346 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4347 if test "$malloc_trim" = "yes" ; then
4348 echo "Disabling malloc_trim with non-libc memory allocator"
4350 malloc_trim="no"
4353 #######################################
4354 # malloc_trim
4356 if test "$malloc_trim" != "no" ; then
4357 cat > $TMPC << EOF
4358 #include <malloc.h>
4359 int main(void) { malloc_trim(0); return 0; }
4361 if compile_prog "" "" ; then
4362 malloc_trim="yes"
4363 else
4364 malloc_trim="no"
4368 ##########################################
4369 # tcmalloc probe
4371 if test "$tcmalloc" = "yes" ; then
4372 cat > $TMPC << EOF
4373 #include <stdlib.h>
4374 int main(void) { malloc(1); return 0; }
4377 if compile_prog "" "-ltcmalloc" ; then
4378 LIBS="-ltcmalloc $LIBS"
4379 else
4380 feature_not_found "tcmalloc" "install gperftools devel"
4384 ##########################################
4385 # jemalloc probe
4387 if test "$jemalloc" = "yes" ; then
4388 cat > $TMPC << EOF
4389 #include <stdlib.h>
4390 int main(void) { malloc(1); return 0; }
4393 if compile_prog "" "-ljemalloc" ; then
4394 LIBS="-ljemalloc $LIBS"
4395 else
4396 feature_not_found "jemalloc" "install jemalloc devel"
4400 ##########################################
4401 # signalfd probe
4402 signalfd="no"
4403 cat > $TMPC << EOF
4404 #include <unistd.h>
4405 #include <sys/syscall.h>
4406 #include <signal.h>
4407 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4410 if compile_prog "" "" ; then
4411 signalfd=yes
4414 # check if optreset global is declared by <getopt.h>
4415 optreset="no"
4416 cat > $TMPC << EOF
4417 #include <getopt.h>
4418 int main(void) { return optreset; }
4421 if compile_prog "" "" ; then
4422 optreset=yes
4425 # check if eventfd is supported
4426 eventfd=no
4427 cat > $TMPC << EOF
4428 #include <sys/eventfd.h>
4430 int main(void)
4432 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4435 if compile_prog "" "" ; then
4436 eventfd=yes
4439 # check if memfd is supported
4440 memfd=no
4441 cat > $TMPC << EOF
4442 #include <sys/mman.h>
4444 int main(void)
4446 return memfd_create("foo", MFD_ALLOW_SEALING);
4449 if compile_prog "" "" ; then
4450 memfd=yes
4453 # check for usbfs
4454 have_usbfs=no
4455 if test "$linux_user" = "yes"; then
4456 cat > $TMPC << EOF
4457 #include <linux/usbdevice_fs.h>
4459 #ifndef USBDEVFS_GET_CAPABILITIES
4460 #error "USBDEVFS_GET_CAPABILITIES undefined"
4461 #endif
4463 #ifndef USBDEVFS_DISCONNECT_CLAIM
4464 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4465 #endif
4467 int main(void)
4469 return 0;
4472 if compile_prog "" ""; then
4473 have_usbfs=yes
4477 # check for fallocate
4478 fallocate=no
4479 cat > $TMPC << EOF
4480 #include <fcntl.h>
4482 int main(void)
4484 fallocate(0, 0, 0, 0);
4485 return 0;
4488 if compile_prog "" "" ; then
4489 fallocate=yes
4492 # check for fallocate hole punching
4493 fallocate_punch_hole=no
4494 cat > $TMPC << EOF
4495 #include <fcntl.h>
4496 #include <linux/falloc.h>
4498 int main(void)
4500 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4501 return 0;
4504 if compile_prog "" "" ; then
4505 fallocate_punch_hole=yes
4508 # check that fallocate supports range zeroing inside the file
4509 fallocate_zero_range=no
4510 cat > $TMPC << EOF
4511 #include <fcntl.h>
4512 #include <linux/falloc.h>
4514 int main(void)
4516 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4517 return 0;
4520 if compile_prog "" "" ; then
4521 fallocate_zero_range=yes
4524 # check for posix_fallocate
4525 posix_fallocate=no
4526 cat > $TMPC << EOF
4527 #include <fcntl.h>
4529 int main(void)
4531 posix_fallocate(0, 0, 0);
4532 return 0;
4535 if compile_prog "" "" ; then
4536 posix_fallocate=yes
4539 # check for sync_file_range
4540 sync_file_range=no
4541 cat > $TMPC << EOF
4542 #include <fcntl.h>
4544 int main(void)
4546 sync_file_range(0, 0, 0, 0);
4547 return 0;
4550 if compile_prog "" "" ; then
4551 sync_file_range=yes
4554 # check for linux/fiemap.h and FS_IOC_FIEMAP
4555 fiemap=no
4556 cat > $TMPC << EOF
4557 #include <sys/ioctl.h>
4558 #include <linux/fs.h>
4559 #include <linux/fiemap.h>
4561 int main(void)
4563 ioctl(0, FS_IOC_FIEMAP, 0);
4564 return 0;
4567 if compile_prog "" "" ; then
4568 fiemap=yes
4571 # check for dup3
4572 dup3=no
4573 cat > $TMPC << EOF
4574 #include <unistd.h>
4576 int main(void)
4578 dup3(0, 0, 0);
4579 return 0;
4582 if compile_prog "" "" ; then
4583 dup3=yes
4586 # check for ppoll support
4587 ppoll=no
4588 cat > $TMPC << EOF
4589 #include <poll.h>
4591 int main(void)
4593 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4594 ppoll(&pfd, 1, 0, 0);
4595 return 0;
4598 if compile_prog "" "" ; then
4599 ppoll=yes
4602 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4603 prctl_pr_set_timerslack=no
4604 cat > $TMPC << EOF
4605 #include <sys/prctl.h>
4607 int main(void)
4609 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4610 return 0;
4613 if compile_prog "" "" ; then
4614 prctl_pr_set_timerslack=yes
4617 # check for epoll support
4618 epoll=no
4619 cat > $TMPC << EOF
4620 #include <sys/epoll.h>
4622 int main(void)
4624 epoll_create(0);
4625 return 0;
4628 if compile_prog "" "" ; then
4629 epoll=yes
4632 # epoll_create1 is a later addition
4633 # so we must check separately for its presence
4634 epoll_create1=no
4635 cat > $TMPC << EOF
4636 #include <sys/epoll.h>
4638 int main(void)
4640 /* Note that we use epoll_create1 as a value, not as
4641 * a function being called. This is necessary so that on
4642 * old SPARC glibc versions where the function was present in
4643 * the library but not declared in the header file we will
4644 * fail the configure check. (Otherwise we will get a compiler
4645 * warning but not an error, and will proceed to fail the
4646 * qemu compile where we compile with -Werror.)
4648 return (int)(uintptr_t)&epoll_create1;
4651 if compile_prog "" "" ; then
4652 epoll_create1=yes
4655 # check for sendfile support
4656 sendfile=no
4657 cat > $TMPC << EOF
4658 #include <sys/sendfile.h>
4660 int main(void)
4662 return sendfile(0, 0, 0, 0);
4665 if compile_prog "" "" ; then
4666 sendfile=yes
4669 # check for timerfd support (glibc 2.8 and newer)
4670 timerfd=no
4671 cat > $TMPC << EOF
4672 #include <sys/timerfd.h>
4674 int main(void)
4676 return(timerfd_create(CLOCK_REALTIME, 0));
4679 if compile_prog "" "" ; then
4680 timerfd=yes
4683 # check for setns and unshare support
4684 setns=no
4685 cat > $TMPC << EOF
4686 #include <sched.h>
4688 int main(void)
4690 int ret;
4691 ret = setns(0, 0);
4692 ret = unshare(0);
4693 return ret;
4696 if compile_prog "" "" ; then
4697 setns=yes
4700 # clock_adjtime probe
4701 clock_adjtime=no
4702 cat > $TMPC <<EOF
4703 #include <time.h>
4705 int main(void)
4707 return clock_adjtime(0, 0);
4710 clock_adjtime=no
4711 if compile_prog "" "" ; then
4712 clock_adjtime=yes
4715 # syncfs probe
4716 syncfs=no
4717 cat > $TMPC <<EOF
4718 #include <unistd.h>
4720 int main(void)
4722 return syncfs(0);
4725 syncfs=no
4726 if compile_prog "" "" ; then
4727 syncfs=yes
4730 # Check we have a new enough version of sphinx-build
4731 has_sphinx_build() {
4732 # This is a bit awkward but works: create a trivial document and
4733 # try to run it with our configuration file (which enforces a
4734 # version requirement). This will fail if either
4735 # sphinx-build doesn't exist at all or if it is too old.
4736 mkdir -p "$TMPDIR1/sphinx"
4737 touch "$TMPDIR1/sphinx/index.rst"
4738 sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
4741 # Check if tools are available to build documentation.
4742 if test "$docs" != "no" ; then
4743 if has makeinfo && has pod2man && has_sphinx_build; then
4744 docs=yes
4745 else
4746 if test "$docs" = "yes" ; then
4747 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
4749 docs=no
4753 # Search for bswap_32 function
4754 byteswap_h=no
4755 cat > $TMPC << EOF
4756 #include <byteswap.h>
4757 int main(void) { return bswap_32(0); }
4759 if compile_prog "" "" ; then
4760 byteswap_h=yes
4763 # Search for bswap32 function
4764 bswap_h=no
4765 cat > $TMPC << EOF
4766 #include <sys/endian.h>
4767 #include <sys/types.h>
4768 #include <machine/bswap.h>
4769 int main(void) { return bswap32(0); }
4771 if compile_prog "" "" ; then
4772 bswap_h=yes
4775 ##########################################
4776 # Do we have libiscsi >= 1.9.0
4777 if test "$libiscsi" != "no" ; then
4778 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4779 libiscsi="yes"
4780 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4781 libiscsi_libs=$($pkg_config --libs libiscsi)
4782 else
4783 if test "$libiscsi" = "yes" ; then
4784 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4786 libiscsi="no"
4790 ##########################################
4791 # Do we need libm
4792 cat > $TMPC << EOF
4793 #include <math.h>
4794 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4796 if compile_prog "" "" ; then
4798 elif compile_prog "" "-lm" ; then
4799 LIBS="-lm $LIBS"
4800 libs_qga="-lm $libs_qga"
4801 else
4802 error_exit "libm check failed"
4805 ##########################################
4806 # Do we need librt
4807 # uClibc provides 2 versions of clock_gettime(), one with realtime
4808 # support and one without. This means that the clock_gettime() don't
4809 # need -lrt. We still need it for timer_create() so we check for this
4810 # function in addition.
4811 cat > $TMPC <<EOF
4812 #include <signal.h>
4813 #include <time.h>
4814 int main(void) {
4815 timer_create(CLOCK_REALTIME, NULL, NULL);
4816 return clock_gettime(CLOCK_REALTIME, NULL);
4820 if compile_prog "" "" ; then
4822 # we need pthread for static linking. use previous pthread test result
4823 elif compile_prog "" "$pthread_lib -lrt" ; then
4824 LIBS="$LIBS -lrt"
4825 libs_qga="$libs_qga -lrt"
4828 # Check whether we need to link libutil for openpty()
4829 cat > $TMPC << EOF
4830 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4831 int main(void) { return openpty(0, 0, 0, 0, 0); }
4834 if ! compile_prog "" "" ; then
4835 if compile_prog "" "-lutil" ; then
4836 libs_softmmu="-lutil $libs_softmmu"
4837 libs_tools="-lutil $libs_tools"
4841 ##########################################
4842 # spice probe
4843 if test "$spice" != "no" ; then
4844 cat > $TMPC << EOF
4845 #include <spice.h>
4846 int main(void) { spice_server_new(); return 0; }
4848 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4849 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4850 if $pkg_config --atleast-version=0.12.5 spice-server && \
4851 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4852 compile_prog "$spice_cflags" "$spice_libs" ; then
4853 spice="yes"
4854 libs_softmmu="$libs_softmmu $spice_libs"
4855 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4856 spice_protocol_version=$($pkg_config --modversion spice-protocol)
4857 spice_server_version=$($pkg_config --modversion spice-server)
4858 else
4859 if test "$spice" = "yes" ; then
4860 feature_not_found "spice" \
4861 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4863 spice="no"
4867 # check for smartcard support
4868 if test "$smartcard" != "no"; then
4869 if $pkg_config --atleast-version=2.5.1 libcacard; then
4870 libcacard_cflags=$($pkg_config --cflags libcacard)
4871 libcacard_libs=$($pkg_config --libs libcacard)
4872 smartcard="yes"
4873 else
4874 if test "$smartcard" = "yes"; then
4875 feature_not_found "smartcard" "Install libcacard devel"
4877 smartcard="no"
4881 # check for libusb
4882 if test "$libusb" != "no" ; then
4883 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4884 libusb="yes"
4885 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4886 libusb_libs=$($pkg_config --libs libusb-1.0)
4887 else
4888 if test "$libusb" = "yes"; then
4889 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4891 libusb="no"
4895 # check for usbredirparser for usb network redirection support
4896 if test "$usb_redir" != "no" ; then
4897 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4898 usb_redir="yes"
4899 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4900 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4901 else
4902 if test "$usb_redir" = "yes"; then
4903 feature_not_found "usb-redir" "Install usbredir devel"
4905 usb_redir="no"
4909 ##########################################
4910 # check if we have VSS SDK headers for win
4912 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4913 test "$vss_win32_sdk" != "no" ; then
4914 case "$vss_win32_sdk" in
4915 "") vss_win32_include="-isystem $source_path" ;;
4916 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4917 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4918 vss_win32_include="-isystem $source_path/.sdk/vss"
4919 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4921 *) vss_win32_include="-isystem $vss_win32_sdk"
4922 esac
4923 cat > $TMPC << EOF
4924 #define __MIDL_user_allocate_free_DEFINED__
4925 #include <inc/win2003/vss.h>
4926 int main(void) { return VSS_CTX_BACKUP; }
4928 if compile_prog "$vss_win32_include" "" ; then
4929 guest_agent_with_vss="yes"
4930 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4931 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4932 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4933 else
4934 if test "$vss_win32_sdk" != "" ; then
4935 echo "ERROR: Please download and install Microsoft VSS SDK:"
4936 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4937 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4938 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4939 echo "ERROR: The headers are extracted in the directory \`inc'."
4940 feature_not_found "VSS support"
4942 guest_agent_with_vss="no"
4946 ##########################################
4947 # lookup Windows platform SDK (if not specified)
4948 # The SDK is needed only to build .tlb (type library) file of guest agent
4949 # VSS provider from the source. It is usually unnecessary because the
4950 # pre-compiled .tlb file is included.
4952 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4953 test "$guest_agent_with_vss" = "yes" ; then
4954 if test -z "$win_sdk"; then
4955 programfiles="$PROGRAMFILES"
4956 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4957 if test -n "$programfiles"; then
4958 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4959 else
4960 feature_not_found "Windows SDK"
4962 elif test "$win_sdk" = "no"; then
4963 win_sdk=""
4967 ##########################################
4968 # check if mingw environment provides a recent ntddscsi.h
4969 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4970 cat > $TMPC << EOF
4971 #include <windows.h>
4972 #include <ntddscsi.h>
4973 int main(void) {
4974 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4975 #error Missing required ioctl definitions
4976 #endif
4977 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4978 return addr.Lun;
4981 if compile_prog "" "" ; then
4982 guest_agent_ntddscsi=yes
4983 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4987 ##########################################
4988 # virgl renderer probe
4990 if test "$virglrenderer" != "no" ; then
4991 cat > $TMPC << EOF
4992 #include <virglrenderer.h>
4993 int main(void) { virgl_renderer_poll(); return 0; }
4995 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4996 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4997 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4998 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4999 compile_prog "$virgl_cflags" "$virgl_libs" ; then
5000 virglrenderer="yes"
5001 else
5002 if test "$virglrenderer" = "yes" ; then
5003 feature_not_found "virglrenderer"
5005 virglrenderer="no"
5009 ##########################################
5010 # capstone
5012 case "$capstone" in
5013 "" | yes)
5014 if $pkg_config capstone; then
5015 capstone=system
5016 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5017 capstone=git
5018 elif test -e "${source_path}/capstone/Makefile" ; then
5019 capstone=internal
5020 elif test -z "$capstone" ; then
5021 capstone=no
5022 else
5023 feature_not_found "capstone" "Install capstone devel or git submodule"
5027 system)
5028 if ! $pkg_config capstone; then
5029 feature_not_found "capstone" "Install capstone devel"
5032 esac
5034 case "$capstone" in
5035 git | internal)
5036 if test "$capstone" = git; then
5037 git_submodules="${git_submodules} capstone"
5039 mkdir -p capstone
5040 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5041 if test "$mingw32" = "yes"; then
5042 LIBCAPSTONE=capstone.lib
5043 else
5044 LIBCAPSTONE=libcapstone.a
5046 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
5049 system)
5050 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5051 libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
5057 error_exit "Unknown state for capstone: $capstone"
5059 esac
5061 ##########################################
5062 # check if we have fdatasync
5064 fdatasync=no
5065 cat > $TMPC << EOF
5066 #include <unistd.h>
5067 int main(void) {
5068 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5069 return fdatasync(0);
5070 #else
5071 #error Not supported
5072 #endif
5075 if compile_prog "" "" ; then
5076 fdatasync=yes
5079 ##########################################
5080 # check if we have madvise
5082 madvise=no
5083 cat > $TMPC << EOF
5084 #include <sys/types.h>
5085 #include <sys/mman.h>
5086 #include <stddef.h>
5087 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5089 if compile_prog "" "" ; then
5090 madvise=yes
5093 ##########################################
5094 # check if we have posix_madvise
5096 posix_madvise=no
5097 cat > $TMPC << EOF
5098 #include <sys/mman.h>
5099 #include <stddef.h>
5100 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5102 if compile_prog "" "" ; then
5103 posix_madvise=yes
5106 ##########################################
5107 # check if we have posix_memalign()
5109 posix_memalign=no
5110 cat > $TMPC << EOF
5111 #include <stdlib.h>
5112 int main(void) {
5113 void *p;
5114 return posix_memalign(&p, 8, 8);
5117 if compile_prog "" "" ; then
5118 posix_memalign=yes
5121 ##########################################
5122 # check if we have posix_syslog
5124 posix_syslog=no
5125 cat > $TMPC << EOF
5126 #include <syslog.h>
5127 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5129 if compile_prog "" "" ; then
5130 posix_syslog=yes
5133 ##########################################
5134 # check if we have sem_timedwait
5136 sem_timedwait=no
5137 cat > $TMPC << EOF
5138 #include <semaphore.h>
5139 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5141 if compile_prog "" "" ; then
5142 sem_timedwait=yes
5145 ##########################################
5146 # check if we have strchrnul
5148 strchrnul=no
5149 cat > $TMPC << EOF
5150 #include <string.h>
5151 int main(void);
5152 // Use a haystack that the compiler shouldn't be able to constant fold
5153 char *haystack = (char*)&main;
5154 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5156 if compile_prog "" "" ; then
5157 strchrnul=yes
5160 ##########################################
5161 # check if trace backend exists
5163 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
5164 if test "$?" -ne 0 ; then
5165 error_exit "invalid trace backends" \
5166 "Please choose supported trace backends."
5169 ##########################################
5170 # For 'ust' backend, test if ust headers are present
5171 if have_backend "ust"; then
5172 cat > $TMPC << EOF
5173 #include <lttng/tracepoint.h>
5174 int main(void) { return 0; }
5176 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5177 if $pkg_config lttng-ust --exists; then
5178 lttng_ust_libs=$($pkg_config --libs lttng-ust)
5179 else
5180 lttng_ust_libs="-llttng-ust -ldl"
5182 if $pkg_config liburcu-bp --exists; then
5183 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5184 else
5185 urcu_bp_libs="-lurcu-bp"
5188 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5189 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
5190 else
5191 error_exit "Trace backend 'ust' missing lttng-ust header files"
5195 ##########################################
5196 # For 'dtrace' backend, test if 'dtrace' command is present
5197 if have_backend "dtrace"; then
5198 if ! has 'dtrace' ; then
5199 error_exit "dtrace command is not found in PATH $PATH"
5201 trace_backend_stap="no"
5202 if has 'stap' ; then
5203 trace_backend_stap="yes"
5207 ##########################################
5208 # check and set a backend for coroutine
5210 # We prefer ucontext, but it's not always possible. The fallback
5211 # is sigcontext. On Windows the only valid backend is the Windows
5212 # specific one.
5214 ucontext_works=no
5215 if test "$darwin" != "yes"; then
5216 cat > $TMPC << EOF
5217 #include <ucontext.h>
5218 #ifdef __stub_makecontext
5219 #error Ignoring glibc stub makecontext which will always fail
5220 #endif
5221 int main(void) { makecontext(0, 0, 0); return 0; }
5223 if compile_prog "" "" ; then
5224 ucontext_works=yes
5228 if test "$coroutine" = ""; then
5229 if test "$mingw32" = "yes"; then
5230 coroutine=win32
5231 elif test "$ucontext_works" = "yes"; then
5232 coroutine=ucontext
5233 else
5234 coroutine=sigaltstack
5236 else
5237 case $coroutine in
5238 windows)
5239 if test "$mingw32" != "yes"; then
5240 error_exit "'windows' coroutine backend only valid for Windows"
5242 # Unfortunately the user visible backend name doesn't match the
5243 # coroutine-*.c filename for this case, so we have to adjust it here.
5244 coroutine=win32
5246 ucontext)
5247 if test "$ucontext_works" != "yes"; then
5248 feature_not_found "ucontext"
5251 sigaltstack)
5252 if test "$mingw32" = "yes"; then
5253 error_exit "only the 'windows' coroutine backend is valid for Windows"
5257 error_exit "unknown coroutine backend $coroutine"
5259 esac
5262 if test "$coroutine_pool" = ""; then
5263 coroutine_pool=yes
5266 if test "$debug_stack_usage" = "yes"; then
5267 if test "$coroutine_pool" = "yes"; then
5268 echo "WARN: disabling coroutine pool for stack usage debugging"
5269 coroutine_pool=no
5274 ##########################################
5275 # check if we have open_by_handle_at
5277 open_by_handle_at=no
5278 cat > $TMPC << EOF
5279 #include <fcntl.h>
5280 #if !defined(AT_EMPTY_PATH)
5281 # error missing definition
5282 #else
5283 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5284 #endif
5286 if compile_prog "" "" ; then
5287 open_by_handle_at=yes
5290 ########################################
5291 # check if we have linux/magic.h
5293 linux_magic_h=no
5294 cat > $TMPC << EOF
5295 #include <linux/magic.h>
5296 int main(void) {
5297 return 0;
5300 if compile_prog "" "" ; then
5301 linux_magic_h=yes
5304 ########################################
5305 # check whether we can disable warning option with a pragma (this is needed
5306 # to silence warnings in the headers of some versions of external libraries).
5307 # This test has to be compiled with -Werror as otherwise an unknown pragma is
5308 # only a warning.
5310 # If we can't selectively disable warning in the code, disable -Werror so that
5311 # the build doesn't fail anyway.
5313 pragma_disable_unused_but_set=no
5314 cat > $TMPC << EOF
5315 #pragma GCC diagnostic push
5316 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
5317 #pragma GCC diagnostic pop
5319 int main(void) {
5320 return 0;
5323 if compile_prog "-Werror" "" ; then
5324 pragma_diagnostic_available=yes
5325 else
5326 werror=no
5329 ########################################
5330 # check if we have valgrind/valgrind.h
5332 valgrind_h=no
5333 cat > $TMPC << EOF
5334 #include <valgrind/valgrind.h>
5335 int main(void) {
5336 return 0;
5339 if compile_prog "" "" ; then
5340 valgrind_h=yes
5343 ########################################
5344 # check if environ is declared
5346 has_environ=no
5347 cat > $TMPC << EOF
5348 #include <unistd.h>
5349 int main(void) {
5350 environ = 0;
5351 return 0;
5354 if compile_prog "" "" ; then
5355 has_environ=yes
5358 ########################################
5359 # check if cpuid.h is usable.
5361 cat > $TMPC << EOF
5362 #include <cpuid.h>
5363 int main(void) {
5364 unsigned a, b, c, d;
5365 int max = __get_cpuid_max(0, 0);
5367 if (max >= 1) {
5368 __cpuid(1, a, b, c, d);
5371 if (max >= 7) {
5372 __cpuid_count(7, 0, a, b, c, d);
5375 return 0;
5378 if compile_prog "" "" ; then
5379 cpuid_h=yes
5382 ##########################################
5383 # avx2 optimization requirement check
5385 # There is no point enabling this if cpuid.h is not usable,
5386 # since we won't be able to select the new routines.
5388 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5389 cat > $TMPC << EOF
5390 #pragma GCC push_options
5391 #pragma GCC target("avx2")
5392 #include <cpuid.h>
5393 #include <immintrin.h>
5394 static int bar(void *a) {
5395 __m256i x = *(__m256i *)a;
5396 return _mm256_testz_si256(x, x);
5398 int main(int argc, char *argv[]) { return bar(argv[0]); }
5400 if compile_object "" ; then
5401 avx2_opt="yes"
5402 else
5403 avx2_opt="no"
5407 ########################################
5408 # check if __[u]int128_t is usable.
5410 int128=no
5411 cat > $TMPC << EOF
5412 __int128_t a;
5413 __uint128_t b;
5414 int main (void) {
5415 a = a + b;
5416 b = a * b;
5417 a = a * a;
5418 return 0;
5421 if compile_prog "" "" ; then
5422 int128=yes
5425 #########################################
5426 # See if 128-bit atomic operations are supported.
5428 atomic128=no
5429 if test "$int128" = "yes"; then
5430 cat > $TMPC << EOF
5431 int main(void)
5433 unsigned __int128 x = 0, y = 0;
5434 y = __atomic_load_16(&x, 0);
5435 __atomic_store_16(&x, y, 0);
5436 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5437 return 0;
5440 if compile_prog "" "" ; then
5441 atomic128=yes
5445 cmpxchg128=no
5446 if test "$int128" = yes && test "$atomic128" = no; then
5447 cat > $TMPC << EOF
5448 int main(void)
5450 unsigned __int128 x = 0, y = 0;
5451 __sync_val_compare_and_swap_16(&x, y, x);
5452 return 0;
5455 if compile_prog "" "" ; then
5456 cmpxchg128=yes
5460 #########################################
5461 # See if 64-bit atomic operations are supported.
5462 # Note that without __atomic builtins, we can only
5463 # assume atomic loads/stores max at pointer size.
5465 cat > $TMPC << EOF
5466 #include <stdint.h>
5467 int main(void)
5469 uint64_t x = 0, y = 0;
5470 #ifdef __ATOMIC_RELAXED
5471 y = __atomic_load_8(&x, 0);
5472 __atomic_store_8(&x, y, 0);
5473 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5474 __atomic_exchange_8(&x, y, 0);
5475 __atomic_fetch_add_8(&x, y, 0);
5476 #else
5477 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5478 __sync_lock_test_and_set(&x, y);
5479 __sync_val_compare_and_swap(&x, y, 0);
5480 __sync_fetch_and_add(&x, y);
5481 #endif
5482 return 0;
5485 if compile_prog "" "" ; then
5486 atomic64=yes
5489 ########################################
5490 # See if 16-byte vector operations are supported.
5491 # Even without a vector unit the compiler may expand these.
5492 # There is a bug in old GCC for PPC that crashes here.
5493 # Unfortunately it's the system compiler for Centos 7.
5495 cat > $TMPC << EOF
5496 typedef unsigned char U1 __attribute__((vector_size(16)));
5497 typedef unsigned short U2 __attribute__((vector_size(16)));
5498 typedef unsigned int U4 __attribute__((vector_size(16)));
5499 typedef unsigned long long U8 __attribute__((vector_size(16)));
5500 typedef signed char S1 __attribute__((vector_size(16)));
5501 typedef signed short S2 __attribute__((vector_size(16)));
5502 typedef signed int S4 __attribute__((vector_size(16)));
5503 typedef signed long long S8 __attribute__((vector_size(16)));
5504 static U1 a1, b1;
5505 static U2 a2, b2;
5506 static U4 a4, b4;
5507 static U8 a8, b8;
5508 static S1 c1;
5509 static S2 c2;
5510 static S4 c4;
5511 static S8 c8;
5512 static int i;
5513 void helper(void *d, void *a, int shift, int i);
5514 void helper(void *d, void *a, int shift, int i)
5516 *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5517 *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5518 *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5519 *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5521 int main(void)
5523 a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5524 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5525 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5526 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5527 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5528 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5529 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5530 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5531 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5532 return 0;
5536 vector16=no
5537 if compile_prog "" "" ; then
5538 vector16=yes
5541 ########################################
5542 # check if getauxval is available.
5544 getauxval=no
5545 cat > $TMPC << EOF
5546 #include <sys/auxv.h>
5547 int main(void) {
5548 return getauxval(AT_HWCAP) == 0;
5551 if compile_prog "" "" ; then
5552 getauxval=yes
5555 ########################################
5556 # check if ccache is interfering with
5557 # semantic analysis of macros
5559 unset CCACHE_CPP2
5560 ccache_cpp2=no
5561 cat > $TMPC << EOF
5562 static const int Z = 1;
5563 #define fn() ({ Z; })
5564 #define TAUT(X) ((X) == Z)
5565 #define PAREN(X, Y) (X == Y)
5566 #define ID(X) (X)
5567 int main(int argc, char *argv[])
5569 int x = 0, y = 0;
5570 x = ID(x);
5571 x = fn();
5572 fn();
5573 if (PAREN(x, y)) return 0;
5574 if (TAUT(Z)) return 0;
5575 return 0;
5579 if ! compile_object "-Werror"; then
5580 ccache_cpp2=yes
5583 #################################################
5584 # clang does not support glibc + FORTIFY_SOURCE.
5586 if test "$fortify_source" != "no"; then
5587 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5588 fortify_source="no";
5589 elif test -n "$cxx" && has $cxx &&
5590 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5591 fortify_source="no";
5592 else
5593 fortify_source="yes"
5597 ###############################################
5598 # Check if copy_file_range is provided by glibc
5599 have_copy_file_range=no
5600 cat > $TMPC << EOF
5601 #include <unistd.h>
5602 int main(void) {
5603 copy_file_range(0, NULL, 0, NULL, 0, 0);
5604 return 0;
5607 if compile_prog "" "" ; then
5608 have_copy_file_range=yes
5611 ##########################################
5612 # check if struct fsxattr is available via linux/fs.h
5614 have_fsxattr=no
5615 cat > $TMPC << EOF
5616 #include <linux/fs.h>
5617 struct fsxattr foo;
5618 int main(void) {
5619 return 0;
5622 if compile_prog "" "" ; then
5623 have_fsxattr=yes
5626 ##########################################
5627 # check for usable membarrier system call
5628 if test "$membarrier" = "yes"; then
5629 have_membarrier=no
5630 if test "$mingw32" = "yes" ; then
5631 have_membarrier=yes
5632 elif test "$linux" = "yes" ; then
5633 cat > $TMPC << EOF
5634 #include <linux/membarrier.h>
5635 #include <sys/syscall.h>
5636 #include <unistd.h>
5637 #include <stdlib.h>
5638 int main(void) {
5639 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5640 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5641 exit(0);
5644 if compile_prog "" "" ; then
5645 have_membarrier=yes
5648 if test "$have_membarrier" = "no"; then
5649 feature_not_found "membarrier" "membarrier system call not available"
5651 else
5652 # Do not enable it by default even for Mingw32, because it doesn't
5653 # work on Wine.
5654 membarrier=no
5657 ##########################################
5658 # check if rtnetlink.h exists and is useful
5659 have_rtnetlink=no
5660 cat > $TMPC << EOF
5661 #include <linux/rtnetlink.h>
5662 int main(void) {
5663 return IFLA_PROTO_DOWN;
5666 if compile_prog "" "" ; then
5667 have_rtnetlink=yes
5670 ##########################################
5671 # check for usable AF_VSOCK environment
5672 have_af_vsock=no
5673 cat > $TMPC << EOF
5674 #include <errno.h>
5675 #include <sys/types.h>
5676 #include <sys/socket.h>
5677 #if !defined(AF_VSOCK)
5678 # error missing AF_VSOCK flag
5679 #endif
5680 #include <linux/vm_sockets.h>
5681 int main(void) {
5682 int sock, ret;
5683 struct sockaddr_vm svm;
5684 socklen_t len = sizeof(svm);
5685 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5686 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5687 if ((ret == -1) && (errno == ENOTCONN)) {
5688 return 0;
5690 return -1;
5693 if compile_prog "" "" ; then
5694 have_af_vsock=yes
5697 ##########################################
5698 # check for usable AF_ALG environment
5699 hava_afalg=no
5700 cat > $TMPC << EOF
5701 #include <errno.h>
5702 #include <sys/types.h>
5703 #include <sys/socket.h>
5704 #include <linux/if_alg.h>
5705 int main(void) {
5706 int sock;
5707 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5708 return sock;
5711 if compile_prog "" "" ; then
5712 have_afalg=yes
5714 if test "$crypto_afalg" = "yes"
5715 then
5716 if test "$have_afalg" != "yes"
5717 then
5718 error_exit "AF_ALG requested but could not be detected"
5723 #################################################
5724 # Check to see if we have the Hypervisor framework
5725 if [ "$darwin" = "yes" ] ; then
5726 cat > $TMPC << EOF
5727 #include <Hypervisor/hv.h>
5728 int main() { return 0;}
5730 if ! compile_object ""; then
5731 hvf='no'
5732 else
5733 hvf='yes'
5734 LDFLAGS="-framework Hypervisor $LDFLAGS"
5738 #################################################
5739 # Sparc implicitly links with --relax, which is
5740 # incompatible with -r, so --no-relax should be
5741 # given. It does no harm to give it on other
5742 # platforms too.
5744 # Note: the prototype is needed since QEMU_CFLAGS
5745 # contains -Wmissing-prototypes
5746 cat > $TMPC << EOF
5747 extern int foo(void);
5748 int foo(void) { return 0; }
5750 if ! compile_object ""; then
5751 error_exit "Failed to compile object file for LD_REL_FLAGS test"
5753 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5754 if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5755 LD_REL_FLAGS=$i
5756 break
5758 done
5759 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5760 feature_not_found "modules" "Cannot find how to build relocatable objects"
5763 ##########################################
5764 # check for sysmacros.h
5766 have_sysmacros=no
5767 cat > $TMPC << EOF
5768 #include <sys/sysmacros.h>
5769 int main(void) {
5770 return makedev(0, 0);
5773 if compile_prog "" "" ; then
5774 have_sysmacros=yes
5777 ##########################################
5778 # Veritas HyperScale block driver VxHS
5779 # Check if libvxhs is installed
5781 if test "$vxhs" != "no" ; then
5782 cat > $TMPC <<EOF
5783 #include <stdint.h>
5784 #include <qnio/qnio_api.h>
5786 void *vxhs_callback;
5788 int main(void) {
5789 iio_init(QNIO_VERSION, vxhs_callback);
5790 return 0;
5793 vxhs_libs="-lvxhs -lssl"
5794 if compile_prog "" "$vxhs_libs" ; then
5795 vxhs=yes
5796 else
5797 if test "$vxhs" = "yes" ; then
5798 feature_not_found "vxhs block device" "Install libvxhs See github"
5800 vxhs=no
5804 ##########################################
5805 # check for _Static_assert()
5807 have_static_assert=no
5808 cat > $TMPC << EOF
5809 _Static_assert(1, "success");
5810 int main(void) {
5811 return 0;
5814 if compile_prog "" "" ; then
5815 have_static_assert=yes
5818 ##########################################
5819 # check for utmpx.h, it is missing e.g. on OpenBSD
5821 have_utmpx=no
5822 cat > $TMPC << EOF
5823 #include <utmpx.h>
5824 struct utmpx user_info;
5825 int main(void) {
5826 return 0;
5829 if compile_prog "" "" ; then
5830 have_utmpx=yes
5833 ##########################################
5834 # check for getrandom()
5836 have_getrandom=no
5837 cat > $TMPC << EOF
5838 #include <sys/random.h>
5839 int main(void) {
5840 return getrandom(0, 0, GRND_NONBLOCK);
5843 if compile_prog "" "" ; then
5844 have_getrandom=yes
5847 ##########################################
5848 # checks for sanitizers
5850 have_asan=no
5851 have_ubsan=no
5852 have_asan_iface_h=no
5853 have_asan_iface_fiber=no
5855 if test "$sanitizers" = "yes" ; then
5856 write_c_skeleton
5857 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5858 have_asan=yes
5861 # we could use a simple skeleton for flags checks, but this also
5862 # detect the static linking issue of ubsan, see also:
5863 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5864 cat > $TMPC << EOF
5865 #include <stdlib.h>
5866 int main(void) {
5867 void *tmp = malloc(10);
5868 return *(int *)(tmp + 2);
5871 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5872 have_ubsan=yes
5875 if check_include "sanitizer/asan_interface.h" ; then
5876 have_asan_iface_h=yes
5879 cat > $TMPC << EOF
5880 #include <sanitizer/asan_interface.h>
5881 int main(void) {
5882 __sanitizer_start_switch_fiber(0, 0, 0);
5883 return 0;
5886 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5887 have_asan_iface_fiber=yes
5891 ##########################################
5892 # Docker and cross-compiler support
5894 # This is specifically for building test
5895 # cases for foreign architectures, not
5896 # cross-compiling QEMU itself.
5898 if has "docker"; then
5899 docker=$($python $source_path/tests/docker/docker.py probe)
5902 ##########################################
5903 # check for libpmem
5905 if test "$libpmem" != "no"; then
5906 if $pkg_config --exists "libpmem"; then
5907 libpmem="yes"
5908 libpmem_libs=$($pkg_config --libs libpmem)
5909 libpmem_cflags=$($pkg_config --cflags libpmem)
5910 libs_softmmu="$libs_softmmu $libpmem_libs"
5911 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5912 else
5913 if test "$libpmem" = "yes" ; then
5914 feature_not_found "libpmem" "Install nvml or pmdk"
5916 libpmem="no"
5920 ##########################################
5921 # check for slirp
5923 case "$slirp" in
5924 "" | yes)
5925 if $pkg_config slirp; then
5926 slirp=system
5927 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5928 slirp=git
5929 elif test -e "${source_path}/slirp/Makefile" ; then
5930 slirp=internal
5931 elif test -z "$slirp" ; then
5932 slirp=no
5933 else
5934 feature_not_found "slirp" "Install slirp devel or git submodule"
5938 system)
5939 if ! $pkg_config slirp; then
5940 feature_not_found "slirp" "Install slirp devel"
5943 esac
5945 case "$slirp" in
5946 git | internal)
5947 if test "$slirp" = git; then
5948 git_submodules="${git_submodules} slirp"
5950 mkdir -p slirp
5951 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
5952 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
5955 system)
5956 slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
5957 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
5958 slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
5964 error_exit "Unknown state for slirp: $slirp"
5966 esac
5969 ##########################################
5970 # End of CC checks
5971 # After here, no more $cc or $ld runs
5973 write_c_skeleton
5975 if test "$gcov" = "yes" ; then
5976 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5977 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5978 elif test "$fortify_source" = "yes" ; then
5979 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5980 elif test "$debug" = "no"; then
5981 CFLAGS="-O2 $CFLAGS"
5984 if test "$have_asan" = "yes"; then
5985 CFLAGS="-fsanitize=address $CFLAGS"
5986 if test "$have_asan_iface_h" = "no" ; then
5987 echo "ASAN build enabled, but ASAN header missing." \
5988 "Without code annotation, the report may be inferior."
5989 elif test "$have_asan_iface_fiber" = "no" ; then
5990 echo "ASAN build enabled, but ASAN header is too old." \
5991 "Without code annotation, the report may be inferior."
5994 if test "$have_ubsan" = "yes"; then
5995 CFLAGS="-fsanitize=undefined $CFLAGS"
5998 ##########################################
5999 # Do we have libnfs
6000 if test "$libnfs" != "no" ; then
6001 if $pkg_config --atleast-version=1.9.3 libnfs; then
6002 libnfs="yes"
6003 libnfs_libs=$($pkg_config --libs libnfs)
6004 else
6005 if test "$libnfs" = "yes" ; then
6006 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
6008 libnfs="no"
6012 ##########################################
6013 # Do we have libudev
6014 if test "$libudev" != "no" ; then
6015 if $pkg_config libudev && test "$static" != "yes"; then
6016 libudev="yes"
6017 libudev_libs=$($pkg_config --libs libudev)
6018 else
6019 libudev="no"
6023 # Now we've finished running tests it's OK to add -Werror to the compiler flags
6024 if test "$werror" = "yes"; then
6025 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
6028 if test "$solaris" = "no" ; then
6029 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
6030 LDFLAGS="-Wl,--warn-common $LDFLAGS"
6034 # test if pod2man has --utf8 option
6035 if pod2man --help | grep -q utf8; then
6036 POD2MAN="pod2man --utf8"
6037 else
6038 POD2MAN="pod2man"
6041 # Use ASLR, no-SEH and DEP if available
6042 if test "$mingw32" = "yes" ; then
6043 for flag in --dynamicbase --no-seh --nxcompat; do
6044 if ld_has $flag ; then
6045 LDFLAGS="-Wl,$flag $LDFLAGS"
6047 done
6050 # Disable OpenBSD W^X if available
6051 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6052 cat > $TMPC <<EOF
6053 int main(void) { return 0; }
6055 wx_ldflags="-Wl,-z,wxneeded"
6056 if compile_prog "" "$wx_ldflags"; then
6057 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6061 qemu_confdir=$sysconfdir$confsuffix
6062 qemu_moddir=$libdir$confsuffix
6063 qemu_datadir=$datadir$confsuffix
6064 qemu_localedir="$datadir/locale"
6065 qemu_icondir="$datadir/icons"
6066 qemu_desktopdir="$datadir/applications"
6068 # We can only support ivshmem if we have eventfd
6069 if [ "$eventfd" = "yes" ]; then
6070 ivshmem=yes
6073 tools=""
6074 if test "$want_tools" = "yes" ; then
6075 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
6076 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6077 tools="qemu-nbd\$(EXESUF) $tools"
6079 if [ "$ivshmem" = "yes" ]; then
6080 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
6082 if [ "$curl" = "yes" ]; then
6083 tools="elf2dmp\$(EXESUF) $tools"
6086 if test "$softmmu" = yes ; then
6087 if test "$linux" = yes; then
6088 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
6089 virtfs=yes
6090 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6091 else
6092 if test "$virtfs" = yes; then
6093 error_exit "VirtFS requires libcap devel and libattr devel"
6095 virtfs=no
6097 if test "$mpath" != no && test "$mpathpersist" = yes ; then
6098 mpath=yes
6099 else
6100 if test "$mpath" = yes; then
6101 error_exit "Multipath requires libmpathpersist devel"
6103 mpath=no
6105 tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6106 else
6107 if test "$virtfs" = yes; then
6108 error_exit "VirtFS is supported only on Linux"
6110 virtfs=no
6111 if test "$mpath" = yes; then
6112 error_exit "Multipath is supported only on Linux"
6114 mpath=no
6116 if test "$xkbcommon" = "yes"; then
6117 tools="qemu-keymap\$(EXESUF) $tools"
6121 # Probe for guest agent support/options
6123 if [ "$guest_agent" != "no" ]; then
6124 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6125 guest_agent=no
6126 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6127 tools="qemu-ga $tools"
6128 guest_agent=yes
6129 elif [ "$guest_agent" != yes ]; then
6130 guest_agent=no
6131 else
6132 error_exit "Guest agent is not supported on this platform"
6136 # Guest agent Window MSI package
6138 if test "$guest_agent" != yes; then
6139 if test "$guest_agent_msi" = yes; then
6140 error_exit "MSI guest agent package requires guest agent enabled"
6142 guest_agent_msi=no
6143 elif test "$mingw32" != "yes"; then
6144 if test "$guest_agent_msi" = "yes"; then
6145 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6147 guest_agent_msi=no
6148 elif ! has wixl; then
6149 if test "$guest_agent_msi" = "yes"; then
6150 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6152 guest_agent_msi=no
6153 else
6154 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6155 # disabled explicitly
6156 if test "$guest_agent_msi" != "no"; then
6157 guest_agent_msi=yes
6161 if test "$guest_agent_msi" = "yes"; then
6162 if test "$guest_agent_with_vss" = "yes"; then
6163 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6166 if test "$QEMU_GA_MANUFACTURER" = ""; then
6167 QEMU_GA_MANUFACTURER=QEMU
6170 if test "$QEMU_GA_DISTRO" = ""; then
6171 QEMU_GA_DISTRO=Linux
6174 if test "$QEMU_GA_VERSION" = ""; then
6175 QEMU_GA_VERSION=$(cat $source_path/VERSION)
6178 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6180 case "$cpu" in
6181 x86_64)
6182 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6184 i386)
6185 QEMU_GA_MSI_ARCH="-D Arch=32"
6188 error_exit "CPU $cpu not supported for building installation package"
6190 esac
6193 # Mac OS X ships with a broken assembler
6194 roms=
6195 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6196 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6197 test "$softmmu" = yes ; then
6198 # Different host OS linkers have different ideas about the name of the ELF
6199 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6200 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6201 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6202 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6203 ld_i386_emulation="$emu"
6204 roms="optionrom"
6205 break
6207 done
6209 if test "$ARCH" = "ppc64" && test "$targetos" != "Darwin" ; then
6210 roms="$roms spapr-rtas"
6213 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6214 if test "$cpu" = "s390x" ; then
6215 write_c_skeleton
6216 if compile_prog "-march=z900" ""; then
6217 roms="$roms s390-ccw"
6221 # Probe for the need for relocating the user-only binary.
6222 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
6223 textseg_addr=
6224 case "$cpu" in
6225 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6226 # ??? Rationale for choosing this address
6227 textseg_addr=0x60000000
6229 mips)
6230 # A 256M aligned address, high in the address space, with enough
6231 # room for the code_gen_buffer above it before the stack.
6232 textseg_addr=0x60000000
6234 esac
6235 if [ -n "$textseg_addr" ]; then
6236 cat > $TMPC <<EOF
6237 int main(void) { return 0; }
6239 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6240 if ! compile_prog "" "$textseg_ldflags"; then
6241 # In case ld does not support -Ttext-segment, edit the default linker
6242 # script via sed to set the .text start addr. This is needed on FreeBSD
6243 # at least.
6244 if ! $ld --verbose >/dev/null 2>&1; then
6245 error_exit \
6246 "We need to link the QEMU user mode binaries at a" \
6247 "specific text address. Unfortunately your linker" \
6248 "doesn't support either the -Ttext-segment option or" \
6249 "printing the default linker script with --verbose." \
6250 "If you don't want the user mode binaries, pass the" \
6251 "--disable-user option to configure."
6254 $ld --verbose | sed \
6255 -e '1,/==================================================/d' \
6256 -e '/==================================================/,$d' \
6257 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6258 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6259 textseg_ldflags="-Wl,-T../config-host.ld"
6264 # Check that the C++ compiler exists and works with the C compiler.
6265 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6266 if has $cxx; then
6267 cat > $TMPC <<EOF
6268 int c_function(void);
6269 int main(void) { return c_function(); }
6272 compile_object
6274 cat > $TMPCXX <<EOF
6275 extern "C" {
6276 int c_function(void);
6278 int c_function(void) { return 42; }
6281 update_cxxflags
6283 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6284 # C++ compiler $cxx works ok with C compiler $cc
6286 else
6287 echo "C++ compiler $cxx does not work with C compiler $cc"
6288 echo "Disabling C++ specific optional code"
6289 cxx=
6291 else
6292 echo "No C++ compiler available; disabling C++ specific optional code"
6293 cxx=
6296 echo_version() {
6297 if test "$1" = "yes" ; then
6298 echo "($2)"
6302 # prepend pixman and ftd flags after all config tests are done
6303 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6304 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6305 libs_softmmu="$pixman_libs $libs_softmmu"
6307 echo "Install prefix $prefix"
6308 echo "BIOS directory $(eval echo $qemu_datadir)"
6309 echo "firmware path $(eval echo $firmwarepath)"
6310 echo "binary directory $(eval echo $bindir)"
6311 echo "library directory $(eval echo $libdir)"
6312 echo "module directory $(eval echo $qemu_moddir)"
6313 echo "libexec directory $(eval echo $libexecdir)"
6314 echo "include directory $(eval echo $includedir)"
6315 echo "config directory $(eval echo $sysconfdir)"
6316 if test "$mingw32" = "no" ; then
6317 echo "local state directory $(eval echo $local_statedir)"
6318 echo "Manual directory $(eval echo $mandir)"
6319 echo "ELF interp prefix $interp_prefix"
6320 else
6321 echo "local state directory queried at runtime"
6322 echo "Windows SDK $win_sdk"
6324 echo "Source path $source_path"
6325 echo "GIT binary $git"
6326 echo "GIT submodules $git_submodules"
6327 echo "C compiler $cc"
6328 echo "Host C compiler $host_cc"
6329 echo "C++ compiler $cxx"
6330 echo "Objective-C compiler $objcc"
6331 echo "ARFLAGS $ARFLAGS"
6332 echo "CFLAGS $CFLAGS"
6333 echo "QEMU_CFLAGS $QEMU_CFLAGS"
6334 echo "LDFLAGS $LDFLAGS"
6335 echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
6336 echo "make $make"
6337 echo "install $install"
6338 echo "python $python ($python_version)"
6339 echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
6340 if test "$slirp" != "no" ; then
6341 echo "smbd $smbd"
6343 echo "module support $modules"
6344 echo "host CPU $cpu"
6345 echo "host big endian $bigendian"
6346 echo "target list $target_list"
6347 echo "gprof enabled $gprof"
6348 echo "sparse enabled $sparse"
6349 echo "strip binaries $strip_opt"
6350 echo "profiler $profiler"
6351 echo "static build $static"
6352 if test "$darwin" = "yes" ; then
6353 echo "Cocoa support $cocoa"
6355 echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
6356 echo "SDL image support $sdl_image"
6357 echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
6358 echo "GTK GL support $gtk_gl"
6359 echo "VTE support $vte $(echo_version $vte $vteversion)"
6360 echo "TLS priority $tls_priority"
6361 echo "GNUTLS support $gnutls"
6362 echo "libgcrypt $gcrypt"
6363 echo "nettle $nettle $(echo_version $nettle $nettle_version)"
6364 echo "libtasn1 $tasn1"
6365 echo "PAM $auth_pam"
6366 echo "iconv support $iconv"
6367 echo "curses support $curses"
6368 echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
6369 echo "curl support $curl"
6370 echo "mingw32 support $mingw32"
6371 echo "Audio drivers $audio_drv_list"
6372 echo "Block whitelist (rw) $block_drv_rw_whitelist"
6373 echo "Block whitelist (ro) $block_drv_ro_whitelist"
6374 echo "VirtFS support $virtfs"
6375 echo "Multipath support $mpath"
6376 echo "VNC support $vnc"
6377 if test "$vnc" = "yes" ; then
6378 echo "VNC SASL support $vnc_sasl"
6379 echo "VNC JPEG support $vnc_jpeg"
6380 echo "VNC PNG support $vnc_png"
6382 if test -n "$sparc_cpu"; then
6383 echo "Target Sparc Arch $sparc_cpu"
6385 echo "xen support $xen"
6386 if test "$xen" = "yes" ; then
6387 echo "xen ctrl version $xen_ctrl_version"
6389 echo "brlapi support $brlapi"
6390 echo "bluez support $bluez"
6391 echo "Documentation $docs"
6392 echo "PIE $pie"
6393 echo "vde support $vde"
6394 echo "netmap support $netmap"
6395 echo "Linux AIO support $linux_aio"
6396 echo "ATTR/XATTR support $attr"
6397 echo "Install blobs $blobs"
6398 echo "KVM support $kvm"
6399 echo "HAX support $hax"
6400 echo "HVF support $hvf"
6401 echo "WHPX support $whpx"
6402 echo "TCG support $tcg"
6403 if test "$tcg" = "yes" ; then
6404 echo "TCG debug enabled $debug_tcg"
6405 echo "TCG interpreter $tcg_interpreter"
6407 echo "malloc trim support $malloc_trim"
6408 echo "RDMA support $rdma"
6409 echo "PVRDMA support $pvrdma"
6410 echo "fdt support $fdt"
6411 echo "membarrier $membarrier"
6412 echo "preadv support $preadv"
6413 echo "fdatasync $fdatasync"
6414 echo "madvise $madvise"
6415 echo "posix_madvise $posix_madvise"
6416 echo "posix_memalign $posix_memalign"
6417 echo "libcap-ng support $cap_ng"
6418 echo "vhost-net support $vhost_net"
6419 echo "vhost-crypto support $vhost_crypto"
6420 echo "vhost-scsi support $vhost_scsi"
6421 echo "vhost-vsock support $vhost_vsock"
6422 echo "vhost-user support $vhost_user"
6423 echo "Trace backends $trace_backends"
6424 if have_backend "simple"; then
6425 echo "Trace output file $trace_file-<pid>"
6427 echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6428 echo "rbd support $rbd"
6429 echo "xfsctl support $xfs"
6430 echo "smartcard support $smartcard"
6431 echo "libusb $libusb"
6432 echo "usb net redir $usb_redir"
6433 echo "OpenGL support $opengl"
6434 echo "OpenGL dmabufs $opengl_dmabuf"
6435 echo "libiscsi support $libiscsi"
6436 echo "libnfs support $libnfs"
6437 echo "build guest agent $guest_agent"
6438 echo "QGA VSS support $guest_agent_with_vss"
6439 echo "QGA w32 disk info $guest_agent_ntddscsi"
6440 echo "QGA MSI support $guest_agent_msi"
6441 echo "seccomp support $seccomp"
6442 echo "coroutine backend $coroutine"
6443 echo "coroutine pool $coroutine_pool"
6444 echo "debug stack usage $debug_stack_usage"
6445 echo "mutex debugging $debug_mutex"
6446 echo "crypto afalg $crypto_afalg"
6447 echo "GlusterFS support $glusterfs"
6448 echo "gcov $gcov_tool"
6449 echo "gcov enabled $gcov"
6450 echo "TPM support $tpm"
6451 echo "libssh support $libssh"
6452 echo "QOM debugging $qom_cast_debug"
6453 echo "Live block migration $live_block_migration"
6454 echo "lzo support $lzo"
6455 echo "snappy support $snappy"
6456 echo "bzip2 support $bzip2"
6457 echo "lzfse support $lzfse"
6458 echo "NUMA host support $numa"
6459 echo "libxml2 $libxml2"
6460 echo "tcmalloc support $tcmalloc"
6461 echo "jemalloc support $jemalloc"
6462 echo "avx2 optimization $avx2_opt"
6463 echo "replication support $replication"
6464 echo "VxHS block device $vxhs"
6465 echo "bochs support $bochs"
6466 echo "cloop support $cloop"
6467 echo "dmg support $dmg"
6468 echo "qcow v1 support $qcow1"
6469 echo "vdi support $vdi"
6470 echo "vvfat support $vvfat"
6471 echo "qed support $qed"
6472 echo "parallels support $parallels"
6473 echo "sheepdog support $sheepdog"
6474 echo "capstone $capstone"
6475 echo "docker $docker"
6476 echo "libpmem support $libpmem"
6477 echo "libudev $libudev"
6478 echo "default devices $default_devices"
6480 if test "$supported_cpu" = "no"; then
6481 echo
6482 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6483 echo
6484 echo "CPU host architecture $cpu support is not currently maintained."
6485 echo "The QEMU project intends to remove support for this host CPU in"
6486 echo "a future release if nobody volunteers to maintain it and to"
6487 echo "provide a build host for our continuous integration setup."
6488 echo "configure has succeeded and you can continue to build, but"
6489 echo "if you care about QEMU on this platform you should contact"
6490 echo "us upstream at qemu-devel@nongnu.org."
6493 if test "$supported_os" = "no"; then
6494 echo
6495 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6496 echo
6497 echo "Host OS $targetos support is not currently maintained."
6498 echo "The QEMU project intends to remove support for this host OS in"
6499 echo "a future release if nobody volunteers to maintain it and to"
6500 echo "provide a build host for our continuous integration setup."
6501 echo "configure has succeeded and you can continue to build, but"
6502 echo "if you care about QEMU on this platform you should contact"
6503 echo "us upstream at qemu-devel@nongnu.org."
6506 # Note that if the Python conditional here evaluates True we will exit
6507 # with status 1 which is a shell 'false' value.
6508 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,0))'; then
6509 echo
6510 echo "warning: Python 2 support is deprecated" >&2
6511 echo "warning: Python 3 will be required for building future versions of QEMU" >&2
6514 config_host_mak="config-host.mak"
6516 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6518 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6519 echo >> $config_host_mak
6521 echo all: >> $config_host_mak
6522 echo "prefix=$prefix" >> $config_host_mak
6523 echo "bindir=$bindir" >> $config_host_mak
6524 echo "libdir=$libdir" >> $config_host_mak
6525 echo "libexecdir=$libexecdir" >> $config_host_mak
6526 echo "includedir=$includedir" >> $config_host_mak
6527 echo "mandir=$mandir" >> $config_host_mak
6528 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6529 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6530 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6531 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6532 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6533 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6534 if test "$mingw32" = "no" ; then
6535 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6537 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6538 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6539 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6540 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6541 echo "libs_cpu=$libs_cpu" >> $config_host_mak
6542 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6543 echo "GIT=$git" >> $config_host_mak
6544 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6545 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6547 echo "ARCH=$ARCH" >> $config_host_mak
6549 if test "$default_devices" = "yes" ; then
6550 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6551 else
6552 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6554 if test "$debug_tcg" = "yes" ; then
6555 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6557 if test "$strip_opt" = "yes" ; then
6558 echo "STRIP=${strip}" >> $config_host_mak
6560 if test "$bigendian" = "yes" ; then
6561 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6563 if test "$mingw32" = "yes" ; then
6564 echo "CONFIG_WIN32=y" >> $config_host_mak
6565 rc_version=$(cat $source_path/VERSION)
6566 version_major=${rc_version%%.*}
6567 rc_version=${rc_version#*.}
6568 version_minor=${rc_version%%.*}
6569 rc_version=${rc_version#*.}
6570 version_subminor=${rc_version%%.*}
6571 version_micro=0
6572 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6573 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6574 if test "$guest_agent_with_vss" = "yes" ; then
6575 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6576 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6577 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6579 if test "$guest_agent_ntddscsi" = "yes" ; then
6580 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6582 if test "$guest_agent_msi" = "yes"; then
6583 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6584 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6585 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6586 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6587 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6588 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6589 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6591 else
6592 echo "CONFIG_POSIX=y" >> $config_host_mak
6595 if test "$linux" = "yes" ; then
6596 echo "CONFIG_LINUX=y" >> $config_host_mak
6599 if test "$darwin" = "yes" ; then
6600 echo "CONFIG_DARWIN=y" >> $config_host_mak
6603 if test "$solaris" = "yes" ; then
6604 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6606 if test "$haiku" = "yes" ; then
6607 echo "CONFIG_HAIKU=y" >> $config_host_mak
6609 if test "$static" = "yes" ; then
6610 echo "CONFIG_STATIC=y" >> $config_host_mak
6612 if test "$profiler" = "yes" ; then
6613 echo "CONFIG_PROFILER=y" >> $config_host_mak
6615 if test "$slirp" != "no"; then
6616 echo "CONFIG_SLIRP=y" >> $config_host_mak
6617 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6618 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6619 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6621 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6622 echo "config-host.h: slirp/all" >> $config_host_mak
6624 if test "$vde" = "yes" ; then
6625 echo "CONFIG_VDE=y" >> $config_host_mak
6626 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6628 if test "$netmap" = "yes" ; then
6629 echo "CONFIG_NETMAP=y" >> $config_host_mak
6631 if test "$l2tpv3" = "yes" ; then
6632 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6634 if test "$cap_ng" = "yes" ; then
6635 echo "CONFIG_LIBCAP=y" >> $config_host_mak
6637 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6638 for drv in $audio_drv_list; do
6639 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6640 case "$drv" in
6641 alsa | oss | pa | sdl)
6642 echo "$def=m" >> $config_host_mak ;;
6644 echo "$def=y" >> $config_host_mak ;;
6645 esac
6646 done
6647 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6648 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6649 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6650 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6651 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6652 if test "$audio_pt_int" = "yes" ; then
6653 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6655 if test "$audio_win_int" = "yes" ; then
6656 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6658 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6659 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6660 if test "$vnc" = "yes" ; then
6661 echo "CONFIG_VNC=y" >> $config_host_mak
6663 if test "$vnc_sasl" = "yes" ; then
6664 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6666 if test "$vnc_jpeg" = "yes" ; then
6667 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6669 if test "$vnc_png" = "yes" ; then
6670 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6672 if test "$xkbcommon" = "yes" ; then
6673 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6674 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6676 if test "$xfs" = "yes" ; then
6677 echo "CONFIG_XFS=y" >> $config_host_mak
6679 qemu_version=$(head $source_path/VERSION)
6680 echo "VERSION=$qemu_version" >>$config_host_mak
6681 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6682 echo "SRC_PATH=$source_path" >> $config_host_mak
6683 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6684 if [ "$docs" = "yes" ] ; then
6685 echo "BUILD_DOCS=yes" >> $config_host_mak
6687 if test "$modules" = "yes"; then
6688 # $shacmd can generate a hash started with digit, which the compiler doesn't
6689 # like as an symbol. So prefix it with an underscore
6690 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6691 echo "CONFIG_MODULES=y" >> $config_host_mak
6693 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6694 echo "CONFIG_X11=y" >> $config_host_mak
6695 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6696 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6698 if test "$sdl" = "yes" ; then
6699 echo "CONFIG_SDL=m" >> $config_host_mak
6700 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6701 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6702 if test "$sdl_image" = "yes" ; then
6703 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6706 if test "$cocoa" = "yes" ; then
6707 echo "CONFIG_COCOA=y" >> $config_host_mak
6709 if test "$iconv" = "yes" ; then
6710 echo "CONFIG_ICONV=y" >> $config_host_mak
6711 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6712 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6714 if test "$curses" = "yes" ; then
6715 echo "CONFIG_CURSES=m" >> $config_host_mak
6716 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6717 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6719 if test "$pipe2" = "yes" ; then
6720 echo "CONFIG_PIPE2=y" >> $config_host_mak
6722 if test "$accept4" = "yes" ; then
6723 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6725 if test "$splice" = "yes" ; then
6726 echo "CONFIG_SPLICE=y" >> $config_host_mak
6728 if test "$eventfd" = "yes" ; then
6729 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6731 if test "$memfd" = "yes" ; then
6732 echo "CONFIG_MEMFD=y" >> $config_host_mak
6734 if test "$have_usbfs" = "yes" ; then
6735 echo "CONFIG_USBFS=y" >> $config_host_mak
6737 if test "$fallocate" = "yes" ; then
6738 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6740 if test "$fallocate_punch_hole" = "yes" ; then
6741 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6743 if test "$fallocate_zero_range" = "yes" ; then
6744 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6746 if test "$posix_fallocate" = "yes" ; then
6747 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6749 if test "$sync_file_range" = "yes" ; then
6750 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6752 if test "$fiemap" = "yes" ; then
6753 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6755 if test "$dup3" = "yes" ; then
6756 echo "CONFIG_DUP3=y" >> $config_host_mak
6758 if test "$ppoll" = "yes" ; then
6759 echo "CONFIG_PPOLL=y" >> $config_host_mak
6761 if test "$prctl_pr_set_timerslack" = "yes" ; then
6762 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6764 if test "$epoll" = "yes" ; then
6765 echo "CONFIG_EPOLL=y" >> $config_host_mak
6767 if test "$epoll_create1" = "yes" ; then
6768 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6770 if test "$sendfile" = "yes" ; then
6771 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6773 if test "$timerfd" = "yes" ; then
6774 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6776 if test "$setns" = "yes" ; then
6777 echo "CONFIG_SETNS=y" >> $config_host_mak
6779 if test "$clock_adjtime" = "yes" ; then
6780 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6782 if test "$syncfs" = "yes" ; then
6783 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6785 if test "$inotify" = "yes" ; then
6786 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6788 if test "$inotify1" = "yes" ; then
6789 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6791 if test "$sem_timedwait" = "yes" ; then
6792 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6794 if test "$strchrnul" = "yes" ; then
6795 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6797 if test "$byteswap_h" = "yes" ; then
6798 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6800 if test "$bswap_h" = "yes" ; then
6801 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6803 if test "$curl" = "yes" ; then
6804 echo "CONFIG_CURL=m" >> $config_host_mak
6805 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6806 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6808 if test "$brlapi" = "yes" ; then
6809 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6810 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6812 if test "$bluez" = "yes" ; then
6813 echo "CONFIG_BLUEZ=y" >> $config_host_mak
6814 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6816 if test "$gtk" = "yes" ; then
6817 echo "CONFIG_GTK=m" >> $config_host_mak
6818 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6819 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6820 if test "$gtk_gl" = "yes" ; then
6821 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6824 if test "$gio" = "yes" ; then
6825 echo "CONFIG_GIO=y" >> $config_host_mak
6826 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6827 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6829 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6830 if test "$gnutls" = "yes" ; then
6831 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6833 if test "$gcrypt" = "yes" ; then
6834 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6835 if test "$gcrypt_hmac" = "yes" ; then
6836 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6839 if test "$nettle" = "yes" ; then
6840 echo "CONFIG_NETTLE=y" >> $config_host_mak
6841 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6843 if test "$tasn1" = "yes" ; then
6844 echo "CONFIG_TASN1=y" >> $config_host_mak
6846 if test "$auth_pam" = "yes" ; then
6847 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6849 if test "$have_ifaddrs_h" = "yes" ; then
6850 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6852 if test "$have_broken_size_max" = "yes" ; then
6853 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6856 # Work around a system header bug with some kernel/XFS header
6857 # versions where they both try to define 'struct fsxattr':
6858 # xfs headers will not try to redefine structs from linux headers
6859 # if this macro is set.
6860 if test "$have_fsxattr" = "yes" ; then
6861 echo "HAVE_FSXATTR=y" >> $config_host_mak
6863 if test "$have_copy_file_range" = "yes" ; then
6864 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6866 if test "$vte" = "yes" ; then
6867 echo "CONFIG_VTE=y" >> $config_host_mak
6868 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6869 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6871 if test "$virglrenderer" = "yes" ; then
6872 echo "CONFIG_VIRGL=y" >> $config_host_mak
6873 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6874 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6876 if test "$xen" = "yes" ; then
6877 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6878 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6880 if test "$linux_aio" = "yes" ; then
6881 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6883 if test "$attr" = "yes" ; then
6884 echo "CONFIG_ATTR=y" >> $config_host_mak
6886 if test "$libattr" = "yes" ; then
6887 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6889 if test "$virtfs" = "yes" ; then
6890 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6892 if test "$mpath" = "yes" ; then
6893 echo "CONFIG_MPATH=y" >> $config_host_mak
6894 if test "$mpathpersist_new_api" = "yes"; then
6895 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6898 if test "$vhost_scsi" = "yes" ; then
6899 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6901 if test "$vhost_net" = "yes" ; then
6902 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6904 if test "$vhost_net_user" = "yes" ; then
6905 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
6907 if test "$vhost_crypto" = "yes" ; then
6908 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6910 if test "$vhost_vsock" = "yes" ; then
6911 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6913 if test "$vhost_kernel" = "yes" ; then
6914 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6916 if test "$vhost_user" = "yes" ; then
6917 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6919 if test "$blobs" = "yes" ; then
6920 echo "INSTALL_BLOBS=yes" >> $config_host_mak
6922 if test "$iovec" = "yes" ; then
6923 echo "CONFIG_IOVEC=y" >> $config_host_mak
6925 if test "$preadv" = "yes" ; then
6926 echo "CONFIG_PREADV=y" >> $config_host_mak
6928 if test "$fdt" != "no" ; then
6929 echo "CONFIG_FDT=y" >> $config_host_mak
6931 if test "$membarrier" = "yes" ; then
6932 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6934 if test "$signalfd" = "yes" ; then
6935 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6937 if test "$optreset" = "yes" ; then
6938 echo "HAVE_OPTRESET=y" >> $config_host_mak
6940 if test "$tcg" = "yes"; then
6941 echo "CONFIG_TCG=y" >> $config_host_mak
6942 if test "$tcg_interpreter" = "yes" ; then
6943 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6946 if test "$fdatasync" = "yes" ; then
6947 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6949 if test "$madvise" = "yes" ; then
6950 echo "CONFIG_MADVISE=y" >> $config_host_mak
6952 if test "$posix_madvise" = "yes" ; then
6953 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6955 if test "$posix_memalign" = "yes" ; then
6956 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6959 if test "$spice" = "yes" ; then
6960 echo "CONFIG_SPICE=y" >> $config_host_mak
6963 if test "$smartcard" = "yes" ; then
6964 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6965 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6966 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6969 if test "$libusb" = "yes" ; then
6970 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6971 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6972 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6975 if test "$usb_redir" = "yes" ; then
6976 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6977 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6978 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6981 if test "$opengl" = "yes" ; then
6982 echo "CONFIG_OPENGL=y" >> $config_host_mak
6983 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6984 if test "$opengl_dmabuf" = "yes" ; then
6985 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6989 if test "$gbm" = "yes" ; then
6990 echo "CONFIG_GBM=y" >> $config_host_mak
6991 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6992 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6996 if test "$malloc_trim" = "yes" ; then
6997 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
7000 if test "$avx2_opt" = "yes" ; then
7001 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
7004 if test "$lzo" = "yes" ; then
7005 echo "CONFIG_LZO=y" >> $config_host_mak
7008 if test "$snappy" = "yes" ; then
7009 echo "CONFIG_SNAPPY=y" >> $config_host_mak
7012 if test "$bzip2" = "yes" ; then
7013 echo "CONFIG_BZIP2=y" >> $config_host_mak
7014 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
7017 if test "$lzfse" = "yes" ; then
7018 echo "CONFIG_LZFSE=y" >> $config_host_mak
7019 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
7022 if test "$libiscsi" = "yes" ; then
7023 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
7024 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
7025 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
7028 if test "$libnfs" = "yes" ; then
7029 echo "CONFIG_LIBNFS=m" >> $config_host_mak
7030 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
7033 if test "$seccomp" = "yes"; then
7034 echo "CONFIG_SECCOMP=y" >> $config_host_mak
7035 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
7036 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
7039 # XXX: suppress that
7040 if [ "$bsd" = "yes" ] ; then
7041 echo "CONFIG_BSD=y" >> $config_host_mak
7044 if test "$localtime_r" = "yes" ; then
7045 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7047 if test "$qom_cast_debug" = "yes" ; then
7048 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7050 if test "$rbd" = "yes" ; then
7051 echo "CONFIG_RBD=m" >> $config_host_mak
7052 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7053 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7056 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7057 if test "$coroutine_pool" = "yes" ; then
7058 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7059 else
7060 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7063 if test "$debug_stack_usage" = "yes" ; then
7064 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7067 if test "$crypto_afalg" = "yes" ; then
7068 echo "CONFIG_AF_ALG=y" >> $config_host_mak
7071 if test "$open_by_handle_at" = "yes" ; then
7072 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7075 if test "$linux_magic_h" = "yes" ; then
7076 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7079 if test "$pragma_diagnostic_available" = "yes" ; then
7080 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
7083 if test "$valgrind_h" = "yes" ; then
7084 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7087 if test "$have_asan_iface_fiber" = "yes" ; then
7088 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7091 if test "$has_environ" = "yes" ; then
7092 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7095 if test "$cpuid_h" = "yes" ; then
7096 echo "CONFIG_CPUID_H=y" >> $config_host_mak
7099 if test "$int128" = "yes" ; then
7100 echo "CONFIG_INT128=y" >> $config_host_mak
7103 if test "$atomic128" = "yes" ; then
7104 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7107 if test "$cmpxchg128" = "yes" ; then
7108 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7111 if test "$atomic64" = "yes" ; then
7112 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7115 if test "$vector16" = "yes" ; then
7116 echo "CONFIG_VECTOR16=y" >> $config_host_mak
7119 if test "$getauxval" = "yes" ; then
7120 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7123 if test "$glusterfs" = "yes" ; then
7124 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
7125 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7126 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7129 if test "$glusterfs_xlator_opt" = "yes" ; then
7130 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7133 if test "$glusterfs_discard" = "yes" ; then
7134 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7137 if test "$glusterfs_fallocate" = "yes" ; then
7138 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7141 if test "$glusterfs_zerofill" = "yes" ; then
7142 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7145 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7146 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7149 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7150 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7153 if test "$libssh" = "yes" ; then
7154 echo "CONFIG_LIBSSH=m" >> $config_host_mak
7155 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7156 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7159 if test "$live_block_migration" = "yes" ; then
7160 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7163 if test "$tpm" = "yes"; then
7164 echo 'CONFIG_TPM=y' >> $config_host_mak
7167 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7168 if have_backend "nop"; then
7169 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7171 if have_backend "simple"; then
7172 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7173 # Set the appropriate trace file.
7174 trace_file="\"$trace_file-\" FMT_pid"
7176 if have_backend "log"; then
7177 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7179 if have_backend "ust"; then
7180 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7182 if have_backend "dtrace"; then
7183 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7184 if test "$trace_backend_stap" = "yes" ; then
7185 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7188 if have_backend "ftrace"; then
7189 if test "$linux" = "yes" ; then
7190 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7191 else
7192 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7195 if have_backend "syslog"; then
7196 if test "$posix_syslog" = "yes" ; then
7197 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7198 else
7199 feature_not_found "syslog(trace backend)" "syslog not available"
7202 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7204 if test "$rdma" = "yes" ; then
7205 echo "CONFIG_RDMA=y" >> $config_host_mak
7206 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7209 if test "$pvrdma" = "yes" ; then
7210 echo "CONFIG_PVRDMA=y" >> $config_host_mak
7213 if test "$have_rtnetlink" = "yes" ; then
7214 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7217 if test "$libxml2" = "yes" ; then
7218 echo "CONFIG_LIBXML2=y" >> $config_host_mak
7219 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7220 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7223 if test "$replication" = "yes" ; then
7224 echo "CONFIG_REPLICATION=y" >> $config_host_mak
7227 if test "$have_af_vsock" = "yes" ; then
7228 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7231 if test "$have_sysmacros" = "yes" ; then
7232 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7235 if test "$have_static_assert" = "yes" ; then
7236 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7239 if test "$have_utmpx" = "yes" ; then
7240 echo "HAVE_UTMPX=y" >> $config_host_mak
7242 if test "$have_getrandom" = "yes" ; then
7243 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7245 if test "$ivshmem" = "yes" ; then
7246 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7248 if test "$capstone" != "no" ; then
7249 echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7251 if test "$debug_mutex" = "yes" ; then
7252 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7255 # Hold two types of flag:
7256 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
7257 # a thread we have a handle to
7258 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7259 # platform
7260 if test "$pthread_setname_np_w_tid" = "yes" ; then
7261 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7262 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7263 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7264 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7265 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7268 if test "$vxhs" = "yes" ; then
7269 echo "CONFIG_VXHS=y" >> $config_host_mak
7270 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7273 if test "$libpmem" = "yes" ; then
7274 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7277 if test "$bochs" = "yes" ; then
7278 echo "CONFIG_BOCHS=y" >> $config_host_mak
7280 if test "$cloop" = "yes" ; then
7281 echo "CONFIG_CLOOP=y" >> $config_host_mak
7283 if test "$dmg" = "yes" ; then
7284 echo "CONFIG_DMG=y" >> $config_host_mak
7286 if test "$qcow1" = "yes" ; then
7287 echo "CONFIG_QCOW1=y" >> $config_host_mak
7289 if test "$vdi" = "yes" ; then
7290 echo "CONFIG_VDI=y" >> $config_host_mak
7292 if test "$vvfat" = "yes" ; then
7293 echo "CONFIG_VVFAT=y" >> $config_host_mak
7295 if test "$qed" = "yes" ; then
7296 echo "CONFIG_QED=y" >> $config_host_mak
7298 if test "$parallels" = "yes" ; then
7299 echo "CONFIG_PARALLELS=y" >> $config_host_mak
7301 if test "$sheepdog" = "yes" ; then
7302 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7305 if test "$tcg_interpreter" = "yes"; then
7306 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
7307 elif test "$ARCH" = "sparc64" ; then
7308 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
7309 elif test "$ARCH" = "s390x" ; then
7310 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
7311 elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7312 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
7313 elif test "$ARCH" = "ppc64" ; then
7314 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
7315 elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7316 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
7317 else
7318 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
7320 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
7322 echo "TOOLS=$tools" >> $config_host_mak
7323 echo "ROMS=$roms" >> $config_host_mak
7324 echo "MAKE=$make" >> $config_host_mak
7325 echo "INSTALL=$install" >> $config_host_mak
7326 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7327 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7328 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7329 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7330 echo "PYTHON=$python" >> $config_host_mak
7331 echo "PYTHON_VERSION=$python_version" >> $config_host_mak
7332 echo "CC=$cc" >> $config_host_mak
7333 if $iasl -h > /dev/null 2>&1; then
7334 echo "IASL=$iasl" >> $config_host_mak
7336 echo "HOST_CC=$host_cc" >> $config_host_mak
7337 echo "CXX=$cxx" >> $config_host_mak
7338 echo "OBJCC=$objcc" >> $config_host_mak
7339 echo "AR=$ar" >> $config_host_mak
7340 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7341 echo "AS=$as" >> $config_host_mak
7342 echo "CCAS=$ccas" >> $config_host_mak
7343 echo "CPP=$cpp" >> $config_host_mak
7344 echo "OBJCOPY=$objcopy" >> $config_host_mak
7345 echo "LD=$ld" >> $config_host_mak
7346 echo "RANLIB=$ranlib" >> $config_host_mak
7347 echo "NM=$nm" >> $config_host_mak
7348 echo "WINDRES=$windres" >> $config_host_mak
7349 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7350 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7351 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7352 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7353 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7354 if test "$sparse" = "yes" ; then
7355 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
7356 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
7357 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
7358 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
7359 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7361 if test "$cross_prefix" != ""; then
7362 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
7363 else
7364 echo "AUTOCONF_HOST := " >> $config_host_mak
7366 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
7367 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7368 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7369 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7370 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7371 echo "LIBS+=$LIBS" >> $config_host_mak
7372 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7373 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7374 echo "EXESUF=$EXESUF" >> $config_host_mak
7375 echo "DSOSUF=$DSOSUF" >> $config_host_mak
7376 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7377 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
7378 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7379 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7380 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7381 if test "$gcov" = "yes" ; then
7382 echo "CONFIG_GCOV=y" >> $config_host_mak
7383 echo "GCOV=$gcov_tool" >> $config_host_mak
7386 if test "$docker" != "no"; then
7387 echo "HAVE_USER_DOCKER=y" >> $config_host_mak
7390 if test "$libudev" != "no"; then
7391 echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7392 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7395 # use included Linux headers
7396 if test "$linux" = "yes" ; then
7397 mkdir -p linux-headers
7398 case "$cpu" in
7399 i386|x86_64|x32)
7400 linux_arch=x86
7402 ppc|ppc64|ppc64le)
7403 linux_arch=powerpc
7405 s390x)
7406 linux_arch=s390
7408 aarch64)
7409 linux_arch=arm64
7411 mips64)
7412 linux_arch=mips
7415 # For most CPUs the kernel architecture name and QEMU CPU name match.
7416 linux_arch="$cpu"
7418 esac
7419 # For non-KVM architectures we will not have asm headers
7420 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7421 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7425 for target in $target_list; do
7426 target_dir="$target"
7427 config_target_mak=$target_dir/config-target.mak
7428 target_name=$(echo $target | cut -d '-' -f 1)
7429 target_bigendian="no"
7431 case "$target_name" in
7432 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7433 target_bigendian=yes
7435 esac
7436 target_softmmu="no"
7437 target_user_only="no"
7438 target_linux_user="no"
7439 target_bsd_user="no"
7440 case "$target" in
7441 ${target_name}-softmmu)
7442 target_softmmu="yes"
7444 ${target_name}-linux-user)
7445 target_user_only="yes"
7446 target_linux_user="yes"
7448 ${target_name}-bsd-user)
7449 target_user_only="yes"
7450 target_bsd_user="yes"
7453 error_exit "Target '$target' not recognised"
7454 exit 1
7456 esac
7458 target_compiler=""
7459 target_compiler_static=""
7460 target_compiler_cflags=""
7462 mkdir -p $target_dir
7463 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7465 bflt="no"
7466 mttcg="no"
7467 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7468 gdb_xml_files=""
7470 TARGET_ARCH="$target_name"
7471 TARGET_BASE_ARCH=""
7472 TARGET_ABI_DIR=""
7474 case "$target_name" in
7475 i386)
7476 mttcg="yes"
7477 gdb_xml_files="i386-32bit.xml"
7478 target_compiler=$cross_cc_i386
7479 target_compiler_cflags=$cross_cc_ccflags_i386
7481 x86_64)
7482 TARGET_BASE_ARCH=i386
7483 mttcg="yes"
7484 gdb_xml_files="i386-64bit.xml"
7485 target_compiler=$cross_cc_x86_64
7487 alpha)
7488 mttcg="yes"
7489 target_compiler=$cross_cc_alpha
7491 arm|armeb)
7492 TARGET_ARCH=arm
7493 bflt="yes"
7494 mttcg="yes"
7495 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7496 target_compiler=$cross_cc_arm
7497 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7499 aarch64|aarch64_be)
7500 TARGET_ARCH=aarch64
7501 TARGET_BASE_ARCH=arm
7502 bflt="yes"
7503 mttcg="yes"
7504 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7505 target_compiler=$cross_cc_aarch64
7506 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
7508 cris)
7509 target_compiler=$cross_cc_cris
7511 hppa)
7512 mttcg="yes"
7513 target_compiler=$cross_cc_hppa
7515 lm32)
7516 target_compiler=$cross_cc_lm32
7518 m68k)
7519 bflt="yes"
7520 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
7521 target_compiler=$cross_cc_m68k
7523 microblaze|microblazeel)
7524 TARGET_ARCH=microblaze
7525 bflt="yes"
7526 echo "TARGET_ABI32=y" >> $config_target_mak
7527 target_compiler=$cross_cc_microblaze
7529 mips|mipsel)
7530 mttcg="yes"
7531 TARGET_ARCH=mips
7532 target_compiler=$cross_cc_mips
7533 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7535 mipsn32|mipsn32el)
7536 mttcg="yes"
7537 TARGET_ARCH=mips64
7538 TARGET_BASE_ARCH=mips
7539 target_compiler=$cross_cc_mipsn32
7540 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7541 echo "TARGET_ABI32=y" >> $config_target_mak
7543 mips64|mips64el)
7544 mttcg="yes"
7545 TARGET_ARCH=mips64
7546 TARGET_BASE_ARCH=mips
7547 target_compiler=$cross_cc_mips64
7548 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7550 moxie)
7551 target_compiler=$cross_cc_moxie
7553 nios2)
7554 target_compiler=$cross_cc_nios2
7556 or1k)
7557 target_compiler=$cross_cc_or1k
7558 TARGET_ARCH=openrisc
7559 TARGET_BASE_ARCH=openrisc
7561 ppc)
7562 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7563 target_compiler=$cross_cc_ppc
7564 target_compiler_cflags="$cross_cc_cflags_ppc"
7566 ppc64)
7567 TARGET_BASE_ARCH=ppc
7568 TARGET_ABI_DIR=ppc
7569 mttcg=yes
7570 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7571 target_compiler=$cross_cc_ppc64
7572 target_compiler_cflags="$cross_cc_cflags_ppc64"
7574 ppc64le)
7575 TARGET_ARCH=ppc64
7576 TARGET_BASE_ARCH=ppc
7577 TARGET_ABI_DIR=ppc
7578 mttcg=yes
7579 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7580 target_compiler=$cross_cc_ppc64le
7582 ppc64abi32)
7583 TARGET_ARCH=ppc64
7584 TARGET_BASE_ARCH=ppc
7585 TARGET_ABI_DIR=ppc
7586 echo "TARGET_ABI32=y" >> $config_target_mak
7587 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7588 target_compiler=$cross_cc_ppc64abi32
7590 riscv32)
7591 TARGET_BASE_ARCH=riscv
7592 TARGET_ABI_DIR=riscv
7593 mttcg=yes
7594 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml"
7595 target_compiler=$cross_cc_riscv32
7597 riscv64)
7598 TARGET_BASE_ARCH=riscv
7599 TARGET_ABI_DIR=riscv
7600 mttcg=yes
7601 gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml"
7602 target_compiler=$cross_cc_riscv64
7604 sh4|sh4eb)
7605 TARGET_ARCH=sh4
7606 bflt="yes"
7607 target_compiler=$cross_cc_sh4
7609 sparc)
7610 target_compiler=$cross_cc_sparc
7612 sparc64)
7613 TARGET_BASE_ARCH=sparc
7614 target_compiler=$cross_cc_sparc64
7616 sparc32plus)
7617 TARGET_ARCH=sparc64
7618 TARGET_BASE_ARCH=sparc
7619 TARGET_ABI_DIR=sparc
7620 target_compiler=$cross_cc_sparc32plus
7621 echo "TARGET_ABI32=y" >> $config_target_mak
7623 s390x)
7624 mttcg=yes
7625 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7626 target_compiler=$cross_cc_s390x
7628 tilegx)
7629 target_compiler=$cross_cc_tilegx
7631 tricore)
7632 target_compiler=$cross_cc_tricore
7634 unicore32)
7635 target_compiler=$cross_cc_unicore32
7637 xtensa|xtensaeb)
7638 TARGET_ARCH=xtensa
7639 bflt="yes"
7640 mttcg="yes"
7641 target_compiler=$cross_cc_xtensa
7644 error_exit "Unsupported target CPU"
7646 esac
7647 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7648 if [ "$TARGET_BASE_ARCH" = "" ]; then
7649 TARGET_BASE_ARCH=$TARGET_ARCH
7652 # Do we have a cross compiler for this target?
7653 if has $target_compiler; then
7655 write_c_skeleton
7657 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
7658 # For host systems we might get away with building without -static
7659 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
7660 target_compiler=""
7661 else
7662 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7663 target_compiler_static="n"
7665 else
7666 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
7667 target_compiler_static="y"
7669 else
7670 target_compiler=""
7673 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7675 upper() {
7676 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7679 target_arch_name="$(upper $TARGET_ARCH)"
7680 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7681 echo "TARGET_NAME=$target_name" >> $config_target_mak
7682 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7683 if [ "$TARGET_ABI_DIR" = "" ]; then
7684 TARGET_ABI_DIR=$TARGET_ARCH
7686 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7687 if [ "$HOST_VARIANT_DIR" != "" ]; then
7688 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7691 if supported_xen_target $target; then
7692 echo "CONFIG_XEN=y" >> $config_target_mak
7693 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
7694 if test "$xen_pci_passthrough" = yes; then
7695 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7697 else
7698 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
7700 if supported_kvm_target $target; then
7701 echo "CONFIG_KVM=y" >> $config_target_mak
7702 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7703 else
7704 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
7706 if supported_hax_target $target; then
7707 echo "CONFIG_HAX=y" >> $config_target_mak
7709 if supported_hvf_target $target; then
7710 echo "CONFIG_HVF=y" >> $config_target_mak
7712 if supported_whpx_target $target; then
7713 echo "CONFIG_WHPX=y" >> $config_target_mak
7715 if test "$target_bigendian" = "yes" ; then
7716 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7718 if test "$target_softmmu" = "yes" ; then
7719 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7720 if test "$mttcg" = "yes" ; then
7721 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7724 if test "$target_user_only" = "yes" ; then
7725 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7726 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7728 if test "$target_linux_user" = "yes" ; then
7729 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7731 list=""
7732 if test ! -z "$gdb_xml_files" ; then
7733 for x in $gdb_xml_files; do
7734 list="$list $source_path/gdb-xml/$x"
7735 done
7736 echo "TARGET_XML_FILES=$list" >> $config_target_mak
7739 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
7740 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7742 if test "$target_bsd_user" = "yes" ; then
7743 echo "CONFIG_BSD_USER=y" >> $config_target_mak
7746 if test -n "$target_compiler"; then
7747 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
7749 if test -n "$target_compiler_static"; then
7750 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
7753 if test -n "$target_compiler_cflags"; then
7754 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
7759 # generate QEMU_CFLAGS/LDFLAGS for targets
7761 cflags=""
7762 ldflags=""
7764 disas_config() {
7765 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7766 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7769 for i in $ARCH $TARGET_BASE_ARCH ; do
7770 case "$i" in
7771 alpha)
7772 disas_config "ALPHA"
7774 aarch64)
7775 if test -n "${cxx}"; then
7776 disas_config "ARM_A64"
7779 arm)
7780 disas_config "ARM"
7781 if test -n "${cxx}"; then
7782 disas_config "ARM_A64"
7785 cris)
7786 disas_config "CRIS"
7788 hppa)
7789 disas_config "HPPA"
7791 i386|x86_64|x32)
7792 disas_config "I386"
7794 lm32)
7795 disas_config "LM32"
7797 m68k)
7798 disas_config "M68K"
7800 microblaze*)
7801 disas_config "MICROBLAZE"
7803 mips*)
7804 disas_config "MIPS"
7805 if test -n "${cxx}"; then
7806 disas_config "NANOMIPS"
7809 moxie*)
7810 disas_config "MOXIE"
7812 nios2)
7813 disas_config "NIOS2"
7815 or1k)
7816 disas_config "OPENRISC"
7818 ppc*)
7819 disas_config "PPC"
7821 riscv*)
7822 disas_config "RISCV"
7824 s390*)
7825 disas_config "S390"
7827 sh4)
7828 disas_config "SH4"
7830 sparc*)
7831 disas_config "SPARC"
7833 xtensa*)
7834 disas_config "XTENSA"
7836 esac
7837 done
7838 if test "$tcg_interpreter" = "yes" ; then
7839 disas_config "TCI"
7842 case "$ARCH" in
7843 alpha)
7844 # Ensure there's only a single GP
7845 cflags="-msmall-data $cflags"
7847 esac
7849 if test "$gprof" = "yes" ; then
7850 echo "TARGET_GPROF=y" >> $config_target_mak
7851 if test "$target_linux_user" = "yes" ; then
7852 cflags="-p $cflags"
7853 ldflags="-p $ldflags"
7855 if test "$target_softmmu" = "yes" ; then
7856 ldflags="-p $ldflags"
7857 echo "GPROF_CFLAGS=-p" >> $config_target_mak
7861 if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
7862 ldflags="$ldflags $textseg_ldflags"
7865 # Newer kernels on s390 check for an S390_PGSTE program header and
7866 # enable the pgste page table extensions in that case. This makes
7867 # the vm.allocate_pgste sysctl unnecessary. We enable this program
7868 # header if
7869 # - we build on s390x
7870 # - we build the system emulation for s390x (qemu-system-s390x)
7871 # - KVM is enabled
7872 # - the linker supports --s390-pgste
7873 if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7874 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
7875 if ld_has --s390-pgste ; then
7876 ldflags="-Wl,--s390-pgste $ldflags"
7880 echo "LDFLAGS+=$ldflags" >> $config_target_mak
7881 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7883 done # for target in $targets
7885 echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
7886 echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
7888 if test -n "$enabled_cross_compilers"; then
7889 echo
7890 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
7893 if [ "$fdt" = "git" ]; then
7894 echo "config-host.h: dtc/all" >> $config_host_mak
7896 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7897 echo "config-host.h: capstone/all" >> $config_host_mak
7899 if test -n "$LIBCAPSTONE"; then
7900 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7903 if test "$numa" = "yes"; then
7904 echo "CONFIG_NUMA=y" >> $config_host_mak
7907 if test "$ccache_cpp2" = "yes"; then
7908 echo "export CCACHE_CPP2=y" >> $config_host_mak
7911 # If we're using a separate build tree, set it up now.
7912 # DIRS are directories which we simply mkdir in the build tree;
7913 # LINKS are things to symlink back into the source tree
7914 # (these can be both files and directories).
7915 # Caution: do not add files or directories here using wildcards. This
7916 # will result in problems later if a new file matching the wildcard is
7917 # added to the source tree -- nothing will cause configure to be rerun
7918 # so the build tree will be missing the link back to the new file, and
7919 # tests might fail. Prefer to keep the relevant files in their own
7920 # directory and symlink the directory instead.
7921 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7922 DIRS="$DIRS tests/fp tests/qgraph"
7923 DIRS="$DIRS docs docs/interop fsdev scsi"
7924 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7925 DIRS="$DIRS roms/seabios roms/vgabios"
7926 LINKS="Makefile tests/tcg/Makefile"
7927 LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7928 LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7929 LINKS="$LINKS tests/fp/Makefile"
7930 LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7931 LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7932 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7933 LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7934 LINKS="$LINKS pc-bios/qemu-icon.bmp"
7935 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
7936 LINKS="$LINKS tests/acceptance tests/data"
7937 LINKS="$LINKS tests/qemu-iotests/check"
7938 LINKS="$LINKS python"
7939 for bios_file in \
7940 $source_path/pc-bios/*.bin \
7941 $source_path/pc-bios/*.lid \
7942 $source_path/pc-bios/*.rom \
7943 $source_path/pc-bios/*.dtb \
7944 $source_path/pc-bios/*.img \
7945 $source_path/pc-bios/openbios-* \
7946 $source_path/pc-bios/u-boot.* \
7947 $source_path/pc-bios/edk2-*.fd.bz2 \
7948 $source_path/pc-bios/palcode-*
7950 LINKS="$LINKS pc-bios/$(basename $bios_file)"
7951 done
7952 mkdir -p $DIRS
7953 for f in $LINKS ; do
7954 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7955 symlink "$source_path/$f" "$f"
7957 done
7959 # temporary config to build submodules
7960 for rom in seabios vgabios ; do
7961 config_mak=roms/$rom/config.mak
7962 echo "# Automatically generated by configure - do not modify" > $config_mak
7963 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7964 echo "AS=$as" >> $config_mak
7965 echo "CCAS=$ccas" >> $config_mak
7966 echo "CC=$cc" >> $config_mak
7967 echo "BCC=bcc" >> $config_mak
7968 echo "CPP=$cpp" >> $config_mak
7969 echo "OBJCOPY=objcopy" >> $config_mak
7970 echo "IASL=$iasl" >> $config_mak
7971 echo "LD=$ld" >> $config_mak
7972 echo "RANLIB=$ranlib" >> $config_mak
7973 done
7975 # set up qemu-iotests in this build directory
7976 iotests_common_env="tests/qemu-iotests/common.env"
7978 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7979 echo >> "$iotests_common_env"
7980 echo "export PYTHON='$python'" >> "$iotests_common_env"
7982 # Save the configure command line for later reuse.
7983 cat <<EOD >config.status
7984 #!/bin/sh
7985 # Generated by configure.
7986 # Run this file to recreate the current configuration.
7987 # Compiler output produced by configure, useful for debugging
7988 # configure, is in config.log if it exists.
7991 preserve_env() {
7992 envname=$1
7994 eval envval=\$$envname
7996 if test -n "$envval"
7997 then
7998 echo "$envname='$envval'" >> config.status
7999 echo "export $envname" >> config.status
8000 else
8001 echo "unset $envname" >> config.status
8005 # Preserve various env variables that influence what
8006 # features/build target configure will detect
8007 preserve_env AR
8008 preserve_env AS
8009 preserve_env CC
8010 preserve_env CPP
8011 preserve_env CXX
8012 preserve_env INSTALL
8013 preserve_env LD
8014 preserve_env LD_LIBRARY_PATH
8015 preserve_env LIBTOOL
8016 preserve_env MAKE
8017 preserve_env NM
8018 preserve_env OBJCOPY
8019 preserve_env PATH
8020 preserve_env PKG_CONFIG
8021 preserve_env PKG_CONFIG_LIBDIR
8022 preserve_env PKG_CONFIG_PATH
8023 preserve_env PYTHON
8024 preserve_env SDL_CONFIG
8025 preserve_env SDL2_CONFIG
8026 preserve_env SMBD
8027 preserve_env STRIP
8028 preserve_env WINDRES
8030 printf "exec" >>config.status
8031 printf " '%s'" "$0" "$@" >>config.status
8032 echo ' "$@"' >>config.status
8033 chmod +x config.status
8035 rm -r "$TMPDIR1"