configure: document --without-default-{features,devices}
[qemu/ar7.git] / configure
blob8ef0874ed502dae02888e89266b4ba09ee93da37
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 default_feature=""
297 # parse CC options second
298 for opt do
299 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
300 case "$opt" in
301 --without-default-features)
302 default_feature="no"
304 esac
305 done
307 brlapi="$default_feature"
308 curl="$default_feature"
309 iconv="auto"
310 curses="auto"
311 docs="auto"
312 fdt="auto"
313 netmap="no"
314 sdl="auto"
315 sdl_image="auto"
316 virtiofsd="auto"
317 virtfs="$default_feature"
318 libudev="auto"
319 mpath="auto"
320 vnc="enabled"
321 sparse="auto"
322 vde="$default_feature"
323 vnc_sasl="auto"
324 vnc_jpeg="auto"
325 vnc_png="auto"
326 xkbcommon="auto"
327 xen="$default_feature"
328 xen_ctrl_version="$default_feature"
329 xen_pci_passthrough="auto"
330 linux_aio="$default_feature"
331 linux_io_uring="$default_feature"
332 cap_ng="$default_feature"
333 attr="$default_feature"
334 libattr="$default_feature"
335 xfs="$default_feature"
336 tcg="enabled"
337 membarrier="$default_feature"
338 vhost_net="$default_feature"
339 vhost_crypto="$default_feature"
340 vhost_scsi="$default_feature"
341 vhost_vsock="$default_feature"
342 vhost_user="no"
343 vhost_user_blk_server="auto"
344 vhost_user_fs="$default_feature"
345 kvm="auto"
346 hax="auto"
347 hvf="auto"
348 whpx="auto"
349 rdma="$default_feature"
350 pvrdma="$default_feature"
351 gprof="no"
352 debug_tcg="no"
353 debug="no"
354 sanitizers="no"
355 tsan="no"
356 fortify_source="$default_feature"
357 strip_opt="yes"
358 tcg_interpreter="no"
359 bigendian="no"
360 mingw32="no"
361 gcov="no"
362 EXESUF="$default_feature"
363 HOST_DSOSUF=".so"
364 modules="no"
365 module_upgrades="no"
366 prefix="/usr/local"
367 qemu_suffix="qemu"
368 slirp="auto"
369 oss_lib=""
370 bsd="no"
371 linux="no"
372 solaris="no"
373 profiler="no"
374 cocoa="auto"
375 softmmu="yes"
376 linux_user="no"
377 bsd_user="no"
378 blobs="true"
379 pkgversion=""
380 pie=""
381 qom_cast_debug="yes"
382 trace_backends="log"
383 trace_file="trace"
384 spice="$default_feature"
385 rbd="$default_feature"
386 smartcard="$default_feature"
387 u2f="auto"
388 libusb="$default_feature"
389 usb_redir="$default_feature"
390 opengl="$default_feature"
391 opengl_dmabuf="no"
392 cpuid_h="no"
393 avx2_opt="$default_feature"
394 capstone="auto"
395 lzo="$default_feature"
396 snappy="$default_feature"
397 bzip2="$default_feature"
398 lzfse="$default_feature"
399 zstd="$default_feature"
400 guest_agent="$default_feature"
401 guest_agent_with_vss="no"
402 guest_agent_ntddscsi="no"
403 guest_agent_msi="$default_feature"
404 vss_win32_sdk="$default_feature"
405 win_sdk="no"
406 want_tools="$default_feature"
407 libiscsi="$default_feature"
408 libnfs="$default_feature"
409 coroutine=""
410 coroutine_pool="$default_feature"
411 debug_stack_usage="no"
412 crypto_afalg="no"
413 seccomp="$default_feature"
414 glusterfs="$default_feature"
415 glusterfs_xlator_opt="no"
416 glusterfs_discard="no"
417 glusterfs_fallocate="no"
418 glusterfs_zerofill="no"
419 glusterfs_ftruncate_has_stat="no"
420 glusterfs_iocb_has_stat="no"
421 gtk="$default_feature"
422 gtk_gl="no"
423 tls_priority="NORMAL"
424 gnutls="$default_feature"
425 nettle="$default_feature"
426 nettle_xts="no"
427 gcrypt="$default_feature"
428 gcrypt_hmac="no"
429 gcrypt_xts="no"
430 qemu_private_xts="yes"
431 auth_pam="$default_feature"
432 vte="$default_feature"
433 virglrenderer="$default_feature"
434 tpm="$default_feature"
435 libssh="$default_feature"
436 live_block_migration=${default_feature:-yes}
437 numa="$default_feature"
438 tcmalloc="no"
439 jemalloc="no"
440 replication=${default_feature:-yes}
441 bochs=${default_feature:-yes}
442 cloop=${default_feature:-yes}
443 dmg=${default_feature:-yes}
444 qcow1=${default_feature:-yes}
445 vdi=${default_feature:-yes}
446 vvfat=${default_feature:-yes}
447 qed=${default_feature:-yes}
448 parallels=${default_feature:-yes}
449 sheepdog="no"
450 libxml2="$default_feature"
451 debug_mutex="no"
452 libpmem="$default_feature"
453 default_devices="yes"
454 plugins="no"
455 fuzzing="no"
456 rng_none="no"
457 secret_keyring="$default_feature"
458 libdaxctl="$default_feature"
459 meson=""
460 ninja=""
461 skip_meson=no
462 gettext="auto"
463 fuse="auto"
464 fuse_lseek="auto"
466 bogus_os="no"
467 malloc_trim="auto"
469 # parse CC options second
470 for opt do
471 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
472 case "$opt" in
473 --cross-prefix=*) cross_prefix="$optarg"
475 --cc=*) CC="$optarg"
477 --cxx=*) CXX="$optarg"
479 --cpu=*) cpu="$optarg"
481 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
482 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
484 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
486 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
487 EXTRA_LDFLAGS="$optarg"
489 --enable-debug-info) debug_info="yes"
491 --disable-debug-info) debug_info="no"
493 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
495 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
496 eval "cross_cc_cflags_${cc_arch}=\$optarg"
497 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
499 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
500 cc_archs="$cc_archs $cc_arch"
501 eval "cross_cc_${cc_arch}=\$optarg"
502 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
504 esac
505 done
506 # OS specific
507 # Using uname is really, really broken. Once we have the right set of checks
508 # we can eliminate its usage altogether.
510 # Preferred compiler:
511 # ${CC} (if set)
512 # ${cross_prefix}gcc (if cross-prefix specified)
513 # system compiler
514 if test -z "${CC}${cross_prefix}"; then
515 cc="$host_cc"
516 else
517 cc="${CC-${cross_prefix}gcc}"
520 if test -z "${CXX}${cross_prefix}"; then
521 cxx="c++"
522 else
523 cxx="${CXX-${cross_prefix}g++}"
526 ar="${AR-${cross_prefix}ar}"
527 as="${AS-${cross_prefix}as}"
528 ccas="${CCAS-$cc}"
529 cpp="${CPP-$cc -E}"
530 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
531 ld="${LD-${cross_prefix}ld}"
532 ranlib="${RANLIB-${cross_prefix}ranlib}"
533 nm="${NM-${cross_prefix}nm}"
534 strip="${STRIP-${cross_prefix}strip}"
535 windres="${WINDRES-${cross_prefix}windres}"
536 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
537 query_pkg_config() {
538 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
540 pkg_config=query_pkg_config
541 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
543 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
544 ARFLAGS="${ARFLAGS-rv}"
546 # default flags for all hosts
547 # We use -fwrapv to tell the compiler that we require a C dialect where
548 # left shift of signed integers is well defined and has the expected
549 # 2s-complement style results. (Both clang and gcc agree that it
550 # provides these semantics.)
551 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
552 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
553 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
554 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
556 # Flags that are needed during configure but later taken care of by Meson
557 CONFIGURE_CFLAGS="-std=gnu99 -Wall"
558 CONFIGURE_LDFLAGS=
561 check_define() {
562 cat > $TMPC <<EOF
563 #if !defined($1)
564 #error $1 not defined
565 #endif
566 int main(void) { return 0; }
568 compile_object
571 check_include() {
572 cat > $TMPC <<EOF
573 #include <$1>
574 int main(void) { return 0; }
576 compile_object
579 write_c_skeleton() {
580 cat > $TMPC <<EOF
581 int main(void) { return 0; }
585 write_c_fuzzer_skeleton() {
586 cat > $TMPC <<EOF
587 #include <stdint.h>
588 #include <sys/types.h>
589 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
590 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
594 if check_define __linux__ ; then
595 targetos="Linux"
596 elif check_define _WIN32 ; then
597 targetos='MINGW32'
598 elif check_define __OpenBSD__ ; then
599 targetos='OpenBSD'
600 elif check_define __sun__ ; then
601 targetos='SunOS'
602 elif check_define __HAIKU__ ; then
603 targetos='Haiku'
604 elif check_define __FreeBSD__ ; then
605 targetos='FreeBSD'
606 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
607 targetos='GNU/kFreeBSD'
608 elif check_define __DragonFly__ ; then
609 targetos='DragonFly'
610 elif check_define __NetBSD__; then
611 targetos='NetBSD'
612 elif check_define __APPLE__; then
613 targetos='Darwin'
614 else
615 # This is a fatal error, but don't report it yet, because we
616 # might be going to just print the --help text, or it might
617 # be the result of a missing compiler.
618 targetos='bogus'
619 bogus_os='yes'
622 # Some host OSes need non-standard checks for which CPU to use.
623 # Note that these checks are broken for cross-compilation: if you're
624 # cross-compiling to one of these OSes then you'll need to specify
625 # the correct CPU with the --cpu option.
626 case $targetos in
627 Darwin)
628 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
629 # run 64-bit userspace code.
630 # If the user didn't specify a CPU explicitly and the kernel says this is
631 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
632 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
633 cpu="x86_64"
635 HOST_DSOSUF=".dylib"
637 SunOS)
638 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
639 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
640 cpu="x86_64"
642 esac
644 if test ! -z "$cpu" ; then
645 # command line argument
647 elif check_define __i386__ ; then
648 cpu="i386"
649 elif check_define __x86_64__ ; then
650 if check_define __ILP32__ ; then
651 cpu="x32"
652 else
653 cpu="x86_64"
655 elif check_define __sparc__ ; then
656 if check_define __arch64__ ; then
657 cpu="sparc64"
658 else
659 cpu="sparc"
661 elif check_define _ARCH_PPC ; then
662 if check_define _ARCH_PPC64 ; then
663 if check_define _LITTLE_ENDIAN ; then
664 cpu="ppc64le"
665 else
666 cpu="ppc64"
668 else
669 cpu="ppc"
671 elif check_define __mips__ ; then
672 cpu="mips"
673 elif check_define __s390__ ; then
674 if check_define __s390x__ ; then
675 cpu="s390x"
676 else
677 cpu="s390"
679 elif check_define __riscv ; then
680 if check_define _LP64 ; then
681 cpu="riscv64"
682 else
683 cpu="riscv32"
685 elif check_define __arm__ ; then
686 cpu="arm"
687 elif check_define __aarch64__ ; then
688 cpu="aarch64"
689 else
690 cpu=$(uname -m)
693 ARCH=
694 # Normalise host CPU name and set ARCH.
695 # Note that this case should only have supported host CPUs, not guests.
696 case "$cpu" in
697 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
699 ppc64le)
700 ARCH="ppc64"
702 i386|i486|i586|i686|i86pc|BePC)
703 cpu="i386"
705 x86_64|amd64)
706 cpu="x86_64"
708 armv*b|armv*l|arm)
709 cpu="arm"
711 aarch64)
712 cpu="aarch64"
714 mips*)
715 cpu="mips"
717 sparc|sun4[cdmuv])
718 cpu="sparc"
721 # This will result in either an error or falling back to TCI later
722 ARCH=unknown
724 esac
725 if test -z "$ARCH"; then
726 ARCH="$cpu"
729 # OS specific
731 case $targetos in
732 MINGW32*)
733 mingw32="yes"
734 audio_possible_drivers="dsound sdl"
735 if check_include dsound.h; then
736 audio_drv_list="dsound"
737 else
738 audio_drv_list=""
740 supported_os="yes"
741 pie="no"
743 GNU/kFreeBSD)
744 bsd="yes"
745 audio_drv_list="oss try-sdl"
746 audio_possible_drivers="oss sdl pa"
748 FreeBSD)
749 bsd="yes"
750 make="${MAKE-gmake}"
751 audio_drv_list="oss try-sdl"
752 audio_possible_drivers="oss sdl pa"
753 # needed for kinfo_getvmmap(3) in libutil.h
754 netmap="" # enable netmap autodetect
756 DragonFly)
757 bsd="yes"
758 make="${MAKE-gmake}"
759 audio_drv_list="oss try-sdl"
760 audio_possible_drivers="oss sdl pa"
762 NetBSD)
763 bsd="yes"
764 make="${MAKE-gmake}"
765 audio_drv_list="oss try-sdl"
766 audio_possible_drivers="oss sdl"
767 oss_lib="-lossaudio"
769 OpenBSD)
770 bsd="yes"
771 make="${MAKE-gmake}"
772 audio_drv_list="try-sdl"
773 audio_possible_drivers="sdl"
775 Darwin)
776 bsd="yes"
777 darwin="yes"
778 if [ "$cpu" = "x86_64" ] ; then
779 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
780 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
782 cocoa="enabled"
783 audio_drv_list="coreaudio try-sdl"
784 audio_possible_drivers="coreaudio sdl"
785 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
786 # Disable attempts to use ObjectiveC features in os/object.h since they
787 # won't work when we're compiling with gcc as a C compiler.
788 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
790 SunOS)
791 solaris="yes"
792 make="${MAKE-gmake}"
793 smbd="${SMBD-/usr/sfw/sbin/smbd}"
794 if test -f /usr/include/sys/soundcard.h ; then
795 audio_drv_list="oss try-sdl"
797 audio_possible_drivers="oss sdl"
798 # needed for CMSG_ macros in sys/socket.h
799 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
800 # needed for TIOCWIN* defines in termios.h
801 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
803 Haiku)
804 haiku="yes"
805 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS"
807 Linux)
808 audio_drv_list="try-pa oss"
809 audio_possible_drivers="oss alsa sdl pa"
810 linux="yes"
811 linux_user="yes"
812 vhost_user=${default_feature:-yes}
814 esac
816 if [ "$bsd" = "yes" ] ; then
817 if [ "$darwin" != "yes" ] ; then
818 bsd_user="yes"
822 : ${make=${MAKE-make}}
824 # We prefer python 3.x. A bare 'python' is traditionally
825 # python 2.x, but some distros have it as python 3.x, so
826 # we check that too
827 python=
828 explicit_python=no
829 for binary in "${PYTHON-python3}" python
831 if has "$binary"
832 then
833 python=$(command -v "$binary")
834 break
836 done
839 # Check for ancillary tools used in testing
840 genisoimage=
841 for binary in genisoimage mkisofs
843 if has $binary
844 then
845 genisoimage=$(command -v "$binary")
846 break
848 done
850 : ${smbd=${SMBD-/usr/sbin/smbd}}
852 # Default objcc to clang if available, otherwise use CC
853 if has clang; then
854 objcc=clang
855 else
856 objcc="$cc"
859 if test "$mingw32" = "yes" ; then
860 EXESUF=".exe"
861 HOST_DSOSUF=".dll"
862 # MinGW needs -mthreads for TLS and macro _MT.
863 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
864 write_c_skeleton;
865 prefix="/qemu"
866 qemu_suffix=""
867 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
870 werror=""
872 for opt do
873 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
874 case "$opt" in
875 --help|-h) show_help=yes
877 --version|-V) exec cat $source_path/VERSION
879 --prefix=*) prefix="$optarg"
881 --interp-prefix=*) interp_prefix="$optarg"
883 --cross-prefix=*)
885 --cc=*)
887 --host-cc=*) host_cc="$optarg"
889 --cxx=*)
891 --iasl=*) iasl="$optarg"
893 --objcc=*) objcc="$optarg"
895 --make=*) make="$optarg"
897 --install=*)
899 --python=*) python="$optarg" ; explicit_python=yes
901 --sphinx-build=*) sphinx_build="$optarg"
903 --skip-meson) skip_meson=yes
905 --meson=*) meson="$optarg"
907 --ninja=*) ninja="$optarg"
909 --smbd=*) smbd="$optarg"
911 --extra-cflags=*)
913 --extra-cxxflags=*)
915 --extra-ldflags=*)
917 --enable-debug-info)
919 --disable-debug-info)
921 --cross-cc-*)
923 --enable-modules)
924 modules="yes"
926 --disable-modules)
927 modules="no"
929 --disable-module-upgrades) module_upgrades="no"
931 --enable-module-upgrades) module_upgrades="yes"
933 --cpu=*)
935 --target-list=*) target_list="$optarg"
936 if test "$target_list_exclude"; then
937 error_exit "Can't mix --target-list with --target-list-exclude"
940 --target-list-exclude=*) target_list_exclude="$optarg"
941 if test "$target_list"; then
942 error_exit "Can't mix --target-list-exclude with --target-list"
945 --enable-trace-backends=*) trace_backends="$optarg"
947 # XXX: backwards compatibility
948 --enable-trace-backend=*) trace_backends="$optarg"
950 --with-trace-file=*) trace_file="$optarg"
952 --with-default-devices) default_devices="yes"
954 --without-default-devices) default_devices="no"
956 --without-default-features) # processed above
958 --enable-gprof) gprof="yes"
960 --enable-gcov) gcov="yes"
962 --static)
963 static="yes"
964 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
966 --mandir=*) mandir="$optarg"
968 --bindir=*) bindir="$optarg"
970 --libdir=*) libdir="$optarg"
972 --libexecdir=*) libexecdir="$optarg"
974 --includedir=*) includedir="$optarg"
976 --datadir=*) datadir="$optarg"
978 --with-suffix=*) qemu_suffix="$optarg"
980 --docdir=*) docdir="$optarg"
982 --localedir=*) localedir="$optarg"
984 --sysconfdir=*) sysconfdir="$optarg"
986 --localstatedir=*) local_statedir="$optarg"
988 --firmwarepath=*) firmwarepath="$optarg"
990 --host=*|--build=*|\
991 --disable-dependency-tracking|\
992 --sbindir=*|--sharedstatedir=*|\
993 --oldincludedir=*|--datarootdir=*|--infodir=*|\
994 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
995 # These switches are silently ignored, for compatibility with
996 # autoconf-generated configure scripts. This allows QEMU's
997 # configure to be used by RPM and similar macros that set
998 # lots of directory switches by default.
1000 --disable-sdl) sdl="disabled"
1002 --enable-sdl) sdl="enabled"
1004 --disable-sdl-image) sdl_image="disabled"
1006 --enable-sdl-image) sdl_image="enabled"
1008 --disable-qom-cast-debug) qom_cast_debug="no"
1010 --enable-qom-cast-debug) qom_cast_debug="yes"
1012 --disable-virtfs) virtfs="no"
1014 --enable-virtfs) virtfs="yes"
1016 --disable-libudev) libudev="disabled"
1018 --enable-libudev) libudev="enabled"
1020 --disable-virtiofsd) virtiofsd="disabled"
1022 --enable-virtiofsd) virtiofsd="enabled"
1024 --disable-mpath) mpath="disabled"
1026 --enable-mpath) mpath="enabled"
1028 --disable-vnc) vnc="disabled"
1030 --enable-vnc) vnc="enabled"
1032 --disable-gettext) gettext="disabled"
1034 --enable-gettext) gettext="enabled"
1036 --oss-lib=*) oss_lib="$optarg"
1038 --audio-drv-list=*) audio_drv_list="$optarg"
1040 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1042 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1044 --enable-debug-tcg) debug_tcg="yes"
1046 --disable-debug-tcg) debug_tcg="no"
1048 --enable-debug)
1049 # Enable debugging options that aren't excessively noisy
1050 debug_tcg="yes"
1051 debug_mutex="yes"
1052 debug="yes"
1053 strip_opt="no"
1054 fortify_source="no"
1056 --enable-sanitizers) sanitizers="yes"
1058 --disable-sanitizers) sanitizers="no"
1060 --enable-tsan) tsan="yes"
1062 --disable-tsan) tsan="no"
1064 --enable-sparse) sparse="enabled"
1066 --disable-sparse) sparse="disabled"
1068 --disable-strip) strip_opt="no"
1070 --disable-vnc-sasl) vnc_sasl="disabled"
1072 --enable-vnc-sasl) vnc_sasl="enabled"
1074 --disable-vnc-jpeg) vnc_jpeg="disabled"
1076 --enable-vnc-jpeg) vnc_jpeg="enabled"
1078 --disable-vnc-png) vnc_png="disabled"
1080 --enable-vnc-png) vnc_png="enabled"
1082 --disable-slirp) slirp="disabled"
1084 --enable-slirp=git) slirp="internal"
1086 --enable-slirp=system) slirp="system"
1088 --disable-vde) vde="no"
1090 --enable-vde) vde="yes"
1092 --disable-netmap) netmap="no"
1094 --enable-netmap) netmap="yes"
1096 --disable-xen) xen="disabled"
1098 --enable-xen) xen="enabled"
1100 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
1102 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
1104 --disable-brlapi) brlapi="no"
1106 --enable-brlapi) brlapi="yes"
1108 --disable-kvm) kvm="disabled"
1110 --enable-kvm) kvm="enabled"
1112 --disable-hax) hax="disabled"
1114 --enable-hax) hax="enabled"
1116 --disable-hvf) hvf="disabled"
1118 --enable-hvf) hvf="enabled"
1120 --disable-whpx) whpx="disabled"
1122 --enable-whpx) whpx="enabled"
1124 --disable-tcg-interpreter) tcg_interpreter="no"
1126 --enable-tcg-interpreter) tcg_interpreter="yes"
1128 --disable-cap-ng) cap_ng="no"
1130 --enable-cap-ng) cap_ng="yes"
1132 --disable-tcg) tcg="disabled"
1134 --enable-tcg) tcg="enabled"
1136 --disable-malloc-trim) malloc_trim="disabled"
1138 --enable-malloc-trim) malloc_trim="enabled"
1140 --disable-spice) spice="no"
1142 --enable-spice) spice="yes"
1144 --disable-libiscsi) libiscsi="no"
1146 --enable-libiscsi) libiscsi="yes"
1148 --disable-libnfs) libnfs="no"
1150 --enable-libnfs) libnfs="yes"
1152 --enable-profiler) profiler="yes"
1154 --disable-cocoa) cocoa="disabled"
1156 --enable-cocoa)
1157 cocoa="enabled" ;
1158 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1160 --disable-system) softmmu="no"
1162 --enable-system) softmmu="yes"
1164 --disable-user)
1165 linux_user="no" ;
1166 bsd_user="no" ;
1168 --enable-user) ;;
1169 --disable-linux-user) linux_user="no"
1171 --enable-linux-user) linux_user="yes"
1173 --disable-bsd-user) bsd_user="no"
1175 --enable-bsd-user) bsd_user="yes"
1177 --enable-pie) pie="yes"
1179 --disable-pie) pie="no"
1181 --enable-werror) werror="yes"
1183 --disable-werror) werror="no"
1185 --enable-stack-protector) stack_protector="yes"
1187 --disable-stack-protector) stack_protector="no"
1189 --enable-safe-stack) safe_stack="yes"
1191 --disable-safe-stack) safe_stack="no"
1193 --disable-curses) curses="disabled"
1195 --enable-curses) curses="enabled"
1197 --disable-iconv) iconv="disabled"
1199 --enable-iconv) iconv="enabled"
1201 --disable-curl) curl="no"
1203 --enable-curl) curl="yes"
1205 --disable-fdt) fdt="disabled"
1207 --enable-fdt) fdt="enabled"
1209 --enable-fdt=git) fdt="internal"
1211 --enable-fdt=system) fdt="system"
1213 --disable-linux-aio) linux_aio="no"
1215 --enable-linux-aio) linux_aio="yes"
1217 --disable-linux-io-uring) linux_io_uring="no"
1219 --enable-linux-io-uring) linux_io_uring="yes"
1221 --disable-attr) attr="no"
1223 --enable-attr) attr="yes"
1225 --disable-membarrier) membarrier="no"
1227 --enable-membarrier) membarrier="yes"
1229 --disable-blobs) blobs="false"
1231 --with-pkgversion=*) pkgversion="$optarg"
1233 --with-coroutine=*) coroutine="$optarg"
1235 --disable-coroutine-pool) coroutine_pool="no"
1237 --enable-coroutine-pool) coroutine_pool="yes"
1239 --enable-debug-stack-usage) debug_stack_usage="yes"
1241 --enable-crypto-afalg) crypto_afalg="yes"
1243 --disable-crypto-afalg) crypto_afalg="no"
1245 --disable-docs) docs="disabled"
1247 --enable-docs) docs="enabled"
1249 --disable-vhost-net) vhost_net="no"
1251 --enable-vhost-net) vhost_net="yes"
1253 --disable-vhost-crypto) vhost_crypto="no"
1255 --enable-vhost-crypto) vhost_crypto="yes"
1257 --disable-vhost-scsi) vhost_scsi="no"
1259 --enable-vhost-scsi) vhost_scsi="yes"
1261 --disable-vhost-vsock) vhost_vsock="no"
1263 --enable-vhost-vsock) vhost_vsock="yes"
1265 --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
1267 --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
1269 --disable-vhost-user-fs) vhost_user_fs="no"
1271 --enable-vhost-user-fs) vhost_user_fs="yes"
1273 --disable-opengl) opengl="no"
1275 --enable-opengl) opengl="yes"
1277 --disable-rbd) rbd="no"
1279 --enable-rbd) rbd="yes"
1281 --disable-xfsctl) xfs="no"
1283 --enable-xfsctl) xfs="yes"
1285 --disable-smartcard) smartcard="no"
1287 --enable-smartcard) smartcard="yes"
1289 --disable-u2f) u2f="disabled"
1291 --enable-u2f) u2f="enabled"
1293 --disable-libusb) libusb="no"
1295 --enable-libusb) libusb="yes"
1297 --disable-usb-redir) usb_redir="no"
1299 --enable-usb-redir) usb_redir="yes"
1301 --disable-zlib-test)
1303 --disable-lzo) lzo="no"
1305 --enable-lzo) lzo="yes"
1307 --disable-snappy) snappy="no"
1309 --enable-snappy) snappy="yes"
1311 --disable-bzip2) bzip2="no"
1313 --enable-bzip2) bzip2="yes"
1315 --enable-lzfse) lzfse="yes"
1317 --disable-lzfse) lzfse="no"
1319 --disable-zstd) zstd="no"
1321 --enable-zstd) zstd="yes"
1323 --enable-guest-agent) guest_agent="yes"
1325 --disable-guest-agent) guest_agent="no"
1327 --enable-guest-agent-msi) guest_agent_msi="yes"
1329 --disable-guest-agent-msi) guest_agent_msi="no"
1331 --with-vss-sdk) vss_win32_sdk=""
1333 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1335 --without-vss-sdk) vss_win32_sdk="no"
1337 --with-win-sdk) win_sdk=""
1339 --with-win-sdk=*) win_sdk="$optarg"
1341 --without-win-sdk) win_sdk="no"
1343 --enable-tools) want_tools="yes"
1345 --disable-tools) want_tools="no"
1347 --enable-seccomp) seccomp="yes"
1349 --disable-seccomp) seccomp="no"
1351 --disable-glusterfs) glusterfs="no"
1353 --disable-avx2) avx2_opt="no"
1355 --enable-avx2) avx2_opt="yes"
1357 --disable-avx512f) avx512f_opt="no"
1359 --enable-avx512f) avx512f_opt="yes"
1362 --enable-glusterfs) glusterfs="yes"
1364 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1365 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1367 --enable-vhdx|--disable-vhdx)
1368 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1370 --enable-uuid|--disable-uuid)
1371 echo "$0: $opt is obsolete, UUID support is always built" >&2
1373 --disable-gtk) gtk="no"
1375 --enable-gtk) gtk="yes"
1377 --tls-priority=*) tls_priority="$optarg"
1379 --disable-gnutls) gnutls="no"
1381 --enable-gnutls) gnutls="yes"
1383 --disable-nettle) nettle="no"
1385 --enable-nettle) nettle="yes"
1387 --disable-gcrypt) gcrypt="no"
1389 --enable-gcrypt) gcrypt="yes"
1391 --disable-auth-pam) auth_pam="no"
1393 --enable-auth-pam) auth_pam="yes"
1395 --enable-rdma) rdma="yes"
1397 --disable-rdma) rdma="no"
1399 --enable-pvrdma) pvrdma="yes"
1401 --disable-pvrdma) pvrdma="no"
1403 --disable-vte) vte="no"
1405 --enable-vte) vte="yes"
1407 --disable-virglrenderer) virglrenderer="no"
1409 --enable-virglrenderer) virglrenderer="yes"
1411 --disable-tpm) tpm="no"
1413 --enable-tpm) tpm="yes"
1415 --disable-libssh) libssh="no"
1417 --enable-libssh) libssh="yes"
1419 --disable-live-block-migration) live_block_migration="no"
1421 --enable-live-block-migration) live_block_migration="yes"
1423 --disable-numa) numa="no"
1425 --enable-numa) numa="yes"
1427 --disable-libxml2) libxml2="no"
1429 --enable-libxml2) libxml2="yes"
1431 --disable-tcmalloc) tcmalloc="no"
1433 --enable-tcmalloc) tcmalloc="yes"
1435 --disable-jemalloc) jemalloc="no"
1437 --enable-jemalloc) jemalloc="yes"
1439 --disable-replication) replication="no"
1441 --enable-replication) replication="yes"
1443 --disable-bochs) bochs="no"
1445 --enable-bochs) bochs="yes"
1447 --disable-cloop) cloop="no"
1449 --enable-cloop) cloop="yes"
1451 --disable-dmg) dmg="no"
1453 --enable-dmg) dmg="yes"
1455 --disable-qcow1) qcow1="no"
1457 --enable-qcow1) qcow1="yes"
1459 --disable-vdi) vdi="no"
1461 --enable-vdi) vdi="yes"
1463 --disable-vvfat) vvfat="no"
1465 --enable-vvfat) vvfat="yes"
1467 --disable-qed) qed="no"
1469 --enable-qed) qed="yes"
1471 --disable-parallels) parallels="no"
1473 --enable-parallels) parallels="yes"
1475 --disable-sheepdog) sheepdog="no"
1477 --enable-sheepdog) sheepdog="yes"
1479 --disable-vhost-user) vhost_user="no"
1481 --enable-vhost-user) vhost_user="yes"
1483 --disable-vhost-vdpa) vhost_vdpa="no"
1485 --enable-vhost-vdpa) vhost_vdpa="yes"
1487 --disable-vhost-kernel) vhost_kernel="no"
1489 --enable-vhost-kernel) vhost_kernel="yes"
1491 --disable-capstone) capstone="disabled"
1493 --enable-capstone) capstone="enabled"
1495 --enable-capstone=git) capstone="internal"
1497 --enable-capstone=system) capstone="system"
1499 --with-git=*) git="$optarg"
1501 --enable-git-update) git_update=yes
1503 --disable-git-update) git_update=no
1505 --enable-debug-mutex) debug_mutex=yes
1507 --disable-debug-mutex) debug_mutex=no
1509 --enable-libpmem) libpmem=yes
1511 --disable-libpmem) libpmem=no
1513 --enable-xkbcommon) xkbcommon="enabled"
1515 --disable-xkbcommon) xkbcommon="disabled"
1517 --enable-plugins) plugins="yes"
1519 --disable-plugins) plugins="no"
1521 --enable-containers) use_containers="yes"
1523 --disable-containers) use_containers="no"
1525 --enable-fuzzing) fuzzing=yes
1527 --disable-fuzzing) fuzzing=no
1529 --gdb=*) gdb_bin="$optarg"
1531 --enable-rng-none) rng_none=yes
1533 --disable-rng-none) rng_none=no
1535 --enable-keyring) secret_keyring="yes"
1537 --disable-keyring) secret_keyring="no"
1539 --enable-libdaxctl) libdaxctl=yes
1541 --disable-libdaxctl) libdaxctl=no
1543 --enable-fuse) fuse="enabled"
1545 --disable-fuse) fuse="disabled"
1547 --enable-fuse-lseek) fuse_lseek="enabled"
1549 --disable-fuse-lseek) fuse_lseek="disabled"
1552 echo "ERROR: unknown option $opt"
1553 echo "Try '$0 --help' for more information"
1554 exit 1
1556 esac
1557 done
1559 libdir="${libdir:-$prefix/lib}"
1560 libexecdir="${libexecdir:-$prefix/libexec}"
1561 includedir="${includedir:-$prefix/include}"
1563 if test "$mingw32" = "yes" ; then
1564 mandir="$prefix"
1565 datadir="$prefix"
1566 docdir="$prefix"
1567 bindir="$prefix"
1568 sysconfdir="$prefix"
1569 local_statedir="$prefix"
1570 else
1571 mandir="${mandir:-$prefix/share/man}"
1572 datadir="${datadir:-$prefix/share}"
1573 docdir="${docdir:-$prefix/share/doc}"
1574 bindir="${bindir:-$prefix/bin}"
1575 sysconfdir="${sysconfdir:-$prefix/etc}"
1576 local_statedir="${local_statedir:-$prefix/var}"
1578 firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
1579 localedir="${localedir:-$datadir/locale}"
1581 case "$cpu" in
1582 ppc)
1583 CPU_CFLAGS="-m32"
1584 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1586 ppc64)
1587 CPU_CFLAGS="-m64"
1588 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1590 sparc)
1591 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1592 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1594 sparc64)
1595 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1596 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1598 s390)
1599 CPU_CFLAGS="-m31"
1600 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1602 s390x)
1603 CPU_CFLAGS="-m64"
1604 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1606 i386)
1607 CPU_CFLAGS="-m32"
1608 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1610 x86_64)
1611 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1612 # If we truly care, we should simply detect this case at
1613 # runtime and generate the fallback to serial emulation.
1614 CPU_CFLAGS="-m64 -mcx16"
1615 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1617 x32)
1618 CPU_CFLAGS="-mx32"
1619 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1621 # No special flags required for other host CPUs
1622 esac
1624 eval "cross_cc_${cpu}=\$host_cc"
1625 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1626 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1628 # For user-mode emulation the host arch has to be one we explicitly
1629 # support, even if we're using TCI.
1630 if [ "$ARCH" = "unknown" ]; then
1631 bsd_user="no"
1632 linux_user="no"
1635 default_target_list=""
1636 deprecated_targets_list=ppc64abi32-linux-user,tilegx-linux-user,lm32-softmmu,unicore32-softmmu
1637 deprecated_features=""
1638 mak_wilds=""
1640 if [ "$softmmu" = "yes" ]; then
1641 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak"
1643 if [ "$linux_user" = "yes" ]; then
1644 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak"
1646 if [ "$bsd_user" = "yes" ]; then
1647 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak"
1650 # If the user doesn't explicitly specify a deprecated target we will
1651 # skip it.
1652 if test -z "$target_list"; then
1653 if test -z "$target_list_exclude"; then
1654 target_list_exclude="$deprecated_targets_list"
1655 else
1656 target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1660 for config in $mak_wilds; do
1661 target="$(basename "$config" .mak)"
1662 if echo "$target_list_exclude" | grep -vq "$target"; then
1663 default_target_list="${default_target_list} $target"
1665 done
1667 # Enumerate public trace backends for --help output
1668 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1670 if test x"$show_help" = x"yes" ; then
1671 cat << EOF
1673 Usage: configure [options]
1674 Options: [defaults in brackets after descriptions]
1676 Standard options:
1677 --help print this message
1678 --prefix=PREFIX install in PREFIX [$prefix]
1679 --interp-prefix=PREFIX where to find shared libraries, etc.
1680 use %M for cpu name [$interp_prefix]
1681 --target-list=LIST set target list (default: build all non-deprecated)
1682 $(echo Available targets: $default_target_list | \
1683 fold -s -w 53 | sed -e 's/^/ /')
1684 $(echo Deprecated targets: $deprecated_targets_list | \
1685 fold -s -w 53 | sed -e 's/^/ /')
1686 --target-list-exclude=LIST exclude a set of targets from the default target-list
1688 Advanced options (experts only):
1689 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1690 --cc=CC use C compiler CC [$cc]
1691 --iasl=IASL use ACPI compiler IASL [$iasl]
1692 --host-cc=CC use C compiler CC [$host_cc] for code run at
1693 build time
1694 --cxx=CXX use C++ compiler CXX [$cxx]
1695 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1696 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1697 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1698 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1699 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1700 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1701 --make=MAKE use specified make [$make]
1702 --python=PYTHON use specified python [$python]
1703 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1704 --meson=MESON use specified meson [$meson]
1705 --ninja=NINJA use specified ninja [$ninja]
1706 --smbd=SMBD use specified smbd [$smbd]
1707 --with-git=GIT use specified git [$git]
1708 --static enable static build [$static]
1709 --mandir=PATH install man pages in PATH
1710 --datadir=PATH install firmware in PATH/$qemu_suffix
1711 --localedir=PATH install translation in PATH/$qemu_suffix
1712 --docdir=PATH install documentation in PATH/$qemu_suffix
1713 --bindir=PATH install binaries in PATH
1714 --libdir=PATH install libraries in PATH
1715 --libexecdir=PATH install helper binaries in PATH
1716 --sysconfdir=PATH install config in PATH/$qemu_suffix
1717 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1718 --firmwarepath=PATH search PATH for firmware files
1719 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1720 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1721 --with-pkgversion=VERS use specified string as sub-version of the package
1722 --without-default-features default all --enable-* options to "disabled"
1723 --without-default-devices do not include any device that is not needed to
1724 start the emulator (only use if you are including
1725 desired devices in default-configs/devices/)
1726 --enable-debug enable common debug build options
1727 --enable-sanitizers enable default sanitizers
1728 --enable-tsan enable thread sanitizer
1729 --disable-strip disable stripping binaries
1730 --disable-werror disable compilation abort on warning
1731 --disable-stack-protector disable compiler-provided stack protection
1732 --audio-drv-list=LIST set audio drivers list:
1733 Available drivers: $audio_possible_drivers
1734 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1735 --block-drv-rw-whitelist=L
1736 set block driver read-write whitelist
1737 (affects only QEMU, not qemu-img)
1738 --block-drv-ro-whitelist=L
1739 set block driver read-only whitelist
1740 (affects only QEMU, not qemu-img)
1741 --enable-trace-backends=B Set trace backend
1742 Available backends: $trace_backend_list
1743 --with-trace-file=NAME Full PATH,NAME of file to store traces
1744 Default:trace-<pid>
1745 --disable-slirp disable SLIRP userspace network connectivity
1746 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1747 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1748 --oss-lib path to OSS library
1749 --cpu=CPU Build for host CPU [$cpu]
1750 --with-coroutine=BACKEND coroutine backend. Supported options:
1751 ucontext, sigaltstack, windows
1752 --enable-gcov enable test coverage analysis with gcov
1753 --disable-blobs disable installing provided firmware blobs
1754 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1755 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1756 --tls-priority default TLS protocol/cipher priority string
1757 --enable-gprof QEMU profiling with gprof
1758 --enable-profiler profiler support
1759 --enable-debug-stack-usage
1760 track the maximum stack usage of stacks created by qemu_alloc_stack
1761 --enable-plugins
1762 enable plugins via shared library loading
1763 --disable-containers don't use containers for cross-building
1764 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1766 Optional features, enabled with --enable-FEATURE and
1767 disabled with --disable-FEATURE, default is enabled if available
1768 (unless built with --without-default-features):
1770 system all system emulation targets
1771 user supported user emulation targets
1772 linux-user all linux usermode emulation targets
1773 bsd-user all BSD usermode emulation targets
1774 docs build documentation
1775 guest-agent build the QEMU Guest Agent
1776 guest-agent-msi build guest agent Windows MSI installation package
1777 pie Position Independent Executables
1778 modules modules support (non-Windows)
1779 module-upgrades try to load modules from alternate paths for upgrades
1780 debug-tcg TCG debugging (default is disabled)
1781 debug-info debugging information
1782 sparse sparse checker
1783 safe-stack SafeStack Stack Smash Protection. Depends on
1784 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1786 gnutls GNUTLS cryptography support
1787 nettle nettle cryptography support
1788 gcrypt libgcrypt cryptography support
1789 auth-pam PAM access control
1790 sdl SDL UI
1791 sdl-image SDL Image support for icons
1792 gtk gtk UI
1793 vte vte support for the gtk UI
1794 curses curses UI
1795 iconv font glyph conversion support
1796 vnc VNC UI support
1797 vnc-sasl SASL encryption for VNC server
1798 vnc-jpeg JPEG lossy compression for VNC server
1799 vnc-png PNG compression for VNC server
1800 cocoa Cocoa UI (Mac OS X only)
1801 virtfs VirtFS
1802 virtiofsd build virtiofs daemon (virtiofsd)
1803 libudev Use libudev to enumerate host devices
1804 mpath Multipath persistent reservation passthrough
1805 xen xen backend driver support
1806 xen-pci-passthrough PCI passthrough support for Xen
1807 brlapi BrlAPI (Braile)
1808 curl curl connectivity
1809 membarrier membarrier system call (for Linux 4.14+ or Windows)
1810 fdt fdt device tree
1811 kvm KVM acceleration support
1812 hax HAX acceleration support
1813 hvf Hypervisor.framework acceleration support
1814 whpx Windows Hypervisor Platform acceleration support
1815 rdma Enable RDMA-based migration
1816 pvrdma Enable PVRDMA support
1817 vde support for vde network
1818 netmap support for netmap network
1819 linux-aio Linux AIO support
1820 linux-io-uring Linux io_uring support
1821 cap-ng libcap-ng support
1822 attr attr and xattr support
1823 vhost-net vhost-net kernel acceleration support
1824 vhost-vsock virtio sockets device support
1825 vhost-scsi vhost-scsi kernel target support
1826 vhost-crypto vhost-user-crypto backend support
1827 vhost-kernel vhost kernel backend support
1828 vhost-user vhost-user backend support
1829 vhost-user-blk-server vhost-user-blk server support
1830 vhost-vdpa vhost-vdpa kernel backend support
1831 spice spice
1832 rbd rados block device (rbd)
1833 libiscsi iscsi support
1834 libnfs nfs support
1835 smartcard smartcard support (libcacard)
1836 u2f U2F support (u2f-emu)
1837 libusb libusb (for usb passthrough)
1838 live-block-migration Block migration in the main migration stream
1839 usb-redir usb network redirection support
1840 lzo support of lzo compression library
1841 snappy support of snappy compression library
1842 bzip2 support of bzip2 compression library
1843 (for reading bzip2-compressed dmg images)
1844 lzfse support of lzfse compression library
1845 (for reading lzfse-compressed dmg images)
1846 zstd support for zstd compression library
1847 (for migration compression and qcow2 cluster compression)
1848 seccomp seccomp support
1849 coroutine-pool coroutine freelist (better performance)
1850 glusterfs GlusterFS backend
1851 tpm TPM support
1852 libssh ssh block device support
1853 numa libnuma support
1854 libxml2 for Parallels image format
1855 tcmalloc tcmalloc support
1856 jemalloc jemalloc support
1857 avx2 AVX2 optimization support
1858 avx512f AVX512F optimization support
1859 replication replication support
1860 opengl opengl support
1861 virglrenderer virgl rendering support
1862 xfsctl xfsctl support
1863 qom-cast-debug cast debugging support
1864 tools build qemu-io, qemu-nbd and qemu-img tools
1865 bochs bochs image format support
1866 cloop cloop image format support
1867 dmg dmg image format support
1868 qcow1 qcow v1 image format support
1869 vdi vdi image format support
1870 vvfat vvfat image format support
1871 qed qed image format support
1872 parallels parallels image format support
1873 sheepdog sheepdog block driver support (deprecated)
1874 crypto-afalg Linux AF_ALG crypto backend driver
1875 capstone capstone disassembler support
1876 debug-mutex mutex debugging support
1877 libpmem libpmem support
1878 xkbcommon xkbcommon support
1879 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1880 libdaxctl libdaxctl support
1881 fuse FUSE block device export
1882 fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports
1884 NOTE: The object files are built at the place where configure is launched
1886 exit 0
1889 # Remove old dependency files to make sure that they get properly regenerated
1890 rm -f */config-devices.mak.d
1892 if test -z "$python"
1893 then
1894 error_exit "Python not found. Use --python=/path/to/python"
1896 if ! has "$make"
1897 then
1898 error_exit "GNU make ($make) not found"
1901 # Note that if the Python conditional here evaluates True we will exit
1902 # with status 1 which is a shell 'false' value.
1903 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1904 error_exit "Cannot use '$python', Python >= 3.6 is required." \
1905 "Use --python=/path/to/python to specify a supported Python."
1908 # Preserve python version since some functionality is dependent on it
1909 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)
1911 # Suppress writing compiled files
1912 python="$python -B"
1914 if test -z "$meson"; then
1915 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
1916 meson=meson
1917 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
1918 meson=git
1919 elif test -e "${source_path}/meson/meson.py" ; then
1920 meson=internal
1921 else
1922 if test "$explicit_python" = yes; then
1923 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
1924 else
1925 error_exit "Meson not found. Use --meson=/path/to/meson"
1928 else
1929 # Meson uses its own Python interpreter to invoke other Python scripts,
1930 # but the user wants to use the one they specified with --python.
1932 # We do not want to override the distro Python interpreter (and sometimes
1933 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1934 # just require --meson=git|internal together with --python.
1935 if test "$explicit_python" = yes; then
1936 case "$meson" in
1937 git | internal) ;;
1938 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
1939 esac
1943 if test "$meson" = git; then
1944 git_submodules="${git_submodules} meson"
1947 case "$meson" in
1948 git | internal)
1949 meson="$python ${source_path}/meson/meson.py"
1951 *) meson=$(command -v "$meson") ;;
1952 esac
1954 # Probe for ninja
1956 if test -z "$ninja"; then
1957 for c in ninja ninja-build samu; do
1958 if has $c; then
1959 ninja=$(command -v "$c")
1960 break
1962 done
1963 if test -z "$ninja"; then
1964 error_exit "Cannot find Ninja"
1968 # Check that the C compiler works. Doing this here before testing
1969 # the host CPU ensures that we had a valid CC to autodetect the
1970 # $cpu var (and we should bail right here if that's not the case).
1971 # It also allows the help message to be printed without a CC.
1972 write_c_skeleton;
1973 if compile_object ; then
1974 : C compiler works ok
1975 else
1976 error_exit "\"$cc\" either does not exist or does not work"
1978 if ! compile_prog ; then
1979 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1982 # Consult white-list to determine whether to enable werror
1983 # by default. Only enable by default for git builds
1984 if test -z "$werror" ; then
1985 if test -e "$source_path/.git" && \
1986 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1987 werror="yes"
1988 else
1989 werror="no"
1993 if test "$bogus_os" = "yes"; then
1994 # Now that we know that we're not printing the help and that
1995 # the compiler works (so the results of the check_defines we used
1996 # to identify the OS are reliable), if we didn't recognize the
1997 # host OS we should stop now.
1998 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2001 # Check whether the compiler matches our minimum requirements:
2002 cat > $TMPC << EOF
2003 #if defined(__clang_major__) && defined(__clang_minor__)
2004 # ifdef __apple_build_version__
2005 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2006 # error You need at least XCode Clang v5.1 to compile QEMU
2007 # endif
2008 # else
2009 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2010 # error You need at least Clang v3.4 to compile QEMU
2011 # endif
2012 # endif
2013 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2014 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2015 # error You need at least GCC v4.8 to compile QEMU
2016 # endif
2017 #else
2018 # error You either need GCC or Clang to compiler QEMU
2019 #endif
2020 int main (void) { return 0; }
2022 if ! compile_prog "" "" ; then
2023 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2026 # Accumulate -Wfoo and -Wno-bar separately.
2027 # We will list all of the enable flags first, and the disable flags second.
2028 # Note that we do not add -Werror, because that would enable it for all
2029 # configure tests. If a configure test failed due to -Werror this would
2030 # just silently disable some features, so it's too error prone.
2032 warn_flags=
2033 add_to warn_flags -Wold-style-declaration
2034 add_to warn_flags -Wold-style-definition
2035 add_to warn_flags -Wtype-limits
2036 add_to warn_flags -Wformat-security
2037 add_to warn_flags -Wformat-y2k
2038 add_to warn_flags -Winit-self
2039 add_to warn_flags -Wignored-qualifiers
2040 add_to warn_flags -Wempty-body
2041 add_to warn_flags -Wnested-externs
2042 add_to warn_flags -Wendif-labels
2043 add_to warn_flags -Wexpansion-to-defined
2044 add_to warn_flags -Wimplicit-fallthrough=2
2046 nowarn_flags=
2047 add_to nowarn_flags -Wno-initializer-overrides
2048 add_to nowarn_flags -Wno-missing-include-dirs
2049 add_to nowarn_flags -Wno-shift-negative-value
2050 add_to nowarn_flags -Wno-string-plus-int
2051 add_to nowarn_flags -Wno-typedef-redefinition
2052 add_to nowarn_flags -Wno-tautological-type-limit-compare
2053 add_to nowarn_flags -Wno-psabi
2055 gcc_flags="$warn_flags $nowarn_flags"
2057 cc_has_warning_flag() {
2058 write_c_skeleton;
2060 # Use the positive sense of the flag when testing for -Wno-wombat
2061 # support (gcc will happily accept the -Wno- form of unknown
2062 # warning options).
2063 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2064 compile_prog "-Werror $optflag" ""
2067 for flag in $gcc_flags; do
2068 if cc_has_warning_flag $flag ; then
2069 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2071 done
2073 if test "$stack_protector" != "no"; then
2074 cat > $TMPC << EOF
2075 int main(int argc, char *argv[])
2077 char arr[64], *p = arr, *c = argv[0];
2078 while (*c) {
2079 *p++ = *c++;
2081 return 0;
2084 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2085 sp_on=0
2086 for flag in $gcc_flags; do
2087 # We need to check both a compile and a link, since some compiler
2088 # setups fail only on a .c->.o compile and some only at link time
2089 if compile_object "-Werror $flag" &&
2090 compile_prog "-Werror $flag" ""; then
2091 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2092 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2093 sp_on=1
2094 break
2096 done
2097 if test "$stack_protector" = yes; then
2098 if test $sp_on = 0; then
2099 error_exit "Stack protector not supported"
2104 # Disable -Wmissing-braces on older compilers that warn even for
2105 # the "universal" C zero initializer {0}.
2106 cat > $TMPC << EOF
2107 struct {
2108 int a[2];
2109 } x = {0};
2111 if compile_object "-Werror" "" ; then
2113 else
2114 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2117 # Our module code doesn't support Windows
2118 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2119 error_exit "Modules are not available for Windows"
2122 # module_upgrades is only reasonable if modules are enabled
2123 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2124 error_exit "Can't enable module-upgrades as Modules are not enabled"
2127 # Static linking is not possible with modules or PIE
2128 if test "$static" = "yes" ; then
2129 if test "$modules" = "yes" ; then
2130 error_exit "static and modules are mutually incompatible"
2134 # Unconditional check for compiler __thread support
2135 cat > $TMPC << EOF
2136 static __thread int tls_var;
2137 int main(void) { return tls_var; }
2140 if ! compile_prog "-Werror" "" ; then
2141 error_exit "Your compiler does not support the __thread specifier for " \
2142 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2145 cat > $TMPC << EOF
2147 #ifdef __linux__
2148 # define THREAD __thread
2149 #else
2150 # define THREAD
2151 #endif
2152 static THREAD int tls_var;
2153 int main(void) { return tls_var; }
2156 # Check we support --no-pie first; we will need this for building ROMs.
2157 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2158 CFLAGS_NOPIE="-fno-pie"
2161 if test "$static" = "yes"; then
2162 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2163 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2164 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2165 pie="yes"
2166 elif test "$pie" = "yes"; then
2167 error_exit "-static-pie not available due to missing toolchain support"
2168 else
2169 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2170 pie="no"
2172 elif test "$pie" = "no"; then
2173 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2174 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2175 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2176 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2177 pie="yes"
2178 elif test "$pie" = "yes"; then
2179 error_exit "PIE not available due to missing toolchain support"
2180 else
2181 echo "Disabling PIE due to missing toolchain support"
2182 pie="no"
2185 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2186 # The combination is known as "full relro", because .got.plt is read-only too.
2187 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2188 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2191 ##########################################
2192 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2193 # use i686 as default anyway, but for those that don't, an explicit
2194 # specification is necessary
2196 if test "$cpu" = "i386"; then
2197 cat > $TMPC << EOF
2198 static int sfaa(int *ptr)
2200 return __sync_fetch_and_and(ptr, 0);
2203 int main(void)
2205 int val = 42;
2206 val = __sync_val_compare_and_swap(&val, 0, 1);
2207 sfaa(&val);
2208 return val;
2211 if ! compile_prog "" "" ; then
2212 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2216 #########################################
2217 # Solaris specific configure tool chain decisions
2219 if test "$solaris" = "yes" ; then
2220 if has ar; then
2222 else
2223 if test -f /usr/ccs/bin/ar ; then
2224 error_exit "No path includes ar" \
2225 "Add /usr/ccs/bin to your path and rerun configure"
2227 error_exit "No path includes ar"
2231 if test -z "${target_list+xxx}" ; then
2232 default_targets=yes
2233 for target in $default_target_list; do
2234 target_list="$target_list $target"
2235 done
2236 target_list="${target_list# }"
2237 else
2238 default_targets=no
2239 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2240 for target in $target_list; do
2241 # Check that we recognised the target name; this allows a more
2242 # friendly error message than if we let it fall through.
2243 case " $default_target_list " in
2244 *" $target "*)
2247 error_exit "Unknown target name '$target'"
2249 esac
2250 done
2253 for target in $target_list; do
2254 # if a deprecated target is enabled we note it here
2255 if echo "$deprecated_targets_list" | grep -q "$target"; then
2256 add_to deprecated_features $target
2258 done
2260 # see if system emulation was really requested
2261 case " $target_list " in
2262 *"-softmmu "*) softmmu=yes
2264 *) softmmu=no
2266 esac
2268 feature_not_found() {
2269 feature=$1
2270 remedy=$2
2272 error_exit "User requested feature $feature" \
2273 "configure was not able to find it." \
2274 "$remedy"
2277 # ---
2278 # big/little endian test
2279 cat > $TMPC << EOF
2280 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2281 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2282 extern int foo(short *, short *);
2283 int main(int argc, char *argv[]) {
2284 return foo(big_endian, little_endian);
2288 if compile_object ; then
2289 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2290 bigendian="yes"
2291 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2292 bigendian="no"
2293 else
2294 echo big/little test failed
2296 else
2297 echo big/little test failed
2300 ##########################################
2301 # system tools
2302 if test -z "$want_tools"; then
2303 if test "$softmmu" = "no"; then
2304 want_tools=no
2305 else
2306 want_tools=yes
2310 ##########################################
2311 # cocoa implies not SDL or GTK
2312 # (the cocoa UI code currently assumes it is always the active UI
2313 # and doesn't interact well with other UI frontend code)
2314 if test "$cocoa" = "enabled"; then
2315 if test "$sdl" = "enabled"; then
2316 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2318 if test "$gtk" = "yes"; then
2319 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2321 gtk=no
2322 sdl=disabled
2325 # Some versions of Mac OS X incorrectly define SIZE_MAX
2326 cat > $TMPC << EOF
2327 #include <stdint.h>
2328 #include <stdio.h>
2329 int main(int argc, char *argv[]) {
2330 return printf("%zu", SIZE_MAX);
2333 have_broken_size_max=no
2334 if ! compile_object -Werror ; then
2335 have_broken_size_max=yes
2338 ##########################################
2339 # L2TPV3 probe
2341 cat > $TMPC <<EOF
2342 #include <sys/socket.h>
2343 #include <linux/ip.h>
2344 int main(void) { return sizeof(struct mmsghdr); }
2346 if compile_prog "" "" ; then
2347 l2tpv3=yes
2348 else
2349 l2tpv3=no
2352 cat > $TMPC <<EOF
2353 #include <sys/mman.h>
2354 int main(int argc, char *argv[]) {
2355 return mlockall(MCL_FUTURE);
2358 if compile_prog "" "" ; then
2359 have_mlockall=yes
2360 else
2361 have_mlockall=no
2364 #########################################
2365 # vhost interdependencies and host support
2367 # vhost backends
2368 if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2369 error_exit "vhost-user is only available on Linux"
2371 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2372 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2373 error_exit "vhost-vdpa is only available on Linux"
2375 test "$vhost_kernel" = "" && vhost_kernel=$linux
2376 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2377 error_exit "vhost-kernel is only available on Linux"
2380 # vhost-kernel devices
2381 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2382 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2383 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2385 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2386 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2387 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2390 # vhost-user backends
2391 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2392 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2393 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2395 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2396 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2397 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2399 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2400 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2401 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2403 #vhost-vdpa backends
2404 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2405 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2406 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2409 # OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2410 if test "$vhost_net" = ""; then
2411 test "$vhost_net_user" = "yes" && vhost_net=yes
2412 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
2413 test "$vhost_kernel" = "yes" && vhost_net=yes
2416 ##########################################
2417 # pkg-config probe
2419 if ! has "$pkg_config_exe"; then
2420 error_exit "pkg-config binary '$pkg_config_exe' not found"
2423 ##########################################
2424 # NPTL probe
2426 if test "$linux_user" = "yes"; then
2427 cat > $TMPC <<EOF
2428 #include <sched.h>
2429 #include <linux/futex.h>
2430 int main(void) {
2431 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2432 #error bork
2433 #endif
2434 return 0;
2437 if ! compile_object ; then
2438 feature_not_found "nptl" "Install glibc and linux kernel headers."
2442 ##########################################
2443 # lzo check
2445 if test "$lzo" != "no" ; then
2446 cat > $TMPC << EOF
2447 #include <lzo/lzo1x.h>
2448 int main(void) { lzo_version(); return 0; }
2450 if compile_prog "" "-llzo2" ; then
2451 lzo_libs="-llzo2"
2452 lzo="yes"
2453 else
2454 if test "$lzo" = "yes"; then
2455 feature_not_found "liblzo2" "Install liblzo2 devel"
2457 lzo="no"
2461 ##########################################
2462 # snappy check
2464 if test "$snappy" != "no" ; then
2465 cat > $TMPC << EOF
2466 #include <snappy-c.h>
2467 int main(void) { snappy_max_compressed_length(4096); return 0; }
2469 if compile_prog "" "-lsnappy" ; then
2470 snappy_libs='-lsnappy'
2471 snappy="yes"
2472 else
2473 if test "$snappy" = "yes"; then
2474 feature_not_found "libsnappy" "Install libsnappy devel"
2476 snappy="no"
2480 ##########################################
2481 # bzip2 check
2483 if test "$bzip2" != "no" ; then
2484 cat > $TMPC << EOF
2485 #include <bzlib.h>
2486 int main(void) { BZ2_bzlibVersion(); return 0; }
2488 if compile_prog "" "-lbz2" ; then
2489 bzip2="yes"
2490 else
2491 if test "$bzip2" = "yes"; then
2492 feature_not_found "libbzip2" "Install libbzip2 devel"
2494 bzip2="no"
2498 ##########################################
2499 # lzfse check
2501 if test "$lzfse" != "no" ; then
2502 cat > $TMPC << EOF
2503 #include <lzfse.h>
2504 int main(void) { lzfse_decode_scratch_size(); return 0; }
2506 if compile_prog "" "-llzfse" ; then
2507 lzfse="yes"
2508 else
2509 if test "$lzfse" = "yes"; then
2510 feature_not_found "lzfse" "Install lzfse devel"
2512 lzfse="no"
2516 ##########################################
2517 # zstd check
2519 if test "$zstd" != "no" ; then
2520 libzstd_minver="1.4.0"
2521 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2522 zstd_cflags="$($pkg_config --cflags libzstd)"
2523 zstd_libs="$($pkg_config --libs libzstd)"
2524 zstd="yes"
2525 else
2526 if test "$zstd" = "yes" ; then
2527 feature_not_found "libzstd" "Install libzstd devel"
2529 zstd="no"
2533 ##########################################
2534 # libseccomp check
2536 if test "$seccomp" != "no" ; then
2537 libseccomp_minver="2.3.0"
2538 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2539 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2540 seccomp_libs="$($pkg_config --libs libseccomp)"
2541 seccomp="yes"
2542 else
2543 if test "$seccomp" = "yes" ; then
2544 feature_not_found "libseccomp" \
2545 "Install libseccomp devel >= $libseccomp_minver"
2547 seccomp="no"
2551 ##########################################
2552 # xen probe
2554 if test "$xen" != "disabled" ; then
2555 # Check whether Xen library path is specified via --extra-ldflags to avoid
2556 # overriding this setting with pkg-config output. If not, try pkg-config
2557 # to obtain all needed flags.
2559 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2560 $pkg_config --exists xencontrol ; then
2561 xen_ctrl_version="$(printf '%d%02d%02d' \
2562 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2563 xen=enabled
2564 xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
2565 xen_pc="$xen_pc xenevtchn xendevicemodel"
2566 if $pkg_config --exists xentoolcore; then
2567 xen_pc="$xen_pc xentoolcore"
2569 xen_cflags="$($pkg_config --cflags $xen_pc)"
2570 xen_libs="$($pkg_config --libs $xen_pc)"
2571 else
2573 xen_libs="-lxenstore -lxenctrl"
2574 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2576 # First we test whether Xen headers and libraries are available.
2577 # If no, we are done and there is no Xen support.
2578 # If yes, more tests are run to detect the Xen version.
2580 # Xen (any)
2581 cat > $TMPC <<EOF
2582 #include <xenctrl.h>
2583 int main(void) {
2584 return 0;
2587 if ! compile_prog "" "$xen_libs" ; then
2588 # Xen not found
2589 if test "$xen" = "enabled" ; then
2590 feature_not_found "xen" "Install xen devel"
2592 xen=disabled
2594 # Xen unstable
2595 elif
2596 cat > $TMPC <<EOF &&
2597 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2598 #define __XEN_TOOLS__
2599 #include <xendevicemodel.h>
2600 #include <xenforeignmemory.h>
2601 int main(void) {
2602 xendevicemodel_handle *xd;
2603 xenforeignmemory_handle *xfmem;
2605 xd = xendevicemodel_open(0, 0);
2606 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2608 xfmem = xenforeignmemory_open(0, 0);
2609 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2611 return 0;
2614 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2615 then
2616 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2617 xen_ctrl_version=41100
2618 xen=enabled
2619 elif
2620 cat > $TMPC <<EOF &&
2621 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2622 #include <xenforeignmemory.h>
2623 #include <xentoolcore.h>
2624 int main(void) {
2625 xenforeignmemory_handle *xfmem;
2627 xfmem = xenforeignmemory_open(0, 0);
2628 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2629 xentoolcore_restrict_all(0);
2631 return 0;
2634 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2635 then
2636 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2637 xen_ctrl_version=41000
2638 xen=enabled
2639 elif
2640 cat > $TMPC <<EOF &&
2641 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2642 #define __XEN_TOOLS__
2643 #include <xendevicemodel.h>
2644 int main(void) {
2645 xendevicemodel_handle *xd;
2647 xd = xendevicemodel_open(0, 0);
2648 xendevicemodel_close(xd);
2650 return 0;
2653 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2654 then
2655 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2656 xen_ctrl_version=40900
2657 xen=enabled
2658 elif
2659 cat > $TMPC <<EOF &&
2661 * If we have stable libs the we don't want the libxc compat
2662 * layers, regardless of what CFLAGS we may have been given.
2664 * Also, check if xengnttab_grant_copy_segment_t is defined and
2665 * grant copy operation is implemented.
2667 #undef XC_WANT_COMPAT_EVTCHN_API
2668 #undef XC_WANT_COMPAT_GNTTAB_API
2669 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2670 #include <xenctrl.h>
2671 #include <xenstore.h>
2672 #include <xenevtchn.h>
2673 #include <xengnttab.h>
2674 #include <xenforeignmemory.h>
2675 #include <stdint.h>
2676 #include <xen/hvm/hvm_info_table.h>
2677 #if !defined(HVM_MAX_VCPUS)
2678 # error HVM_MAX_VCPUS not defined
2679 #endif
2680 int main(void) {
2681 xc_interface *xc = NULL;
2682 xenforeignmemory_handle *xfmem;
2683 xenevtchn_handle *xe;
2684 xengnttab_handle *xg;
2685 xengnttab_grant_copy_segment_t* seg = NULL;
2687 xs_daemon_open();
2689 xc = xc_interface_open(0, 0, 0);
2690 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2691 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2692 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2693 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2695 xfmem = xenforeignmemory_open(0, 0);
2696 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2698 xe = xenevtchn_open(0, 0);
2699 xenevtchn_fd(xe);
2701 xg = xengnttab_open(0, 0);
2702 xengnttab_grant_copy(xg, 0, seg);
2704 return 0;
2707 compile_prog "" "$xen_libs $xen_stable_libs"
2708 then
2709 xen_ctrl_version=40800
2710 xen=enabled
2711 elif
2712 cat > $TMPC <<EOF &&
2714 * If we have stable libs the we don't want the libxc compat
2715 * layers, regardless of what CFLAGS we may have been given.
2717 #undef XC_WANT_COMPAT_EVTCHN_API
2718 #undef XC_WANT_COMPAT_GNTTAB_API
2719 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2720 #include <xenctrl.h>
2721 #include <xenstore.h>
2722 #include <xenevtchn.h>
2723 #include <xengnttab.h>
2724 #include <xenforeignmemory.h>
2725 #include <stdint.h>
2726 #include <xen/hvm/hvm_info_table.h>
2727 #if !defined(HVM_MAX_VCPUS)
2728 # error HVM_MAX_VCPUS not defined
2729 #endif
2730 int main(void) {
2731 xc_interface *xc = NULL;
2732 xenforeignmemory_handle *xfmem;
2733 xenevtchn_handle *xe;
2734 xengnttab_handle *xg;
2736 xs_daemon_open();
2738 xc = xc_interface_open(0, 0, 0);
2739 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2740 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2741 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2742 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2744 xfmem = xenforeignmemory_open(0, 0);
2745 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2747 xe = xenevtchn_open(0, 0);
2748 xenevtchn_fd(xe);
2750 xg = xengnttab_open(0, 0);
2751 xengnttab_map_grant_ref(xg, 0, 0, 0);
2753 return 0;
2756 compile_prog "" "$xen_libs $xen_stable_libs"
2757 then
2758 xen_ctrl_version=40701
2759 xen=enabled
2761 # Xen 4.6
2762 elif
2763 cat > $TMPC <<EOF &&
2764 #include <xenctrl.h>
2765 #include <xenstore.h>
2766 #include <stdint.h>
2767 #include <xen/hvm/hvm_info_table.h>
2768 #if !defined(HVM_MAX_VCPUS)
2769 # error HVM_MAX_VCPUS not defined
2770 #endif
2771 int main(void) {
2772 xc_interface *xc;
2773 xs_daemon_open();
2774 xc = xc_interface_open(0, 0, 0);
2775 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2776 xc_gnttab_open(NULL, 0);
2777 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2778 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2779 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2780 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2781 return 0;
2784 compile_prog "" "$xen_libs"
2785 then
2786 xen_ctrl_version=40600
2787 xen=enabled
2789 # Xen 4.5
2790 elif
2791 cat > $TMPC <<EOF &&
2792 #include <xenctrl.h>
2793 #include <xenstore.h>
2794 #include <stdint.h>
2795 #include <xen/hvm/hvm_info_table.h>
2796 #if !defined(HVM_MAX_VCPUS)
2797 # error HVM_MAX_VCPUS not defined
2798 #endif
2799 int main(void) {
2800 xc_interface *xc;
2801 xs_daemon_open();
2802 xc = xc_interface_open(0, 0, 0);
2803 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2804 xc_gnttab_open(NULL, 0);
2805 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2806 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2807 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2808 return 0;
2811 compile_prog "" "$xen_libs"
2812 then
2813 xen_ctrl_version=40500
2814 xen=enabled
2816 elif
2817 cat > $TMPC <<EOF &&
2818 #include <xenctrl.h>
2819 #include <xenstore.h>
2820 #include <stdint.h>
2821 #include <xen/hvm/hvm_info_table.h>
2822 #if !defined(HVM_MAX_VCPUS)
2823 # error HVM_MAX_VCPUS not defined
2824 #endif
2825 int main(void) {
2826 xc_interface *xc;
2827 xs_daemon_open();
2828 xc = xc_interface_open(0, 0, 0);
2829 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2830 xc_gnttab_open(NULL, 0);
2831 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2832 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2833 return 0;
2836 compile_prog "" "$xen_libs"
2837 then
2838 xen_ctrl_version=40200
2839 xen=enabled
2841 else
2842 if test "$xen" = "enabled" ; then
2843 feature_not_found "xen (unsupported version)" \
2844 "Install a supported xen (xen 4.2 or newer)"
2846 xen=disabled
2849 if test "$xen" = enabled; then
2850 if test $xen_ctrl_version -ge 40701 ; then
2851 xen_libs="$xen_libs $xen_stable_libs "
2857 if test "$xen_pci_passthrough" != "disabled"; then
2858 if test "$xen" = "enabled" && test "$linux" = "yes"; then
2859 xen_pci_passthrough=enabled
2860 else
2861 if test "$xen_pci_passthrough" = "enabled"; then
2862 error_exit "User requested feature Xen PCI Passthrough" \
2863 " but this feature requires /sys from Linux"
2865 xen_pci_passthrough=disabled
2869 ##########################################
2870 # X11 probe
2871 if $pkg_config --exists "x11"; then
2872 have_x11=yes
2873 x11_cflags=$($pkg_config --cflags x11)
2874 x11_libs=$($pkg_config --libs x11)
2877 ##########################################
2878 # GTK probe
2880 if test "$gtk" != "no"; then
2881 gtkpackage="gtk+-3.0"
2882 gtkx11package="gtk+-x11-3.0"
2883 gtkversion="3.22.0"
2884 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2885 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2886 gtk_libs=$($pkg_config --libs $gtkpackage)
2887 gtk_version=$($pkg_config --modversion $gtkpackage)
2888 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2889 need_x11=yes
2890 gtk_cflags="$gtk_cflags $x11_cflags"
2891 gtk_libs="$gtk_libs $x11_libs"
2893 gtk="yes"
2894 elif test "$gtk" = "yes"; then
2895 feature_not_found "gtk" "Install gtk3-devel"
2896 else
2897 gtk="no"
2902 ##########################################
2903 # GNUTLS probe
2905 if test "$gnutls" != "no"; then
2906 pass="no"
2907 if $pkg_config --exists "gnutls >= 3.1.18"; then
2908 gnutls_cflags=$($pkg_config --cflags gnutls)
2909 gnutls_libs=$($pkg_config --libs gnutls)
2910 # Packaging for the static libraries is not always correct.
2911 # At least ubuntu 18.04 ships only shared libraries.
2912 write_c_skeleton
2913 if compile_prog "" "$gnutls_libs" ; then
2914 pass="yes"
2917 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2918 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2919 else
2920 gnutls="$pass"
2925 # If user didn't give a --disable/enable-gcrypt flag,
2926 # then mark as disabled if user requested nettle
2927 # explicitly
2928 if test -z "$gcrypt"
2929 then
2930 if test "$nettle" = "yes"
2931 then
2932 gcrypt="no"
2936 # If user didn't give a --disable/enable-nettle flag,
2937 # then mark as disabled if user requested gcrypt
2938 # explicitly
2939 if test -z "$nettle"
2940 then
2941 if test "$gcrypt" = "yes"
2942 then
2943 nettle="no"
2947 has_libgcrypt() {
2948 if ! has "libgcrypt-config"
2949 then
2950 return 1
2953 if test -n "$cross_prefix"
2954 then
2955 host=$(libgcrypt-config --host)
2956 if test "$host-" != $cross_prefix
2957 then
2958 return 1
2962 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2963 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2965 if test $maj != 1 || test $min -lt 5
2966 then
2967 return 1
2970 return 0
2974 if test "$nettle" != "no"; then
2975 pass="no"
2976 if $pkg_config --exists "nettle >= 2.7.1"; then
2977 nettle_cflags=$($pkg_config --cflags nettle)
2978 nettle_libs=$($pkg_config --libs nettle)
2979 nettle_version=$($pkg_config --modversion nettle)
2980 # Link test to make sure the given libraries work (e.g for static).
2981 write_c_skeleton
2982 if compile_prog "" "$nettle_libs" ; then
2983 if test -z "$gcrypt"; then
2984 gcrypt="no"
2986 pass="yes"
2989 if test "$pass" = "yes"
2990 then
2991 cat > $TMPC << EOF
2992 #include <nettle/xts.h>
2993 int main(void) {
2994 return 0;
2997 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2998 nettle_xts=yes
2999 qemu_private_xts=no
3002 if test "$pass" = "no" && test "$nettle" = "yes"; then
3003 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3004 else
3005 nettle="$pass"
3009 if test "$gcrypt" != "no"; then
3010 pass="no"
3011 if has_libgcrypt; then
3012 gcrypt_cflags=$(libgcrypt-config --cflags)
3013 gcrypt_libs=$(libgcrypt-config --libs)
3014 # Debian has removed -lgpg-error from libgcrypt-config
3015 # as it "spreads unnecessary dependencies" which in
3016 # turn breaks static builds...
3017 if test "$static" = "yes"
3018 then
3019 gcrypt_libs="$gcrypt_libs -lgpg-error"
3022 # Link test to make sure the given libraries work (e.g for static).
3023 write_c_skeleton
3024 if compile_prog "" "$gcrypt_libs" ; then
3025 pass="yes"
3028 if test "$pass" = "yes"; then
3029 gcrypt="yes"
3030 cat > $TMPC << EOF
3031 #include <gcrypt.h>
3032 int main(void) {
3033 gcry_mac_hd_t handle;
3034 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3035 GCRY_MAC_FLAG_SECURE, NULL);
3036 return 0;
3039 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3040 gcrypt_hmac=yes
3042 cat > $TMPC << EOF
3043 #include <gcrypt.h>
3044 int main(void) {
3045 gcry_cipher_hd_t handle;
3046 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3047 return 0;
3050 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3051 gcrypt_xts=yes
3052 qemu_private_xts=no
3054 elif test "$gcrypt" = "yes"; then
3055 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3056 else
3057 gcrypt="no"
3062 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3063 then
3064 error_exit "Only one of gcrypt & nettle can be enabled"
3067 ##########################################
3068 # libtasn1 - only for the TLS creds/session test suite
3070 tasn1=yes
3071 tasn1_cflags=""
3072 tasn1_libs=""
3073 if $pkg_config --exists "libtasn1"; then
3074 tasn1_cflags=$($pkg_config --cflags libtasn1)
3075 tasn1_libs=$($pkg_config --libs libtasn1)
3076 else
3077 tasn1=no
3081 ##########################################
3082 # PAM probe
3084 if test "$auth_pam" != "no"; then
3085 cat > $TMPC <<EOF
3086 #include <security/pam_appl.h>
3087 #include <stdio.h>
3088 int main(void) {
3089 const char *service_name = "qemu";
3090 const char *user = "frank";
3091 const struct pam_conv pam_conv = { 0 };
3092 pam_handle_t *pamh = NULL;
3093 pam_start(service_name, user, &pam_conv, &pamh);
3094 return 0;
3097 if compile_prog "" "-lpam" ; then
3098 auth_pam=yes
3099 else
3100 if test "$auth_pam" = "yes"; then
3101 feature_not_found "PAM" "Install PAM development package"
3102 else
3103 auth_pam=no
3108 ##########################################
3109 # VTE probe
3111 if test "$vte" != "no"; then
3112 vteminversion="0.32.0"
3113 if $pkg_config --exists "vte-2.91"; then
3114 vtepackage="vte-2.91"
3115 else
3116 vtepackage="vte-2.90"
3118 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3119 vte_cflags=$($pkg_config --cflags $vtepackage)
3120 vte_libs=$($pkg_config --libs $vtepackage)
3121 vteversion=$($pkg_config --modversion $vtepackage)
3122 vte="yes"
3123 elif test "$vte" = "yes"; then
3124 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3125 else
3126 vte="no"
3130 ##########################################
3131 # RDMA needs OpenFabrics libraries
3132 if test "$rdma" != "no" ; then
3133 cat > $TMPC <<EOF
3134 #include <rdma/rdma_cma.h>
3135 int main(void) { return 0; }
3137 rdma_libs="-lrdmacm -libverbs -libumad"
3138 if compile_prog "" "$rdma_libs" ; then
3139 rdma="yes"
3140 else
3141 if test "$rdma" = "yes" ; then
3142 error_exit \
3143 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3144 " Your options:" \
3145 " (1) Fast: Install infiniband packages (devel) from your distro." \
3146 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3147 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3149 rdma="no"
3153 ##########################################
3154 # PVRDMA detection
3156 cat > $TMPC <<EOF &&
3157 #include <sys/mman.h>
3160 main(void)
3162 char buf = 0;
3163 void *addr = &buf;
3164 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3166 return 0;
3170 if test "$rdma" = "yes" ; then
3171 case "$pvrdma" in
3173 if compile_prog "" ""; then
3174 pvrdma="yes"
3175 else
3176 pvrdma="no"
3179 "yes")
3180 if ! compile_prog "" ""; then
3181 error_exit "PVRDMA is not supported since mremap is not implemented"
3183 pvrdma="yes"
3185 "no")
3186 pvrdma="no"
3188 esac
3189 else
3190 if test "$pvrdma" = "yes" ; then
3191 error_exit "PVRDMA requires rdma suppport"
3193 pvrdma="no"
3196 # Let's see if enhanced reg_mr is supported
3197 if test "$pvrdma" = "yes" ; then
3199 cat > $TMPC <<EOF &&
3200 #include <infiniband/verbs.h>
3203 main(void)
3205 struct ibv_mr *mr;
3206 struct ibv_pd *pd = NULL;
3207 size_t length = 10;
3208 uint64_t iova = 0;
3209 int access = 0;
3210 void *addr = NULL;
3212 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3214 ibv_dereg_mr(mr);
3216 return 0;
3219 if ! compile_prog "" "-libverbs"; then
3220 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3224 ##########################################
3225 # xfsctl() probe, used for file-posix.c
3226 if test "$xfs" != "no" ; then
3227 cat > $TMPC << EOF
3228 #include <stddef.h> /* NULL */
3229 #include <xfs/xfs.h>
3230 int main(void)
3232 xfsctl(NULL, 0, 0, NULL);
3233 return 0;
3236 if compile_prog "" "" ; then
3237 xfs="yes"
3238 else
3239 if test "$xfs" = "yes" ; then
3240 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
3242 xfs=no
3246 ##########################################
3247 # vde libraries probe
3248 if test "$vde" != "no" ; then
3249 vde_libs="-lvdeplug"
3250 cat > $TMPC << EOF
3251 #include <libvdeplug.h>
3252 int main(void)
3254 struct vde_open_args a = {0, 0, 0};
3255 char s[] = "";
3256 vde_open(s, s, &a);
3257 return 0;
3260 if compile_prog "" "$vde_libs" ; then
3261 vde=yes
3262 else
3263 if test "$vde" = "yes" ; then
3264 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3266 vde=no
3270 ##########################################
3271 # netmap support probe
3272 # Apart from looking for netmap headers, we make sure that the host API version
3273 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3274 # a minor/major version number. Minor new features will be marked with values up
3275 # to 15, and if something happens that requires a change to the backend we will
3276 # move above 15, submit the backend fixes and modify this two bounds.
3277 if test "$netmap" != "no" ; then
3278 cat > $TMPC << EOF
3279 #include <inttypes.h>
3280 #include <net/if.h>
3281 #include <net/netmap.h>
3282 #include <net/netmap_user.h>
3283 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3284 #error
3285 #endif
3286 int main(void) { return 0; }
3288 if compile_prog "" "" ; then
3289 netmap=yes
3290 else
3291 if test "$netmap" = "yes" ; then
3292 feature_not_found "netmap"
3294 netmap=no
3298 ##########################################
3299 # libcap-ng library probe
3300 if test "$cap_ng" != "no" ; then
3301 cap_libs="-lcap-ng"
3302 cat > $TMPC << EOF
3303 #include <cap-ng.h>
3304 int main(void)
3306 capng_capability_to_name(CAPNG_EFFECTIVE);
3307 return 0;
3310 if compile_prog "" "$cap_libs" ; then
3311 cap_ng=yes
3312 else
3313 if test "$cap_ng" = "yes" ; then
3314 feature_not_found "cap_ng" "Install libcap-ng devel"
3316 cap_ng=no
3320 ##########################################
3321 # Sound support libraries probe
3323 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3324 for drv in $audio_drv_list; do
3325 case $drv in
3326 alsa | try-alsa)
3327 if $pkg_config alsa --exists; then
3328 alsa_libs=$($pkg_config alsa --libs)
3329 alsa_cflags=$($pkg_config alsa --cflags)
3330 alsa=yes
3331 if test "$drv" = "try-alsa"; then
3332 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3334 else
3335 if test "$drv" = "try-alsa"; then
3336 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3337 else
3338 error_exit "$drv check failed" \
3339 "Make sure to have the $drv libs and headers installed."
3344 pa | try-pa)
3345 if $pkg_config libpulse --exists; then
3346 libpulse=yes
3347 pulse_libs=$($pkg_config libpulse --libs)
3348 pulse_cflags=$($pkg_config libpulse --cflags)
3349 if test "$drv" = "try-pa"; then
3350 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3352 else
3353 if test "$drv" = "try-pa"; then
3354 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3355 else
3356 error_exit "$drv check failed" \
3357 "Make sure to have the $drv libs and headers installed."
3362 sdl)
3363 if test "$sdl" = "no"; then
3364 error_exit "sdl not found or disabled, can not use sdl audio driver"
3368 try-sdl)
3369 if test "$sdl" = "no"; then
3370 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3371 else
3372 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3376 coreaudio)
3377 coreaudio_libs="-framework CoreAudio"
3380 dsound)
3381 dsound_libs="-lole32 -ldxguid"
3382 audio_win_int="yes"
3385 oss)
3386 oss_libs="$oss_lib"
3389 jack | try-jack)
3390 if $pkg_config jack --exists; then
3391 libjack=yes
3392 jack_libs=$($pkg_config jack --libs)
3393 if test "$drv" = "try-jack"; then
3394 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3396 else
3397 if test "$drv" = "try-jack"; then
3398 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3399 else
3400 error_exit "$drv check failed" \
3401 "Make sure to have the $drv libs and headers installed."
3407 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3408 error_exit "Unknown driver '$drv' selected" \
3409 "Possible drivers are: $audio_possible_drivers"
3412 esac
3413 done
3415 ##########################################
3416 # BrlAPI probe
3418 if test "$brlapi" != "no" ; then
3419 brlapi_libs="-lbrlapi"
3420 cat > $TMPC << EOF
3421 #include <brlapi.h>
3422 #include <stddef.h>
3423 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3425 if compile_prog "" "$brlapi_libs" ; then
3426 brlapi=yes
3427 else
3428 if test "$brlapi" = "yes" ; then
3429 feature_not_found "brlapi" "Install brlapi devel"
3431 brlapi=no
3435 ##########################################
3436 # curl probe
3437 if test "$curl" != "no" ; then
3438 if $pkg_config libcurl --exists; then
3439 curlconfig="$pkg_config libcurl"
3440 else
3441 curlconfig=curl-config
3443 cat > $TMPC << EOF
3444 #include <curl/curl.h>
3445 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3447 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3448 curl_libs=$($curlconfig --libs 2>/dev/null)
3449 if compile_prog "$curl_cflags" "$curl_libs" ; then
3450 curl=yes
3451 else
3452 if test "$curl" = "yes" ; then
3453 feature_not_found "curl" "Install libcurl devel"
3455 curl=no
3457 fi # test "$curl"
3459 ##########################################
3460 # glib support probe
3462 glib_req_ver=2.48
3463 glib_modules=gthread-2.0
3464 if test "$modules" = yes; then
3465 glib_modules="$glib_modules gmodule-export-2.0"
3467 if test "$plugins" = yes; then
3468 glib_modules="$glib_modules gmodule-2.0"
3471 for i in $glib_modules; do
3472 if $pkg_config --atleast-version=$glib_req_ver $i; then
3473 glib_cflags=$($pkg_config --cflags $i)
3474 glib_libs=$($pkg_config --libs $i)
3475 else
3476 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3478 done
3480 # This workaround is required due to a bug in pkg-config file for glib as it
3481 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3483 if test "$static" = yes && test "$mingw32" = yes; then
3484 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3487 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3488 gio_cflags=$($pkg_config --cflags gio-2.0)
3489 gio_libs=$($pkg_config --libs gio-2.0)
3490 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3491 if [ ! -x "$gdbus_codegen" ]; then
3492 gdbus_codegen=
3494 # Check that the libraries actually work -- Ubuntu 18.04 ships
3495 # with pkg-config --static --libs data for gio-2.0 that is missing
3496 # -lblkid and will give a link error.
3497 cat > $TMPC <<EOF
3498 #include <gio/gio.h>
3499 int main(void)
3501 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3502 return 0;
3505 if compile_prog "$gio_cflags" "$gio_libs" ; then
3506 gio=yes
3507 else
3508 gio=no
3510 else
3511 gio=no
3514 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3515 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3516 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3519 # Sanity check that the current size_t matches the
3520 # size that glib thinks it should be. This catches
3521 # problems on multi-arch where people try to build
3522 # 32-bit QEMU while pointing at 64-bit glib headers
3523 cat > $TMPC <<EOF
3524 #include <glib.h>
3525 #include <unistd.h>
3527 #define QEMU_BUILD_BUG_ON(x) \
3528 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3530 int main(void) {
3531 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3532 return 0;
3536 if ! compile_prog "$glib_cflags" "$glib_libs" ; then
3537 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3538 "You probably need to set PKG_CONFIG_LIBDIR"\
3539 "to point to the right pkg-config files for your"\
3540 "build target"
3543 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3544 cat > $TMPC << EOF
3545 #include <glib.h>
3546 int main(void) { return 0; }
3548 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3549 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3550 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3551 CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
3555 # Silence clang warnings triggered by glib < 2.57.2
3556 cat > $TMPC << EOF
3557 #include <glib.h>
3558 typedef struct Foo {
3559 int i;
3560 } Foo;
3561 static void foo_free(Foo *f)
3563 g_free(f);
3565 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3566 int main(void) { return 0; }
3568 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3569 if cc_has_warning_flag "-Wno-unused-function"; then
3570 glib_cflags="$glib_cflags -Wno-unused-function"
3571 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
3575 ##########################################
3576 # SHA command probe for modules
3577 if test "$modules" = yes; then
3578 shacmd_probe="sha1sum sha1 shasum"
3579 for c in $shacmd_probe; do
3580 if has $c; then
3581 shacmd="$c"
3582 break
3584 done
3585 if test "$shacmd" = ""; then
3586 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3590 ##########################################
3591 # pthread probe
3592 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3594 pthread=no
3595 cat > $TMPC << EOF
3596 #include <pthread.h>
3597 static void *f(void *p) { return NULL; }
3598 int main(void) {
3599 pthread_t thread;
3600 pthread_create(&thread, 0, f, 0);
3601 return 0;
3604 if compile_prog "" "" ; then
3605 pthread=yes
3606 else
3607 for pthread_lib in $PTHREADLIBS_LIST; do
3608 if compile_prog "" "$pthread_lib" ; then
3609 pthread=yes
3610 found=no
3611 for lib_entry in $LIBS; do
3612 if test "$lib_entry" = "$pthread_lib"; then
3613 found=yes
3614 break
3616 done
3617 if test "$found" = "no"; then
3618 LIBS="$pthread_lib $LIBS"
3620 break
3622 done
3625 if test "$mingw32" != yes && test "$pthread" = no; then
3626 error_exit "pthread check failed" \
3627 "Make sure to have the pthread libs and headers installed."
3630 # check for pthread_setname_np with thread id
3631 pthread_setname_np_w_tid=no
3632 cat > $TMPC << EOF
3633 #include <pthread.h>
3635 static void *f(void *p) { return NULL; }
3636 int main(void)
3638 pthread_t thread;
3639 pthread_create(&thread, 0, f, 0);
3640 pthread_setname_np(thread, "QEMU");
3641 return 0;
3644 if compile_prog "" "$pthread_lib" ; then
3645 pthread_setname_np_w_tid=yes
3648 # check for pthread_setname_np without thread id
3649 pthread_setname_np_wo_tid=no
3650 cat > $TMPC << EOF
3651 #include <pthread.h>
3653 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3654 int main(void)
3656 pthread_t thread;
3657 pthread_create(&thread, 0, f, 0);
3658 return 0;
3661 if compile_prog "" "$pthread_lib" ; then
3662 pthread_setname_np_wo_tid=yes
3665 ##########################################
3666 # rbd probe
3667 if test "$rbd" != "no" ; then
3668 cat > $TMPC <<EOF
3669 #include <stdio.h>
3670 #include <rbd/librbd.h>
3671 int main(void) {
3672 rados_t cluster;
3673 rados_create(&cluster, NULL);
3674 return 0;
3677 rbd_libs="-lrbd -lrados"
3678 if compile_prog "" "$rbd_libs" ; then
3679 rbd=yes
3680 else
3681 if test "$rbd" = "yes" ; then
3682 feature_not_found "rados block device" "Install librbd/ceph devel"
3684 rbd=no
3688 ##########################################
3689 # libssh probe
3690 if test "$libssh" != "no" ; then
3691 if $pkg_config --exists libssh; then
3692 libssh_cflags=$($pkg_config libssh --cflags)
3693 libssh_libs=$($pkg_config libssh --libs)
3694 libssh=yes
3695 else
3696 if test "$libssh" = "yes" ; then
3697 error_exit "libssh required for --enable-libssh"
3699 libssh=no
3703 ##########################################
3704 # Check for libssh 0.8
3705 # This is done like this instead of using the LIBSSH_VERSION_* and
3706 # SSH_VERSION_* macros because some distributions in the past shipped
3707 # snapshots of the future 0.8 from Git, and those snapshots did not
3708 # have updated version numbers (still referring to 0.7.0).
3710 if test "$libssh" = "yes"; then
3711 cat > $TMPC <<EOF
3712 #include <libssh/libssh.h>
3713 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3715 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3716 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3720 ##########################################
3721 # linux-aio probe
3723 if test "$linux_aio" != "no" ; then
3724 cat > $TMPC <<EOF
3725 #include <libaio.h>
3726 #include <sys/eventfd.h>
3727 #include <stddef.h>
3728 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3730 if compile_prog "" "-laio" ; then
3731 linux_aio=yes
3732 else
3733 if test "$linux_aio" = "yes" ; then
3734 feature_not_found "linux AIO" "Install libaio devel"
3736 linux_aio=no
3739 ##########################################
3740 # linux-io-uring probe
3742 if test "$linux_io_uring" != "no" ; then
3743 if $pkg_config liburing; then
3744 linux_io_uring_cflags=$($pkg_config --cflags liburing)
3745 linux_io_uring_libs=$($pkg_config --libs liburing)
3746 linux_io_uring=yes
3747 else
3748 if test "$linux_io_uring" = "yes" ; then
3749 feature_not_found "linux io_uring" "Install liburing devel"
3751 linux_io_uring=no
3755 ##########################################
3756 # TPM emulation is only on POSIX
3758 if test "$tpm" = ""; then
3759 if test "$mingw32" = "yes"; then
3760 tpm=no
3761 else
3762 tpm=yes
3764 elif test "$tpm" = "yes"; then
3765 if test "$mingw32" = "yes" ; then
3766 error_exit "TPM emulation only available on POSIX systems"
3770 ##########################################
3771 # attr probe
3773 libattr_libs=
3774 if test "$attr" != "no" ; then
3775 cat > $TMPC <<EOF
3776 #include <stdio.h>
3777 #include <sys/types.h>
3778 #ifdef CONFIG_LIBATTR
3779 #include <attr/xattr.h>
3780 #else
3781 #include <sys/xattr.h>
3782 #endif
3783 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3785 if compile_prog "" "" ; then
3786 attr=yes
3787 # Older distros have <attr/xattr.h>, and need -lattr:
3788 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3789 attr=yes
3790 libattr_libs="-lattr"
3791 libattr=yes
3792 else
3793 if test "$attr" = "yes" ; then
3794 feature_not_found "ATTR" "Install libc6 or libattr devel"
3796 attr=no
3800 ##########################################
3801 # iovec probe
3802 cat > $TMPC <<EOF
3803 #include <sys/types.h>
3804 #include <sys/uio.h>
3805 #include <unistd.h>
3806 int main(void) { return sizeof(struct iovec); }
3808 iovec=no
3809 if compile_prog "" "" ; then
3810 iovec=yes
3813 ##########################################
3814 # preadv probe
3815 cat > $TMPC <<EOF
3816 #include <sys/types.h>
3817 #include <sys/uio.h>
3818 #include <unistd.h>
3819 int main(void) { return preadv(0, 0, 0, 0); }
3821 preadv=no
3822 if compile_prog "" "" ; then
3823 preadv=yes
3826 ##########################################
3827 # fdt probe
3829 case "$fdt" in
3830 auto | enabled | internal)
3831 # Simpler to always update submodule, even if not needed.
3832 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
3833 git_submodules="${git_submodules} dtc"
3836 esac
3838 ##########################################
3839 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3841 gbm="no"
3842 if $pkg_config gbm; then
3843 gbm_cflags="$($pkg_config --cflags gbm)"
3844 gbm_libs="$($pkg_config --libs gbm)"
3845 gbm="yes"
3848 if test "$opengl" != "no" ; then
3849 opengl_pkgs="epoxy gbm"
3850 if $pkg_config $opengl_pkgs; then
3851 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3852 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
3853 opengl=yes
3854 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3855 gtk_gl="yes"
3857 else
3858 if test "$opengl" = "yes" ; then
3859 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3861 opengl_cflags=""
3862 opengl_libs=""
3863 opengl=no
3867 if test "$opengl" = "yes"; then
3868 cat > $TMPC << EOF
3869 #include <epoxy/egl.h>
3870 #ifndef EGL_MESA_image_dma_buf_export
3871 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3872 #endif
3873 int main(void) { return 0; }
3875 if compile_prog "" "" ; then
3876 opengl_dmabuf=yes
3880 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
3881 for target in $target_list; do
3882 case $target in
3883 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
3884 need_x11=yes
3886 esac
3887 done
3890 ##########################################
3891 # libxml2 probe
3892 if test "$libxml2" != "no" ; then
3893 if $pkg_config --exists libxml-2.0; then
3894 libxml2="yes"
3895 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3896 libxml2_libs=$($pkg_config --libs libxml-2.0)
3897 else
3898 if test "$libxml2" = "yes"; then
3899 feature_not_found "libxml2" "Install libxml2 devel"
3901 libxml2="no"
3905 ##########################################
3906 # glusterfs probe
3907 if test "$glusterfs" != "no" ; then
3908 if $pkg_config --atleast-version=3 glusterfs-api; then
3909 glusterfs="yes"
3910 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3911 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3912 if $pkg_config --atleast-version=4 glusterfs-api; then
3913 glusterfs_xlator_opt="yes"
3915 if $pkg_config --atleast-version=5 glusterfs-api; then
3916 glusterfs_discard="yes"
3918 if $pkg_config --atleast-version=6 glusterfs-api; then
3919 glusterfs_fallocate="yes"
3920 glusterfs_zerofill="yes"
3922 cat > $TMPC << EOF
3923 #include <glusterfs/api/glfs.h>
3926 main(void)
3928 /* new glfs_ftruncate() passes two additional args */
3929 return glfs_ftruncate(NULL, 0, NULL, NULL);
3932 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
3933 glusterfs_ftruncate_has_stat="yes"
3935 cat > $TMPC << EOF
3936 #include <glusterfs/api/glfs.h>
3938 /* new glfs_io_cbk() passes two additional glfs_stat structs */
3939 static void
3940 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
3944 main(void)
3946 glfs_io_cbk iocb = &glusterfs_iocb;
3947 iocb(NULL, 0 , NULL, NULL, NULL);
3948 return 0;
3951 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
3952 glusterfs_iocb_has_stat="yes"
3954 else
3955 if test "$glusterfs" = "yes" ; then
3956 feature_not_found "GlusterFS backend support" \
3957 "Install glusterfs-api devel >= 3"
3959 glusterfs="no"
3963 # Check for inotify functions when we are building linux-user
3964 # emulator. This is done because older glibc versions don't
3965 # have syscall stubs for these implemented. In that case we
3966 # don't provide them even if kernel supports them.
3968 inotify=no
3969 cat > $TMPC << EOF
3970 #include <sys/inotify.h>
3973 main(void)
3975 /* try to start inotify */
3976 return inotify_init();
3979 if compile_prog "" "" ; then
3980 inotify=yes
3983 inotify1=no
3984 cat > $TMPC << EOF
3985 #include <sys/inotify.h>
3988 main(void)
3990 /* try to start inotify */
3991 return inotify_init1(0);
3994 if compile_prog "" "" ; then
3995 inotify1=yes
3998 # check if pipe2 is there
3999 pipe2=no
4000 cat > $TMPC << EOF
4001 #include <unistd.h>
4002 #include <fcntl.h>
4004 int main(void)
4006 int pipefd[2];
4007 return pipe2(pipefd, O_CLOEXEC);
4010 if compile_prog "" "" ; then
4011 pipe2=yes
4014 # check if accept4 is there
4015 accept4=no
4016 cat > $TMPC << EOF
4017 #include <sys/socket.h>
4018 #include <stddef.h>
4020 int main(void)
4022 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4023 return 0;
4026 if compile_prog "" "" ; then
4027 accept4=yes
4030 # check if tee/splice is there. vmsplice was added same time.
4031 splice=no
4032 cat > $TMPC << EOF
4033 #include <unistd.h>
4034 #include <fcntl.h>
4035 #include <limits.h>
4037 int main(void)
4039 int len, fd = 0;
4040 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4041 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4042 return 0;
4045 if compile_prog "" "" ; then
4046 splice=yes
4049 ##########################################
4050 # libnuma probe
4052 if test "$numa" != "no" ; then
4053 cat > $TMPC << EOF
4054 #include <numa.h>
4055 int main(void) { return numa_available(); }
4058 if compile_prog "" "-lnuma" ; then
4059 numa=yes
4060 numa_libs="-lnuma"
4061 else
4062 if test "$numa" = "yes" ; then
4063 feature_not_found "numa" "install numactl devel"
4065 numa=no
4069 malloc=system
4070 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4071 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4072 exit 1
4073 elif test "$tcmalloc" = "yes" ; then
4074 malloc=tcmalloc
4075 elif test "$jemalloc" = "yes" ; then
4076 malloc=jemalloc
4079 ##########################################
4080 # signalfd probe
4081 signalfd="no"
4082 cat > $TMPC << EOF
4083 #include <unistd.h>
4084 #include <sys/syscall.h>
4085 #include <signal.h>
4086 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4089 if compile_prog "" "" ; then
4090 signalfd=yes
4093 # check if optreset global is declared by <getopt.h>
4094 optreset="no"
4095 cat > $TMPC << EOF
4096 #include <getopt.h>
4097 int main(void) { return optreset; }
4100 if compile_prog "" "" ; then
4101 optreset=yes
4104 # check if eventfd is supported
4105 eventfd=no
4106 cat > $TMPC << EOF
4107 #include <sys/eventfd.h>
4109 int main(void)
4111 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4114 if compile_prog "" "" ; then
4115 eventfd=yes
4118 # check if memfd is supported
4119 memfd=no
4120 cat > $TMPC << EOF
4121 #include <sys/mman.h>
4123 int main(void)
4125 return memfd_create("foo", MFD_ALLOW_SEALING);
4128 if compile_prog "" "" ; then
4129 memfd=yes
4132 # check for usbfs
4133 have_usbfs=no
4134 if test "$linux_user" = "yes"; then
4135 cat > $TMPC << EOF
4136 #include <linux/usbdevice_fs.h>
4138 #ifndef USBDEVFS_GET_CAPABILITIES
4139 #error "USBDEVFS_GET_CAPABILITIES undefined"
4140 #endif
4142 #ifndef USBDEVFS_DISCONNECT_CLAIM
4143 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4144 #endif
4146 int main(void)
4148 return 0;
4151 if compile_prog "" ""; then
4152 have_usbfs=yes
4156 # check for fallocate
4157 fallocate=no
4158 cat > $TMPC << EOF
4159 #include <fcntl.h>
4161 int main(void)
4163 fallocate(0, 0, 0, 0);
4164 return 0;
4167 if compile_prog "" "" ; then
4168 fallocate=yes
4171 # check for fallocate hole punching
4172 fallocate_punch_hole=no
4173 cat > $TMPC << EOF
4174 #include <fcntl.h>
4175 #include <linux/falloc.h>
4177 int main(void)
4179 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4180 return 0;
4183 if compile_prog "" "" ; then
4184 fallocate_punch_hole=yes
4187 # check that fallocate supports range zeroing inside the file
4188 fallocate_zero_range=no
4189 cat > $TMPC << EOF
4190 #include <fcntl.h>
4191 #include <linux/falloc.h>
4193 int main(void)
4195 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4196 return 0;
4199 if compile_prog "" "" ; then
4200 fallocate_zero_range=yes
4203 # check for posix_fallocate
4204 posix_fallocate=no
4205 cat > $TMPC << EOF
4206 #include <fcntl.h>
4208 int main(void)
4210 posix_fallocate(0, 0, 0);
4211 return 0;
4214 if compile_prog "" "" ; then
4215 posix_fallocate=yes
4218 # check for sync_file_range
4219 sync_file_range=no
4220 cat > $TMPC << EOF
4221 #include <fcntl.h>
4223 int main(void)
4225 sync_file_range(0, 0, 0, 0);
4226 return 0;
4229 if compile_prog "" "" ; then
4230 sync_file_range=yes
4233 # check for linux/fiemap.h and FS_IOC_FIEMAP
4234 fiemap=no
4235 cat > $TMPC << EOF
4236 #include <sys/ioctl.h>
4237 #include <linux/fs.h>
4238 #include <linux/fiemap.h>
4240 int main(void)
4242 ioctl(0, FS_IOC_FIEMAP, 0);
4243 return 0;
4246 if compile_prog "" "" ; then
4247 fiemap=yes
4250 # check for dup3
4251 dup3=no
4252 cat > $TMPC << EOF
4253 #include <unistd.h>
4255 int main(void)
4257 dup3(0, 0, 0);
4258 return 0;
4261 if compile_prog "" "" ; then
4262 dup3=yes
4265 # check for ppoll support
4266 ppoll=no
4267 cat > $TMPC << EOF
4268 #include <poll.h>
4270 int main(void)
4272 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4273 ppoll(&pfd, 1, 0, 0);
4274 return 0;
4277 if compile_prog "" "" ; then
4278 ppoll=yes
4281 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4282 prctl_pr_set_timerslack=no
4283 cat > $TMPC << EOF
4284 #include <sys/prctl.h>
4286 int main(void)
4288 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4289 return 0;
4292 if compile_prog "" "" ; then
4293 prctl_pr_set_timerslack=yes
4296 # check for epoll support
4297 epoll=no
4298 cat > $TMPC << EOF
4299 #include <sys/epoll.h>
4301 int main(void)
4303 epoll_create(0);
4304 return 0;
4307 if compile_prog "" "" ; then
4308 epoll=yes
4311 # epoll_create1 is a later addition
4312 # so we must check separately for its presence
4313 epoll_create1=no
4314 cat > $TMPC << EOF
4315 #include <sys/epoll.h>
4317 int main(void)
4319 /* Note that we use epoll_create1 as a value, not as
4320 * a function being called. This is necessary so that on
4321 * old SPARC glibc versions where the function was present in
4322 * the library but not declared in the header file we will
4323 * fail the configure check. (Otherwise we will get a compiler
4324 * warning but not an error, and will proceed to fail the
4325 * qemu compile where we compile with -Werror.)
4327 return (int)(uintptr_t)&epoll_create1;
4330 if compile_prog "" "" ; then
4331 epoll_create1=yes
4334 # check for sendfile support
4335 sendfile=no
4336 cat > $TMPC << EOF
4337 #include <sys/sendfile.h>
4339 int main(void)
4341 return sendfile(0, 0, 0, 0);
4344 if compile_prog "" "" ; then
4345 sendfile=yes
4348 # check for timerfd support (glibc 2.8 and newer)
4349 timerfd=no
4350 cat > $TMPC << EOF
4351 #include <sys/timerfd.h>
4353 int main(void)
4355 return(timerfd_create(CLOCK_REALTIME, 0));
4358 if compile_prog "" "" ; then
4359 timerfd=yes
4362 # check for setns and unshare support
4363 setns=no
4364 cat > $TMPC << EOF
4365 #include <sched.h>
4367 int main(void)
4369 int ret;
4370 ret = setns(0, 0);
4371 ret = unshare(0);
4372 return ret;
4375 if compile_prog "" "" ; then
4376 setns=yes
4379 # clock_adjtime probe
4380 clock_adjtime=no
4381 cat > $TMPC <<EOF
4382 #include <time.h>
4384 int main(void)
4386 return clock_adjtime(0, 0);
4389 clock_adjtime=no
4390 if compile_prog "" "" ; then
4391 clock_adjtime=yes
4394 # syncfs probe
4395 syncfs=no
4396 cat > $TMPC <<EOF
4397 #include <unistd.h>
4399 int main(void)
4401 return syncfs(0);
4404 syncfs=no
4405 if compile_prog "" "" ; then
4406 syncfs=yes
4409 # Search for bswap_32 function
4410 byteswap_h=no
4411 cat > $TMPC << EOF
4412 #include <byteswap.h>
4413 int main(void) { return bswap_32(0); }
4415 if compile_prog "" "" ; then
4416 byteswap_h=yes
4419 # Search for bswap32 function
4420 bswap_h=no
4421 cat > $TMPC << EOF
4422 #include <sys/endian.h>
4423 #include <sys/types.h>
4424 #include <machine/bswap.h>
4425 int main(void) { return bswap32(0); }
4427 if compile_prog "" "" ; then
4428 bswap_h=yes
4431 ##########################################
4432 # Do we have libiscsi >= 1.9.0
4433 if test "$libiscsi" != "no" ; then
4434 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4435 libiscsi="yes"
4436 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4437 libiscsi_libs=$($pkg_config --libs libiscsi)
4438 else
4439 if test "$libiscsi" = "yes" ; then
4440 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4442 libiscsi="no"
4446 ##########################################
4447 # Do we need librt
4448 # uClibc provides 2 versions of clock_gettime(), one with realtime
4449 # support and one without. This means that the clock_gettime() don't
4450 # need -lrt. We still need it for timer_create() so we check for this
4451 # function in addition.
4452 cat > $TMPC <<EOF
4453 #include <signal.h>
4454 #include <time.h>
4455 int main(void) {
4456 timer_create(CLOCK_REALTIME, NULL, NULL);
4457 return clock_gettime(CLOCK_REALTIME, NULL);
4461 if compile_prog "" "" ; then
4463 # we need pthread for static linking. use previous pthread test result
4464 elif compile_prog "" "$pthread_lib -lrt" ; then
4465 LIBS="$LIBS -lrt"
4468 # Check whether we have openpty() in either libc or libutil
4469 cat > $TMPC << EOF
4470 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4471 int main(void) { return openpty(0, 0, 0, 0, 0); }
4474 have_openpty="no"
4475 if compile_prog "" "" ; then
4476 have_openpty="yes"
4477 else
4478 if compile_prog "" "-lutil" ; then
4479 have_openpty="yes"
4483 ##########################################
4484 # spice probe
4485 if test "$spice" != "no" ; then
4486 cat > $TMPC << EOF
4487 #include <spice.h>
4488 int main(void) { spice_server_new(); return 0; }
4490 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4491 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4492 if $pkg_config --atleast-version=0.12.5 spice-server && \
4493 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4494 compile_prog "$spice_cflags" "$spice_libs" ; then
4495 spice="yes"
4496 else
4497 if test "$spice" = "yes" ; then
4498 feature_not_found "spice" \
4499 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4501 spice="no"
4505 # check for smartcard support
4506 if test "$smartcard" != "no"; then
4507 if $pkg_config --atleast-version=2.5.1 libcacard; then
4508 libcacard_cflags=$($pkg_config --cflags libcacard)
4509 libcacard_libs=$($pkg_config --libs libcacard)
4510 smartcard="yes"
4511 else
4512 if test "$smartcard" = "yes"; then
4513 feature_not_found "smartcard" "Install libcacard devel"
4515 smartcard="no"
4519 # check for libusb
4520 if test "$libusb" != "no" ; then
4521 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4522 libusb="yes"
4523 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4524 libusb_libs=$($pkg_config --libs libusb-1.0)
4525 else
4526 if test "$libusb" = "yes"; then
4527 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4529 libusb="no"
4533 # check for usbredirparser for usb network redirection support
4534 if test "$usb_redir" != "no" ; then
4535 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4536 usb_redir="yes"
4537 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4538 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4539 else
4540 if test "$usb_redir" = "yes"; then
4541 feature_not_found "usb-redir" "Install usbredir devel"
4543 usb_redir="no"
4547 ##########################################
4548 # check if we have VSS SDK headers for win
4550 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4551 test "$vss_win32_sdk" != "no" ; then
4552 case "$vss_win32_sdk" in
4553 "") vss_win32_include="-isystem $source_path" ;;
4554 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4555 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4556 vss_win32_include="-isystem $source_path/.sdk/vss"
4557 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4559 *) vss_win32_include="-isystem $vss_win32_sdk"
4560 esac
4561 cat > $TMPC << EOF
4562 #define __MIDL_user_allocate_free_DEFINED__
4563 #include <inc/win2003/vss.h>
4564 int main(void) { return VSS_CTX_BACKUP; }
4566 if compile_prog "$vss_win32_include" "" ; then
4567 guest_agent_with_vss="yes"
4568 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4569 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4570 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4571 else
4572 if test "$vss_win32_sdk" != "" ; then
4573 echo "ERROR: Please download and install Microsoft VSS SDK:"
4574 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4575 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4576 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4577 echo "ERROR: The headers are extracted in the directory \`inc'."
4578 feature_not_found "VSS support"
4580 guest_agent_with_vss="no"
4584 ##########################################
4585 # lookup Windows platform SDK (if not specified)
4586 # The SDK is needed only to build .tlb (type library) file of guest agent
4587 # VSS provider from the source. It is usually unnecessary because the
4588 # pre-compiled .tlb file is included.
4590 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4591 test "$guest_agent_with_vss" = "yes" ; then
4592 if test -z "$win_sdk"; then
4593 programfiles="$PROGRAMFILES"
4594 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4595 if test -n "$programfiles"; then
4596 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4597 else
4598 feature_not_found "Windows SDK"
4600 elif test "$win_sdk" = "no"; then
4601 win_sdk=""
4605 ##########################################
4606 # check if mingw environment provides a recent ntddscsi.h
4607 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4608 cat > $TMPC << EOF
4609 #include <windows.h>
4610 #include <ntddscsi.h>
4611 int main(void) {
4612 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4613 #error Missing required ioctl definitions
4614 #endif
4615 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4616 return addr.Lun;
4619 if compile_prog "" "" ; then
4620 guest_agent_ntddscsi=yes
4621 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4625 ##########################################
4626 # virgl renderer probe
4628 if test "$virglrenderer" != "no" ; then
4629 cat > $TMPC << EOF
4630 #include <virglrenderer.h>
4631 int main(void) { virgl_renderer_poll(); return 0; }
4633 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4634 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4635 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4636 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4637 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4638 virglrenderer="yes"
4639 else
4640 if test "$virglrenderer" = "yes" ; then
4641 feature_not_found "virglrenderer"
4643 virglrenderer="no"
4647 ##########################################
4648 # capstone
4650 case "$capstone" in
4651 auto | enabled | internal)
4652 # Simpler to always update submodule, even if not needed.
4653 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
4654 git_submodules="${git_submodules} capstone"
4657 esac
4659 ##########################################
4660 # check if we have fdatasync
4662 fdatasync=no
4663 cat > $TMPC << EOF
4664 #include <unistd.h>
4665 int main(void) {
4666 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4667 return fdatasync(0);
4668 #else
4669 #error Not supported
4670 #endif
4673 if compile_prog "" "" ; then
4674 fdatasync=yes
4677 ##########################################
4678 # check if we have madvise
4680 madvise=no
4681 cat > $TMPC << EOF
4682 #include <sys/types.h>
4683 #include <sys/mman.h>
4684 #include <stddef.h>
4685 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4687 if compile_prog "" "" ; then
4688 madvise=yes
4691 ##########################################
4692 # check if we have posix_madvise
4694 posix_madvise=no
4695 cat > $TMPC << EOF
4696 #include <sys/mman.h>
4697 #include <stddef.h>
4698 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4700 if compile_prog "" "" ; then
4701 posix_madvise=yes
4704 ##########################################
4705 # check if we have posix_memalign()
4707 posix_memalign=no
4708 cat > $TMPC << EOF
4709 #include <stdlib.h>
4710 int main(void) {
4711 void *p;
4712 return posix_memalign(&p, 8, 8);
4715 if compile_prog "" "" ; then
4716 posix_memalign=yes
4719 ##########################################
4720 # check if we have posix_syslog
4722 posix_syslog=no
4723 cat > $TMPC << EOF
4724 #include <syslog.h>
4725 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4727 if compile_prog "" "" ; then
4728 posix_syslog=yes
4731 ##########################################
4732 # check if we have sem_timedwait
4734 sem_timedwait=no
4735 cat > $TMPC << EOF
4736 #include <semaphore.h>
4737 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
4739 if compile_prog "" "" ; then
4740 sem_timedwait=yes
4743 ##########################################
4744 # check if we have strchrnul
4746 strchrnul=no
4747 cat > $TMPC << EOF
4748 #include <string.h>
4749 int main(void);
4750 // Use a haystack that the compiler shouldn't be able to constant fold
4751 char *haystack = (char*)&main;
4752 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4754 if compile_prog "" "" ; then
4755 strchrnul=yes
4758 #########################################
4759 # check if we have st_atim
4761 st_atim=no
4762 cat > $TMPC << EOF
4763 #include <sys/stat.h>
4764 #include <stddef.h>
4765 int main(void) { return offsetof(struct stat, st_atim); }
4767 if compile_prog "" "" ; then
4768 st_atim=yes
4771 ##########################################
4772 # check if trace backend exists
4774 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4775 if test "$?" -ne 0 ; then
4776 error_exit "invalid trace backends" \
4777 "Please choose supported trace backends."
4780 ##########################################
4781 # For 'ust' backend, test if ust headers are present
4782 if have_backend "ust"; then
4783 cat > $TMPC << EOF
4784 #include <lttng/tracepoint.h>
4785 int main(void) { return 0; }
4787 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4788 if $pkg_config lttng-ust --exists; then
4789 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4790 else
4791 lttng_ust_libs="-llttng-ust -ldl"
4793 if $pkg_config liburcu-bp --exists; then
4794 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4795 else
4796 urcu_bp_libs="-lurcu-bp"
4798 else
4799 error_exit "Trace backend 'ust' missing lttng-ust header files"
4803 ##########################################
4804 # For 'dtrace' backend, test if 'dtrace' command is present
4805 if have_backend "dtrace"; then
4806 if ! has 'dtrace' ; then
4807 error_exit "dtrace command is not found in PATH $PATH"
4809 trace_backend_stap="no"
4810 if has 'stap' ; then
4811 trace_backend_stap="yes"
4813 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
4814 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
4815 # instead. QEMU --enable-modules depends on this because the SystemTap
4816 # semaphores are linked into the main binary and not the module's shared
4817 # object.
4818 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
4822 ##########################################
4823 # check and set a backend for coroutine
4825 # We prefer ucontext, but it's not always possible. The fallback
4826 # is sigcontext. On Windows the only valid backend is the Windows
4827 # specific one.
4829 ucontext_works=no
4830 if test "$darwin" != "yes"; then
4831 cat > $TMPC << EOF
4832 #include <ucontext.h>
4833 #ifdef __stub_makecontext
4834 #error Ignoring glibc stub makecontext which will always fail
4835 #endif
4836 int main(void) { makecontext(0, 0, 0); return 0; }
4838 if compile_prog "" "" ; then
4839 ucontext_works=yes
4843 if test "$coroutine" = ""; then
4844 if test "$mingw32" = "yes"; then
4845 coroutine=win32
4846 elif test "$ucontext_works" = "yes"; then
4847 coroutine=ucontext
4848 else
4849 coroutine=sigaltstack
4851 else
4852 case $coroutine in
4853 windows)
4854 if test "$mingw32" != "yes"; then
4855 error_exit "'windows' coroutine backend only valid for Windows"
4857 # Unfortunately the user visible backend name doesn't match the
4858 # coroutine-*.c filename for this case, so we have to adjust it here.
4859 coroutine=win32
4861 ucontext)
4862 if test "$ucontext_works" != "yes"; then
4863 feature_not_found "ucontext"
4866 sigaltstack)
4867 if test "$mingw32" = "yes"; then
4868 error_exit "only the 'windows' coroutine backend is valid for Windows"
4872 error_exit "unknown coroutine backend $coroutine"
4874 esac
4877 if test "$coroutine_pool" = ""; then
4878 coroutine_pool=yes
4881 if test "$debug_stack_usage" = "yes"; then
4882 if test "$coroutine_pool" = "yes"; then
4883 echo "WARN: disabling coroutine pool for stack usage debugging"
4884 coroutine_pool=no
4888 ##################################################
4889 # SafeStack
4892 if test "$safe_stack" = "yes"; then
4893 cat > $TMPC << EOF
4894 int main(int argc, char *argv[])
4896 #if ! __has_feature(safe_stack)
4897 #error SafeStack Disabled
4898 #endif
4899 return 0;
4902 flag="-fsanitize=safe-stack"
4903 # Check that safe-stack is supported and enabled.
4904 if compile_prog "-Werror $flag" "$flag"; then
4905 # Flag needed both at compilation and at linking
4906 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4907 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4908 else
4909 error_exit "SafeStack not supported by your compiler"
4911 if test "$coroutine" != "ucontext"; then
4912 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4914 else
4915 cat > $TMPC << EOF
4916 int main(int argc, char *argv[])
4918 #if defined(__has_feature)
4919 #if __has_feature(safe_stack)
4920 #error SafeStack Enabled
4921 #endif
4922 #endif
4923 return 0;
4926 if test "$safe_stack" = "no"; then
4927 # Make sure that safe-stack is disabled
4928 if ! compile_prog "-Werror" ""; then
4929 # SafeStack was already enabled, try to explicitly remove the feature
4930 flag="-fno-sanitize=safe-stack"
4931 if ! compile_prog "-Werror $flag" "$flag"; then
4932 error_exit "Configure cannot disable SafeStack"
4934 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4935 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4937 else # "$safe_stack" = ""
4938 # Set safe_stack to yes or no based on pre-existing flags
4939 if compile_prog "-Werror" ""; then
4940 safe_stack="no"
4941 else
4942 safe_stack="yes"
4943 if test "$coroutine" != "ucontext"; then
4944 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4950 ##########################################
4951 # check if we have open_by_handle_at
4953 open_by_handle_at=no
4954 cat > $TMPC << EOF
4955 #include <fcntl.h>
4956 #if !defined(AT_EMPTY_PATH)
4957 # error missing definition
4958 #else
4959 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4960 #endif
4962 if compile_prog "" "" ; then
4963 open_by_handle_at=yes
4966 ########################################
4967 # check if we have linux/magic.h
4969 linux_magic_h=no
4970 cat > $TMPC << EOF
4971 #include <linux/magic.h>
4972 int main(void) {
4973 return 0;
4976 if compile_prog "" "" ; then
4977 linux_magic_h=yes
4980 ########################################
4981 # check if we have valgrind/valgrind.h
4983 valgrind_h=no
4984 cat > $TMPC << EOF
4985 #include <valgrind/valgrind.h>
4986 int main(void) {
4987 return 0;
4990 if compile_prog "" "" ; then
4991 valgrind_h=yes
4994 ########################################
4995 # check if environ is declared
4997 has_environ=no
4998 cat > $TMPC << EOF
4999 #include <unistd.h>
5000 int main(void) {
5001 environ = 0;
5002 return 0;
5005 if compile_prog "" "" ; then
5006 has_environ=yes
5009 ########################################
5010 # check if cpuid.h is usable.
5012 cat > $TMPC << EOF
5013 #include <cpuid.h>
5014 int main(void) {
5015 unsigned a, b, c, d;
5016 int max = __get_cpuid_max(0, 0);
5018 if (max >= 1) {
5019 __cpuid(1, a, b, c, d);
5022 if (max >= 7) {
5023 __cpuid_count(7, 0, a, b, c, d);
5026 return 0;
5029 if compile_prog "" "" ; then
5030 cpuid_h=yes
5033 ##########################################
5034 # avx2 optimization requirement check
5036 # There is no point enabling this if cpuid.h is not usable,
5037 # since we won't be able to select the new routines.
5039 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5040 cat > $TMPC << EOF
5041 #pragma GCC push_options
5042 #pragma GCC target("avx2")
5043 #include <cpuid.h>
5044 #include <immintrin.h>
5045 static int bar(void *a) {
5046 __m256i x = *(__m256i *)a;
5047 return _mm256_testz_si256(x, x);
5049 int main(int argc, char *argv[]) { return bar(argv[0]); }
5051 if compile_object "" ; then
5052 avx2_opt="yes"
5053 else
5054 avx2_opt="no"
5058 ##########################################
5059 # avx512f optimization requirement check
5061 # There is no point enabling this if cpuid.h is not usable,
5062 # since we won't be able to select the new routines.
5063 # by default, it is turned off.
5064 # if user explicitly want to enable it, check environment
5066 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5067 cat > $TMPC << EOF
5068 #pragma GCC push_options
5069 #pragma GCC target("avx512f")
5070 #include <cpuid.h>
5071 #include <immintrin.h>
5072 static int bar(void *a) {
5073 __m512i x = *(__m512i *)a;
5074 return _mm512_test_epi64_mask(x, x);
5076 int main(int argc, char *argv[])
5078 return bar(argv[0]);
5081 if ! compile_object "" ; then
5082 avx512f_opt="no"
5084 else
5085 avx512f_opt="no"
5088 ########################################
5089 # check if __[u]int128_t is usable.
5091 int128=no
5092 cat > $TMPC << EOF
5093 __int128_t a;
5094 __uint128_t b;
5095 int main (void) {
5096 a = a + b;
5097 b = a * b;
5098 a = a * a;
5099 return 0;
5102 if compile_prog "" "" ; then
5103 int128=yes
5106 #########################################
5107 # See if 128-bit atomic operations are supported.
5109 atomic128=no
5110 if test "$int128" = "yes"; then
5111 cat > $TMPC << EOF
5112 int main(void)
5114 unsigned __int128 x = 0, y = 0;
5115 y = __atomic_load_16(&x, 0);
5116 __atomic_store_16(&x, y, 0);
5117 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5118 return 0;
5121 if compile_prog "" "" ; then
5122 atomic128=yes
5126 cmpxchg128=no
5127 if test "$int128" = yes && test "$atomic128" = no; then
5128 cat > $TMPC << EOF
5129 int main(void)
5131 unsigned __int128 x = 0, y = 0;
5132 __sync_val_compare_and_swap_16(&x, y, x);
5133 return 0;
5136 if compile_prog "" "" ; then
5137 cmpxchg128=yes
5141 #########################################
5142 # See if 64-bit atomic operations are supported.
5143 # Note that without __atomic builtins, we can only
5144 # assume atomic loads/stores max at pointer size.
5146 cat > $TMPC << EOF
5147 #include <stdint.h>
5148 int main(void)
5150 uint64_t x = 0, y = 0;
5151 #ifdef __ATOMIC_RELAXED
5152 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
5153 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
5154 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
5155 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
5156 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
5157 #else
5158 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5159 __sync_lock_test_and_set(&x, y);
5160 __sync_val_compare_and_swap(&x, y, 0);
5161 __sync_fetch_and_add(&x, y);
5162 #endif
5163 return 0;
5166 if compile_prog "" "" ; then
5167 atomic64=yes
5170 #########################################
5171 # See if --dynamic-list is supported by the linker
5172 ld_dynamic_list="no"
5173 if test "$static" = "no" ; then
5174 cat > $TMPTXT <<EOF
5176 foo;
5180 cat > $TMPC <<EOF
5181 #include <stdio.h>
5182 void foo(void);
5184 void foo(void)
5186 printf("foo\n");
5189 int main(void)
5191 foo();
5192 return 0;
5196 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5197 ld_dynamic_list="yes"
5201 #########################################
5202 # See if -exported_symbols_list is supported by the linker
5204 ld_exported_symbols_list="no"
5205 if test "$static" = "no" ; then
5206 cat > $TMPTXT <<EOF
5207 _foo
5210 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5211 ld_exported_symbols_list="yes"
5215 if test "$plugins" = "yes" &&
5216 test "$ld_dynamic_list" = "no" &&
5217 test "$ld_exported_symbols_list" = "no" ; then
5218 error_exit \
5219 "Plugin support requires dynamic linking and specifying a set of symbols " \
5220 "that are exported to plugins. Unfortunately your linker doesn't " \
5221 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5222 "for this purpose. You can't build with --static."
5225 ########################################
5226 # See if __attribute__((alias)) is supported.
5227 # This false for Xcode 9, but has been remedied for Xcode 10.
5228 # Unfortunately, travis uses Xcode 9 by default.
5230 attralias=no
5231 cat > $TMPC << EOF
5232 int x = 1;
5233 extern const int y __attribute__((alias("x")));
5234 int main(void) { return 0; }
5236 if compile_prog "" "" ; then
5237 attralias=yes
5240 ########################################
5241 # check if getauxval is available.
5243 getauxval=no
5244 cat > $TMPC << EOF
5245 #include <sys/auxv.h>
5246 int main(void) {
5247 return getauxval(AT_HWCAP) == 0;
5250 if compile_prog "" "" ; then
5251 getauxval=yes
5254 ########################################
5255 # check if ccache is interfering with
5256 # semantic analysis of macros
5258 unset CCACHE_CPP2
5259 ccache_cpp2=no
5260 cat > $TMPC << EOF
5261 static const int Z = 1;
5262 #define fn() ({ Z; })
5263 #define TAUT(X) ((X) == Z)
5264 #define PAREN(X, Y) (X == Y)
5265 #define ID(X) (X)
5266 int main(int argc, char *argv[])
5268 int x = 0, y = 0;
5269 x = ID(x);
5270 x = fn();
5271 fn();
5272 if (PAREN(x, y)) return 0;
5273 if (TAUT(Z)) return 0;
5274 return 0;
5278 if ! compile_object "-Werror"; then
5279 ccache_cpp2=yes
5282 #################################################
5283 # clang does not support glibc + FORTIFY_SOURCE.
5285 if test "$fortify_source" != "no"; then
5286 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5287 fortify_source="no";
5288 elif test -n "$cxx" && has $cxx &&
5289 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5290 fortify_source="no";
5291 else
5292 fortify_source="yes"
5296 ###############################################
5297 # Check if copy_file_range is provided by glibc
5298 have_copy_file_range=no
5299 cat > $TMPC << EOF
5300 #include <unistd.h>
5301 int main(void) {
5302 copy_file_range(0, NULL, 0, NULL, 0, 0);
5303 return 0;
5306 if compile_prog "" "" ; then
5307 have_copy_file_range=yes
5310 ##########################################
5311 # check if struct fsxattr is available via linux/fs.h
5313 have_fsxattr=no
5314 cat > $TMPC << EOF
5315 #include <linux/fs.h>
5316 struct fsxattr foo;
5317 int main(void) {
5318 return 0;
5321 if compile_prog "" "" ; then
5322 have_fsxattr=yes
5325 ##########################################
5326 # check for usable membarrier system call
5327 if test "$membarrier" = "yes"; then
5328 have_membarrier=no
5329 if test "$mingw32" = "yes" ; then
5330 have_membarrier=yes
5331 elif test "$linux" = "yes" ; then
5332 cat > $TMPC << EOF
5333 #include <linux/membarrier.h>
5334 #include <sys/syscall.h>
5335 #include <unistd.h>
5336 #include <stdlib.h>
5337 int main(void) {
5338 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5339 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5340 exit(0);
5343 if compile_prog "" "" ; then
5344 have_membarrier=yes
5347 if test "$have_membarrier" = "no"; then
5348 feature_not_found "membarrier" "membarrier system call not available"
5350 else
5351 # Do not enable it by default even for Mingw32, because it doesn't
5352 # work on Wine.
5353 membarrier=no
5356 ##########################################
5357 # check if rtnetlink.h exists and is useful
5358 have_rtnetlink=no
5359 cat > $TMPC << EOF
5360 #include <linux/rtnetlink.h>
5361 int main(void) {
5362 return IFLA_PROTO_DOWN;
5365 if compile_prog "" "" ; then
5366 have_rtnetlink=yes
5369 ##########################################
5370 # check for usable AF_VSOCK environment
5371 have_af_vsock=no
5372 cat > $TMPC << EOF
5373 #include <errno.h>
5374 #include <sys/types.h>
5375 #include <sys/socket.h>
5376 #if !defined(AF_VSOCK)
5377 # error missing AF_VSOCK flag
5378 #endif
5379 #include <linux/vm_sockets.h>
5380 int main(void) {
5381 int sock, ret;
5382 struct sockaddr_vm svm;
5383 socklen_t len = sizeof(svm);
5384 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5385 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5386 if ((ret == -1) && (errno == ENOTCONN)) {
5387 return 0;
5389 return -1;
5392 if compile_prog "" "" ; then
5393 have_af_vsock=yes
5396 ##########################################
5397 # check for usable AF_ALG environment
5398 have_afalg=no
5399 cat > $TMPC << EOF
5400 #include <errno.h>
5401 #include <sys/types.h>
5402 #include <sys/socket.h>
5403 #include <linux/if_alg.h>
5404 int main(void) {
5405 int sock;
5406 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5407 return sock;
5410 if compile_prog "" "" ; then
5411 have_afalg=yes
5413 if test "$crypto_afalg" = "yes"
5414 then
5415 if test "$have_afalg" != "yes"
5416 then
5417 error_exit "AF_ALG requested but could not be detected"
5422 #################################################
5423 # check for sysmacros.h
5425 have_sysmacros=no
5426 cat > $TMPC << EOF
5427 #include <sys/sysmacros.h>
5428 int main(void) {
5429 return makedev(0, 0);
5432 if compile_prog "" "" ; then
5433 have_sysmacros=yes
5436 ##########################################
5437 # check for _Static_assert()
5439 have_static_assert=no
5440 cat > $TMPC << EOF
5441 _Static_assert(1, "success");
5442 int main(void) {
5443 return 0;
5446 if compile_prog "" "" ; then
5447 have_static_assert=yes
5450 ##########################################
5451 # check for utmpx.h, it is missing e.g. on OpenBSD
5453 have_utmpx=no
5454 cat > $TMPC << EOF
5455 #include <utmpx.h>
5456 struct utmpx user_info;
5457 int main(void) {
5458 return 0;
5461 if compile_prog "" "" ; then
5462 have_utmpx=yes
5465 ##########################################
5466 # check for getrandom()
5468 have_getrandom=no
5469 cat > $TMPC << EOF
5470 #include <sys/random.h>
5471 int main(void) {
5472 return getrandom(0, 0, GRND_NONBLOCK);
5475 if compile_prog "" "" ; then
5476 have_getrandom=yes
5479 ##########################################
5480 # checks for sanitizers
5482 have_asan=no
5483 have_ubsan=no
5484 have_asan_iface_h=no
5485 have_asan_iface_fiber=no
5487 if test "$sanitizers" = "yes" ; then
5488 write_c_skeleton
5489 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5490 have_asan=yes
5493 # we could use a simple skeleton for flags checks, but this also
5494 # detect the static linking issue of ubsan, see also:
5495 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5496 cat > $TMPC << EOF
5497 #include <stdlib.h>
5498 int main(void) {
5499 void *tmp = malloc(10);
5500 if (tmp != NULL) {
5501 return *(int *)(tmp + 2);
5503 return 1;
5506 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5507 have_ubsan=yes
5510 if check_include "sanitizer/asan_interface.h" ; then
5511 have_asan_iface_h=yes
5514 cat > $TMPC << EOF
5515 #include <sanitizer/asan_interface.h>
5516 int main(void) {
5517 __sanitizer_start_switch_fiber(0, 0, 0);
5518 return 0;
5521 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5522 have_asan_iface_fiber=yes
5526 ##########################################
5527 # checks for fuzzer
5528 if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
5529 write_c_fuzzer_skeleton
5530 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
5531 have_fuzzer=yes
5532 else
5533 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
5534 exit 1
5538 # Thread sanitizer is, for now, much noisier than the other sanitizers;
5539 # keep it separate until that is not the case.
5540 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
5541 error_exit "TSAN is not supported with other sanitiziers."
5543 have_tsan=no
5544 have_tsan_iface_fiber=no
5545 if test "$tsan" = "yes" ; then
5546 write_c_skeleton
5547 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5548 have_tsan=yes
5550 cat > $TMPC << EOF
5551 #include <sanitizer/tsan_interface.h>
5552 int main(void) {
5553 __tsan_create_fiber(0);
5554 return 0;
5557 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5558 have_tsan_iface_fiber=yes
5562 ##########################################
5563 # check for libpmem
5565 if test "$libpmem" != "no"; then
5566 if $pkg_config --exists "libpmem"; then
5567 libpmem="yes"
5568 libpmem_libs=$($pkg_config --libs libpmem)
5569 libpmem_cflags=$($pkg_config --cflags libpmem)
5570 else
5571 if test "$libpmem" = "yes" ; then
5572 feature_not_found "libpmem" "Install nvml or pmdk"
5574 libpmem="no"
5578 ##########################################
5579 # check for libdaxctl
5581 if test "$libdaxctl" != "no"; then
5582 if $pkg_config --atleast-version=57 "libdaxctl"; then
5583 libdaxctl="yes"
5584 libdaxctl_libs=$($pkg_config --libs libdaxctl)
5585 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
5586 else
5587 if test "$libdaxctl" = "yes" ; then
5588 feature_not_found "libdaxctl" "Install libdaxctl"
5590 libdaxctl="no"
5594 ##########################################
5595 # check for slirp
5597 case "$slirp" in
5598 auto | enabled | internal)
5599 # Simpler to always update submodule, even if not needed.
5600 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5601 git_submodules="${git_submodules} slirp"
5604 esac
5606 ##########################################
5607 # check for usable __NR_keyctl syscall
5609 if test "$linux" = "yes" ; then
5611 have_keyring=no
5612 cat > $TMPC << EOF
5613 #include <errno.h>
5614 #include <asm/unistd.h>
5615 #include <linux/keyctl.h>
5616 #include <unistd.h>
5617 int main(void) {
5618 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
5621 if compile_prog "" "" ; then
5622 have_keyring=yes
5625 if test "$secret_keyring" != "no"
5626 then
5627 if test "$have_keyring" = "yes"
5628 then
5629 secret_keyring=yes
5630 else
5631 if test "$secret_keyring" = "yes"
5632 then
5633 error_exit "syscall __NR_keyctl requested, \
5634 but not implemented on your system"
5635 else
5636 secret_keyring=no
5641 ##########################################
5642 # End of CC checks
5643 # After here, no more $cc or $ld runs
5645 write_c_skeleton
5647 if test "$gcov" = "yes" ; then
5649 elif test "$fortify_source" = "yes" ; then
5650 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5651 debug=no
5654 case "$ARCH" in
5655 alpha)
5656 # Ensure there's only a single GP
5657 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
5659 esac
5661 if test "$gprof" = "yes" ; then
5662 QEMU_CFLAGS="-p $QEMU_CFLAGS"
5663 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
5666 if test "$have_asan" = "yes"; then
5667 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
5668 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
5669 if test "$have_asan_iface_h" = "no" ; then
5670 echo "ASAN build enabled, but ASAN header missing." \
5671 "Without code annotation, the report may be inferior."
5672 elif test "$have_asan_iface_fiber" = "no" ; then
5673 echo "ASAN build enabled, but ASAN header is too old." \
5674 "Without code annotation, the report may be inferior."
5677 if test "$have_tsan" = "yes" ; then
5678 if test "$have_tsan_iface_fiber" = "yes" ; then
5679 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
5680 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
5681 else
5682 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
5684 elif test "$tsan" = "yes" ; then
5685 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
5687 if test "$have_ubsan" = "yes"; then
5688 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
5689 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
5692 ##########################################
5693 # Do we have libnfs
5694 if test "$libnfs" != "no" ; then
5695 if $pkg_config --atleast-version=1.9.3 libnfs; then
5696 libnfs="yes"
5697 libnfs_libs=$($pkg_config --libs libnfs)
5698 else
5699 if test "$libnfs" = "yes" ; then
5700 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5702 libnfs="no"
5706 ##########################################
5708 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
5709 if test "$solaris" = "no" && test "$tsan" = "no"; then
5710 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5711 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
5715 # Use ASLR, no-SEH and DEP if available
5716 if test "$mingw32" = "yes" ; then
5717 flags="--no-seh --nxcompat"
5719 # Disable ASLR for debug builds to allow debugging with gdb
5720 if test "$debug" = "no" ; then
5721 flags="--dynamicbase $flags"
5724 for flag in $flags; do
5725 if ld_has $flag ; then
5726 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
5728 done
5731 # We can only support ivshmem if we have eventfd
5732 if [ "$eventfd" = "yes" ]; then
5733 ivshmem=yes
5736 if test "$softmmu" = yes ; then
5737 if test "$linux" = yes; then
5738 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
5739 virtfs=yes
5740 else
5741 if test "$virtfs" = yes; then
5742 error_exit "VirtFS requires libcap-ng devel and libattr devel"
5744 virtfs=no
5746 else
5747 if test "$virtfs" = yes; then
5748 error_exit "VirtFS is supported only on Linux"
5750 virtfs=no
5754 # Probe for guest agent support/options
5756 if [ "$guest_agent" != "no" ]; then
5757 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
5758 guest_agent=no
5759 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5760 guest_agent=yes
5761 elif [ "$guest_agent" != yes ]; then
5762 guest_agent=no
5763 else
5764 error_exit "Guest agent is not supported on this platform"
5768 # Guest agent Window MSI package
5770 if test "$guest_agent" != yes; then
5771 if test "$guest_agent_msi" = yes; then
5772 error_exit "MSI guest agent package requires guest agent enabled"
5774 guest_agent_msi=no
5775 elif test "$mingw32" != "yes"; then
5776 if test "$guest_agent_msi" = "yes"; then
5777 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5779 guest_agent_msi=no
5780 elif ! has wixl; then
5781 if test "$guest_agent_msi" = "yes"; then
5782 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5784 guest_agent_msi=no
5785 else
5786 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5787 # disabled explicitly
5788 if test "$guest_agent_msi" != "no"; then
5789 guest_agent_msi=yes
5793 if test "$guest_agent_msi" = "yes"; then
5794 if test "$guest_agent_with_vss" = "yes"; then
5795 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5798 if test "$QEMU_GA_MANUFACTURER" = ""; then
5799 QEMU_GA_MANUFACTURER=QEMU
5802 if test "$QEMU_GA_DISTRO" = ""; then
5803 QEMU_GA_DISTRO=Linux
5806 if test "$QEMU_GA_VERSION" = ""; then
5807 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5810 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5812 case "$cpu" in
5813 x86_64)
5814 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5816 i386)
5817 QEMU_GA_MSI_ARCH="-D Arch=32"
5820 error_exit "CPU $cpu not supported for building installation package"
5822 esac
5825 # Mac OS X ships with a broken assembler
5826 roms=
5827 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5828 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
5829 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
5830 # Different host OS linkers have different ideas about the name of the ELF
5831 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5832 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5833 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5834 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5835 ld_i386_emulation="$emu"
5836 roms="optionrom"
5837 break
5839 done
5842 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
5843 if test "$cpu" = "s390x" ; then
5844 write_c_skeleton
5845 if compile_prog "-march=z900" ""; then
5846 roms="$roms s390-ccw"
5847 # SLOF is required for building the s390-ccw firmware on s390x,
5848 # since it is using the libnet code from SLOF for network booting.
5849 if test -e "${source_path}/.git" ; then
5850 git_submodules="${git_submodules} roms/SLOF"
5855 # Check that the C++ compiler exists and works with the C compiler.
5856 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5857 if has $cxx; then
5858 cat > $TMPC <<EOF
5859 int c_function(void);
5860 int main(void) { return c_function(); }
5863 compile_object
5865 cat > $TMPCXX <<EOF
5866 extern "C" {
5867 int c_function(void);
5869 int c_function(void) { return 42; }
5872 update_cxxflags
5874 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
5875 # C++ compiler $cxx works ok with C compiler $cc
5877 else
5878 echo "C++ compiler $cxx does not work with C compiler $cc"
5879 echo "Disabling C++ specific optional code"
5880 cxx=
5882 else
5883 echo "No C++ compiler available; disabling C++ specific optional code"
5884 cxx=
5887 if test $git_update = 'yes' ; then
5888 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
5891 config_host_mak="config-host.mak"
5893 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5894 echo >> $config_host_mak
5896 echo all: >> $config_host_mak
5897 echo "GIT=$git" >> $config_host_mak
5898 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5899 echo "GIT_UPDATE=$git_update" >> $config_host_mak
5901 echo "ARCH=$ARCH" >> $config_host_mak
5903 if test "$default_devices" = "yes" ; then
5904 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
5905 else
5906 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
5908 if test "$debug_tcg" = "yes" ; then
5909 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5911 if test "$strip_opt" = "yes" ; then
5912 echo "STRIP=${strip}" >> $config_host_mak
5914 if test "$bigendian" = "yes" ; then
5915 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5917 if test "$mingw32" = "yes" ; then
5918 echo "CONFIG_WIN32=y" >> $config_host_mak
5919 rc_version=$(cat $source_path/VERSION)
5920 version_major=${rc_version%%.*}
5921 rc_version=${rc_version#*.}
5922 version_minor=${rc_version%%.*}
5923 rc_version=${rc_version#*.}
5924 version_subminor=${rc_version%%.*}
5925 version_micro=0
5926 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5927 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5928 if test "$guest_agent_with_vss" = "yes" ; then
5929 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5930 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5931 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5933 if test "$guest_agent_ntddscsi" = "yes" ; then
5934 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
5936 if test "$guest_agent_msi" = "yes"; then
5937 echo "CONFIG_QGA_MSI=y" >> $config_host_mak
5938 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5939 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5940 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5941 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5942 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5943 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5945 else
5946 echo "CONFIG_POSIX=y" >> $config_host_mak
5949 if test "$linux" = "yes" ; then
5950 echo "CONFIG_LINUX=y" >> $config_host_mak
5953 if test "$darwin" = "yes" ; then
5954 echo "CONFIG_DARWIN=y" >> $config_host_mak
5957 if test "$solaris" = "yes" ; then
5958 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5960 if test "$haiku" = "yes" ; then
5961 echo "CONFIG_HAIKU=y" >> $config_host_mak
5963 if test "$static" = "yes" ; then
5964 echo "CONFIG_STATIC=y" >> $config_host_mak
5966 if test "$profiler" = "yes" ; then
5967 echo "CONFIG_PROFILER=y" >> $config_host_mak
5969 if test "$want_tools" = "yes" ; then
5970 echo "CONFIG_TOOLS=y" >> $config_host_mak
5972 if test "$guest_agent" = "yes" ; then
5973 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
5975 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5976 if test "$vde" = "yes" ; then
5977 echo "CONFIG_VDE=y" >> $config_host_mak
5978 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5980 if test "$netmap" = "yes" ; then
5981 echo "CONFIG_NETMAP=y" >> $config_host_mak
5983 if test "$l2tpv3" = "yes" ; then
5984 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5986 if test "$gprof" = "yes" ; then
5987 echo "CONFIG_GPROF=y" >> $config_host_mak
5989 if test "$cap_ng" = "yes" ; then
5990 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
5991 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
5993 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5994 for drv in $audio_drv_list; do
5995 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5996 echo "$def=y" >> $config_host_mak
5997 done
5998 if test "$alsa" = "yes" ; then
5999 echo "CONFIG_ALSA=y" >> $config_host_mak
6001 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6002 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
6003 if test "$libpulse" = "yes" ; then
6004 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
6006 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6007 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
6008 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6009 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6010 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6011 if test "$libjack" = "yes" ; then
6012 echo "CONFIG_LIBJACK=y" >> $config_host_mak
6014 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
6015 if test "$audio_win_int" = "yes" ; then
6016 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6018 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6019 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6020 if test "$xfs" = "yes" ; then
6021 echo "CONFIG_XFS=y" >> $config_host_mak
6023 qemu_version=$(head $source_path/VERSION)
6024 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6025 echo "SRC_PATH=$source_path" >> $config_host_mak
6026 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6027 if test "$modules" = "yes"; then
6028 # $shacmd can generate a hash started with digit, which the compiler doesn't
6029 # like as an symbol. So prefix it with an underscore
6030 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6031 echo "CONFIG_MODULES=y" >> $config_host_mak
6033 if test "$module_upgrades" = "yes"; then
6034 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6036 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6037 echo "CONFIG_X11=y" >> $config_host_mak
6038 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6039 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6041 if test "$pipe2" = "yes" ; then
6042 echo "CONFIG_PIPE2=y" >> $config_host_mak
6044 if test "$accept4" = "yes" ; then
6045 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6047 if test "$splice" = "yes" ; then
6048 echo "CONFIG_SPLICE=y" >> $config_host_mak
6050 if test "$eventfd" = "yes" ; then
6051 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6053 if test "$memfd" = "yes" ; then
6054 echo "CONFIG_MEMFD=y" >> $config_host_mak
6056 if test "$have_usbfs" = "yes" ; then
6057 echo "CONFIG_USBFS=y" >> $config_host_mak
6059 if test "$fallocate" = "yes" ; then
6060 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6062 if test "$fallocate_punch_hole" = "yes" ; then
6063 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6065 if test "$fallocate_zero_range" = "yes" ; then
6066 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6068 if test "$posix_fallocate" = "yes" ; then
6069 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6071 if test "$sync_file_range" = "yes" ; then
6072 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6074 if test "$fiemap" = "yes" ; then
6075 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6077 if test "$dup3" = "yes" ; then
6078 echo "CONFIG_DUP3=y" >> $config_host_mak
6080 if test "$ppoll" = "yes" ; then
6081 echo "CONFIG_PPOLL=y" >> $config_host_mak
6083 if test "$prctl_pr_set_timerslack" = "yes" ; then
6084 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6086 if test "$epoll" = "yes" ; then
6087 echo "CONFIG_EPOLL=y" >> $config_host_mak
6089 if test "$epoll_create1" = "yes" ; then
6090 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6092 if test "$sendfile" = "yes" ; then
6093 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6095 if test "$timerfd" = "yes" ; then
6096 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6098 if test "$setns" = "yes" ; then
6099 echo "CONFIG_SETNS=y" >> $config_host_mak
6101 if test "$clock_adjtime" = "yes" ; then
6102 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6104 if test "$syncfs" = "yes" ; then
6105 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6107 if test "$inotify" = "yes" ; then
6108 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6110 if test "$inotify1" = "yes" ; then
6111 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6113 if test "$sem_timedwait" = "yes" ; then
6114 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6116 if test "$strchrnul" = "yes" ; then
6117 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6119 if test "$st_atim" = "yes" ; then
6120 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
6122 if test "$byteswap_h" = "yes" ; then
6123 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6125 if test "$bswap_h" = "yes" ; then
6126 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6128 if test "$curl" = "yes" ; then
6129 echo "CONFIG_CURL=y" >> $config_host_mak
6130 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6131 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6133 if test "$brlapi" = "yes" ; then
6134 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6135 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6137 if test "$gtk" = "yes" ; then
6138 echo "CONFIG_GTK=y" >> $config_host_mak
6139 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6140 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6141 if test "$gtk_gl" = "yes" ; then
6142 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6145 if test "$gio" = "yes" ; then
6146 echo "CONFIG_GIO=y" >> $config_host_mak
6147 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6148 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6149 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
6151 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6152 if test "$gnutls" = "yes" ; then
6153 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6154 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
6155 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
6157 if test "$gcrypt" = "yes" ; then
6158 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6159 if test "$gcrypt_hmac" = "yes" ; then
6160 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6162 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
6163 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
6165 if test "$nettle" = "yes" ; then
6166 echo "CONFIG_NETTLE=y" >> $config_host_mak
6167 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6168 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
6169 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
6171 if test "$qemu_private_xts" = "yes" ; then
6172 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
6174 if test "$tasn1" = "yes" ; then
6175 echo "CONFIG_TASN1=y" >> $config_host_mak
6177 if test "$auth_pam" = "yes" ; then
6178 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6180 if test "$have_broken_size_max" = "yes" ; then
6181 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6183 if test "$have_openpty" = "yes" ; then
6184 echo "HAVE_OPENPTY=y" >> $config_host_mak
6187 # Work around a system header bug with some kernel/XFS header
6188 # versions where they both try to define 'struct fsxattr':
6189 # xfs headers will not try to redefine structs from linux headers
6190 # if this macro is set.
6191 if test "$have_fsxattr" = "yes" ; then
6192 echo "HAVE_FSXATTR=y" >> $config_host_mak
6194 if test "$have_copy_file_range" = "yes" ; then
6195 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6197 if test "$vte" = "yes" ; then
6198 echo "CONFIG_VTE=y" >> $config_host_mak
6199 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6200 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6202 if test "$virglrenderer" = "yes" ; then
6203 echo "CONFIG_VIRGL=y" >> $config_host_mak
6204 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6205 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6207 if test "$xen" = "enabled" ; then
6208 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6209 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6210 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
6211 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
6213 if test "$linux_aio" = "yes" ; then
6214 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6216 if test "$linux_io_uring" = "yes" ; then
6217 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
6218 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
6219 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
6221 if test "$attr" = "yes" ; then
6222 echo "CONFIG_ATTR=y" >> $config_host_mak
6223 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
6225 if test "$libattr" = "yes" ; then
6226 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6228 if test "$virtfs" = "yes" ; then
6229 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6231 if test "$vhost_scsi" = "yes" ; then
6232 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6234 if test "$vhost_net" = "yes" ; then
6235 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6237 if test "$vhost_net_user" = "yes" ; then
6238 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
6240 if test "$vhost_net_vdpa" = "yes" ; then
6241 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
6243 if test "$vhost_crypto" = "yes" ; then
6244 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6246 if test "$vhost_vsock" = "yes" ; then
6247 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6248 if test "$vhost_user" = "yes" ; then
6249 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
6252 if test "$vhost_kernel" = "yes" ; then
6253 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6255 if test "$vhost_user" = "yes" ; then
6256 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6258 if test "$vhost_vdpa" = "yes" ; then
6259 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
6261 if test "$vhost_user_fs" = "yes" ; then
6262 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
6264 if test "$iovec" = "yes" ; then
6265 echo "CONFIG_IOVEC=y" >> $config_host_mak
6267 if test "$preadv" = "yes" ; then
6268 echo "CONFIG_PREADV=y" >> $config_host_mak
6270 if test "$membarrier" = "yes" ; then
6271 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6273 if test "$signalfd" = "yes" ; then
6274 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6276 if test "$optreset" = "yes" ; then
6277 echo "HAVE_OPTRESET=y" >> $config_host_mak
6279 if test "$tcg" = "enabled"; then
6280 if test "$tcg_interpreter" = "yes" ; then
6281 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6284 if test "$fdatasync" = "yes" ; then
6285 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6287 if test "$madvise" = "yes" ; then
6288 echo "CONFIG_MADVISE=y" >> $config_host_mak
6290 if test "$posix_madvise" = "yes" ; then
6291 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6293 if test "$posix_memalign" = "yes" ; then
6294 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6296 if test "$spice" = "yes" ; then
6297 echo "CONFIG_SPICE=y" >> $config_host_mak
6298 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
6299 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
6302 if test "$smartcard" = "yes" ; then
6303 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6304 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6305 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6308 if test "$libusb" = "yes" ; then
6309 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6310 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6311 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6314 if test "$usb_redir" = "yes" ; then
6315 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6316 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6317 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6320 if test "$opengl" = "yes" ; then
6321 echo "CONFIG_OPENGL=y" >> $config_host_mak
6322 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
6323 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6324 if test "$opengl_dmabuf" = "yes" ; then
6325 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6329 if test "$gbm" = "yes" ; then
6330 echo "CONFIG_GBM=y" >> $config_host_mak
6331 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6332 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6336 if test "$avx2_opt" = "yes" ; then
6337 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6340 if test "$avx512f_opt" = "yes" ; then
6341 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
6344 if test "$lzo" = "yes" ; then
6345 echo "CONFIG_LZO=y" >> $config_host_mak
6346 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
6349 if test "$snappy" = "yes" ; then
6350 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6351 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
6354 if test "$bzip2" = "yes" ; then
6355 echo "CONFIG_BZIP2=y" >> $config_host_mak
6356 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6359 if test "$lzfse" = "yes" ; then
6360 echo "CONFIG_LZFSE=y" >> $config_host_mak
6361 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6364 if test "$zstd" = "yes" ; then
6365 echo "CONFIG_ZSTD=y" >> $config_host_mak
6366 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
6367 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
6370 if test "$libiscsi" = "yes" ; then
6371 echo "CONFIG_LIBISCSI=y" >> $config_host_mak
6372 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6373 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6376 if test "$libnfs" = "yes" ; then
6377 echo "CONFIG_LIBNFS=y" >> $config_host_mak
6378 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6381 if test "$seccomp" = "yes"; then
6382 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6383 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6384 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6387 # XXX: suppress that
6388 if [ "$bsd" = "yes" ] ; then
6389 echo "CONFIG_BSD=y" >> $config_host_mak
6392 if test "$qom_cast_debug" = "yes" ; then
6393 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6395 if test "$rbd" = "yes" ; then
6396 echo "CONFIG_RBD=y" >> $config_host_mak
6397 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6400 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6401 if test "$coroutine_pool" = "yes" ; then
6402 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6403 else
6404 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6407 if test "$debug_stack_usage" = "yes" ; then
6408 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6411 if test "$crypto_afalg" = "yes" ; then
6412 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6415 if test "$open_by_handle_at" = "yes" ; then
6416 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6419 if test "$linux_magic_h" = "yes" ; then
6420 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6423 if test "$valgrind_h" = "yes" ; then
6424 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6427 if test "$have_asan_iface_fiber" = "yes" ; then
6428 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6431 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
6432 echo "CONFIG_TSAN=y" >> $config_host_mak
6435 if test "$has_environ" = "yes" ; then
6436 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6439 if test "$cpuid_h" = "yes" ; then
6440 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6443 if test "$int128" = "yes" ; then
6444 echo "CONFIG_INT128=y" >> $config_host_mak
6447 if test "$atomic128" = "yes" ; then
6448 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6451 if test "$cmpxchg128" = "yes" ; then
6452 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6455 if test "$atomic64" = "yes" ; then
6456 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6459 if test "$attralias" = "yes" ; then
6460 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
6463 if test "$getauxval" = "yes" ; then
6464 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6467 if test "$glusterfs" = "yes" ; then
6468 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
6469 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6470 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6473 if test "$glusterfs_xlator_opt" = "yes" ; then
6474 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6477 if test "$glusterfs_discard" = "yes" ; then
6478 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6481 if test "$glusterfs_fallocate" = "yes" ; then
6482 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6485 if test "$glusterfs_zerofill" = "yes" ; then
6486 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6489 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
6490 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
6493 if test "$glusterfs_iocb_has_stat" = "yes" ; then
6494 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
6497 if test "$libssh" = "yes" ; then
6498 echo "CONFIG_LIBSSH=y" >> $config_host_mak
6499 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
6500 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
6503 if test "$live_block_migration" = "yes" ; then
6504 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6507 if test "$tpm" = "yes"; then
6508 echo 'CONFIG_TPM=y' >> $config_host_mak
6511 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6512 if have_backend "nop"; then
6513 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6515 if have_backend "simple"; then
6516 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6517 # Set the appropriate trace file.
6518 trace_file="\"$trace_file-\" FMT_pid"
6520 if have_backend "log"; then
6521 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6523 if have_backend "ust"; then
6524 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6525 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6526 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
6528 if have_backend "dtrace"; then
6529 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6530 if test "$trace_backend_stap" = "yes" ; then
6531 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6534 if have_backend "ftrace"; then
6535 if test "$linux" = "yes" ; then
6536 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6537 else
6538 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6541 if have_backend "syslog"; then
6542 if test "$posix_syslog" = "yes" ; then
6543 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6544 else
6545 feature_not_found "syslog(trace backend)" "syslog not available"
6548 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6550 if test "$rdma" = "yes" ; then
6551 echo "CONFIG_RDMA=y" >> $config_host_mak
6552 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6555 if test "$pvrdma" = "yes" ; then
6556 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6559 if test "$have_rtnetlink" = "yes" ; then
6560 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6563 if test "$libxml2" = "yes" ; then
6564 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6565 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6566 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6569 if test "$replication" = "yes" ; then
6570 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6573 if test "$have_af_vsock" = "yes" ; then
6574 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6577 if test "$have_sysmacros" = "yes" ; then
6578 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6581 if test "$have_static_assert" = "yes" ; then
6582 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6585 if test "$have_utmpx" = "yes" ; then
6586 echo "HAVE_UTMPX=y" >> $config_host_mak
6588 if test "$have_getrandom" = "yes" ; then
6589 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6591 if test "$ivshmem" = "yes" ; then
6592 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6594 if test "$debug_mutex" = "yes" ; then
6595 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6598 # Hold two types of flag:
6599 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6600 # a thread we have a handle to
6601 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
6602 # platform
6603 if test "$pthread_setname_np_w_tid" = "yes" ; then
6604 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6605 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6606 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6607 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6608 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
6611 if test "$libpmem" = "yes" ; then
6612 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6613 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
6614 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
6617 if test "$libdaxctl" = "yes" ; then
6618 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
6619 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
6622 if test "$bochs" = "yes" ; then
6623 echo "CONFIG_BOCHS=y" >> $config_host_mak
6625 if test "$cloop" = "yes" ; then
6626 echo "CONFIG_CLOOP=y" >> $config_host_mak
6628 if test "$dmg" = "yes" ; then
6629 echo "CONFIG_DMG=y" >> $config_host_mak
6631 if test "$qcow1" = "yes" ; then
6632 echo "CONFIG_QCOW1=y" >> $config_host_mak
6634 if test "$vdi" = "yes" ; then
6635 echo "CONFIG_VDI=y" >> $config_host_mak
6637 if test "$vvfat" = "yes" ; then
6638 echo "CONFIG_VVFAT=y" >> $config_host_mak
6640 if test "$qed" = "yes" ; then
6641 echo "CONFIG_QED=y" >> $config_host_mak
6643 if test "$parallels" = "yes" ; then
6644 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6646 if test "$sheepdog" = "yes" ; then
6647 add_to deprecated_features "sheepdog"
6648 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6650 if test "$have_mlockall" = "yes" ; then
6651 echo "HAVE_MLOCKALL=y" >> $config_host_mak
6653 if test "$fuzzing" = "yes" ; then
6654 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
6655 # needed CFLAGS have already been provided
6656 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
6657 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
6658 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
6659 else
6660 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
6664 if test "$plugins" = "yes" ; then
6665 echo "CONFIG_PLUGIN=y" >> $config_host_mak
6666 # Copy the export object list to the build dir
6667 if test "$ld_dynamic_list" = "yes" ; then
6668 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
6669 ld_symbols=qemu-plugins-ld.symbols
6670 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
6671 elif test "$ld_exported_symbols_list" = "yes" ; then
6672 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
6673 ld64_symbols=qemu-plugins-ld64.symbols
6674 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
6675 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
6676 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
6677 else
6678 error_exit \
6679 "If \$plugins=yes, either \$ld_dynamic_list or " \
6680 "\$ld_exported_symbols_list should have been set to 'yes'."
6684 if test -n "$gdb_bin" ; then
6685 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
6688 if test "$secret_keyring" = "yes" ; then
6689 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
6692 echo "ROMS=$roms" >> $config_host_mak
6693 echo "MAKE=$make" >> $config_host_mak
6694 echo "PYTHON=$python" >> $config_host_mak
6695 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
6696 echo "MESON=$meson" >> $config_host_mak
6697 echo "NINJA=$ninja" >> $config_host_mak
6698 echo "CC=$cc" >> $config_host_mak
6699 if $iasl -h > /dev/null 2>&1; then
6700 echo "CONFIG_IASL=$iasl" >> $config_host_mak
6702 echo "CXX=$cxx" >> $config_host_mak
6703 echo "OBJCC=$objcc" >> $config_host_mak
6704 echo "AR=$ar" >> $config_host_mak
6705 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6706 echo "AS=$as" >> $config_host_mak
6707 echo "CCAS=$ccas" >> $config_host_mak
6708 echo "CPP=$cpp" >> $config_host_mak
6709 echo "OBJCOPY=$objcopy" >> $config_host_mak
6710 echo "LD=$ld" >> $config_host_mak
6711 echo "RANLIB=$ranlib" >> $config_host_mak
6712 echo "NM=$nm" >> $config_host_mak
6713 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
6714 echo "WINDRES=$windres" >> $config_host_mak
6715 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6716 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6717 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6718 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6719 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
6720 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6721 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6722 echo "EXESUF=$EXESUF" >> $config_host_mak
6723 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
6724 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
6725 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6726 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6727 if test "$gcov" = "yes" ; then
6728 echo "CONFIG_GCOV=y" >> $config_host_mak
6731 if test "$fuzzing" != "no"; then
6732 echo "CONFIG_FUZZ=y" >> $config_host_mak
6734 echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
6736 if test "$rng_none" = "yes"; then
6737 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
6740 # use included Linux headers
6741 if test "$linux" = "yes" ; then
6742 mkdir -p linux-headers
6743 case "$cpu" in
6744 i386|x86_64|x32)
6745 linux_arch=x86
6747 ppc|ppc64|ppc64le)
6748 linux_arch=powerpc
6750 s390x)
6751 linux_arch=s390
6753 aarch64)
6754 linux_arch=arm64
6756 mips64)
6757 linux_arch=mips
6760 # For most CPUs the kernel architecture name and QEMU CPU name match.
6761 linux_arch="$cpu"
6763 esac
6764 # For non-KVM architectures we will not have asm headers
6765 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6766 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6770 for target in $target_list; do
6771 target_dir="$target"
6772 target_name=$(echo $target | cut -d '-' -f 1)
6773 mkdir -p $target_dir
6774 case $target in
6775 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
6776 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
6777 esac
6778 done
6780 echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
6781 if test "$default_targets" = "yes"; then
6782 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
6785 if test "$numa" = "yes"; then
6786 echo "CONFIG_NUMA=y" >> $config_host_mak
6787 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
6790 if test "$ccache_cpp2" = "yes"; then
6791 echo "export CCACHE_CPP2=y" >> $config_host_mak
6794 if test "$safe_stack" = "yes"; then
6795 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
6798 # If we're using a separate build tree, set it up now.
6799 # DIRS are directories which we simply mkdir in the build tree;
6800 # LINKS are things to symlink back into the source tree
6801 # (these can be both files and directories).
6802 # Caution: do not add files or directories here using wildcards. This
6803 # will result in problems later if a new file matching the wildcard is
6804 # added to the source tree -- nothing will cause configure to be rerun
6805 # so the build tree will be missing the link back to the new file, and
6806 # tests might fail. Prefer to keep the relevant files in their own
6807 # directory and symlink the directory instead.
6808 # UNLINK is used to remove symlinks from older development versions
6809 # that might get into the way when doing "git update" without doing
6810 # a "make distclean" in between.
6811 DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
6812 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
6813 DIRS="$DIRS docs docs/interop fsdev scsi"
6814 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
6815 DIRS="$DIRS roms/seabios"
6816 DIRS="$DIRS contrib/plugins/"
6817 LINKS="Makefile"
6818 LINKS="$LINKS tests/tcg/lm32/Makefile"
6819 LINKS="$LINKS tests/tcg/Makefile.target"
6820 LINKS="$LINKS pc-bios/optionrom/Makefile"
6821 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
6822 LINKS="$LINKS roms/seabios/Makefile"
6823 LINKS="$LINKS pc-bios/qemu-icon.bmp"
6824 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
6825 LINKS="$LINKS tests/acceptance tests/data"
6826 LINKS="$LINKS tests/qemu-iotests/check"
6827 LINKS="$LINKS python"
6828 LINKS="$LINKS contrib/plugins/Makefile "
6829 UNLINK="pc-bios/keymaps"
6830 for bios_file in \
6831 $source_path/pc-bios/*.bin \
6832 $source_path/pc-bios/*.elf \
6833 $source_path/pc-bios/*.lid \
6834 $source_path/pc-bios/*.rom \
6835 $source_path/pc-bios/*.dtb \
6836 $source_path/pc-bios/*.img \
6837 $source_path/pc-bios/openbios-* \
6838 $source_path/pc-bios/u-boot.* \
6839 $source_path/pc-bios/edk2-*.fd.bz2 \
6840 $source_path/pc-bios/palcode-*
6842 LINKS="$LINKS pc-bios/$(basename $bios_file)"
6843 done
6844 mkdir -p $DIRS
6845 for f in $LINKS ; do
6846 if [ -e "$source_path/$f" ]; then
6847 symlink "$source_path/$f" "$f"
6849 done
6850 for f in $UNLINK ; do
6851 if [ -L "$f" ]; then
6852 rm -f "$f"
6854 done
6856 (for i in $cross_cc_vars; do
6857 export $i
6858 done
6859 export target_list source_path use_containers
6860 $source_path/tests/tcg/configure.sh)
6862 # temporary config to build submodules
6863 for rom in seabios; do
6864 config_mak=roms/$rom/config.mak
6865 echo "# Automatically generated by configure - do not modify" > $config_mak
6866 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6867 echo "AS=$as" >> $config_mak
6868 echo "CCAS=$ccas" >> $config_mak
6869 echo "CC=$cc" >> $config_mak
6870 echo "BCC=bcc" >> $config_mak
6871 echo "CPP=$cpp" >> $config_mak
6872 echo "OBJCOPY=objcopy" >> $config_mak
6873 echo "IASL=$iasl" >> $config_mak
6874 echo "LD=$ld" >> $config_mak
6875 echo "RANLIB=$ranlib" >> $config_mak
6876 done
6878 # set up qemu-iotests in this build directory
6879 iotests_common_env="tests/qemu-iotests/common.env"
6881 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6882 echo >> "$iotests_common_env"
6883 echo "export PYTHON='$python'" >> "$iotests_common_env"
6885 if test "$skip_meson" = no; then
6886 cross="config-meson.cross.new"
6887 meson_quote() {
6888 echo "'$(echo $* | sed "s/ /','/g")'"
6891 echo "# Automatically generated by configure - do not modify" > $cross
6892 echo "[properties]" >> $cross
6893 test -z "$cxx" && echo "link_language = 'c'" >> $cross
6894 echo "[built-in options]" >> $cross
6895 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
6896 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
6897 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6898 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6899 echo "[binaries]" >> $cross
6900 echo "c = [$(meson_quote $cc)]" >> $cross
6901 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
6902 echo "ar = [$(meson_quote $ar)]" >> $cross
6903 echo "nm = [$(meson_quote $nm)]" >> $cross
6904 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
6905 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
6906 if has $sdl2_config; then
6907 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
6909 echo "strip = [$(meson_quote $strip)]" >> $cross
6910 echo "windres = [$(meson_quote $windres)]" >> $cross
6911 if test -n "$cross_prefix"; then
6912 cross_arg="--cross-file config-meson.cross"
6913 echo "[host_machine]" >> $cross
6914 if test "$mingw32" = "yes" ; then
6915 echo "system = 'windows'" >> $cross
6917 if test "$linux" = "yes" ; then
6918 echo "system = 'linux'" >> $cross
6920 case "$ARCH" in
6921 i386|x86_64)
6922 echo "cpu_family = 'x86'" >> $cross
6924 ppc64le)
6925 echo "cpu_family = 'ppc64'" >> $cross
6928 echo "cpu_family = '$ARCH'" >> $cross
6930 esac
6931 echo "cpu = '$cpu'" >> $cross
6932 if test "$bigendian" = "yes" ; then
6933 echo "endian = 'big'" >> $cross
6934 else
6935 echo "endian = 'little'" >> $cross
6937 else
6938 cross_arg="--native-file config-meson.cross"
6940 mv $cross config-meson.cross
6942 rm -rf meson-private meson-info meson-logs
6943 unset staticpic
6944 if ! version_ge "$($meson --version)" 0.56.0; then
6945 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
6947 NINJA=$ninja $meson setup \
6948 --prefix "$prefix" \
6949 --libdir "$libdir" \
6950 --libexecdir "$libexecdir" \
6951 --bindir "$bindir" \
6952 --includedir "$includedir" \
6953 --datadir "$datadir" \
6954 --mandir "$mandir" \
6955 --sysconfdir "$sysconfdir" \
6956 --localedir "$localedir" \
6957 --localstatedir "$local_statedir" \
6958 -Ddocdir="$docdir" \
6959 -Dqemu_firmwarepath="$firmwarepath" \
6960 -Dqemu_suffix="$qemu_suffix" \
6961 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
6962 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
6963 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
6964 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
6965 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
6966 ${staticpic:+-Db_staticpic=$staticpic} \
6967 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
6968 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
6969 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
6970 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
6971 -Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
6972 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
6973 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
6974 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \
6975 -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
6976 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
6977 -Dvhost_user_blk_server=$vhost_user_blk_server \
6978 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek \
6979 $(if test "$default_features" = no; then echo "-Dauto_features=disabled"; fi) \
6980 $cross_arg \
6981 "$PWD" "$source_path"
6983 if test "$?" -ne 0 ; then
6984 error_exit "meson setup failed"
6988 if test -n "${deprecated_features}"; then
6989 echo "Warning, deprecated features enabled."
6990 echo "Please see docs/system/deprecated.rst"
6991 echo " features: ${deprecated_features}"
6994 # Save the configure command line for later reuse.
6995 cat <<EOD >config.status
6996 #!/bin/sh
6997 # Generated by configure.
6998 # Run this file to recreate the current configuration.
6999 # Compiler output produced by configure, useful for debugging
7000 # configure, is in config.log if it exists.
7003 preserve_env() {
7004 envname=$1
7006 eval envval=\$$envname
7008 if test -n "$envval"
7009 then
7010 echo "$envname='$envval'" >> config.status
7011 echo "export $envname" >> config.status
7012 else
7013 echo "unset $envname" >> config.status
7017 # Preserve various env variables that influence what
7018 # features/build target configure will detect
7019 preserve_env AR
7020 preserve_env AS
7021 preserve_env CC
7022 preserve_env CPP
7023 preserve_env CXX
7024 preserve_env INSTALL
7025 preserve_env LD
7026 preserve_env LD_LIBRARY_PATH
7027 preserve_env LIBTOOL
7028 preserve_env MAKE
7029 preserve_env NM
7030 preserve_env OBJCOPY
7031 preserve_env PATH
7032 preserve_env PKG_CONFIG
7033 preserve_env PKG_CONFIG_LIBDIR
7034 preserve_env PKG_CONFIG_PATH
7035 preserve_env PYTHON
7036 preserve_env SDL2_CONFIG
7037 preserve_env SMBD
7038 preserve_env STRIP
7039 preserve_env WINDRES
7041 printf "exec" >>config.status
7042 for i in "$0" "$@"; do
7043 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
7044 done
7045 echo ' "$@"' >>config.status
7046 chmod +x config.status
7048 rm -r "$TMPDIR1"