fuse: (Partially) implement fallocate()
[qemu.git] / configure
blobb2f96c0da2ee9dd80ca184317d1d5dd975d6d05e
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 # make source path absolute
15 source_path=$(cd "$(dirname -- "$0")"; pwd)
17 if test "$PWD" = "$source_path"
18 then
19 echo "Using './build' as the directory for build output"
21 MARKER=build/auto-created-by-configure
23 if test -e build
24 then
25 if test -f $MARKER
26 then
27 rm -rf build
28 else
29 echo "ERROR: ./build dir already exists and was not previously created by configure"
30 exit 1
34 mkdir build
35 touch $MARKER
37 cat > GNUmakefile <<'EOF'
38 # This file is auto-generated by configure to support in-source tree
39 # 'make' command invocation
41 ifeq ($(MAKECMDGOALS),)
42 recurse: all
43 endif
45 .NOTPARALLEL: %
46 %: force
47 @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48 @$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49 @if test "$(MAKECMDGOALS)" = "distclean" && \
50 test -e build/auto-created-by-configure ; \
51 then \
52 rm -rf build GNUmakefile ; \
54 force: ;
55 .PHONY: force
56 GNUmakefile: ;
58 EOF
59 cd build
60 exec $source_path/configure "$@"
63 # Temporary directory used for files created while
64 # configure runs. Since it is in the build directory
65 # we can safely blow away any previous version of it
66 # (and we need not jump through hoops to try to delete
67 # it when configure exits.)
68 TMPDIR1="config-temp"
69 rm -rf "${TMPDIR1}"
70 mkdir -p "${TMPDIR1}"
71 if [ $? -ne 0 ]; then
72 echo "ERROR: failed to create temporary directory"
73 exit 1
76 TMPB="qemu-conf"
77 TMPC="${TMPDIR1}/${TMPB}.c"
78 TMPO="${TMPDIR1}/${TMPB}.o"
79 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
80 TMPE="${TMPDIR1}/${TMPB}.exe"
81 TMPTXT="${TMPDIR1}/${TMPB}.txt"
83 rm -f config.log
85 # Print a helpful header at the top of config.log
86 echo "# QEMU configure log $(date)" >> config.log
87 printf "# Configured with:" >> config.log
88 printf " '%s'" "$0" "$@" >> config.log
89 echo >> config.log
90 echo "#" >> config.log
92 print_error() {
93 (echo
94 echo "ERROR: $1"
95 while test -n "$2"; do
96 echo " $2"
97 shift
98 done
99 echo) >&2
102 error_exit() {
103 print_error "$@"
104 exit 1
107 do_compiler() {
108 # Run the compiler, capturing its output to the log. First argument
109 # is compiler binary to execute.
110 local compiler="$1"
111 shift
112 if test -n "$BASH_VERSION"; then eval '
113 echo >>config.log "
114 funcs: ${FUNCNAME[*]}
115 lines: ${BASH_LINENO[*]}"
116 '; fi
117 echo $compiler "$@" >> config.log
118 $compiler "$@" >> config.log 2>&1 || return $?
119 # Test passed. If this is an --enable-werror build, rerun
120 # the test with -Werror and bail out if it fails. This
121 # makes warning-generating-errors in configure test code
122 # obvious to developers.
123 if test "$werror" != "yes"; then
124 return 0
126 # Don't bother rerunning the compile if we were already using -Werror
127 case "$*" in
128 *-Werror*)
129 return 0
131 esac
132 echo $compiler -Werror "$@" >> config.log
133 $compiler -Werror "$@" >> config.log 2>&1 && return $?
134 error_exit "configure test passed without -Werror but failed with -Werror." \
135 "This is probably a bug in the configure script. The failing command" \
136 "will be at the bottom of config.log." \
137 "You can run configure with --disable-werror to bypass this check."
140 do_cc() {
141 do_compiler "$cc" "$@"
144 do_cxx() {
145 do_compiler "$cxx" "$@"
148 # Append $2 to the variable named $1, with space separation
149 add_to() {
150 eval $1=\${$1:+\"\$$1 \"}\$2
153 update_cxxflags() {
154 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
155 # options which some versions of GCC's C++ compiler complain about
156 # because they only make sense for C programs.
157 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
158 CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
159 for arg in $QEMU_CFLAGS; do
160 case $arg in
161 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
162 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
165 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
167 esac
168 done
171 compile_object() {
172 local_cflags="$1"
173 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
176 compile_prog() {
177 local_cflags="$1"
178 local_ldflags="$2"
179 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
180 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
183 # symbolically link $1 to $2. Portable version of "ln -sf".
184 symlink() {
185 rm -rf "$2"
186 mkdir -p "$(dirname "$2")"
187 ln -s "$1" "$2"
190 # check whether a command is available to this shell (may be either an
191 # executable or a builtin)
192 has() {
193 type "$1" >/dev/null 2>&1
196 version_ge () {
197 local_ver1=`echo $1 | tr . ' '`
198 local_ver2=`echo $2 | tr . ' '`
199 while true; do
200 set x $local_ver1
201 local_first=${2-0}
202 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
203 shift ${2:+2}
204 local_ver1=$*
205 set x $local_ver2
206 # the second argument finished, the first must be greater or equal
207 test $# = 1 && return 0
208 test $local_first -lt $2 && return 1
209 test $local_first -gt $2 && return 0
210 shift ${2:+2}
211 local_ver2=$*
212 done
215 have_backend () {
216 echo "$trace_backends" | grep "$1" >/dev/null
219 glob() {
220 eval test -z '"${1#'"$2"'}"'
223 ld_has() {
224 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
227 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
228 then
229 error_exit "main directory cannot contain spaces nor colons"
232 # default parameters
233 cpu=""
234 iasl="iasl"
235 interp_prefix="/usr/gnemul/qemu-%M"
236 static="no"
237 cross_prefix=""
238 audio_drv_list=""
239 block_drv_rw_whitelist=""
240 block_drv_ro_whitelist=""
241 host_cc="cc"
242 audio_win_int=""
243 libs_qga=""
244 debug_info="yes"
245 stack_protector=""
246 safe_stack=""
247 use_containers="yes"
248 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
250 if test -e "$source_path/.git"
251 then
252 git_update=yes
253 git_submodules="ui/keycodemapdb"
254 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
255 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
256 else
257 git_update=no
258 git_submodules=""
260 if ! test -f "$source_path/ui/keycodemapdb/README"
261 then
262 echo
263 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
264 echo
265 echo "This is not a GIT checkout but module content appears to"
266 echo "be missing. Do not use 'git archive' or GitHub download links"
267 echo "to acquire QEMU source archives. Non-GIT builds are only"
268 echo "supported with source archives linked from:"
269 echo
270 echo " https://www.qemu.org/download/#source"
271 echo
272 echo "Developers working with GIT can use scripts/archive-source.sh"
273 echo "if they need to create valid source archives."
274 echo
275 exit 1
278 git="git"
280 # Don't accept a target_list environment variable.
281 unset target_list
282 unset target_list_exclude
284 # Default value for a variable defining feature "foo".
285 # * foo="no" feature will only be used if --enable-foo arg is given
286 # * foo="" feature will be searched for, and if found, will be used
287 # unless --disable-foo is given
288 # * foo="yes" this value will only be set by --enable-foo flag.
289 # feature will searched for,
290 # if not found, configure exits with error
292 # Always add --enable-foo and --disable-foo command line args.
293 # Distributions want to ensure that several features are compiled in, and it
294 # is impossible without a --enable-foo that exits if a feature is not found.
296 brlapi=""
297 curl=""
298 iconv="auto"
299 curses="auto"
300 docs="auto"
301 fdt="auto"
302 netmap="no"
303 sdl="auto"
304 sdl_image="auto"
305 virtiofsd="auto"
306 virtfs=""
307 libudev="auto"
308 mpath="auto"
309 vnc="enabled"
310 sparse="auto"
311 vde=""
312 vnc_sasl="auto"
313 vnc_jpeg="auto"
314 vnc_png="auto"
315 xkbcommon="auto"
316 xen=""
317 xen_ctrl_version=""
318 xen_pci_passthrough="auto"
319 linux_aio=""
320 linux_io_uring=""
321 cap_ng=""
322 attr=""
323 libattr=""
324 xfs=""
325 tcg="enabled"
326 membarrier=""
327 vhost_net=""
328 vhost_crypto=""
329 vhost_scsi=""
330 vhost_vsock=""
331 vhost_user="no"
332 vhost_user_blk_server="auto"
333 vhost_user_fs=""
334 kvm="auto"
335 hax="auto"
336 hvf="auto"
337 whpx="auto"
338 rdma=""
339 pvrdma=""
340 gprof="no"
341 debug_tcg="no"
342 debug="no"
343 sanitizers="no"
344 tsan="no"
345 fortify_source=""
346 strip_opt="yes"
347 tcg_interpreter="no"
348 bigendian="no"
349 mingw32="no"
350 gcov="no"
351 EXESUF=""
352 HOST_DSOSUF=".so"
353 modules="no"
354 module_upgrades="no"
355 prefix="/usr/local"
356 qemu_suffix="qemu"
357 slirp="auto"
358 oss_lib=""
359 bsd="no"
360 linux="no"
361 solaris="no"
362 profiler="no"
363 cocoa="auto"
364 softmmu="yes"
365 linux_user="no"
366 bsd_user="no"
367 blobs="true"
368 pkgversion=""
369 pie=""
370 qom_cast_debug="yes"
371 trace_backends="log"
372 trace_file="trace"
373 spice=""
374 rbd=""
375 smartcard=""
376 u2f="auto"
377 libusb=""
378 usb_redir=""
379 opengl=""
380 opengl_dmabuf="no"
381 cpuid_h="no"
382 avx2_opt=""
383 capstone="auto"
384 lzo=""
385 snappy=""
386 bzip2=""
387 lzfse=""
388 zstd=""
389 guest_agent=""
390 guest_agent_with_vss="no"
391 guest_agent_ntddscsi="no"
392 guest_agent_msi=""
393 vss_win32_sdk=""
394 win_sdk="no"
395 want_tools=""
396 libiscsi=""
397 libnfs=""
398 coroutine=""
399 coroutine_pool=""
400 debug_stack_usage="no"
401 crypto_afalg="no"
402 seccomp=""
403 glusterfs=""
404 glusterfs_xlator_opt="no"
405 glusterfs_discard="no"
406 glusterfs_fallocate="no"
407 glusterfs_zerofill="no"
408 glusterfs_ftruncate_has_stat="no"
409 glusterfs_iocb_has_stat="no"
410 gtk=""
411 gtk_gl="no"
412 tls_priority="NORMAL"
413 gnutls=""
414 nettle=""
415 nettle_xts="no"
416 gcrypt=""
417 gcrypt_hmac="no"
418 gcrypt_xts="no"
419 qemu_private_xts="yes"
420 auth_pam=""
421 vte=""
422 virglrenderer=""
423 tpm=""
424 libssh=""
425 live_block_migration="yes"
426 numa=""
427 tcmalloc="no"
428 jemalloc="no"
429 replication="yes"
430 bochs="yes"
431 cloop="yes"
432 dmg="yes"
433 qcow1="yes"
434 vdi="yes"
435 vvfat="yes"
436 qed="yes"
437 parallels="yes"
438 sheepdog="no"
439 libxml2=""
440 debug_mutex="no"
441 libpmem=""
442 default_devices="yes"
443 plugins="no"
444 fuzzing="no"
445 rng_none="no"
446 secret_keyring=""
447 libdaxctl=""
448 meson=""
449 ninja=""
450 skip_meson=no
451 gettext=""
452 fuse="auto"
454 bogus_os="no"
455 malloc_trim="auto"
457 # parse CC options first
458 for opt do
459 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
460 case "$opt" in
461 --cross-prefix=*) cross_prefix="$optarg"
463 --cc=*) CC="$optarg"
465 --cxx=*) CXX="$optarg"
467 --cpu=*) cpu="$optarg"
469 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
470 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
472 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
474 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
475 EXTRA_LDFLAGS="$optarg"
477 --enable-debug-info) debug_info="yes"
479 --disable-debug-info) debug_info="no"
481 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
483 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
484 eval "cross_cc_cflags_${cc_arch}=\$optarg"
485 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
487 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
488 cc_archs="$cc_archs $cc_arch"
489 eval "cross_cc_${cc_arch}=\$optarg"
490 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
492 esac
493 done
494 # OS specific
495 # Using uname is really, really broken. Once we have the right set of checks
496 # we can eliminate its usage altogether.
498 # Preferred compiler:
499 # ${CC} (if set)
500 # ${cross_prefix}gcc (if cross-prefix specified)
501 # system compiler
502 if test -z "${CC}${cross_prefix}"; then
503 cc="$host_cc"
504 else
505 cc="${CC-${cross_prefix}gcc}"
508 if test -z "${CXX}${cross_prefix}"; then
509 cxx="c++"
510 else
511 cxx="${CXX-${cross_prefix}g++}"
514 ar="${AR-${cross_prefix}ar}"
515 as="${AS-${cross_prefix}as}"
516 ccas="${CCAS-$cc}"
517 cpp="${CPP-$cc -E}"
518 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
519 ld="${LD-${cross_prefix}ld}"
520 ranlib="${RANLIB-${cross_prefix}ranlib}"
521 nm="${NM-${cross_prefix}nm}"
522 strip="${STRIP-${cross_prefix}strip}"
523 windres="${WINDRES-${cross_prefix}windres}"
524 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
525 query_pkg_config() {
526 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
528 pkg_config=query_pkg_config
529 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
531 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
532 ARFLAGS="${ARFLAGS-rv}"
534 # default flags for all hosts
535 # We use -fwrapv to tell the compiler that we require a C dialect where
536 # left shift of signed integers is well defined and has the expected
537 # 2s-complement style results. (Both clang and gcc agree that it
538 # provides these semantics.)
539 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
540 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
541 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
542 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
544 # Flags that are needed during configure but later taken care of by Meson
545 CONFIGURE_CFLAGS="-std=gnu99 -Wall"
546 CONFIGURE_LDFLAGS=
549 check_define() {
550 cat > $TMPC <<EOF
551 #if !defined($1)
552 #error $1 not defined
553 #endif
554 int main(void) { return 0; }
556 compile_object
559 check_include() {
560 cat > $TMPC <<EOF
561 #include <$1>
562 int main(void) { return 0; }
564 compile_object
567 write_c_skeleton() {
568 cat > $TMPC <<EOF
569 int main(void) { return 0; }
573 write_c_fuzzer_skeleton() {
574 cat > $TMPC <<EOF
575 #include <stdint.h>
576 #include <sys/types.h>
577 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
578 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
582 if check_define __linux__ ; then
583 targetos="Linux"
584 elif check_define _WIN32 ; then
585 targetos='MINGW32'
586 elif check_define __OpenBSD__ ; then
587 targetos='OpenBSD'
588 elif check_define __sun__ ; then
589 targetos='SunOS'
590 elif check_define __HAIKU__ ; then
591 targetos='Haiku'
592 elif check_define __FreeBSD__ ; then
593 targetos='FreeBSD'
594 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
595 targetos='GNU/kFreeBSD'
596 elif check_define __DragonFly__ ; then
597 targetos='DragonFly'
598 elif check_define __NetBSD__; then
599 targetos='NetBSD'
600 elif check_define __APPLE__; then
601 targetos='Darwin'
602 else
603 # This is a fatal error, but don't report it yet, because we
604 # might be going to just print the --help text, or it might
605 # be the result of a missing compiler.
606 targetos='bogus'
607 bogus_os='yes'
610 # Some host OSes need non-standard checks for which CPU to use.
611 # Note that these checks are broken for cross-compilation: if you're
612 # cross-compiling to one of these OSes then you'll need to specify
613 # the correct CPU with the --cpu option.
614 case $targetos in
615 Darwin)
616 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
617 # run 64-bit userspace code.
618 # If the user didn't specify a CPU explicitly and the kernel says this is
619 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
620 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
621 cpu="x86_64"
623 HOST_DSOSUF=".dylib"
625 SunOS)
626 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
627 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
628 cpu="x86_64"
630 esac
632 if test ! -z "$cpu" ; then
633 # command line argument
635 elif check_define __i386__ ; then
636 cpu="i386"
637 elif check_define __x86_64__ ; then
638 if check_define __ILP32__ ; then
639 cpu="x32"
640 else
641 cpu="x86_64"
643 elif check_define __sparc__ ; then
644 if check_define __arch64__ ; then
645 cpu="sparc64"
646 else
647 cpu="sparc"
649 elif check_define _ARCH_PPC ; then
650 if check_define _ARCH_PPC64 ; then
651 if check_define _LITTLE_ENDIAN ; then
652 cpu="ppc64le"
653 else
654 cpu="ppc64"
656 else
657 cpu="ppc"
659 elif check_define __mips__ ; then
660 cpu="mips"
661 elif check_define __s390__ ; then
662 if check_define __s390x__ ; then
663 cpu="s390x"
664 else
665 cpu="s390"
667 elif check_define __riscv ; then
668 if check_define _LP64 ; then
669 cpu="riscv64"
670 else
671 cpu="riscv32"
673 elif check_define __arm__ ; then
674 cpu="arm"
675 elif check_define __aarch64__ ; then
676 cpu="aarch64"
677 else
678 cpu=$(uname -m)
681 ARCH=
682 # Normalise host CPU name and set ARCH.
683 # Note that this case should only have supported host CPUs, not guests.
684 case "$cpu" in
685 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
687 ppc64le)
688 ARCH="ppc64"
690 i386|i486|i586|i686|i86pc|BePC)
691 cpu="i386"
693 x86_64|amd64)
694 cpu="x86_64"
696 armv*b|armv*l|arm)
697 cpu="arm"
699 aarch64)
700 cpu="aarch64"
702 mips*)
703 cpu="mips"
705 sparc|sun4[cdmuv])
706 cpu="sparc"
709 # This will result in either an error or falling back to TCI later
710 ARCH=unknown
712 esac
713 if test -z "$ARCH"; then
714 ARCH="$cpu"
717 # OS specific
719 case $targetos in
720 MINGW32*)
721 mingw32="yes"
722 audio_possible_drivers="dsound sdl"
723 if check_include dsound.h; then
724 audio_drv_list="dsound"
725 else
726 audio_drv_list=""
728 supported_os="yes"
729 pie="no"
731 GNU/kFreeBSD)
732 bsd="yes"
733 audio_drv_list="oss try-sdl"
734 audio_possible_drivers="oss sdl pa"
736 FreeBSD)
737 bsd="yes"
738 make="${MAKE-gmake}"
739 audio_drv_list="oss try-sdl"
740 audio_possible_drivers="oss sdl pa"
741 # needed for kinfo_getvmmap(3) in libutil.h
742 netmap="" # enable netmap autodetect
744 DragonFly)
745 bsd="yes"
746 make="${MAKE-gmake}"
747 audio_drv_list="oss try-sdl"
748 audio_possible_drivers="oss sdl pa"
750 NetBSD)
751 bsd="yes"
752 make="${MAKE-gmake}"
753 audio_drv_list="oss try-sdl"
754 audio_possible_drivers="oss sdl"
755 oss_lib="-lossaudio"
757 OpenBSD)
758 bsd="yes"
759 make="${MAKE-gmake}"
760 audio_drv_list="try-sdl"
761 audio_possible_drivers="sdl"
763 Darwin)
764 bsd="yes"
765 darwin="yes"
766 if [ "$cpu" = "x86_64" ] ; then
767 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
768 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
770 cocoa="enabled"
771 audio_drv_list="coreaudio try-sdl"
772 audio_possible_drivers="coreaudio sdl"
773 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
774 # Disable attempts to use ObjectiveC features in os/object.h since they
775 # won't work when we're compiling with gcc as a C compiler.
776 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
778 SunOS)
779 solaris="yes"
780 make="${MAKE-gmake}"
781 smbd="${SMBD-/usr/sfw/sbin/smbd}"
782 if test -f /usr/include/sys/soundcard.h ; then
783 audio_drv_list="oss try-sdl"
785 audio_possible_drivers="oss sdl"
786 # needed for CMSG_ macros in sys/socket.h
787 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
788 # needed for TIOCWIN* defines in termios.h
789 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
791 Haiku)
792 haiku="yes"
793 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS"
795 Linux)
796 audio_drv_list="try-pa oss"
797 audio_possible_drivers="oss alsa sdl pa"
798 linux="yes"
799 linux_user="yes"
800 vhost_user="yes"
802 esac
804 if [ "$bsd" = "yes" ] ; then
805 if [ "$darwin" != "yes" ] ; then
806 bsd_user="yes"
810 : ${make=${MAKE-make}}
812 # We prefer python 3.x. A bare 'python' is traditionally
813 # python 2.x, but some distros have it as python 3.x, so
814 # we check that too
815 python=
816 explicit_python=no
817 for binary in "${PYTHON-python3}" python
819 if has "$binary"
820 then
821 python=$(command -v "$binary")
822 break
824 done
827 # Check for ancillary tools used in testing
828 genisoimage=
829 for binary in genisoimage mkisofs
831 if has $binary
832 then
833 genisoimage=$(command -v "$binary")
834 break
836 done
838 : ${smbd=${SMBD-/usr/sbin/smbd}}
840 # Default objcc to clang if available, otherwise use CC
841 if has clang; then
842 objcc=clang
843 else
844 objcc="$cc"
847 if test "$mingw32" = "yes" ; then
848 EXESUF=".exe"
849 HOST_DSOSUF=".dll"
850 # MinGW needs -mthreads for TLS and macro _MT.
851 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
852 write_c_skeleton;
853 prefix="/qemu"
854 qemu_suffix=""
855 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
858 werror=""
860 for opt do
861 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
862 case "$opt" in
863 --help|-h) show_help=yes
865 --version|-V) exec cat $source_path/VERSION
867 --prefix=*) prefix="$optarg"
869 --interp-prefix=*) interp_prefix="$optarg"
871 --cross-prefix=*)
873 --cc=*)
875 --host-cc=*) host_cc="$optarg"
877 --cxx=*)
879 --iasl=*) iasl="$optarg"
881 --objcc=*) objcc="$optarg"
883 --make=*) make="$optarg"
885 --install=*)
887 --python=*) python="$optarg" ; explicit_python=yes
889 --sphinx-build=*) sphinx_build="$optarg"
891 --skip-meson) skip_meson=yes
893 --meson=*) meson="$optarg"
895 --ninja=*) ninja="$optarg"
897 --smbd=*) smbd="$optarg"
899 --extra-cflags=*)
901 --extra-cxxflags=*)
903 --extra-ldflags=*)
905 --enable-debug-info)
907 --disable-debug-info)
909 --cross-cc-*)
911 --enable-modules)
912 modules="yes"
914 --disable-modules)
915 modules="no"
917 --disable-module-upgrades) module_upgrades="no"
919 --enable-module-upgrades) module_upgrades="yes"
921 --cpu=*)
923 --target-list=*) target_list="$optarg"
924 if test "$target_list_exclude"; then
925 error_exit "Can't mix --target-list with --target-list-exclude"
928 --target-list-exclude=*) target_list_exclude="$optarg"
929 if test "$target_list"; then
930 error_exit "Can't mix --target-list-exclude with --target-list"
933 --enable-trace-backends=*) trace_backends="$optarg"
935 # XXX: backwards compatibility
936 --enable-trace-backend=*) trace_backends="$optarg"
938 --with-trace-file=*) trace_file="$optarg"
940 --with-default-devices) default_devices="yes"
942 --without-default-devices) default_devices="no"
944 --enable-gprof) gprof="yes"
946 --enable-gcov) gcov="yes"
948 --static)
949 static="yes"
950 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
952 --mandir=*) mandir="$optarg"
954 --bindir=*) bindir="$optarg"
956 --libdir=*) libdir="$optarg"
958 --libexecdir=*) libexecdir="$optarg"
960 --includedir=*) includedir="$optarg"
962 --datadir=*) datadir="$optarg"
964 --with-suffix=*) qemu_suffix="$optarg"
966 --docdir=*) docdir="$optarg"
968 --localedir=*) localedir="$optarg"
970 --sysconfdir=*) sysconfdir="$optarg"
972 --localstatedir=*) local_statedir="$optarg"
974 --firmwarepath=*) firmwarepath="$optarg"
976 --host=*|--build=*|\
977 --disable-dependency-tracking|\
978 --sbindir=*|--sharedstatedir=*|\
979 --oldincludedir=*|--datarootdir=*|--infodir=*|\
980 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
981 # These switches are silently ignored, for compatibility with
982 # autoconf-generated configure scripts. This allows QEMU's
983 # configure to be used by RPM and similar macros that set
984 # lots of directory switches by default.
986 --disable-sdl) sdl="disabled"
988 --enable-sdl) sdl="enabled"
990 --disable-sdl-image) sdl_image="disabled"
992 --enable-sdl-image) sdl_image="enabled"
994 --disable-qom-cast-debug) qom_cast_debug="no"
996 --enable-qom-cast-debug) qom_cast_debug="yes"
998 --disable-virtfs) virtfs="no"
1000 --enable-virtfs) virtfs="yes"
1002 --disable-libudev) libudev="disabled"
1004 --enable-libudev) libudev="enabled"
1006 --disable-virtiofsd) virtiofsd="disabled"
1008 --enable-virtiofsd) virtiofsd="enabled"
1010 --disable-mpath) mpath="disabled"
1012 --enable-mpath) mpath="enabled"
1014 --disable-vnc) vnc="disabled"
1016 --enable-vnc) vnc="enabled"
1018 --disable-gettext) gettext="false"
1020 --enable-gettext) gettext="true"
1022 --oss-lib=*) oss_lib="$optarg"
1024 --audio-drv-list=*) audio_drv_list="$optarg"
1026 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1028 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1030 --enable-debug-tcg) debug_tcg="yes"
1032 --disable-debug-tcg) debug_tcg="no"
1034 --enable-debug)
1035 # Enable debugging options that aren't excessively noisy
1036 debug_tcg="yes"
1037 debug_mutex="yes"
1038 debug="yes"
1039 strip_opt="no"
1040 fortify_source="no"
1042 --enable-sanitizers) sanitizers="yes"
1044 --disable-sanitizers) sanitizers="no"
1046 --enable-tsan) tsan="yes"
1048 --disable-tsan) tsan="no"
1050 --enable-sparse) sparse="enabled"
1052 --disable-sparse) sparse="disabled"
1054 --disable-strip) strip_opt="no"
1056 --disable-vnc-sasl) vnc_sasl="disabled"
1058 --enable-vnc-sasl) vnc_sasl="enabled"
1060 --disable-vnc-jpeg) vnc_jpeg="disabled"
1062 --enable-vnc-jpeg) vnc_jpeg="enabled"
1064 --disable-vnc-png) vnc_png="disabled"
1066 --enable-vnc-png) vnc_png="enabled"
1068 --disable-slirp) slirp="disabled"
1070 --enable-slirp=git) slirp="internal"
1072 --enable-slirp=system) slirp="system"
1074 --disable-vde) vde="no"
1076 --enable-vde) vde="yes"
1078 --disable-netmap) netmap="no"
1080 --enable-netmap) netmap="yes"
1082 --disable-xen) xen="disabled"
1084 --enable-xen) xen="enabled"
1086 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
1088 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
1090 --disable-brlapi) brlapi="no"
1092 --enable-brlapi) brlapi="yes"
1094 --disable-kvm) kvm="disabled"
1096 --enable-kvm) kvm="enabled"
1098 --disable-hax) hax="disabled"
1100 --enable-hax) hax="enabled"
1102 --disable-hvf) hvf="disabled"
1104 --enable-hvf) hvf="enabled"
1106 --disable-whpx) whpx="disabled"
1108 --enable-whpx) whpx="enabled"
1110 --disable-tcg-interpreter) tcg_interpreter="no"
1112 --enable-tcg-interpreter) tcg_interpreter="yes"
1114 --disable-cap-ng) cap_ng="no"
1116 --enable-cap-ng) cap_ng="yes"
1118 --disable-tcg) tcg="disabled"
1120 --enable-tcg) tcg="enabled"
1122 --disable-malloc-trim) malloc_trim="disabled"
1124 --enable-malloc-trim) malloc_trim="enabled"
1126 --disable-spice) spice="no"
1128 --enable-spice) spice="yes"
1130 --disable-libiscsi) libiscsi="no"
1132 --enable-libiscsi) libiscsi="yes"
1134 --disable-libnfs) libnfs="no"
1136 --enable-libnfs) libnfs="yes"
1138 --enable-profiler) profiler="yes"
1140 --disable-cocoa) cocoa="disabled"
1142 --enable-cocoa)
1143 cocoa="enabled" ;
1144 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1146 --disable-system) softmmu="no"
1148 --enable-system) softmmu="yes"
1150 --disable-user)
1151 linux_user="no" ;
1152 bsd_user="no" ;
1154 --enable-user) ;;
1155 --disable-linux-user) linux_user="no"
1157 --enable-linux-user) linux_user="yes"
1159 --disable-bsd-user) bsd_user="no"
1161 --enable-bsd-user) bsd_user="yes"
1163 --enable-pie) pie="yes"
1165 --disable-pie) pie="no"
1167 --enable-werror) werror="yes"
1169 --disable-werror) werror="no"
1171 --enable-stack-protector) stack_protector="yes"
1173 --disable-stack-protector) stack_protector="no"
1175 --enable-safe-stack) safe_stack="yes"
1177 --disable-safe-stack) safe_stack="no"
1179 --disable-curses) curses="disabled"
1181 --enable-curses) curses="enabled"
1183 --disable-iconv) iconv="disabled"
1185 --enable-iconv) iconv="enabled"
1187 --disable-curl) curl="no"
1189 --enable-curl) curl="yes"
1191 --disable-fdt) fdt="disabled"
1193 --enable-fdt) fdt="enabled"
1195 --enable-fdt=git) fdt="internal"
1197 --enable-fdt=system) fdt="system"
1199 --disable-linux-aio) linux_aio="no"
1201 --enable-linux-aio) linux_aio="yes"
1203 --disable-linux-io-uring) linux_io_uring="no"
1205 --enable-linux-io-uring) linux_io_uring="yes"
1207 --disable-attr) attr="no"
1209 --enable-attr) attr="yes"
1211 --disable-membarrier) membarrier="no"
1213 --enable-membarrier) membarrier="yes"
1215 --disable-blobs) blobs="false"
1217 --with-pkgversion=*) pkgversion="$optarg"
1219 --with-coroutine=*) coroutine="$optarg"
1221 --disable-coroutine-pool) coroutine_pool="no"
1223 --enable-coroutine-pool) coroutine_pool="yes"
1225 --enable-debug-stack-usage) debug_stack_usage="yes"
1227 --enable-crypto-afalg) crypto_afalg="yes"
1229 --disable-crypto-afalg) crypto_afalg="no"
1231 --disable-docs) docs="disabled"
1233 --enable-docs) docs="enabled"
1235 --disable-vhost-net) vhost_net="no"
1237 --enable-vhost-net) vhost_net="yes"
1239 --disable-vhost-crypto) vhost_crypto="no"
1241 --enable-vhost-crypto) vhost_crypto="yes"
1243 --disable-vhost-scsi) vhost_scsi="no"
1245 --enable-vhost-scsi) vhost_scsi="yes"
1247 --disable-vhost-vsock) vhost_vsock="no"
1249 --enable-vhost-vsock) vhost_vsock="yes"
1251 --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
1253 --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
1255 --disable-vhost-user-fs) vhost_user_fs="no"
1257 --enable-vhost-user-fs) vhost_user_fs="yes"
1259 --disable-opengl) opengl="no"
1261 --enable-opengl) opengl="yes"
1263 --disable-rbd) rbd="no"
1265 --enable-rbd) rbd="yes"
1267 --disable-xfsctl) xfs="no"
1269 --enable-xfsctl) xfs="yes"
1271 --disable-smartcard) smartcard="no"
1273 --enable-smartcard) smartcard="yes"
1275 --disable-u2f) u2f="disabled"
1277 --enable-u2f) u2f="enabled"
1279 --disable-libusb) libusb="no"
1281 --enable-libusb) libusb="yes"
1283 --disable-usb-redir) usb_redir="no"
1285 --enable-usb-redir) usb_redir="yes"
1287 --disable-zlib-test)
1289 --disable-lzo) lzo="no"
1291 --enable-lzo) lzo="yes"
1293 --disable-snappy) snappy="no"
1295 --enable-snappy) snappy="yes"
1297 --disable-bzip2) bzip2="no"
1299 --enable-bzip2) bzip2="yes"
1301 --enable-lzfse) lzfse="yes"
1303 --disable-lzfse) lzfse="no"
1305 --disable-zstd) zstd="no"
1307 --enable-zstd) zstd="yes"
1309 --enable-guest-agent) guest_agent="yes"
1311 --disable-guest-agent) guest_agent="no"
1313 --enable-guest-agent-msi) guest_agent_msi="yes"
1315 --disable-guest-agent-msi) guest_agent_msi="no"
1317 --with-vss-sdk) vss_win32_sdk=""
1319 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1321 --without-vss-sdk) vss_win32_sdk="no"
1323 --with-win-sdk) win_sdk=""
1325 --with-win-sdk=*) win_sdk="$optarg"
1327 --without-win-sdk) win_sdk="no"
1329 --enable-tools) want_tools="yes"
1331 --disable-tools) want_tools="no"
1333 --enable-seccomp) seccomp="yes"
1335 --disable-seccomp) seccomp="no"
1337 --disable-glusterfs) glusterfs="no"
1339 --disable-avx2) avx2_opt="no"
1341 --enable-avx2) avx2_opt="yes"
1343 --disable-avx512f) avx512f_opt="no"
1345 --enable-avx512f) avx512f_opt="yes"
1348 --enable-glusterfs) glusterfs="yes"
1350 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1351 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1353 --enable-vhdx|--disable-vhdx)
1354 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1356 --enable-uuid|--disable-uuid)
1357 echo "$0: $opt is obsolete, UUID support is always built" >&2
1359 --disable-gtk) gtk="no"
1361 --enable-gtk) gtk="yes"
1363 --tls-priority=*) tls_priority="$optarg"
1365 --disable-gnutls) gnutls="no"
1367 --enable-gnutls) gnutls="yes"
1369 --disable-nettle) nettle="no"
1371 --enable-nettle) nettle="yes"
1373 --disable-gcrypt) gcrypt="no"
1375 --enable-gcrypt) gcrypt="yes"
1377 --disable-auth-pam) auth_pam="no"
1379 --enable-auth-pam) auth_pam="yes"
1381 --enable-rdma) rdma="yes"
1383 --disable-rdma) rdma="no"
1385 --enable-pvrdma) pvrdma="yes"
1387 --disable-pvrdma) pvrdma="no"
1389 --disable-vte) vte="no"
1391 --enable-vte) vte="yes"
1393 --disable-virglrenderer) virglrenderer="no"
1395 --enable-virglrenderer) virglrenderer="yes"
1397 --disable-tpm) tpm="no"
1399 --enable-tpm) tpm="yes"
1401 --disable-libssh) libssh="no"
1403 --enable-libssh) libssh="yes"
1405 --disable-live-block-migration) live_block_migration="no"
1407 --enable-live-block-migration) live_block_migration="yes"
1409 --disable-numa) numa="no"
1411 --enable-numa) numa="yes"
1413 --disable-libxml2) libxml2="no"
1415 --enable-libxml2) libxml2="yes"
1417 --disable-tcmalloc) tcmalloc="no"
1419 --enable-tcmalloc) tcmalloc="yes"
1421 --disable-jemalloc) jemalloc="no"
1423 --enable-jemalloc) jemalloc="yes"
1425 --disable-replication) replication="no"
1427 --enable-replication) replication="yes"
1429 --disable-bochs) bochs="no"
1431 --enable-bochs) bochs="yes"
1433 --disable-cloop) cloop="no"
1435 --enable-cloop) cloop="yes"
1437 --disable-dmg) dmg="no"
1439 --enable-dmg) dmg="yes"
1441 --disable-qcow1) qcow1="no"
1443 --enable-qcow1) qcow1="yes"
1445 --disable-vdi) vdi="no"
1447 --enable-vdi) vdi="yes"
1449 --disable-vvfat) vvfat="no"
1451 --enable-vvfat) vvfat="yes"
1453 --disable-qed) qed="no"
1455 --enable-qed) qed="yes"
1457 --disable-parallels) parallels="no"
1459 --enable-parallels) parallels="yes"
1461 --disable-sheepdog) sheepdog="no"
1463 --enable-sheepdog) sheepdog="yes"
1465 --disable-vhost-user) vhost_user="no"
1467 --enable-vhost-user) vhost_user="yes"
1469 --disable-vhost-vdpa) vhost_vdpa="no"
1471 --enable-vhost-vdpa) vhost_vdpa="yes"
1473 --disable-vhost-kernel) vhost_kernel="no"
1475 --enable-vhost-kernel) vhost_kernel="yes"
1477 --disable-capstone) capstone="disabled"
1479 --enable-capstone) capstone="enabled"
1481 --enable-capstone=git) capstone="internal"
1483 --enable-capstone=system) capstone="system"
1485 --with-git=*) git="$optarg"
1487 --enable-git-update) git_update=yes
1489 --disable-git-update) git_update=no
1491 --enable-debug-mutex) debug_mutex=yes
1493 --disable-debug-mutex) debug_mutex=no
1495 --enable-libpmem) libpmem=yes
1497 --disable-libpmem) libpmem=no
1499 --enable-xkbcommon) xkbcommon="enabled"
1501 --disable-xkbcommon) xkbcommon="disabled"
1503 --enable-plugins) plugins="yes"
1505 --disable-plugins) plugins="no"
1507 --enable-containers) use_containers="yes"
1509 --disable-containers) use_containers="no"
1511 --enable-fuzzing) fuzzing=yes
1513 --disable-fuzzing) fuzzing=no
1515 --gdb=*) gdb_bin="$optarg"
1517 --enable-rng-none) rng_none=yes
1519 --disable-rng-none) rng_none=no
1521 --enable-keyring) secret_keyring="yes"
1523 --disable-keyring) secret_keyring="no"
1525 --enable-libdaxctl) libdaxctl=yes
1527 --disable-libdaxctl) libdaxctl=no
1529 --enable-fuse) fuse="enabled"
1531 --disable-fuse) fuse="disabled"
1534 echo "ERROR: unknown option $opt"
1535 echo "Try '$0 --help' for more information"
1536 exit 1
1538 esac
1539 done
1541 libdir="${libdir:-$prefix/lib}"
1542 libexecdir="${libexecdir:-$prefix/libexec}"
1543 includedir="${includedir:-$prefix/include}"
1545 if test "$mingw32" = "yes" ; then
1546 mandir="$prefix"
1547 datadir="$prefix"
1548 docdir="$prefix"
1549 bindir="$prefix"
1550 sysconfdir="$prefix"
1551 local_statedir="$prefix"
1552 else
1553 mandir="${mandir:-$prefix/share/man}"
1554 datadir="${datadir:-$prefix/share}"
1555 docdir="${docdir:-$prefix/share/doc}"
1556 bindir="${bindir:-$prefix/bin}"
1557 sysconfdir="${sysconfdir:-$prefix/etc}"
1558 local_statedir="${local_statedir:-$prefix/var}"
1560 firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
1561 localedir="${localedir:-$datadir/locale}"
1563 case "$cpu" in
1564 ppc)
1565 CPU_CFLAGS="-m32"
1566 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1568 ppc64)
1569 CPU_CFLAGS="-m64"
1570 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1572 sparc)
1573 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1574 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1576 sparc64)
1577 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1578 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1580 s390)
1581 CPU_CFLAGS="-m31"
1582 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1584 s390x)
1585 CPU_CFLAGS="-m64"
1586 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1588 i386)
1589 CPU_CFLAGS="-m32"
1590 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1592 x86_64)
1593 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1594 # If we truly care, we should simply detect this case at
1595 # runtime and generate the fallback to serial emulation.
1596 CPU_CFLAGS="-m64 -mcx16"
1597 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1599 x32)
1600 CPU_CFLAGS="-mx32"
1601 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1603 # No special flags required for other host CPUs
1604 esac
1606 eval "cross_cc_${cpu}=\$host_cc"
1607 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1608 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1610 # For user-mode emulation the host arch has to be one we explicitly
1611 # support, even if we're using TCI.
1612 if [ "$ARCH" = "unknown" ]; then
1613 bsd_user="no"
1614 linux_user="no"
1617 default_target_list=""
1618 deprecated_targets_list=ppc64abi32-linux-user,tilegx-linux-user,lm32-softmmu,unicore32-softmmu
1619 deprecated_features=""
1620 mak_wilds=""
1622 if [ "$softmmu" = "yes" ]; then
1623 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak"
1625 if [ "$linux_user" = "yes" ]; then
1626 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak"
1628 if [ "$bsd_user" = "yes" ]; then
1629 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak"
1632 # If the user doesn't explicitly specify a deprecated target we will
1633 # skip it.
1634 if test -z "$target_list"; then
1635 if test -z "$target_list_exclude"; then
1636 target_list_exclude="$deprecated_targets_list"
1637 else
1638 target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1642 for config in $mak_wilds; do
1643 target="$(basename "$config" .mak)"
1644 if echo "$target_list_exclude" | grep -vq "$target"; then
1645 default_target_list="${default_target_list} $target"
1647 done
1649 # Enumerate public trace backends for --help output
1650 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1652 if test x"$show_help" = x"yes" ; then
1653 cat << EOF
1655 Usage: configure [options]
1656 Options: [defaults in brackets after descriptions]
1658 Standard options:
1659 --help print this message
1660 --prefix=PREFIX install in PREFIX [$prefix]
1661 --interp-prefix=PREFIX where to find shared libraries, etc.
1662 use %M for cpu name [$interp_prefix]
1663 --target-list=LIST set target list (default: build all non-deprecated)
1664 $(echo Available targets: $default_target_list | \
1665 fold -s -w 53 | sed -e 's/^/ /')
1666 $(echo Deprecated targets: $deprecated_targets_list | \
1667 fold -s -w 53 | sed -e 's/^/ /')
1668 --target-list-exclude=LIST exclude a set of targets from the default target-list
1670 Advanced options (experts only):
1671 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1672 --cc=CC use C compiler CC [$cc]
1673 --iasl=IASL use ACPI compiler IASL [$iasl]
1674 --host-cc=CC use C compiler CC [$host_cc] for code run at
1675 build time
1676 --cxx=CXX use C++ compiler CXX [$cxx]
1677 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1678 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1679 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1680 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1681 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1682 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1683 --make=MAKE use specified make [$make]
1684 --python=PYTHON use specified python [$python]
1685 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1686 --meson=MESON use specified meson [$meson]
1687 --ninja=NINJA use specified ninja [$ninja]
1688 --smbd=SMBD use specified smbd [$smbd]
1689 --with-git=GIT use specified git [$git]
1690 --static enable static build [$static]
1691 --mandir=PATH install man pages in PATH
1692 --datadir=PATH install firmware in PATH/$qemu_suffix
1693 --localedir=PATH install translation in PATH/$qemu_suffix
1694 --docdir=PATH install documentation in PATH/$qemu_suffix
1695 --bindir=PATH install binaries in PATH
1696 --libdir=PATH install libraries in PATH
1697 --libexecdir=PATH install helper binaries in PATH
1698 --sysconfdir=PATH install config in PATH/$qemu_suffix
1699 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1700 --firmwarepath=PATH search PATH for firmware files
1701 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1702 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1703 --with-pkgversion=VERS use specified string as sub-version of the package
1704 --enable-debug enable common debug build options
1705 --enable-sanitizers enable default sanitizers
1706 --enable-tsan enable thread sanitizer
1707 --disable-strip disable stripping binaries
1708 --disable-werror disable compilation abort on warning
1709 --disable-stack-protector disable compiler-provided stack protection
1710 --audio-drv-list=LIST set audio drivers list:
1711 Available drivers: $audio_possible_drivers
1712 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1713 --block-drv-rw-whitelist=L
1714 set block driver read-write whitelist
1715 (affects only QEMU, not qemu-img)
1716 --block-drv-ro-whitelist=L
1717 set block driver read-only whitelist
1718 (affects only QEMU, not qemu-img)
1719 --enable-trace-backends=B Set trace backend
1720 Available backends: $trace_backend_list
1721 --with-trace-file=NAME Full PATH,NAME of file to store traces
1722 Default:trace-<pid>
1723 --disable-slirp disable SLIRP userspace network connectivity
1724 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1725 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1726 --oss-lib path to OSS library
1727 --cpu=CPU Build for host CPU [$cpu]
1728 --with-coroutine=BACKEND coroutine backend. Supported options:
1729 ucontext, sigaltstack, windows
1730 --enable-gcov enable test coverage analysis with gcov
1731 --disable-blobs disable installing provided firmware blobs
1732 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1733 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1734 --tls-priority default TLS protocol/cipher priority string
1735 --enable-gprof QEMU profiling with gprof
1736 --enable-profiler profiler support
1737 --enable-debug-stack-usage
1738 track the maximum stack usage of stacks created by qemu_alloc_stack
1739 --enable-plugins
1740 enable plugins via shared library loading
1741 --disable-containers don't use containers for cross-building
1742 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
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 (non-Windows)
1756 module-upgrades try to load modules from alternate paths for upgrades
1757 debug-tcg TCG debugging (default is disabled)
1758 debug-info debugging information
1759 sparse sparse checker
1760 safe-stack SafeStack Stack Smash Protection. Depends on
1761 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1763 gnutls GNUTLS cryptography support
1764 nettle nettle cryptography support
1765 gcrypt libgcrypt cryptography support
1766 auth-pam PAM access control
1767 sdl SDL UI
1768 sdl-image SDL Image support for icons
1769 gtk gtk UI
1770 vte vte support for the gtk UI
1771 curses curses UI
1772 iconv font glyph conversion support
1773 vnc VNC UI support
1774 vnc-sasl SASL encryption for VNC server
1775 vnc-jpeg JPEG lossy compression for VNC server
1776 vnc-png PNG compression for VNC server
1777 cocoa Cocoa UI (Mac OS X only)
1778 virtfs VirtFS
1779 virtiofsd build virtiofs daemon (virtiofsd)
1780 libudev Use libudev to enumerate host devices
1781 mpath Multipath persistent reservation passthrough
1782 xen xen backend driver support
1783 xen-pci-passthrough PCI passthrough support for Xen
1784 brlapi BrlAPI (Braile)
1785 curl curl connectivity
1786 membarrier membarrier system call (for Linux 4.14+ or Windows)
1787 fdt fdt device tree
1788 kvm KVM acceleration support
1789 hax HAX acceleration support
1790 hvf Hypervisor.framework acceleration support
1791 whpx Windows Hypervisor Platform acceleration support
1792 rdma Enable RDMA-based migration
1793 pvrdma Enable PVRDMA support
1794 vde support for vde network
1795 netmap support for netmap network
1796 linux-aio Linux AIO support
1797 linux-io-uring Linux io_uring support
1798 cap-ng libcap-ng support
1799 attr attr and xattr support
1800 vhost-net vhost-net kernel acceleration support
1801 vhost-vsock virtio sockets device support
1802 vhost-scsi vhost-scsi kernel target support
1803 vhost-crypto vhost-user-crypto backend support
1804 vhost-kernel vhost kernel backend support
1805 vhost-user vhost-user backend support
1806 vhost-user-blk-server vhost-user-blk server support
1807 vhost-vdpa vhost-vdpa kernel backend support
1808 spice spice
1809 rbd rados block device (rbd)
1810 libiscsi iscsi support
1811 libnfs nfs support
1812 smartcard smartcard support (libcacard)
1813 u2f U2F support (u2f-emu)
1814 libusb libusb (for usb passthrough)
1815 live-block-migration Block migration in the main migration stream
1816 usb-redir usb network redirection support
1817 lzo support of lzo compression library
1818 snappy support of snappy compression library
1819 bzip2 support of bzip2 compression library
1820 (for reading bzip2-compressed dmg images)
1821 lzfse support of lzfse compression library
1822 (for reading lzfse-compressed dmg images)
1823 zstd support for zstd compression library
1824 (for migration compression and qcow2 cluster compression)
1825 seccomp seccomp support
1826 coroutine-pool coroutine freelist (better performance)
1827 glusterfs GlusterFS backend
1828 tpm TPM support
1829 libssh ssh block device support
1830 numa libnuma support
1831 libxml2 for Parallels image format
1832 tcmalloc tcmalloc support
1833 jemalloc jemalloc support
1834 avx2 AVX2 optimization support
1835 avx512f AVX512F optimization support
1836 replication replication support
1837 opengl opengl support
1838 virglrenderer virgl rendering support
1839 xfsctl xfsctl support
1840 qom-cast-debug cast debugging support
1841 tools build qemu-io, qemu-nbd and qemu-img tools
1842 bochs bochs image format support
1843 cloop cloop image format support
1844 dmg dmg image format support
1845 qcow1 qcow v1 image format support
1846 vdi vdi image format support
1847 vvfat vvfat image format support
1848 qed qed image format support
1849 parallels parallels image format support
1850 sheepdog sheepdog block driver support (deprecated)
1851 crypto-afalg Linux AF_ALG crypto backend driver
1852 capstone capstone disassembler support
1853 debug-mutex mutex debugging support
1854 libpmem libpmem support
1855 xkbcommon xkbcommon support
1856 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1857 libdaxctl libdaxctl support
1858 fuse FUSE block device export
1860 NOTE: The object files are built at the place where configure is launched
1862 exit 0
1865 # Remove old dependency files to make sure that they get properly regenerated
1866 rm -f */config-devices.mak.d
1868 if test -z "$python"
1869 then
1870 error_exit "Python not found. Use --python=/path/to/python"
1873 # Note that if the Python conditional here evaluates True we will exit
1874 # with status 1 which is a shell 'false' value.
1875 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1876 error_exit "Cannot use '$python', Python >= 3.6 is required." \
1877 "Use --python=/path/to/python to specify a supported Python."
1880 # Preserve python version since some functionality is dependent on it
1881 python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
1883 # Suppress writing compiled files
1884 python="$python -B"
1886 if test -z "$meson"; then
1887 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
1888 meson=meson
1889 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
1890 meson=git
1891 elif test -e "${source_path}/meson/meson.py" ; then
1892 meson=internal
1893 else
1894 if test "$explicit_python" = yes; then
1895 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
1896 else
1897 error_exit "Meson not found. Use --meson=/path/to/meson"
1900 else
1901 # Meson uses its own Python interpreter to invoke other Python scripts,
1902 # but the user wants to use the one they specified with --python.
1904 # We do not want to override the distro Python interpreter (and sometimes
1905 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1906 # just require --meson=git|internal together with --python.
1907 if test "$explicit_python" = yes; then
1908 case "$meson" in
1909 git | internal) ;;
1910 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
1911 esac
1915 if test "$meson" = git; then
1916 git_submodules="${git_submodules} meson"
1919 case "$meson" in
1920 git | internal)
1921 meson="$python ${source_path}/meson/meson.py"
1923 *) meson=$(command -v "$meson") ;;
1924 esac
1926 # Probe for ninja
1928 if test -z "$ninja"; then
1929 for c in ninja ninja-build samu; do
1930 if has $c; then
1931 ninja=$(command -v "$c")
1932 break
1934 done
1935 if test -z "$ninja"; then
1936 error_exit "Cannot find Ninja"
1940 # Check that the C compiler works. Doing this here before testing
1941 # the host CPU ensures that we had a valid CC to autodetect the
1942 # $cpu var (and we should bail right here if that's not the case).
1943 # It also allows the help message to be printed without a CC.
1944 write_c_skeleton;
1945 if compile_object ; then
1946 : C compiler works ok
1947 else
1948 error_exit "\"$cc\" either does not exist or does not work"
1950 if ! compile_prog ; then
1951 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1954 # Consult white-list to determine whether to enable werror
1955 # by default. Only enable by default for git builds
1956 if test -z "$werror" ; then
1957 if test -e "$source_path/.git" && \
1958 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1959 werror="yes"
1960 else
1961 werror="no"
1965 if test "$bogus_os" = "yes"; then
1966 # Now that we know that we're not printing the help and that
1967 # the compiler works (so the results of the check_defines we used
1968 # to identify the OS are reliable), if we didn't recognize the
1969 # host OS we should stop now.
1970 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1973 # Check whether the compiler matches our minimum requirements:
1974 cat > $TMPC << EOF
1975 #if defined(__clang_major__) && defined(__clang_minor__)
1976 # ifdef __apple_build_version__
1977 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1978 # error You need at least XCode Clang v5.1 to compile QEMU
1979 # endif
1980 # else
1981 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1982 # error You need at least Clang v3.4 to compile QEMU
1983 # endif
1984 # endif
1985 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1986 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1987 # error You need at least GCC v4.8 to compile QEMU
1988 # endif
1989 #else
1990 # error You either need GCC or Clang to compiler QEMU
1991 #endif
1992 int main (void) { return 0; }
1994 if ! compile_prog "" "" ; then
1995 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1998 # Accumulate -Wfoo and -Wno-bar separately.
1999 # We will list all of the enable flags first, and the disable flags second.
2000 # Note that we do not add -Werror, because that would enable it for all
2001 # configure tests. If a configure test failed due to -Werror this would
2002 # just silently disable some features, so it's too error prone.
2004 warn_flags=
2005 add_to warn_flags -Wold-style-declaration
2006 add_to warn_flags -Wold-style-definition
2007 add_to warn_flags -Wtype-limits
2008 add_to warn_flags -Wformat-security
2009 add_to warn_flags -Wformat-y2k
2010 add_to warn_flags -Winit-self
2011 add_to warn_flags -Wignored-qualifiers
2012 add_to warn_flags -Wempty-body
2013 add_to warn_flags -Wnested-externs
2014 add_to warn_flags -Wendif-labels
2015 add_to warn_flags -Wexpansion-to-defined
2017 nowarn_flags=
2018 add_to nowarn_flags -Wno-initializer-overrides
2019 add_to nowarn_flags -Wno-missing-include-dirs
2020 add_to nowarn_flags -Wno-shift-negative-value
2021 add_to nowarn_flags -Wno-string-plus-int
2022 add_to nowarn_flags -Wno-typedef-redefinition
2023 add_to nowarn_flags -Wno-tautological-type-limit-compare
2024 add_to nowarn_flags -Wno-psabi
2026 gcc_flags="$warn_flags $nowarn_flags"
2028 cc_has_warning_flag() {
2029 write_c_skeleton;
2031 # Use the positive sense of the flag when testing for -Wno-wombat
2032 # support (gcc will happily accept the -Wno- form of unknown
2033 # warning options).
2034 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2035 compile_prog "-Werror $optflag" ""
2038 for flag in $gcc_flags; do
2039 if cc_has_warning_flag $flag ; then
2040 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2042 done
2044 if test "$stack_protector" != "no"; then
2045 cat > $TMPC << EOF
2046 int main(int argc, char *argv[])
2048 char arr[64], *p = arr, *c = argv[0];
2049 while (*c) {
2050 *p++ = *c++;
2052 return 0;
2055 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2056 sp_on=0
2057 for flag in $gcc_flags; do
2058 # We need to check both a compile and a link, since some compiler
2059 # setups fail only on a .c->.o compile and some only at link time
2060 if compile_object "-Werror $flag" &&
2061 compile_prog "-Werror $flag" ""; then
2062 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2063 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2064 sp_on=1
2065 break
2067 done
2068 if test "$stack_protector" = yes; then
2069 if test $sp_on = 0; then
2070 error_exit "Stack protector not supported"
2075 # Disable -Wmissing-braces on older compilers that warn even for
2076 # the "universal" C zero initializer {0}.
2077 cat > $TMPC << EOF
2078 struct {
2079 int a[2];
2080 } x = {0};
2082 if compile_object "-Werror" "" ; then
2084 else
2085 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2088 # Our module code doesn't support Windows
2089 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2090 error_exit "Modules are not available for Windows"
2093 # module_upgrades is only reasonable if modules are enabled
2094 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2095 error_exit "Can't enable module-upgrades as Modules are not enabled"
2098 # Static linking is not possible with modules or PIE
2099 if test "$static" = "yes" ; then
2100 if test "$modules" = "yes" ; then
2101 error_exit "static and modules are mutually incompatible"
2105 # Unconditional check for compiler __thread support
2106 cat > $TMPC << EOF
2107 static __thread int tls_var;
2108 int main(void) { return tls_var; }
2111 if ! compile_prog "-Werror" "" ; then
2112 error_exit "Your compiler does not support the __thread specifier for " \
2113 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2116 cat > $TMPC << EOF
2118 #ifdef __linux__
2119 # define THREAD __thread
2120 #else
2121 # define THREAD
2122 #endif
2123 static THREAD int tls_var;
2124 int main(void) { return tls_var; }
2127 # Check we support --no-pie first; we will need this for building ROMs.
2128 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2129 CFLAGS_NOPIE="-fno-pie"
2130 LDFLAGS_NOPIE="-no-pie"
2133 if test "$static" = "yes"; then
2134 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2135 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2136 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2137 pie="yes"
2138 elif test "$pie" = "yes"; then
2139 error_exit "-static-pie not available due to missing toolchain support"
2140 else
2141 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2142 pie="no"
2144 elif test "$pie" = "no"; then
2145 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2146 CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS"
2147 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2148 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2149 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2150 pie="yes"
2151 elif test "$pie" = "yes"; then
2152 error_exit "PIE not available due to missing toolchain support"
2153 else
2154 echo "Disabling PIE due to missing toolchain support"
2155 pie="no"
2158 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2159 # The combination is known as "full relro", because .got.plt is read-only too.
2160 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2161 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2164 ##########################################
2165 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2166 # use i686 as default anyway, but for those that don't, an explicit
2167 # specification is necessary
2169 if test "$cpu" = "i386"; then
2170 cat > $TMPC << EOF
2171 static int sfaa(int *ptr)
2173 return __sync_fetch_and_and(ptr, 0);
2176 int main(void)
2178 int val = 42;
2179 val = __sync_val_compare_and_swap(&val, 0, 1);
2180 sfaa(&val);
2181 return val;
2184 if ! compile_prog "" "" ; then
2185 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2189 #########################################
2190 # Solaris specific configure tool chain decisions
2192 if test "$solaris" = "yes" ; then
2193 if has ar; then
2195 else
2196 if test -f /usr/ccs/bin/ar ; then
2197 error_exit "No path includes ar" \
2198 "Add /usr/ccs/bin to your path and rerun configure"
2200 error_exit "No path includes ar"
2204 if test -z "${target_list+xxx}" ; then
2205 default_targets=yes
2206 for target in $default_target_list; do
2207 target_list="$target_list $target"
2208 done
2209 target_list="${target_list# }"
2210 else
2211 default_targets=no
2212 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2213 for target in $target_list; do
2214 # Check that we recognised the target name; this allows a more
2215 # friendly error message than if we let it fall through.
2216 case " $default_target_list " in
2217 *" $target "*)
2220 error_exit "Unknown target name '$target'"
2222 esac
2223 done
2226 for target in $target_list; do
2227 # if a deprecated target is enabled we note it here
2228 if echo "$deprecated_targets_list" | grep -q "$target"; then
2229 add_to deprecated_features $target
2231 done
2233 # see if system emulation was really requested
2234 case " $target_list " in
2235 *"-softmmu "*) softmmu=yes
2237 *) softmmu=no
2239 esac
2241 feature_not_found() {
2242 feature=$1
2243 remedy=$2
2245 error_exit "User requested feature $feature" \
2246 "configure was not able to find it." \
2247 "$remedy"
2250 # ---
2251 # big/little endian test
2252 cat > $TMPC << EOF
2253 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2254 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2255 extern int foo(short *, short *);
2256 int main(int argc, char *argv[]) {
2257 return foo(big_endian, little_endian);
2261 if compile_object ; then
2262 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2263 bigendian="yes"
2264 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2265 bigendian="no"
2266 else
2267 echo big/little test failed
2269 else
2270 echo big/little test failed
2273 ##########################################
2274 # system tools
2275 if test -z "$want_tools"; then
2276 if test "$softmmu" = "no"; then
2277 want_tools=no
2278 else
2279 want_tools=yes
2283 ##########################################
2284 # cocoa implies not SDL or GTK
2285 # (the cocoa UI code currently assumes it is always the active UI
2286 # and doesn't interact well with other UI frontend code)
2287 if test "$cocoa" = "enabled"; then
2288 if test "$sdl" = "enabled"; then
2289 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2291 if test "$gtk" = "yes"; then
2292 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2294 gtk=no
2295 sdl=disabled
2298 # Some versions of Mac OS X incorrectly define SIZE_MAX
2299 cat > $TMPC << EOF
2300 #include <stdint.h>
2301 #include <stdio.h>
2302 int main(int argc, char *argv[]) {
2303 return printf("%zu", SIZE_MAX);
2306 have_broken_size_max=no
2307 if ! compile_object -Werror ; then
2308 have_broken_size_max=yes
2311 ##########################################
2312 # L2TPV3 probe
2314 cat > $TMPC <<EOF
2315 #include <sys/socket.h>
2316 #include <linux/ip.h>
2317 int main(void) { return sizeof(struct mmsghdr); }
2319 if compile_prog "" "" ; then
2320 l2tpv3=yes
2321 else
2322 l2tpv3=no
2325 if check_include "pty.h" ; then
2326 pty_h=yes
2327 else
2328 pty_h=no
2331 cat > $TMPC <<EOF
2332 #include <sys/mman.h>
2333 int main(int argc, char *argv[]) {
2334 return mlockall(MCL_FUTURE);
2337 if compile_prog "" "" ; then
2338 have_mlockall=yes
2339 else
2340 have_mlockall=no
2343 #########################################
2344 # vhost interdependencies and host support
2346 # vhost backends
2347 if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2348 error_exit "vhost-user is only available on Linux"
2350 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2351 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2352 error_exit "vhost-vdpa is only available on Linux"
2354 test "$vhost_kernel" = "" && vhost_kernel=$linux
2355 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2356 error_exit "vhost-kernel is only available on Linux"
2359 # vhost-kernel devices
2360 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2361 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2362 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2364 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2365 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2366 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2369 # vhost-user backends
2370 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2371 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2372 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2374 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2375 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2376 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2378 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2379 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2380 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2382 #vhost-vdpa backends
2383 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2384 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2385 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2388 # OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2389 if test "$vhost_net" = ""; then
2390 test "$vhost_net_user" = "yes" && vhost_net=yes
2391 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
2392 test "$vhost_kernel" = "yes" && vhost_net=yes
2395 ##########################################
2396 # pkg-config probe
2398 if ! has "$pkg_config_exe"; then
2399 error_exit "pkg-config binary '$pkg_config_exe' not found"
2402 ##########################################
2403 # NPTL probe
2405 if test "$linux_user" = "yes"; then
2406 cat > $TMPC <<EOF
2407 #include <sched.h>
2408 #include <linux/futex.h>
2409 int main(void) {
2410 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2411 #error bork
2412 #endif
2413 return 0;
2416 if ! compile_object ; then
2417 feature_not_found "nptl" "Install glibc and linux kernel headers."
2421 ##########################################
2422 # lzo check
2424 if test "$lzo" != "no" ; then
2425 cat > $TMPC << EOF
2426 #include <lzo/lzo1x.h>
2427 int main(void) { lzo_version(); return 0; }
2429 if compile_prog "" "-llzo2" ; then
2430 lzo_libs="-llzo2"
2431 lzo="yes"
2432 else
2433 if test "$lzo" = "yes"; then
2434 feature_not_found "liblzo2" "Install liblzo2 devel"
2436 lzo="no"
2440 ##########################################
2441 # snappy check
2443 if test "$snappy" != "no" ; then
2444 cat > $TMPC << EOF
2445 #include <snappy-c.h>
2446 int main(void) { snappy_max_compressed_length(4096); return 0; }
2448 if compile_prog "" "-lsnappy" ; then
2449 snappy_libs='-lsnappy'
2450 snappy="yes"
2451 else
2452 if test "$snappy" = "yes"; then
2453 feature_not_found "libsnappy" "Install libsnappy devel"
2455 snappy="no"
2459 ##########################################
2460 # bzip2 check
2462 if test "$bzip2" != "no" ; then
2463 cat > $TMPC << EOF
2464 #include <bzlib.h>
2465 int main(void) { BZ2_bzlibVersion(); return 0; }
2467 if compile_prog "" "-lbz2" ; then
2468 bzip2="yes"
2469 else
2470 if test "$bzip2" = "yes"; then
2471 feature_not_found "libbzip2" "Install libbzip2 devel"
2473 bzip2="no"
2477 ##########################################
2478 # lzfse check
2480 if test "$lzfse" != "no" ; then
2481 cat > $TMPC << EOF
2482 #include <lzfse.h>
2483 int main(void) { lzfse_decode_scratch_size(); return 0; }
2485 if compile_prog "" "-llzfse" ; then
2486 lzfse="yes"
2487 else
2488 if test "$lzfse" = "yes"; then
2489 feature_not_found "lzfse" "Install lzfse devel"
2491 lzfse="no"
2495 ##########################################
2496 # zstd check
2498 if test "$zstd" != "no" ; then
2499 libzstd_minver="1.4.0"
2500 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2501 zstd_cflags="$($pkg_config --cflags libzstd)"
2502 zstd_libs="$($pkg_config --libs libzstd)"
2503 zstd="yes"
2504 else
2505 if test "$zstd" = "yes" ; then
2506 feature_not_found "libzstd" "Install libzstd devel"
2508 zstd="no"
2512 ##########################################
2513 # libseccomp check
2515 if test "$seccomp" != "no" ; then
2516 libseccomp_minver="2.3.0"
2517 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2518 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2519 seccomp_libs="$($pkg_config --libs libseccomp)"
2520 seccomp="yes"
2521 else
2522 if test "$seccomp" = "yes" ; then
2523 feature_not_found "libseccomp" \
2524 "Install libseccomp devel >= $libseccomp_minver"
2526 seccomp="no"
2530 ##########################################
2531 # xen probe
2533 if test "$xen" != "disabled" ; then
2534 # Check whether Xen library path is specified via --extra-ldflags to avoid
2535 # overriding this setting with pkg-config output. If not, try pkg-config
2536 # to obtain all needed flags.
2538 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2539 $pkg_config --exists xencontrol ; then
2540 xen_ctrl_version="$(printf '%d%02d%02d' \
2541 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2542 xen=enabled
2543 xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
2544 xen_pc="$xen_pc xenevtchn xendevicemodel"
2545 if $pkg_config --exists xentoolcore; then
2546 xen_pc="$xen_pc xentoolcore"
2548 xen_cflags="$($pkg_config --cflags $xen_pc)"
2549 xen_libs="$($pkg_config --libs $xen_pc)"
2550 else
2552 xen_libs="-lxenstore -lxenctrl"
2553 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2555 # First we test whether Xen headers and libraries are available.
2556 # If no, we are done and there is no Xen support.
2557 # If yes, more tests are run to detect the Xen version.
2559 # Xen (any)
2560 cat > $TMPC <<EOF
2561 #include <xenctrl.h>
2562 int main(void) {
2563 return 0;
2566 if ! compile_prog "" "$xen_libs" ; then
2567 # Xen not found
2568 if test "$xen" = "enabled" ; then
2569 feature_not_found "xen" "Install xen devel"
2571 xen=disabled
2573 # Xen unstable
2574 elif
2575 cat > $TMPC <<EOF &&
2576 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2577 #define __XEN_TOOLS__
2578 #include <xendevicemodel.h>
2579 #include <xenforeignmemory.h>
2580 int main(void) {
2581 xendevicemodel_handle *xd;
2582 xenforeignmemory_handle *xfmem;
2584 xd = xendevicemodel_open(0, 0);
2585 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2587 xfmem = xenforeignmemory_open(0, 0);
2588 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2590 return 0;
2593 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2594 then
2595 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2596 xen_ctrl_version=41100
2597 xen=enabled
2598 elif
2599 cat > $TMPC <<EOF &&
2600 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2601 #include <xenforeignmemory.h>
2602 #include <xentoolcore.h>
2603 int main(void) {
2604 xenforeignmemory_handle *xfmem;
2606 xfmem = xenforeignmemory_open(0, 0);
2607 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2608 xentoolcore_restrict_all(0);
2610 return 0;
2613 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2614 then
2615 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2616 xen_ctrl_version=41000
2617 xen=enabled
2618 elif
2619 cat > $TMPC <<EOF &&
2620 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2621 #define __XEN_TOOLS__
2622 #include <xendevicemodel.h>
2623 int main(void) {
2624 xendevicemodel_handle *xd;
2626 xd = xendevicemodel_open(0, 0);
2627 xendevicemodel_close(xd);
2629 return 0;
2632 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2633 then
2634 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2635 xen_ctrl_version=40900
2636 xen=enabled
2637 elif
2638 cat > $TMPC <<EOF &&
2640 * If we have stable libs the we don't want the libxc compat
2641 * layers, regardless of what CFLAGS we may have been given.
2643 * Also, check if xengnttab_grant_copy_segment_t is defined and
2644 * grant copy operation is implemented.
2646 #undef XC_WANT_COMPAT_EVTCHN_API
2647 #undef XC_WANT_COMPAT_GNTTAB_API
2648 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2649 #include <xenctrl.h>
2650 #include <xenstore.h>
2651 #include <xenevtchn.h>
2652 #include <xengnttab.h>
2653 #include <xenforeignmemory.h>
2654 #include <stdint.h>
2655 #include <xen/hvm/hvm_info_table.h>
2656 #if !defined(HVM_MAX_VCPUS)
2657 # error HVM_MAX_VCPUS not defined
2658 #endif
2659 int main(void) {
2660 xc_interface *xc = NULL;
2661 xenforeignmemory_handle *xfmem;
2662 xenevtchn_handle *xe;
2663 xengnttab_handle *xg;
2664 xengnttab_grant_copy_segment_t* seg = NULL;
2666 xs_daemon_open();
2668 xc = xc_interface_open(0, 0, 0);
2669 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2670 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2671 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2672 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2674 xfmem = xenforeignmemory_open(0, 0);
2675 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2677 xe = xenevtchn_open(0, 0);
2678 xenevtchn_fd(xe);
2680 xg = xengnttab_open(0, 0);
2681 xengnttab_grant_copy(xg, 0, seg);
2683 return 0;
2686 compile_prog "" "$xen_libs $xen_stable_libs"
2687 then
2688 xen_ctrl_version=40800
2689 xen=enabled
2690 elif
2691 cat > $TMPC <<EOF &&
2693 * If we have stable libs the we don't want the libxc compat
2694 * layers, regardless of what CFLAGS we may have been given.
2696 #undef XC_WANT_COMPAT_EVTCHN_API
2697 #undef XC_WANT_COMPAT_GNTTAB_API
2698 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2699 #include <xenctrl.h>
2700 #include <xenstore.h>
2701 #include <xenevtchn.h>
2702 #include <xengnttab.h>
2703 #include <xenforeignmemory.h>
2704 #include <stdint.h>
2705 #include <xen/hvm/hvm_info_table.h>
2706 #if !defined(HVM_MAX_VCPUS)
2707 # error HVM_MAX_VCPUS not defined
2708 #endif
2709 int main(void) {
2710 xc_interface *xc = NULL;
2711 xenforeignmemory_handle *xfmem;
2712 xenevtchn_handle *xe;
2713 xengnttab_handle *xg;
2715 xs_daemon_open();
2717 xc = xc_interface_open(0, 0, 0);
2718 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2719 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2720 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2721 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2723 xfmem = xenforeignmemory_open(0, 0);
2724 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2726 xe = xenevtchn_open(0, 0);
2727 xenevtchn_fd(xe);
2729 xg = xengnttab_open(0, 0);
2730 xengnttab_map_grant_ref(xg, 0, 0, 0);
2732 return 0;
2735 compile_prog "" "$xen_libs $xen_stable_libs"
2736 then
2737 xen_ctrl_version=40701
2738 xen=enabled
2740 # Xen 4.6
2741 elif
2742 cat > $TMPC <<EOF &&
2743 #include <xenctrl.h>
2744 #include <xenstore.h>
2745 #include <stdint.h>
2746 #include <xen/hvm/hvm_info_table.h>
2747 #if !defined(HVM_MAX_VCPUS)
2748 # error HVM_MAX_VCPUS not defined
2749 #endif
2750 int main(void) {
2751 xc_interface *xc;
2752 xs_daemon_open();
2753 xc = xc_interface_open(0, 0, 0);
2754 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2755 xc_gnttab_open(NULL, 0);
2756 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2757 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2758 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2759 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2760 return 0;
2763 compile_prog "" "$xen_libs"
2764 then
2765 xen_ctrl_version=40600
2766 xen=enabled
2768 # Xen 4.5
2769 elif
2770 cat > $TMPC <<EOF &&
2771 #include <xenctrl.h>
2772 #include <xenstore.h>
2773 #include <stdint.h>
2774 #include <xen/hvm/hvm_info_table.h>
2775 #if !defined(HVM_MAX_VCPUS)
2776 # error HVM_MAX_VCPUS not defined
2777 #endif
2778 int main(void) {
2779 xc_interface *xc;
2780 xs_daemon_open();
2781 xc = xc_interface_open(0, 0, 0);
2782 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2783 xc_gnttab_open(NULL, 0);
2784 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2785 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2786 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2787 return 0;
2790 compile_prog "" "$xen_libs"
2791 then
2792 xen_ctrl_version=40500
2793 xen=enabled
2795 elif
2796 cat > $TMPC <<EOF &&
2797 #include <xenctrl.h>
2798 #include <xenstore.h>
2799 #include <stdint.h>
2800 #include <xen/hvm/hvm_info_table.h>
2801 #if !defined(HVM_MAX_VCPUS)
2802 # error HVM_MAX_VCPUS not defined
2803 #endif
2804 int main(void) {
2805 xc_interface *xc;
2806 xs_daemon_open();
2807 xc = xc_interface_open(0, 0, 0);
2808 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2809 xc_gnttab_open(NULL, 0);
2810 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2811 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2812 return 0;
2815 compile_prog "" "$xen_libs"
2816 then
2817 xen_ctrl_version=40200
2818 xen=enabled
2820 else
2821 if test "$xen" = "enabled" ; then
2822 feature_not_found "xen (unsupported version)" \
2823 "Install a supported xen (xen 4.2 or newer)"
2825 xen=disabled
2828 if test "$xen" = enabled; then
2829 if test $xen_ctrl_version -ge 40701 ; then
2830 xen_libs="$xen_libs $xen_stable_libs "
2836 if test "$xen_pci_passthrough" != "disabled"; then
2837 if test "$xen" = "enabled" && test "$linux" = "yes"; then
2838 xen_pci_passthrough=enabled
2839 else
2840 if test "$xen_pci_passthrough" = "enabled"; then
2841 error_exit "User requested feature Xen PCI Passthrough" \
2842 " but this feature requires /sys from Linux"
2844 xen_pci_passthrough=disabled
2848 ##########################################
2849 # gettext probe
2850 if test "$gettext" != "false" ; then
2851 if has xgettext; then
2852 gettext=true
2853 else
2854 if test "$gettext" = "true" ; then
2855 feature_not_found "gettext" "Install xgettext binary"
2857 gettext=false
2861 ##########################################
2862 # X11 probe
2863 if $pkg_config --exists "x11"; then
2864 have_x11=yes
2865 x11_cflags=$($pkg_config --cflags x11)
2866 x11_libs=$($pkg_config --libs x11)
2869 ##########################################
2870 # GTK probe
2872 if test "$gtk" != "no"; then
2873 gtkpackage="gtk+-3.0"
2874 gtkx11package="gtk+-x11-3.0"
2875 gtkversion="3.22.0"
2876 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2877 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2878 gtk_libs=$($pkg_config --libs $gtkpackage)
2879 gtk_version=$($pkg_config --modversion $gtkpackage)
2880 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2881 need_x11=yes
2882 gtk_cflags="$gtk_cflags $x11_cflags"
2883 gtk_libs="$gtk_libs $x11_libs"
2885 gtk="yes"
2886 elif test "$gtk" = "yes"; then
2887 feature_not_found "gtk" "Install gtk3-devel"
2888 else
2889 gtk="no"
2894 ##########################################
2895 # GNUTLS probe
2897 if test "$gnutls" != "no"; then
2898 pass="no"
2899 if $pkg_config --exists "gnutls >= 3.1.18"; then
2900 gnutls_cflags=$($pkg_config --cflags gnutls)
2901 gnutls_libs=$($pkg_config --libs gnutls)
2902 # Packaging for the static libraries is not always correct.
2903 # At least ubuntu 18.04 ships only shared libraries.
2904 write_c_skeleton
2905 if compile_prog "" "$gnutls_libs" ; then
2906 pass="yes"
2909 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2910 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2911 else
2912 gnutls="$pass"
2917 # If user didn't give a --disable/enable-gcrypt flag,
2918 # then mark as disabled if user requested nettle
2919 # explicitly
2920 if test -z "$gcrypt"
2921 then
2922 if test "$nettle" = "yes"
2923 then
2924 gcrypt="no"
2928 # If user didn't give a --disable/enable-nettle flag,
2929 # then mark as disabled if user requested gcrypt
2930 # explicitly
2931 if test -z "$nettle"
2932 then
2933 if test "$gcrypt" = "yes"
2934 then
2935 nettle="no"
2939 has_libgcrypt() {
2940 if ! has "libgcrypt-config"
2941 then
2942 return 1
2945 if test -n "$cross_prefix"
2946 then
2947 host=$(libgcrypt-config --host)
2948 if test "$host-" != $cross_prefix
2949 then
2950 return 1
2954 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2955 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2957 if test $maj != 1 || test $min -lt 5
2958 then
2959 return 1
2962 return 0
2966 if test "$nettle" != "no"; then
2967 pass="no"
2968 if $pkg_config --exists "nettle >= 2.7.1"; then
2969 nettle_cflags=$($pkg_config --cflags nettle)
2970 nettle_libs=$($pkg_config --libs nettle)
2971 nettle_version=$($pkg_config --modversion nettle)
2972 # Link test to make sure the given libraries work (e.g for static).
2973 write_c_skeleton
2974 if compile_prog "" "$nettle_libs" ; then
2975 if test -z "$gcrypt"; then
2976 gcrypt="no"
2978 pass="yes"
2981 if test "$pass" = "yes"
2982 then
2983 cat > $TMPC << EOF
2984 #include <nettle/xts.h>
2985 int main(void) {
2986 return 0;
2989 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2990 nettle_xts=yes
2991 qemu_private_xts=no
2994 if test "$pass" = "no" && test "$nettle" = "yes"; then
2995 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2996 else
2997 nettle="$pass"
3001 if test "$gcrypt" != "no"; then
3002 pass="no"
3003 if has_libgcrypt; then
3004 gcrypt_cflags=$(libgcrypt-config --cflags)
3005 gcrypt_libs=$(libgcrypt-config --libs)
3006 # Debian has removed -lgpg-error from libgcrypt-config
3007 # as it "spreads unnecessary dependencies" which in
3008 # turn breaks static builds...
3009 if test "$static" = "yes"
3010 then
3011 gcrypt_libs="$gcrypt_libs -lgpg-error"
3014 # Link test to make sure the given libraries work (e.g for static).
3015 write_c_skeleton
3016 if compile_prog "" "$gcrypt_libs" ; then
3017 pass="yes"
3020 if test "$pass" = "yes"; then
3021 gcrypt="yes"
3022 cat > $TMPC << EOF
3023 #include <gcrypt.h>
3024 int main(void) {
3025 gcry_mac_hd_t handle;
3026 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3027 GCRY_MAC_FLAG_SECURE, NULL);
3028 return 0;
3031 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3032 gcrypt_hmac=yes
3034 cat > $TMPC << EOF
3035 #include <gcrypt.h>
3036 int main(void) {
3037 gcry_cipher_hd_t handle;
3038 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3039 return 0;
3042 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3043 gcrypt_xts=yes
3044 qemu_private_xts=no
3046 elif test "$gcrypt" = "yes"; then
3047 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3048 else
3049 gcrypt="no"
3054 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3055 then
3056 error_exit "Only one of gcrypt & nettle can be enabled"
3059 ##########################################
3060 # libtasn1 - only for the TLS creds/session test suite
3062 tasn1=yes
3063 tasn1_cflags=""
3064 tasn1_libs=""
3065 if $pkg_config --exists "libtasn1"; then
3066 tasn1_cflags=$($pkg_config --cflags libtasn1)
3067 tasn1_libs=$($pkg_config --libs libtasn1)
3068 else
3069 tasn1=no
3073 ##########################################
3074 # PAM probe
3076 if test "$auth_pam" != "no"; then
3077 cat > $TMPC <<EOF
3078 #include <security/pam_appl.h>
3079 #include <stdio.h>
3080 int main(void) {
3081 const char *service_name = "qemu";
3082 const char *user = "frank";
3083 const struct pam_conv pam_conv = { 0 };
3084 pam_handle_t *pamh = NULL;
3085 pam_start(service_name, user, &pam_conv, &pamh);
3086 return 0;
3089 if compile_prog "" "-lpam" ; then
3090 auth_pam=yes
3091 else
3092 if test "$auth_pam" = "yes"; then
3093 feature_not_found "PAM" "Install PAM development package"
3094 else
3095 auth_pam=no
3100 ##########################################
3101 # getifaddrs (for tests/test-io-channel-socket )
3103 have_ifaddrs_h=yes
3104 if ! check_include "ifaddrs.h" ; then
3105 have_ifaddrs_h=no
3108 #########################################
3109 # libdrm check
3110 have_drm_h=no
3111 if check_include "libdrm/drm.h" ; then
3112 have_drm_h=yes
3115 #########################################
3116 # sys/signal.h check
3117 have_sys_signal_h=no
3118 if check_include "sys/signal.h" ; then
3119 have_sys_signal_h=yes
3122 ##########################################
3123 # VTE probe
3125 if test "$vte" != "no"; then
3126 vteminversion="0.32.0"
3127 if $pkg_config --exists "vte-2.91"; then
3128 vtepackage="vte-2.91"
3129 else
3130 vtepackage="vte-2.90"
3132 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3133 vte_cflags=$($pkg_config --cflags $vtepackage)
3134 vte_libs=$($pkg_config --libs $vtepackage)
3135 vteversion=$($pkg_config --modversion $vtepackage)
3136 vte="yes"
3137 elif test "$vte" = "yes"; then
3138 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3139 else
3140 vte="no"
3144 ##########################################
3145 # RDMA needs OpenFabrics libraries
3146 if test "$rdma" != "no" ; then
3147 cat > $TMPC <<EOF
3148 #include <rdma/rdma_cma.h>
3149 int main(void) { return 0; }
3151 rdma_libs="-lrdmacm -libverbs -libumad"
3152 if compile_prog "" "$rdma_libs" ; then
3153 rdma="yes"
3154 else
3155 if test "$rdma" = "yes" ; then
3156 error_exit \
3157 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3158 " Your options:" \
3159 " (1) Fast: Install infiniband packages (devel) from your distro." \
3160 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3161 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3163 rdma="no"
3167 ##########################################
3168 # PVRDMA detection
3170 cat > $TMPC <<EOF &&
3171 #include <sys/mman.h>
3174 main(void)
3176 char buf = 0;
3177 void *addr = &buf;
3178 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3180 return 0;
3184 if test "$rdma" = "yes" ; then
3185 case "$pvrdma" in
3187 if compile_prog "" ""; then
3188 pvrdma="yes"
3189 else
3190 pvrdma="no"
3193 "yes")
3194 if ! compile_prog "" ""; then
3195 error_exit "PVRDMA is not supported since mremap is not implemented"
3197 pvrdma="yes"
3199 "no")
3200 pvrdma="no"
3202 esac
3203 else
3204 if test "$pvrdma" = "yes" ; then
3205 error_exit "PVRDMA requires rdma suppport"
3207 pvrdma="no"
3210 # Let's see if enhanced reg_mr is supported
3211 if test "$pvrdma" = "yes" ; then
3213 cat > $TMPC <<EOF &&
3214 #include <infiniband/verbs.h>
3217 main(void)
3219 struct ibv_mr *mr;
3220 struct ibv_pd *pd = NULL;
3221 size_t length = 10;
3222 uint64_t iova = 0;
3223 int access = 0;
3224 void *addr = NULL;
3226 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3228 ibv_dereg_mr(mr);
3230 return 0;
3233 if ! compile_prog "" "-libverbs"; then
3234 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3238 ##########################################
3239 # xfsctl() probe, used for file-posix.c
3240 if test "$xfs" != "no" ; then
3241 cat > $TMPC << EOF
3242 #include <stddef.h> /* NULL */
3243 #include <xfs/xfs.h>
3244 int main(void)
3246 xfsctl(NULL, 0, 0, NULL);
3247 return 0;
3250 if compile_prog "" "" ; then
3251 xfs="yes"
3252 else
3253 if test "$xfs" = "yes" ; then
3254 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
3256 xfs=no
3260 ##########################################
3261 # vde libraries probe
3262 if test "$vde" != "no" ; then
3263 vde_libs="-lvdeplug"
3264 cat > $TMPC << EOF
3265 #include <libvdeplug.h>
3266 int main(void)
3268 struct vde_open_args a = {0, 0, 0};
3269 char s[] = "";
3270 vde_open(s, s, &a);
3271 return 0;
3274 if compile_prog "" "$vde_libs" ; then
3275 vde=yes
3276 else
3277 if test "$vde" = "yes" ; then
3278 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3280 vde=no
3284 ##########################################
3285 # netmap support probe
3286 # Apart from looking for netmap headers, we make sure that the host API version
3287 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3288 # a minor/major version number. Minor new features will be marked with values up
3289 # to 15, and if something happens that requires a change to the backend we will
3290 # move above 15, submit the backend fixes and modify this two bounds.
3291 if test "$netmap" != "no" ; then
3292 cat > $TMPC << EOF
3293 #include <inttypes.h>
3294 #include <net/if.h>
3295 #include <net/netmap.h>
3296 #include <net/netmap_user.h>
3297 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3298 #error
3299 #endif
3300 int main(void) { return 0; }
3302 if compile_prog "" "" ; then
3303 netmap=yes
3304 else
3305 if test "$netmap" = "yes" ; then
3306 feature_not_found "netmap"
3308 netmap=no
3312 ##########################################
3313 # libcap-ng library probe
3314 if test "$cap_ng" != "no" ; then
3315 cap_libs="-lcap-ng"
3316 cat > $TMPC << EOF
3317 #include <cap-ng.h>
3318 int main(void)
3320 capng_capability_to_name(CAPNG_EFFECTIVE);
3321 return 0;
3324 if compile_prog "" "$cap_libs" ; then
3325 cap_ng=yes
3326 else
3327 if test "$cap_ng" = "yes" ; then
3328 feature_not_found "cap_ng" "Install libcap-ng devel"
3330 cap_ng=no
3334 ##########################################
3335 # Sound support libraries probe
3337 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3338 for drv in $audio_drv_list; do
3339 case $drv in
3340 alsa | try-alsa)
3341 if $pkg_config alsa --exists; then
3342 alsa_libs=$($pkg_config alsa --libs)
3343 alsa_cflags=$($pkg_config alsa --cflags)
3344 alsa=yes
3345 if test "$drv" = "try-alsa"; then
3346 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3348 else
3349 if test "$drv" = "try-alsa"; then
3350 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3351 else
3352 error_exit "$drv check failed" \
3353 "Make sure to have the $drv libs and headers installed."
3358 pa | try-pa)
3359 if $pkg_config libpulse --exists; then
3360 libpulse=yes
3361 pulse_libs=$($pkg_config libpulse --libs)
3362 pulse_cflags=$($pkg_config libpulse --cflags)
3363 if test "$drv" = "try-pa"; then
3364 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3366 else
3367 if test "$drv" = "try-pa"; then
3368 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3369 else
3370 error_exit "$drv check failed" \
3371 "Make sure to have the $drv libs and headers installed."
3376 sdl)
3377 if test "$sdl" = "no"; then
3378 error_exit "sdl not found or disabled, can not use sdl audio driver"
3382 try-sdl)
3383 if test "$sdl" = "no"; then
3384 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3385 else
3386 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3390 coreaudio)
3391 coreaudio_libs="-framework CoreAudio"
3394 dsound)
3395 dsound_libs="-lole32 -ldxguid"
3396 audio_win_int="yes"
3399 oss)
3400 oss_libs="$oss_lib"
3403 jack | try-jack)
3404 if $pkg_config jack --exists; then
3405 libjack=yes
3406 jack_libs=$($pkg_config jack --libs)
3407 if test "$drv" = "try-jack"; then
3408 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3410 else
3411 if test "$drv" = "try-jack"; then
3412 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3413 else
3414 error_exit "$drv check failed" \
3415 "Make sure to have the $drv libs and headers installed."
3421 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3422 error_exit "Unknown driver '$drv' selected" \
3423 "Possible drivers are: $audio_possible_drivers"
3426 esac
3427 done
3429 ##########################################
3430 # BrlAPI probe
3432 if test "$brlapi" != "no" ; then
3433 brlapi_libs="-lbrlapi"
3434 cat > $TMPC << EOF
3435 #include <brlapi.h>
3436 #include <stddef.h>
3437 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3439 if compile_prog "" "$brlapi_libs" ; then
3440 brlapi=yes
3441 else
3442 if test "$brlapi" = "yes" ; then
3443 feature_not_found "brlapi" "Install brlapi devel"
3445 brlapi=no
3449 ##########################################
3450 # curl probe
3451 if test "$curl" != "no" ; then
3452 if $pkg_config libcurl --exists; then
3453 curlconfig="$pkg_config libcurl"
3454 else
3455 curlconfig=curl-config
3457 cat > $TMPC << EOF
3458 #include <curl/curl.h>
3459 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3461 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3462 curl_libs=$($curlconfig --libs 2>/dev/null)
3463 if compile_prog "$curl_cflags" "$curl_libs" ; then
3464 curl=yes
3465 else
3466 if test "$curl" = "yes" ; then
3467 feature_not_found "curl" "Install libcurl devel"
3469 curl=no
3471 fi # test "$curl"
3473 ##########################################
3474 # glib support probe
3476 glib_req_ver=2.48
3477 glib_modules=gthread-2.0
3478 if test "$modules" = yes; then
3479 glib_modules="$glib_modules gmodule-export-2.0"
3481 if test "$plugins" = yes; then
3482 glib_modules="$glib_modules gmodule-2.0"
3485 for i in $glib_modules; do
3486 if $pkg_config --atleast-version=$glib_req_ver $i; then
3487 glib_cflags=$($pkg_config --cflags $i)
3488 glib_libs=$($pkg_config --libs $i)
3489 else
3490 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3492 done
3494 # This workaround is required due to a bug in pkg-config file for glib as it
3495 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3497 if test "$static" = yes && test "$mingw32" = yes; then
3498 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3501 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3502 gio_cflags=$($pkg_config --cflags gio-2.0)
3503 gio_libs=$($pkg_config --libs gio-2.0)
3504 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3505 if [ ! -x "$gdbus_codegen" ]; then
3506 gdbus_codegen=
3508 # Check that the libraries actually work -- Ubuntu 18.04 ships
3509 # with pkg-config --static --libs data for gio-2.0 that is missing
3510 # -lblkid and will give a link error.
3511 cat > $TMPC <<EOF
3512 #include <gio/gio.h>
3513 int main(void)
3515 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3516 return 0;
3519 if compile_prog "$gio_cflags" "$gio_libs" ; then
3520 gio=yes
3521 else
3522 gio=no
3524 else
3525 gio=no
3528 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3529 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3530 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3533 # Sanity check that the current size_t matches the
3534 # size that glib thinks it should be. This catches
3535 # problems on multi-arch where people try to build
3536 # 32-bit QEMU while pointing at 64-bit glib headers
3537 cat > $TMPC <<EOF
3538 #include <glib.h>
3539 #include <unistd.h>
3541 #define QEMU_BUILD_BUG_ON(x) \
3542 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3544 int main(void) {
3545 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3546 return 0;
3550 if ! compile_prog "$glib_cflags" "$glib_libs" ; then
3551 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3552 "You probably need to set PKG_CONFIG_LIBDIR"\
3553 "to point to the right pkg-config files for your"\
3554 "build target"
3557 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3558 cat > $TMPC << EOF
3559 #include <glib.h>
3560 int main(void) { return 0; }
3562 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3563 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3564 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3565 CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
3569 # Silence clang warnings triggered by glib < 2.57.2
3570 cat > $TMPC << EOF
3571 #include <glib.h>
3572 typedef struct Foo {
3573 int i;
3574 } Foo;
3575 static void foo_free(Foo *f)
3577 g_free(f);
3579 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3580 int main(void) { return 0; }
3582 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3583 if cc_has_warning_flag "-Wno-unused-function"; then
3584 glib_cflags="$glib_cflags -Wno-unused-function"
3585 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
3589 ##########################################
3590 # SHA command probe for modules
3591 if test "$modules" = yes; then
3592 shacmd_probe="sha1sum sha1 shasum"
3593 for c in $shacmd_probe; do
3594 if has $c; then
3595 shacmd="$c"
3596 break
3598 done
3599 if test "$shacmd" = ""; then
3600 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3604 ##########################################
3605 # pthread probe
3606 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3608 pthread=no
3609 cat > $TMPC << EOF
3610 #include <pthread.h>
3611 static void *f(void *p) { return NULL; }
3612 int main(void) {
3613 pthread_t thread;
3614 pthread_create(&thread, 0, f, 0);
3615 return 0;
3618 if compile_prog "" "" ; then
3619 pthread=yes
3620 else
3621 for pthread_lib in $PTHREADLIBS_LIST; do
3622 if compile_prog "" "$pthread_lib" ; then
3623 pthread=yes
3624 found=no
3625 for lib_entry in $LIBS; do
3626 if test "$lib_entry" = "$pthread_lib"; then
3627 found=yes
3628 break
3630 done
3631 if test "$found" = "no"; then
3632 LIBS="$pthread_lib $LIBS"
3634 break
3636 done
3639 if test "$mingw32" != yes && test "$pthread" = no; then
3640 error_exit "pthread check failed" \
3641 "Make sure to have the pthread libs and headers installed."
3644 # check for pthread_setname_np with thread id
3645 pthread_setname_np_w_tid=no
3646 cat > $TMPC << EOF
3647 #include <pthread.h>
3649 static void *f(void *p) { return NULL; }
3650 int main(void)
3652 pthread_t thread;
3653 pthread_create(&thread, 0, f, 0);
3654 pthread_setname_np(thread, "QEMU");
3655 return 0;
3658 if compile_prog "" "$pthread_lib" ; then
3659 pthread_setname_np_w_tid=yes
3662 # check for pthread_setname_np without thread id
3663 pthread_setname_np_wo_tid=no
3664 cat > $TMPC << EOF
3665 #include <pthread.h>
3667 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3668 int main(void)
3670 pthread_t thread;
3671 pthread_create(&thread, 0, f, 0);
3672 return 0;
3675 if compile_prog "" "$pthread_lib" ; then
3676 pthread_setname_np_wo_tid=yes
3679 ##########################################
3680 # rbd probe
3681 if test "$rbd" != "no" ; then
3682 cat > $TMPC <<EOF
3683 #include <stdio.h>
3684 #include <rbd/librbd.h>
3685 int main(void) {
3686 rados_t cluster;
3687 rados_create(&cluster, NULL);
3688 return 0;
3691 rbd_libs="-lrbd -lrados"
3692 if compile_prog "" "$rbd_libs" ; then
3693 rbd=yes
3694 else
3695 if test "$rbd" = "yes" ; then
3696 feature_not_found "rados block device" "Install librbd/ceph devel"
3698 rbd=no
3702 ##########################################
3703 # libssh probe
3704 if test "$libssh" != "no" ; then
3705 if $pkg_config --exists libssh; then
3706 libssh_cflags=$($pkg_config libssh --cflags)
3707 libssh_libs=$($pkg_config libssh --libs)
3708 libssh=yes
3709 else
3710 if test "$libssh" = "yes" ; then
3711 error_exit "libssh required for --enable-libssh"
3713 libssh=no
3717 ##########################################
3718 # Check for libssh 0.8
3719 # This is done like this instead of using the LIBSSH_VERSION_* and
3720 # SSH_VERSION_* macros because some distributions in the past shipped
3721 # snapshots of the future 0.8 from Git, and those snapshots did not
3722 # have updated version numbers (still referring to 0.7.0).
3724 if test "$libssh" = "yes"; then
3725 cat > $TMPC <<EOF
3726 #include <libssh/libssh.h>
3727 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3729 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3730 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3734 ##########################################
3735 # linux-aio probe
3737 if test "$linux_aio" != "no" ; then
3738 cat > $TMPC <<EOF
3739 #include <libaio.h>
3740 #include <sys/eventfd.h>
3741 #include <stddef.h>
3742 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3744 if compile_prog "" "-laio" ; then
3745 linux_aio=yes
3746 else
3747 if test "$linux_aio" = "yes" ; then
3748 feature_not_found "linux AIO" "Install libaio devel"
3750 linux_aio=no
3753 ##########################################
3754 # linux-io-uring probe
3756 if test "$linux_io_uring" != "no" ; then
3757 if $pkg_config liburing; then
3758 linux_io_uring_cflags=$($pkg_config --cflags liburing)
3759 linux_io_uring_libs=$($pkg_config --libs liburing)
3760 linux_io_uring=yes
3761 else
3762 if test "$linux_io_uring" = "yes" ; then
3763 feature_not_found "linux io_uring" "Install liburing devel"
3765 linux_io_uring=no
3769 ##########################################
3770 # TPM emulation is only on POSIX
3772 if test "$tpm" = ""; then
3773 if test "$mingw32" = "yes"; then
3774 tpm=no
3775 else
3776 tpm=yes
3778 elif test "$tpm" = "yes"; then
3779 if test "$mingw32" = "yes" ; then
3780 error_exit "TPM emulation only available on POSIX systems"
3784 ##########################################
3785 # attr probe
3787 libattr_libs=
3788 if test "$attr" != "no" ; then
3789 cat > $TMPC <<EOF
3790 #include <stdio.h>
3791 #include <sys/types.h>
3792 #ifdef CONFIG_LIBATTR
3793 #include <attr/xattr.h>
3794 #else
3795 #include <sys/xattr.h>
3796 #endif
3797 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3799 if compile_prog "" "" ; then
3800 attr=yes
3801 # Older distros have <attr/xattr.h>, and need -lattr:
3802 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3803 attr=yes
3804 libattr_libs="-lattr"
3805 libattr=yes
3806 else
3807 if test "$attr" = "yes" ; then
3808 feature_not_found "ATTR" "Install libc6 or libattr devel"
3810 attr=no
3814 ##########################################
3815 # iovec probe
3816 cat > $TMPC <<EOF
3817 #include <sys/types.h>
3818 #include <sys/uio.h>
3819 #include <unistd.h>
3820 int main(void) { return sizeof(struct iovec); }
3822 iovec=no
3823 if compile_prog "" "" ; then
3824 iovec=yes
3827 ##########################################
3828 # preadv probe
3829 cat > $TMPC <<EOF
3830 #include <sys/types.h>
3831 #include <sys/uio.h>
3832 #include <unistd.h>
3833 int main(void) { return preadv(0, 0, 0, 0); }
3835 preadv=no
3836 if compile_prog "" "" ; then
3837 preadv=yes
3840 ##########################################
3841 # fdt probe
3843 case "$fdt" in
3844 auto | enabled | internal)
3845 # Simpler to always update submodule, even if not needed.
3846 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
3847 git_submodules="${git_submodules} dtc"
3850 esac
3852 ##########################################
3853 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3855 gbm="no"
3856 if $pkg_config gbm; then
3857 gbm_cflags="$($pkg_config --cflags gbm)"
3858 gbm_libs="$($pkg_config --libs gbm)"
3859 gbm="yes"
3862 if test "$opengl" != "no" ; then
3863 opengl_pkgs="epoxy gbm"
3864 if $pkg_config $opengl_pkgs; then
3865 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3866 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
3867 opengl=yes
3868 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3869 gtk_gl="yes"
3871 else
3872 if test "$opengl" = "yes" ; then
3873 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3875 opengl_cflags=""
3876 opengl_libs=""
3877 opengl=no
3881 if test "$opengl" = "yes"; then
3882 cat > $TMPC << EOF
3883 #include <epoxy/egl.h>
3884 #ifndef EGL_MESA_image_dma_buf_export
3885 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3886 #endif
3887 int main(void) { return 0; }
3889 if compile_prog "" "" ; then
3890 opengl_dmabuf=yes
3894 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
3895 for target in $target_list; do
3896 case $target in
3897 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
3898 need_x11=yes
3900 esac
3901 done
3904 ##########################################
3905 # libxml2 probe
3906 if test "$libxml2" != "no" ; then
3907 if $pkg_config --exists libxml-2.0; then
3908 libxml2="yes"
3909 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3910 libxml2_libs=$($pkg_config --libs libxml-2.0)
3911 else
3912 if test "$libxml2" = "yes"; then
3913 feature_not_found "libxml2" "Install libxml2 devel"
3915 libxml2="no"
3919 ##########################################
3920 # glusterfs probe
3921 if test "$glusterfs" != "no" ; then
3922 if $pkg_config --atleast-version=3 glusterfs-api; then
3923 glusterfs="yes"
3924 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3925 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3926 if $pkg_config --atleast-version=4 glusterfs-api; then
3927 glusterfs_xlator_opt="yes"
3929 if $pkg_config --atleast-version=5 glusterfs-api; then
3930 glusterfs_discard="yes"
3932 if $pkg_config --atleast-version=6 glusterfs-api; then
3933 glusterfs_fallocate="yes"
3934 glusterfs_zerofill="yes"
3936 cat > $TMPC << EOF
3937 #include <glusterfs/api/glfs.h>
3940 main(void)
3942 /* new glfs_ftruncate() passes two additional args */
3943 return glfs_ftruncate(NULL, 0, NULL, NULL);
3946 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
3947 glusterfs_ftruncate_has_stat="yes"
3949 cat > $TMPC << EOF
3950 #include <glusterfs/api/glfs.h>
3952 /* new glfs_io_cbk() passes two additional glfs_stat structs */
3953 static void
3954 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
3958 main(void)
3960 glfs_io_cbk iocb = &glusterfs_iocb;
3961 iocb(NULL, 0 , NULL, NULL, NULL);
3962 return 0;
3965 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
3966 glusterfs_iocb_has_stat="yes"
3968 else
3969 if test "$glusterfs" = "yes" ; then
3970 feature_not_found "GlusterFS backend support" \
3971 "Install glusterfs-api devel >= 3"
3973 glusterfs="no"
3977 # Check for inotify functions when we are building linux-user
3978 # emulator. This is done because older glibc versions don't
3979 # have syscall stubs for these implemented. In that case we
3980 # don't provide them even if kernel supports them.
3982 inotify=no
3983 cat > $TMPC << EOF
3984 #include <sys/inotify.h>
3987 main(void)
3989 /* try to start inotify */
3990 return inotify_init();
3993 if compile_prog "" "" ; then
3994 inotify=yes
3997 inotify1=no
3998 cat > $TMPC << EOF
3999 #include <sys/inotify.h>
4002 main(void)
4004 /* try to start inotify */
4005 return inotify_init1(0);
4008 if compile_prog "" "" ; then
4009 inotify1=yes
4012 # check if pipe2 is there
4013 pipe2=no
4014 cat > $TMPC << EOF
4015 #include <unistd.h>
4016 #include <fcntl.h>
4018 int main(void)
4020 int pipefd[2];
4021 return pipe2(pipefd, O_CLOEXEC);
4024 if compile_prog "" "" ; then
4025 pipe2=yes
4028 # check if accept4 is there
4029 accept4=no
4030 cat > $TMPC << EOF
4031 #include <sys/socket.h>
4032 #include <stddef.h>
4034 int main(void)
4036 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4037 return 0;
4040 if compile_prog "" "" ; then
4041 accept4=yes
4044 # check if tee/splice is there. vmsplice was added same time.
4045 splice=no
4046 cat > $TMPC << EOF
4047 #include <unistd.h>
4048 #include <fcntl.h>
4049 #include <limits.h>
4051 int main(void)
4053 int len, fd = 0;
4054 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4055 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4056 return 0;
4059 if compile_prog "" "" ; then
4060 splice=yes
4063 ##########################################
4064 # libnuma probe
4066 if test "$numa" != "no" ; then
4067 cat > $TMPC << EOF
4068 #include <numa.h>
4069 int main(void) { return numa_available(); }
4072 if compile_prog "" "-lnuma" ; then
4073 numa=yes
4074 numa_libs="-lnuma"
4075 else
4076 if test "$numa" = "yes" ; then
4077 feature_not_found "numa" "install numactl devel"
4079 numa=no
4083 malloc=system
4084 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4085 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4086 exit 1
4087 elif test "$tcmalloc" = "yes" ; then
4088 malloc=tcmalloc
4089 elif test "$jemalloc" = "yes" ; then
4090 malloc=jemalloc
4093 ##########################################
4094 # signalfd probe
4095 signalfd="no"
4096 cat > $TMPC << EOF
4097 #include <unistd.h>
4098 #include <sys/syscall.h>
4099 #include <signal.h>
4100 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4103 if compile_prog "" "" ; then
4104 signalfd=yes
4107 # check if optreset global is declared by <getopt.h>
4108 optreset="no"
4109 cat > $TMPC << EOF
4110 #include <getopt.h>
4111 int main(void) { return optreset; }
4114 if compile_prog "" "" ; then
4115 optreset=yes
4118 # check if eventfd is supported
4119 eventfd=no
4120 cat > $TMPC << EOF
4121 #include <sys/eventfd.h>
4123 int main(void)
4125 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4128 if compile_prog "" "" ; then
4129 eventfd=yes
4132 # check if memfd is supported
4133 memfd=no
4134 cat > $TMPC << EOF
4135 #include <sys/mman.h>
4137 int main(void)
4139 return memfd_create("foo", MFD_ALLOW_SEALING);
4142 if compile_prog "" "" ; then
4143 memfd=yes
4146 # check for usbfs
4147 have_usbfs=no
4148 if test "$linux_user" = "yes"; then
4149 cat > $TMPC << EOF
4150 #include <linux/usbdevice_fs.h>
4152 #ifndef USBDEVFS_GET_CAPABILITIES
4153 #error "USBDEVFS_GET_CAPABILITIES undefined"
4154 #endif
4156 #ifndef USBDEVFS_DISCONNECT_CLAIM
4157 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4158 #endif
4160 int main(void)
4162 return 0;
4165 if compile_prog "" ""; then
4166 have_usbfs=yes
4170 # check for fallocate
4171 fallocate=no
4172 cat > $TMPC << EOF
4173 #include <fcntl.h>
4175 int main(void)
4177 fallocate(0, 0, 0, 0);
4178 return 0;
4181 if compile_prog "" "" ; then
4182 fallocate=yes
4185 # check for fallocate hole punching
4186 fallocate_punch_hole=no
4187 cat > $TMPC << EOF
4188 #include <fcntl.h>
4189 #include <linux/falloc.h>
4191 int main(void)
4193 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4194 return 0;
4197 if compile_prog "" "" ; then
4198 fallocate_punch_hole=yes
4201 # check that fallocate supports range zeroing inside the file
4202 fallocate_zero_range=no
4203 cat > $TMPC << EOF
4204 #include <fcntl.h>
4205 #include <linux/falloc.h>
4207 int main(void)
4209 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4210 return 0;
4213 if compile_prog "" "" ; then
4214 fallocate_zero_range=yes
4217 # check for posix_fallocate
4218 posix_fallocate=no
4219 cat > $TMPC << EOF
4220 #include <fcntl.h>
4222 int main(void)
4224 posix_fallocate(0, 0, 0);
4225 return 0;
4228 if compile_prog "" "" ; then
4229 posix_fallocate=yes
4232 # check for sync_file_range
4233 sync_file_range=no
4234 cat > $TMPC << EOF
4235 #include <fcntl.h>
4237 int main(void)
4239 sync_file_range(0, 0, 0, 0);
4240 return 0;
4243 if compile_prog "" "" ; then
4244 sync_file_range=yes
4247 # check for linux/fiemap.h and FS_IOC_FIEMAP
4248 fiemap=no
4249 cat > $TMPC << EOF
4250 #include <sys/ioctl.h>
4251 #include <linux/fs.h>
4252 #include <linux/fiemap.h>
4254 int main(void)
4256 ioctl(0, FS_IOC_FIEMAP, 0);
4257 return 0;
4260 if compile_prog "" "" ; then
4261 fiemap=yes
4264 # check for dup3
4265 dup3=no
4266 cat > $TMPC << EOF
4267 #include <unistd.h>
4269 int main(void)
4271 dup3(0, 0, 0);
4272 return 0;
4275 if compile_prog "" "" ; then
4276 dup3=yes
4279 # check for ppoll support
4280 ppoll=no
4281 cat > $TMPC << EOF
4282 #include <poll.h>
4284 int main(void)
4286 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4287 ppoll(&pfd, 1, 0, 0);
4288 return 0;
4291 if compile_prog "" "" ; then
4292 ppoll=yes
4295 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4296 prctl_pr_set_timerslack=no
4297 cat > $TMPC << EOF
4298 #include <sys/prctl.h>
4300 int main(void)
4302 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4303 return 0;
4306 if compile_prog "" "" ; then
4307 prctl_pr_set_timerslack=yes
4310 # check for epoll support
4311 epoll=no
4312 cat > $TMPC << EOF
4313 #include <sys/epoll.h>
4315 int main(void)
4317 epoll_create(0);
4318 return 0;
4321 if compile_prog "" "" ; then
4322 epoll=yes
4325 # epoll_create1 is a later addition
4326 # so we must check separately for its presence
4327 epoll_create1=no
4328 cat > $TMPC << EOF
4329 #include <sys/epoll.h>
4331 int main(void)
4333 /* Note that we use epoll_create1 as a value, not as
4334 * a function being called. This is necessary so that on
4335 * old SPARC glibc versions where the function was present in
4336 * the library but not declared in the header file we will
4337 * fail the configure check. (Otherwise we will get a compiler
4338 * warning but not an error, and will proceed to fail the
4339 * qemu compile where we compile with -Werror.)
4341 return (int)(uintptr_t)&epoll_create1;
4344 if compile_prog "" "" ; then
4345 epoll_create1=yes
4348 # check for sendfile support
4349 sendfile=no
4350 cat > $TMPC << EOF
4351 #include <sys/sendfile.h>
4353 int main(void)
4355 return sendfile(0, 0, 0, 0);
4358 if compile_prog "" "" ; then
4359 sendfile=yes
4362 # check for timerfd support (glibc 2.8 and newer)
4363 timerfd=no
4364 cat > $TMPC << EOF
4365 #include <sys/timerfd.h>
4367 int main(void)
4369 return(timerfd_create(CLOCK_REALTIME, 0));
4372 if compile_prog "" "" ; then
4373 timerfd=yes
4376 # check for setns and unshare support
4377 setns=no
4378 cat > $TMPC << EOF
4379 #include <sched.h>
4381 int main(void)
4383 int ret;
4384 ret = setns(0, 0);
4385 ret = unshare(0);
4386 return ret;
4389 if compile_prog "" "" ; then
4390 setns=yes
4393 # clock_adjtime probe
4394 clock_adjtime=no
4395 cat > $TMPC <<EOF
4396 #include <time.h>
4398 int main(void)
4400 return clock_adjtime(0, 0);
4403 clock_adjtime=no
4404 if compile_prog "" "" ; then
4405 clock_adjtime=yes
4408 # syncfs probe
4409 syncfs=no
4410 cat > $TMPC <<EOF
4411 #include <unistd.h>
4413 int main(void)
4415 return syncfs(0);
4418 syncfs=no
4419 if compile_prog "" "" ; then
4420 syncfs=yes
4423 # check for kcov support (kernel must be 4.4+, compiled with certain options)
4424 kcov=no
4425 if check_include sys/kcov.h ; then
4426 kcov=yes
4429 # check for btrfs filesystem support (kernel must be 3.9+)
4430 btrfs=no
4431 if check_include linux/btrfs.h ; then
4432 btrfs=yes
4435 # Search for bswap_32 function
4436 byteswap_h=no
4437 cat > $TMPC << EOF
4438 #include <byteswap.h>
4439 int main(void) { return bswap_32(0); }
4441 if compile_prog "" "" ; then
4442 byteswap_h=yes
4445 # Search for bswap32 function
4446 bswap_h=no
4447 cat > $TMPC << EOF
4448 #include <sys/endian.h>
4449 #include <sys/types.h>
4450 #include <machine/bswap.h>
4451 int main(void) { return bswap32(0); }
4453 if compile_prog "" "" ; then
4454 bswap_h=yes
4457 ##########################################
4458 # Do we have libiscsi >= 1.9.0
4459 if test "$libiscsi" != "no" ; then
4460 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4461 libiscsi="yes"
4462 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4463 libiscsi_libs=$($pkg_config --libs libiscsi)
4464 else
4465 if test "$libiscsi" = "yes" ; then
4466 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4468 libiscsi="no"
4472 ##########################################
4473 # Do we need librt
4474 # uClibc provides 2 versions of clock_gettime(), one with realtime
4475 # support and one without. This means that the clock_gettime() don't
4476 # need -lrt. We still need it for timer_create() so we check for this
4477 # function in addition.
4478 cat > $TMPC <<EOF
4479 #include <signal.h>
4480 #include <time.h>
4481 int main(void) {
4482 timer_create(CLOCK_REALTIME, NULL, NULL);
4483 return clock_gettime(CLOCK_REALTIME, NULL);
4487 if compile_prog "" "" ; then
4489 # we need pthread for static linking. use previous pthread test result
4490 elif compile_prog "" "$pthread_lib -lrt" ; then
4491 LIBS="$LIBS -lrt"
4494 # Check whether we have openpty() in either libc or libutil
4495 cat > $TMPC << EOF
4496 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4497 int main(void) { return openpty(0, 0, 0, 0, 0); }
4500 have_openpty="no"
4501 if compile_prog "" "" ; then
4502 have_openpty="yes"
4503 else
4504 if compile_prog "" "-lutil" ; then
4505 have_openpty="yes"
4509 ##########################################
4510 # spice probe
4511 if test "$spice" != "no" ; then
4512 cat > $TMPC << EOF
4513 #include <spice.h>
4514 int main(void) { spice_server_new(); return 0; }
4516 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4517 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4518 if $pkg_config --atleast-version=0.12.5 spice-server && \
4519 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4520 compile_prog "$spice_cflags" "$spice_libs" ; then
4521 spice="yes"
4522 else
4523 if test "$spice" = "yes" ; then
4524 feature_not_found "spice" \
4525 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4527 spice="no"
4531 # check for smartcard support
4532 if test "$smartcard" != "no"; then
4533 if $pkg_config --atleast-version=2.5.1 libcacard; then
4534 libcacard_cflags=$($pkg_config --cflags libcacard)
4535 libcacard_libs=$($pkg_config --libs libcacard)
4536 smartcard="yes"
4537 else
4538 if test "$smartcard" = "yes"; then
4539 feature_not_found "smartcard" "Install libcacard devel"
4541 smartcard="no"
4545 # check for libusb
4546 if test "$libusb" != "no" ; then
4547 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4548 libusb="yes"
4549 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4550 libusb_libs=$($pkg_config --libs libusb-1.0)
4551 else
4552 if test "$libusb" = "yes"; then
4553 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4555 libusb="no"
4559 # check for usbredirparser for usb network redirection support
4560 if test "$usb_redir" != "no" ; then
4561 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4562 usb_redir="yes"
4563 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4564 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4565 else
4566 if test "$usb_redir" = "yes"; then
4567 feature_not_found "usb-redir" "Install usbredir devel"
4569 usb_redir="no"
4573 ##########################################
4574 # check if we have VSS SDK headers for win
4576 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4577 test "$vss_win32_sdk" != "no" ; then
4578 case "$vss_win32_sdk" in
4579 "") vss_win32_include="-isystem $source_path" ;;
4580 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4581 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4582 vss_win32_include="-isystem $source_path/.sdk/vss"
4583 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4585 *) vss_win32_include="-isystem $vss_win32_sdk"
4586 esac
4587 cat > $TMPC << EOF
4588 #define __MIDL_user_allocate_free_DEFINED__
4589 #include <inc/win2003/vss.h>
4590 int main(void) { return VSS_CTX_BACKUP; }
4592 if compile_prog "$vss_win32_include" "" ; then
4593 guest_agent_with_vss="yes"
4594 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4595 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4596 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4597 else
4598 if test "$vss_win32_sdk" != "" ; then
4599 echo "ERROR: Please download and install Microsoft VSS SDK:"
4600 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4601 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4602 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4603 echo "ERROR: The headers are extracted in the directory \`inc'."
4604 feature_not_found "VSS support"
4606 guest_agent_with_vss="no"
4610 ##########################################
4611 # lookup Windows platform SDK (if not specified)
4612 # The SDK is needed only to build .tlb (type library) file of guest agent
4613 # VSS provider from the source. It is usually unnecessary because the
4614 # pre-compiled .tlb file is included.
4616 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4617 test "$guest_agent_with_vss" = "yes" ; then
4618 if test -z "$win_sdk"; then
4619 programfiles="$PROGRAMFILES"
4620 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4621 if test -n "$programfiles"; then
4622 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4623 else
4624 feature_not_found "Windows SDK"
4626 elif test "$win_sdk" = "no"; then
4627 win_sdk=""
4631 ##########################################
4632 # check if mingw environment provides a recent ntddscsi.h
4633 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4634 cat > $TMPC << EOF
4635 #include <windows.h>
4636 #include <ntddscsi.h>
4637 int main(void) {
4638 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4639 #error Missing required ioctl definitions
4640 #endif
4641 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4642 return addr.Lun;
4645 if compile_prog "" "" ; then
4646 guest_agent_ntddscsi=yes
4647 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4651 ##########################################
4652 # virgl renderer probe
4654 if test "$virglrenderer" != "no" ; then
4655 cat > $TMPC << EOF
4656 #include <virglrenderer.h>
4657 int main(void) { virgl_renderer_poll(); return 0; }
4659 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4660 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4661 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4662 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4663 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4664 virglrenderer="yes"
4665 else
4666 if test "$virglrenderer" = "yes" ; then
4667 feature_not_found "virglrenderer"
4669 virglrenderer="no"
4673 ##########################################
4674 # capstone
4676 case "$capstone" in
4677 auto | enabled | internal)
4678 # Simpler to always update submodule, even if not needed.
4679 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
4680 git_submodules="${git_submodules} capstone"
4683 esac
4685 ##########################################
4686 # check if we have fdatasync
4688 fdatasync=no
4689 cat > $TMPC << EOF
4690 #include <unistd.h>
4691 int main(void) {
4692 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4693 return fdatasync(0);
4694 #else
4695 #error Not supported
4696 #endif
4699 if compile_prog "" "" ; then
4700 fdatasync=yes
4703 ##########################################
4704 # check if we have madvise
4706 madvise=no
4707 cat > $TMPC << EOF
4708 #include <sys/types.h>
4709 #include <sys/mman.h>
4710 #include <stddef.h>
4711 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4713 if compile_prog "" "" ; then
4714 madvise=yes
4717 ##########################################
4718 # check if we have posix_madvise
4720 posix_madvise=no
4721 cat > $TMPC << EOF
4722 #include <sys/mman.h>
4723 #include <stddef.h>
4724 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4726 if compile_prog "" "" ; then
4727 posix_madvise=yes
4730 ##########################################
4731 # check if we have posix_memalign()
4733 posix_memalign=no
4734 cat > $TMPC << EOF
4735 #include <stdlib.h>
4736 int main(void) {
4737 void *p;
4738 return posix_memalign(&p, 8, 8);
4741 if compile_prog "" "" ; then
4742 posix_memalign=yes
4745 ##########################################
4746 # check if we have posix_syslog
4748 posix_syslog=no
4749 cat > $TMPC << EOF
4750 #include <syslog.h>
4751 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4753 if compile_prog "" "" ; then
4754 posix_syslog=yes
4757 ##########################################
4758 # check if we have sem_timedwait
4760 sem_timedwait=no
4761 cat > $TMPC << EOF
4762 #include <semaphore.h>
4763 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
4765 if compile_prog "" "" ; then
4766 sem_timedwait=yes
4769 ##########################################
4770 # check if we have strchrnul
4772 strchrnul=no
4773 cat > $TMPC << EOF
4774 #include <string.h>
4775 int main(void);
4776 // Use a haystack that the compiler shouldn't be able to constant fold
4777 char *haystack = (char*)&main;
4778 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4780 if compile_prog "" "" ; then
4781 strchrnul=yes
4784 #########################################
4785 # check if we have st_atim
4787 st_atim=no
4788 cat > $TMPC << EOF
4789 #include <sys/stat.h>
4790 #include <stddef.h>
4791 int main(void) { return offsetof(struct stat, st_atim); }
4793 if compile_prog "" "" ; then
4794 st_atim=yes
4797 ##########################################
4798 # check if trace backend exists
4800 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4801 if test "$?" -ne 0 ; then
4802 error_exit "invalid trace backends" \
4803 "Please choose supported trace backends."
4806 ##########################################
4807 # For 'ust' backend, test if ust headers are present
4808 if have_backend "ust"; then
4809 cat > $TMPC << EOF
4810 #include <lttng/tracepoint.h>
4811 int main(void) { return 0; }
4813 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4814 if $pkg_config lttng-ust --exists; then
4815 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4816 else
4817 lttng_ust_libs="-llttng-ust -ldl"
4819 if $pkg_config liburcu-bp --exists; then
4820 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4821 else
4822 urcu_bp_libs="-lurcu-bp"
4824 else
4825 error_exit "Trace backend 'ust' missing lttng-ust header files"
4829 ##########################################
4830 # For 'dtrace' backend, test if 'dtrace' command is present
4831 if have_backend "dtrace"; then
4832 if ! has 'dtrace' ; then
4833 error_exit "dtrace command is not found in PATH $PATH"
4835 trace_backend_stap="no"
4836 if has 'stap' ; then
4837 trace_backend_stap="yes"
4839 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
4840 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
4841 # instead. QEMU --enable-modules depends on this because the SystemTap
4842 # semaphores are linked into the main binary and not the module's shared
4843 # object.
4844 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
4848 ##########################################
4849 # check and set a backend for coroutine
4851 # We prefer ucontext, but it's not always possible. The fallback
4852 # is sigcontext. On Windows the only valid backend is the Windows
4853 # specific one.
4855 ucontext_works=no
4856 if test "$darwin" != "yes"; then
4857 cat > $TMPC << EOF
4858 #include <ucontext.h>
4859 #ifdef __stub_makecontext
4860 #error Ignoring glibc stub makecontext which will always fail
4861 #endif
4862 int main(void) { makecontext(0, 0, 0); return 0; }
4864 if compile_prog "" "" ; then
4865 ucontext_works=yes
4869 if test "$coroutine" = ""; then
4870 if test "$mingw32" = "yes"; then
4871 coroutine=win32
4872 elif test "$ucontext_works" = "yes"; then
4873 coroutine=ucontext
4874 else
4875 coroutine=sigaltstack
4877 else
4878 case $coroutine in
4879 windows)
4880 if test "$mingw32" != "yes"; then
4881 error_exit "'windows' coroutine backend only valid for Windows"
4883 # Unfortunately the user visible backend name doesn't match the
4884 # coroutine-*.c filename for this case, so we have to adjust it here.
4885 coroutine=win32
4887 ucontext)
4888 if test "$ucontext_works" != "yes"; then
4889 feature_not_found "ucontext"
4892 sigaltstack)
4893 if test "$mingw32" = "yes"; then
4894 error_exit "only the 'windows' coroutine backend is valid for Windows"
4898 error_exit "unknown coroutine backend $coroutine"
4900 esac
4903 if test "$coroutine_pool" = ""; then
4904 coroutine_pool=yes
4907 if test "$debug_stack_usage" = "yes"; then
4908 if test "$coroutine_pool" = "yes"; then
4909 echo "WARN: disabling coroutine pool for stack usage debugging"
4910 coroutine_pool=no
4914 ##################################################
4915 # SafeStack
4918 if test "$safe_stack" = "yes"; then
4919 cat > $TMPC << EOF
4920 int main(int argc, char *argv[])
4922 #if ! __has_feature(safe_stack)
4923 #error SafeStack Disabled
4924 #endif
4925 return 0;
4928 flag="-fsanitize=safe-stack"
4929 # Check that safe-stack is supported and enabled.
4930 if compile_prog "-Werror $flag" "$flag"; then
4931 # Flag needed both at compilation and at linking
4932 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4933 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4934 else
4935 error_exit "SafeStack not supported by your compiler"
4937 if test "$coroutine" != "ucontext"; then
4938 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4940 else
4941 cat > $TMPC << EOF
4942 int main(int argc, char *argv[])
4944 #if defined(__has_feature)
4945 #if __has_feature(safe_stack)
4946 #error SafeStack Enabled
4947 #endif
4948 #endif
4949 return 0;
4952 if test "$safe_stack" = "no"; then
4953 # Make sure that safe-stack is disabled
4954 if ! compile_prog "-Werror" ""; then
4955 # SafeStack was already enabled, try to explicitly remove the feature
4956 flag="-fno-sanitize=safe-stack"
4957 if ! compile_prog "-Werror $flag" "$flag"; then
4958 error_exit "Configure cannot disable SafeStack"
4960 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4961 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4963 else # "$safe_stack" = ""
4964 # Set safe_stack to yes or no based on pre-existing flags
4965 if compile_prog "-Werror" ""; then
4966 safe_stack="no"
4967 else
4968 safe_stack="yes"
4969 if test "$coroutine" != "ucontext"; then
4970 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4976 ##########################################
4977 # check if we have open_by_handle_at
4979 open_by_handle_at=no
4980 cat > $TMPC << EOF
4981 #include <fcntl.h>
4982 #if !defined(AT_EMPTY_PATH)
4983 # error missing definition
4984 #else
4985 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4986 #endif
4988 if compile_prog "" "" ; then
4989 open_by_handle_at=yes
4992 ########################################
4993 # check if we have linux/magic.h
4995 linux_magic_h=no
4996 cat > $TMPC << EOF
4997 #include <linux/magic.h>
4998 int main(void) {
4999 return 0;
5002 if compile_prog "" "" ; then
5003 linux_magic_h=yes
5006 ########################################
5007 # check if we have valgrind/valgrind.h
5009 valgrind_h=no
5010 cat > $TMPC << EOF
5011 #include <valgrind/valgrind.h>
5012 int main(void) {
5013 return 0;
5016 if compile_prog "" "" ; then
5017 valgrind_h=yes
5020 ########################################
5021 # check if environ is declared
5023 has_environ=no
5024 cat > $TMPC << EOF
5025 #include <unistd.h>
5026 int main(void) {
5027 environ = 0;
5028 return 0;
5031 if compile_prog "" "" ; then
5032 has_environ=yes
5035 ########################################
5036 # check if cpuid.h is usable.
5038 cat > $TMPC << EOF
5039 #include <cpuid.h>
5040 int main(void) {
5041 unsigned a, b, c, d;
5042 int max = __get_cpuid_max(0, 0);
5044 if (max >= 1) {
5045 __cpuid(1, a, b, c, d);
5048 if (max >= 7) {
5049 __cpuid_count(7, 0, a, b, c, d);
5052 return 0;
5055 if compile_prog "" "" ; then
5056 cpuid_h=yes
5059 ##########################################
5060 # avx2 optimization requirement check
5062 # There is no point enabling this if cpuid.h is not usable,
5063 # since we won't be able to select the new routines.
5065 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5066 cat > $TMPC << EOF
5067 #pragma GCC push_options
5068 #pragma GCC target("avx2")
5069 #include <cpuid.h>
5070 #include <immintrin.h>
5071 static int bar(void *a) {
5072 __m256i x = *(__m256i *)a;
5073 return _mm256_testz_si256(x, x);
5075 int main(int argc, char *argv[]) { return bar(argv[0]); }
5077 if compile_object "" ; then
5078 avx2_opt="yes"
5079 else
5080 avx2_opt="no"
5084 ##########################################
5085 # avx512f optimization requirement check
5087 # There is no point enabling this if cpuid.h is not usable,
5088 # since we won't be able to select the new routines.
5089 # by default, it is turned off.
5090 # if user explicitly want to enable it, check environment
5092 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5093 cat > $TMPC << EOF
5094 #pragma GCC push_options
5095 #pragma GCC target("avx512f")
5096 #include <cpuid.h>
5097 #include <immintrin.h>
5098 static int bar(void *a) {
5099 __m512i x = *(__m512i *)a;
5100 return _mm512_test_epi64_mask(x, x);
5102 int main(int argc, char *argv[])
5104 return bar(argv[0]);
5107 if ! compile_object "" ; then
5108 avx512f_opt="no"
5110 else
5111 avx512f_opt="no"
5114 ########################################
5115 # check if __[u]int128_t is usable.
5117 int128=no
5118 cat > $TMPC << EOF
5119 __int128_t a;
5120 __uint128_t b;
5121 int main (void) {
5122 a = a + b;
5123 b = a * b;
5124 a = a * a;
5125 return 0;
5128 if compile_prog "" "" ; then
5129 int128=yes
5132 #########################################
5133 # See if 128-bit atomic operations are supported.
5135 atomic128=no
5136 if test "$int128" = "yes"; then
5137 cat > $TMPC << EOF
5138 int main(void)
5140 unsigned __int128 x = 0, y = 0;
5141 y = __atomic_load_16(&x, 0);
5142 __atomic_store_16(&x, y, 0);
5143 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5144 return 0;
5147 if compile_prog "" "" ; then
5148 atomic128=yes
5152 cmpxchg128=no
5153 if test "$int128" = yes && test "$atomic128" = no; then
5154 cat > $TMPC << EOF
5155 int main(void)
5157 unsigned __int128 x = 0, y = 0;
5158 __sync_val_compare_and_swap_16(&x, y, x);
5159 return 0;
5162 if compile_prog "" "" ; then
5163 cmpxchg128=yes
5167 #########################################
5168 # See if 64-bit atomic operations are supported.
5169 # Note that without __atomic builtins, we can only
5170 # assume atomic loads/stores max at pointer size.
5172 cat > $TMPC << EOF
5173 #include <stdint.h>
5174 int main(void)
5176 uint64_t x = 0, y = 0;
5177 #ifdef __ATOMIC_RELAXED
5178 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
5179 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
5180 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
5181 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
5182 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
5183 #else
5184 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5185 __sync_lock_test_and_set(&x, y);
5186 __sync_val_compare_and_swap(&x, y, 0);
5187 __sync_fetch_and_add(&x, y);
5188 #endif
5189 return 0;
5192 if compile_prog "" "" ; then
5193 atomic64=yes
5196 #########################################
5197 # See if --dynamic-list is supported by the linker
5198 ld_dynamic_list="no"
5199 if test "$static" = "no" ; then
5200 cat > $TMPTXT <<EOF
5202 foo;
5206 cat > $TMPC <<EOF
5207 #include <stdio.h>
5208 void foo(void);
5210 void foo(void)
5212 printf("foo\n");
5215 int main(void)
5217 foo();
5218 return 0;
5222 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5223 ld_dynamic_list="yes"
5227 #########################################
5228 # See if -exported_symbols_list is supported by the linker
5230 ld_exported_symbols_list="no"
5231 if test "$static" = "no" ; then
5232 cat > $TMPTXT <<EOF
5233 _foo
5236 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5237 ld_exported_symbols_list="yes"
5241 if test "$plugins" = "yes" &&
5242 test "$ld_dynamic_list" = "no" &&
5243 test "$ld_exported_symbols_list" = "no" ; then
5244 error_exit \
5245 "Plugin support requires dynamic linking and specifying a set of symbols " \
5246 "that are exported to plugins. Unfortunately your linker doesn't " \
5247 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5248 "for this purpose. You can't build with --static."
5251 ########################################
5252 # See if __attribute__((alias)) is supported.
5253 # This false for Xcode 9, but has been remedied for Xcode 10.
5254 # Unfortunately, travis uses Xcode 9 by default.
5256 attralias=no
5257 cat > $TMPC << EOF
5258 int x = 1;
5259 extern const int y __attribute__((alias("x")));
5260 int main(void) { return 0; }
5262 if compile_prog "" "" ; then
5263 attralias=yes
5266 ########################################
5267 # check if getauxval is available.
5269 getauxval=no
5270 cat > $TMPC << EOF
5271 #include <sys/auxv.h>
5272 int main(void) {
5273 return getauxval(AT_HWCAP) == 0;
5276 if compile_prog "" "" ; then
5277 getauxval=yes
5280 ########################################
5281 # check if ccache is interfering with
5282 # semantic analysis of macros
5284 unset CCACHE_CPP2
5285 ccache_cpp2=no
5286 cat > $TMPC << EOF
5287 static const int Z = 1;
5288 #define fn() ({ Z; })
5289 #define TAUT(X) ((X) == Z)
5290 #define PAREN(X, Y) (X == Y)
5291 #define ID(X) (X)
5292 int main(int argc, char *argv[])
5294 int x = 0, y = 0;
5295 x = ID(x);
5296 x = fn();
5297 fn();
5298 if (PAREN(x, y)) return 0;
5299 if (TAUT(Z)) return 0;
5300 return 0;
5304 if ! compile_object "-Werror"; then
5305 ccache_cpp2=yes
5308 #################################################
5309 # clang does not support glibc + FORTIFY_SOURCE.
5311 if test "$fortify_source" != "no"; then
5312 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5313 fortify_source="no";
5314 elif test -n "$cxx" && has $cxx &&
5315 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5316 fortify_source="no";
5317 else
5318 fortify_source="yes"
5322 ###############################################
5323 # Check if copy_file_range is provided by glibc
5324 have_copy_file_range=no
5325 cat > $TMPC << EOF
5326 #include <unistd.h>
5327 int main(void) {
5328 copy_file_range(0, NULL, 0, NULL, 0, 0);
5329 return 0;
5332 if compile_prog "" "" ; then
5333 have_copy_file_range=yes
5336 ##########################################
5337 # check if struct fsxattr is available via linux/fs.h
5339 have_fsxattr=no
5340 cat > $TMPC << EOF
5341 #include <linux/fs.h>
5342 struct fsxattr foo;
5343 int main(void) {
5344 return 0;
5347 if compile_prog "" "" ; then
5348 have_fsxattr=yes
5351 ##########################################
5352 # check for usable membarrier system call
5353 if test "$membarrier" = "yes"; then
5354 have_membarrier=no
5355 if test "$mingw32" = "yes" ; then
5356 have_membarrier=yes
5357 elif test "$linux" = "yes" ; then
5358 cat > $TMPC << EOF
5359 #include <linux/membarrier.h>
5360 #include <sys/syscall.h>
5361 #include <unistd.h>
5362 #include <stdlib.h>
5363 int main(void) {
5364 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5365 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5366 exit(0);
5369 if compile_prog "" "" ; then
5370 have_membarrier=yes
5373 if test "$have_membarrier" = "no"; then
5374 feature_not_found "membarrier" "membarrier system call not available"
5376 else
5377 # Do not enable it by default even for Mingw32, because it doesn't
5378 # work on Wine.
5379 membarrier=no
5382 ##########################################
5383 # check if rtnetlink.h exists and is useful
5384 have_rtnetlink=no
5385 cat > $TMPC << EOF
5386 #include <linux/rtnetlink.h>
5387 int main(void) {
5388 return IFLA_PROTO_DOWN;
5391 if compile_prog "" "" ; then
5392 have_rtnetlink=yes
5395 ##########################################
5396 # check for usable AF_VSOCK environment
5397 have_af_vsock=no
5398 cat > $TMPC << EOF
5399 #include <errno.h>
5400 #include <sys/types.h>
5401 #include <sys/socket.h>
5402 #if !defined(AF_VSOCK)
5403 # error missing AF_VSOCK flag
5404 #endif
5405 #include <linux/vm_sockets.h>
5406 int main(void) {
5407 int sock, ret;
5408 struct sockaddr_vm svm;
5409 socklen_t len = sizeof(svm);
5410 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5411 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5412 if ((ret == -1) && (errno == ENOTCONN)) {
5413 return 0;
5415 return -1;
5418 if compile_prog "" "" ; then
5419 have_af_vsock=yes
5422 ##########################################
5423 # check for usable AF_ALG environment
5424 have_afalg=no
5425 cat > $TMPC << EOF
5426 #include <errno.h>
5427 #include <sys/types.h>
5428 #include <sys/socket.h>
5429 #include <linux/if_alg.h>
5430 int main(void) {
5431 int sock;
5432 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5433 return sock;
5436 if compile_prog "" "" ; then
5437 have_afalg=yes
5439 if test "$crypto_afalg" = "yes"
5440 then
5441 if test "$have_afalg" != "yes"
5442 then
5443 error_exit "AF_ALG requested but could not be detected"
5448 #################################################
5449 # check for sysmacros.h
5451 have_sysmacros=no
5452 cat > $TMPC << EOF
5453 #include <sys/sysmacros.h>
5454 int main(void) {
5455 return makedev(0, 0);
5458 if compile_prog "" "" ; then
5459 have_sysmacros=yes
5462 ##########################################
5463 # check for _Static_assert()
5465 have_static_assert=no
5466 cat > $TMPC << EOF
5467 _Static_assert(1, "success");
5468 int main(void) {
5469 return 0;
5472 if compile_prog "" "" ; then
5473 have_static_assert=yes
5476 ##########################################
5477 # check for utmpx.h, it is missing e.g. on OpenBSD
5479 have_utmpx=no
5480 cat > $TMPC << EOF
5481 #include <utmpx.h>
5482 struct utmpx user_info;
5483 int main(void) {
5484 return 0;
5487 if compile_prog "" "" ; then
5488 have_utmpx=yes
5491 ##########################################
5492 # check for getrandom()
5494 have_getrandom=no
5495 cat > $TMPC << EOF
5496 #include <sys/random.h>
5497 int main(void) {
5498 return getrandom(0, 0, GRND_NONBLOCK);
5501 if compile_prog "" "" ; then
5502 have_getrandom=yes
5505 ##########################################
5506 # checks for sanitizers
5508 have_asan=no
5509 have_ubsan=no
5510 have_asan_iface_h=no
5511 have_asan_iface_fiber=no
5513 if test "$sanitizers" = "yes" ; then
5514 write_c_skeleton
5515 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5516 have_asan=yes
5519 # we could use a simple skeleton for flags checks, but this also
5520 # detect the static linking issue of ubsan, see also:
5521 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5522 cat > $TMPC << EOF
5523 #include <stdlib.h>
5524 int main(void) {
5525 void *tmp = malloc(10);
5526 if (tmp != NULL) {
5527 return *(int *)(tmp + 2);
5529 return 1;
5532 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5533 have_ubsan=yes
5536 if check_include "sanitizer/asan_interface.h" ; then
5537 have_asan_iface_h=yes
5540 cat > $TMPC << EOF
5541 #include <sanitizer/asan_interface.h>
5542 int main(void) {
5543 __sanitizer_start_switch_fiber(0, 0, 0);
5544 return 0;
5547 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5548 have_asan_iface_fiber=yes
5552 ##########################################
5553 # checks for fuzzer
5554 if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
5555 write_c_fuzzer_skeleton
5556 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
5557 have_fuzzer=yes
5558 else
5559 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
5560 exit 1
5564 # Thread sanitizer is, for now, much noisier than the other sanitizers;
5565 # keep it separate until that is not the case.
5566 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
5567 error_exit "TSAN is not supported with other sanitiziers."
5569 have_tsan=no
5570 have_tsan_iface_fiber=no
5571 if test "$tsan" = "yes" ; then
5572 write_c_skeleton
5573 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5574 have_tsan=yes
5576 cat > $TMPC << EOF
5577 #include <sanitizer/tsan_interface.h>
5578 int main(void) {
5579 __tsan_create_fiber(0);
5580 return 0;
5583 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5584 have_tsan_iface_fiber=yes
5588 ##########################################
5589 # check for libpmem
5591 if test "$libpmem" != "no"; then
5592 if $pkg_config --exists "libpmem"; then
5593 libpmem="yes"
5594 libpmem_libs=$($pkg_config --libs libpmem)
5595 libpmem_cflags=$($pkg_config --cflags libpmem)
5596 else
5597 if test "$libpmem" = "yes" ; then
5598 feature_not_found "libpmem" "Install nvml or pmdk"
5600 libpmem="no"
5604 ##########################################
5605 # check for libdaxctl
5607 if test "$libdaxctl" != "no"; then
5608 if $pkg_config --atleast-version=57 "libdaxctl"; then
5609 libdaxctl="yes"
5610 libdaxctl_libs=$($pkg_config --libs libdaxctl)
5611 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
5612 else
5613 if test "$libdaxctl" = "yes" ; then
5614 feature_not_found "libdaxctl" "Install libdaxctl"
5616 libdaxctl="no"
5620 ##########################################
5621 # check for slirp
5623 case "$slirp" in
5624 auto | enabled | internal)
5625 # Simpler to always update submodule, even if not needed.
5626 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5627 git_submodules="${git_submodules} slirp"
5630 esac
5632 ##########################################
5633 # check for usable __NR_keyctl syscall
5635 if test "$linux" = "yes" ; then
5637 have_keyring=no
5638 cat > $TMPC << EOF
5639 #include <errno.h>
5640 #include <asm/unistd.h>
5641 #include <linux/keyctl.h>
5642 #include <unistd.h>
5643 int main(void) {
5644 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
5647 if compile_prog "" "" ; then
5648 have_keyring=yes
5651 if test "$secret_keyring" != "no"
5652 then
5653 if test "$have_keyring" = "yes"
5654 then
5655 secret_keyring=yes
5656 else
5657 if test "$secret_keyring" = "yes"
5658 then
5659 error_exit "syscall __NR_keyctl requested, \
5660 but not implemented on your system"
5661 else
5662 secret_keyring=no
5667 ##########################################
5668 # End of CC checks
5669 # After here, no more $cc or $ld runs
5671 write_c_skeleton
5673 if test "$gcov" = "yes" ; then
5675 elif test "$fortify_source" = "yes" ; then
5676 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5677 debug=no
5680 case "$ARCH" in
5681 alpha)
5682 # Ensure there's only a single GP
5683 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
5685 esac
5687 if test "$gprof" = "yes" ; then
5688 QEMU_CFLAGS="-p $QEMU_CFLAGS"
5689 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
5692 if test "$have_asan" = "yes"; then
5693 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
5694 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
5695 if test "$have_asan_iface_h" = "no" ; then
5696 echo "ASAN build enabled, but ASAN header missing." \
5697 "Without code annotation, the report may be inferior."
5698 elif test "$have_asan_iface_fiber" = "no" ; then
5699 echo "ASAN build enabled, but ASAN header is too old." \
5700 "Without code annotation, the report may be inferior."
5703 if test "$have_tsan" = "yes" ; then
5704 if test "$have_tsan_iface_fiber" = "yes" ; then
5705 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
5706 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
5707 else
5708 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
5710 elif test "$tsan" = "yes" ; then
5711 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
5713 if test "$have_ubsan" = "yes"; then
5714 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
5715 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
5718 ##########################################
5719 # Do we have libnfs
5720 if test "$libnfs" != "no" ; then
5721 if $pkg_config --atleast-version=1.9.3 libnfs; then
5722 libnfs="yes"
5723 libnfs_libs=$($pkg_config --libs libnfs)
5724 else
5725 if test "$libnfs" = "yes" ; then
5726 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5728 libnfs="no"
5732 ##########################################
5734 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
5735 if test "$solaris" = "no" && test "$tsan" = "no"; then
5736 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5737 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
5741 # Use ASLR, no-SEH and DEP if available
5742 if test "$mingw32" = "yes" ; then
5743 flags="--no-seh --nxcompat"
5745 # Disable ASLR for debug builds to allow debugging with gdb
5746 if test "$debug" = "no" ; then
5747 flags="--dynamicbase $flags"
5750 for flag in $flags; do
5751 if ld_has $flag ; then
5752 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
5754 done
5757 # We can only support ivshmem if we have eventfd
5758 if [ "$eventfd" = "yes" ]; then
5759 ivshmem=yes
5762 if test "$softmmu" = yes ; then
5763 if test "$linux" = yes; then
5764 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
5765 virtfs=yes
5766 else
5767 if test "$virtfs" = yes; then
5768 error_exit "VirtFS requires libcap-ng devel and libattr devel"
5770 virtfs=no
5772 else
5773 if test "$virtfs" = yes; then
5774 error_exit "VirtFS is supported only on Linux"
5776 virtfs=no
5780 # Probe for guest agent support/options
5782 if [ "$guest_agent" != "no" ]; then
5783 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
5784 guest_agent=no
5785 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5786 guest_agent=yes
5787 elif [ "$guest_agent" != yes ]; then
5788 guest_agent=no
5789 else
5790 error_exit "Guest agent is not supported on this platform"
5794 # Guest agent Window MSI package
5796 if test "$guest_agent" != yes; then
5797 if test "$guest_agent_msi" = yes; then
5798 error_exit "MSI guest agent package requires guest agent enabled"
5800 guest_agent_msi=no
5801 elif test "$mingw32" != "yes"; then
5802 if test "$guest_agent_msi" = "yes"; then
5803 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5805 guest_agent_msi=no
5806 elif ! has wixl; then
5807 if test "$guest_agent_msi" = "yes"; then
5808 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5810 guest_agent_msi=no
5811 else
5812 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5813 # disabled explicitly
5814 if test "$guest_agent_msi" != "no"; then
5815 guest_agent_msi=yes
5819 if test "$guest_agent_msi" = "yes"; then
5820 if test "$guest_agent_with_vss" = "yes"; then
5821 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5824 if test "$QEMU_GA_MANUFACTURER" = ""; then
5825 QEMU_GA_MANUFACTURER=QEMU
5828 if test "$QEMU_GA_DISTRO" = ""; then
5829 QEMU_GA_DISTRO=Linux
5832 if test "$QEMU_GA_VERSION" = ""; then
5833 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5836 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5838 case "$cpu" in
5839 x86_64)
5840 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5842 i386)
5843 QEMU_GA_MSI_ARCH="-D Arch=32"
5846 error_exit "CPU $cpu not supported for building installation package"
5848 esac
5851 # Mac OS X ships with a broken assembler
5852 roms=
5853 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5854 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
5855 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
5856 # Different host OS linkers have different ideas about the name of the ELF
5857 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5858 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5859 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5860 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5861 ld_i386_emulation="$emu"
5862 roms="optionrom"
5863 break
5865 done
5868 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
5869 if test "$cpu" = "s390x" ; then
5870 write_c_skeleton
5871 if compile_prog "-march=z900" ""; then
5872 roms="$roms s390-ccw"
5873 # SLOF is required for building the s390-ccw firmware on s390x,
5874 # since it is using the libnet code from SLOF for network booting.
5875 if test -e "${source_path}/.git" ; then
5876 git_submodules="${git_submodules} roms/SLOF"
5881 # Check that the C++ compiler exists and works with the C compiler.
5882 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5883 if has $cxx; then
5884 cat > $TMPC <<EOF
5885 int c_function(void);
5886 int main(void) { return c_function(); }
5889 compile_object
5891 cat > $TMPCXX <<EOF
5892 extern "C" {
5893 int c_function(void);
5895 int c_function(void) { return 42; }
5898 update_cxxflags
5900 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
5901 # C++ compiler $cxx works ok with C compiler $cc
5903 else
5904 echo "C++ compiler $cxx does not work with C compiler $cc"
5905 echo "Disabling C++ specific optional code"
5906 cxx=
5908 else
5909 echo "No C++ compiler available; disabling C++ specific optional code"
5910 cxx=
5913 if test $git_update = 'yes' ; then
5914 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
5917 config_host_mak="config-host.mak"
5919 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5920 echo >> $config_host_mak
5922 echo all: >> $config_host_mak
5923 echo "GIT=$git" >> $config_host_mak
5924 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5925 echo "GIT_UPDATE=$git_update" >> $config_host_mak
5927 echo "ARCH=$ARCH" >> $config_host_mak
5929 if test "$default_devices" = "yes" ; then
5930 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
5931 else
5932 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
5934 if test "$debug_tcg" = "yes" ; then
5935 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5937 if test "$strip_opt" = "yes" ; then
5938 echo "STRIP=${strip}" >> $config_host_mak
5940 if test "$bigendian" = "yes" ; then
5941 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5943 if test "$mingw32" = "yes" ; then
5944 echo "CONFIG_WIN32=y" >> $config_host_mak
5945 rc_version=$(cat $source_path/VERSION)
5946 version_major=${rc_version%%.*}
5947 rc_version=${rc_version#*.}
5948 version_minor=${rc_version%%.*}
5949 rc_version=${rc_version#*.}
5950 version_subminor=${rc_version%%.*}
5951 version_micro=0
5952 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5953 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5954 if test "$guest_agent_with_vss" = "yes" ; then
5955 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5956 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5957 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5959 if test "$guest_agent_ntddscsi" = "yes" ; then
5960 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
5962 if test "$guest_agent_msi" = "yes"; then
5963 echo "CONFIG_QGA_MSI=y" >> $config_host_mak
5964 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5965 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5966 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5967 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5968 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5969 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5971 else
5972 echo "CONFIG_POSIX=y" >> $config_host_mak
5975 if test "$linux" = "yes" ; then
5976 echo "CONFIG_LINUX=y" >> $config_host_mak
5979 if test "$darwin" = "yes" ; then
5980 echo "CONFIG_DARWIN=y" >> $config_host_mak
5983 if test "$solaris" = "yes" ; then
5984 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5986 if test "$haiku" = "yes" ; then
5987 echo "CONFIG_HAIKU=y" >> $config_host_mak
5989 if test "$static" = "yes" ; then
5990 echo "CONFIG_STATIC=y" >> $config_host_mak
5992 if test "$profiler" = "yes" ; then
5993 echo "CONFIG_PROFILER=y" >> $config_host_mak
5995 if test "$want_tools" = "yes" ; then
5996 echo "CONFIG_TOOLS=y" >> $config_host_mak
5998 if test "$guest_agent" = "yes" ; then
5999 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
6001 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6002 if test "$vde" = "yes" ; then
6003 echo "CONFIG_VDE=y" >> $config_host_mak
6004 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6006 if test "$netmap" = "yes" ; then
6007 echo "CONFIG_NETMAP=y" >> $config_host_mak
6009 if test "$l2tpv3" = "yes" ; then
6010 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6012 if test "$gprof" = "yes" ; then
6013 echo "CONFIG_GPROF=y" >> $config_host_mak
6015 if test "$cap_ng" = "yes" ; then
6016 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
6017 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
6019 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6020 for drv in $audio_drv_list; do
6021 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6022 echo "$def=y" >> $config_host_mak
6023 done
6024 if test "$alsa" = "yes" ; then
6025 echo "CONFIG_ALSA=y" >> $config_host_mak
6027 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6028 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
6029 if test "$libpulse" = "yes" ; then
6030 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
6032 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6033 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
6034 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6035 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6036 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6037 if test "$libjack" = "yes" ; then
6038 echo "CONFIG_LIBJACK=y" >> $config_host_mak
6040 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
6041 if test "$audio_win_int" = "yes" ; then
6042 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6044 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6045 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6046 if test "$xfs" = "yes" ; then
6047 echo "CONFIG_XFS=y" >> $config_host_mak
6049 qemu_version=$(head $source_path/VERSION)
6050 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6051 echo "SRC_PATH=$source_path" >> $config_host_mak
6052 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6053 if test "$modules" = "yes"; then
6054 # $shacmd can generate a hash started with digit, which the compiler doesn't
6055 # like as an symbol. So prefix it with an underscore
6056 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6057 echo "CONFIG_MODULES=y" >> $config_host_mak
6059 if test "$module_upgrades" = "yes"; then
6060 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6062 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6063 echo "CONFIG_X11=y" >> $config_host_mak
6064 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6065 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6067 if test "$pipe2" = "yes" ; then
6068 echo "CONFIG_PIPE2=y" >> $config_host_mak
6070 if test "$accept4" = "yes" ; then
6071 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6073 if test "$splice" = "yes" ; then
6074 echo "CONFIG_SPLICE=y" >> $config_host_mak
6076 if test "$eventfd" = "yes" ; then
6077 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6079 if test "$memfd" = "yes" ; then
6080 echo "CONFIG_MEMFD=y" >> $config_host_mak
6082 if test "$have_usbfs" = "yes" ; then
6083 echo "CONFIG_USBFS=y" >> $config_host_mak
6085 if test "$fallocate" = "yes" ; then
6086 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6088 if test "$fallocate_punch_hole" = "yes" ; then
6089 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6091 if test "$fallocate_zero_range" = "yes" ; then
6092 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6094 if test "$posix_fallocate" = "yes" ; then
6095 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6097 if test "$sync_file_range" = "yes" ; then
6098 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6100 if test "$fiemap" = "yes" ; then
6101 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6103 if test "$dup3" = "yes" ; then
6104 echo "CONFIG_DUP3=y" >> $config_host_mak
6106 if test "$ppoll" = "yes" ; then
6107 echo "CONFIG_PPOLL=y" >> $config_host_mak
6109 if test "$prctl_pr_set_timerslack" = "yes" ; then
6110 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6112 if test "$epoll" = "yes" ; then
6113 echo "CONFIG_EPOLL=y" >> $config_host_mak
6115 if test "$epoll_create1" = "yes" ; then
6116 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6118 if test "$sendfile" = "yes" ; then
6119 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6121 if test "$timerfd" = "yes" ; then
6122 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6124 if test "$setns" = "yes" ; then
6125 echo "CONFIG_SETNS=y" >> $config_host_mak
6127 if test "$clock_adjtime" = "yes" ; then
6128 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6130 if test "$syncfs" = "yes" ; then
6131 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6133 if test "$kcov" = "yes" ; then
6134 echo "CONFIG_KCOV=y" >> $config_host_mak
6136 if test "$btrfs" = "yes" ; then
6137 echo "CONFIG_BTRFS=y" >> $config_host_mak
6139 if test "$inotify" = "yes" ; then
6140 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6142 if test "$inotify1" = "yes" ; then
6143 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6145 if test "$sem_timedwait" = "yes" ; then
6146 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6148 if test "$strchrnul" = "yes" ; then
6149 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6151 if test "$st_atim" = "yes" ; then
6152 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
6154 if test "$byteswap_h" = "yes" ; then
6155 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6157 if test "$bswap_h" = "yes" ; then
6158 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6160 if test "$curl" = "yes" ; then
6161 echo "CONFIG_CURL=y" >> $config_host_mak
6162 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6163 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6165 if test "$brlapi" = "yes" ; then
6166 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6167 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6169 if test "$gtk" = "yes" ; then
6170 echo "CONFIG_GTK=y" >> $config_host_mak
6171 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6172 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6173 if test "$gtk_gl" = "yes" ; then
6174 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6177 if test "$gio" = "yes" ; then
6178 echo "CONFIG_GIO=y" >> $config_host_mak
6179 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6180 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6181 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
6183 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6184 if test "$gnutls" = "yes" ; then
6185 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6186 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
6187 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
6189 if test "$gcrypt" = "yes" ; then
6190 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6191 if test "$gcrypt_hmac" = "yes" ; then
6192 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6194 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
6195 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
6197 if test "$nettle" = "yes" ; then
6198 echo "CONFIG_NETTLE=y" >> $config_host_mak
6199 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6200 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
6201 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
6203 if test "$qemu_private_xts" = "yes" ; then
6204 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
6206 if test "$tasn1" = "yes" ; then
6207 echo "CONFIG_TASN1=y" >> $config_host_mak
6209 if test "$auth_pam" = "yes" ; then
6210 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6212 if test "$have_ifaddrs_h" = "yes" ; then
6213 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6215 if test "$have_drm_h" = "yes" ; then
6216 echo "HAVE_DRM_H=y" >> $config_host_mak
6218 if test "$have_broken_size_max" = "yes" ; then
6219 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6221 if test "$have_openpty" = "yes" ; then
6222 echo "HAVE_OPENPTY=y" >> $config_host_mak
6224 if test "$have_sys_signal_h" = "yes" ; then
6225 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
6228 # Work around a system header bug with some kernel/XFS header
6229 # versions where they both try to define 'struct fsxattr':
6230 # xfs headers will not try to redefine structs from linux headers
6231 # if this macro is set.
6232 if test "$have_fsxattr" = "yes" ; then
6233 echo "HAVE_FSXATTR=y" >> $config_host_mak
6235 if test "$have_copy_file_range" = "yes" ; then
6236 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6238 if test "$vte" = "yes" ; then
6239 echo "CONFIG_VTE=y" >> $config_host_mak
6240 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6241 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6243 if test "$virglrenderer" = "yes" ; then
6244 echo "CONFIG_VIRGL=y" >> $config_host_mak
6245 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6246 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6248 if test "$xen" = "enabled" ; then
6249 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6250 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6251 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
6252 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
6254 if test "$linux_aio" = "yes" ; then
6255 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6257 if test "$linux_io_uring" = "yes" ; then
6258 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
6259 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
6260 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
6262 if test "$attr" = "yes" ; then
6263 echo "CONFIG_ATTR=y" >> $config_host_mak
6264 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
6266 if test "$libattr" = "yes" ; then
6267 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6269 if test "$virtfs" = "yes" ; then
6270 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6272 if test "$vhost_scsi" = "yes" ; then
6273 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6275 if test "$vhost_net" = "yes" ; then
6276 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6278 if test "$vhost_net_user" = "yes" ; then
6279 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
6281 if test "$vhost_net_vdpa" = "yes" ; then
6282 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
6284 if test "$vhost_crypto" = "yes" ; then
6285 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6287 if test "$vhost_vsock" = "yes" ; then
6288 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6289 if test "$vhost_user" = "yes" ; then
6290 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
6293 if test "$vhost_kernel" = "yes" ; then
6294 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6296 if test "$vhost_user" = "yes" ; then
6297 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6299 if test "$vhost_vdpa" = "yes" ; then
6300 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
6302 if test "$vhost_user_fs" = "yes" ; then
6303 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
6305 if test "$iovec" = "yes" ; then
6306 echo "CONFIG_IOVEC=y" >> $config_host_mak
6308 if test "$preadv" = "yes" ; then
6309 echo "CONFIG_PREADV=y" >> $config_host_mak
6311 if test "$membarrier" = "yes" ; then
6312 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6314 if test "$signalfd" = "yes" ; then
6315 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6317 if test "$optreset" = "yes" ; then
6318 echo "HAVE_OPTRESET=y" >> $config_host_mak
6320 if test "$tcg" = "enabled"; then
6321 if test "$tcg_interpreter" = "yes" ; then
6322 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6325 if test "$fdatasync" = "yes" ; then
6326 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6328 if test "$madvise" = "yes" ; then
6329 echo "CONFIG_MADVISE=y" >> $config_host_mak
6331 if test "$posix_madvise" = "yes" ; then
6332 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6334 if test "$posix_memalign" = "yes" ; then
6335 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6337 if test "$spice" = "yes" ; then
6338 echo "CONFIG_SPICE=y" >> $config_host_mak
6339 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
6340 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
6343 if test "$smartcard" = "yes" ; then
6344 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6345 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6346 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6349 if test "$libusb" = "yes" ; then
6350 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6351 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6352 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6355 if test "$usb_redir" = "yes" ; then
6356 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6357 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6358 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6361 if test "$opengl" = "yes" ; then
6362 echo "CONFIG_OPENGL=y" >> $config_host_mak
6363 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
6364 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6365 if test "$opengl_dmabuf" = "yes" ; then
6366 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6370 if test "$gbm" = "yes" ; then
6371 echo "CONFIG_GBM=y" >> $config_host_mak
6372 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6373 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6377 if test "$avx2_opt" = "yes" ; then
6378 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6381 if test "$avx512f_opt" = "yes" ; then
6382 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
6385 if test "$lzo" = "yes" ; then
6386 echo "CONFIG_LZO=y" >> $config_host_mak
6387 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
6390 if test "$snappy" = "yes" ; then
6391 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6392 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
6395 if test "$bzip2" = "yes" ; then
6396 echo "CONFIG_BZIP2=y" >> $config_host_mak
6397 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6400 if test "$lzfse" = "yes" ; then
6401 echo "CONFIG_LZFSE=y" >> $config_host_mak
6402 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6405 if test "$zstd" = "yes" ; then
6406 echo "CONFIG_ZSTD=y" >> $config_host_mak
6407 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
6408 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
6411 if test "$libiscsi" = "yes" ; then
6412 echo "CONFIG_LIBISCSI=y" >> $config_host_mak
6413 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6414 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6417 if test "$libnfs" = "yes" ; then
6418 echo "CONFIG_LIBNFS=y" >> $config_host_mak
6419 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6422 if test "$seccomp" = "yes"; then
6423 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6424 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6425 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6428 # XXX: suppress that
6429 if [ "$bsd" = "yes" ] ; then
6430 echo "CONFIG_BSD=y" >> $config_host_mak
6433 if test "$qom_cast_debug" = "yes" ; then
6434 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6436 if test "$rbd" = "yes" ; then
6437 echo "CONFIG_RBD=y" >> $config_host_mak
6438 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6441 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6442 if test "$coroutine_pool" = "yes" ; then
6443 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6444 else
6445 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6448 if test "$debug_stack_usage" = "yes" ; then
6449 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6452 if test "$crypto_afalg" = "yes" ; then
6453 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6456 if test "$open_by_handle_at" = "yes" ; then
6457 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6460 if test "$linux_magic_h" = "yes" ; then
6461 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6464 if test "$valgrind_h" = "yes" ; then
6465 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6468 if test "$have_asan_iface_fiber" = "yes" ; then
6469 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6472 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
6473 echo "CONFIG_TSAN=y" >> $config_host_mak
6476 if test "$has_environ" = "yes" ; then
6477 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6480 if test "$cpuid_h" = "yes" ; then
6481 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6484 if test "$int128" = "yes" ; then
6485 echo "CONFIG_INT128=y" >> $config_host_mak
6488 if test "$atomic128" = "yes" ; then
6489 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6492 if test "$cmpxchg128" = "yes" ; then
6493 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6496 if test "$atomic64" = "yes" ; then
6497 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6500 if test "$attralias" = "yes" ; then
6501 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
6504 if test "$getauxval" = "yes" ; then
6505 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6508 if test "$glusterfs" = "yes" ; then
6509 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
6510 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6511 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6514 if test "$glusterfs_xlator_opt" = "yes" ; then
6515 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6518 if test "$glusterfs_discard" = "yes" ; then
6519 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6522 if test "$glusterfs_fallocate" = "yes" ; then
6523 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6526 if test "$glusterfs_zerofill" = "yes" ; then
6527 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6530 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
6531 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
6534 if test "$glusterfs_iocb_has_stat" = "yes" ; then
6535 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
6538 if test "$libssh" = "yes" ; then
6539 echo "CONFIG_LIBSSH=y" >> $config_host_mak
6540 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
6541 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
6544 if test "$live_block_migration" = "yes" ; then
6545 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6548 if test "$tpm" = "yes"; then
6549 echo 'CONFIG_TPM=y' >> $config_host_mak
6552 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6553 if have_backend "nop"; then
6554 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6556 if have_backend "simple"; then
6557 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6558 # Set the appropriate trace file.
6559 trace_file="\"$trace_file-\" FMT_pid"
6561 if have_backend "log"; then
6562 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6564 if have_backend "ust"; then
6565 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6566 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6567 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
6569 if have_backend "dtrace"; then
6570 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6571 if test "$trace_backend_stap" = "yes" ; then
6572 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6575 if have_backend "ftrace"; then
6576 if test "$linux" = "yes" ; then
6577 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6578 else
6579 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6582 if have_backend "syslog"; then
6583 if test "$posix_syslog" = "yes" ; then
6584 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6585 else
6586 feature_not_found "syslog(trace backend)" "syslog not available"
6589 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6591 if test "$rdma" = "yes" ; then
6592 echo "CONFIG_RDMA=y" >> $config_host_mak
6593 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6596 if test "$pvrdma" = "yes" ; then
6597 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6600 if test "$have_rtnetlink" = "yes" ; then
6601 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6604 if test "$libxml2" = "yes" ; then
6605 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6606 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6607 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6610 if test "$replication" = "yes" ; then
6611 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6614 if test "$have_af_vsock" = "yes" ; then
6615 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6618 if test "$have_sysmacros" = "yes" ; then
6619 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6622 if test "$have_static_assert" = "yes" ; then
6623 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6626 if test "$have_utmpx" = "yes" ; then
6627 echo "HAVE_UTMPX=y" >> $config_host_mak
6629 if test "$have_getrandom" = "yes" ; then
6630 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6632 if test "$ivshmem" = "yes" ; then
6633 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6635 if test "$debug_mutex" = "yes" ; then
6636 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6639 # Hold two types of flag:
6640 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6641 # a thread we have a handle to
6642 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
6643 # platform
6644 if test "$pthread_setname_np_w_tid" = "yes" ; then
6645 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6646 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6647 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6648 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6649 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
6652 if test "$libpmem" = "yes" ; then
6653 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6654 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
6655 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
6658 if test "$libdaxctl" = "yes" ; then
6659 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
6660 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
6663 if test "$bochs" = "yes" ; then
6664 echo "CONFIG_BOCHS=y" >> $config_host_mak
6666 if test "$cloop" = "yes" ; then
6667 echo "CONFIG_CLOOP=y" >> $config_host_mak
6669 if test "$dmg" = "yes" ; then
6670 echo "CONFIG_DMG=y" >> $config_host_mak
6672 if test "$qcow1" = "yes" ; then
6673 echo "CONFIG_QCOW1=y" >> $config_host_mak
6675 if test "$vdi" = "yes" ; then
6676 echo "CONFIG_VDI=y" >> $config_host_mak
6678 if test "$vvfat" = "yes" ; then
6679 echo "CONFIG_VVFAT=y" >> $config_host_mak
6681 if test "$qed" = "yes" ; then
6682 echo "CONFIG_QED=y" >> $config_host_mak
6684 if test "$parallels" = "yes" ; then
6685 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6687 if test "$sheepdog" = "yes" ; then
6688 add_to deprecated_features "sheepdog"
6689 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6691 if test "$pty_h" = "yes" ; then
6692 echo "HAVE_PTY_H=y" >> $config_host_mak
6694 if test "$have_mlockall" = "yes" ; then
6695 echo "HAVE_MLOCKALL=y" >> $config_host_mak
6697 if test "$fuzzing" = "yes" ; then
6698 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
6699 # needed CFLAGS have already been provided
6700 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
6701 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
6702 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
6703 else
6704 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
6708 if test "$plugins" = "yes" ; then
6709 echo "CONFIG_PLUGIN=y" >> $config_host_mak
6710 # Copy the export object list to the build dir
6711 if test "$ld_dynamic_list" = "yes" ; then
6712 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
6713 ld_symbols=qemu-plugins-ld.symbols
6714 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
6715 elif test "$ld_exported_symbols_list" = "yes" ; then
6716 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
6717 ld64_symbols=qemu-plugins-ld64.symbols
6718 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
6719 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
6720 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
6721 else
6722 error_exit \
6723 "If \$plugins=yes, either \$ld_dynamic_list or " \
6724 "\$ld_exported_symbols_list should have been set to 'yes'."
6728 if test -n "$gdb_bin" ; then
6729 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
6732 if test "$secret_keyring" = "yes" ; then
6733 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
6736 echo "ROMS=$roms" >> $config_host_mak
6737 echo "MAKE=$make" >> $config_host_mak
6738 echo "PYTHON=$python" >> $config_host_mak
6739 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
6740 echo "MESON=$meson" >> $config_host_mak
6741 echo "NINJA=$ninja" >> $config_host_mak
6742 echo "CC=$cc" >> $config_host_mak
6743 if $iasl -h > /dev/null 2>&1; then
6744 echo "CONFIG_IASL=$iasl" >> $config_host_mak
6746 echo "CXX=$cxx" >> $config_host_mak
6747 echo "OBJCC=$objcc" >> $config_host_mak
6748 echo "AR=$ar" >> $config_host_mak
6749 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6750 echo "AS=$as" >> $config_host_mak
6751 echo "CCAS=$ccas" >> $config_host_mak
6752 echo "CPP=$cpp" >> $config_host_mak
6753 echo "OBJCOPY=$objcopy" >> $config_host_mak
6754 echo "LD=$ld" >> $config_host_mak
6755 echo "RANLIB=$ranlib" >> $config_host_mak
6756 echo "NM=$nm" >> $config_host_mak
6757 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
6758 echo "WINDRES=$windres" >> $config_host_mak
6759 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6760 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6761 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6762 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6763 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
6764 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6765 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6766 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6767 echo "EXESUF=$EXESUF" >> $config_host_mak
6768 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
6769 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
6770 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6771 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6772 if test "$gcov" = "yes" ; then
6773 echo "CONFIG_GCOV=y" >> $config_host_mak
6776 if test "$fuzzing" != "no"; then
6777 echo "CONFIG_FUZZ=y" >> $config_host_mak
6779 echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
6781 if test "$rng_none" = "yes"; then
6782 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
6785 # use included Linux headers
6786 if test "$linux" = "yes" ; then
6787 mkdir -p linux-headers
6788 case "$cpu" in
6789 i386|x86_64|x32)
6790 linux_arch=x86
6792 ppc|ppc64|ppc64le)
6793 linux_arch=powerpc
6795 s390x)
6796 linux_arch=s390
6798 aarch64)
6799 linux_arch=arm64
6801 mips64)
6802 linux_arch=mips
6805 # For most CPUs the kernel architecture name and QEMU CPU name match.
6806 linux_arch="$cpu"
6808 esac
6809 # For non-KVM architectures we will not have asm headers
6810 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6811 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6815 for target in $target_list; do
6816 target_dir="$target"
6817 target_name=$(echo $target | cut -d '-' -f 1)
6818 mkdir -p $target_dir
6819 case $target in
6820 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
6821 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
6822 esac
6823 done
6825 echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
6826 if test "$default_targets" = "yes"; then
6827 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
6830 if test "$numa" = "yes"; then
6831 echo "CONFIG_NUMA=y" >> $config_host_mak
6832 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
6835 if test "$ccache_cpp2" = "yes"; then
6836 echo "export CCACHE_CPP2=y" >> $config_host_mak
6839 if test "$safe_stack" = "yes"; then
6840 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
6843 # If we're using a separate build tree, set it up now.
6844 # DIRS are directories which we simply mkdir in the build tree;
6845 # LINKS are things to symlink back into the source tree
6846 # (these can be both files and directories).
6847 # Caution: do not add files or directories here using wildcards. This
6848 # will result in problems later if a new file matching the wildcard is
6849 # added to the source tree -- nothing will cause configure to be rerun
6850 # so the build tree will be missing the link back to the new file, and
6851 # tests might fail. Prefer to keep the relevant files in their own
6852 # directory and symlink the directory instead.
6853 # UNLINK is used to remove symlinks from older development versions
6854 # that might get into the way when doing "git update" without doing
6855 # a "make distclean" in between.
6856 DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
6857 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
6858 DIRS="$DIRS docs docs/interop fsdev scsi"
6859 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
6860 DIRS="$DIRS roms/seabios"
6861 DIRS="$DIRS contrib/plugins/"
6862 LINKS="Makefile"
6863 LINKS="$LINKS tests/tcg/lm32/Makefile"
6864 LINKS="$LINKS tests/tcg/Makefile.target"
6865 LINKS="$LINKS pc-bios/optionrom/Makefile"
6866 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
6867 LINKS="$LINKS roms/seabios/Makefile"
6868 LINKS="$LINKS pc-bios/qemu-icon.bmp"
6869 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
6870 LINKS="$LINKS tests/acceptance tests/data"
6871 LINKS="$LINKS tests/qemu-iotests/check"
6872 LINKS="$LINKS python"
6873 LINKS="$LINKS contrib/plugins/Makefile "
6874 UNLINK="pc-bios/keymaps"
6875 for bios_file in \
6876 $source_path/pc-bios/*.bin \
6877 $source_path/pc-bios/*.elf \
6878 $source_path/pc-bios/*.lid \
6879 $source_path/pc-bios/*.rom \
6880 $source_path/pc-bios/*.dtb \
6881 $source_path/pc-bios/*.img \
6882 $source_path/pc-bios/openbios-* \
6883 $source_path/pc-bios/u-boot.* \
6884 $source_path/pc-bios/edk2-*.fd.bz2 \
6885 $source_path/pc-bios/palcode-*
6887 LINKS="$LINKS pc-bios/$(basename $bios_file)"
6888 done
6889 mkdir -p $DIRS
6890 for f in $LINKS ; do
6891 if [ -e "$source_path/$f" ]; then
6892 symlink "$source_path/$f" "$f"
6894 done
6895 for f in $UNLINK ; do
6896 if [ -L "$f" ]; then
6897 rm -f "$f"
6899 done
6901 (for i in $cross_cc_vars; do
6902 export $i
6903 done
6904 export target_list source_path use_containers
6905 $source_path/tests/tcg/configure.sh)
6907 # temporary config to build submodules
6908 for rom in seabios; do
6909 config_mak=roms/$rom/config.mak
6910 echo "# Automatically generated by configure - do not modify" > $config_mak
6911 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6912 echo "AS=$as" >> $config_mak
6913 echo "CCAS=$ccas" >> $config_mak
6914 echo "CC=$cc" >> $config_mak
6915 echo "BCC=bcc" >> $config_mak
6916 echo "CPP=$cpp" >> $config_mak
6917 echo "OBJCOPY=objcopy" >> $config_mak
6918 echo "IASL=$iasl" >> $config_mak
6919 echo "LD=$ld" >> $config_mak
6920 echo "RANLIB=$ranlib" >> $config_mak
6921 done
6923 # set up qemu-iotests in this build directory
6924 iotests_common_env="tests/qemu-iotests/common.env"
6926 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6927 echo >> "$iotests_common_env"
6928 echo "export PYTHON='$python'" >> "$iotests_common_env"
6930 if test "$skip_meson" = no; then
6931 cross="config-meson.cross.new"
6932 meson_quote() {
6933 echo "'$(echo $* | sed "s/ /','/g")'"
6936 echo "# Automatically generated by configure - do not modify" > $cross
6937 echo "[properties]" >> $cross
6938 test -z "$cxx" && echo "link_language = 'c'" >> $cross
6939 echo "[built-in options]" >> $cross
6940 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
6941 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
6942 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6943 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6944 echo "[binaries]" >> $cross
6945 echo "c = [$(meson_quote $cc)]" >> $cross
6946 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
6947 echo "ar = [$(meson_quote $ar)]" >> $cross
6948 echo "nm = [$(meson_quote $nm)]" >> $cross
6949 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
6950 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
6951 if has $sdl2_config; then
6952 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
6954 echo "strip = [$(meson_quote $strip)]" >> $cross
6955 echo "windres = [$(meson_quote $windres)]" >> $cross
6956 if test -n "$cross_prefix"; then
6957 cross_arg="--cross-file config-meson.cross"
6958 echo "[host_machine]" >> $cross
6959 if test "$mingw32" = "yes" ; then
6960 echo "system = 'windows'" >> $cross
6962 if test "$linux" = "yes" ; then
6963 echo "system = 'linux'" >> $cross
6965 case "$ARCH" in
6966 i386|x86_64)
6967 echo "cpu_family = 'x86'" >> $cross
6969 ppc64le)
6970 echo "cpu_family = 'ppc64'" >> $cross
6973 echo "cpu_family = '$ARCH'" >> $cross
6975 esac
6976 echo "cpu = '$cpu'" >> $cross
6977 if test "$bigendian" = "yes" ; then
6978 echo "endian = 'big'" >> $cross
6979 else
6980 echo "endian = 'little'" >> $cross
6982 else
6983 cross_arg="--native-file config-meson.cross"
6985 mv $cross config-meson.cross
6987 rm -rf meson-private meson-info meson-logs
6988 unset staticpic
6989 if ! version_ge "$($meson --version)" 0.56.0; then
6990 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
6992 NINJA=$ninja $meson setup \
6993 --prefix "$prefix" \
6994 --libdir "$libdir" \
6995 --libexecdir "$libexecdir" \
6996 --bindir "$bindir" \
6997 --includedir "$includedir" \
6998 --datadir "$datadir" \
6999 --mandir "$mandir" \
7000 --sysconfdir "$sysconfdir" \
7001 --localedir "$localedir" \
7002 --localstatedir "$local_statedir" \
7003 -Ddocdir="$docdir" \
7004 -Dqemu_firmwarepath="$firmwarepath" \
7005 -Dqemu_suffix="$qemu_suffix" \
7006 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
7007 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
7008 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
7009 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
7010 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
7011 ${staticpic:+-Db_staticpic=$staticpic} \
7012 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
7013 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
7014 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
7015 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
7016 -Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
7017 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
7018 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
7019 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \
7020 -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
7021 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
7022 -Dvhost_user_blk_server=$vhost_user_blk_server \
7023 -Dfuse=$fuse \
7024 $cross_arg \
7025 "$PWD" "$source_path"
7027 if test "$?" -ne 0 ; then
7028 error_exit "meson setup failed"
7032 if test -n "${deprecated_features}"; then
7033 echo "Warning, deprecated features enabled."
7034 echo "Please see docs/system/deprecated.rst"
7035 echo " features: ${deprecated_features}"
7038 # Save the configure command line for later reuse.
7039 cat <<EOD >config.status
7040 #!/bin/sh
7041 # Generated by configure.
7042 # Run this file to recreate the current configuration.
7043 # Compiler output produced by configure, useful for debugging
7044 # configure, is in config.log if it exists.
7047 preserve_env() {
7048 envname=$1
7050 eval envval=\$$envname
7052 if test -n "$envval"
7053 then
7054 echo "$envname='$envval'" >> config.status
7055 echo "export $envname" >> config.status
7056 else
7057 echo "unset $envname" >> config.status
7061 # Preserve various env variables that influence what
7062 # features/build target configure will detect
7063 preserve_env AR
7064 preserve_env AS
7065 preserve_env CC
7066 preserve_env CPP
7067 preserve_env CXX
7068 preserve_env INSTALL
7069 preserve_env LD
7070 preserve_env LD_LIBRARY_PATH
7071 preserve_env LIBTOOL
7072 preserve_env MAKE
7073 preserve_env NM
7074 preserve_env OBJCOPY
7075 preserve_env PATH
7076 preserve_env PKG_CONFIG
7077 preserve_env PKG_CONFIG_LIBDIR
7078 preserve_env PKG_CONFIG_PATH
7079 preserve_env PYTHON
7080 preserve_env SDL2_CONFIG
7081 preserve_env SMBD
7082 preserve_env STRIP
7083 preserve_env WINDRES
7085 printf "exec" >>config.status
7086 for i in "$0" "$@"; do
7087 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
7088 done
7089 echo ' "$@"' >>config.status
7090 chmod +x config.status
7092 rm -r "$TMPDIR1"