vl: extract machine done notifiers
[qemu/ar7.git] / configure
blob18c26e0389741643748c70ac7788a996ef006834
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=""
453 bogus_os="no"
454 malloc_trim="auto"
456 # parse CC options first
457 for opt do
458 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
459 case "$opt" in
460 --cross-prefix=*) cross_prefix="$optarg"
462 --cc=*) CC="$optarg"
464 --cxx=*) CXX="$optarg"
466 --cpu=*) cpu="$optarg"
468 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
469 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
471 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
473 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
474 EXTRA_LDFLAGS="$optarg"
476 --enable-debug-info) debug_info="yes"
478 --disable-debug-info) debug_info="no"
480 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
482 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
483 eval "cross_cc_cflags_${cc_arch}=\$optarg"
484 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
486 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
487 cc_archs="$cc_archs $cc_arch"
488 eval "cross_cc_${cc_arch}=\$optarg"
489 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
491 esac
492 done
493 # OS specific
494 # Using uname is really, really broken. Once we have the right set of checks
495 # we can eliminate its usage altogether.
497 # Preferred compiler:
498 # ${CC} (if set)
499 # ${cross_prefix}gcc (if cross-prefix specified)
500 # system compiler
501 if test -z "${CC}${cross_prefix}"; then
502 cc="$host_cc"
503 else
504 cc="${CC-${cross_prefix}gcc}"
507 if test -z "${CXX}${cross_prefix}"; then
508 cxx="c++"
509 else
510 cxx="${CXX-${cross_prefix}g++}"
513 ar="${AR-${cross_prefix}ar}"
514 as="${AS-${cross_prefix}as}"
515 ccas="${CCAS-$cc}"
516 cpp="${CPP-$cc -E}"
517 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
518 ld="${LD-${cross_prefix}ld}"
519 ranlib="${RANLIB-${cross_prefix}ranlib}"
520 nm="${NM-${cross_prefix}nm}"
521 strip="${STRIP-${cross_prefix}strip}"
522 windres="${WINDRES-${cross_prefix}windres}"
523 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
524 query_pkg_config() {
525 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
527 pkg_config=query_pkg_config
528 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
530 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
531 ARFLAGS="${ARFLAGS-rv}"
533 # default flags for all hosts
534 # We use -fwrapv to tell the compiler that we require a C dialect where
535 # left shift of signed integers is well defined and has the expected
536 # 2s-complement style results. (Both clang and gcc agree that it
537 # provides these semantics.)
538 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
539 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
540 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
541 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
543 # Flags that are needed during configure but later taken care of by Meson
544 CONFIGURE_CFLAGS="-std=gnu99 -Wall"
545 CONFIGURE_LDFLAGS=
548 check_define() {
549 cat > $TMPC <<EOF
550 #if !defined($1)
551 #error $1 not defined
552 #endif
553 int main(void) { return 0; }
555 compile_object
558 check_include() {
559 cat > $TMPC <<EOF
560 #include <$1>
561 int main(void) { return 0; }
563 compile_object
566 write_c_skeleton() {
567 cat > $TMPC <<EOF
568 int main(void) { return 0; }
572 write_c_fuzzer_skeleton() {
573 cat > $TMPC <<EOF
574 #include <stdint.h>
575 #include <sys/types.h>
576 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
577 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
581 if check_define __linux__ ; then
582 targetos="Linux"
583 elif check_define _WIN32 ; then
584 targetos='MINGW32'
585 elif check_define __OpenBSD__ ; then
586 targetos='OpenBSD'
587 elif check_define __sun__ ; then
588 targetos='SunOS'
589 elif check_define __HAIKU__ ; then
590 targetos='Haiku'
591 elif check_define __FreeBSD__ ; then
592 targetos='FreeBSD'
593 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
594 targetos='GNU/kFreeBSD'
595 elif check_define __DragonFly__ ; then
596 targetos='DragonFly'
597 elif check_define __NetBSD__; then
598 targetos='NetBSD'
599 elif check_define __APPLE__; then
600 targetos='Darwin'
601 else
602 # This is a fatal error, but don't report it yet, because we
603 # might be going to just print the --help text, or it might
604 # be the result of a missing compiler.
605 targetos='bogus'
606 bogus_os='yes'
609 # Some host OSes need non-standard checks for which CPU to use.
610 # Note that these checks are broken for cross-compilation: if you're
611 # cross-compiling to one of these OSes then you'll need to specify
612 # the correct CPU with the --cpu option.
613 case $targetos in
614 Darwin)
615 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
616 # run 64-bit userspace code.
617 # If the user didn't specify a CPU explicitly and the kernel says this is
618 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
619 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
620 cpu="x86_64"
622 HOST_DSOSUF=".dylib"
624 SunOS)
625 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
626 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
627 cpu="x86_64"
629 esac
631 if test ! -z "$cpu" ; then
632 # command line argument
634 elif check_define __i386__ ; then
635 cpu="i386"
636 elif check_define __x86_64__ ; then
637 if check_define __ILP32__ ; then
638 cpu="x32"
639 else
640 cpu="x86_64"
642 elif check_define __sparc__ ; then
643 if check_define __arch64__ ; then
644 cpu="sparc64"
645 else
646 cpu="sparc"
648 elif check_define _ARCH_PPC ; then
649 if check_define _ARCH_PPC64 ; then
650 if check_define _LITTLE_ENDIAN ; then
651 cpu="ppc64le"
652 else
653 cpu="ppc64"
655 else
656 cpu="ppc"
658 elif check_define __mips__ ; then
659 cpu="mips"
660 elif check_define __s390__ ; then
661 if check_define __s390x__ ; then
662 cpu="s390x"
663 else
664 cpu="s390"
666 elif check_define __riscv ; then
667 if check_define _LP64 ; then
668 cpu="riscv64"
669 else
670 cpu="riscv32"
672 elif check_define __arm__ ; then
673 cpu="arm"
674 elif check_define __aarch64__ ; then
675 cpu="aarch64"
676 else
677 cpu=$(uname -m)
680 ARCH=
681 # Normalise host CPU name and set ARCH.
682 # Note that this case should only have supported host CPUs, not guests.
683 case "$cpu" in
684 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
686 ppc64le)
687 ARCH="ppc64"
689 i386|i486|i586|i686|i86pc|BePC)
690 cpu="i386"
692 x86_64|amd64)
693 cpu="x86_64"
695 armv*b|armv*l|arm)
696 cpu="arm"
698 aarch64)
699 cpu="aarch64"
701 mips*)
702 cpu="mips"
704 sparc|sun4[cdmuv])
705 cpu="sparc"
708 # This will result in either an error or falling back to TCI later
709 ARCH=unknown
711 esac
712 if test -z "$ARCH"; then
713 ARCH="$cpu"
716 # OS specific
718 case $targetos in
719 MINGW32*)
720 mingw32="yes"
721 audio_possible_drivers="dsound sdl"
722 if check_include dsound.h; then
723 audio_drv_list="dsound"
724 else
725 audio_drv_list=""
727 supported_os="yes"
728 pie="no"
730 GNU/kFreeBSD)
731 bsd="yes"
732 audio_drv_list="oss try-sdl"
733 audio_possible_drivers="oss sdl pa"
735 FreeBSD)
736 bsd="yes"
737 make="${MAKE-gmake}"
738 audio_drv_list="oss try-sdl"
739 audio_possible_drivers="oss sdl pa"
740 # needed for kinfo_getvmmap(3) in libutil.h
741 netmap="" # enable netmap autodetect
743 DragonFly)
744 bsd="yes"
745 make="${MAKE-gmake}"
746 audio_drv_list="oss try-sdl"
747 audio_possible_drivers="oss sdl pa"
749 NetBSD)
750 bsd="yes"
751 make="${MAKE-gmake}"
752 audio_drv_list="oss try-sdl"
753 audio_possible_drivers="oss sdl"
754 oss_lib="-lossaudio"
756 OpenBSD)
757 bsd="yes"
758 make="${MAKE-gmake}"
759 audio_drv_list="try-sdl"
760 audio_possible_drivers="sdl"
762 Darwin)
763 bsd="yes"
764 darwin="yes"
765 if [ "$cpu" = "x86_64" ] ; then
766 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
767 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
769 cocoa="enabled"
770 audio_drv_list="coreaudio try-sdl"
771 audio_possible_drivers="coreaudio sdl"
772 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
773 # Disable attempts to use ObjectiveC features in os/object.h since they
774 # won't work when we're compiling with gcc as a C compiler.
775 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
777 SunOS)
778 solaris="yes"
779 make="${MAKE-gmake}"
780 smbd="${SMBD-/usr/sfw/sbin/smbd}"
781 if test -f /usr/include/sys/soundcard.h ; then
782 audio_drv_list="oss try-sdl"
784 audio_possible_drivers="oss sdl"
785 # needed for CMSG_ macros in sys/socket.h
786 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
787 # needed for TIOCWIN* defines in termios.h
788 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
790 Haiku)
791 haiku="yes"
792 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS"
794 Linux)
795 audio_drv_list="try-pa oss"
796 audio_possible_drivers="oss alsa sdl pa"
797 linux="yes"
798 linux_user="yes"
799 vhost_user="yes"
801 esac
803 if [ "$bsd" = "yes" ] ; then
804 if [ "$darwin" != "yes" ] ; then
805 bsd_user="yes"
809 : ${make=${MAKE-make}}
811 # We prefer python 3.x. A bare 'python' is traditionally
812 # python 2.x, but some distros have it as python 3.x, so
813 # we check that too
814 python=
815 explicit_python=no
816 for binary in "${PYTHON-python3}" python
818 if has "$binary"
819 then
820 python=$(command -v "$binary")
821 break
823 done
826 # Check for ancillary tools used in testing
827 genisoimage=
828 for binary in genisoimage mkisofs
830 if has $binary
831 then
832 genisoimage=$(command -v "$binary")
833 break
835 done
837 : ${smbd=${SMBD-/usr/sbin/smbd}}
839 # Default objcc to clang if available, otherwise use CC
840 if has clang; then
841 objcc=clang
842 else
843 objcc="$cc"
846 if test "$mingw32" = "yes" ; then
847 EXESUF=".exe"
848 HOST_DSOSUF=".dll"
849 # MinGW needs -mthreads for TLS and macro _MT.
850 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
851 write_c_skeleton;
852 prefix="/qemu"
853 qemu_suffix=""
854 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
857 werror=""
859 for opt do
860 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
861 case "$opt" in
862 --help|-h) show_help=yes
864 --version|-V) exec cat $source_path/VERSION
866 --prefix=*) prefix="$optarg"
868 --interp-prefix=*) interp_prefix="$optarg"
870 --cross-prefix=*)
872 --cc=*)
874 --host-cc=*) host_cc="$optarg"
876 --cxx=*)
878 --iasl=*) iasl="$optarg"
880 --objcc=*) objcc="$optarg"
882 --make=*) make="$optarg"
884 --install=*)
886 --python=*) python="$optarg" ; explicit_python=yes
888 --sphinx-build=*) sphinx_build="$optarg"
890 --skip-meson) skip_meson=yes
892 --meson=*) meson="$optarg"
894 --ninja=*) ninja="$optarg"
896 --smbd=*) smbd="$optarg"
898 --extra-cflags=*)
900 --extra-cxxflags=*)
902 --extra-ldflags=*)
904 --enable-debug-info)
906 --disable-debug-info)
908 --cross-cc-*)
910 --enable-modules)
911 modules="yes"
913 --disable-modules)
914 modules="no"
916 --disable-module-upgrades) module_upgrades="no"
918 --enable-module-upgrades) module_upgrades="yes"
920 --cpu=*)
922 --target-list=*) target_list="$optarg"
923 if test "$target_list_exclude"; then
924 error_exit "Can't mix --target-list with --target-list-exclude"
927 --target-list-exclude=*) target_list_exclude="$optarg"
928 if test "$target_list"; then
929 error_exit "Can't mix --target-list-exclude with --target-list"
932 --enable-trace-backends=*) trace_backends="$optarg"
934 # XXX: backwards compatibility
935 --enable-trace-backend=*) trace_backends="$optarg"
937 --with-trace-file=*) trace_file="$optarg"
939 --with-default-devices) default_devices="yes"
941 --without-default-devices) default_devices="no"
943 --enable-gprof) gprof="yes"
945 --enable-gcov) gcov="yes"
947 --static)
948 static="yes"
949 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
951 --mandir=*) mandir="$optarg"
953 --bindir=*) bindir="$optarg"
955 --libdir=*) libdir="$optarg"
957 --libexecdir=*) libexecdir="$optarg"
959 --includedir=*) includedir="$optarg"
961 --datadir=*) datadir="$optarg"
963 --with-suffix=*) qemu_suffix="$optarg"
965 --docdir=*) docdir="$optarg"
967 --localedir=*) localedir="$optarg"
969 --sysconfdir=*) sysconfdir="$optarg"
971 --localstatedir=*) local_statedir="$optarg"
973 --firmwarepath=*) firmwarepath="$optarg"
975 --host=*|--build=*|\
976 --disable-dependency-tracking|\
977 --sbindir=*|--sharedstatedir=*|\
978 --oldincludedir=*|--datarootdir=*|--infodir=*|\
979 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
980 # These switches are silently ignored, for compatibility with
981 # autoconf-generated configure scripts. This allows QEMU's
982 # configure to be used by RPM and similar macros that set
983 # lots of directory switches by default.
985 --disable-sdl) sdl="disabled"
987 --enable-sdl) sdl="enabled"
989 --disable-sdl-image) sdl_image="disabled"
991 --enable-sdl-image) sdl_image="enabled"
993 --disable-qom-cast-debug) qom_cast_debug="no"
995 --enable-qom-cast-debug) qom_cast_debug="yes"
997 --disable-virtfs) virtfs="no"
999 --enable-virtfs) virtfs="yes"
1001 --disable-libudev) libudev="disabled"
1003 --enable-libudev) libudev="enabled"
1005 --disable-virtiofsd) virtiofsd="disabled"
1007 --enable-virtiofsd) virtiofsd="enabled"
1009 --disable-mpath) mpath="disabled"
1011 --enable-mpath) mpath="enabled"
1013 --disable-vnc) vnc="disabled"
1015 --enable-vnc) vnc="enabled"
1017 --disable-gettext) gettext="false"
1019 --enable-gettext) gettext="true"
1021 --oss-lib=*) oss_lib="$optarg"
1023 --audio-drv-list=*) audio_drv_list="$optarg"
1025 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1027 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1029 --enable-debug-tcg) debug_tcg="yes"
1031 --disable-debug-tcg) debug_tcg="no"
1033 --enable-debug)
1034 # Enable debugging options that aren't excessively noisy
1035 debug_tcg="yes"
1036 debug_mutex="yes"
1037 debug="yes"
1038 strip_opt="no"
1039 fortify_source="no"
1041 --enable-sanitizers) sanitizers="yes"
1043 --disable-sanitizers) sanitizers="no"
1045 --enable-tsan) tsan="yes"
1047 --disable-tsan) tsan="no"
1049 --enable-sparse) sparse="enabled"
1051 --disable-sparse) sparse="disabled"
1053 --disable-strip) strip_opt="no"
1055 --disable-vnc-sasl) vnc_sasl="disabled"
1057 --enable-vnc-sasl) vnc_sasl="enabled"
1059 --disable-vnc-jpeg) vnc_jpeg="disabled"
1061 --enable-vnc-jpeg) vnc_jpeg="enabled"
1063 --disable-vnc-png) vnc_png="disabled"
1065 --enable-vnc-png) vnc_png="enabled"
1067 --disable-slirp) slirp="disabled"
1069 --enable-slirp=git) slirp="internal"
1071 --enable-slirp=system) slirp="system"
1073 --disable-vde) vde="no"
1075 --enable-vde) vde="yes"
1077 --disable-netmap) netmap="no"
1079 --enable-netmap) netmap="yes"
1081 --disable-xen) xen="disabled"
1083 --enable-xen) xen="enabled"
1085 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
1087 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
1089 --disable-brlapi) brlapi="no"
1091 --enable-brlapi) brlapi="yes"
1093 --disable-kvm) kvm="disabled"
1095 --enable-kvm) kvm="enabled"
1097 --disable-hax) hax="disabled"
1099 --enable-hax) hax="enabled"
1101 --disable-hvf) hvf="disabled"
1103 --enable-hvf) hvf="enabled"
1105 --disable-whpx) whpx="disabled"
1107 --enable-whpx) whpx="enabled"
1109 --disable-tcg-interpreter) tcg_interpreter="no"
1111 --enable-tcg-interpreter) tcg_interpreter="yes"
1113 --disable-cap-ng) cap_ng="no"
1115 --enable-cap-ng) cap_ng="yes"
1117 --disable-tcg) tcg="disabled"
1119 --enable-tcg) tcg="enabled"
1121 --disable-malloc-trim) malloc_trim="disabled"
1123 --enable-malloc-trim) malloc_trim="enabled"
1125 --disable-spice) spice="no"
1127 --enable-spice) spice="yes"
1129 --disable-libiscsi) libiscsi="no"
1131 --enable-libiscsi) libiscsi="yes"
1133 --disable-libnfs) libnfs="no"
1135 --enable-libnfs) libnfs="yes"
1137 --enable-profiler) profiler="yes"
1139 --disable-cocoa) cocoa="disabled"
1141 --enable-cocoa)
1142 cocoa="enabled" ;
1143 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1145 --disable-system) softmmu="no"
1147 --enable-system) softmmu="yes"
1149 --disable-user)
1150 linux_user="no" ;
1151 bsd_user="no" ;
1153 --enable-user) ;;
1154 --disable-linux-user) linux_user="no"
1156 --enable-linux-user) linux_user="yes"
1158 --disable-bsd-user) bsd_user="no"
1160 --enable-bsd-user) bsd_user="yes"
1162 --enable-pie) pie="yes"
1164 --disable-pie) pie="no"
1166 --enable-werror) werror="yes"
1168 --disable-werror) werror="no"
1170 --enable-stack-protector) stack_protector="yes"
1172 --disable-stack-protector) stack_protector="no"
1174 --enable-safe-stack) safe_stack="yes"
1176 --disable-safe-stack) safe_stack="no"
1178 --disable-curses) curses="disabled"
1180 --enable-curses) curses="enabled"
1182 --disable-iconv) iconv="disabled"
1184 --enable-iconv) iconv="enabled"
1186 --disable-curl) curl="no"
1188 --enable-curl) curl="yes"
1190 --disable-fdt) fdt="disabled"
1192 --enable-fdt) fdt="enabled"
1194 --enable-fdt=git) fdt="internal"
1196 --enable-fdt=system) fdt="system"
1198 --disable-linux-aio) linux_aio="no"
1200 --enable-linux-aio) linux_aio="yes"
1202 --disable-linux-io-uring) linux_io_uring="no"
1204 --enable-linux-io-uring) linux_io_uring="yes"
1206 --disable-attr) attr="no"
1208 --enable-attr) attr="yes"
1210 --disable-membarrier) membarrier="no"
1212 --enable-membarrier) membarrier="yes"
1214 --disable-blobs) blobs="false"
1216 --with-pkgversion=*) pkgversion="$optarg"
1218 --with-coroutine=*) coroutine="$optarg"
1220 --disable-coroutine-pool) coroutine_pool="no"
1222 --enable-coroutine-pool) coroutine_pool="yes"
1224 --enable-debug-stack-usage) debug_stack_usage="yes"
1226 --enable-crypto-afalg) crypto_afalg="yes"
1228 --disable-crypto-afalg) crypto_afalg="no"
1230 --disable-docs) docs="disabled"
1232 --enable-docs) docs="enabled"
1234 --disable-vhost-net) vhost_net="no"
1236 --enable-vhost-net) vhost_net="yes"
1238 --disable-vhost-crypto) vhost_crypto="no"
1240 --enable-vhost-crypto) vhost_crypto="yes"
1242 --disable-vhost-scsi) vhost_scsi="no"
1244 --enable-vhost-scsi) vhost_scsi="yes"
1246 --disable-vhost-vsock) vhost_vsock="no"
1248 --enable-vhost-vsock) vhost_vsock="yes"
1250 --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
1252 --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
1254 --disable-vhost-user-fs) vhost_user_fs="no"
1256 --enable-vhost-user-fs) vhost_user_fs="yes"
1258 --disable-opengl) opengl="no"
1260 --enable-opengl) opengl="yes"
1262 --disable-rbd) rbd="no"
1264 --enable-rbd) rbd="yes"
1266 --disable-xfsctl) xfs="no"
1268 --enable-xfsctl) xfs="yes"
1270 --disable-smartcard) smartcard="no"
1272 --enable-smartcard) smartcard="yes"
1274 --disable-u2f) u2f="disabled"
1276 --enable-u2f) u2f="enabled"
1278 --disable-libusb) libusb="no"
1280 --enable-libusb) libusb="yes"
1282 --disable-usb-redir) usb_redir="no"
1284 --enable-usb-redir) usb_redir="yes"
1286 --disable-zlib-test)
1288 --disable-lzo) lzo="no"
1290 --enable-lzo) lzo="yes"
1292 --disable-snappy) snappy="no"
1294 --enable-snappy) snappy="yes"
1296 --disable-bzip2) bzip2="no"
1298 --enable-bzip2) bzip2="yes"
1300 --enable-lzfse) lzfse="yes"
1302 --disable-lzfse) lzfse="no"
1304 --disable-zstd) zstd="no"
1306 --enable-zstd) zstd="yes"
1308 --enable-guest-agent) guest_agent="yes"
1310 --disable-guest-agent) guest_agent="no"
1312 --enable-guest-agent-msi) guest_agent_msi="yes"
1314 --disable-guest-agent-msi) guest_agent_msi="no"
1316 --with-vss-sdk) vss_win32_sdk=""
1318 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1320 --without-vss-sdk) vss_win32_sdk="no"
1322 --with-win-sdk) win_sdk=""
1324 --with-win-sdk=*) win_sdk="$optarg"
1326 --without-win-sdk) win_sdk="no"
1328 --enable-tools) want_tools="yes"
1330 --disable-tools) want_tools="no"
1332 --enable-seccomp) seccomp="yes"
1334 --disable-seccomp) seccomp="no"
1336 --disable-glusterfs) glusterfs="no"
1338 --disable-avx2) avx2_opt="no"
1340 --enable-avx2) avx2_opt="yes"
1342 --disable-avx512f) avx512f_opt="no"
1344 --enable-avx512f) avx512f_opt="yes"
1347 --enable-glusterfs) glusterfs="yes"
1349 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1350 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1352 --enable-vhdx|--disable-vhdx)
1353 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1355 --enable-uuid|--disable-uuid)
1356 echo "$0: $opt is obsolete, UUID support is always built" >&2
1358 --disable-gtk) gtk="no"
1360 --enable-gtk) gtk="yes"
1362 --tls-priority=*) tls_priority="$optarg"
1364 --disable-gnutls) gnutls="no"
1366 --enable-gnutls) gnutls="yes"
1368 --disable-nettle) nettle="no"
1370 --enable-nettle) nettle="yes"
1372 --disable-gcrypt) gcrypt="no"
1374 --enable-gcrypt) gcrypt="yes"
1376 --disable-auth-pam) auth_pam="no"
1378 --enable-auth-pam) auth_pam="yes"
1380 --enable-rdma) rdma="yes"
1382 --disable-rdma) rdma="no"
1384 --enable-pvrdma) pvrdma="yes"
1386 --disable-pvrdma) pvrdma="no"
1388 --disable-vte) vte="no"
1390 --enable-vte) vte="yes"
1392 --disable-virglrenderer) virglrenderer="no"
1394 --enable-virglrenderer) virglrenderer="yes"
1396 --disable-tpm) tpm="no"
1398 --enable-tpm) tpm="yes"
1400 --disable-libssh) libssh="no"
1402 --enable-libssh) libssh="yes"
1404 --disable-live-block-migration) live_block_migration="no"
1406 --enable-live-block-migration) live_block_migration="yes"
1408 --disable-numa) numa="no"
1410 --enable-numa) numa="yes"
1412 --disable-libxml2) libxml2="no"
1414 --enable-libxml2) libxml2="yes"
1416 --disable-tcmalloc) tcmalloc="no"
1418 --enable-tcmalloc) tcmalloc="yes"
1420 --disable-jemalloc) jemalloc="no"
1422 --enable-jemalloc) jemalloc="yes"
1424 --disable-replication) replication="no"
1426 --enable-replication) replication="yes"
1428 --disable-bochs) bochs="no"
1430 --enable-bochs) bochs="yes"
1432 --disable-cloop) cloop="no"
1434 --enable-cloop) cloop="yes"
1436 --disable-dmg) dmg="no"
1438 --enable-dmg) dmg="yes"
1440 --disable-qcow1) qcow1="no"
1442 --enable-qcow1) qcow1="yes"
1444 --disable-vdi) vdi="no"
1446 --enable-vdi) vdi="yes"
1448 --disable-vvfat) vvfat="no"
1450 --enable-vvfat) vvfat="yes"
1452 --disable-qed) qed="no"
1454 --enable-qed) qed="yes"
1456 --disable-parallels) parallels="no"
1458 --enable-parallels) parallels="yes"
1460 --disable-sheepdog) sheepdog="no"
1462 --enable-sheepdog) sheepdog="yes"
1464 --disable-vhost-user) vhost_user="no"
1466 --enable-vhost-user) vhost_user="yes"
1468 --disable-vhost-vdpa) vhost_vdpa="no"
1470 --enable-vhost-vdpa) vhost_vdpa="yes"
1472 --disable-vhost-kernel) vhost_kernel="no"
1474 --enable-vhost-kernel) vhost_kernel="yes"
1476 --disable-capstone) capstone="disabled"
1478 --enable-capstone) capstone="enabled"
1480 --enable-capstone=git) capstone="internal"
1482 --enable-capstone=system) capstone="system"
1484 --with-git=*) git="$optarg"
1486 --enable-git-update) git_update=yes
1488 --disable-git-update) git_update=no
1490 --enable-debug-mutex) debug_mutex=yes
1492 --disable-debug-mutex) debug_mutex=no
1494 --enable-libpmem) libpmem=yes
1496 --disable-libpmem) libpmem=no
1498 --enable-xkbcommon) xkbcommon="enabled"
1500 --disable-xkbcommon) xkbcommon="disabled"
1502 --enable-plugins) plugins="yes"
1504 --disable-plugins) plugins="no"
1506 --enable-containers) use_containers="yes"
1508 --disable-containers) use_containers="no"
1510 --enable-fuzzing) fuzzing=yes
1512 --disable-fuzzing) fuzzing=no
1514 --gdb=*) gdb_bin="$optarg"
1516 --enable-rng-none) rng_none=yes
1518 --disable-rng-none) rng_none=no
1520 --enable-keyring) secret_keyring="yes"
1522 --disable-keyring) secret_keyring="no"
1524 --enable-libdaxctl) libdaxctl=yes
1526 --disable-libdaxctl) libdaxctl=no
1529 echo "ERROR: unknown option $opt"
1530 echo "Try '$0 --help' for more information"
1531 exit 1
1533 esac
1534 done
1536 libdir="${libdir:-$prefix/lib}"
1537 libexecdir="${libexecdir:-$prefix/libexec}"
1538 includedir="${includedir:-$prefix/include}"
1540 if test "$mingw32" = "yes" ; then
1541 mandir="$prefix"
1542 datadir="$prefix"
1543 docdir="$prefix"
1544 bindir="$prefix"
1545 sysconfdir="$prefix"
1546 local_statedir="$prefix"
1547 else
1548 mandir="${mandir:-$prefix/share/man}"
1549 datadir="${datadir:-$prefix/share}"
1550 docdir="${docdir:-$prefix/share/doc}"
1551 bindir="${bindir:-$prefix/bin}"
1552 sysconfdir="${sysconfdir:-$prefix/etc}"
1553 local_statedir="${local_statedir:-$prefix/var}"
1555 firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
1556 localedir="${localedir:-$datadir/locale}"
1558 case "$cpu" in
1559 ppc)
1560 CPU_CFLAGS="-m32"
1561 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1563 ppc64)
1564 CPU_CFLAGS="-m64"
1565 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1567 sparc)
1568 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1569 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1571 sparc64)
1572 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1573 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1575 s390)
1576 CPU_CFLAGS="-m31"
1577 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1579 s390x)
1580 CPU_CFLAGS="-m64"
1581 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1583 i386)
1584 CPU_CFLAGS="-m32"
1585 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1587 x86_64)
1588 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1589 # If we truly care, we should simply detect this case at
1590 # runtime and generate the fallback to serial emulation.
1591 CPU_CFLAGS="-m64 -mcx16"
1592 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1594 x32)
1595 CPU_CFLAGS="-mx32"
1596 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1598 # No special flags required for other host CPUs
1599 esac
1601 eval "cross_cc_${cpu}=\$host_cc"
1602 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1603 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1605 # For user-mode emulation the host arch has to be one we explicitly
1606 # support, even if we're using TCI.
1607 if [ "$ARCH" = "unknown" ]; then
1608 bsd_user="no"
1609 linux_user="no"
1612 default_target_list=""
1613 deprecated_targets_list=ppc64abi32-linux-user,tilegx-linux-user,lm32-softmmu,unicore32-softmmu
1614 deprecated_features=""
1615 mak_wilds=""
1617 if [ "$softmmu" = "yes" ]; then
1618 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak"
1620 if [ "$linux_user" = "yes" ]; then
1621 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak"
1623 if [ "$bsd_user" = "yes" ]; then
1624 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak"
1627 # If the user doesn't explicitly specify a deprecated target we will
1628 # skip it.
1629 if test -z "$target_list"; then
1630 if test -z "$target_list_exclude"; then
1631 target_list_exclude="$deprecated_targets_list"
1632 else
1633 target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1637 for config in $mak_wilds; do
1638 target="$(basename "$config" .mak)"
1639 if echo "$target_list_exclude" | grep -vq "$target"; then
1640 default_target_list="${default_target_list} $target"
1642 done
1644 # Enumerate public trace backends for --help output
1645 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1647 if test x"$show_help" = x"yes" ; then
1648 cat << EOF
1650 Usage: configure [options]
1651 Options: [defaults in brackets after descriptions]
1653 Standard options:
1654 --help print this message
1655 --prefix=PREFIX install in PREFIX [$prefix]
1656 --interp-prefix=PREFIX where to find shared libraries, etc.
1657 use %M for cpu name [$interp_prefix]
1658 --target-list=LIST set target list (default: build all non-deprecated)
1659 $(echo Available targets: $default_target_list | \
1660 fold -s -w 53 | sed -e 's/^/ /')
1661 $(echo Deprecated targets: $deprecated_targets_list | \
1662 fold -s -w 53 | sed -e 's/^/ /')
1663 --target-list-exclude=LIST exclude a set of targets from the default target-list
1665 Advanced options (experts only):
1666 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1667 --cc=CC use C compiler CC [$cc]
1668 --iasl=IASL use ACPI compiler IASL [$iasl]
1669 --host-cc=CC use C compiler CC [$host_cc] for code run at
1670 build time
1671 --cxx=CXX use C++ compiler CXX [$cxx]
1672 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1673 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1674 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1675 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1676 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1677 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1678 --make=MAKE use specified make [$make]
1679 --python=PYTHON use specified python [$python]
1680 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1681 --meson=MESON use specified meson [$meson]
1682 --ninja=NINJA use specified ninja [$ninja]
1683 --smbd=SMBD use specified smbd [$smbd]
1684 --with-git=GIT use specified git [$git]
1685 --static enable static build [$static]
1686 --mandir=PATH install man pages in PATH
1687 --datadir=PATH install firmware in PATH/$qemu_suffix
1688 --localedir=PATH install translation in PATH/$qemu_suffix
1689 --docdir=PATH install documentation in PATH/$qemu_suffix
1690 --bindir=PATH install binaries in PATH
1691 --libdir=PATH install libraries in PATH
1692 --libexecdir=PATH install helper binaries in PATH
1693 --sysconfdir=PATH install config in PATH/$qemu_suffix
1694 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1695 --firmwarepath=PATH search PATH for firmware files
1696 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1697 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1698 --with-pkgversion=VERS use specified string as sub-version of the package
1699 --enable-debug enable common debug build options
1700 --enable-sanitizers enable default sanitizers
1701 --enable-tsan enable thread sanitizer
1702 --disable-strip disable stripping binaries
1703 --disable-werror disable compilation abort on warning
1704 --disable-stack-protector disable compiler-provided stack protection
1705 --audio-drv-list=LIST set audio drivers list:
1706 Available drivers: $audio_possible_drivers
1707 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1708 --block-drv-rw-whitelist=L
1709 set block driver read-write whitelist
1710 (affects only QEMU, not qemu-img)
1711 --block-drv-ro-whitelist=L
1712 set block driver read-only whitelist
1713 (affects only QEMU, not qemu-img)
1714 --enable-trace-backends=B Set trace backend
1715 Available backends: $trace_backend_list
1716 --with-trace-file=NAME Full PATH,NAME of file to store traces
1717 Default:trace-<pid>
1718 --disable-slirp disable SLIRP userspace network connectivity
1719 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1720 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1721 --oss-lib path to OSS library
1722 --cpu=CPU Build for host CPU [$cpu]
1723 --with-coroutine=BACKEND coroutine backend. Supported options:
1724 ucontext, sigaltstack, windows
1725 --enable-gcov enable test coverage analysis with gcov
1726 --disable-blobs disable installing provided firmware blobs
1727 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1728 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1729 --tls-priority default TLS protocol/cipher priority string
1730 --enable-gprof QEMU profiling with gprof
1731 --enable-profiler profiler support
1732 --enable-debug-stack-usage
1733 track the maximum stack usage of stacks created by qemu_alloc_stack
1734 --enable-plugins
1735 enable plugins via shared library loading
1736 --disable-containers don't use containers for cross-building
1737 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1739 Optional features, enabled with --enable-FEATURE and
1740 disabled with --disable-FEATURE, default is enabled if available:
1742 system all system emulation targets
1743 user supported user emulation targets
1744 linux-user all linux usermode emulation targets
1745 bsd-user all BSD usermode emulation targets
1746 docs build documentation
1747 guest-agent build the QEMU Guest Agent
1748 guest-agent-msi build guest agent Windows MSI installation package
1749 pie Position Independent Executables
1750 modules modules support (non-Windows)
1751 module-upgrades try to load modules from alternate paths for upgrades
1752 debug-tcg TCG debugging (default is disabled)
1753 debug-info debugging information
1754 sparse sparse checker
1755 safe-stack SafeStack Stack Smash Protection. Depends on
1756 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1758 gnutls GNUTLS cryptography support
1759 nettle nettle cryptography support
1760 gcrypt libgcrypt cryptography support
1761 auth-pam PAM access control
1762 sdl SDL UI
1763 sdl-image SDL Image support for icons
1764 gtk gtk UI
1765 vte vte support for the gtk UI
1766 curses curses UI
1767 iconv font glyph conversion support
1768 vnc VNC UI support
1769 vnc-sasl SASL encryption for VNC server
1770 vnc-jpeg JPEG lossy compression for VNC server
1771 vnc-png PNG compression for VNC server
1772 cocoa Cocoa UI (Mac OS X only)
1773 virtfs VirtFS
1774 virtiofsd build virtiofs daemon (virtiofsd)
1775 libudev Use libudev to enumerate host devices
1776 mpath Multipath persistent reservation passthrough
1777 xen xen backend driver support
1778 xen-pci-passthrough PCI passthrough support for Xen
1779 brlapi BrlAPI (Braile)
1780 curl curl connectivity
1781 membarrier membarrier system call (for Linux 4.14+ or Windows)
1782 fdt fdt device tree
1783 kvm KVM acceleration support
1784 hax HAX acceleration support
1785 hvf Hypervisor.framework acceleration support
1786 whpx Windows Hypervisor Platform acceleration support
1787 rdma Enable RDMA-based migration
1788 pvrdma Enable PVRDMA support
1789 vde support for vde network
1790 netmap support for netmap network
1791 linux-aio Linux AIO support
1792 linux-io-uring Linux io_uring support
1793 cap-ng libcap-ng support
1794 attr attr and xattr support
1795 vhost-net vhost-net kernel acceleration support
1796 vhost-vsock virtio sockets device support
1797 vhost-scsi vhost-scsi kernel target support
1798 vhost-crypto vhost-user-crypto backend support
1799 vhost-kernel vhost kernel backend support
1800 vhost-user vhost-user backend support
1801 vhost-user-blk-server vhost-user-blk server support
1802 vhost-vdpa vhost-vdpa kernel backend support
1803 spice spice
1804 rbd rados block device (rbd)
1805 libiscsi iscsi support
1806 libnfs nfs support
1807 smartcard smartcard support (libcacard)
1808 u2f U2F support (u2f-emu)
1809 libusb libusb (for usb passthrough)
1810 live-block-migration Block migration in the main migration stream
1811 usb-redir usb network redirection support
1812 lzo support of lzo compression library
1813 snappy support of snappy compression library
1814 bzip2 support of bzip2 compression library
1815 (for reading bzip2-compressed dmg images)
1816 lzfse support of lzfse compression library
1817 (for reading lzfse-compressed dmg images)
1818 zstd support for zstd compression library
1819 (for migration compression and qcow2 cluster compression)
1820 seccomp seccomp support
1821 coroutine-pool coroutine freelist (better performance)
1822 glusterfs GlusterFS backend
1823 tpm TPM support
1824 libssh ssh block device support
1825 numa libnuma support
1826 libxml2 for Parallels image format
1827 tcmalloc tcmalloc support
1828 jemalloc jemalloc support
1829 avx2 AVX2 optimization support
1830 avx512f AVX512F optimization support
1831 replication replication support
1832 opengl opengl support
1833 virglrenderer virgl rendering support
1834 xfsctl xfsctl support
1835 qom-cast-debug cast debugging support
1836 tools build qemu-io, qemu-nbd and qemu-img tools
1837 bochs bochs image format support
1838 cloop cloop image format support
1839 dmg dmg image format support
1840 qcow1 qcow v1 image format support
1841 vdi vdi image format support
1842 vvfat vvfat image format support
1843 qed qed image format support
1844 parallels parallels image format support
1845 sheepdog sheepdog block driver support (deprecated)
1846 crypto-afalg Linux AF_ALG crypto backend driver
1847 capstone capstone disassembler support
1848 debug-mutex mutex debugging support
1849 libpmem libpmem support
1850 xkbcommon xkbcommon support
1851 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1852 libdaxctl libdaxctl support
1854 NOTE: The object files are built at the place where configure is launched
1856 exit 0
1859 # Remove old dependency files to make sure that they get properly regenerated
1860 rm -f */config-devices.mak.d
1862 if test -z "$python"
1863 then
1864 error_exit "Python not found. Use --python=/path/to/python"
1867 # Note that if the Python conditional here evaluates True we will exit
1868 # with status 1 which is a shell 'false' value.
1869 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1870 error_exit "Cannot use '$python', Python >= 3.6 is required." \
1871 "Use --python=/path/to/python to specify a supported Python."
1874 # Preserve python version since some functionality is dependent on it
1875 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)
1877 # Suppress writing compiled files
1878 python="$python -B"
1880 if test -z "$meson"; then
1881 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
1882 meson=meson
1883 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
1884 meson=git
1885 elif test -e "${source_path}/meson/meson.py" ; then
1886 meson=internal
1887 else
1888 if test "$explicit_python" = yes; then
1889 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
1890 else
1891 error_exit "Meson not found. Use --meson=/path/to/meson"
1894 else
1895 # Meson uses its own Python interpreter to invoke other Python scripts,
1896 # but the user wants to use the one they specified with --python.
1898 # We do not want to override the distro Python interpreter (and sometimes
1899 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1900 # just require --meson=git|internal together with --python.
1901 if test "$explicit_python" = yes; then
1902 case "$meson" in
1903 git | internal) ;;
1904 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
1905 esac
1909 if test "$meson" = git; then
1910 git_submodules="${git_submodules} meson"
1913 case "$meson" in
1914 git | internal)
1915 meson="$python ${source_path}/meson/meson.py"
1917 *) meson=$(command -v "$meson") ;;
1918 esac
1920 # Probe for ninja
1922 if test -z "$ninja"; then
1923 for c in ninja ninja-build samu; do
1924 if has $c; then
1925 ninja=$(command -v "$c")
1926 break
1928 done
1929 if test -z "$ninja"; then
1930 error_exit "Cannot find Ninja"
1934 # Check that the C compiler works. Doing this here before testing
1935 # the host CPU ensures that we had a valid CC to autodetect the
1936 # $cpu var (and we should bail right here if that's not the case).
1937 # It also allows the help message to be printed without a CC.
1938 write_c_skeleton;
1939 if compile_object ; then
1940 : C compiler works ok
1941 else
1942 error_exit "\"$cc\" either does not exist or does not work"
1944 if ! compile_prog ; then
1945 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1948 # Consult white-list to determine whether to enable werror
1949 # by default. Only enable by default for git builds
1950 if test -z "$werror" ; then
1951 if test -e "$source_path/.git" && \
1952 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1953 werror="yes"
1954 else
1955 werror="no"
1959 if test "$bogus_os" = "yes"; then
1960 # Now that we know that we're not printing the help and that
1961 # the compiler works (so the results of the check_defines we used
1962 # to identify the OS are reliable), if we didn't recognize the
1963 # host OS we should stop now.
1964 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1967 # Check whether the compiler matches our minimum requirements:
1968 cat > $TMPC << EOF
1969 #if defined(__clang_major__) && defined(__clang_minor__)
1970 # ifdef __apple_build_version__
1971 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1972 # error You need at least XCode Clang v5.1 to compile QEMU
1973 # endif
1974 # else
1975 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1976 # error You need at least Clang v3.4 to compile QEMU
1977 # endif
1978 # endif
1979 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1980 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1981 # error You need at least GCC v4.8 to compile QEMU
1982 # endif
1983 #else
1984 # error You either need GCC or Clang to compiler QEMU
1985 #endif
1986 int main (void) { return 0; }
1988 if ! compile_prog "" "" ; then
1989 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1992 # Accumulate -Wfoo and -Wno-bar separately.
1993 # We will list all of the enable flags first, and the disable flags second.
1994 # Note that we do not add -Werror, because that would enable it for all
1995 # configure tests. If a configure test failed due to -Werror this would
1996 # just silently disable some features, so it's too error prone.
1998 warn_flags=
1999 add_to warn_flags -Wold-style-declaration
2000 add_to warn_flags -Wold-style-definition
2001 add_to warn_flags -Wtype-limits
2002 add_to warn_flags -Wformat-security
2003 add_to warn_flags -Wformat-y2k
2004 add_to warn_flags -Winit-self
2005 add_to warn_flags -Wignored-qualifiers
2006 add_to warn_flags -Wempty-body
2007 add_to warn_flags -Wnested-externs
2008 add_to warn_flags -Wendif-labels
2009 add_to warn_flags -Wexpansion-to-defined
2011 nowarn_flags=
2012 add_to nowarn_flags -Wno-initializer-overrides
2013 add_to nowarn_flags -Wno-missing-include-dirs
2014 add_to nowarn_flags -Wno-shift-negative-value
2015 add_to nowarn_flags -Wno-string-plus-int
2016 add_to nowarn_flags -Wno-typedef-redefinition
2017 add_to nowarn_flags -Wno-tautological-type-limit-compare
2018 add_to nowarn_flags -Wno-psabi
2020 gcc_flags="$warn_flags $nowarn_flags"
2022 cc_has_warning_flag() {
2023 write_c_skeleton;
2025 # Use the positive sense of the flag when testing for -Wno-wombat
2026 # support (gcc will happily accept the -Wno- form of unknown
2027 # warning options).
2028 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2029 compile_prog "-Werror $optflag" ""
2032 for flag in $gcc_flags; do
2033 if cc_has_warning_flag $flag ; then
2034 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2036 done
2038 if test "$stack_protector" != "no"; then
2039 cat > $TMPC << EOF
2040 int main(int argc, char *argv[])
2042 char arr[64], *p = arr, *c = argv[0];
2043 while (*c) {
2044 *p++ = *c++;
2046 return 0;
2049 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2050 sp_on=0
2051 for flag in $gcc_flags; do
2052 # We need to check both a compile and a link, since some compiler
2053 # setups fail only on a .c->.o compile and some only at link time
2054 if compile_object "-Werror $flag" &&
2055 compile_prog "-Werror $flag" ""; then
2056 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2057 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2058 sp_on=1
2059 break
2061 done
2062 if test "$stack_protector" = yes; then
2063 if test $sp_on = 0; then
2064 error_exit "Stack protector not supported"
2069 # Disable -Wmissing-braces on older compilers that warn even for
2070 # the "universal" C zero initializer {0}.
2071 cat > $TMPC << EOF
2072 struct {
2073 int a[2];
2074 } x = {0};
2076 if compile_object "-Werror" "" ; then
2078 else
2079 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2082 # Our module code doesn't support Windows
2083 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2084 error_exit "Modules are not available for Windows"
2087 # module_upgrades is only reasonable if modules are enabled
2088 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2089 error_exit "Can't enable module-upgrades as Modules are not enabled"
2092 # Static linking is not possible with modules or PIE
2093 if test "$static" = "yes" ; then
2094 if test "$modules" = "yes" ; then
2095 error_exit "static and modules are mutually incompatible"
2099 # Unconditional check for compiler __thread support
2100 cat > $TMPC << EOF
2101 static __thread int tls_var;
2102 int main(void) { return tls_var; }
2105 if ! compile_prog "-Werror" "" ; then
2106 error_exit "Your compiler does not support the __thread specifier for " \
2107 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2110 cat > $TMPC << EOF
2112 #ifdef __linux__
2113 # define THREAD __thread
2114 #else
2115 # define THREAD
2116 #endif
2117 static THREAD int tls_var;
2118 int main(void) { return tls_var; }
2121 # Check we support --no-pie first; we will need this for building ROMs.
2122 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2123 CFLAGS_NOPIE="-fno-pie"
2124 LDFLAGS_NOPIE="-no-pie"
2127 if test "$static" = "yes"; then
2128 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2129 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2130 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2131 pie="yes"
2132 elif test "$pie" = "yes"; then
2133 error_exit "-static-pie not available due to missing toolchain support"
2134 else
2135 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2136 pie="no"
2138 elif test "$pie" = "no"; then
2139 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2140 CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS"
2141 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2142 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2143 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2144 pie="yes"
2145 elif test "$pie" = "yes"; then
2146 error_exit "PIE not available due to missing toolchain support"
2147 else
2148 echo "Disabling PIE due to missing toolchain support"
2149 pie="no"
2152 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2153 # The combination is known as "full relro", because .got.plt is read-only too.
2154 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2155 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2158 ##########################################
2159 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2160 # use i686 as default anyway, but for those that don't, an explicit
2161 # specification is necessary
2163 if test "$cpu" = "i386"; then
2164 cat > $TMPC << EOF
2165 static int sfaa(int *ptr)
2167 return __sync_fetch_and_and(ptr, 0);
2170 int main(void)
2172 int val = 42;
2173 val = __sync_val_compare_and_swap(&val, 0, 1);
2174 sfaa(&val);
2175 return val;
2178 if ! compile_prog "" "" ; then
2179 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2183 #########################################
2184 # Solaris specific configure tool chain decisions
2186 if test "$solaris" = "yes" ; then
2187 if has ar; then
2189 else
2190 if test -f /usr/ccs/bin/ar ; then
2191 error_exit "No path includes ar" \
2192 "Add /usr/ccs/bin to your path and rerun configure"
2194 error_exit "No path includes ar"
2198 if test -z "${target_list+xxx}" ; then
2199 default_targets=yes
2200 for target in $default_target_list; do
2201 target_list="$target_list $target"
2202 done
2203 target_list="${target_list# }"
2204 else
2205 default_targets=no
2206 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2207 for target in $target_list; do
2208 # Check that we recognised the target name; this allows a more
2209 # friendly error message than if we let it fall through.
2210 case " $default_target_list " in
2211 *" $target "*)
2214 error_exit "Unknown target name '$target'"
2216 esac
2217 done
2220 for target in $target_list; do
2221 # if a deprecated target is enabled we note it here
2222 if echo "$deprecated_targets_list" | grep -q "$target"; then
2223 add_to deprecated_features $target
2225 done
2227 # see if system emulation was really requested
2228 case " $target_list " in
2229 *"-softmmu "*) softmmu=yes
2231 *) softmmu=no
2233 esac
2235 feature_not_found() {
2236 feature=$1
2237 remedy=$2
2239 error_exit "User requested feature $feature" \
2240 "configure was not able to find it." \
2241 "$remedy"
2244 # ---
2245 # big/little endian test
2246 cat > $TMPC << EOF
2247 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2248 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2249 extern int foo(short *, short *);
2250 int main(int argc, char *argv[]) {
2251 return foo(big_endian, little_endian);
2255 if compile_object ; then
2256 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2257 bigendian="yes"
2258 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2259 bigendian="no"
2260 else
2261 echo big/little test failed
2263 else
2264 echo big/little test failed
2267 ##########################################
2268 # system tools
2269 if test -z "$want_tools"; then
2270 if test "$softmmu" = "no"; then
2271 want_tools=no
2272 else
2273 want_tools=yes
2277 ##########################################
2278 # cocoa implies not SDL or GTK
2279 # (the cocoa UI code currently assumes it is always the active UI
2280 # and doesn't interact well with other UI frontend code)
2281 if test "$cocoa" = "enabled"; then
2282 if test "$sdl" = "enabled"; then
2283 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2285 if test "$gtk" = "yes"; then
2286 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2288 gtk=no
2289 sdl=disabled
2292 # Some versions of Mac OS X incorrectly define SIZE_MAX
2293 cat > $TMPC << EOF
2294 #include <stdint.h>
2295 #include <stdio.h>
2296 int main(int argc, char *argv[]) {
2297 return printf("%zu", SIZE_MAX);
2300 have_broken_size_max=no
2301 if ! compile_object -Werror ; then
2302 have_broken_size_max=yes
2305 ##########################################
2306 # L2TPV3 probe
2308 cat > $TMPC <<EOF
2309 #include <sys/socket.h>
2310 #include <linux/ip.h>
2311 int main(void) { return sizeof(struct mmsghdr); }
2313 if compile_prog "" "" ; then
2314 l2tpv3=yes
2315 else
2316 l2tpv3=no
2319 if check_include "pty.h" ; then
2320 pty_h=yes
2321 else
2322 pty_h=no
2325 cat > $TMPC <<EOF
2326 #include <sys/mman.h>
2327 int main(int argc, char *argv[]) {
2328 return mlockall(MCL_FUTURE);
2331 if compile_prog "" "" ; then
2332 have_mlockall=yes
2333 else
2334 have_mlockall=no
2337 #########################################
2338 # vhost interdependencies and host support
2340 # vhost backends
2341 if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2342 error_exit "vhost-user is only available on Linux"
2344 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2345 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2346 error_exit "vhost-vdpa is only available on Linux"
2348 test "$vhost_kernel" = "" && vhost_kernel=$linux
2349 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2350 error_exit "vhost-kernel is only available on Linux"
2353 # vhost-kernel devices
2354 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2355 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2356 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2358 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2359 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2360 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2363 # vhost-user backends
2364 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2365 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2366 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2368 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2369 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2370 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2372 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2373 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2374 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2376 #vhost-vdpa backends
2377 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2378 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2379 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2382 # OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2383 if test "$vhost_net" = ""; then
2384 test "$vhost_net_user" = "yes" && vhost_net=yes
2385 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
2386 test "$vhost_kernel" = "yes" && vhost_net=yes
2389 ##########################################
2390 # pkg-config probe
2392 if ! has "$pkg_config_exe"; then
2393 error_exit "pkg-config binary '$pkg_config_exe' not found"
2396 ##########################################
2397 # NPTL probe
2399 if test "$linux_user" = "yes"; then
2400 cat > $TMPC <<EOF
2401 #include <sched.h>
2402 #include <linux/futex.h>
2403 int main(void) {
2404 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2405 #error bork
2406 #endif
2407 return 0;
2410 if ! compile_object ; then
2411 feature_not_found "nptl" "Install glibc and linux kernel headers."
2415 ##########################################
2416 # lzo check
2418 if test "$lzo" != "no" ; then
2419 cat > $TMPC << EOF
2420 #include <lzo/lzo1x.h>
2421 int main(void) { lzo_version(); return 0; }
2423 if compile_prog "" "-llzo2" ; then
2424 lzo_libs="-llzo2"
2425 lzo="yes"
2426 else
2427 if test "$lzo" = "yes"; then
2428 feature_not_found "liblzo2" "Install liblzo2 devel"
2430 lzo="no"
2434 ##########################################
2435 # snappy check
2437 if test "$snappy" != "no" ; then
2438 cat > $TMPC << EOF
2439 #include <snappy-c.h>
2440 int main(void) { snappy_max_compressed_length(4096); return 0; }
2442 if compile_prog "" "-lsnappy" ; then
2443 snappy_libs='-lsnappy'
2444 snappy="yes"
2445 else
2446 if test "$snappy" = "yes"; then
2447 feature_not_found "libsnappy" "Install libsnappy devel"
2449 snappy="no"
2453 ##########################################
2454 # bzip2 check
2456 if test "$bzip2" != "no" ; then
2457 cat > $TMPC << EOF
2458 #include <bzlib.h>
2459 int main(void) { BZ2_bzlibVersion(); return 0; }
2461 if compile_prog "" "-lbz2" ; then
2462 bzip2="yes"
2463 else
2464 if test "$bzip2" = "yes"; then
2465 feature_not_found "libbzip2" "Install libbzip2 devel"
2467 bzip2="no"
2471 ##########################################
2472 # lzfse check
2474 if test "$lzfse" != "no" ; then
2475 cat > $TMPC << EOF
2476 #include <lzfse.h>
2477 int main(void) { lzfse_decode_scratch_size(); return 0; }
2479 if compile_prog "" "-llzfse" ; then
2480 lzfse="yes"
2481 else
2482 if test "$lzfse" = "yes"; then
2483 feature_not_found "lzfse" "Install lzfse devel"
2485 lzfse="no"
2489 ##########################################
2490 # zstd check
2492 if test "$zstd" != "no" ; then
2493 libzstd_minver="1.4.0"
2494 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2495 zstd_cflags="$($pkg_config --cflags libzstd)"
2496 zstd_libs="$($pkg_config --libs libzstd)"
2497 zstd="yes"
2498 else
2499 if test "$zstd" = "yes" ; then
2500 feature_not_found "libzstd" "Install libzstd devel"
2502 zstd="no"
2506 ##########################################
2507 # libseccomp check
2509 if test "$seccomp" != "no" ; then
2510 libseccomp_minver="2.3.0"
2511 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2512 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2513 seccomp_libs="$($pkg_config --libs libseccomp)"
2514 seccomp="yes"
2515 else
2516 if test "$seccomp" = "yes" ; then
2517 feature_not_found "libseccomp" \
2518 "Install libseccomp devel >= $libseccomp_minver"
2520 seccomp="no"
2524 ##########################################
2525 # xen probe
2527 if test "$xen" != "disabled" ; then
2528 # Check whether Xen library path is specified via --extra-ldflags to avoid
2529 # overriding this setting with pkg-config output. If not, try pkg-config
2530 # to obtain all needed flags.
2532 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2533 $pkg_config --exists xencontrol ; then
2534 xen_ctrl_version="$(printf '%d%02d%02d' \
2535 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2536 xen=enabled
2537 xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
2538 xen_pc="$xen_pc xenevtchn xendevicemodel"
2539 if $pkg_config --exists xentoolcore; then
2540 xen_pc="$xen_pc xentoolcore"
2542 xen_cflags="$($pkg_config --cflags $xen_pc)"
2543 xen_libs="$($pkg_config --libs $xen_pc)"
2544 else
2546 xen_libs="-lxenstore -lxenctrl"
2547 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2549 # First we test whether Xen headers and libraries are available.
2550 # If no, we are done and there is no Xen support.
2551 # If yes, more tests are run to detect the Xen version.
2553 # Xen (any)
2554 cat > $TMPC <<EOF
2555 #include <xenctrl.h>
2556 int main(void) {
2557 return 0;
2560 if ! compile_prog "" "$xen_libs" ; then
2561 # Xen not found
2562 if test "$xen" = "enabled" ; then
2563 feature_not_found "xen" "Install xen devel"
2565 xen=disabled
2567 # Xen unstable
2568 elif
2569 cat > $TMPC <<EOF &&
2570 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2571 #define __XEN_TOOLS__
2572 #include <xendevicemodel.h>
2573 #include <xenforeignmemory.h>
2574 int main(void) {
2575 xendevicemodel_handle *xd;
2576 xenforeignmemory_handle *xfmem;
2578 xd = xendevicemodel_open(0, 0);
2579 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2581 xfmem = xenforeignmemory_open(0, 0);
2582 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2584 return 0;
2587 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2588 then
2589 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2590 xen_ctrl_version=41100
2591 xen=enabled
2592 elif
2593 cat > $TMPC <<EOF &&
2594 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2595 #include <xenforeignmemory.h>
2596 #include <xentoolcore.h>
2597 int main(void) {
2598 xenforeignmemory_handle *xfmem;
2600 xfmem = xenforeignmemory_open(0, 0);
2601 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2602 xentoolcore_restrict_all(0);
2604 return 0;
2607 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2608 then
2609 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2610 xen_ctrl_version=41000
2611 xen=enabled
2612 elif
2613 cat > $TMPC <<EOF &&
2614 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2615 #define __XEN_TOOLS__
2616 #include <xendevicemodel.h>
2617 int main(void) {
2618 xendevicemodel_handle *xd;
2620 xd = xendevicemodel_open(0, 0);
2621 xendevicemodel_close(xd);
2623 return 0;
2626 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2627 then
2628 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2629 xen_ctrl_version=40900
2630 xen=enabled
2631 elif
2632 cat > $TMPC <<EOF &&
2634 * If we have stable libs the we don't want the libxc compat
2635 * layers, regardless of what CFLAGS we may have been given.
2637 * Also, check if xengnttab_grant_copy_segment_t is defined and
2638 * grant copy operation is implemented.
2640 #undef XC_WANT_COMPAT_EVTCHN_API
2641 #undef XC_WANT_COMPAT_GNTTAB_API
2642 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2643 #include <xenctrl.h>
2644 #include <xenstore.h>
2645 #include <xenevtchn.h>
2646 #include <xengnttab.h>
2647 #include <xenforeignmemory.h>
2648 #include <stdint.h>
2649 #include <xen/hvm/hvm_info_table.h>
2650 #if !defined(HVM_MAX_VCPUS)
2651 # error HVM_MAX_VCPUS not defined
2652 #endif
2653 int main(void) {
2654 xc_interface *xc = NULL;
2655 xenforeignmemory_handle *xfmem;
2656 xenevtchn_handle *xe;
2657 xengnttab_handle *xg;
2658 xengnttab_grant_copy_segment_t* seg = NULL;
2660 xs_daemon_open();
2662 xc = xc_interface_open(0, 0, 0);
2663 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2664 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2665 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2666 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2668 xfmem = xenforeignmemory_open(0, 0);
2669 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2671 xe = xenevtchn_open(0, 0);
2672 xenevtchn_fd(xe);
2674 xg = xengnttab_open(0, 0);
2675 xengnttab_grant_copy(xg, 0, seg);
2677 return 0;
2680 compile_prog "" "$xen_libs $xen_stable_libs"
2681 then
2682 xen_ctrl_version=40800
2683 xen=enabled
2684 elif
2685 cat > $TMPC <<EOF &&
2687 * If we have stable libs the we don't want the libxc compat
2688 * layers, regardless of what CFLAGS we may have been given.
2690 #undef XC_WANT_COMPAT_EVTCHN_API
2691 #undef XC_WANT_COMPAT_GNTTAB_API
2692 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2693 #include <xenctrl.h>
2694 #include <xenstore.h>
2695 #include <xenevtchn.h>
2696 #include <xengnttab.h>
2697 #include <xenforeignmemory.h>
2698 #include <stdint.h>
2699 #include <xen/hvm/hvm_info_table.h>
2700 #if !defined(HVM_MAX_VCPUS)
2701 # error HVM_MAX_VCPUS not defined
2702 #endif
2703 int main(void) {
2704 xc_interface *xc = NULL;
2705 xenforeignmemory_handle *xfmem;
2706 xenevtchn_handle *xe;
2707 xengnttab_handle *xg;
2709 xs_daemon_open();
2711 xc = xc_interface_open(0, 0, 0);
2712 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2713 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2714 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2715 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2717 xfmem = xenforeignmemory_open(0, 0);
2718 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2720 xe = xenevtchn_open(0, 0);
2721 xenevtchn_fd(xe);
2723 xg = xengnttab_open(0, 0);
2724 xengnttab_map_grant_ref(xg, 0, 0, 0);
2726 return 0;
2729 compile_prog "" "$xen_libs $xen_stable_libs"
2730 then
2731 xen_ctrl_version=40701
2732 xen=enabled
2734 # Xen 4.6
2735 elif
2736 cat > $TMPC <<EOF &&
2737 #include <xenctrl.h>
2738 #include <xenstore.h>
2739 #include <stdint.h>
2740 #include <xen/hvm/hvm_info_table.h>
2741 #if !defined(HVM_MAX_VCPUS)
2742 # error HVM_MAX_VCPUS not defined
2743 #endif
2744 int main(void) {
2745 xc_interface *xc;
2746 xs_daemon_open();
2747 xc = xc_interface_open(0, 0, 0);
2748 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2749 xc_gnttab_open(NULL, 0);
2750 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2751 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2752 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2753 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2754 return 0;
2757 compile_prog "" "$xen_libs"
2758 then
2759 xen_ctrl_version=40600
2760 xen=enabled
2762 # Xen 4.5
2763 elif
2764 cat > $TMPC <<EOF &&
2765 #include <xenctrl.h>
2766 #include <xenstore.h>
2767 #include <stdint.h>
2768 #include <xen/hvm/hvm_info_table.h>
2769 #if !defined(HVM_MAX_VCPUS)
2770 # error HVM_MAX_VCPUS not defined
2771 #endif
2772 int main(void) {
2773 xc_interface *xc;
2774 xs_daemon_open();
2775 xc = xc_interface_open(0, 0, 0);
2776 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2777 xc_gnttab_open(NULL, 0);
2778 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2779 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2780 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2781 return 0;
2784 compile_prog "" "$xen_libs"
2785 then
2786 xen_ctrl_version=40500
2787 xen=enabled
2789 elif
2790 cat > $TMPC <<EOF &&
2791 #include <xenctrl.h>
2792 #include <xenstore.h>
2793 #include <stdint.h>
2794 #include <xen/hvm/hvm_info_table.h>
2795 #if !defined(HVM_MAX_VCPUS)
2796 # error HVM_MAX_VCPUS not defined
2797 #endif
2798 int main(void) {
2799 xc_interface *xc;
2800 xs_daemon_open();
2801 xc = xc_interface_open(0, 0, 0);
2802 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2803 xc_gnttab_open(NULL, 0);
2804 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2805 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2806 return 0;
2809 compile_prog "" "$xen_libs"
2810 then
2811 xen_ctrl_version=40200
2812 xen=enabled
2814 else
2815 if test "$xen" = "enabled" ; then
2816 feature_not_found "xen (unsupported version)" \
2817 "Install a supported xen (xen 4.2 or newer)"
2819 xen=disabled
2822 if test "$xen" = enabled; then
2823 if test $xen_ctrl_version -ge 40701 ; then
2824 xen_libs="$xen_libs $xen_stable_libs "
2830 if test "$xen_pci_passthrough" != "disabled"; then
2831 if test "$xen" = "enabled" && test "$linux" = "yes"; then
2832 xen_pci_passthrough=enabled
2833 else
2834 if test "$xen_pci_passthrough" = "enabled"; then
2835 error_exit "User requested feature Xen PCI Passthrough" \
2836 " but this feature requires /sys from Linux"
2838 xen_pci_passthrough=disabled
2842 ##########################################
2843 # gettext probe
2844 if test "$gettext" != "false" ; then
2845 if has xgettext; then
2846 gettext=true
2847 else
2848 if test "$gettext" = "true" ; then
2849 feature_not_found "gettext" "Install xgettext binary"
2851 gettext=false
2855 ##########################################
2856 # X11 probe
2857 if $pkg_config --exists "x11"; then
2858 have_x11=yes
2859 x11_cflags=$($pkg_config --cflags x11)
2860 x11_libs=$($pkg_config --libs x11)
2863 ##########################################
2864 # GTK probe
2866 if test "$gtk" != "no"; then
2867 gtkpackage="gtk+-3.0"
2868 gtkx11package="gtk+-x11-3.0"
2869 gtkversion="3.22.0"
2870 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2871 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2872 gtk_libs=$($pkg_config --libs $gtkpackage)
2873 gtk_version=$($pkg_config --modversion $gtkpackage)
2874 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2875 need_x11=yes
2876 gtk_cflags="$gtk_cflags $x11_cflags"
2877 gtk_libs="$gtk_libs $x11_libs"
2879 gtk="yes"
2880 elif test "$gtk" = "yes"; then
2881 feature_not_found "gtk" "Install gtk3-devel"
2882 else
2883 gtk="no"
2888 ##########################################
2889 # GNUTLS probe
2891 if test "$gnutls" != "no"; then
2892 pass="no"
2893 if $pkg_config --exists "gnutls >= 3.1.18"; then
2894 gnutls_cflags=$($pkg_config --cflags gnutls)
2895 gnutls_libs=$($pkg_config --libs gnutls)
2896 # Packaging for the static libraries is not always correct.
2897 # At least ubuntu 18.04 ships only shared libraries.
2898 write_c_skeleton
2899 if compile_prog "" "$gnutls_libs" ; then
2900 pass="yes"
2903 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2904 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2905 else
2906 gnutls="$pass"
2911 # If user didn't give a --disable/enable-gcrypt flag,
2912 # then mark as disabled if user requested nettle
2913 # explicitly
2914 if test -z "$gcrypt"
2915 then
2916 if test "$nettle" = "yes"
2917 then
2918 gcrypt="no"
2922 # If user didn't give a --disable/enable-nettle flag,
2923 # then mark as disabled if user requested gcrypt
2924 # explicitly
2925 if test -z "$nettle"
2926 then
2927 if test "$gcrypt" = "yes"
2928 then
2929 nettle="no"
2933 has_libgcrypt() {
2934 if ! has "libgcrypt-config"
2935 then
2936 return 1
2939 if test -n "$cross_prefix"
2940 then
2941 host=$(libgcrypt-config --host)
2942 if test "$host-" != $cross_prefix
2943 then
2944 return 1
2948 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2949 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2951 if test $maj != 1 || test $min -lt 5
2952 then
2953 return 1
2956 return 0
2960 if test "$nettle" != "no"; then
2961 pass="no"
2962 if $pkg_config --exists "nettle >= 2.7.1"; then
2963 nettle_cflags=$($pkg_config --cflags nettle)
2964 nettle_libs=$($pkg_config --libs nettle)
2965 nettle_version=$($pkg_config --modversion nettle)
2966 # Link test to make sure the given libraries work (e.g for static).
2967 write_c_skeleton
2968 if compile_prog "" "$nettle_libs" ; then
2969 if test -z "$gcrypt"; then
2970 gcrypt="no"
2972 pass="yes"
2975 if test "$pass" = "yes"
2976 then
2977 cat > $TMPC << EOF
2978 #include <nettle/xts.h>
2979 int main(void) {
2980 return 0;
2983 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2984 nettle_xts=yes
2985 qemu_private_xts=no
2988 if test "$pass" = "no" && test "$nettle" = "yes"; then
2989 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2990 else
2991 nettle="$pass"
2995 if test "$gcrypt" != "no"; then
2996 pass="no"
2997 if has_libgcrypt; then
2998 gcrypt_cflags=$(libgcrypt-config --cflags)
2999 gcrypt_libs=$(libgcrypt-config --libs)
3000 # Debian has removed -lgpg-error from libgcrypt-config
3001 # as it "spreads unnecessary dependencies" which in
3002 # turn breaks static builds...
3003 if test "$static" = "yes"
3004 then
3005 gcrypt_libs="$gcrypt_libs -lgpg-error"
3008 # Link test to make sure the given libraries work (e.g for static).
3009 write_c_skeleton
3010 if compile_prog "" "$gcrypt_libs" ; then
3011 pass="yes"
3014 if test "$pass" = "yes"; then
3015 gcrypt="yes"
3016 cat > $TMPC << EOF
3017 #include <gcrypt.h>
3018 int main(void) {
3019 gcry_mac_hd_t handle;
3020 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3021 GCRY_MAC_FLAG_SECURE, NULL);
3022 return 0;
3025 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3026 gcrypt_hmac=yes
3028 cat > $TMPC << EOF
3029 #include <gcrypt.h>
3030 int main(void) {
3031 gcry_cipher_hd_t handle;
3032 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3033 return 0;
3036 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3037 gcrypt_xts=yes
3038 qemu_private_xts=no
3040 elif test "$gcrypt" = "yes"; then
3041 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3042 else
3043 gcrypt="no"
3048 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3049 then
3050 error_exit "Only one of gcrypt & nettle can be enabled"
3053 ##########################################
3054 # libtasn1 - only for the TLS creds/session test suite
3056 tasn1=yes
3057 tasn1_cflags=""
3058 tasn1_libs=""
3059 if $pkg_config --exists "libtasn1"; then
3060 tasn1_cflags=$($pkg_config --cflags libtasn1)
3061 tasn1_libs=$($pkg_config --libs libtasn1)
3062 else
3063 tasn1=no
3067 ##########################################
3068 # PAM probe
3070 if test "$auth_pam" != "no"; then
3071 cat > $TMPC <<EOF
3072 #include <security/pam_appl.h>
3073 #include <stdio.h>
3074 int main(void) {
3075 const char *service_name = "qemu";
3076 const char *user = "frank";
3077 const struct pam_conv pam_conv = { 0 };
3078 pam_handle_t *pamh = NULL;
3079 pam_start(service_name, user, &pam_conv, &pamh);
3080 return 0;
3083 if compile_prog "" "-lpam" ; then
3084 auth_pam=yes
3085 else
3086 if test "$auth_pam" = "yes"; then
3087 feature_not_found "PAM" "Install PAM development package"
3088 else
3089 auth_pam=no
3094 ##########################################
3095 # getifaddrs (for tests/test-io-channel-socket )
3097 have_ifaddrs_h=yes
3098 if ! check_include "ifaddrs.h" ; then
3099 have_ifaddrs_h=no
3102 #########################################
3103 # libdrm check
3104 have_drm_h=no
3105 if check_include "libdrm/drm.h" ; then
3106 have_drm_h=yes
3109 #########################################
3110 # sys/signal.h check
3111 have_sys_signal_h=no
3112 if check_include "sys/signal.h" ; then
3113 have_sys_signal_h=yes
3116 ##########################################
3117 # VTE probe
3119 if test "$vte" != "no"; then
3120 vteminversion="0.32.0"
3121 if $pkg_config --exists "vte-2.91"; then
3122 vtepackage="vte-2.91"
3123 else
3124 vtepackage="vte-2.90"
3126 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3127 vte_cflags=$($pkg_config --cflags $vtepackage)
3128 vte_libs=$($pkg_config --libs $vtepackage)
3129 vteversion=$($pkg_config --modversion $vtepackage)
3130 vte="yes"
3131 elif test "$vte" = "yes"; then
3132 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3133 else
3134 vte="no"
3138 ##########################################
3139 # RDMA needs OpenFabrics libraries
3140 if test "$rdma" != "no" ; then
3141 cat > $TMPC <<EOF
3142 #include <rdma/rdma_cma.h>
3143 int main(void) { return 0; }
3145 rdma_libs="-lrdmacm -libverbs -libumad"
3146 if compile_prog "" "$rdma_libs" ; then
3147 rdma="yes"
3148 else
3149 if test "$rdma" = "yes" ; then
3150 error_exit \
3151 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3152 " Your options:" \
3153 " (1) Fast: Install infiniband packages (devel) from your distro." \
3154 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3155 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3157 rdma="no"
3161 ##########################################
3162 # PVRDMA detection
3164 cat > $TMPC <<EOF &&
3165 #include <sys/mman.h>
3168 main(void)
3170 char buf = 0;
3171 void *addr = &buf;
3172 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3174 return 0;
3178 if test "$rdma" = "yes" ; then
3179 case "$pvrdma" in
3181 if compile_prog "" ""; then
3182 pvrdma="yes"
3183 else
3184 pvrdma="no"
3187 "yes")
3188 if ! compile_prog "" ""; then
3189 error_exit "PVRDMA is not supported since mremap is not implemented"
3191 pvrdma="yes"
3193 "no")
3194 pvrdma="no"
3196 esac
3197 else
3198 if test "$pvrdma" = "yes" ; then
3199 error_exit "PVRDMA requires rdma suppport"
3201 pvrdma="no"
3204 # Let's see if enhanced reg_mr is supported
3205 if test "$pvrdma" = "yes" ; then
3207 cat > $TMPC <<EOF &&
3208 #include <infiniband/verbs.h>
3211 main(void)
3213 struct ibv_mr *mr;
3214 struct ibv_pd *pd = NULL;
3215 size_t length = 10;
3216 uint64_t iova = 0;
3217 int access = 0;
3218 void *addr = NULL;
3220 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3222 ibv_dereg_mr(mr);
3224 return 0;
3227 if ! compile_prog "" "-libverbs"; then
3228 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3232 ##########################################
3233 # xfsctl() probe, used for file-posix.c
3234 if test "$xfs" != "no" ; then
3235 cat > $TMPC << EOF
3236 #include <stddef.h> /* NULL */
3237 #include <xfs/xfs.h>
3238 int main(void)
3240 xfsctl(NULL, 0, 0, NULL);
3241 return 0;
3244 if compile_prog "" "" ; then
3245 xfs="yes"
3246 else
3247 if test "$xfs" = "yes" ; then
3248 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
3250 xfs=no
3254 ##########################################
3255 # vde libraries probe
3256 if test "$vde" != "no" ; then
3257 vde_libs="-lvdeplug"
3258 cat > $TMPC << EOF
3259 #include <libvdeplug.h>
3260 int main(void)
3262 struct vde_open_args a = {0, 0, 0};
3263 char s[] = "";
3264 vde_open(s, s, &a);
3265 return 0;
3268 if compile_prog "" "$vde_libs" ; then
3269 vde=yes
3270 else
3271 if test "$vde" = "yes" ; then
3272 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3274 vde=no
3278 ##########################################
3279 # netmap support probe
3280 # Apart from looking for netmap headers, we make sure that the host API version
3281 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3282 # a minor/major version number. Minor new features will be marked with values up
3283 # to 15, and if something happens that requires a change to the backend we will
3284 # move above 15, submit the backend fixes and modify this two bounds.
3285 if test "$netmap" != "no" ; then
3286 cat > $TMPC << EOF
3287 #include <inttypes.h>
3288 #include <net/if.h>
3289 #include <net/netmap.h>
3290 #include <net/netmap_user.h>
3291 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3292 #error
3293 #endif
3294 int main(void) { return 0; }
3296 if compile_prog "" "" ; then
3297 netmap=yes
3298 else
3299 if test "$netmap" = "yes" ; then
3300 feature_not_found "netmap"
3302 netmap=no
3306 ##########################################
3307 # libcap-ng library probe
3308 if test "$cap_ng" != "no" ; then
3309 cap_libs="-lcap-ng"
3310 cat > $TMPC << EOF
3311 #include <cap-ng.h>
3312 int main(void)
3314 capng_capability_to_name(CAPNG_EFFECTIVE);
3315 return 0;
3318 if compile_prog "" "$cap_libs" ; then
3319 cap_ng=yes
3320 else
3321 if test "$cap_ng" = "yes" ; then
3322 feature_not_found "cap_ng" "Install libcap-ng devel"
3324 cap_ng=no
3328 ##########################################
3329 # Sound support libraries probe
3331 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3332 for drv in $audio_drv_list; do
3333 case $drv in
3334 alsa | try-alsa)
3335 if $pkg_config alsa --exists; then
3336 alsa_libs=$($pkg_config alsa --libs)
3337 alsa_cflags=$($pkg_config alsa --cflags)
3338 alsa=yes
3339 if test "$drv" = "try-alsa"; then
3340 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3342 else
3343 if test "$drv" = "try-alsa"; then
3344 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3345 else
3346 error_exit "$drv check failed" \
3347 "Make sure to have the $drv libs and headers installed."
3352 pa | try-pa)
3353 if $pkg_config libpulse --exists; then
3354 libpulse=yes
3355 pulse_libs=$($pkg_config libpulse --libs)
3356 pulse_cflags=$($pkg_config libpulse --cflags)
3357 if test "$drv" = "try-pa"; then
3358 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3360 else
3361 if test "$drv" = "try-pa"; then
3362 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3363 else
3364 error_exit "$drv check failed" \
3365 "Make sure to have the $drv libs and headers installed."
3370 sdl)
3371 if test "$sdl" = "no"; then
3372 error_exit "sdl not found or disabled, can not use sdl audio driver"
3376 try-sdl)
3377 if test "$sdl" = "no"; then
3378 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3379 else
3380 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3384 coreaudio)
3385 coreaudio_libs="-framework CoreAudio"
3388 dsound)
3389 dsound_libs="-lole32 -ldxguid"
3390 audio_win_int="yes"
3393 oss)
3394 oss_libs="$oss_lib"
3397 jack | try-jack)
3398 if $pkg_config jack --exists; then
3399 libjack=yes
3400 jack_libs=$($pkg_config jack --libs)
3401 if test "$drv" = "try-jack"; then
3402 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3404 else
3405 if test "$drv" = "try-jack"; then
3406 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3407 else
3408 error_exit "$drv check failed" \
3409 "Make sure to have the $drv libs and headers installed."
3415 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3416 error_exit "Unknown driver '$drv' selected" \
3417 "Possible drivers are: $audio_possible_drivers"
3420 esac
3421 done
3423 ##########################################
3424 # BrlAPI probe
3426 if test "$brlapi" != "no" ; then
3427 brlapi_libs="-lbrlapi"
3428 cat > $TMPC << EOF
3429 #include <brlapi.h>
3430 #include <stddef.h>
3431 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3433 if compile_prog "" "$brlapi_libs" ; then
3434 brlapi=yes
3435 else
3436 if test "$brlapi" = "yes" ; then
3437 feature_not_found "brlapi" "Install brlapi devel"
3439 brlapi=no
3443 ##########################################
3444 # curl probe
3445 if test "$curl" != "no" ; then
3446 if $pkg_config libcurl --exists; then
3447 curlconfig="$pkg_config libcurl"
3448 else
3449 curlconfig=curl-config
3451 cat > $TMPC << EOF
3452 #include <curl/curl.h>
3453 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3455 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3456 curl_libs=$($curlconfig --libs 2>/dev/null)
3457 if compile_prog "$curl_cflags" "$curl_libs" ; then
3458 curl=yes
3459 else
3460 if test "$curl" = "yes" ; then
3461 feature_not_found "curl" "Install libcurl devel"
3463 curl=no
3465 fi # test "$curl"
3467 ##########################################
3468 # glib support probe
3470 glib_req_ver=2.48
3471 glib_modules=gthread-2.0
3472 if test "$modules" = yes; then
3473 glib_modules="$glib_modules gmodule-export-2.0"
3475 if test "$plugins" = yes; then
3476 glib_modules="$glib_modules gmodule-2.0"
3479 for i in $glib_modules; do
3480 if $pkg_config --atleast-version=$glib_req_ver $i; then
3481 glib_cflags=$($pkg_config --cflags $i)
3482 glib_libs=$($pkg_config --libs $i)
3483 else
3484 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3486 done
3488 # This workaround is required due to a bug in pkg-config file for glib as it
3489 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3491 if test "$static" = yes && test "$mingw32" = yes; then
3492 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3495 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3496 gio_cflags=$($pkg_config --cflags gio-2.0)
3497 gio_libs=$($pkg_config --libs gio-2.0)
3498 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3499 if [ ! -x "$gdbus_codegen" ]; then
3500 gdbus_codegen=
3502 # Check that the libraries actually work -- Ubuntu 18.04 ships
3503 # with pkg-config --static --libs data for gio-2.0 that is missing
3504 # -lblkid and will give a link error.
3505 cat > $TMPC <<EOF
3506 #include <gio/gio.h>
3507 int main(void)
3509 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3510 return 0;
3513 if compile_prog "$gio_cflags" "$gio_libs" ; then
3514 gio=yes
3515 else
3516 gio=no
3518 else
3519 gio=no
3522 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3523 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3524 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3527 # Sanity check that the current size_t matches the
3528 # size that glib thinks it should be. This catches
3529 # problems on multi-arch where people try to build
3530 # 32-bit QEMU while pointing at 64-bit glib headers
3531 cat > $TMPC <<EOF
3532 #include <glib.h>
3533 #include <unistd.h>
3535 #define QEMU_BUILD_BUG_ON(x) \
3536 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3538 int main(void) {
3539 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3540 return 0;
3544 if ! compile_prog "$glib_cflags" "$glib_libs" ; then
3545 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3546 "You probably need to set PKG_CONFIG_LIBDIR"\
3547 "to point to the right pkg-config files for your"\
3548 "build target"
3551 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3552 cat > $TMPC << EOF
3553 #include <glib.h>
3554 int main(void) { return 0; }
3556 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3557 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3558 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3559 CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
3563 # Silence clang warnings triggered by glib < 2.57.2
3564 cat > $TMPC << EOF
3565 #include <glib.h>
3566 typedef struct Foo {
3567 int i;
3568 } Foo;
3569 static void foo_free(Foo *f)
3571 g_free(f);
3573 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3574 int main(void) { return 0; }
3576 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3577 if cc_has_warning_flag "-Wno-unused-function"; then
3578 glib_cflags="$glib_cflags -Wno-unused-function"
3579 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
3583 ##########################################
3584 # SHA command probe for modules
3585 if test "$modules" = yes; then
3586 shacmd_probe="sha1sum sha1 shasum"
3587 for c in $shacmd_probe; do
3588 if has $c; then
3589 shacmd="$c"
3590 break
3592 done
3593 if test "$shacmd" = ""; then
3594 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3598 ##########################################
3599 # pthread probe
3600 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3602 pthread=no
3603 cat > $TMPC << EOF
3604 #include <pthread.h>
3605 static void *f(void *p) { return NULL; }
3606 int main(void) {
3607 pthread_t thread;
3608 pthread_create(&thread, 0, f, 0);
3609 return 0;
3612 if compile_prog "" "" ; then
3613 pthread=yes
3614 else
3615 for pthread_lib in $PTHREADLIBS_LIST; do
3616 if compile_prog "" "$pthread_lib" ; then
3617 pthread=yes
3618 found=no
3619 for lib_entry in $LIBS; do
3620 if test "$lib_entry" = "$pthread_lib"; then
3621 found=yes
3622 break
3624 done
3625 if test "$found" = "no"; then
3626 LIBS="$pthread_lib $LIBS"
3628 break
3630 done
3633 if test "$mingw32" != yes && test "$pthread" = no; then
3634 error_exit "pthread check failed" \
3635 "Make sure to have the pthread libs and headers installed."
3638 # check for pthread_setname_np with thread id
3639 pthread_setname_np_w_tid=no
3640 cat > $TMPC << EOF
3641 #include <pthread.h>
3643 static void *f(void *p) { return NULL; }
3644 int main(void)
3646 pthread_t thread;
3647 pthread_create(&thread, 0, f, 0);
3648 pthread_setname_np(thread, "QEMU");
3649 return 0;
3652 if compile_prog "" "$pthread_lib" ; then
3653 pthread_setname_np_w_tid=yes
3656 # check for pthread_setname_np without thread id
3657 pthread_setname_np_wo_tid=no
3658 cat > $TMPC << EOF
3659 #include <pthread.h>
3661 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3662 int main(void)
3664 pthread_t thread;
3665 pthread_create(&thread, 0, f, 0);
3666 return 0;
3669 if compile_prog "" "$pthread_lib" ; then
3670 pthread_setname_np_wo_tid=yes
3673 ##########################################
3674 # rbd probe
3675 if test "$rbd" != "no" ; then
3676 cat > $TMPC <<EOF
3677 #include <stdio.h>
3678 #include <rbd/librbd.h>
3679 int main(void) {
3680 rados_t cluster;
3681 rados_create(&cluster, NULL);
3682 return 0;
3685 rbd_libs="-lrbd -lrados"
3686 if compile_prog "" "$rbd_libs" ; then
3687 rbd=yes
3688 else
3689 if test "$rbd" = "yes" ; then
3690 feature_not_found "rados block device" "Install librbd/ceph devel"
3692 rbd=no
3696 ##########################################
3697 # libssh probe
3698 if test "$libssh" != "no" ; then
3699 if $pkg_config --exists libssh; then
3700 libssh_cflags=$($pkg_config libssh --cflags)
3701 libssh_libs=$($pkg_config libssh --libs)
3702 libssh=yes
3703 else
3704 if test "$libssh" = "yes" ; then
3705 error_exit "libssh required for --enable-libssh"
3707 libssh=no
3711 ##########################################
3712 # Check for libssh 0.8
3713 # This is done like this instead of using the LIBSSH_VERSION_* and
3714 # SSH_VERSION_* macros because some distributions in the past shipped
3715 # snapshots of the future 0.8 from Git, and those snapshots did not
3716 # have updated version numbers (still referring to 0.7.0).
3718 if test "$libssh" = "yes"; then
3719 cat > $TMPC <<EOF
3720 #include <libssh/libssh.h>
3721 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3723 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3724 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3728 ##########################################
3729 # linux-aio probe
3731 if test "$linux_aio" != "no" ; then
3732 cat > $TMPC <<EOF
3733 #include <libaio.h>
3734 #include <sys/eventfd.h>
3735 #include <stddef.h>
3736 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3738 if compile_prog "" "-laio" ; then
3739 linux_aio=yes
3740 else
3741 if test "$linux_aio" = "yes" ; then
3742 feature_not_found "linux AIO" "Install libaio devel"
3744 linux_aio=no
3747 ##########################################
3748 # linux-io-uring probe
3750 if test "$linux_io_uring" != "no" ; then
3751 if $pkg_config liburing; then
3752 linux_io_uring_cflags=$($pkg_config --cflags liburing)
3753 linux_io_uring_libs=$($pkg_config --libs liburing)
3754 linux_io_uring=yes
3755 else
3756 if test "$linux_io_uring" = "yes" ; then
3757 feature_not_found "linux io_uring" "Install liburing devel"
3759 linux_io_uring=no
3763 ##########################################
3764 # TPM emulation is only on POSIX
3766 if test "$tpm" = ""; then
3767 if test "$mingw32" = "yes"; then
3768 tpm=no
3769 else
3770 tpm=yes
3772 elif test "$tpm" = "yes"; then
3773 if test "$mingw32" = "yes" ; then
3774 error_exit "TPM emulation only available on POSIX systems"
3778 ##########################################
3779 # attr probe
3781 libattr_libs=
3782 if test "$attr" != "no" ; then
3783 cat > $TMPC <<EOF
3784 #include <stdio.h>
3785 #include <sys/types.h>
3786 #ifdef CONFIG_LIBATTR
3787 #include <attr/xattr.h>
3788 #else
3789 #include <sys/xattr.h>
3790 #endif
3791 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3793 if compile_prog "" "" ; then
3794 attr=yes
3795 # Older distros have <attr/xattr.h>, and need -lattr:
3796 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3797 attr=yes
3798 libattr_libs="-lattr"
3799 libattr=yes
3800 else
3801 if test "$attr" = "yes" ; then
3802 feature_not_found "ATTR" "Install libc6 or libattr devel"
3804 attr=no
3808 ##########################################
3809 # iovec probe
3810 cat > $TMPC <<EOF
3811 #include <sys/types.h>
3812 #include <sys/uio.h>
3813 #include <unistd.h>
3814 int main(void) { return sizeof(struct iovec); }
3816 iovec=no
3817 if compile_prog "" "" ; then
3818 iovec=yes
3821 ##########################################
3822 # preadv probe
3823 cat > $TMPC <<EOF
3824 #include <sys/types.h>
3825 #include <sys/uio.h>
3826 #include <unistd.h>
3827 int main(void) { return preadv(0, 0, 0, 0); }
3829 preadv=no
3830 if compile_prog "" "" ; then
3831 preadv=yes
3834 ##########################################
3835 # fdt probe
3837 case "$fdt" in
3838 auto | enabled | internal)
3839 # Simpler to always update submodule, even if not needed.
3840 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
3841 git_submodules="${git_submodules} dtc"
3844 esac
3846 ##########################################
3847 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3849 gbm="no"
3850 if $pkg_config gbm; then
3851 gbm_cflags="$($pkg_config --cflags gbm)"
3852 gbm_libs="$($pkg_config --libs gbm)"
3853 gbm="yes"
3856 if test "$opengl" != "no" ; then
3857 opengl_pkgs="epoxy gbm"
3858 if $pkg_config $opengl_pkgs; then
3859 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3860 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
3861 opengl=yes
3862 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3863 gtk_gl="yes"
3865 else
3866 if test "$opengl" = "yes" ; then
3867 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3869 opengl_cflags=""
3870 opengl_libs=""
3871 opengl=no
3875 if test "$opengl" = "yes"; then
3876 cat > $TMPC << EOF
3877 #include <epoxy/egl.h>
3878 #ifndef EGL_MESA_image_dma_buf_export
3879 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3880 #endif
3881 int main(void) { return 0; }
3883 if compile_prog "" "" ; then
3884 opengl_dmabuf=yes
3888 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
3889 for target in $target_list; do
3890 case $target in
3891 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
3892 need_x11=yes
3894 esac
3895 done
3898 ##########################################
3899 # libxml2 probe
3900 if test "$libxml2" != "no" ; then
3901 if $pkg_config --exists libxml-2.0; then
3902 libxml2="yes"
3903 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3904 libxml2_libs=$($pkg_config --libs libxml-2.0)
3905 else
3906 if test "$libxml2" = "yes"; then
3907 feature_not_found "libxml2" "Install libxml2 devel"
3909 libxml2="no"
3913 ##########################################
3914 # glusterfs probe
3915 if test "$glusterfs" != "no" ; then
3916 if $pkg_config --atleast-version=3 glusterfs-api; then
3917 glusterfs="yes"
3918 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3919 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3920 if $pkg_config --atleast-version=4 glusterfs-api; then
3921 glusterfs_xlator_opt="yes"
3923 if $pkg_config --atleast-version=5 glusterfs-api; then
3924 glusterfs_discard="yes"
3926 if $pkg_config --atleast-version=6 glusterfs-api; then
3927 glusterfs_fallocate="yes"
3928 glusterfs_zerofill="yes"
3930 cat > $TMPC << EOF
3931 #include <glusterfs/api/glfs.h>
3934 main(void)
3936 /* new glfs_ftruncate() passes two additional args */
3937 return glfs_ftruncate(NULL, 0, NULL, NULL);
3940 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
3941 glusterfs_ftruncate_has_stat="yes"
3943 cat > $TMPC << EOF
3944 #include <glusterfs/api/glfs.h>
3946 /* new glfs_io_cbk() passes two additional glfs_stat structs */
3947 static void
3948 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
3952 main(void)
3954 glfs_io_cbk iocb = &glusterfs_iocb;
3955 iocb(NULL, 0 , NULL, NULL, NULL);
3956 return 0;
3959 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
3960 glusterfs_iocb_has_stat="yes"
3962 else
3963 if test "$glusterfs" = "yes" ; then
3964 feature_not_found "GlusterFS backend support" \
3965 "Install glusterfs-api devel >= 3"
3967 glusterfs="no"
3971 # Check for inotify functions when we are building linux-user
3972 # emulator. This is done because older glibc versions don't
3973 # have syscall stubs for these implemented. In that case we
3974 # don't provide them even if kernel supports them.
3976 inotify=no
3977 cat > $TMPC << EOF
3978 #include <sys/inotify.h>
3981 main(void)
3983 /* try to start inotify */
3984 return inotify_init();
3987 if compile_prog "" "" ; then
3988 inotify=yes
3991 inotify1=no
3992 cat > $TMPC << EOF
3993 #include <sys/inotify.h>
3996 main(void)
3998 /* try to start inotify */
3999 return inotify_init1(0);
4002 if compile_prog "" "" ; then
4003 inotify1=yes
4006 # check if pipe2 is there
4007 pipe2=no
4008 cat > $TMPC << EOF
4009 #include <unistd.h>
4010 #include <fcntl.h>
4012 int main(void)
4014 int pipefd[2];
4015 return pipe2(pipefd, O_CLOEXEC);
4018 if compile_prog "" "" ; then
4019 pipe2=yes
4022 # check if accept4 is there
4023 accept4=no
4024 cat > $TMPC << EOF
4025 #include <sys/socket.h>
4026 #include <stddef.h>
4028 int main(void)
4030 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4031 return 0;
4034 if compile_prog "" "" ; then
4035 accept4=yes
4038 # check if tee/splice is there. vmsplice was added same time.
4039 splice=no
4040 cat > $TMPC << EOF
4041 #include <unistd.h>
4042 #include <fcntl.h>
4043 #include <limits.h>
4045 int main(void)
4047 int len, fd = 0;
4048 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4049 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4050 return 0;
4053 if compile_prog "" "" ; then
4054 splice=yes
4057 ##########################################
4058 # libnuma probe
4060 if test "$numa" != "no" ; then
4061 cat > $TMPC << EOF
4062 #include <numa.h>
4063 int main(void) { return numa_available(); }
4066 if compile_prog "" "-lnuma" ; then
4067 numa=yes
4068 numa_libs="-lnuma"
4069 else
4070 if test "$numa" = "yes" ; then
4071 feature_not_found "numa" "install numactl devel"
4073 numa=no
4077 malloc=system
4078 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4079 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4080 exit 1
4081 elif test "$tcmalloc" = "yes" ; then
4082 malloc=tcmalloc
4083 elif test "$jemalloc" = "yes" ; then
4084 malloc=jemalloc
4087 ##########################################
4088 # signalfd probe
4089 signalfd="no"
4090 cat > $TMPC << EOF
4091 #include <unistd.h>
4092 #include <sys/syscall.h>
4093 #include <signal.h>
4094 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4097 if compile_prog "" "" ; then
4098 signalfd=yes
4101 # check if optreset global is declared by <getopt.h>
4102 optreset="no"
4103 cat > $TMPC << EOF
4104 #include <getopt.h>
4105 int main(void) { return optreset; }
4108 if compile_prog "" "" ; then
4109 optreset=yes
4112 # check if eventfd is supported
4113 eventfd=no
4114 cat > $TMPC << EOF
4115 #include <sys/eventfd.h>
4117 int main(void)
4119 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4122 if compile_prog "" "" ; then
4123 eventfd=yes
4126 # check if memfd is supported
4127 memfd=no
4128 cat > $TMPC << EOF
4129 #include <sys/mman.h>
4131 int main(void)
4133 return memfd_create("foo", MFD_ALLOW_SEALING);
4136 if compile_prog "" "" ; then
4137 memfd=yes
4140 # check for usbfs
4141 have_usbfs=no
4142 if test "$linux_user" = "yes"; then
4143 cat > $TMPC << EOF
4144 #include <linux/usbdevice_fs.h>
4146 #ifndef USBDEVFS_GET_CAPABILITIES
4147 #error "USBDEVFS_GET_CAPABILITIES undefined"
4148 #endif
4150 #ifndef USBDEVFS_DISCONNECT_CLAIM
4151 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4152 #endif
4154 int main(void)
4156 return 0;
4159 if compile_prog "" ""; then
4160 have_usbfs=yes
4164 # check for fallocate
4165 fallocate=no
4166 cat > $TMPC << EOF
4167 #include <fcntl.h>
4169 int main(void)
4171 fallocate(0, 0, 0, 0);
4172 return 0;
4175 if compile_prog "" "" ; then
4176 fallocate=yes
4179 # check for fallocate hole punching
4180 fallocate_punch_hole=no
4181 cat > $TMPC << EOF
4182 #include <fcntl.h>
4183 #include <linux/falloc.h>
4185 int main(void)
4187 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4188 return 0;
4191 if compile_prog "" "" ; then
4192 fallocate_punch_hole=yes
4195 # check that fallocate supports range zeroing inside the file
4196 fallocate_zero_range=no
4197 cat > $TMPC << EOF
4198 #include <fcntl.h>
4199 #include <linux/falloc.h>
4201 int main(void)
4203 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4204 return 0;
4207 if compile_prog "" "" ; then
4208 fallocate_zero_range=yes
4211 # check for posix_fallocate
4212 posix_fallocate=no
4213 cat > $TMPC << EOF
4214 #include <fcntl.h>
4216 int main(void)
4218 posix_fallocate(0, 0, 0);
4219 return 0;
4222 if compile_prog "" "" ; then
4223 posix_fallocate=yes
4226 # check for sync_file_range
4227 sync_file_range=no
4228 cat > $TMPC << EOF
4229 #include <fcntl.h>
4231 int main(void)
4233 sync_file_range(0, 0, 0, 0);
4234 return 0;
4237 if compile_prog "" "" ; then
4238 sync_file_range=yes
4241 # check for linux/fiemap.h and FS_IOC_FIEMAP
4242 fiemap=no
4243 cat > $TMPC << EOF
4244 #include <sys/ioctl.h>
4245 #include <linux/fs.h>
4246 #include <linux/fiemap.h>
4248 int main(void)
4250 ioctl(0, FS_IOC_FIEMAP, 0);
4251 return 0;
4254 if compile_prog "" "" ; then
4255 fiemap=yes
4258 # check for dup3
4259 dup3=no
4260 cat > $TMPC << EOF
4261 #include <unistd.h>
4263 int main(void)
4265 dup3(0, 0, 0);
4266 return 0;
4269 if compile_prog "" "" ; then
4270 dup3=yes
4273 # check for ppoll support
4274 ppoll=no
4275 cat > $TMPC << EOF
4276 #include <poll.h>
4278 int main(void)
4280 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4281 ppoll(&pfd, 1, 0, 0);
4282 return 0;
4285 if compile_prog "" "" ; then
4286 ppoll=yes
4289 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4290 prctl_pr_set_timerslack=no
4291 cat > $TMPC << EOF
4292 #include <sys/prctl.h>
4294 int main(void)
4296 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4297 return 0;
4300 if compile_prog "" "" ; then
4301 prctl_pr_set_timerslack=yes
4304 # check for epoll support
4305 epoll=no
4306 cat > $TMPC << EOF
4307 #include <sys/epoll.h>
4309 int main(void)
4311 epoll_create(0);
4312 return 0;
4315 if compile_prog "" "" ; then
4316 epoll=yes
4319 # epoll_create1 is a later addition
4320 # so we must check separately for its presence
4321 epoll_create1=no
4322 cat > $TMPC << EOF
4323 #include <sys/epoll.h>
4325 int main(void)
4327 /* Note that we use epoll_create1 as a value, not as
4328 * a function being called. This is necessary so that on
4329 * old SPARC glibc versions where the function was present in
4330 * the library but not declared in the header file we will
4331 * fail the configure check. (Otherwise we will get a compiler
4332 * warning but not an error, and will proceed to fail the
4333 * qemu compile where we compile with -Werror.)
4335 return (int)(uintptr_t)&epoll_create1;
4338 if compile_prog "" "" ; then
4339 epoll_create1=yes
4342 # check for sendfile support
4343 sendfile=no
4344 cat > $TMPC << EOF
4345 #include <sys/sendfile.h>
4347 int main(void)
4349 return sendfile(0, 0, 0, 0);
4352 if compile_prog "" "" ; then
4353 sendfile=yes
4356 # check for timerfd support (glibc 2.8 and newer)
4357 timerfd=no
4358 cat > $TMPC << EOF
4359 #include <sys/timerfd.h>
4361 int main(void)
4363 return(timerfd_create(CLOCK_REALTIME, 0));
4366 if compile_prog "" "" ; then
4367 timerfd=yes
4370 # check for setns and unshare support
4371 setns=no
4372 cat > $TMPC << EOF
4373 #include <sched.h>
4375 int main(void)
4377 int ret;
4378 ret = setns(0, 0);
4379 ret = unshare(0);
4380 return ret;
4383 if compile_prog "" "" ; then
4384 setns=yes
4387 # clock_adjtime probe
4388 clock_adjtime=no
4389 cat > $TMPC <<EOF
4390 #include <time.h>
4392 int main(void)
4394 return clock_adjtime(0, 0);
4397 clock_adjtime=no
4398 if compile_prog "" "" ; then
4399 clock_adjtime=yes
4402 # syncfs probe
4403 syncfs=no
4404 cat > $TMPC <<EOF
4405 #include <unistd.h>
4407 int main(void)
4409 return syncfs(0);
4412 syncfs=no
4413 if compile_prog "" "" ; then
4414 syncfs=yes
4417 # check for kcov support (kernel must be 4.4+, compiled with certain options)
4418 kcov=no
4419 if check_include sys/kcov.h ; then
4420 kcov=yes
4423 # check for btrfs filesystem support (kernel must be 3.9+)
4424 btrfs=no
4425 if check_include linux/btrfs.h ; then
4426 btrfs=yes
4429 # Search for bswap_32 function
4430 byteswap_h=no
4431 cat > $TMPC << EOF
4432 #include <byteswap.h>
4433 int main(void) { return bswap_32(0); }
4435 if compile_prog "" "" ; then
4436 byteswap_h=yes
4439 # Search for bswap32 function
4440 bswap_h=no
4441 cat > $TMPC << EOF
4442 #include <sys/endian.h>
4443 #include <sys/types.h>
4444 #include <machine/bswap.h>
4445 int main(void) { return bswap32(0); }
4447 if compile_prog "" "" ; then
4448 bswap_h=yes
4451 ##########################################
4452 # Do we have libiscsi >= 1.9.0
4453 if test "$libiscsi" != "no" ; then
4454 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4455 libiscsi="yes"
4456 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4457 libiscsi_libs=$($pkg_config --libs libiscsi)
4458 else
4459 if test "$libiscsi" = "yes" ; then
4460 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4462 libiscsi="no"
4466 ##########################################
4467 # Do we need librt
4468 # uClibc provides 2 versions of clock_gettime(), one with realtime
4469 # support and one without. This means that the clock_gettime() don't
4470 # need -lrt. We still need it for timer_create() so we check for this
4471 # function in addition.
4472 cat > $TMPC <<EOF
4473 #include <signal.h>
4474 #include <time.h>
4475 int main(void) {
4476 timer_create(CLOCK_REALTIME, NULL, NULL);
4477 return clock_gettime(CLOCK_REALTIME, NULL);
4481 if compile_prog "" "" ; then
4483 # we need pthread for static linking. use previous pthread test result
4484 elif compile_prog "" "$pthread_lib -lrt" ; then
4485 LIBS="$LIBS -lrt"
4488 # Check whether we have openpty() in either libc or libutil
4489 cat > $TMPC << EOF
4490 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4491 int main(void) { return openpty(0, 0, 0, 0, 0); }
4494 have_openpty="no"
4495 if compile_prog "" "" ; then
4496 have_openpty="yes"
4497 else
4498 if compile_prog "" "-lutil" ; then
4499 have_openpty="yes"
4503 ##########################################
4504 # spice probe
4505 if test "$spice" != "no" ; then
4506 cat > $TMPC << EOF
4507 #include <spice.h>
4508 int main(void) { spice_server_new(); return 0; }
4510 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4511 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4512 if $pkg_config --atleast-version=0.12.5 spice-server && \
4513 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4514 compile_prog "$spice_cflags" "$spice_libs" ; then
4515 spice="yes"
4516 else
4517 if test "$spice" = "yes" ; then
4518 feature_not_found "spice" \
4519 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4521 spice="no"
4525 # check for smartcard support
4526 if test "$smartcard" != "no"; then
4527 if $pkg_config --atleast-version=2.5.1 libcacard; then
4528 libcacard_cflags=$($pkg_config --cflags libcacard)
4529 libcacard_libs=$($pkg_config --libs libcacard)
4530 smartcard="yes"
4531 else
4532 if test "$smartcard" = "yes"; then
4533 feature_not_found "smartcard" "Install libcacard devel"
4535 smartcard="no"
4539 # check for libusb
4540 if test "$libusb" != "no" ; then
4541 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4542 libusb="yes"
4543 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4544 libusb_libs=$($pkg_config --libs libusb-1.0)
4545 else
4546 if test "$libusb" = "yes"; then
4547 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4549 libusb="no"
4553 # check for usbredirparser for usb network redirection support
4554 if test "$usb_redir" != "no" ; then
4555 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4556 usb_redir="yes"
4557 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4558 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4559 else
4560 if test "$usb_redir" = "yes"; then
4561 feature_not_found "usb-redir" "Install usbredir devel"
4563 usb_redir="no"
4567 ##########################################
4568 # check if we have VSS SDK headers for win
4570 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4571 test "$vss_win32_sdk" != "no" ; then
4572 case "$vss_win32_sdk" in
4573 "") vss_win32_include="-isystem $source_path" ;;
4574 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4575 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4576 vss_win32_include="-isystem $source_path/.sdk/vss"
4577 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4579 *) vss_win32_include="-isystem $vss_win32_sdk"
4580 esac
4581 cat > $TMPC << EOF
4582 #define __MIDL_user_allocate_free_DEFINED__
4583 #include <inc/win2003/vss.h>
4584 int main(void) { return VSS_CTX_BACKUP; }
4586 if compile_prog "$vss_win32_include" "" ; then
4587 guest_agent_with_vss="yes"
4588 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4589 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4590 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4591 else
4592 if test "$vss_win32_sdk" != "" ; then
4593 echo "ERROR: Please download and install Microsoft VSS SDK:"
4594 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4595 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4596 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4597 echo "ERROR: The headers are extracted in the directory \`inc'."
4598 feature_not_found "VSS support"
4600 guest_agent_with_vss="no"
4604 ##########################################
4605 # lookup Windows platform SDK (if not specified)
4606 # The SDK is needed only to build .tlb (type library) file of guest agent
4607 # VSS provider from the source. It is usually unnecessary because the
4608 # pre-compiled .tlb file is included.
4610 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4611 test "$guest_agent_with_vss" = "yes" ; then
4612 if test -z "$win_sdk"; then
4613 programfiles="$PROGRAMFILES"
4614 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4615 if test -n "$programfiles"; then
4616 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4617 else
4618 feature_not_found "Windows SDK"
4620 elif test "$win_sdk" = "no"; then
4621 win_sdk=""
4625 ##########################################
4626 # check if mingw environment provides a recent ntddscsi.h
4627 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4628 cat > $TMPC << EOF
4629 #include <windows.h>
4630 #include <ntddscsi.h>
4631 int main(void) {
4632 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4633 #error Missing required ioctl definitions
4634 #endif
4635 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4636 return addr.Lun;
4639 if compile_prog "" "" ; then
4640 guest_agent_ntddscsi=yes
4641 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4645 ##########################################
4646 # virgl renderer probe
4648 if test "$virglrenderer" != "no" ; then
4649 cat > $TMPC << EOF
4650 #include <virglrenderer.h>
4651 int main(void) { virgl_renderer_poll(); return 0; }
4653 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4654 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4655 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4656 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4657 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4658 virglrenderer="yes"
4659 else
4660 if test "$virglrenderer" = "yes" ; then
4661 feature_not_found "virglrenderer"
4663 virglrenderer="no"
4667 ##########################################
4668 # capstone
4670 case "$capstone" in
4671 auto | enabled | internal)
4672 # Simpler to always update submodule, even if not needed.
4673 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
4674 git_submodules="${git_submodules} capstone"
4677 esac
4679 ##########################################
4680 # check if we have fdatasync
4682 fdatasync=no
4683 cat > $TMPC << EOF
4684 #include <unistd.h>
4685 int main(void) {
4686 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4687 return fdatasync(0);
4688 #else
4689 #error Not supported
4690 #endif
4693 if compile_prog "" "" ; then
4694 fdatasync=yes
4697 ##########################################
4698 # check if we have madvise
4700 madvise=no
4701 cat > $TMPC << EOF
4702 #include <sys/types.h>
4703 #include <sys/mman.h>
4704 #include <stddef.h>
4705 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4707 if compile_prog "" "" ; then
4708 madvise=yes
4711 ##########################################
4712 # check if we have posix_madvise
4714 posix_madvise=no
4715 cat > $TMPC << EOF
4716 #include <sys/mman.h>
4717 #include <stddef.h>
4718 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4720 if compile_prog "" "" ; then
4721 posix_madvise=yes
4724 ##########################################
4725 # check if we have posix_memalign()
4727 posix_memalign=no
4728 cat > $TMPC << EOF
4729 #include <stdlib.h>
4730 int main(void) {
4731 void *p;
4732 return posix_memalign(&p, 8, 8);
4735 if compile_prog "" "" ; then
4736 posix_memalign=yes
4739 ##########################################
4740 # check if we have posix_syslog
4742 posix_syslog=no
4743 cat > $TMPC << EOF
4744 #include <syslog.h>
4745 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4747 if compile_prog "" "" ; then
4748 posix_syslog=yes
4751 ##########################################
4752 # check if we have sem_timedwait
4754 sem_timedwait=no
4755 cat > $TMPC << EOF
4756 #include <semaphore.h>
4757 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
4759 if compile_prog "" "" ; then
4760 sem_timedwait=yes
4763 ##########################################
4764 # check if we have strchrnul
4766 strchrnul=no
4767 cat > $TMPC << EOF
4768 #include <string.h>
4769 int main(void);
4770 // Use a haystack that the compiler shouldn't be able to constant fold
4771 char *haystack = (char*)&main;
4772 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4774 if compile_prog "" "" ; then
4775 strchrnul=yes
4778 #########################################
4779 # check if we have st_atim
4781 st_atim=no
4782 cat > $TMPC << EOF
4783 #include <sys/stat.h>
4784 #include <stddef.h>
4785 int main(void) { return offsetof(struct stat, st_atim); }
4787 if compile_prog "" "" ; then
4788 st_atim=yes
4791 ##########################################
4792 # check if trace backend exists
4794 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4795 if test "$?" -ne 0 ; then
4796 error_exit "invalid trace backends" \
4797 "Please choose supported trace backends."
4800 ##########################################
4801 # For 'ust' backend, test if ust headers are present
4802 if have_backend "ust"; then
4803 cat > $TMPC << EOF
4804 #include <lttng/tracepoint.h>
4805 int main(void) { return 0; }
4807 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4808 if $pkg_config lttng-ust --exists; then
4809 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4810 else
4811 lttng_ust_libs="-llttng-ust -ldl"
4813 if $pkg_config liburcu-bp --exists; then
4814 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4815 else
4816 urcu_bp_libs="-lurcu-bp"
4818 else
4819 error_exit "Trace backend 'ust' missing lttng-ust header files"
4823 ##########################################
4824 # For 'dtrace' backend, test if 'dtrace' command is present
4825 if have_backend "dtrace"; then
4826 if ! has 'dtrace' ; then
4827 error_exit "dtrace command is not found in PATH $PATH"
4829 trace_backend_stap="no"
4830 if has 'stap' ; then
4831 trace_backend_stap="yes"
4833 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
4834 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
4835 # instead. QEMU --enable-modules depends on this because the SystemTap
4836 # semaphores are linked into the main binary and not the module's shared
4837 # object.
4838 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
4842 ##########################################
4843 # check and set a backend for coroutine
4845 # We prefer ucontext, but it's not always possible. The fallback
4846 # is sigcontext. On Windows the only valid backend is the Windows
4847 # specific one.
4849 ucontext_works=no
4850 if test "$darwin" != "yes"; then
4851 cat > $TMPC << EOF
4852 #include <ucontext.h>
4853 #ifdef __stub_makecontext
4854 #error Ignoring glibc stub makecontext which will always fail
4855 #endif
4856 int main(void) { makecontext(0, 0, 0); return 0; }
4858 if compile_prog "" "" ; then
4859 ucontext_works=yes
4863 if test "$coroutine" = ""; then
4864 if test "$mingw32" = "yes"; then
4865 coroutine=win32
4866 elif test "$ucontext_works" = "yes"; then
4867 coroutine=ucontext
4868 else
4869 coroutine=sigaltstack
4871 else
4872 case $coroutine in
4873 windows)
4874 if test "$mingw32" != "yes"; then
4875 error_exit "'windows' coroutine backend only valid for Windows"
4877 # Unfortunately the user visible backend name doesn't match the
4878 # coroutine-*.c filename for this case, so we have to adjust it here.
4879 coroutine=win32
4881 ucontext)
4882 if test "$ucontext_works" != "yes"; then
4883 feature_not_found "ucontext"
4886 sigaltstack)
4887 if test "$mingw32" = "yes"; then
4888 error_exit "only the 'windows' coroutine backend is valid for Windows"
4892 error_exit "unknown coroutine backend $coroutine"
4894 esac
4897 if test "$coroutine_pool" = ""; then
4898 coroutine_pool=yes
4901 if test "$debug_stack_usage" = "yes"; then
4902 if test "$coroutine_pool" = "yes"; then
4903 echo "WARN: disabling coroutine pool for stack usage debugging"
4904 coroutine_pool=no
4908 ##################################################
4909 # SafeStack
4912 if test "$safe_stack" = "yes"; then
4913 cat > $TMPC << EOF
4914 int main(int argc, char *argv[])
4916 #if ! __has_feature(safe_stack)
4917 #error SafeStack Disabled
4918 #endif
4919 return 0;
4922 flag="-fsanitize=safe-stack"
4923 # Check that safe-stack is supported and enabled.
4924 if compile_prog "-Werror $flag" "$flag"; then
4925 # Flag needed both at compilation and at linking
4926 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4927 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4928 else
4929 error_exit "SafeStack not supported by your compiler"
4931 if test "$coroutine" != "ucontext"; then
4932 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4934 else
4935 cat > $TMPC << EOF
4936 int main(int argc, char *argv[])
4938 #if defined(__has_feature)
4939 #if __has_feature(safe_stack)
4940 #error SafeStack Enabled
4941 #endif
4942 #endif
4943 return 0;
4946 if test "$safe_stack" = "no"; then
4947 # Make sure that safe-stack is disabled
4948 if ! compile_prog "-Werror" ""; then
4949 # SafeStack was already enabled, try to explicitly remove the feature
4950 flag="-fno-sanitize=safe-stack"
4951 if ! compile_prog "-Werror $flag" "$flag"; then
4952 error_exit "Configure cannot disable SafeStack"
4954 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4955 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4957 else # "$safe_stack" = ""
4958 # Set safe_stack to yes or no based on pre-existing flags
4959 if compile_prog "-Werror" ""; then
4960 safe_stack="no"
4961 else
4962 safe_stack="yes"
4963 if test "$coroutine" != "ucontext"; then
4964 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4970 ##########################################
4971 # check if we have open_by_handle_at
4973 open_by_handle_at=no
4974 cat > $TMPC << EOF
4975 #include <fcntl.h>
4976 #if !defined(AT_EMPTY_PATH)
4977 # error missing definition
4978 #else
4979 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4980 #endif
4982 if compile_prog "" "" ; then
4983 open_by_handle_at=yes
4986 ########################################
4987 # check if we have linux/magic.h
4989 linux_magic_h=no
4990 cat > $TMPC << EOF
4991 #include <linux/magic.h>
4992 int main(void) {
4993 return 0;
4996 if compile_prog "" "" ; then
4997 linux_magic_h=yes
5000 ########################################
5001 # check if we have valgrind/valgrind.h
5003 valgrind_h=no
5004 cat > $TMPC << EOF
5005 #include <valgrind/valgrind.h>
5006 int main(void) {
5007 return 0;
5010 if compile_prog "" "" ; then
5011 valgrind_h=yes
5014 ########################################
5015 # check if environ is declared
5017 has_environ=no
5018 cat > $TMPC << EOF
5019 #include <unistd.h>
5020 int main(void) {
5021 environ = 0;
5022 return 0;
5025 if compile_prog "" "" ; then
5026 has_environ=yes
5029 ########################################
5030 # check if cpuid.h is usable.
5032 cat > $TMPC << EOF
5033 #include <cpuid.h>
5034 int main(void) {
5035 unsigned a, b, c, d;
5036 int max = __get_cpuid_max(0, 0);
5038 if (max >= 1) {
5039 __cpuid(1, a, b, c, d);
5042 if (max >= 7) {
5043 __cpuid_count(7, 0, a, b, c, d);
5046 return 0;
5049 if compile_prog "" "" ; then
5050 cpuid_h=yes
5053 ##########################################
5054 # avx2 optimization requirement check
5056 # There is no point enabling this if cpuid.h is not usable,
5057 # since we won't be able to select the new routines.
5059 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5060 cat > $TMPC << EOF
5061 #pragma GCC push_options
5062 #pragma GCC target("avx2")
5063 #include <cpuid.h>
5064 #include <immintrin.h>
5065 static int bar(void *a) {
5066 __m256i x = *(__m256i *)a;
5067 return _mm256_testz_si256(x, x);
5069 int main(int argc, char *argv[]) { return bar(argv[0]); }
5071 if compile_object "" ; then
5072 avx2_opt="yes"
5073 else
5074 avx2_opt="no"
5078 ##########################################
5079 # avx512f optimization requirement check
5081 # There is no point enabling this if cpuid.h is not usable,
5082 # since we won't be able to select the new routines.
5083 # by default, it is turned off.
5084 # if user explicitly want to enable it, check environment
5086 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5087 cat > $TMPC << EOF
5088 #pragma GCC push_options
5089 #pragma GCC target("avx512f")
5090 #include <cpuid.h>
5091 #include <immintrin.h>
5092 static int bar(void *a) {
5093 __m512i x = *(__m512i *)a;
5094 return _mm512_test_epi64_mask(x, x);
5096 int main(int argc, char *argv[])
5098 return bar(argv[0]);
5101 if ! compile_object "" ; then
5102 avx512f_opt="no"
5104 else
5105 avx512f_opt="no"
5108 ########################################
5109 # check if __[u]int128_t is usable.
5111 int128=no
5112 cat > $TMPC << EOF
5113 __int128_t a;
5114 __uint128_t b;
5115 int main (void) {
5116 a = a + b;
5117 b = a * b;
5118 a = a * a;
5119 return 0;
5122 if compile_prog "" "" ; then
5123 int128=yes
5126 #########################################
5127 # See if 128-bit atomic operations are supported.
5129 atomic128=no
5130 if test "$int128" = "yes"; then
5131 cat > $TMPC << EOF
5132 int main(void)
5134 unsigned __int128 x = 0, y = 0;
5135 y = __atomic_load_16(&x, 0);
5136 __atomic_store_16(&x, y, 0);
5137 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5138 return 0;
5141 if compile_prog "" "" ; then
5142 atomic128=yes
5146 cmpxchg128=no
5147 if test "$int128" = yes && test "$atomic128" = no; then
5148 cat > $TMPC << EOF
5149 int main(void)
5151 unsigned __int128 x = 0, y = 0;
5152 __sync_val_compare_and_swap_16(&x, y, x);
5153 return 0;
5156 if compile_prog "" "" ; then
5157 cmpxchg128=yes
5161 #########################################
5162 # See if 64-bit atomic operations are supported.
5163 # Note that without __atomic builtins, we can only
5164 # assume atomic loads/stores max at pointer size.
5166 cat > $TMPC << EOF
5167 #include <stdint.h>
5168 int main(void)
5170 uint64_t x = 0, y = 0;
5171 #ifdef __ATOMIC_RELAXED
5172 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
5173 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
5174 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
5175 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
5176 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
5177 #else
5178 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5179 __sync_lock_test_and_set(&x, y);
5180 __sync_val_compare_and_swap(&x, y, 0);
5181 __sync_fetch_and_add(&x, y);
5182 #endif
5183 return 0;
5186 if compile_prog "" "" ; then
5187 atomic64=yes
5190 #########################################
5191 # See if --dynamic-list is supported by the linker
5192 ld_dynamic_list="no"
5193 if test "$static" = "no" ; then
5194 cat > $TMPTXT <<EOF
5196 foo;
5200 cat > $TMPC <<EOF
5201 #include <stdio.h>
5202 void foo(void);
5204 void foo(void)
5206 printf("foo\n");
5209 int main(void)
5211 foo();
5212 return 0;
5216 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5217 ld_dynamic_list="yes"
5221 #########################################
5222 # See if -exported_symbols_list is supported by the linker
5224 ld_exported_symbols_list="no"
5225 if test "$static" = "no" ; then
5226 cat > $TMPTXT <<EOF
5227 _foo
5230 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5231 ld_exported_symbols_list="yes"
5235 if test "$plugins" = "yes" &&
5236 test "$ld_dynamic_list" = "no" &&
5237 test "$ld_exported_symbols_list" = "no" ; then
5238 error_exit \
5239 "Plugin support requires dynamic linking and specifying a set of symbols " \
5240 "that are exported to plugins. Unfortunately your linker doesn't " \
5241 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5242 "for this purpose. You can't build with --static."
5245 ########################################
5246 # See if __attribute__((alias)) is supported.
5247 # This false for Xcode 9, but has been remedied for Xcode 10.
5248 # Unfortunately, travis uses Xcode 9 by default.
5250 attralias=no
5251 cat > $TMPC << EOF
5252 int x = 1;
5253 extern const int y __attribute__((alias("x")));
5254 int main(void) { return 0; }
5256 if compile_prog "" "" ; then
5257 attralias=yes
5260 ########################################
5261 # check if getauxval is available.
5263 getauxval=no
5264 cat > $TMPC << EOF
5265 #include <sys/auxv.h>
5266 int main(void) {
5267 return getauxval(AT_HWCAP) == 0;
5270 if compile_prog "" "" ; then
5271 getauxval=yes
5274 ########################################
5275 # check if ccache is interfering with
5276 # semantic analysis of macros
5278 unset CCACHE_CPP2
5279 ccache_cpp2=no
5280 cat > $TMPC << EOF
5281 static const int Z = 1;
5282 #define fn() ({ Z; })
5283 #define TAUT(X) ((X) == Z)
5284 #define PAREN(X, Y) (X == Y)
5285 #define ID(X) (X)
5286 int main(int argc, char *argv[])
5288 int x = 0, y = 0;
5289 x = ID(x);
5290 x = fn();
5291 fn();
5292 if (PAREN(x, y)) return 0;
5293 if (TAUT(Z)) return 0;
5294 return 0;
5298 if ! compile_object "-Werror"; then
5299 ccache_cpp2=yes
5302 #################################################
5303 # clang does not support glibc + FORTIFY_SOURCE.
5305 if test "$fortify_source" != "no"; then
5306 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5307 fortify_source="no";
5308 elif test -n "$cxx" && has $cxx &&
5309 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5310 fortify_source="no";
5311 else
5312 fortify_source="yes"
5316 ###############################################
5317 # Check if copy_file_range is provided by glibc
5318 have_copy_file_range=no
5319 cat > $TMPC << EOF
5320 #include <unistd.h>
5321 int main(void) {
5322 copy_file_range(0, NULL, 0, NULL, 0, 0);
5323 return 0;
5326 if compile_prog "" "" ; then
5327 have_copy_file_range=yes
5330 ##########################################
5331 # check if struct fsxattr is available via linux/fs.h
5333 have_fsxattr=no
5334 cat > $TMPC << EOF
5335 #include <linux/fs.h>
5336 struct fsxattr foo;
5337 int main(void) {
5338 return 0;
5341 if compile_prog "" "" ; then
5342 have_fsxattr=yes
5345 ##########################################
5346 # check for usable membarrier system call
5347 if test "$membarrier" = "yes"; then
5348 have_membarrier=no
5349 if test "$mingw32" = "yes" ; then
5350 have_membarrier=yes
5351 elif test "$linux" = "yes" ; then
5352 cat > $TMPC << EOF
5353 #include <linux/membarrier.h>
5354 #include <sys/syscall.h>
5355 #include <unistd.h>
5356 #include <stdlib.h>
5357 int main(void) {
5358 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5359 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5360 exit(0);
5363 if compile_prog "" "" ; then
5364 have_membarrier=yes
5367 if test "$have_membarrier" = "no"; then
5368 feature_not_found "membarrier" "membarrier system call not available"
5370 else
5371 # Do not enable it by default even for Mingw32, because it doesn't
5372 # work on Wine.
5373 membarrier=no
5376 ##########################################
5377 # check if rtnetlink.h exists and is useful
5378 have_rtnetlink=no
5379 cat > $TMPC << EOF
5380 #include <linux/rtnetlink.h>
5381 int main(void) {
5382 return IFLA_PROTO_DOWN;
5385 if compile_prog "" "" ; then
5386 have_rtnetlink=yes
5389 ##########################################
5390 # check for usable AF_VSOCK environment
5391 have_af_vsock=no
5392 cat > $TMPC << EOF
5393 #include <errno.h>
5394 #include <sys/types.h>
5395 #include <sys/socket.h>
5396 #if !defined(AF_VSOCK)
5397 # error missing AF_VSOCK flag
5398 #endif
5399 #include <linux/vm_sockets.h>
5400 int main(void) {
5401 int sock, ret;
5402 struct sockaddr_vm svm;
5403 socklen_t len = sizeof(svm);
5404 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5405 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5406 if ((ret == -1) && (errno == ENOTCONN)) {
5407 return 0;
5409 return -1;
5412 if compile_prog "" "" ; then
5413 have_af_vsock=yes
5416 ##########################################
5417 # check for usable AF_ALG environment
5418 have_afalg=no
5419 cat > $TMPC << EOF
5420 #include <errno.h>
5421 #include <sys/types.h>
5422 #include <sys/socket.h>
5423 #include <linux/if_alg.h>
5424 int main(void) {
5425 int sock;
5426 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5427 return sock;
5430 if compile_prog "" "" ; then
5431 have_afalg=yes
5433 if test "$crypto_afalg" = "yes"
5434 then
5435 if test "$have_afalg" != "yes"
5436 then
5437 error_exit "AF_ALG requested but could not be detected"
5442 #################################################
5443 # check for sysmacros.h
5445 have_sysmacros=no
5446 cat > $TMPC << EOF
5447 #include <sys/sysmacros.h>
5448 int main(void) {
5449 return makedev(0, 0);
5452 if compile_prog "" "" ; then
5453 have_sysmacros=yes
5456 ##########################################
5457 # check for _Static_assert()
5459 have_static_assert=no
5460 cat > $TMPC << EOF
5461 _Static_assert(1, "success");
5462 int main(void) {
5463 return 0;
5466 if compile_prog "" "" ; then
5467 have_static_assert=yes
5470 ##########################################
5471 # check for utmpx.h, it is missing e.g. on OpenBSD
5473 have_utmpx=no
5474 cat > $TMPC << EOF
5475 #include <utmpx.h>
5476 struct utmpx user_info;
5477 int main(void) {
5478 return 0;
5481 if compile_prog "" "" ; then
5482 have_utmpx=yes
5485 ##########################################
5486 # check for getrandom()
5488 have_getrandom=no
5489 cat > $TMPC << EOF
5490 #include <sys/random.h>
5491 int main(void) {
5492 return getrandom(0, 0, GRND_NONBLOCK);
5495 if compile_prog "" "" ; then
5496 have_getrandom=yes
5499 ##########################################
5500 # checks for sanitizers
5502 have_asan=no
5503 have_ubsan=no
5504 have_asan_iface_h=no
5505 have_asan_iface_fiber=no
5507 if test "$sanitizers" = "yes" ; then
5508 write_c_skeleton
5509 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5510 have_asan=yes
5513 # we could use a simple skeleton for flags checks, but this also
5514 # detect the static linking issue of ubsan, see also:
5515 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5516 cat > $TMPC << EOF
5517 #include <stdlib.h>
5518 int main(void) {
5519 void *tmp = malloc(10);
5520 if (tmp != NULL) {
5521 return *(int *)(tmp + 2);
5523 return 1;
5526 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5527 have_ubsan=yes
5530 if check_include "sanitizer/asan_interface.h" ; then
5531 have_asan_iface_h=yes
5534 cat > $TMPC << EOF
5535 #include <sanitizer/asan_interface.h>
5536 int main(void) {
5537 __sanitizer_start_switch_fiber(0, 0, 0);
5538 return 0;
5541 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5542 have_asan_iface_fiber=yes
5546 ##########################################
5547 # checks for fuzzer
5548 if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
5549 write_c_fuzzer_skeleton
5550 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
5551 have_fuzzer=yes
5552 else
5553 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
5554 exit 1
5558 # Thread sanitizer is, for now, much noisier than the other sanitizers;
5559 # keep it separate until that is not the case.
5560 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
5561 error_exit "TSAN is not supported with other sanitiziers."
5563 have_tsan=no
5564 have_tsan_iface_fiber=no
5565 if test "$tsan" = "yes" ; then
5566 write_c_skeleton
5567 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5568 have_tsan=yes
5570 cat > $TMPC << EOF
5571 #include <sanitizer/tsan_interface.h>
5572 int main(void) {
5573 __tsan_create_fiber(0);
5574 return 0;
5577 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5578 have_tsan_iface_fiber=yes
5582 ##########################################
5583 # check for libpmem
5585 if test "$libpmem" != "no"; then
5586 if $pkg_config --exists "libpmem"; then
5587 libpmem="yes"
5588 libpmem_libs=$($pkg_config --libs libpmem)
5589 libpmem_cflags=$($pkg_config --cflags libpmem)
5590 else
5591 if test "$libpmem" = "yes" ; then
5592 feature_not_found "libpmem" "Install nvml or pmdk"
5594 libpmem="no"
5598 ##########################################
5599 # check for libdaxctl
5601 if test "$libdaxctl" != "no"; then
5602 if $pkg_config --atleast-version=57 "libdaxctl"; then
5603 libdaxctl="yes"
5604 libdaxctl_libs=$($pkg_config --libs libdaxctl)
5605 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
5606 else
5607 if test "$libdaxctl" = "yes" ; then
5608 feature_not_found "libdaxctl" "Install libdaxctl"
5610 libdaxctl="no"
5614 ##########################################
5615 # check for slirp
5617 case "$slirp" in
5618 auto | enabled | internal)
5619 # Simpler to always update submodule, even if not needed.
5620 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5621 git_submodules="${git_submodules} slirp"
5624 esac
5626 ##########################################
5627 # check for usable __NR_keyctl syscall
5629 if test "$linux" = "yes" ; then
5631 have_keyring=no
5632 cat > $TMPC << EOF
5633 #include <errno.h>
5634 #include <asm/unistd.h>
5635 #include <linux/keyctl.h>
5636 #include <unistd.h>
5637 int main(void) {
5638 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
5641 if compile_prog "" "" ; then
5642 have_keyring=yes
5645 if test "$secret_keyring" != "no"
5646 then
5647 if test "$have_keyring" = "yes"
5648 then
5649 secret_keyring=yes
5650 else
5651 if test "$secret_keyring" = "yes"
5652 then
5653 error_exit "syscall __NR_keyctl requested, \
5654 but not implemented on your system"
5655 else
5656 secret_keyring=no
5661 ##########################################
5662 # End of CC checks
5663 # After here, no more $cc or $ld runs
5665 write_c_skeleton
5667 if test "$gcov" = "yes" ; then
5669 elif test "$fortify_source" = "yes" ; then
5670 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5671 debug=no
5674 case "$ARCH" in
5675 alpha)
5676 # Ensure there's only a single GP
5677 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
5679 esac
5681 if test "$gprof" = "yes" ; then
5682 QEMU_CFLAGS="-p $QEMU_CFLAGS"
5683 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
5686 if test "$have_asan" = "yes"; then
5687 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
5688 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
5689 if test "$have_asan_iface_h" = "no" ; then
5690 echo "ASAN build enabled, but ASAN header missing." \
5691 "Without code annotation, the report may be inferior."
5692 elif test "$have_asan_iface_fiber" = "no" ; then
5693 echo "ASAN build enabled, but ASAN header is too old." \
5694 "Without code annotation, the report may be inferior."
5697 if test "$have_tsan" = "yes" ; then
5698 if test "$have_tsan_iface_fiber" = "yes" ; then
5699 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
5700 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
5701 else
5702 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
5704 elif test "$tsan" = "yes" ; then
5705 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
5707 if test "$have_ubsan" = "yes"; then
5708 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
5709 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
5712 ##########################################
5713 # Do we have libnfs
5714 if test "$libnfs" != "no" ; then
5715 if $pkg_config --atleast-version=1.9.3 libnfs; then
5716 libnfs="yes"
5717 libnfs_libs=$($pkg_config --libs libnfs)
5718 else
5719 if test "$libnfs" = "yes" ; then
5720 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5722 libnfs="no"
5726 ##########################################
5728 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
5729 if test "$solaris" = "no" && test "$tsan" = "no"; then
5730 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5731 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
5735 # Use ASLR, no-SEH and DEP if available
5736 if test "$mingw32" = "yes" ; then
5737 flags="--no-seh --nxcompat"
5739 # Disable ASLR for debug builds to allow debugging with gdb
5740 if test "$debug" = "no" ; then
5741 flags="--dynamicbase $flags"
5744 for flag in $flags; do
5745 if ld_has $flag ; then
5746 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
5748 done
5751 # We can only support ivshmem if we have eventfd
5752 if [ "$eventfd" = "yes" ]; then
5753 ivshmem=yes
5756 if test "$softmmu" = yes ; then
5757 if test "$linux" = yes; then
5758 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
5759 virtfs=yes
5760 else
5761 if test "$virtfs" = yes; then
5762 error_exit "VirtFS requires libcap-ng devel and libattr devel"
5764 virtfs=no
5766 else
5767 if test "$virtfs" = yes; then
5768 error_exit "VirtFS is supported only on Linux"
5770 virtfs=no
5774 # Probe for guest agent support/options
5776 if [ "$guest_agent" != "no" ]; then
5777 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
5778 guest_agent=no
5779 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5780 guest_agent=yes
5781 elif [ "$guest_agent" != yes ]; then
5782 guest_agent=no
5783 else
5784 error_exit "Guest agent is not supported on this platform"
5788 # Guest agent Window MSI package
5790 if test "$guest_agent" != yes; then
5791 if test "$guest_agent_msi" = yes; then
5792 error_exit "MSI guest agent package requires guest agent enabled"
5794 guest_agent_msi=no
5795 elif test "$mingw32" != "yes"; then
5796 if test "$guest_agent_msi" = "yes"; then
5797 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5799 guest_agent_msi=no
5800 elif ! has wixl; then
5801 if test "$guest_agent_msi" = "yes"; then
5802 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5804 guest_agent_msi=no
5805 else
5806 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5807 # disabled explicitly
5808 if test "$guest_agent_msi" != "no"; then
5809 guest_agent_msi=yes
5813 if test "$guest_agent_msi" = "yes"; then
5814 if test "$guest_agent_with_vss" = "yes"; then
5815 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5818 if test "$QEMU_GA_MANUFACTURER" = ""; then
5819 QEMU_GA_MANUFACTURER=QEMU
5822 if test "$QEMU_GA_DISTRO" = ""; then
5823 QEMU_GA_DISTRO=Linux
5826 if test "$QEMU_GA_VERSION" = ""; then
5827 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5830 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5832 case "$cpu" in
5833 x86_64)
5834 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5836 i386)
5837 QEMU_GA_MSI_ARCH="-D Arch=32"
5840 error_exit "CPU $cpu not supported for building installation package"
5842 esac
5845 # Mac OS X ships with a broken assembler
5846 roms=
5847 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5848 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
5849 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
5850 # Different host OS linkers have different ideas about the name of the ELF
5851 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5852 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5853 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5854 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5855 ld_i386_emulation="$emu"
5856 roms="optionrom"
5857 break
5859 done
5862 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
5863 if test "$cpu" = "s390x" ; then
5864 write_c_skeleton
5865 if compile_prog "-march=z900" ""; then
5866 roms="$roms s390-ccw"
5867 # SLOF is required for building the s390-ccw firmware on s390x,
5868 # since it is using the libnet code from SLOF for network booting.
5869 if test -e "${source_path}/.git" ; then
5870 git_submodules="${git_submodules} roms/SLOF"
5875 # Check that the C++ compiler exists and works with the C compiler.
5876 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5877 if has $cxx; then
5878 cat > $TMPC <<EOF
5879 int c_function(void);
5880 int main(void) { return c_function(); }
5883 compile_object
5885 cat > $TMPCXX <<EOF
5886 extern "C" {
5887 int c_function(void);
5889 int c_function(void) { return 42; }
5892 update_cxxflags
5894 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
5895 # C++ compiler $cxx works ok with C compiler $cc
5897 else
5898 echo "C++ compiler $cxx does not work with C compiler $cc"
5899 echo "Disabling C++ specific optional code"
5900 cxx=
5902 else
5903 echo "No C++ compiler available; disabling C++ specific optional code"
5904 cxx=
5907 if test $git_update = 'yes' ; then
5908 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
5911 config_host_mak="config-host.mak"
5913 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5914 echo >> $config_host_mak
5916 echo all: >> $config_host_mak
5917 echo "GIT=$git" >> $config_host_mak
5918 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5919 echo "GIT_UPDATE=$git_update" >> $config_host_mak
5921 echo "ARCH=$ARCH" >> $config_host_mak
5923 if test "$default_devices" = "yes" ; then
5924 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
5925 else
5926 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
5928 if test "$debug_tcg" = "yes" ; then
5929 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5931 if test "$strip_opt" = "yes" ; then
5932 echo "STRIP=${strip}" >> $config_host_mak
5934 if test "$bigendian" = "yes" ; then
5935 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5937 if test "$mingw32" = "yes" ; then
5938 echo "CONFIG_WIN32=y" >> $config_host_mak
5939 rc_version=$(cat $source_path/VERSION)
5940 version_major=${rc_version%%.*}
5941 rc_version=${rc_version#*.}
5942 version_minor=${rc_version%%.*}
5943 rc_version=${rc_version#*.}
5944 version_subminor=${rc_version%%.*}
5945 version_micro=0
5946 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5947 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5948 if test "$guest_agent_with_vss" = "yes" ; then
5949 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5950 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5951 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5953 if test "$guest_agent_ntddscsi" = "yes" ; then
5954 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
5956 if test "$guest_agent_msi" = "yes"; then
5957 echo "CONFIG_QGA_MSI=y" >> $config_host_mak
5958 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5959 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5960 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5961 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5962 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5963 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5965 else
5966 echo "CONFIG_POSIX=y" >> $config_host_mak
5969 if test "$linux" = "yes" ; then
5970 echo "CONFIG_LINUX=y" >> $config_host_mak
5973 if test "$darwin" = "yes" ; then
5974 echo "CONFIG_DARWIN=y" >> $config_host_mak
5977 if test "$solaris" = "yes" ; then
5978 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5980 if test "$haiku" = "yes" ; then
5981 echo "CONFIG_HAIKU=y" >> $config_host_mak
5983 if test "$static" = "yes" ; then
5984 echo "CONFIG_STATIC=y" >> $config_host_mak
5986 if test "$profiler" = "yes" ; then
5987 echo "CONFIG_PROFILER=y" >> $config_host_mak
5989 if test "$want_tools" = "yes" ; then
5990 echo "CONFIG_TOOLS=y" >> $config_host_mak
5992 if test "$guest_agent" = "yes" ; then
5993 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
5995 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5996 if test "$vde" = "yes" ; then
5997 echo "CONFIG_VDE=y" >> $config_host_mak
5998 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6000 if test "$netmap" = "yes" ; then
6001 echo "CONFIG_NETMAP=y" >> $config_host_mak
6003 if test "$l2tpv3" = "yes" ; then
6004 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6006 if test "$gprof" = "yes" ; then
6007 echo "CONFIG_GPROF=y" >> $config_host_mak
6009 if test "$cap_ng" = "yes" ; then
6010 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
6011 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
6013 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6014 for drv in $audio_drv_list; do
6015 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6016 echo "$def=y" >> $config_host_mak
6017 done
6018 if test "$alsa" = "yes" ; then
6019 echo "CONFIG_ALSA=y" >> $config_host_mak
6021 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6022 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
6023 if test "$libpulse" = "yes" ; then
6024 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
6026 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6027 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
6028 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6029 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6030 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6031 if test "$libjack" = "yes" ; then
6032 echo "CONFIG_LIBJACK=y" >> $config_host_mak
6034 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
6035 if test "$audio_win_int" = "yes" ; then
6036 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6038 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6039 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6040 if test "$xfs" = "yes" ; then
6041 echo "CONFIG_XFS=y" >> $config_host_mak
6043 qemu_version=$(head $source_path/VERSION)
6044 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6045 echo "SRC_PATH=$source_path" >> $config_host_mak
6046 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6047 if test "$modules" = "yes"; then
6048 # $shacmd can generate a hash started with digit, which the compiler doesn't
6049 # like as an symbol. So prefix it with an underscore
6050 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6051 echo "CONFIG_MODULES=y" >> $config_host_mak
6053 if test "$module_upgrades" = "yes"; then
6054 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6056 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6057 echo "CONFIG_X11=y" >> $config_host_mak
6058 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6059 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6061 if test "$pipe2" = "yes" ; then
6062 echo "CONFIG_PIPE2=y" >> $config_host_mak
6064 if test "$accept4" = "yes" ; then
6065 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6067 if test "$splice" = "yes" ; then
6068 echo "CONFIG_SPLICE=y" >> $config_host_mak
6070 if test "$eventfd" = "yes" ; then
6071 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6073 if test "$memfd" = "yes" ; then
6074 echo "CONFIG_MEMFD=y" >> $config_host_mak
6076 if test "$have_usbfs" = "yes" ; then
6077 echo "CONFIG_USBFS=y" >> $config_host_mak
6079 if test "$fallocate" = "yes" ; then
6080 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6082 if test "$fallocate_punch_hole" = "yes" ; then
6083 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6085 if test "$fallocate_zero_range" = "yes" ; then
6086 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6088 if test "$posix_fallocate" = "yes" ; then
6089 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6091 if test "$sync_file_range" = "yes" ; then
6092 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6094 if test "$fiemap" = "yes" ; then
6095 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6097 if test "$dup3" = "yes" ; then
6098 echo "CONFIG_DUP3=y" >> $config_host_mak
6100 if test "$ppoll" = "yes" ; then
6101 echo "CONFIG_PPOLL=y" >> $config_host_mak
6103 if test "$prctl_pr_set_timerslack" = "yes" ; then
6104 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6106 if test "$epoll" = "yes" ; then
6107 echo "CONFIG_EPOLL=y" >> $config_host_mak
6109 if test "$epoll_create1" = "yes" ; then
6110 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6112 if test "$sendfile" = "yes" ; then
6113 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6115 if test "$timerfd" = "yes" ; then
6116 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6118 if test "$setns" = "yes" ; then
6119 echo "CONFIG_SETNS=y" >> $config_host_mak
6121 if test "$clock_adjtime" = "yes" ; then
6122 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6124 if test "$syncfs" = "yes" ; then
6125 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6127 if test "$kcov" = "yes" ; then
6128 echo "CONFIG_KCOV=y" >> $config_host_mak
6130 if test "$btrfs" = "yes" ; then
6131 echo "CONFIG_BTRFS=y" >> $config_host_mak
6133 if test "$inotify" = "yes" ; then
6134 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6136 if test "$inotify1" = "yes" ; then
6137 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6139 if test "$sem_timedwait" = "yes" ; then
6140 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6142 if test "$strchrnul" = "yes" ; then
6143 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6145 if test "$st_atim" = "yes" ; then
6146 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
6148 if test "$byteswap_h" = "yes" ; then
6149 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6151 if test "$bswap_h" = "yes" ; then
6152 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6154 if test "$curl" = "yes" ; then
6155 echo "CONFIG_CURL=y" >> $config_host_mak
6156 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6157 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6159 if test "$brlapi" = "yes" ; then
6160 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6161 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6163 if test "$gtk" = "yes" ; then
6164 echo "CONFIG_GTK=y" >> $config_host_mak
6165 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6166 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6167 if test "$gtk_gl" = "yes" ; then
6168 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6171 if test "$gio" = "yes" ; then
6172 echo "CONFIG_GIO=y" >> $config_host_mak
6173 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6174 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6175 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
6177 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6178 if test "$gnutls" = "yes" ; then
6179 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6180 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
6181 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
6183 if test "$gcrypt" = "yes" ; then
6184 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6185 if test "$gcrypt_hmac" = "yes" ; then
6186 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6188 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
6189 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
6191 if test "$nettle" = "yes" ; then
6192 echo "CONFIG_NETTLE=y" >> $config_host_mak
6193 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6194 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
6195 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
6197 if test "$qemu_private_xts" = "yes" ; then
6198 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
6200 if test "$tasn1" = "yes" ; then
6201 echo "CONFIG_TASN1=y" >> $config_host_mak
6203 if test "$auth_pam" = "yes" ; then
6204 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6206 if test "$have_ifaddrs_h" = "yes" ; then
6207 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6209 if test "$have_drm_h" = "yes" ; then
6210 echo "HAVE_DRM_H=y" >> $config_host_mak
6212 if test "$have_broken_size_max" = "yes" ; then
6213 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6215 if test "$have_openpty" = "yes" ; then
6216 echo "HAVE_OPENPTY=y" >> $config_host_mak
6218 if test "$have_sys_signal_h" = "yes" ; then
6219 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
6222 # Work around a system header bug with some kernel/XFS header
6223 # versions where they both try to define 'struct fsxattr':
6224 # xfs headers will not try to redefine structs from linux headers
6225 # if this macro is set.
6226 if test "$have_fsxattr" = "yes" ; then
6227 echo "HAVE_FSXATTR=y" >> $config_host_mak
6229 if test "$have_copy_file_range" = "yes" ; then
6230 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6232 if test "$vte" = "yes" ; then
6233 echo "CONFIG_VTE=y" >> $config_host_mak
6234 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6235 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6237 if test "$virglrenderer" = "yes" ; then
6238 echo "CONFIG_VIRGL=y" >> $config_host_mak
6239 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6240 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6242 if test "$xen" = "enabled" ; then
6243 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6244 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6245 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
6246 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
6248 if test "$linux_aio" = "yes" ; then
6249 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6251 if test "$linux_io_uring" = "yes" ; then
6252 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
6253 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
6254 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
6256 if test "$attr" = "yes" ; then
6257 echo "CONFIG_ATTR=y" >> $config_host_mak
6258 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
6260 if test "$libattr" = "yes" ; then
6261 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6263 if test "$virtfs" = "yes" ; then
6264 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6266 if test "$vhost_scsi" = "yes" ; then
6267 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6269 if test "$vhost_net" = "yes" ; then
6270 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6272 if test "$vhost_net_user" = "yes" ; then
6273 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
6275 if test "$vhost_net_vdpa" = "yes" ; then
6276 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
6278 if test "$vhost_crypto" = "yes" ; then
6279 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6281 if test "$vhost_vsock" = "yes" ; then
6282 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6283 if test "$vhost_user" = "yes" ; then
6284 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
6287 if test "$vhost_kernel" = "yes" ; then
6288 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6290 if test "$vhost_user" = "yes" ; then
6291 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6293 if test "$vhost_vdpa" = "yes" ; then
6294 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
6296 if test "$vhost_user_fs" = "yes" ; then
6297 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
6299 if test "$iovec" = "yes" ; then
6300 echo "CONFIG_IOVEC=y" >> $config_host_mak
6302 if test "$preadv" = "yes" ; then
6303 echo "CONFIG_PREADV=y" >> $config_host_mak
6305 if test "$membarrier" = "yes" ; then
6306 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6308 if test "$signalfd" = "yes" ; then
6309 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6311 if test "$optreset" = "yes" ; then
6312 echo "HAVE_OPTRESET=y" >> $config_host_mak
6314 if test "$tcg" = "enabled"; then
6315 if test "$tcg_interpreter" = "yes" ; then
6316 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6319 if test "$fdatasync" = "yes" ; then
6320 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6322 if test "$madvise" = "yes" ; then
6323 echo "CONFIG_MADVISE=y" >> $config_host_mak
6325 if test "$posix_madvise" = "yes" ; then
6326 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6328 if test "$posix_memalign" = "yes" ; then
6329 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6331 if test "$spice" = "yes" ; then
6332 echo "CONFIG_SPICE=y" >> $config_host_mak
6333 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
6334 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
6337 if test "$smartcard" = "yes" ; then
6338 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6339 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6340 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6343 if test "$libusb" = "yes" ; then
6344 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6345 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6346 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6349 if test "$usb_redir" = "yes" ; then
6350 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6351 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6352 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6355 if test "$opengl" = "yes" ; then
6356 echo "CONFIG_OPENGL=y" >> $config_host_mak
6357 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
6358 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6359 if test "$opengl_dmabuf" = "yes" ; then
6360 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6364 if test "$gbm" = "yes" ; then
6365 echo "CONFIG_GBM=y" >> $config_host_mak
6366 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6367 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6371 if test "$avx2_opt" = "yes" ; then
6372 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6375 if test "$avx512f_opt" = "yes" ; then
6376 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
6379 if test "$lzo" = "yes" ; then
6380 echo "CONFIG_LZO=y" >> $config_host_mak
6381 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
6384 if test "$snappy" = "yes" ; then
6385 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6386 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
6389 if test "$bzip2" = "yes" ; then
6390 echo "CONFIG_BZIP2=y" >> $config_host_mak
6391 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6394 if test "$lzfse" = "yes" ; then
6395 echo "CONFIG_LZFSE=y" >> $config_host_mak
6396 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6399 if test "$zstd" = "yes" ; then
6400 echo "CONFIG_ZSTD=y" >> $config_host_mak
6401 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
6402 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
6405 if test "$libiscsi" = "yes" ; then
6406 echo "CONFIG_LIBISCSI=y" >> $config_host_mak
6407 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6408 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6411 if test "$libnfs" = "yes" ; then
6412 echo "CONFIG_LIBNFS=y" >> $config_host_mak
6413 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6416 if test "$seccomp" = "yes"; then
6417 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6418 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6419 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6422 # XXX: suppress that
6423 if [ "$bsd" = "yes" ] ; then
6424 echo "CONFIG_BSD=y" >> $config_host_mak
6427 if test "$qom_cast_debug" = "yes" ; then
6428 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6430 if test "$rbd" = "yes" ; then
6431 echo "CONFIG_RBD=y" >> $config_host_mak
6432 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6435 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6436 if test "$coroutine_pool" = "yes" ; then
6437 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6438 else
6439 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6442 if test "$debug_stack_usage" = "yes" ; then
6443 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6446 if test "$crypto_afalg" = "yes" ; then
6447 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6450 if test "$open_by_handle_at" = "yes" ; then
6451 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6454 if test "$linux_magic_h" = "yes" ; then
6455 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6458 if test "$valgrind_h" = "yes" ; then
6459 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6462 if test "$have_asan_iface_fiber" = "yes" ; then
6463 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6466 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
6467 echo "CONFIG_TSAN=y" >> $config_host_mak
6470 if test "$has_environ" = "yes" ; then
6471 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6474 if test "$cpuid_h" = "yes" ; then
6475 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6478 if test "$int128" = "yes" ; then
6479 echo "CONFIG_INT128=y" >> $config_host_mak
6482 if test "$atomic128" = "yes" ; then
6483 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6486 if test "$cmpxchg128" = "yes" ; then
6487 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6490 if test "$atomic64" = "yes" ; then
6491 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6494 if test "$attralias" = "yes" ; then
6495 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
6498 if test "$getauxval" = "yes" ; then
6499 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6502 if test "$glusterfs" = "yes" ; then
6503 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
6504 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6505 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6508 if test "$glusterfs_xlator_opt" = "yes" ; then
6509 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6512 if test "$glusterfs_discard" = "yes" ; then
6513 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6516 if test "$glusterfs_fallocate" = "yes" ; then
6517 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6520 if test "$glusterfs_zerofill" = "yes" ; then
6521 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6524 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
6525 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
6528 if test "$glusterfs_iocb_has_stat" = "yes" ; then
6529 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
6532 if test "$libssh" = "yes" ; then
6533 echo "CONFIG_LIBSSH=y" >> $config_host_mak
6534 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
6535 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
6538 if test "$live_block_migration" = "yes" ; then
6539 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6542 if test "$tpm" = "yes"; then
6543 echo 'CONFIG_TPM=y' >> $config_host_mak
6546 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6547 if have_backend "nop"; then
6548 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6550 if have_backend "simple"; then
6551 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6552 # Set the appropriate trace file.
6553 trace_file="\"$trace_file-\" FMT_pid"
6555 if have_backend "log"; then
6556 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6558 if have_backend "ust"; then
6559 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6560 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6561 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
6563 if have_backend "dtrace"; then
6564 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6565 if test "$trace_backend_stap" = "yes" ; then
6566 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6569 if have_backend "ftrace"; then
6570 if test "$linux" = "yes" ; then
6571 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6572 else
6573 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6576 if have_backend "syslog"; then
6577 if test "$posix_syslog" = "yes" ; then
6578 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6579 else
6580 feature_not_found "syslog(trace backend)" "syslog not available"
6583 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6585 if test "$rdma" = "yes" ; then
6586 echo "CONFIG_RDMA=y" >> $config_host_mak
6587 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6590 if test "$pvrdma" = "yes" ; then
6591 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6594 if test "$have_rtnetlink" = "yes" ; then
6595 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6598 if test "$libxml2" = "yes" ; then
6599 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6600 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6601 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6604 if test "$replication" = "yes" ; then
6605 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6608 if test "$have_af_vsock" = "yes" ; then
6609 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6612 if test "$have_sysmacros" = "yes" ; then
6613 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6616 if test "$have_static_assert" = "yes" ; then
6617 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6620 if test "$have_utmpx" = "yes" ; then
6621 echo "HAVE_UTMPX=y" >> $config_host_mak
6623 if test "$have_getrandom" = "yes" ; then
6624 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6626 if test "$ivshmem" = "yes" ; then
6627 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6629 if test "$debug_mutex" = "yes" ; then
6630 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6633 # Hold two types of flag:
6634 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6635 # a thread we have a handle to
6636 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
6637 # platform
6638 if test "$pthread_setname_np_w_tid" = "yes" ; then
6639 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6640 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6641 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6642 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6643 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
6646 if test "$libpmem" = "yes" ; then
6647 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6648 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
6649 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
6652 if test "$libdaxctl" = "yes" ; then
6653 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
6654 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
6657 if test "$bochs" = "yes" ; then
6658 echo "CONFIG_BOCHS=y" >> $config_host_mak
6660 if test "$cloop" = "yes" ; then
6661 echo "CONFIG_CLOOP=y" >> $config_host_mak
6663 if test "$dmg" = "yes" ; then
6664 echo "CONFIG_DMG=y" >> $config_host_mak
6666 if test "$qcow1" = "yes" ; then
6667 echo "CONFIG_QCOW1=y" >> $config_host_mak
6669 if test "$vdi" = "yes" ; then
6670 echo "CONFIG_VDI=y" >> $config_host_mak
6672 if test "$vvfat" = "yes" ; then
6673 echo "CONFIG_VVFAT=y" >> $config_host_mak
6675 if test "$qed" = "yes" ; then
6676 echo "CONFIG_QED=y" >> $config_host_mak
6678 if test "$parallels" = "yes" ; then
6679 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6681 if test "$sheepdog" = "yes" ; then
6682 add_to deprecated_features "sheepdog"
6683 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6685 if test "$pty_h" = "yes" ; then
6686 echo "HAVE_PTY_H=y" >> $config_host_mak
6688 if test "$have_mlockall" = "yes" ; then
6689 echo "HAVE_MLOCKALL=y" >> $config_host_mak
6691 if test "$fuzzing" = "yes" ; then
6692 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
6693 # needed CFLAGS have already been provided
6694 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
6695 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
6696 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
6697 else
6698 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
6702 if test "$plugins" = "yes" ; then
6703 echo "CONFIG_PLUGIN=y" >> $config_host_mak
6704 # Copy the export object list to the build dir
6705 if test "$ld_dynamic_list" = "yes" ; then
6706 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
6707 ld_symbols=qemu-plugins-ld.symbols
6708 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
6709 elif test "$ld_exported_symbols_list" = "yes" ; then
6710 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
6711 ld64_symbols=qemu-plugins-ld64.symbols
6712 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
6713 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
6714 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
6715 else
6716 error_exit \
6717 "If \$plugins=yes, either \$ld_dynamic_list or " \
6718 "\$ld_exported_symbols_list should have been set to 'yes'."
6722 if test -n "$gdb_bin" ; then
6723 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
6726 if test "$secret_keyring" = "yes" ; then
6727 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
6730 echo "ROMS=$roms" >> $config_host_mak
6731 echo "MAKE=$make" >> $config_host_mak
6732 echo "PYTHON=$python" >> $config_host_mak
6733 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
6734 echo "MESON=$meson" >> $config_host_mak
6735 echo "NINJA=$ninja" >> $config_host_mak
6736 echo "CC=$cc" >> $config_host_mak
6737 if $iasl -h > /dev/null 2>&1; then
6738 echo "CONFIG_IASL=$iasl" >> $config_host_mak
6740 echo "CXX=$cxx" >> $config_host_mak
6741 echo "OBJCC=$objcc" >> $config_host_mak
6742 echo "AR=$ar" >> $config_host_mak
6743 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6744 echo "AS=$as" >> $config_host_mak
6745 echo "CCAS=$ccas" >> $config_host_mak
6746 echo "CPP=$cpp" >> $config_host_mak
6747 echo "OBJCOPY=$objcopy" >> $config_host_mak
6748 echo "LD=$ld" >> $config_host_mak
6749 echo "RANLIB=$ranlib" >> $config_host_mak
6750 echo "NM=$nm" >> $config_host_mak
6751 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
6752 echo "WINDRES=$windres" >> $config_host_mak
6753 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6754 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6755 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6756 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6757 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
6758 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6759 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6760 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6761 echo "EXESUF=$EXESUF" >> $config_host_mak
6762 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
6763 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
6764 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6765 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6766 if test "$gcov" = "yes" ; then
6767 echo "CONFIG_GCOV=y" >> $config_host_mak
6770 if test "$fuzzing" != "no"; then
6771 echo "CONFIG_FUZZ=y" >> $config_host_mak
6773 echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
6775 if test "$rng_none" = "yes"; then
6776 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
6779 # use included Linux headers
6780 if test "$linux" = "yes" ; then
6781 mkdir -p linux-headers
6782 case "$cpu" in
6783 i386|x86_64|x32)
6784 linux_arch=x86
6786 ppc|ppc64|ppc64le)
6787 linux_arch=powerpc
6789 s390x)
6790 linux_arch=s390
6792 aarch64)
6793 linux_arch=arm64
6795 mips64)
6796 linux_arch=mips
6799 # For most CPUs the kernel architecture name and QEMU CPU name match.
6800 linux_arch="$cpu"
6802 esac
6803 # For non-KVM architectures we will not have asm headers
6804 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6805 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6809 for target in $target_list; do
6810 target_dir="$target"
6811 target_name=$(echo $target | cut -d '-' -f 1)
6812 mkdir -p $target_dir
6813 case $target in
6814 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
6815 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
6816 esac
6817 done
6819 echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
6820 if test "$default_targets" = "yes"; then
6821 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
6824 if test "$numa" = "yes"; then
6825 echo "CONFIG_NUMA=y" >> $config_host_mak
6826 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
6829 if test "$ccache_cpp2" = "yes"; then
6830 echo "export CCACHE_CPP2=y" >> $config_host_mak
6833 if test "$safe_stack" = "yes"; then
6834 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
6837 # If we're using a separate build tree, set it up now.
6838 # DIRS are directories which we simply mkdir in the build tree;
6839 # LINKS are things to symlink back into the source tree
6840 # (these can be both files and directories).
6841 # Caution: do not add files or directories here using wildcards. This
6842 # will result in problems later if a new file matching the wildcard is
6843 # added to the source tree -- nothing will cause configure to be rerun
6844 # so the build tree will be missing the link back to the new file, and
6845 # tests might fail. Prefer to keep the relevant files in their own
6846 # directory and symlink the directory instead.
6847 # UNLINK is used to remove symlinks from older development versions
6848 # that might get into the way when doing "git update" without doing
6849 # a "make distclean" in between.
6850 DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
6851 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
6852 DIRS="$DIRS docs docs/interop fsdev scsi"
6853 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
6854 DIRS="$DIRS roms/seabios"
6855 DIRS="$DIRS contrib/plugins/"
6856 LINKS="Makefile"
6857 LINKS="$LINKS tests/tcg/lm32/Makefile"
6858 LINKS="$LINKS tests/tcg/Makefile.target"
6859 LINKS="$LINKS pc-bios/optionrom/Makefile"
6860 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
6861 LINKS="$LINKS roms/seabios/Makefile"
6862 LINKS="$LINKS pc-bios/qemu-icon.bmp"
6863 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
6864 LINKS="$LINKS tests/acceptance tests/data"
6865 LINKS="$LINKS tests/qemu-iotests/check"
6866 LINKS="$LINKS python"
6867 LINKS="$LINKS contrib/plugins/Makefile "
6868 UNLINK="pc-bios/keymaps"
6869 for bios_file in \
6870 $source_path/pc-bios/*.bin \
6871 $source_path/pc-bios/*.elf \
6872 $source_path/pc-bios/*.lid \
6873 $source_path/pc-bios/*.rom \
6874 $source_path/pc-bios/*.dtb \
6875 $source_path/pc-bios/*.img \
6876 $source_path/pc-bios/openbios-* \
6877 $source_path/pc-bios/u-boot.* \
6878 $source_path/pc-bios/edk2-*.fd.bz2 \
6879 $source_path/pc-bios/palcode-*
6881 LINKS="$LINKS pc-bios/$(basename $bios_file)"
6882 done
6883 mkdir -p $DIRS
6884 for f in $LINKS ; do
6885 if [ -e "$source_path/$f" ]; then
6886 symlink "$source_path/$f" "$f"
6888 done
6889 for f in $UNLINK ; do
6890 if [ -L "$f" ]; then
6891 rm -f "$f"
6893 done
6895 (for i in $cross_cc_vars; do
6896 export $i
6897 done
6898 export target_list source_path use_containers
6899 $source_path/tests/tcg/configure.sh)
6901 # temporary config to build submodules
6902 for rom in seabios; do
6903 config_mak=roms/$rom/config.mak
6904 echo "# Automatically generated by configure - do not modify" > $config_mak
6905 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6906 echo "AS=$as" >> $config_mak
6907 echo "CCAS=$ccas" >> $config_mak
6908 echo "CC=$cc" >> $config_mak
6909 echo "BCC=bcc" >> $config_mak
6910 echo "CPP=$cpp" >> $config_mak
6911 echo "OBJCOPY=objcopy" >> $config_mak
6912 echo "IASL=$iasl" >> $config_mak
6913 echo "LD=$ld" >> $config_mak
6914 echo "RANLIB=$ranlib" >> $config_mak
6915 done
6917 # set up qemu-iotests in this build directory
6918 iotests_common_env="tests/qemu-iotests/common.env"
6920 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6921 echo >> "$iotests_common_env"
6922 echo "export PYTHON='$python'" >> "$iotests_common_env"
6924 if test "$skip_meson" = no; then
6925 cross="config-meson.cross.new"
6926 meson_quote() {
6927 echo "'$(echo $* | sed "s/ /','/g")'"
6930 echo "# Automatically generated by configure - do not modify" > $cross
6931 echo "[properties]" >> $cross
6932 test -z "$cxx" && echo "link_language = 'c'" >> $cross
6933 echo "[built-in options]" >> $cross
6934 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
6935 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
6936 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6937 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6938 echo "[binaries]" >> $cross
6939 echo "c = [$(meson_quote $cc)]" >> $cross
6940 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
6941 echo "ar = [$(meson_quote $ar)]" >> $cross
6942 echo "nm = [$(meson_quote $nm)]" >> $cross
6943 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
6944 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
6945 if has $sdl2_config; then
6946 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
6948 echo "strip = [$(meson_quote $strip)]" >> $cross
6949 echo "windres = [$(meson_quote $windres)]" >> $cross
6950 if test -n "$cross_prefix"; then
6951 cross_arg="--cross-file config-meson.cross"
6952 echo "[host_machine]" >> $cross
6953 if test "$mingw32" = "yes" ; then
6954 echo "system = 'windows'" >> $cross
6956 if test "$linux" = "yes" ; then
6957 echo "system = 'linux'" >> $cross
6959 case "$ARCH" in
6960 i386|x86_64)
6961 echo "cpu_family = 'x86'" >> $cross
6963 ppc64le)
6964 echo "cpu_family = 'ppc64'" >> $cross
6967 echo "cpu_family = '$ARCH'" >> $cross
6969 esac
6970 echo "cpu = '$cpu'" >> $cross
6971 if test "$bigendian" = "yes" ; then
6972 echo "endian = 'big'" >> $cross
6973 else
6974 echo "endian = 'little'" >> $cross
6976 else
6977 cross_arg="--native-file config-meson.cross"
6979 mv $cross config-meson.cross
6981 rm -rf meson-private meson-info meson-logs
6982 unset staticpic
6983 if ! version_ge "$($meson --version)" 0.56.0; then
6984 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
6986 NINJA=$ninja $meson setup \
6987 --prefix "$prefix" \
6988 --libdir "$libdir" \
6989 --libexecdir "$libexecdir" \
6990 --bindir "$bindir" \
6991 --includedir "$includedir" \
6992 --datadir "$datadir" \
6993 --mandir "$mandir" \
6994 --sysconfdir "$sysconfdir" \
6995 --localedir "$localedir" \
6996 --localstatedir "$local_statedir" \
6997 -Ddocdir="$docdir" \
6998 -Dqemu_firmwarepath="$firmwarepath" \
6999 -Dqemu_suffix="$qemu_suffix" \
7000 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
7001 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
7002 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
7003 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
7004 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
7005 ${staticpic:+-Db_staticpic=$staticpic} \
7006 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
7007 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
7008 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
7009 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
7010 -Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
7011 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
7012 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
7013 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \
7014 -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
7015 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
7016 -Dvhost_user_blk_server=$vhost_user_blk_server \
7017 $cross_arg \
7018 "$PWD" "$source_path"
7020 if test "$?" -ne 0 ; then
7021 error_exit "meson setup failed"
7025 if test -n "${deprecated_features}"; then
7026 echo "Warning, deprecated features enabled."
7027 echo "Please see docs/system/deprecated.rst"
7028 echo " features: ${deprecated_features}"
7031 # Save the configure command line for later reuse.
7032 cat <<EOD >config.status
7033 #!/bin/sh
7034 # Generated by configure.
7035 # Run this file to recreate the current configuration.
7036 # Compiler output produced by configure, useful for debugging
7037 # configure, is in config.log if it exists.
7040 preserve_env() {
7041 envname=$1
7043 eval envval=\$$envname
7045 if test -n "$envval"
7046 then
7047 echo "$envname='$envval'" >> config.status
7048 echo "export $envname" >> config.status
7049 else
7050 echo "unset $envname" >> config.status
7054 # Preserve various env variables that influence what
7055 # features/build target configure will detect
7056 preserve_env AR
7057 preserve_env AS
7058 preserve_env CC
7059 preserve_env CPP
7060 preserve_env CXX
7061 preserve_env INSTALL
7062 preserve_env LD
7063 preserve_env LD_LIBRARY_PATH
7064 preserve_env LIBTOOL
7065 preserve_env MAKE
7066 preserve_env NM
7067 preserve_env OBJCOPY
7068 preserve_env PATH
7069 preserve_env PKG_CONFIG
7070 preserve_env PKG_CONFIG_LIBDIR
7071 preserve_env PKG_CONFIG_PATH
7072 preserve_env PYTHON
7073 preserve_env SDL2_CONFIG
7074 preserve_env SMBD
7075 preserve_env STRIP
7076 preserve_env WINDRES
7078 printf "exec" >>config.status
7079 for i in "$0" "$@"; do
7080 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
7081 done
7082 echo ' "$@"' >>config.status
7083 chmod +x config.status
7085 rm -r "$TMPDIR1"