hw/mips/cps: Expose input clock and connect it to CPU cores
[qemu/ar7.git] / configure
blobf498a37f9a74f64bb5325dae6123c5e9f1ea734b
1 #!/bin/sh
3 # qemu configure script (c) 2003 Fabrice Bellard
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE= GREP_OPTIONS=
9 unset CLICOLOR_FORCE GREP_OPTIONS
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
14 # make source path absolute
15 source_path=$(cd "$(dirname -- "$0")"; pwd)
17 if test "$PWD" = "$source_path"
18 then
19 echo "Using './build' as the directory for build output"
21 MARKER=build/auto-created-by-configure
23 if test -e build
24 then
25 if test -f $MARKER
26 then
27 rm -rf build
28 else
29 echo "ERROR: ./build dir already exists and was not previously created by configure"
30 exit 1
34 mkdir build
35 touch $MARKER
37 cat > GNUmakefile <<'EOF'
38 # This file is auto-generated by configure to support in-source tree
39 # 'make' command invocation
41 ifeq ($(MAKECMDGOALS),)
42 recurse: all
43 endif
45 .NOTPARALLEL: %
46 %: force
47 @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48 @$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49 @if test "$(MAKECMDGOALS)" = "distclean" && \
50 test -e build/auto-created-by-configure ; \
51 then \
52 rm -rf build GNUmakefile ; \
54 force: ;
55 .PHONY: force
56 GNUmakefile: ;
58 EOF
59 cd build
60 exec $source_path/configure "$@"
63 # Temporary directory used for files created while
64 # configure runs. Since it is in the build directory
65 # we can safely blow away any previous version of it
66 # (and we need not jump through hoops to try to delete
67 # it when configure exits.)
68 TMPDIR1="config-temp"
69 rm -rf "${TMPDIR1}"
70 mkdir -p "${TMPDIR1}"
71 if [ $? -ne 0 ]; then
72 echo "ERROR: failed to create temporary directory"
73 exit 1
76 TMPB="qemu-conf"
77 TMPC="${TMPDIR1}/${TMPB}.c"
78 TMPO="${TMPDIR1}/${TMPB}.o"
79 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
80 TMPE="${TMPDIR1}/${TMPB}.exe"
81 TMPTXT="${TMPDIR1}/${TMPB}.txt"
83 rm -f config.log
85 # Print a helpful header at the top of config.log
86 echo "# QEMU configure log $(date)" >> config.log
87 printf "# Configured with:" >> config.log
88 printf " '%s'" "$0" "$@" >> config.log
89 echo >> config.log
90 echo "#" >> config.log
92 print_error() {
93 (echo
94 echo "ERROR: $1"
95 while test -n "$2"; do
96 echo " $2"
97 shift
98 done
99 echo) >&2
102 error_exit() {
103 print_error "$@"
104 exit 1
107 do_compiler() {
108 # Run the compiler, capturing its output to the log. First argument
109 # is compiler binary to execute.
110 local compiler="$1"
111 shift
112 if test -n "$BASH_VERSION"; then eval '
113 echo >>config.log "
114 funcs: ${FUNCNAME[*]}
115 lines: ${BASH_LINENO[*]}"
116 '; fi
117 echo $compiler "$@" >> config.log
118 $compiler "$@" >> config.log 2>&1 || return $?
119 # Test passed. If this is an --enable-werror build, rerun
120 # the test with -Werror and bail out if it fails. This
121 # makes warning-generating-errors in configure test code
122 # obvious to developers.
123 if test "$werror" != "yes"; then
124 return 0
126 # Don't bother rerunning the compile if we were already using -Werror
127 case "$*" in
128 *-Werror*)
129 return 0
131 esac
132 echo $compiler -Werror "$@" >> config.log
133 $compiler -Werror "$@" >> config.log 2>&1 && return $?
134 error_exit "configure test passed without -Werror but failed with -Werror." \
135 "This is probably a bug in the configure script. The failing command" \
136 "will be at the bottom of config.log." \
137 "You can run configure with --disable-werror to bypass this check."
140 do_cc() {
141 do_compiler "$cc" "$@"
144 do_cxx() {
145 do_compiler "$cxx" "$@"
148 # Append $2 to the variable named $1, with space separation
149 add_to() {
150 eval $1=\${$1:+\"\$$1 \"}\$2
153 update_cxxflags() {
154 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
155 # options which some versions of GCC's C++ compiler complain about
156 # because they only make sense for C programs.
157 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
158 CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
159 for arg in $QEMU_CFLAGS; do
160 case $arg in
161 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
162 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
165 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
167 esac
168 done
171 compile_object() {
172 local_cflags="$1"
173 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
176 compile_prog() {
177 local_cflags="$1"
178 local_ldflags="$2"
179 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
180 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
183 # symbolically link $1 to $2. Portable version of "ln -sf".
184 symlink() {
185 rm -rf "$2"
186 mkdir -p "$(dirname "$2")"
187 ln -s "$1" "$2"
190 # check whether a command is available to this shell (may be either an
191 # executable or a builtin)
192 has() {
193 type "$1" >/dev/null 2>&1
196 version_ge () {
197 local_ver1=`echo $1 | tr . ' '`
198 local_ver2=`echo $2 | tr . ' '`
199 while true; do
200 set x $local_ver1
201 local_first=${2-0}
202 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
203 shift ${2:+2}
204 local_ver1=$*
205 set x $local_ver2
206 # the second argument finished, the first must be greater or equal
207 test $# = 1 && return 0
208 test $local_first -lt $2 && return 1
209 test $local_first -gt $2 && return 0
210 shift ${2:+2}
211 local_ver2=$*
212 done
215 have_backend () {
216 echo "$trace_backends" | grep "$1" >/dev/null
219 glob() {
220 eval test -z '"${1#'"$2"'}"'
223 ld_has() {
224 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
227 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
228 then
229 error_exit "main directory cannot contain spaces nor colons"
232 # default parameters
233 cpu=""
234 iasl="iasl"
235 interp_prefix="/usr/gnemul/qemu-%M"
236 static="no"
237 cross_prefix=""
238 audio_drv_list=""
239 block_drv_rw_whitelist=""
240 block_drv_ro_whitelist=""
241 host_cc="cc"
242 audio_win_int=""
243 libs_qga=""
244 debug_info="yes"
245 stack_protector=""
246 safe_stack=""
247 use_containers="yes"
248 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
250 if test -e "$source_path/.git"
251 then
252 git_update=yes
253 git_submodules="ui/keycodemapdb"
254 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
255 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
256 else
257 git_update=no
258 git_submodules=""
260 if ! test -f "$source_path/ui/keycodemapdb/README"
261 then
262 echo
263 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
264 echo
265 echo "This is not a GIT checkout but module content appears to"
266 echo "be missing. Do not use 'git archive' or GitHub download links"
267 echo "to acquire QEMU source archives. Non-GIT builds are only"
268 echo "supported with source archives linked from:"
269 echo
270 echo " https://www.qemu.org/download/#source"
271 echo
272 echo "Developers working with GIT can use scripts/archive-source.sh"
273 echo "if they need to create valid source archives."
274 echo
275 exit 1
278 git="git"
280 # Don't accept a target_list environment variable.
281 unset target_list
282 unset target_list_exclude
284 # Default value for a variable defining feature "foo".
285 # * foo="no" feature will only be used if --enable-foo arg is given
286 # * foo="" feature will be searched for, and if found, will be used
287 # unless --disable-foo is given
288 # * foo="yes" this value will only be set by --enable-foo flag.
289 # feature will searched for,
290 # if not found, configure exits with error
292 # Always add --enable-foo and --disable-foo command line args.
293 # Distributions want to ensure that several features are compiled in, and it
294 # is impossible without a --enable-foo that exits if a feature is not found.
296 brlapi=""
297 curl=""
298 iconv="auto"
299 curses="auto"
300 docs=""
301 fdt="auto"
302 netmap="no"
303 sdl="auto"
304 sdl_image="auto"
305 virtfs=""
306 mpath="auto"
307 vnc="enabled"
308 sparse="auto"
309 vde=""
310 vnc_sasl="auto"
311 vnc_jpeg="auto"
312 vnc_png="auto"
313 xkbcommon="auto"
314 xen=""
315 xen_ctrl_version=""
316 xen_pci_passthrough="auto"
317 linux_aio=""
318 linux_io_uring=""
319 cap_ng=""
320 attr=""
321 libattr=""
322 xfs=""
323 tcg="enabled"
324 membarrier=""
325 vhost_net=""
326 vhost_crypto=""
327 vhost_scsi=""
328 vhost_vsock=""
329 vhost_user=""
330 vhost_user_fs=""
331 kvm="auto"
332 hax="auto"
333 hvf="auto"
334 whpx="auto"
335 rdma=""
336 pvrdma=""
337 gprof="no"
338 debug_tcg="no"
339 debug="no"
340 sanitizers="no"
341 tsan="no"
342 fortify_source=""
343 strip_opt="yes"
344 tcg_interpreter="no"
345 bigendian="no"
346 mingw32="no"
347 gcov="no"
348 EXESUF=""
349 HOST_DSOSUF=".so"
350 modules="no"
351 module_upgrades="no"
352 prefix="/usr/local"
353 qemu_suffix="qemu"
354 slirp="auto"
355 oss_lib=""
356 bsd="no"
357 linux="no"
358 solaris="no"
359 profiler="no"
360 cocoa="auto"
361 softmmu="yes"
362 linux_user="no"
363 bsd_user="no"
364 blobs="yes"
365 edk2_blobs="no"
366 pkgversion=""
367 pie=""
368 qom_cast_debug="yes"
369 trace_backends="log"
370 trace_file="trace"
371 spice=""
372 rbd=""
373 smartcard=""
374 u2f="auto"
375 libusb=""
376 usb_redir=""
377 opengl=""
378 opengl_dmabuf="no"
379 cpuid_h="no"
380 avx2_opt=""
381 capstone="auto"
382 lzo=""
383 snappy=""
384 bzip2=""
385 lzfse=""
386 zstd=""
387 guest_agent=""
388 guest_agent_with_vss="no"
389 guest_agent_ntddscsi="no"
390 guest_agent_msi=""
391 vss_win32_sdk=""
392 win_sdk="no"
393 want_tools=""
394 libiscsi=""
395 libnfs=""
396 coroutine=""
397 coroutine_pool=""
398 debug_stack_usage="no"
399 crypto_afalg="no"
400 seccomp=""
401 glusterfs=""
402 glusterfs_xlator_opt="no"
403 glusterfs_discard="no"
404 glusterfs_fallocate="no"
405 glusterfs_zerofill="no"
406 glusterfs_ftruncate_has_stat="no"
407 glusterfs_iocb_has_stat="no"
408 gtk=""
409 gtk_gl="no"
410 tls_priority="NORMAL"
411 gnutls=""
412 nettle=""
413 nettle_xts="no"
414 gcrypt=""
415 gcrypt_hmac="no"
416 gcrypt_xts="no"
417 qemu_private_xts="yes"
418 auth_pam=""
419 vte=""
420 virglrenderer=""
421 tpm=""
422 libssh=""
423 live_block_migration="yes"
424 numa=""
425 tcmalloc="no"
426 jemalloc="no"
427 replication="yes"
428 bochs="yes"
429 cloop="yes"
430 dmg="yes"
431 qcow1="yes"
432 vdi="yes"
433 vvfat="yes"
434 qed="yes"
435 parallels="yes"
436 sheepdog="no"
437 libxml2=""
438 debug_mutex="no"
439 libpmem=""
440 default_devices="yes"
441 plugins="no"
442 fuzzing="no"
443 rng_none="no"
444 secret_keyring=""
445 libdaxctl=""
446 meson=""
447 ninja=""
448 skip_meson=no
449 gettext=""
451 bogus_os="no"
452 malloc_trim="auto"
454 # parse CC options first
455 for opt do
456 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
457 case "$opt" in
458 --cross-prefix=*) cross_prefix="$optarg"
460 --cc=*) CC="$optarg"
462 --cxx=*) CXX="$optarg"
464 --cpu=*) cpu="$optarg"
466 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
467 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
469 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
471 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
472 EXTRA_LDFLAGS="$optarg"
474 --enable-debug-info) debug_info="yes"
476 --disable-debug-info) debug_info="no"
478 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
480 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
481 eval "cross_cc_cflags_${cc_arch}=\$optarg"
482 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
484 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
485 cc_archs="$cc_archs $cc_arch"
486 eval "cross_cc_${cc_arch}=\$optarg"
487 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
489 esac
490 done
491 # OS specific
492 # Using uname is really, really broken. Once we have the right set of checks
493 # we can eliminate its usage altogether.
495 # Preferred compiler:
496 # ${CC} (if set)
497 # ${cross_prefix}gcc (if cross-prefix specified)
498 # system compiler
499 if test -z "${CC}${cross_prefix}"; then
500 cc="$host_cc"
501 else
502 cc="${CC-${cross_prefix}gcc}"
505 if test -z "${CXX}${cross_prefix}"; then
506 cxx="c++"
507 else
508 cxx="${CXX-${cross_prefix}g++}"
511 ar="${AR-${cross_prefix}ar}"
512 as="${AS-${cross_prefix}as}"
513 ccas="${CCAS-$cc}"
514 cpp="${CPP-$cc -E}"
515 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
516 ld="${LD-${cross_prefix}ld}"
517 ranlib="${RANLIB-${cross_prefix}ranlib}"
518 nm="${NM-${cross_prefix}nm}"
519 strip="${STRIP-${cross_prefix}strip}"
520 windres="${WINDRES-${cross_prefix}windres}"
521 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
522 query_pkg_config() {
523 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
525 pkg_config=query_pkg_config
526 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
528 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
529 ARFLAGS="${ARFLAGS-rv}"
531 # default flags for all hosts
532 # We use -fwrapv to tell the compiler that we require a C dialect where
533 # left shift of signed integers is well defined and has the expected
534 # 2s-complement style results. (Both clang and gcc agree that it
535 # provides these semantics.)
536 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
537 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
538 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
539 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
540 QEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
541 QEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
543 # Flags that are needed during configure but later taken care of by Meson
544 CONFIGURE_CFLAGS="-std=gnu99 -Wall"
545 CONFIGURE_LDFLAGS=
548 check_define() {
549 cat > $TMPC <<EOF
550 #if !defined($1)
551 #error $1 not defined
552 #endif
553 int main(void) { return 0; }
555 compile_object
558 check_include() {
559 cat > $TMPC <<EOF
560 #include <$1>
561 int main(void) { return 0; }
563 compile_object
566 write_c_skeleton() {
567 cat > $TMPC <<EOF
568 int main(void) { return 0; }
572 write_c_fuzzer_skeleton() {
573 cat > $TMPC <<EOF
574 #include <stdint.h>
575 #include <sys/types.h>
576 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
577 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
581 if check_define __linux__ ; then
582 targetos="Linux"
583 elif check_define _WIN32 ; then
584 targetos='MINGW32'
585 elif check_define __OpenBSD__ ; then
586 targetos='OpenBSD'
587 elif check_define __sun__ ; then
588 targetos='SunOS'
589 elif check_define __HAIKU__ ; then
590 targetos='Haiku'
591 elif check_define __FreeBSD__ ; then
592 targetos='FreeBSD'
593 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
594 targetos='GNU/kFreeBSD'
595 elif check_define __DragonFly__ ; then
596 targetos='DragonFly'
597 elif check_define __NetBSD__; then
598 targetos='NetBSD'
599 elif check_define __APPLE__; then
600 targetos='Darwin'
601 else
602 # This is a fatal error, but don't report it yet, because we
603 # might be going to just print the --help text, or it might
604 # be the result of a missing compiler.
605 targetos='bogus'
606 bogus_os='yes'
609 # Some host OSes need non-standard checks for which CPU to use.
610 # Note that these checks are broken for cross-compilation: if you're
611 # cross-compiling to one of these OSes then you'll need to specify
612 # the correct CPU with the --cpu option.
613 case $targetos in
614 Darwin)
615 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
616 # run 64-bit userspace code.
617 # If the user didn't specify a CPU explicitly and the kernel says this is
618 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
619 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
620 cpu="x86_64"
623 SunOS)
624 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
625 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
626 cpu="x86_64"
628 esac
630 if test ! -z "$cpu" ; then
631 # command line argument
633 elif check_define __i386__ ; then
634 cpu="i386"
635 elif check_define __x86_64__ ; then
636 if check_define __ILP32__ ; then
637 cpu="x32"
638 else
639 cpu="x86_64"
641 elif check_define __sparc__ ; then
642 if check_define __arch64__ ; then
643 cpu="sparc64"
644 else
645 cpu="sparc"
647 elif check_define _ARCH_PPC ; then
648 if check_define _ARCH_PPC64 ; then
649 if check_define _LITTLE_ENDIAN ; then
650 cpu="ppc64le"
651 else
652 cpu="ppc64"
654 else
655 cpu="ppc"
657 elif check_define __mips__ ; then
658 cpu="mips"
659 elif check_define __s390__ ; then
660 if check_define __s390x__ ; then
661 cpu="s390x"
662 else
663 cpu="s390"
665 elif check_define __riscv ; then
666 if check_define _LP64 ; then
667 cpu="riscv64"
668 else
669 cpu="riscv32"
671 elif check_define __arm__ ; then
672 cpu="arm"
673 elif check_define __aarch64__ ; then
674 cpu="aarch64"
675 else
676 cpu=$(uname -m)
679 ARCH=
680 # Normalise host CPU name and set ARCH.
681 # Note that this case should only have supported host CPUs, not guests.
682 case "$cpu" in
683 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
685 ppc64le)
686 ARCH="ppc64"
688 i386|i486|i586|i686|i86pc|BePC)
689 cpu="i386"
691 x86_64|amd64)
692 cpu="x86_64"
694 armv*b|armv*l|arm)
695 cpu="arm"
697 aarch64)
698 cpu="aarch64"
700 mips*)
701 cpu="mips"
703 sparc|sun4[cdmuv])
704 cpu="sparc"
707 # This will result in either an error or falling back to TCI later
708 ARCH=unknown
710 esac
711 if test -z "$ARCH"; then
712 ARCH="$cpu"
715 # OS specific
717 case $targetos in
718 MINGW32*)
719 mingw32="yes"
720 vhost_user="no"
721 audio_possible_drivers="dsound sdl"
722 if check_include dsound.h; then
723 audio_drv_list="dsound"
724 else
725 audio_drv_list=""
727 supported_os="yes"
728 pie="no"
730 GNU/kFreeBSD)
731 bsd="yes"
732 audio_drv_list="oss try-sdl"
733 audio_possible_drivers="oss sdl pa"
735 FreeBSD)
736 bsd="yes"
737 make="${MAKE-gmake}"
738 audio_drv_list="oss try-sdl"
739 audio_possible_drivers="oss sdl pa"
740 # needed for kinfo_getvmmap(3) in libutil.h
741 netmap="" # enable netmap autodetect
743 DragonFly)
744 bsd="yes"
745 make="${MAKE-gmake}"
746 audio_drv_list="oss try-sdl"
747 audio_possible_drivers="oss sdl pa"
749 NetBSD)
750 bsd="yes"
751 make="${MAKE-gmake}"
752 audio_drv_list="oss try-sdl"
753 audio_possible_drivers="oss sdl"
754 oss_lib="-lossaudio"
756 OpenBSD)
757 bsd="yes"
758 make="${MAKE-gmake}"
759 audio_drv_list="try-sdl"
760 audio_possible_drivers="sdl"
762 Darwin)
763 bsd="yes"
764 darwin="yes"
765 if [ "$cpu" = "x86_64" ] ; then
766 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
767 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
769 cocoa="enabled"
770 audio_drv_list="coreaudio try-sdl"
771 audio_possible_drivers="coreaudio sdl"
772 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
773 # Disable attempts to use ObjectiveC features in os/object.h since they
774 # won't work when we're compiling with gcc as a C compiler.
775 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
777 SunOS)
778 solaris="yes"
779 make="${MAKE-gmake}"
780 smbd="${SMBD-/usr/sfw/sbin/smbd}"
781 if test -f /usr/include/sys/soundcard.h ; then
782 audio_drv_list="oss try-sdl"
784 audio_possible_drivers="oss sdl"
785 # needed for CMSG_ macros in sys/socket.h
786 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
787 # needed for TIOCWIN* defines in termios.h
788 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
790 Haiku)
791 haiku="yes"
792 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
794 Linux)
795 audio_drv_list="try-pa oss"
796 audio_possible_drivers="oss alsa sdl pa"
797 linux="yes"
798 linux_user="yes"
799 QEMU_INCLUDES="-isystem ${source_path}/linux-headers -Ilinux-headers $QEMU_INCLUDES"
801 esac
803 if [ "$bsd" = "yes" ] ; then
804 if [ "$darwin" != "yes" ] ; then
805 bsd_user="yes"
809 : ${make=${MAKE-make}}
811 # We prefer python 3.x. A bare 'python' is traditionally
812 # python 2.x, but some distros have it as python 3.x, so
813 # we check that too
814 python=
815 explicit_python=no
816 for binary in "${PYTHON-python3}" python
818 if has "$binary"
819 then
820 python=$(command -v "$binary")
821 break
823 done
825 sphinx_build=
826 for binary in sphinx-build-3 sphinx-build
828 if has "$binary"
829 then
830 sphinx_build=$(command -v "$binary")
831 break
833 done
835 # Check for ancillary tools used in testing
836 genisoimage=
837 for binary in genisoimage mkisofs
839 if has $binary
840 then
841 genisoimage=$(command -v "$binary")
842 break
844 done
846 : ${smbd=${SMBD-/usr/sbin/smbd}}
848 # Default objcc to clang if available, otherwise use CC
849 if has clang; then
850 objcc=clang
851 else
852 objcc="$cc"
855 if test "$mingw32" = "yes" ; then
856 EXESUF=".exe"
857 HOST_DSOSUF=".dll"
858 # MinGW needs -mthreads for TLS and macro _MT.
859 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
860 write_c_skeleton;
861 prefix="/qemu"
862 qemu_suffix=""
863 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
866 werror=""
868 for opt do
869 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
870 case "$opt" in
871 --help|-h) show_help=yes
873 --version|-V) exec cat $source_path/VERSION
875 --prefix=*) prefix="$optarg"
877 --interp-prefix=*) interp_prefix="$optarg"
879 --cross-prefix=*)
881 --cc=*)
883 --host-cc=*) host_cc="$optarg"
885 --cxx=*)
887 --iasl=*) iasl="$optarg"
889 --objcc=*) objcc="$optarg"
891 --make=*) make="$optarg"
893 --install=*)
895 --python=*) python="$optarg" ; explicit_python=yes
897 --sphinx-build=*) sphinx_build="$optarg"
899 --skip-meson) skip_meson=yes
901 --meson=*) meson="$optarg"
903 --ninja=*) ninja="$optarg"
905 --smbd=*) smbd="$optarg"
907 --extra-cflags=*)
909 --extra-cxxflags=*)
911 --extra-ldflags=*)
913 --enable-debug-info)
915 --disable-debug-info)
917 --cross-cc-*)
919 --enable-modules)
920 modules="yes"
922 --disable-modules)
923 modules="no"
925 --disable-module-upgrades) module_upgrades="no"
927 --enable-module-upgrades) module_upgrades="yes"
929 --cpu=*)
931 --target-list=*) target_list="$optarg"
932 if test "$target_list_exclude"; then
933 error_exit "Can't mix --target-list with --target-list-exclude"
936 --target-list-exclude=*) target_list_exclude="$optarg"
937 if test "$target_list"; then
938 error_exit "Can't mix --target-list-exclude with --target-list"
941 --enable-trace-backends=*) trace_backends="$optarg"
943 # XXX: backwards compatibility
944 --enable-trace-backend=*) trace_backends="$optarg"
946 --with-trace-file=*) trace_file="$optarg"
948 --with-default-devices) default_devices="yes"
950 --without-default-devices) default_devices="no"
952 --enable-gprof) gprof="yes"
954 --enable-gcov) gcov="yes"
956 --static)
957 static="yes"
958 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
960 --mandir=*) mandir="$optarg"
962 --bindir=*) bindir="$optarg"
964 --libdir=*) libdir="$optarg"
966 --libexecdir=*) libexecdir="$optarg"
968 --includedir=*) includedir="$optarg"
970 --datadir=*) datadir="$optarg"
972 --with-suffix=*) qemu_suffix="$optarg"
974 --docdir=*) qemu_docdir="$optarg"
976 --sysconfdir=*) sysconfdir="$optarg"
978 --localstatedir=*) local_statedir="$optarg"
980 --firmwarepath=*) firmwarepath="$optarg"
982 --host=*|--build=*|\
983 --disable-dependency-tracking|\
984 --sbindir=*|--sharedstatedir=*|\
985 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
986 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
987 # These switches are silently ignored, for compatibility with
988 # autoconf-generated configure scripts. This allows QEMU's
989 # configure to be used by RPM and similar macros that set
990 # lots of directory switches by default.
992 --disable-sdl) sdl="disabled"
994 --enable-sdl) sdl="enabled"
996 --disable-sdl-image) sdl_image="disabled"
998 --enable-sdl-image) sdl_image="enabled"
1000 --disable-qom-cast-debug) qom_cast_debug="no"
1002 --enable-qom-cast-debug) qom_cast_debug="yes"
1004 --disable-virtfs) virtfs="no"
1006 --enable-virtfs) virtfs="yes"
1008 --disable-mpath) mpath="disabled"
1010 --enable-mpath) mpath="enabled"
1012 --disable-vnc) vnc="disabled"
1014 --enable-vnc) vnc="enabled"
1016 --disable-gettext) gettext="false"
1018 --enable-gettext) gettext="true"
1020 --oss-lib=*) oss_lib="$optarg"
1022 --audio-drv-list=*) audio_drv_list="$optarg"
1024 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1026 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1028 --enable-debug-tcg) debug_tcg="yes"
1030 --disable-debug-tcg) debug_tcg="no"
1032 --enable-debug)
1033 # Enable debugging options that aren't excessively noisy
1034 debug_tcg="yes"
1035 debug_mutex="yes"
1036 debug="yes"
1037 strip_opt="no"
1038 fortify_source="no"
1040 --enable-sanitizers) sanitizers="yes"
1042 --disable-sanitizers) sanitizers="no"
1044 --enable-tsan) tsan="yes"
1046 --disable-tsan) tsan="no"
1048 --enable-sparse) sparse="enabled"
1050 --disable-sparse) sparse="disabled"
1052 --disable-strip) strip_opt="no"
1054 --disable-vnc-sasl) vnc_sasl="disabled"
1056 --enable-vnc-sasl) vnc_sasl="enabled"
1058 --disable-vnc-jpeg) vnc_jpeg="disabled"
1060 --enable-vnc-jpeg) vnc_jpeg="enabled"
1062 --disable-vnc-png) vnc_png="disabled"
1064 --enable-vnc-png) vnc_png="enabled"
1066 --disable-slirp) slirp="disabled"
1068 --enable-slirp=git) slirp="internal"
1070 --enable-slirp=system) slirp="system"
1072 --disable-vde) vde="no"
1074 --enable-vde) vde="yes"
1076 --disable-netmap) netmap="no"
1078 --enable-netmap) netmap="yes"
1080 --disable-xen) xen="disabled"
1082 --enable-xen) xen="enabled"
1084 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
1086 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
1088 --disable-brlapi) brlapi="no"
1090 --enable-brlapi) brlapi="yes"
1092 --disable-kvm) kvm="disabled"
1094 --enable-kvm) kvm="enabled"
1096 --disable-hax) hax="disabled"
1098 --enable-hax) hax="enabled"
1100 --disable-hvf) hvf="disabled"
1102 --enable-hvf) hvf="enabled"
1104 --disable-whpx) whpx="disabled"
1106 --enable-whpx) whpx="enabled"
1108 --disable-tcg-interpreter) tcg_interpreter="no"
1110 --enable-tcg-interpreter) tcg_interpreter="yes"
1112 --disable-cap-ng) cap_ng="no"
1114 --enable-cap-ng) cap_ng="yes"
1116 --disable-tcg) tcg="disabled"
1118 --enable-tcg) tcg="enabled"
1120 --disable-malloc-trim) malloc_trim="disabled"
1122 --enable-malloc-trim) malloc_trim="enabled"
1124 --disable-spice) spice="no"
1126 --enable-spice) spice="yes"
1128 --disable-libiscsi) libiscsi="no"
1130 --enable-libiscsi) libiscsi="yes"
1132 --disable-libnfs) libnfs="no"
1134 --enable-libnfs) libnfs="yes"
1136 --enable-profiler) profiler="yes"
1138 --disable-cocoa) cocoa="disabled"
1140 --enable-cocoa)
1141 cocoa="enabled" ;
1142 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1144 --disable-system) softmmu="no"
1146 --enable-system) softmmu="yes"
1148 --disable-user)
1149 linux_user="no" ;
1150 bsd_user="no" ;
1152 --enable-user) ;;
1153 --disable-linux-user) linux_user="no"
1155 --enable-linux-user) linux_user="yes"
1157 --disable-bsd-user) bsd_user="no"
1159 --enable-bsd-user) bsd_user="yes"
1161 --enable-pie) pie="yes"
1163 --disable-pie) pie="no"
1165 --enable-werror) werror="yes"
1167 --disable-werror) werror="no"
1169 --enable-stack-protector) stack_protector="yes"
1171 --disable-stack-protector) stack_protector="no"
1173 --enable-safe-stack) safe_stack="yes"
1175 --disable-safe-stack) safe_stack="no"
1177 --disable-curses) curses="disabled"
1179 --enable-curses) curses="enabled"
1181 --disable-iconv) iconv="disabled"
1183 --enable-iconv) iconv="enabled"
1185 --disable-curl) curl="no"
1187 --enable-curl) curl="yes"
1189 --disable-fdt) fdt="disabled"
1191 --enable-fdt) fdt="enabled"
1193 --enable-fdt=git) fdt="internal"
1195 --enable-fdt=system) fdt="system"
1197 --disable-linux-aio) linux_aio="no"
1199 --enable-linux-aio) linux_aio="yes"
1201 --disable-linux-io-uring) linux_io_uring="no"
1203 --enable-linux-io-uring) linux_io_uring="yes"
1205 --disable-attr) attr="no"
1207 --enable-attr) attr="yes"
1209 --disable-membarrier) membarrier="no"
1211 --enable-membarrier) membarrier="yes"
1213 --disable-blobs) blobs="no"
1215 --with-pkgversion=*) pkgversion="$optarg"
1217 --with-coroutine=*) coroutine="$optarg"
1219 --disable-coroutine-pool) coroutine_pool="no"
1221 --enable-coroutine-pool) coroutine_pool="yes"
1223 --enable-debug-stack-usage) debug_stack_usage="yes"
1225 --enable-crypto-afalg) crypto_afalg="yes"
1227 --disable-crypto-afalg) crypto_afalg="no"
1229 --disable-docs) docs="no"
1231 --enable-docs) docs="yes"
1233 --disable-vhost-net) vhost_net="no"
1235 --enable-vhost-net) vhost_net="yes"
1237 --disable-vhost-crypto) vhost_crypto="no"
1239 --enable-vhost-crypto) vhost_crypto="yes"
1241 --disable-vhost-scsi) vhost_scsi="no"
1243 --enable-vhost-scsi) vhost_scsi="yes"
1245 --disable-vhost-vsock) vhost_vsock="no"
1247 --enable-vhost-vsock) vhost_vsock="yes"
1249 --disable-vhost-user-fs) vhost_user_fs="no"
1251 --enable-vhost-user-fs) vhost_user_fs="yes"
1253 --disable-opengl) opengl="no"
1255 --enable-opengl) opengl="yes"
1257 --disable-rbd) rbd="no"
1259 --enable-rbd) rbd="yes"
1261 --disable-xfsctl) xfs="no"
1263 --enable-xfsctl) xfs="yes"
1265 --disable-smartcard) smartcard="no"
1267 --enable-smartcard) smartcard="yes"
1269 --disable-u2f) u2f="disabled"
1271 --enable-u2f) u2f="enabled"
1273 --disable-libusb) libusb="no"
1275 --enable-libusb) libusb="yes"
1277 --disable-usb-redir) usb_redir="no"
1279 --enable-usb-redir) usb_redir="yes"
1281 --disable-zlib-test)
1283 --disable-lzo) lzo="no"
1285 --enable-lzo) lzo="yes"
1287 --disable-snappy) snappy="no"
1289 --enable-snappy) snappy="yes"
1291 --disable-bzip2) bzip2="no"
1293 --enable-bzip2) bzip2="yes"
1295 --enable-lzfse) lzfse="yes"
1297 --disable-lzfse) lzfse="no"
1299 --disable-zstd) zstd="no"
1301 --enable-zstd) zstd="yes"
1303 --enable-guest-agent) guest_agent="yes"
1305 --disable-guest-agent) guest_agent="no"
1307 --enable-guest-agent-msi) guest_agent_msi="yes"
1309 --disable-guest-agent-msi) guest_agent_msi="no"
1311 --with-vss-sdk) vss_win32_sdk=""
1313 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1315 --without-vss-sdk) vss_win32_sdk="no"
1317 --with-win-sdk) win_sdk=""
1319 --with-win-sdk=*) win_sdk="$optarg"
1321 --without-win-sdk) win_sdk="no"
1323 --enable-tools) want_tools="yes"
1325 --disable-tools) want_tools="no"
1327 --enable-seccomp) seccomp="yes"
1329 --disable-seccomp) seccomp="no"
1331 --disable-glusterfs) glusterfs="no"
1333 --disable-avx2) avx2_opt="no"
1335 --enable-avx2) avx2_opt="yes"
1337 --disable-avx512f) avx512f_opt="no"
1339 --enable-avx512f) avx512f_opt="yes"
1342 --enable-glusterfs) glusterfs="yes"
1344 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1345 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1347 --enable-vhdx|--disable-vhdx)
1348 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1350 --enable-uuid|--disable-uuid)
1351 echo "$0: $opt is obsolete, UUID support is always built" >&2
1353 --disable-gtk) gtk="no"
1355 --enable-gtk) gtk="yes"
1357 --tls-priority=*) tls_priority="$optarg"
1359 --disable-gnutls) gnutls="no"
1361 --enable-gnutls) gnutls="yes"
1363 --disable-nettle) nettle="no"
1365 --enable-nettle) nettle="yes"
1367 --disable-gcrypt) gcrypt="no"
1369 --enable-gcrypt) gcrypt="yes"
1371 --disable-auth-pam) auth_pam="no"
1373 --enable-auth-pam) auth_pam="yes"
1375 --enable-rdma) rdma="yes"
1377 --disable-rdma) rdma="no"
1379 --enable-pvrdma) pvrdma="yes"
1381 --disable-pvrdma) pvrdma="no"
1383 --disable-vte) vte="no"
1385 --enable-vte) vte="yes"
1387 --disable-virglrenderer) virglrenderer="no"
1389 --enable-virglrenderer) virglrenderer="yes"
1391 --disable-tpm) tpm="no"
1393 --enable-tpm) tpm="yes"
1395 --disable-libssh) libssh="no"
1397 --enable-libssh) libssh="yes"
1399 --disable-live-block-migration) live_block_migration="no"
1401 --enable-live-block-migration) live_block_migration="yes"
1403 --disable-numa) numa="no"
1405 --enable-numa) numa="yes"
1407 --disable-libxml2) libxml2="no"
1409 --enable-libxml2) libxml2="yes"
1411 --disable-tcmalloc) tcmalloc="no"
1413 --enable-tcmalloc) tcmalloc="yes"
1415 --disable-jemalloc) jemalloc="no"
1417 --enable-jemalloc) jemalloc="yes"
1419 --disable-replication) replication="no"
1421 --enable-replication) replication="yes"
1423 --disable-bochs) bochs="no"
1425 --enable-bochs) bochs="yes"
1427 --disable-cloop) cloop="no"
1429 --enable-cloop) cloop="yes"
1431 --disable-dmg) dmg="no"
1433 --enable-dmg) dmg="yes"
1435 --disable-qcow1) qcow1="no"
1437 --enable-qcow1) qcow1="yes"
1439 --disable-vdi) vdi="no"
1441 --enable-vdi) vdi="yes"
1443 --disable-vvfat) vvfat="no"
1445 --enable-vvfat) vvfat="yes"
1447 --disable-qed) qed="no"
1449 --enable-qed) qed="yes"
1451 --disable-parallels) parallels="no"
1453 --enable-parallels) parallels="yes"
1455 --disable-sheepdog) sheepdog="no"
1457 --enable-sheepdog) sheepdog="yes"
1459 --disable-vhost-user) vhost_user="no"
1461 --enable-vhost-user) vhost_user="yes"
1463 --disable-vhost-vdpa) vhost_vdpa="no"
1465 --enable-vhost-vdpa) vhost_vdpa="yes"
1467 --disable-vhost-kernel) vhost_kernel="no"
1469 --enable-vhost-kernel) vhost_kernel="yes"
1471 --disable-capstone) capstone="disabled"
1473 --enable-capstone) capstone="enabled"
1475 --enable-capstone=git) capstone="internal"
1477 --enable-capstone=system) capstone="system"
1479 --with-git=*) git="$optarg"
1481 --enable-git-update) git_update=yes
1483 --disable-git-update) git_update=no
1485 --enable-debug-mutex) debug_mutex=yes
1487 --disable-debug-mutex) debug_mutex=no
1489 --enable-libpmem) libpmem=yes
1491 --disable-libpmem) libpmem=no
1493 --enable-xkbcommon) xkbcommon="enabled"
1495 --disable-xkbcommon) xkbcommon="disabled"
1497 --enable-plugins) plugins="yes"
1499 --disable-plugins) plugins="no"
1501 --enable-containers) use_containers="yes"
1503 --disable-containers) use_containers="no"
1505 --enable-fuzzing) fuzzing=yes
1507 --disable-fuzzing) fuzzing=no
1509 --gdb=*) gdb_bin="$optarg"
1511 --enable-rng-none) rng_none=yes
1513 --disable-rng-none) rng_none=no
1515 --enable-keyring) secret_keyring="yes"
1517 --disable-keyring) secret_keyring="no"
1519 --enable-libdaxctl) libdaxctl=yes
1521 --disable-libdaxctl) libdaxctl=no
1524 echo "ERROR: unknown option $opt"
1525 echo "Try '$0 --help' for more information"
1526 exit 1
1528 esac
1529 done
1531 firmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}"
1532 libdir="${libdir:-$prefix/lib}"
1533 libexecdir="${libexecdir:-$prefix/libexec}"
1534 includedir="${includedir:-$prefix/include}"
1536 if test "$mingw32" = "yes" ; then
1537 mandir="$prefix"
1538 datadir="$prefix"
1539 docdir="$prefix"
1540 bindir="$prefix"
1541 sysconfdir="$prefix"
1542 local_statedir=
1543 else
1544 mandir="${mandir:-$prefix/share/man}"
1545 datadir="${datadir:-$prefix/share}"
1546 docdir="${docdir:-$prefix/share/doc}"
1547 bindir="${bindir:-$prefix/bin}"
1548 sysconfdir="${sysconfdir:-$prefix/etc}"
1549 local_statedir="${local_statedir:-$prefix/var}"
1552 case "$cpu" in
1553 ppc)
1554 CPU_CFLAGS="-m32"
1555 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1557 ppc64)
1558 CPU_CFLAGS="-m64"
1559 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1561 sparc)
1562 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1563 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1565 sparc64)
1566 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1567 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1569 s390)
1570 CPU_CFLAGS="-m31"
1571 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1573 s390x)
1574 CPU_CFLAGS="-m64"
1575 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1577 i386)
1578 CPU_CFLAGS="-m32"
1579 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1581 x86_64)
1582 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1583 # If we truly care, we should simply detect this case at
1584 # runtime and generate the fallback to serial emulation.
1585 CPU_CFLAGS="-m64 -mcx16"
1586 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1588 x32)
1589 CPU_CFLAGS="-mx32"
1590 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1592 # No special flags required for other host CPUs
1593 esac
1595 eval "cross_cc_${cpu}=\$host_cc"
1596 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1597 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1599 # For user-mode emulation the host arch has to be one we explicitly
1600 # support, even if we're using TCI.
1601 if [ "$ARCH" = "unknown" ]; then
1602 bsd_user="no"
1603 linux_user="no"
1606 default_target_list=""
1607 deprecated_targets_list=ppc64abi32-linux-user,tilegx-linux-user,lm32-softmmu,unicore32-softmmu
1608 deprecated_features=""
1609 mak_wilds=""
1611 if [ "$softmmu" = "yes" ]; then
1612 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak"
1614 if [ "$linux_user" = "yes" ]; then
1615 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak"
1617 if [ "$bsd_user" = "yes" ]; then
1618 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak"
1621 # If the user doesn't explicitly specify a deprecated target we will
1622 # skip it.
1623 if test -z "$target_list"; then
1624 if test -z "$target_list_exclude"; then
1625 target_list_exclude="$deprecated_targets_list"
1626 else
1627 target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1631 for config in $mak_wilds; do
1632 target="$(basename "$config" .mak)"
1633 if echo "$target_list_exclude" | grep -vq "$target"; then
1634 default_target_list="${default_target_list} $target"
1636 done
1638 # Enumerate public trace backends for --help output
1639 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1641 if test x"$show_help" = x"yes" ; then
1642 cat << EOF
1644 Usage: configure [options]
1645 Options: [defaults in brackets after descriptions]
1647 Standard options:
1648 --help print this message
1649 --prefix=PREFIX install in PREFIX [$prefix]
1650 --interp-prefix=PREFIX where to find shared libraries, etc.
1651 use %M for cpu name [$interp_prefix]
1652 --target-list=LIST set target list (default: build everything)
1653 $(echo Available targets: $default_target_list | \
1654 fold -s -w 53 | sed -e 's/^/ /')
1655 --target-list-exclude=LIST exclude a set of targets from the default target-list
1657 Advanced options (experts only):
1658 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1659 --cc=CC use C compiler CC [$cc]
1660 --iasl=IASL use ACPI compiler IASL [$iasl]
1661 --host-cc=CC use C compiler CC [$host_cc] for code run at
1662 build time
1663 --cxx=CXX use C++ compiler CXX [$cxx]
1664 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1665 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1666 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1667 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1668 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1669 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1670 --make=MAKE use specified make [$make]
1671 --python=PYTHON use specified python [$python]
1672 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1673 --meson=MESON use specified meson [$meson]
1674 --ninja=NINJA use specified ninja [$ninja]
1675 --smbd=SMBD use specified smbd [$smbd]
1676 --with-git=GIT use specified git [$git]
1677 --static enable static build [$static]
1678 --mandir=PATH install man pages in PATH
1679 --datadir=PATH install firmware in PATH/$qemu_suffix
1680 --docdir=PATH install documentation in PATH/$qemu_suffix
1681 --bindir=PATH install binaries in PATH
1682 --libdir=PATH install libraries in PATH
1683 --libexecdir=PATH install helper binaries in PATH
1684 --sysconfdir=PATH install config in PATH/$qemu_suffix
1685 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1686 --firmwarepath=PATH search PATH for firmware files
1687 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1688 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1689 --with-pkgversion=VERS use specified string as sub-version of the package
1690 --enable-debug enable common debug build options
1691 --enable-sanitizers enable default sanitizers
1692 --enable-tsan enable thread sanitizer
1693 --disable-strip disable stripping binaries
1694 --disable-werror disable compilation abort on warning
1695 --disable-stack-protector disable compiler-provided stack protection
1696 --audio-drv-list=LIST set audio drivers list:
1697 Available drivers: $audio_possible_drivers
1698 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1699 --block-drv-rw-whitelist=L
1700 set block driver read-write whitelist
1701 (affects only QEMU, not qemu-img)
1702 --block-drv-ro-whitelist=L
1703 set block driver read-only whitelist
1704 (affects only QEMU, not qemu-img)
1705 --enable-trace-backends=B Set trace backend
1706 Available backends: $trace_backend_list
1707 --with-trace-file=NAME Full PATH,NAME of file to store traces
1708 Default:trace-<pid>
1709 --disable-slirp disable SLIRP userspace network connectivity
1710 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1711 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1712 --oss-lib path to OSS library
1713 --cpu=CPU Build for host CPU [$cpu]
1714 --with-coroutine=BACKEND coroutine backend. Supported options:
1715 ucontext, sigaltstack, windows
1716 --enable-gcov enable test coverage analysis with gcov
1717 --disable-blobs disable installing provided firmware blobs
1718 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1719 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1720 --tls-priority default TLS protocol/cipher priority string
1721 --enable-gprof QEMU profiling with gprof
1722 --enable-profiler profiler support
1723 --enable-debug-stack-usage
1724 track the maximum stack usage of stacks created by qemu_alloc_stack
1725 --enable-plugins
1726 enable plugins via shared library loading
1727 --disable-containers don't use containers for cross-building
1728 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1730 Optional features, enabled with --enable-FEATURE and
1731 disabled with --disable-FEATURE, default is enabled if available:
1733 system all system emulation targets
1734 user supported user emulation targets
1735 linux-user all linux usermode emulation targets
1736 bsd-user all BSD usermode emulation targets
1737 docs build documentation
1738 guest-agent build the QEMU Guest Agent
1739 guest-agent-msi build guest agent Windows MSI installation package
1740 pie Position Independent Executables
1741 modules modules support (non-Windows)
1742 module-upgrades try to load modules from alternate paths for upgrades
1743 debug-tcg TCG debugging (default is disabled)
1744 debug-info debugging information
1745 sparse sparse checker
1746 safe-stack SafeStack Stack Smash Protection. Depends on
1747 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1749 gnutls GNUTLS cryptography support
1750 nettle nettle cryptography support
1751 gcrypt libgcrypt cryptography support
1752 auth-pam PAM access control
1753 sdl SDL UI
1754 sdl-image SDL Image support for icons
1755 gtk gtk UI
1756 vte vte support for the gtk UI
1757 curses curses UI
1758 iconv font glyph conversion support
1759 vnc VNC UI support
1760 vnc-sasl SASL encryption for VNC server
1761 vnc-jpeg JPEG lossy compression for VNC server
1762 vnc-png PNG compression for VNC server
1763 cocoa Cocoa UI (Mac OS X only)
1764 virtfs VirtFS
1765 mpath Multipath persistent reservation passthrough
1766 xen xen backend driver support
1767 xen-pci-passthrough PCI passthrough support for Xen
1768 brlapi BrlAPI (Braile)
1769 curl curl connectivity
1770 membarrier membarrier system call (for Linux 4.14+ or Windows)
1771 fdt fdt device tree
1772 kvm KVM acceleration support
1773 hax HAX acceleration support
1774 hvf Hypervisor.framework acceleration support
1775 whpx Windows Hypervisor Platform acceleration support
1776 rdma Enable RDMA-based migration
1777 pvrdma Enable PVRDMA support
1778 vde support for vde network
1779 netmap support for netmap network
1780 linux-aio Linux AIO support
1781 linux-io-uring Linux io_uring support
1782 cap-ng libcap-ng support
1783 attr attr and xattr support
1784 vhost-net vhost-net kernel acceleration support
1785 vhost-vsock virtio sockets device support
1786 vhost-scsi vhost-scsi kernel target support
1787 vhost-crypto vhost-user-crypto backend support
1788 vhost-kernel vhost kernel backend support
1789 vhost-user vhost-user backend support
1790 vhost-vdpa vhost-vdpa kernel backend support
1791 spice spice
1792 rbd rados block device (rbd)
1793 libiscsi iscsi support
1794 libnfs nfs support
1795 smartcard smartcard support (libcacard)
1796 u2f U2F support (u2f-emu)
1797 libusb libusb (for usb passthrough)
1798 live-block-migration Block migration in the main migration stream
1799 usb-redir usb network redirection support
1800 lzo support of lzo compression library
1801 snappy support of snappy compression library
1802 bzip2 support of bzip2 compression library
1803 (for reading bzip2-compressed dmg images)
1804 lzfse support of lzfse compression library
1805 (for reading lzfse-compressed dmg images)
1806 zstd support for zstd compression library
1807 (for migration compression and qcow2 cluster compression)
1808 seccomp seccomp support
1809 coroutine-pool coroutine freelist (better performance)
1810 glusterfs GlusterFS backend
1811 tpm TPM support
1812 libssh ssh block device support
1813 numa libnuma support
1814 libxml2 for Parallels image format
1815 tcmalloc tcmalloc support
1816 jemalloc jemalloc support
1817 avx2 AVX2 optimization support
1818 avx512f AVX512F optimization support
1819 replication replication support
1820 opengl opengl support
1821 virglrenderer virgl rendering support
1822 xfsctl xfsctl support
1823 qom-cast-debug cast debugging support
1824 tools build qemu-io, qemu-nbd and qemu-img tools
1825 bochs bochs image format support
1826 cloop cloop image format support
1827 dmg dmg image format support
1828 qcow1 qcow v1 image format support
1829 vdi vdi image format support
1830 vvfat vvfat image format support
1831 qed qed image format support
1832 parallels parallels image format support
1833 sheepdog sheepdog block driver support (deprecated)
1834 crypto-afalg Linux AF_ALG crypto backend driver
1835 capstone capstone disassembler support
1836 debug-mutex mutex debugging support
1837 libpmem libpmem support
1838 xkbcommon xkbcommon support
1839 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1840 libdaxctl libdaxctl support
1842 NOTE: The object files are built at the place where configure is launched
1844 exit 0
1847 # Remove old dependency files to make sure that they get properly regenerated
1848 rm -f */config-devices.mak.d
1850 if test -z "$python"
1851 then
1852 error_exit "Python not found. Use --python=/path/to/python"
1855 # Note that if the Python conditional here evaluates True we will exit
1856 # with status 1 which is a shell 'false' value.
1857 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1858 error_exit "Cannot use '$python', Python >= 3.6 is required." \
1859 "Use --python=/path/to/python to specify a supported Python."
1862 # Preserve python version since some functionality is dependent on it
1863 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)
1865 # Suppress writing compiled files
1866 python="$python -B"
1868 if test -z "$meson"; then
1869 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.1; then
1870 meson=meson
1871 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
1872 meson=git
1873 elif test -e "${source_path}/meson/meson.py" ; then
1874 meson=internal
1875 else
1876 if test "$explicit_python" = yes; then
1877 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
1878 else
1879 error_exit "Meson not found. Use --meson=/path/to/meson"
1882 else
1883 # Meson uses its own Python interpreter to invoke other Python scripts,
1884 # but the user wants to use the one they specified with --python.
1886 # We do not want to override the distro Python interpreter (and sometimes
1887 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1888 # just require --meson=git|internal together with --python.
1889 if test "$explicit_python" = yes; then
1890 case "$meson" in
1891 git | internal) ;;
1892 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
1893 esac
1897 if test "$meson" = git; then
1898 git_submodules="${git_submodules} meson"
1901 case "$meson" in
1902 git | internal)
1903 if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then
1904 error_exit "Python setuptools not found"
1906 meson="$python ${source_path}/meson/meson.py"
1908 *) meson=$(command -v "$meson") ;;
1909 esac
1911 # Probe for ninja (used for compdb)
1913 if test -z "$ninja"; then
1914 for c in ninja ninja-build samu; do
1915 if has $c; then
1916 ninja=$(command -v "$c")
1917 break
1919 done
1922 # Check that the C compiler works. Doing this here before testing
1923 # the host CPU ensures that we had a valid CC to autodetect the
1924 # $cpu var (and we should bail right here if that's not the case).
1925 # It also allows the help message to be printed without a CC.
1926 write_c_skeleton;
1927 if compile_object ; then
1928 : C compiler works ok
1929 else
1930 error_exit "\"$cc\" either does not exist or does not work"
1932 if ! compile_prog ; then
1933 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1936 # Consult white-list to determine whether to enable werror
1937 # by default. Only enable by default for git builds
1938 if test -z "$werror" ; then
1939 if test -e "$source_path/.git" && \
1940 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1941 werror="yes"
1942 else
1943 werror="no"
1947 if test "$bogus_os" = "yes"; then
1948 # Now that we know that we're not printing the help and that
1949 # the compiler works (so the results of the check_defines we used
1950 # to identify the OS are reliable), if we didn't recognize the
1951 # host OS we should stop now.
1952 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1955 # Check whether the compiler matches our minimum requirements:
1956 cat > $TMPC << EOF
1957 #if defined(__clang_major__) && defined(__clang_minor__)
1958 # ifdef __apple_build_version__
1959 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1960 # error You need at least XCode Clang v5.1 to compile QEMU
1961 # endif
1962 # else
1963 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1964 # error You need at least Clang v3.4 to compile QEMU
1965 # endif
1966 # endif
1967 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1968 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1969 # error You need at least GCC v4.8 to compile QEMU
1970 # endif
1971 #else
1972 # error You either need GCC or Clang to compiler QEMU
1973 #endif
1974 int main (void) { return 0; }
1976 if ! compile_prog "" "" ; then
1977 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1980 # Accumulate -Wfoo and -Wno-bar separately.
1981 # We will list all of the enable flags first, and the disable flags second.
1982 # Note that we do not add -Werror, because that would enable it for all
1983 # configure tests. If a configure test failed due to -Werror this would
1984 # just silently disable some features, so it's too error prone.
1986 warn_flags=
1987 add_to warn_flags -Wold-style-declaration
1988 add_to warn_flags -Wold-style-definition
1989 add_to warn_flags -Wtype-limits
1990 add_to warn_flags -Wformat-security
1991 add_to warn_flags -Wformat-y2k
1992 add_to warn_flags -Winit-self
1993 add_to warn_flags -Wignored-qualifiers
1994 add_to warn_flags -Wempty-body
1995 add_to warn_flags -Wnested-externs
1996 add_to warn_flags -Wendif-labels
1997 add_to warn_flags -Wexpansion-to-defined
1999 nowarn_flags=
2000 add_to nowarn_flags -Wno-initializer-overrides
2001 add_to nowarn_flags -Wno-missing-include-dirs
2002 add_to nowarn_flags -Wno-shift-negative-value
2003 add_to nowarn_flags -Wno-string-plus-int
2004 add_to nowarn_flags -Wno-typedef-redefinition
2005 add_to nowarn_flags -Wno-tautological-type-limit-compare
2006 add_to nowarn_flags -Wno-psabi
2008 gcc_flags="$warn_flags $nowarn_flags"
2010 cc_has_warning_flag() {
2011 write_c_skeleton;
2013 # Use the positive sense of the flag when testing for -Wno-wombat
2014 # support (gcc will happily accept the -Wno- form of unknown
2015 # warning options).
2016 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2017 compile_prog "-Werror $optflag" ""
2020 for flag in $gcc_flags; do
2021 if cc_has_warning_flag $flag ; then
2022 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2024 done
2026 if test "$stack_protector" != "no"; then
2027 cat > $TMPC << EOF
2028 int main(int argc, char *argv[])
2030 char arr[64], *p = arr, *c = argv[0];
2031 while (*c) {
2032 *p++ = *c++;
2034 return 0;
2037 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2038 sp_on=0
2039 for flag in $gcc_flags; do
2040 # We need to check both a compile and a link, since some compiler
2041 # setups fail only on a .c->.o compile and some only at link time
2042 if compile_object "-Werror $flag" &&
2043 compile_prog "-Werror $flag" ""; then
2044 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2045 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2046 sp_on=1
2047 break
2049 done
2050 if test "$stack_protector" = yes; then
2051 if test $sp_on = 0; then
2052 error_exit "Stack protector not supported"
2057 # Disable -Wmissing-braces on older compilers that warn even for
2058 # the "universal" C zero initializer {0}.
2059 cat > $TMPC << EOF
2060 struct {
2061 int a[2];
2062 } x = {0};
2064 if compile_object "-Werror" "" ; then
2066 else
2067 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2070 # Our module code doesn't support Windows
2071 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2072 error_exit "Modules are not available for Windows"
2075 # module_upgrades is only reasonable if modules are enabled
2076 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2077 error_exit "Can't enable module-upgrades as Modules are not enabled"
2080 # Static linking is not possible with modules or PIE
2081 if test "$static" = "yes" ; then
2082 if test "$modules" = "yes" ; then
2083 error_exit "static and modules are mutually incompatible"
2087 # Unconditional check for compiler __thread support
2088 cat > $TMPC << EOF
2089 static __thread int tls_var;
2090 int main(void) { return tls_var; }
2093 if ! compile_prog "-Werror" "" ; then
2094 error_exit "Your compiler does not support the __thread specifier for " \
2095 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2098 cat > $TMPC << EOF
2100 #ifdef __linux__
2101 # define THREAD __thread
2102 #else
2103 # define THREAD
2104 #endif
2105 static THREAD int tls_var;
2106 int main(void) { return tls_var; }
2109 # Check we support --no-pie first; we will need this for building ROMs.
2110 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2111 CFLAGS_NOPIE="-fno-pie"
2112 LDFLAGS_NOPIE="-no-pie"
2115 if test "$static" = "yes"; then
2116 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2117 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2118 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2119 pie="yes"
2120 elif test "$pie" = "yes"; then
2121 error_exit "-static-pie not available due to missing toolchain support"
2122 else
2123 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2124 pie="no"
2126 elif test "$pie" = "no"; then
2127 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2128 CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS"
2129 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2130 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2131 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2132 pie="yes"
2133 elif test "$pie" = "yes"; then
2134 error_exit "PIE not available due to missing toolchain support"
2135 else
2136 echo "Disabling PIE due to missing toolchain support"
2137 pie="no"
2140 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2141 # The combination is known as "full relro", because .got.plt is read-only too.
2142 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2143 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2146 ##########################################
2147 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2148 # use i686 as default anyway, but for those that don't, an explicit
2149 # specification is necessary
2151 if test "$cpu" = "i386"; then
2152 cat > $TMPC << EOF
2153 static int sfaa(int *ptr)
2155 return __sync_fetch_and_and(ptr, 0);
2158 int main(void)
2160 int val = 42;
2161 val = __sync_val_compare_and_swap(&val, 0, 1);
2162 sfaa(&val);
2163 return val;
2166 if ! compile_prog "" "" ; then
2167 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2171 #########################################
2172 # Solaris specific configure tool chain decisions
2174 if test "$solaris" = "yes" ; then
2175 if has ar; then
2177 else
2178 if test -f /usr/ccs/bin/ar ; then
2179 error_exit "No path includes ar" \
2180 "Add /usr/ccs/bin to your path and rerun configure"
2182 error_exit "No path includes ar"
2186 if test -z "${target_list+xxx}" ; then
2187 default_targets=yes
2188 for target in $default_target_list; do
2189 target_list="$target_list $target"
2190 done
2191 target_list="${target_list# }"
2192 else
2193 default_targets=no
2194 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2195 for target in $target_list; do
2196 # Check that we recognised the target name; this allows a more
2197 # friendly error message than if we let it fall through.
2198 case " $default_target_list " in
2199 *" $target "*)
2202 error_exit "Unknown target name '$target'"
2204 esac
2205 done
2208 for target in $target_list; do
2209 # if a deprecated target is enabled we note it here
2210 if echo "$deprecated_targets_list" | grep -q "$target"; then
2211 add_to deprecated_features $target
2213 done
2215 # see if system emulation was really requested
2216 case " $target_list " in
2217 *"-softmmu "*) softmmu=yes
2219 *) softmmu=no
2221 esac
2223 for target in $target_list; do
2224 case "$target" in
2225 arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2226 edk2_blobs="yes"
2228 esac
2229 done
2230 # The EDK2 binaries are compressed with bzip2
2231 if test "$edk2_blobs" = "yes" && ! has bzip2; then
2232 error_exit "The bzip2 program is required for building QEMU"
2235 feature_not_found() {
2236 feature=$1
2237 remedy=$2
2239 error_exit "User requested feature $feature" \
2240 "configure was not able to find it." \
2241 "$remedy"
2244 # ---
2245 # big/little endian test
2246 cat > $TMPC << EOF
2247 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2248 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2249 extern int foo(short *, short *);
2250 int main(int argc, char *argv[]) {
2251 return foo(big_endian, little_endian);
2255 if compile_object ; then
2256 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2257 bigendian="yes"
2258 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2259 bigendian="no"
2260 else
2261 echo big/little test failed
2263 else
2264 echo big/little test failed
2267 ##########################################
2268 # system tools
2269 if test -z "$want_tools"; then
2270 if test "$softmmu" = "no"; then
2271 want_tools=no
2272 else
2273 want_tools=yes
2277 ##########################################
2278 # cocoa implies not SDL or GTK
2279 # (the cocoa UI code currently assumes it is always the active UI
2280 # and doesn't interact well with other UI frontend code)
2281 if test "$cocoa" = "enabled"; then
2282 if test "$sdl" = "enabled"; then
2283 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2285 if test "$gtk" = "yes"; then
2286 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2288 gtk=no
2289 sdl=disabled
2292 # Some versions of Mac OS X incorrectly define SIZE_MAX
2293 cat > $TMPC << EOF
2294 #include <stdint.h>
2295 #include <stdio.h>
2296 int main(int argc, char *argv[]) {
2297 return printf("%zu", SIZE_MAX);
2300 have_broken_size_max=no
2301 if ! compile_object -Werror ; then
2302 have_broken_size_max=yes
2305 ##########################################
2306 # L2TPV3 probe
2308 cat > $TMPC <<EOF
2309 #include <sys/socket.h>
2310 #include <linux/ip.h>
2311 int main(void) { return sizeof(struct mmsghdr); }
2313 if compile_prog "" "" ; then
2314 l2tpv3=yes
2315 else
2316 l2tpv3=no
2319 if check_include "pty.h" ; then
2320 pty_h=yes
2321 else
2322 pty_h=no
2325 cat > $TMPC <<EOF
2326 #include <sys/mman.h>
2327 int main(int argc, char *argv[]) {
2328 return mlockall(MCL_FUTURE);
2331 if compile_prog "" "" ; then
2332 have_mlockall=yes
2333 else
2334 have_mlockall=no
2337 #########################################
2338 # vhost interdependencies and host support
2340 # vhost backends
2341 test "$vhost_user" = "" && vhost_user=yes
2342 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2343 error_exit "vhost-user isn't available on win32"
2345 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2346 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2347 error_exit "vhost-vdpa is only available on Linux"
2349 test "$vhost_kernel" = "" && vhost_kernel=$linux
2350 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2351 error_exit "vhost-kernel is only available on Linux"
2354 # vhost-kernel devices
2355 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2356 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2357 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2359 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2360 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2361 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2364 # vhost-user backends
2365 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2366 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2367 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2369 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2370 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2371 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2373 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2374 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2375 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2377 #vhost-vdpa backends
2378 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2379 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2380 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2383 # OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2384 if test "$vhost_net" = ""; then
2385 test "$vhost_net_user" = "yes" && vhost_net=yes
2386 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
2387 test "$vhost_kernel" = "yes" && vhost_net=yes
2390 ##########################################
2391 # pkg-config probe
2393 if ! has "$pkg_config_exe"; then
2394 error_exit "pkg-config binary '$pkg_config_exe' not found"
2397 ##########################################
2398 # NPTL probe
2400 if test "$linux_user" = "yes"; then
2401 cat > $TMPC <<EOF
2402 #include <sched.h>
2403 #include <linux/futex.h>
2404 int main(void) {
2405 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2406 #error bork
2407 #endif
2408 return 0;
2411 if ! compile_object ; then
2412 feature_not_found "nptl" "Install glibc and linux kernel headers."
2416 ##########################################
2417 # lzo check
2419 if test "$lzo" != "no" ; then
2420 cat > $TMPC << EOF
2421 #include <lzo/lzo1x.h>
2422 int main(void) { lzo_version(); return 0; }
2424 if compile_prog "" "-llzo2" ; then
2425 lzo_libs="-llzo2"
2426 lzo="yes"
2427 else
2428 if test "$lzo" = "yes"; then
2429 feature_not_found "liblzo2" "Install liblzo2 devel"
2431 lzo="no"
2435 ##########################################
2436 # snappy check
2438 if test "$snappy" != "no" ; then
2439 cat > $TMPC << EOF
2440 #include <snappy-c.h>
2441 int main(void) { snappy_max_compressed_length(4096); return 0; }
2443 if compile_prog "" "-lsnappy" ; then
2444 snappy_libs='-lsnappy'
2445 snappy="yes"
2446 else
2447 if test "$snappy" = "yes"; then
2448 feature_not_found "libsnappy" "Install libsnappy devel"
2450 snappy="no"
2454 ##########################################
2455 # bzip2 check
2457 if test "$bzip2" != "no" ; then
2458 cat > $TMPC << EOF
2459 #include <bzlib.h>
2460 int main(void) { BZ2_bzlibVersion(); return 0; }
2462 if compile_prog "" "-lbz2" ; then
2463 bzip2="yes"
2464 else
2465 if test "$bzip2" = "yes"; then
2466 feature_not_found "libbzip2" "Install libbzip2 devel"
2468 bzip2="no"
2472 ##########################################
2473 # lzfse check
2475 if test "$lzfse" != "no" ; then
2476 cat > $TMPC << EOF
2477 #include <lzfse.h>
2478 int main(void) { lzfse_decode_scratch_size(); return 0; }
2480 if compile_prog "" "-llzfse" ; then
2481 lzfse="yes"
2482 else
2483 if test "$lzfse" = "yes"; then
2484 feature_not_found "lzfse" "Install lzfse devel"
2486 lzfse="no"
2490 ##########################################
2491 # zstd check
2493 if test "$zstd" != "no" ; then
2494 libzstd_minver="1.4.0"
2495 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2496 zstd_cflags="$($pkg_config --cflags libzstd)"
2497 zstd_libs="$($pkg_config --libs libzstd)"
2498 zstd="yes"
2499 else
2500 if test "$zstd" = "yes" ; then
2501 feature_not_found "libzstd" "Install libzstd devel"
2503 zstd="no"
2507 ##########################################
2508 # libseccomp check
2510 if test "$seccomp" != "no" ; then
2511 libseccomp_minver="2.3.0"
2512 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2513 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2514 seccomp_libs="$($pkg_config --libs libseccomp)"
2515 seccomp="yes"
2516 else
2517 if test "$seccomp" = "yes" ; then
2518 feature_not_found "libseccomp" \
2519 "Install libseccomp devel >= $libseccomp_minver"
2521 seccomp="no"
2525 ##########################################
2526 # xen probe
2528 if test "$xen" != "disabled" ; then
2529 # Check whether Xen library path is specified via --extra-ldflags to avoid
2530 # overriding this setting with pkg-config output. If not, try pkg-config
2531 # to obtain all needed flags.
2533 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2534 $pkg_config --exists xencontrol ; then
2535 xen_ctrl_version="$(printf '%d%02d%02d' \
2536 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2537 xen=enabled
2538 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2539 xen_pc="$xen_pc xenevtchn xendevicemodel"
2540 if $pkg_config --exists xentoolcore; then
2541 xen_pc="$xen_pc xentoolcore"
2543 xen_cflags="$($pkg_config --cflags $xen_pc)"
2544 xen_libs="$($pkg_config --libs $xen_pc)"
2545 else
2547 xen_libs="-lxenstore -lxenctrl -lxenguest"
2548 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2550 # First we test whether Xen headers and libraries are available.
2551 # If no, we are done and there is no Xen support.
2552 # If yes, more tests are run to detect the Xen version.
2554 # Xen (any)
2555 cat > $TMPC <<EOF
2556 #include <xenctrl.h>
2557 int main(void) {
2558 return 0;
2561 if ! compile_prog "" "$xen_libs" ; then
2562 # Xen not found
2563 if test "$xen" = "enabled" ; then
2564 feature_not_found "xen" "Install xen devel"
2566 xen=disabled
2568 # Xen unstable
2569 elif
2570 cat > $TMPC <<EOF &&
2571 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2572 #define __XEN_TOOLS__
2573 #include <xendevicemodel.h>
2574 #include <xenforeignmemory.h>
2575 int main(void) {
2576 xendevicemodel_handle *xd;
2577 xenforeignmemory_handle *xfmem;
2579 xd = xendevicemodel_open(0, 0);
2580 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2582 xfmem = xenforeignmemory_open(0, 0);
2583 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2585 return 0;
2588 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2589 then
2590 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2591 xen_ctrl_version=41100
2592 xen=enabled
2593 elif
2594 cat > $TMPC <<EOF &&
2595 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2596 #include <xenforeignmemory.h>
2597 #include <xentoolcore.h>
2598 int main(void) {
2599 xenforeignmemory_handle *xfmem;
2601 xfmem = xenforeignmemory_open(0, 0);
2602 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2603 xentoolcore_restrict_all(0);
2605 return 0;
2608 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2609 then
2610 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2611 xen_ctrl_version=41000
2612 xen=enabled
2613 elif
2614 cat > $TMPC <<EOF &&
2615 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2616 #define __XEN_TOOLS__
2617 #include <xendevicemodel.h>
2618 int main(void) {
2619 xendevicemodel_handle *xd;
2621 xd = xendevicemodel_open(0, 0);
2622 xendevicemodel_close(xd);
2624 return 0;
2627 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2628 then
2629 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2630 xen_ctrl_version=40900
2631 xen=enabled
2632 elif
2633 cat > $TMPC <<EOF &&
2635 * If we have stable libs the we don't want the libxc compat
2636 * layers, regardless of what CFLAGS we may have been given.
2638 * Also, check if xengnttab_grant_copy_segment_t is defined and
2639 * grant copy operation is implemented.
2641 #undef XC_WANT_COMPAT_EVTCHN_API
2642 #undef XC_WANT_COMPAT_GNTTAB_API
2643 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2644 #include <xenctrl.h>
2645 #include <xenstore.h>
2646 #include <xenevtchn.h>
2647 #include <xengnttab.h>
2648 #include <xenforeignmemory.h>
2649 #include <stdint.h>
2650 #include <xen/hvm/hvm_info_table.h>
2651 #if !defined(HVM_MAX_VCPUS)
2652 # error HVM_MAX_VCPUS not defined
2653 #endif
2654 int main(void) {
2655 xc_interface *xc = NULL;
2656 xenforeignmemory_handle *xfmem;
2657 xenevtchn_handle *xe;
2658 xengnttab_handle *xg;
2659 xengnttab_grant_copy_segment_t* seg = NULL;
2661 xs_daemon_open();
2663 xc = xc_interface_open(0, 0, 0);
2664 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2665 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2666 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2667 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2669 xfmem = xenforeignmemory_open(0, 0);
2670 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2672 xe = xenevtchn_open(0, 0);
2673 xenevtchn_fd(xe);
2675 xg = xengnttab_open(0, 0);
2676 xengnttab_grant_copy(xg, 0, seg);
2678 return 0;
2681 compile_prog "" "$xen_libs $xen_stable_libs"
2682 then
2683 xen_ctrl_version=40800
2684 xen=enabled
2685 elif
2686 cat > $TMPC <<EOF &&
2688 * If we have stable libs the we don't want the libxc compat
2689 * layers, regardless of what CFLAGS we may have been given.
2691 #undef XC_WANT_COMPAT_EVTCHN_API
2692 #undef XC_WANT_COMPAT_GNTTAB_API
2693 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2694 #include <xenctrl.h>
2695 #include <xenstore.h>
2696 #include <xenevtchn.h>
2697 #include <xengnttab.h>
2698 #include <xenforeignmemory.h>
2699 #include <stdint.h>
2700 #include <xen/hvm/hvm_info_table.h>
2701 #if !defined(HVM_MAX_VCPUS)
2702 # error HVM_MAX_VCPUS not defined
2703 #endif
2704 int main(void) {
2705 xc_interface *xc = NULL;
2706 xenforeignmemory_handle *xfmem;
2707 xenevtchn_handle *xe;
2708 xengnttab_handle *xg;
2710 xs_daemon_open();
2712 xc = xc_interface_open(0, 0, 0);
2713 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2714 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2715 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2716 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2718 xfmem = xenforeignmemory_open(0, 0);
2719 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2721 xe = xenevtchn_open(0, 0);
2722 xenevtchn_fd(xe);
2724 xg = xengnttab_open(0, 0);
2725 xengnttab_map_grant_ref(xg, 0, 0, 0);
2727 return 0;
2730 compile_prog "" "$xen_libs $xen_stable_libs"
2731 then
2732 xen_ctrl_version=40701
2733 xen=enabled
2735 # Xen 4.6
2736 elif
2737 cat > $TMPC <<EOF &&
2738 #include <xenctrl.h>
2739 #include <xenstore.h>
2740 #include <stdint.h>
2741 #include <xen/hvm/hvm_info_table.h>
2742 #if !defined(HVM_MAX_VCPUS)
2743 # error HVM_MAX_VCPUS not defined
2744 #endif
2745 int main(void) {
2746 xc_interface *xc;
2747 xs_daemon_open();
2748 xc = xc_interface_open(0, 0, 0);
2749 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2750 xc_gnttab_open(NULL, 0);
2751 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2752 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2753 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2754 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2755 return 0;
2758 compile_prog "" "$xen_libs"
2759 then
2760 xen_ctrl_version=40600
2761 xen=enabled
2763 # Xen 4.5
2764 elif
2765 cat > $TMPC <<EOF &&
2766 #include <xenctrl.h>
2767 #include <xenstore.h>
2768 #include <stdint.h>
2769 #include <xen/hvm/hvm_info_table.h>
2770 #if !defined(HVM_MAX_VCPUS)
2771 # error HVM_MAX_VCPUS not defined
2772 #endif
2773 int main(void) {
2774 xc_interface *xc;
2775 xs_daemon_open();
2776 xc = xc_interface_open(0, 0, 0);
2777 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2778 xc_gnttab_open(NULL, 0);
2779 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2780 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2781 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2782 return 0;
2785 compile_prog "" "$xen_libs"
2786 then
2787 xen_ctrl_version=40500
2788 xen=enabled
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 return 0;
2810 compile_prog "" "$xen_libs"
2811 then
2812 xen_ctrl_version=40200
2813 xen=enabled
2815 else
2816 if test "$xen" = "enabled" ; then
2817 feature_not_found "xen (unsupported version)" \
2818 "Install a supported xen (xen 4.2 or newer)"
2820 xen=disabled
2823 if test "$xen" = enabled; then
2824 if test $xen_ctrl_version -ge 40701 ; then
2825 xen_libs="$xen_libs $xen_stable_libs "
2831 if test "$xen_pci_passthrough" != "disabled"; then
2832 if test "$xen" = "enabled" && test "$linux" = "yes"; then
2833 xen_pci_passthrough=enabled
2834 else
2835 if test "$xen_pci_passthrough" = "enabled"; then
2836 error_exit "User requested feature Xen PCI Passthrough" \
2837 " but this feature requires /sys from Linux"
2839 xen_pci_passthrough=disabled
2843 ##########################################
2844 # gettext probe
2845 if test "$gettext" != "false" ; then
2846 if has xgettext; then
2847 gettext=true
2848 else
2849 if test "$gettext" = "true" ; then
2850 feature_not_found "gettext" "Install xgettext binary"
2852 gettext=false
2856 ##########################################
2857 # X11 probe
2858 if $pkg_config --exists "x11"; then
2859 have_x11=yes
2860 x11_cflags=$($pkg_config --cflags x11)
2861 x11_libs=$($pkg_config --libs x11)
2864 ##########################################
2865 # GTK probe
2867 if test "$gtk" != "no"; then
2868 gtkpackage="gtk+-3.0"
2869 gtkx11package="gtk+-x11-3.0"
2870 gtkversion="3.22.0"
2871 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2872 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2873 gtk_libs=$($pkg_config --libs $gtkpackage)
2874 gtk_version=$($pkg_config --modversion $gtkpackage)
2875 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2876 need_x11=yes
2877 gtk_cflags="$gtk_cflags $x11_cflags"
2878 gtk_libs="$gtk_libs $x11_libs"
2880 gtk="yes"
2881 elif test "$gtk" = "yes"; then
2882 feature_not_found "gtk" "Install gtk3-devel"
2883 else
2884 gtk="no"
2889 ##########################################
2890 # GNUTLS probe
2892 if test "$gnutls" != "no"; then
2893 pass="no"
2894 if $pkg_config --exists "gnutls >= 3.1.18"; then
2895 gnutls_cflags=$($pkg_config --cflags gnutls)
2896 gnutls_libs=$($pkg_config --libs gnutls)
2897 # Packaging for the static libraries is not always correct.
2898 # At least ubuntu 18.04 ships only shared libraries.
2899 write_c_skeleton
2900 if compile_prog "" "$gnutls_libs" ; then
2901 pass="yes"
2904 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2905 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2906 else
2907 gnutls="$pass"
2912 # If user didn't give a --disable/enable-gcrypt flag,
2913 # then mark as disabled if user requested nettle
2914 # explicitly
2915 if test -z "$gcrypt"
2916 then
2917 if test "$nettle" = "yes"
2918 then
2919 gcrypt="no"
2923 # If user didn't give a --disable/enable-nettle flag,
2924 # then mark as disabled if user requested gcrypt
2925 # explicitly
2926 if test -z "$nettle"
2927 then
2928 if test "$gcrypt" = "yes"
2929 then
2930 nettle="no"
2934 has_libgcrypt() {
2935 if ! has "libgcrypt-config"
2936 then
2937 return 1
2940 if test -n "$cross_prefix"
2941 then
2942 host=$(libgcrypt-config --host)
2943 if test "$host-" != $cross_prefix
2944 then
2945 return 1
2949 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2950 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2952 if test $maj != 1 || test $min -lt 5
2953 then
2954 return 1
2957 return 0
2961 if test "$nettle" != "no"; then
2962 pass="no"
2963 if $pkg_config --exists "nettle >= 2.7.1"; then
2964 nettle_cflags=$($pkg_config --cflags nettle)
2965 nettle_libs=$($pkg_config --libs nettle)
2966 nettle_version=$($pkg_config --modversion nettle)
2967 # Link test to make sure the given libraries work (e.g for static).
2968 write_c_skeleton
2969 if compile_prog "" "$nettle_libs" ; then
2970 if test -z "$gcrypt"; then
2971 gcrypt="no"
2973 pass="yes"
2976 if test "$pass" = "yes"
2977 then
2978 cat > $TMPC << EOF
2979 #include <nettle/xts.h>
2980 int main(void) {
2981 return 0;
2984 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2985 nettle_xts=yes
2986 qemu_private_xts=no
2989 if test "$pass" = "no" && test "$nettle" = "yes"; then
2990 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2991 else
2992 nettle="$pass"
2996 if test "$gcrypt" != "no"; then
2997 pass="no"
2998 if has_libgcrypt; then
2999 gcrypt_cflags=$(libgcrypt-config --cflags)
3000 gcrypt_libs=$(libgcrypt-config --libs)
3001 # Debian has removed -lgpg-error from libgcrypt-config
3002 # as it "spreads unnecessary dependencies" which in
3003 # turn breaks static builds...
3004 if test "$static" = "yes"
3005 then
3006 gcrypt_libs="$gcrypt_libs -lgpg-error"
3009 # Link test to make sure the given libraries work (e.g for static).
3010 write_c_skeleton
3011 if compile_prog "" "$gcrypt_libs" ; then
3012 pass="yes"
3015 if test "$pass" = "yes"; then
3016 gcrypt="yes"
3017 cat > $TMPC << EOF
3018 #include <gcrypt.h>
3019 int main(void) {
3020 gcry_mac_hd_t handle;
3021 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3022 GCRY_MAC_FLAG_SECURE, NULL);
3023 return 0;
3026 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3027 gcrypt_hmac=yes
3029 cat > $TMPC << EOF
3030 #include <gcrypt.h>
3031 int main(void) {
3032 gcry_cipher_hd_t handle;
3033 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3034 return 0;
3037 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3038 gcrypt_xts=yes
3039 qemu_private_xts=no
3041 elif test "$gcrypt" = "yes"; then
3042 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3043 else
3044 gcrypt="no"
3049 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3050 then
3051 error_exit "Only one of gcrypt & nettle can be enabled"
3054 ##########################################
3055 # libtasn1 - only for the TLS creds/session test suite
3057 tasn1=yes
3058 tasn1_cflags=""
3059 tasn1_libs=""
3060 if $pkg_config --exists "libtasn1"; then
3061 tasn1_cflags=$($pkg_config --cflags libtasn1)
3062 tasn1_libs=$($pkg_config --libs libtasn1)
3063 else
3064 tasn1=no
3068 ##########################################
3069 # PAM probe
3071 if test "$auth_pam" != "no"; then
3072 cat > $TMPC <<EOF
3073 #include <security/pam_appl.h>
3074 #include <stdio.h>
3075 int main(void) {
3076 const char *service_name = "qemu";
3077 const char *user = "frank";
3078 const struct pam_conv pam_conv = { 0 };
3079 pam_handle_t *pamh = NULL;
3080 pam_start(service_name, user, &pam_conv, &pamh);
3081 return 0;
3084 if compile_prog "" "-lpam" ; then
3085 auth_pam=yes
3086 else
3087 if test "$auth_pam" = "yes"; then
3088 feature_not_found "PAM" "Install PAM development package"
3089 else
3090 auth_pam=no
3095 ##########################################
3096 # getifaddrs (for tests/test-io-channel-socket )
3098 have_ifaddrs_h=yes
3099 if ! check_include "ifaddrs.h" ; then
3100 have_ifaddrs_h=no
3103 #########################################
3104 # libdrm check
3105 have_drm_h=no
3106 if check_include "libdrm/drm.h" ; then
3107 have_drm_h=yes
3110 #########################################
3111 # sys/signal.h check
3112 have_sys_signal_h=no
3113 if check_include "sys/signal.h" ; then
3114 have_sys_signal_h=yes
3117 ##########################################
3118 # VTE probe
3120 if test "$vte" != "no"; then
3121 vteminversion="0.32.0"
3122 if $pkg_config --exists "vte-2.91"; then
3123 vtepackage="vte-2.91"
3124 else
3125 vtepackage="vte-2.90"
3127 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3128 vte_cflags=$($pkg_config --cflags $vtepackage)
3129 vte_libs=$($pkg_config --libs $vtepackage)
3130 vteversion=$($pkg_config --modversion $vtepackage)
3131 vte="yes"
3132 elif test "$vte" = "yes"; then
3133 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3134 else
3135 vte="no"
3139 ##########################################
3140 # RDMA needs OpenFabrics libraries
3141 if test "$rdma" != "no" ; then
3142 cat > $TMPC <<EOF
3143 #include <rdma/rdma_cma.h>
3144 int main(void) { return 0; }
3146 rdma_libs="-lrdmacm -libverbs -libumad"
3147 if compile_prog "" "$rdma_libs" ; then
3148 rdma="yes"
3149 else
3150 if test "$rdma" = "yes" ; then
3151 error_exit \
3152 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3153 " Your options:" \
3154 " (1) Fast: Install infiniband packages (devel) from your distro." \
3155 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3156 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3158 rdma="no"
3162 ##########################################
3163 # PVRDMA detection
3165 cat > $TMPC <<EOF &&
3166 #include <sys/mman.h>
3169 main(void)
3171 char buf = 0;
3172 void *addr = &buf;
3173 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3175 return 0;
3179 if test "$rdma" = "yes" ; then
3180 case "$pvrdma" in
3182 if compile_prog "" ""; then
3183 pvrdma="yes"
3184 else
3185 pvrdma="no"
3188 "yes")
3189 if ! compile_prog "" ""; then
3190 error_exit "PVRDMA is not supported since mremap is not implemented"
3192 pvrdma="yes"
3194 "no")
3195 pvrdma="no"
3197 esac
3198 else
3199 if test "$pvrdma" = "yes" ; then
3200 error_exit "PVRDMA requires rdma suppport"
3202 pvrdma="no"
3205 # Let's see if enhanced reg_mr is supported
3206 if test "$pvrdma" = "yes" ; then
3208 cat > $TMPC <<EOF &&
3209 #include <infiniband/verbs.h>
3212 main(void)
3214 struct ibv_mr *mr;
3215 struct ibv_pd *pd = NULL;
3216 size_t length = 10;
3217 uint64_t iova = 0;
3218 int access = 0;
3219 void *addr = NULL;
3221 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3223 ibv_dereg_mr(mr);
3225 return 0;
3228 if ! compile_prog "" "-libverbs"; then
3229 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3233 ##########################################
3234 # xfsctl() probe, used for file-posix.c
3235 if test "$xfs" != "no" ; then
3236 cat > $TMPC << EOF
3237 #include <stddef.h> /* NULL */
3238 #include <xfs/xfs.h>
3239 int main(void)
3241 xfsctl(NULL, 0, 0, NULL);
3242 return 0;
3245 if compile_prog "" "" ; then
3246 xfs="yes"
3247 else
3248 if test "$xfs" = "yes" ; then
3249 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
3251 xfs=no
3255 ##########################################
3256 # vde libraries probe
3257 if test "$vde" != "no" ; then
3258 vde_libs="-lvdeplug"
3259 cat > $TMPC << EOF
3260 #include <libvdeplug.h>
3261 int main(void)
3263 struct vde_open_args a = {0, 0, 0};
3264 char s[] = "";
3265 vde_open(s, s, &a);
3266 return 0;
3269 if compile_prog "" "$vde_libs" ; then
3270 vde=yes
3271 else
3272 if test "$vde" = "yes" ; then
3273 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3275 vde=no
3279 ##########################################
3280 # netmap support probe
3281 # Apart from looking for netmap headers, we make sure that the host API version
3282 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3283 # a minor/major version number. Minor new features will be marked with values up
3284 # to 15, and if something happens that requires a change to the backend we will
3285 # move above 15, submit the backend fixes and modify this two bounds.
3286 if test "$netmap" != "no" ; then
3287 cat > $TMPC << EOF
3288 #include <inttypes.h>
3289 #include <net/if.h>
3290 #include <net/netmap.h>
3291 #include <net/netmap_user.h>
3292 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3293 #error
3294 #endif
3295 int main(void) { return 0; }
3297 if compile_prog "" "" ; then
3298 netmap=yes
3299 else
3300 if test "$netmap" = "yes" ; then
3301 feature_not_found "netmap"
3303 netmap=no
3307 ##########################################
3308 # libcap-ng library probe
3309 if test "$cap_ng" != "no" ; then
3310 cap_libs="-lcap-ng"
3311 cat > $TMPC << EOF
3312 #include <cap-ng.h>
3313 int main(void)
3315 capng_capability_to_name(CAPNG_EFFECTIVE);
3316 return 0;
3319 if compile_prog "" "$cap_libs" ; then
3320 cap_ng=yes
3321 else
3322 if test "$cap_ng" = "yes" ; then
3323 feature_not_found "cap_ng" "Install libcap-ng devel"
3325 cap_ng=no
3329 ##########################################
3330 # Sound support libraries probe
3332 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3333 for drv in $audio_drv_list; do
3334 case $drv in
3335 alsa | try-alsa)
3336 if $pkg_config alsa --exists; then
3337 alsa_libs=$($pkg_config alsa --libs)
3338 alsa_cflags=$($pkg_config alsa --cflags)
3339 alsa=yes
3340 if test "$drv" = "try-alsa"; then
3341 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3343 else
3344 if test "$drv" = "try-alsa"; then
3345 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3346 else
3347 error_exit "$drv check failed" \
3348 "Make sure to have the $drv libs and headers installed."
3353 pa | try-pa)
3354 if $pkg_config libpulse --exists; then
3355 libpulse=yes
3356 pulse_libs=$($pkg_config libpulse --libs)
3357 pulse_cflags=$($pkg_config libpulse --cflags)
3358 if test "$drv" = "try-pa"; then
3359 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3361 else
3362 if test "$drv" = "try-pa"; then
3363 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3364 else
3365 error_exit "$drv check failed" \
3366 "Make sure to have the $drv libs and headers installed."
3371 sdl)
3372 if test "$sdl" = "no"; then
3373 error_exit "sdl not found or disabled, can not use sdl audio driver"
3377 try-sdl)
3378 if test "$sdl" = "no"; then
3379 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3380 else
3381 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3385 coreaudio)
3386 coreaudio_libs="-framework CoreAudio"
3389 dsound)
3390 dsound_libs="-lole32 -ldxguid"
3391 audio_win_int="yes"
3394 oss)
3395 oss_libs="$oss_lib"
3398 jack | try-jack)
3399 if $pkg_config jack --exists; then
3400 libjack=yes
3401 jack_libs=$($pkg_config jack --libs)
3402 if test "$drv" = "try-jack"; then
3403 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3405 else
3406 if test "$drv" = "try-jack"; then
3407 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3408 else
3409 error_exit "$drv check failed" \
3410 "Make sure to have the $drv libs and headers installed."
3416 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3417 error_exit "Unknown driver '$drv' selected" \
3418 "Possible drivers are: $audio_possible_drivers"
3421 esac
3422 done
3424 ##########################################
3425 # BrlAPI probe
3427 if test "$brlapi" != "no" ; then
3428 brlapi_libs="-lbrlapi"
3429 cat > $TMPC << EOF
3430 #include <brlapi.h>
3431 #include <stddef.h>
3432 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3434 if compile_prog "" "$brlapi_libs" ; then
3435 brlapi=yes
3436 else
3437 if test "$brlapi" = "yes" ; then
3438 feature_not_found "brlapi" "Install brlapi devel"
3440 brlapi=no
3444 ##########################################
3445 # curl probe
3446 if test "$curl" != "no" ; then
3447 if $pkg_config libcurl --exists; then
3448 curlconfig="$pkg_config libcurl"
3449 else
3450 curlconfig=curl-config
3452 cat > $TMPC << EOF
3453 #include <curl/curl.h>
3454 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3456 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3457 curl_libs=$($curlconfig --libs 2>/dev/null)
3458 if compile_prog "$curl_cflags" "$curl_libs" ; then
3459 curl=yes
3460 else
3461 if test "$curl" = "yes" ; then
3462 feature_not_found "curl" "Install libcurl devel"
3464 curl=no
3466 fi # test "$curl"
3468 ##########################################
3469 # glib support probe
3471 glib_req_ver=2.48
3472 glib_modules=gthread-2.0
3473 if test "$modules" = yes; then
3474 glib_modules="$glib_modules gmodule-export-2.0"
3476 if test "$plugins" = yes; then
3477 glib_modules="$glib_modules gmodule-2.0"
3480 for i in $glib_modules; do
3481 if $pkg_config --atleast-version=$glib_req_ver $i; then
3482 glib_cflags=$($pkg_config --cflags $i)
3483 glib_libs=$($pkg_config --libs $i)
3484 else
3485 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3487 done
3489 # This workaround is required due to a bug in pkg-config file for glib as it
3490 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3492 if test "$static" = yes && test "$mingw32" = yes; then
3493 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3496 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3497 gio=yes
3498 gio_cflags=$($pkg_config --cflags gio-2.0)
3499 gio_libs=$($pkg_config --libs gio-2.0)
3500 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3501 if [ ! -x "$gdbus_codegen" ]; then
3502 gdbus_codegen=
3504 else
3505 gio=no
3508 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3509 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3510 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3513 # Sanity check that the current size_t matches the
3514 # size that glib thinks it should be. This catches
3515 # problems on multi-arch where people try to build
3516 # 32-bit QEMU while pointing at 64-bit glib headers
3517 cat > $TMPC <<EOF
3518 #include <glib.h>
3519 #include <unistd.h>
3521 #define QEMU_BUILD_BUG_ON(x) \
3522 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3524 int main(void) {
3525 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3526 return 0;
3530 if ! compile_prog "$glib_cflags" "$glib_libs" ; then
3531 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3532 "You probably need to set PKG_CONFIG_LIBDIR"\
3533 "to point to the right pkg-config files for your"\
3534 "build target"
3537 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3538 cat > $TMPC << EOF
3539 #include <glib.h>
3540 int main(void) { return 0; }
3542 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3543 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3544 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3545 CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
3549 # Silence clang warnings triggered by glib < 2.57.2
3550 cat > $TMPC << EOF
3551 #include <glib.h>
3552 typedef struct Foo {
3553 int i;
3554 } Foo;
3555 static void foo_free(Foo *f)
3557 g_free(f);
3559 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3560 int main(void) { return 0; }
3562 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3563 if cc_has_warning_flag "-Wno-unused-function"; then
3564 glib_cflags="$glib_cflags -Wno-unused-function"
3565 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
3569 ##########################################
3570 # SHA command probe for modules
3571 if test "$modules" = yes; then
3572 shacmd_probe="sha1sum sha1 shasum"
3573 for c in $shacmd_probe; do
3574 if has $c; then
3575 shacmd="$c"
3576 break
3578 done
3579 if test "$shacmd" = ""; then
3580 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3584 ##########################################
3585 # pthread probe
3586 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3588 pthread=no
3589 cat > $TMPC << EOF
3590 #include <pthread.h>
3591 static void *f(void *p) { return NULL; }
3592 int main(void) {
3593 pthread_t thread;
3594 pthread_create(&thread, 0, f, 0);
3595 return 0;
3598 if compile_prog "" "" ; then
3599 pthread=yes
3600 else
3601 for pthread_lib in $PTHREADLIBS_LIST; do
3602 if compile_prog "" "$pthread_lib" ; then
3603 pthread=yes
3604 found=no
3605 for lib_entry in $LIBS; do
3606 if test "$lib_entry" = "$pthread_lib"; then
3607 found=yes
3608 break
3610 done
3611 if test "$found" = "no"; then
3612 LIBS="$pthread_lib $LIBS"
3614 PTHREAD_LIB="$pthread_lib"
3615 break
3617 done
3620 if test "$mingw32" != yes && test "$pthread" = no; then
3621 error_exit "pthread check failed" \
3622 "Make sure to have the pthread libs and headers installed."
3625 # check for pthread_setname_np with thread id
3626 pthread_setname_np_w_tid=no
3627 cat > $TMPC << EOF
3628 #include <pthread.h>
3630 static void *f(void *p) { return NULL; }
3631 int main(void)
3633 pthread_t thread;
3634 pthread_create(&thread, 0, f, 0);
3635 pthread_setname_np(thread, "QEMU");
3636 return 0;
3639 if compile_prog "" "$pthread_lib" ; then
3640 pthread_setname_np_w_tid=yes
3643 # check for pthread_setname_np without thread id
3644 pthread_setname_np_wo_tid=no
3645 cat > $TMPC << EOF
3646 #include <pthread.h>
3648 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3649 int main(void)
3651 pthread_t thread;
3652 pthread_create(&thread, 0, f, 0);
3653 return 0;
3656 if compile_prog "" "$pthread_lib" ; then
3657 pthread_setname_np_wo_tid=yes
3660 ##########################################
3661 # rbd probe
3662 if test "$rbd" != "no" ; then
3663 cat > $TMPC <<EOF
3664 #include <stdio.h>
3665 #include <rbd/librbd.h>
3666 int main(void) {
3667 rados_t cluster;
3668 rados_create(&cluster, NULL);
3669 return 0;
3672 rbd_libs="-lrbd -lrados"
3673 if compile_prog "" "$rbd_libs" ; then
3674 rbd=yes
3675 else
3676 if test "$rbd" = "yes" ; then
3677 feature_not_found "rados block device" "Install librbd/ceph devel"
3679 rbd=no
3683 ##########################################
3684 # libssh probe
3685 if test "$libssh" != "no" ; then
3686 if $pkg_config --exists libssh; then
3687 libssh_cflags=$($pkg_config libssh --cflags)
3688 libssh_libs=$($pkg_config libssh --libs)
3689 libssh=yes
3690 else
3691 if test "$libssh" = "yes" ; then
3692 error_exit "libssh required for --enable-libssh"
3694 libssh=no
3698 ##########################################
3699 # Check for libssh 0.8
3700 # This is done like this instead of using the LIBSSH_VERSION_* and
3701 # SSH_VERSION_* macros because some distributions in the past shipped
3702 # snapshots of the future 0.8 from Git, and those snapshots did not
3703 # have updated version numbers (still referring to 0.7.0).
3705 if test "$libssh" = "yes"; then
3706 cat > $TMPC <<EOF
3707 #include <libssh/libssh.h>
3708 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3710 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3711 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3715 ##########################################
3716 # linux-aio probe
3718 if test "$linux_aio" != "no" ; then
3719 cat > $TMPC <<EOF
3720 #include <libaio.h>
3721 #include <sys/eventfd.h>
3722 #include <stddef.h>
3723 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3725 if compile_prog "" "-laio" ; then
3726 linux_aio=yes
3727 else
3728 if test "$linux_aio" = "yes" ; then
3729 feature_not_found "linux AIO" "Install libaio devel"
3731 linux_aio=no
3734 ##########################################
3735 # linux-io-uring probe
3737 if test "$linux_io_uring" != "no" ; then
3738 if $pkg_config liburing; then
3739 linux_io_uring_cflags=$($pkg_config --cflags liburing)
3740 linux_io_uring_libs=$($pkg_config --libs liburing)
3741 linux_io_uring=yes
3742 else
3743 if test "$linux_io_uring" = "yes" ; then
3744 feature_not_found "linux io_uring" "Install liburing devel"
3746 linux_io_uring=no
3750 ##########################################
3751 # TPM emulation is only on POSIX
3753 if test "$tpm" = ""; then
3754 if test "$mingw32" = "yes"; then
3755 tpm=no
3756 else
3757 tpm=yes
3759 elif test "$tpm" = "yes"; then
3760 if test "$mingw32" = "yes" ; then
3761 error_exit "TPM emulation only available on POSIX systems"
3765 ##########################################
3766 # attr probe
3768 libattr_libs=
3769 if test "$attr" != "no" ; then
3770 cat > $TMPC <<EOF
3771 #include <stdio.h>
3772 #include <sys/types.h>
3773 #ifdef CONFIG_LIBATTR
3774 #include <attr/xattr.h>
3775 #else
3776 #include <sys/xattr.h>
3777 #endif
3778 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3780 if compile_prog "" "" ; then
3781 attr=yes
3782 # Older distros have <attr/xattr.h>, and need -lattr:
3783 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3784 attr=yes
3785 libattr_libs="-lattr"
3786 libattr=yes
3787 else
3788 if test "$attr" = "yes" ; then
3789 feature_not_found "ATTR" "Install libc6 or libattr devel"
3791 attr=no
3795 ##########################################
3796 # iovec probe
3797 cat > $TMPC <<EOF
3798 #include <sys/types.h>
3799 #include <sys/uio.h>
3800 #include <unistd.h>
3801 int main(void) { return sizeof(struct iovec); }
3803 iovec=no
3804 if compile_prog "" "" ; then
3805 iovec=yes
3808 ##########################################
3809 # preadv probe
3810 cat > $TMPC <<EOF
3811 #include <sys/types.h>
3812 #include <sys/uio.h>
3813 #include <unistd.h>
3814 int main(void) { return preadv(0, 0, 0, 0); }
3816 preadv=no
3817 if compile_prog "" "" ; then
3818 preadv=yes
3821 ##########################################
3822 # fdt probe
3824 case "$fdt" in
3825 auto | enabled | internal)
3826 # Simpler to always update submodule, even if not needed.
3827 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
3828 git_submodules="${git_submodules} dtc"
3831 esac
3833 ##########################################
3834 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3836 gbm="no"
3837 if $pkg_config gbm; then
3838 gbm_cflags="$($pkg_config --cflags gbm)"
3839 gbm_libs="$($pkg_config --libs gbm)"
3840 gbm="yes"
3843 if test "$opengl" != "no" ; then
3844 opengl_pkgs="epoxy gbm"
3845 if $pkg_config $opengl_pkgs; then
3846 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3847 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
3848 opengl=yes
3849 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3850 gtk_gl="yes"
3852 else
3853 if test "$opengl" = "yes" ; then
3854 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3856 opengl_cflags=""
3857 opengl_libs=""
3858 opengl=no
3862 if test "$opengl" = "yes"; then
3863 cat > $TMPC << EOF
3864 #include <epoxy/egl.h>
3865 #ifndef EGL_MESA_image_dma_buf_export
3866 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3867 #endif
3868 int main(void) { return 0; }
3870 if compile_prog "" "" ; then
3871 opengl_dmabuf=yes
3875 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
3876 for target in $target_list; do
3877 case $target in
3878 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
3879 need_x11=yes
3881 esac
3882 done
3885 ##########################################
3886 # libxml2 probe
3887 if test "$libxml2" != "no" ; then
3888 if $pkg_config --exists libxml-2.0; then
3889 libxml2="yes"
3890 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3891 libxml2_libs=$($pkg_config --libs libxml-2.0)
3892 else
3893 if test "$libxml2" = "yes"; then
3894 feature_not_found "libxml2" "Install libxml2 devel"
3896 libxml2="no"
3900 ##########################################
3901 # glusterfs probe
3902 if test "$glusterfs" != "no" ; then
3903 if $pkg_config --atleast-version=3 glusterfs-api; then
3904 glusterfs="yes"
3905 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3906 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3907 if $pkg_config --atleast-version=4 glusterfs-api; then
3908 glusterfs_xlator_opt="yes"
3910 if $pkg_config --atleast-version=5 glusterfs-api; then
3911 glusterfs_discard="yes"
3913 if $pkg_config --atleast-version=6 glusterfs-api; then
3914 glusterfs_fallocate="yes"
3915 glusterfs_zerofill="yes"
3917 cat > $TMPC << EOF
3918 #include <glusterfs/api/glfs.h>
3921 main(void)
3923 /* new glfs_ftruncate() passes two additional args */
3924 return glfs_ftruncate(NULL, 0, NULL, NULL);
3927 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
3928 glusterfs_ftruncate_has_stat="yes"
3930 cat > $TMPC << EOF
3931 #include <glusterfs/api/glfs.h>
3933 /* new glfs_io_cbk() passes two additional glfs_stat structs */
3934 static void
3935 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
3939 main(void)
3941 glfs_io_cbk iocb = &glusterfs_iocb;
3942 iocb(NULL, 0 , NULL, NULL, NULL);
3943 return 0;
3946 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
3947 glusterfs_iocb_has_stat="yes"
3949 else
3950 if test "$glusterfs" = "yes" ; then
3951 feature_not_found "GlusterFS backend support" \
3952 "Install glusterfs-api devel >= 3"
3954 glusterfs="no"
3958 # Check for inotify functions when we are building linux-user
3959 # emulator. This is done because older glibc versions don't
3960 # have syscall stubs for these implemented. In that case we
3961 # don't provide them even if kernel supports them.
3963 inotify=no
3964 cat > $TMPC << EOF
3965 #include <sys/inotify.h>
3968 main(void)
3970 /* try to start inotify */
3971 return inotify_init();
3974 if compile_prog "" "" ; then
3975 inotify=yes
3978 inotify1=no
3979 cat > $TMPC << EOF
3980 #include <sys/inotify.h>
3983 main(void)
3985 /* try to start inotify */
3986 return inotify_init1(0);
3989 if compile_prog "" "" ; then
3990 inotify1=yes
3993 # check if pipe2 is there
3994 pipe2=no
3995 cat > $TMPC << EOF
3996 #include <unistd.h>
3997 #include <fcntl.h>
3999 int main(void)
4001 int pipefd[2];
4002 return pipe2(pipefd, O_CLOEXEC);
4005 if compile_prog "" "" ; then
4006 pipe2=yes
4009 # check if accept4 is there
4010 accept4=no
4011 cat > $TMPC << EOF
4012 #include <sys/socket.h>
4013 #include <stddef.h>
4015 int main(void)
4017 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4018 return 0;
4021 if compile_prog "" "" ; then
4022 accept4=yes
4025 # check if tee/splice is there. vmsplice was added same time.
4026 splice=no
4027 cat > $TMPC << EOF
4028 #include <unistd.h>
4029 #include <fcntl.h>
4030 #include <limits.h>
4032 int main(void)
4034 int len, fd = 0;
4035 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4036 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4037 return 0;
4040 if compile_prog "" "" ; then
4041 splice=yes
4044 ##########################################
4045 # libnuma probe
4047 if test "$numa" != "no" ; then
4048 cat > $TMPC << EOF
4049 #include <numa.h>
4050 int main(void) { return numa_available(); }
4053 if compile_prog "" "-lnuma" ; then
4054 numa=yes
4055 numa_libs="-lnuma"
4056 else
4057 if test "$numa" = "yes" ; then
4058 feature_not_found "numa" "install numactl devel"
4060 numa=no
4064 malloc=system
4065 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4066 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4067 exit 1
4068 elif test "$tcmalloc" = "yes" ; then
4069 malloc=tcmalloc
4070 elif test "$jemalloc" = "yes" ; then
4071 malloc=jemalloc
4074 ##########################################
4075 # signalfd probe
4076 signalfd="no"
4077 cat > $TMPC << EOF
4078 #include <unistd.h>
4079 #include <sys/syscall.h>
4080 #include <signal.h>
4081 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4084 if compile_prog "" "" ; then
4085 signalfd=yes
4088 # check if optreset global is declared by <getopt.h>
4089 optreset="no"
4090 cat > $TMPC << EOF
4091 #include <getopt.h>
4092 int main(void) { return optreset; }
4095 if compile_prog "" "" ; then
4096 optreset=yes
4099 # check if eventfd is supported
4100 eventfd=no
4101 cat > $TMPC << EOF
4102 #include <sys/eventfd.h>
4104 int main(void)
4106 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4109 if compile_prog "" "" ; then
4110 eventfd=yes
4113 # check if memfd is supported
4114 memfd=no
4115 cat > $TMPC << EOF
4116 #include <sys/mman.h>
4118 int main(void)
4120 return memfd_create("foo", MFD_ALLOW_SEALING);
4123 if compile_prog "" "" ; then
4124 memfd=yes
4127 # check for usbfs
4128 have_usbfs=no
4129 if test "$linux_user" = "yes"; then
4130 cat > $TMPC << EOF
4131 #include <linux/usbdevice_fs.h>
4133 #ifndef USBDEVFS_GET_CAPABILITIES
4134 #error "USBDEVFS_GET_CAPABILITIES undefined"
4135 #endif
4137 #ifndef USBDEVFS_DISCONNECT_CLAIM
4138 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4139 #endif
4141 int main(void)
4143 return 0;
4146 if compile_prog "" ""; then
4147 have_usbfs=yes
4151 # check for fallocate
4152 fallocate=no
4153 cat > $TMPC << EOF
4154 #include <fcntl.h>
4156 int main(void)
4158 fallocate(0, 0, 0, 0);
4159 return 0;
4162 if compile_prog "" "" ; then
4163 fallocate=yes
4166 # check for fallocate hole punching
4167 fallocate_punch_hole=no
4168 cat > $TMPC << EOF
4169 #include <fcntl.h>
4170 #include <linux/falloc.h>
4172 int main(void)
4174 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4175 return 0;
4178 if compile_prog "" "" ; then
4179 fallocate_punch_hole=yes
4182 # check that fallocate supports range zeroing inside the file
4183 fallocate_zero_range=no
4184 cat > $TMPC << EOF
4185 #include <fcntl.h>
4186 #include <linux/falloc.h>
4188 int main(void)
4190 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4191 return 0;
4194 if compile_prog "" "" ; then
4195 fallocate_zero_range=yes
4198 # check for posix_fallocate
4199 posix_fallocate=no
4200 cat > $TMPC << EOF
4201 #include <fcntl.h>
4203 int main(void)
4205 posix_fallocate(0, 0, 0);
4206 return 0;
4209 if compile_prog "" "" ; then
4210 posix_fallocate=yes
4213 # check for sync_file_range
4214 sync_file_range=no
4215 cat > $TMPC << EOF
4216 #include <fcntl.h>
4218 int main(void)
4220 sync_file_range(0, 0, 0, 0);
4221 return 0;
4224 if compile_prog "" "" ; then
4225 sync_file_range=yes
4228 # check for linux/fiemap.h and FS_IOC_FIEMAP
4229 fiemap=no
4230 cat > $TMPC << EOF
4231 #include <sys/ioctl.h>
4232 #include <linux/fs.h>
4233 #include <linux/fiemap.h>
4235 int main(void)
4237 ioctl(0, FS_IOC_FIEMAP, 0);
4238 return 0;
4241 if compile_prog "" "" ; then
4242 fiemap=yes
4245 # check for dup3
4246 dup3=no
4247 cat > $TMPC << EOF
4248 #include <unistd.h>
4250 int main(void)
4252 dup3(0, 0, 0);
4253 return 0;
4256 if compile_prog "" "" ; then
4257 dup3=yes
4260 # check for ppoll support
4261 ppoll=no
4262 cat > $TMPC << EOF
4263 #include <poll.h>
4265 int main(void)
4267 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4268 ppoll(&pfd, 1, 0, 0);
4269 return 0;
4272 if compile_prog "" "" ; then
4273 ppoll=yes
4276 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4277 prctl_pr_set_timerslack=no
4278 cat > $TMPC << EOF
4279 #include <sys/prctl.h>
4281 int main(void)
4283 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4284 return 0;
4287 if compile_prog "" "" ; then
4288 prctl_pr_set_timerslack=yes
4291 # check for epoll support
4292 epoll=no
4293 cat > $TMPC << EOF
4294 #include <sys/epoll.h>
4296 int main(void)
4298 epoll_create(0);
4299 return 0;
4302 if compile_prog "" "" ; then
4303 epoll=yes
4306 # epoll_create1 is a later addition
4307 # so we must check separately for its presence
4308 epoll_create1=no
4309 cat > $TMPC << EOF
4310 #include <sys/epoll.h>
4312 int main(void)
4314 /* Note that we use epoll_create1 as a value, not as
4315 * a function being called. This is necessary so that on
4316 * old SPARC glibc versions where the function was present in
4317 * the library but not declared in the header file we will
4318 * fail the configure check. (Otherwise we will get a compiler
4319 * warning but not an error, and will proceed to fail the
4320 * qemu compile where we compile with -Werror.)
4322 return (int)(uintptr_t)&epoll_create1;
4325 if compile_prog "" "" ; then
4326 epoll_create1=yes
4329 # check for sendfile support
4330 sendfile=no
4331 cat > $TMPC << EOF
4332 #include <sys/sendfile.h>
4334 int main(void)
4336 return sendfile(0, 0, 0, 0);
4339 if compile_prog "" "" ; then
4340 sendfile=yes
4343 # check for timerfd support (glibc 2.8 and newer)
4344 timerfd=no
4345 cat > $TMPC << EOF
4346 #include <sys/timerfd.h>
4348 int main(void)
4350 return(timerfd_create(CLOCK_REALTIME, 0));
4353 if compile_prog "" "" ; then
4354 timerfd=yes
4357 # check for setns and unshare support
4358 setns=no
4359 cat > $TMPC << EOF
4360 #include <sched.h>
4362 int main(void)
4364 int ret;
4365 ret = setns(0, 0);
4366 ret = unshare(0);
4367 return ret;
4370 if compile_prog "" "" ; then
4371 setns=yes
4374 # clock_adjtime probe
4375 clock_adjtime=no
4376 cat > $TMPC <<EOF
4377 #include <time.h>
4379 int main(void)
4381 return clock_adjtime(0, 0);
4384 clock_adjtime=no
4385 if compile_prog "" "" ; then
4386 clock_adjtime=yes
4389 # syncfs probe
4390 syncfs=no
4391 cat > $TMPC <<EOF
4392 #include <unistd.h>
4394 int main(void)
4396 return syncfs(0);
4399 syncfs=no
4400 if compile_prog "" "" ; then
4401 syncfs=yes
4404 # check for kcov support (kernel must be 4.4+, compiled with certain options)
4405 kcov=no
4406 if check_include sys/kcov.h ; then
4407 kcov=yes
4410 # check for btrfs filesystem support (kernel must be 3.9+)
4411 btrfs=no
4412 if check_include linux/btrfs.h ; then
4413 btrfs=yes
4416 # If we're making warnings fatal, apply this to Sphinx runs as well
4417 sphinx_werror=""
4418 if test "$werror" = "yes"; then
4419 sphinx_werror="-W"
4422 # Check we have a new enough version of sphinx-build
4423 has_sphinx_build() {
4424 # This is a bit awkward but works: create a trivial document and
4425 # try to run it with our configuration file (which enforces a
4426 # version requirement). This will fail if either
4427 # sphinx-build doesn't exist at all or if it is too old.
4428 mkdir -p "$TMPDIR1/sphinx"
4429 touch "$TMPDIR1/sphinx/index.rst"
4430 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \
4431 -b html "$TMPDIR1/sphinx" \
4432 "$TMPDIR1/sphinx/out" >> config.log 2>&1
4435 # Check if tools are available to build documentation.
4436 if test "$docs" != "no" ; then
4437 if has_sphinx_build; then
4438 sphinx_ok=yes
4439 else
4440 sphinx_ok=no
4442 if test "$sphinx_ok" = "yes"; then
4443 docs=yes
4444 else
4445 if test "$docs" = "yes" ; then
4446 if has $sphinx_build && test "$sphinx_ok" != "yes"; then
4447 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
4449 feature_not_found "docs" "Install a Python 3 version of python-sphinx"
4451 docs=no
4455 # Search for bswap_32 function
4456 byteswap_h=no
4457 cat > $TMPC << EOF
4458 #include <byteswap.h>
4459 int main(void) { return bswap_32(0); }
4461 if compile_prog "" "" ; then
4462 byteswap_h=yes
4465 # Search for bswap32 function
4466 bswap_h=no
4467 cat > $TMPC << EOF
4468 #include <sys/endian.h>
4469 #include <sys/types.h>
4470 #include <machine/bswap.h>
4471 int main(void) { return bswap32(0); }
4473 if compile_prog "" "" ; then
4474 bswap_h=yes
4477 ##########################################
4478 # Do we have libiscsi >= 1.9.0
4479 if test "$libiscsi" != "no" ; then
4480 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4481 libiscsi="yes"
4482 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4483 libiscsi_libs=$($pkg_config --libs libiscsi)
4484 else
4485 if test "$libiscsi" = "yes" ; then
4486 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4488 libiscsi="no"
4492 ##########################################
4493 # Do we need librt
4494 # uClibc provides 2 versions of clock_gettime(), one with realtime
4495 # support and one without. This means that the clock_gettime() don't
4496 # need -lrt. We still need it for timer_create() so we check for this
4497 # function in addition.
4498 cat > $TMPC <<EOF
4499 #include <signal.h>
4500 #include <time.h>
4501 int main(void) {
4502 timer_create(CLOCK_REALTIME, NULL, NULL);
4503 return clock_gettime(CLOCK_REALTIME, NULL);
4507 if compile_prog "" "" ; then
4509 # we need pthread for static linking. use previous pthread test result
4510 elif compile_prog "" "$pthread_lib -lrt" ; then
4511 LIBS="$LIBS -lrt"
4514 # Check whether we have openpty() in either libc or libutil
4515 cat > $TMPC << EOF
4516 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4517 int main(void) { return openpty(0, 0, 0, 0, 0); }
4520 have_openpty="no"
4521 if compile_prog "" "" ; then
4522 have_openpty="yes"
4523 else
4524 if compile_prog "" "-lutil" ; then
4525 have_openpty="yes"
4529 ##########################################
4530 # spice probe
4531 if test "$spice" != "no" ; then
4532 cat > $TMPC << EOF
4533 #include <spice.h>
4534 int main(void) { spice_server_new(); return 0; }
4536 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4537 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4538 if $pkg_config --atleast-version=0.12.5 spice-server && \
4539 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4540 compile_prog "$spice_cflags" "$spice_libs" ; then
4541 spice="yes"
4542 else
4543 if test "$spice" = "yes" ; then
4544 feature_not_found "spice" \
4545 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4547 spice="no"
4551 # check for smartcard support
4552 if test "$smartcard" != "no"; then
4553 if $pkg_config --atleast-version=2.5.1 libcacard; then
4554 libcacard_cflags=$($pkg_config --cflags libcacard)
4555 libcacard_libs=$($pkg_config --libs libcacard)
4556 smartcard="yes"
4557 else
4558 if test "$smartcard" = "yes"; then
4559 feature_not_found "smartcard" "Install libcacard devel"
4561 smartcard="no"
4565 # check for libusb
4566 if test "$libusb" != "no" ; then
4567 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4568 libusb="yes"
4569 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4570 libusb_libs=$($pkg_config --libs libusb-1.0)
4571 else
4572 if test "$libusb" = "yes"; then
4573 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4575 libusb="no"
4579 # check for usbredirparser for usb network redirection support
4580 if test "$usb_redir" != "no" ; then
4581 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4582 usb_redir="yes"
4583 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4584 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4585 else
4586 if test "$usb_redir" = "yes"; then
4587 feature_not_found "usb-redir" "Install usbredir devel"
4589 usb_redir="no"
4593 ##########################################
4594 # check if we have VSS SDK headers for win
4596 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4597 test "$vss_win32_sdk" != "no" ; then
4598 case "$vss_win32_sdk" in
4599 "") vss_win32_include="-isystem $source_path" ;;
4600 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4601 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4602 vss_win32_include="-isystem $source_path/.sdk/vss"
4603 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4605 *) vss_win32_include="-isystem $vss_win32_sdk"
4606 esac
4607 cat > $TMPC << EOF
4608 #define __MIDL_user_allocate_free_DEFINED__
4609 #include <inc/win2003/vss.h>
4610 int main(void) { return VSS_CTX_BACKUP; }
4612 if compile_prog "$vss_win32_include" "" ; then
4613 guest_agent_with_vss="yes"
4614 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4615 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4616 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4617 else
4618 if test "$vss_win32_sdk" != "" ; then
4619 echo "ERROR: Please download and install Microsoft VSS SDK:"
4620 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4621 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4622 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4623 echo "ERROR: The headers are extracted in the directory \`inc'."
4624 feature_not_found "VSS support"
4626 guest_agent_with_vss="no"
4630 ##########################################
4631 # lookup Windows platform SDK (if not specified)
4632 # The SDK is needed only to build .tlb (type library) file of guest agent
4633 # VSS provider from the source. It is usually unnecessary because the
4634 # pre-compiled .tlb file is included.
4636 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4637 test "$guest_agent_with_vss" = "yes" ; then
4638 if test -z "$win_sdk"; then
4639 programfiles="$PROGRAMFILES"
4640 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4641 if test -n "$programfiles"; then
4642 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4643 else
4644 feature_not_found "Windows SDK"
4646 elif test "$win_sdk" = "no"; then
4647 win_sdk=""
4651 ##########################################
4652 # check if mingw environment provides a recent ntddscsi.h
4653 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4654 cat > $TMPC << EOF
4655 #include <windows.h>
4656 #include <ntddscsi.h>
4657 int main(void) {
4658 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4659 #error Missing required ioctl definitions
4660 #endif
4661 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4662 return addr.Lun;
4665 if compile_prog "" "" ; then
4666 guest_agent_ntddscsi=yes
4667 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4671 ##########################################
4672 # virgl renderer probe
4674 if test "$virglrenderer" != "no" ; then
4675 cat > $TMPC << EOF
4676 #include <virglrenderer.h>
4677 int main(void) { virgl_renderer_poll(); return 0; }
4679 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4680 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4681 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4682 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4683 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4684 virglrenderer="yes"
4685 else
4686 if test "$virglrenderer" = "yes" ; then
4687 feature_not_found "virglrenderer"
4689 virglrenderer="no"
4693 ##########################################
4694 # capstone
4696 case "$capstone" in
4697 auto | enabled | internal)
4698 # Simpler to always update submodule, even if not needed.
4699 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
4700 git_submodules="${git_submodules} capstone"
4703 esac
4705 ##########################################
4706 # check if we have fdatasync
4708 fdatasync=no
4709 cat > $TMPC << EOF
4710 #include <unistd.h>
4711 int main(void) {
4712 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4713 return fdatasync(0);
4714 #else
4715 #error Not supported
4716 #endif
4719 if compile_prog "" "" ; then
4720 fdatasync=yes
4723 ##########################################
4724 # check if we have madvise
4726 madvise=no
4727 cat > $TMPC << EOF
4728 #include <sys/types.h>
4729 #include <sys/mman.h>
4730 #include <stddef.h>
4731 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4733 if compile_prog "" "" ; then
4734 madvise=yes
4737 ##########################################
4738 # check if we have posix_madvise
4740 posix_madvise=no
4741 cat > $TMPC << EOF
4742 #include <sys/mman.h>
4743 #include <stddef.h>
4744 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4746 if compile_prog "" "" ; then
4747 posix_madvise=yes
4750 ##########################################
4751 # check if we have posix_memalign()
4753 posix_memalign=no
4754 cat > $TMPC << EOF
4755 #include <stdlib.h>
4756 int main(void) {
4757 void *p;
4758 return posix_memalign(&p, 8, 8);
4761 if compile_prog "" "" ; then
4762 posix_memalign=yes
4765 ##########################################
4766 # check if we have posix_syslog
4768 posix_syslog=no
4769 cat > $TMPC << EOF
4770 #include <syslog.h>
4771 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4773 if compile_prog "" "" ; then
4774 posix_syslog=yes
4777 ##########################################
4778 # check if we have sem_timedwait
4780 sem_timedwait=no
4781 cat > $TMPC << EOF
4782 #include <semaphore.h>
4783 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
4785 if compile_prog "" "" ; then
4786 sem_timedwait=yes
4789 ##########################################
4790 # check if we have strchrnul
4792 strchrnul=no
4793 cat > $TMPC << EOF
4794 #include <string.h>
4795 int main(void);
4796 // Use a haystack that the compiler shouldn't be able to constant fold
4797 char *haystack = (char*)&main;
4798 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4800 if compile_prog "" "" ; then
4801 strchrnul=yes
4804 #########################################
4805 # check if we have st_atim
4807 st_atim=no
4808 cat > $TMPC << EOF
4809 #include <sys/stat.h>
4810 #include <stddef.h>
4811 int main(void) { return offsetof(struct stat, st_atim); }
4813 if compile_prog "" "" ; then
4814 st_atim=yes
4817 ##########################################
4818 # check if trace backend exists
4820 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4821 if test "$?" -ne 0 ; then
4822 error_exit "invalid trace backends" \
4823 "Please choose supported trace backends."
4826 ##########################################
4827 # For 'ust' backend, test if ust headers are present
4828 if have_backend "ust"; then
4829 cat > $TMPC << EOF
4830 #include <lttng/tracepoint.h>
4831 int main(void) { return 0; }
4833 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4834 if $pkg_config lttng-ust --exists; then
4835 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4836 else
4837 lttng_ust_libs="-llttng-ust -ldl"
4839 if $pkg_config liburcu-bp --exists; then
4840 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4841 else
4842 urcu_bp_libs="-lurcu-bp"
4844 else
4845 error_exit "Trace backend 'ust' missing lttng-ust header files"
4849 ##########################################
4850 # For 'dtrace' backend, test if 'dtrace' command is present
4851 if have_backend "dtrace"; then
4852 if ! has 'dtrace' ; then
4853 error_exit "dtrace command is not found in PATH $PATH"
4855 trace_backend_stap="no"
4856 if has 'stap' ; then
4857 trace_backend_stap="yes"
4861 ##########################################
4862 # check and set a backend for coroutine
4864 # We prefer ucontext, but it's not always possible. The fallback
4865 # is sigcontext. On Windows the only valid backend is the Windows
4866 # specific one.
4868 ucontext_works=no
4869 if test "$darwin" != "yes"; then
4870 cat > $TMPC << EOF
4871 #include <ucontext.h>
4872 #ifdef __stub_makecontext
4873 #error Ignoring glibc stub makecontext which will always fail
4874 #endif
4875 int main(void) { makecontext(0, 0, 0); return 0; }
4877 if compile_prog "" "" ; then
4878 ucontext_works=yes
4882 if test "$coroutine" = ""; then
4883 if test "$mingw32" = "yes"; then
4884 coroutine=win32
4885 elif test "$ucontext_works" = "yes"; then
4886 coroutine=ucontext
4887 else
4888 coroutine=sigaltstack
4890 else
4891 case $coroutine in
4892 windows)
4893 if test "$mingw32" != "yes"; then
4894 error_exit "'windows' coroutine backend only valid for Windows"
4896 # Unfortunately the user visible backend name doesn't match the
4897 # coroutine-*.c filename for this case, so we have to adjust it here.
4898 coroutine=win32
4900 ucontext)
4901 if test "$ucontext_works" != "yes"; then
4902 feature_not_found "ucontext"
4905 sigaltstack)
4906 if test "$mingw32" = "yes"; then
4907 error_exit "only the 'windows' coroutine backend is valid for Windows"
4911 error_exit "unknown coroutine backend $coroutine"
4913 esac
4916 if test "$coroutine_pool" = ""; then
4917 coroutine_pool=yes
4920 if test "$debug_stack_usage" = "yes"; then
4921 if test "$coroutine_pool" = "yes"; then
4922 echo "WARN: disabling coroutine pool for stack usage debugging"
4923 coroutine_pool=no
4927 ##################################################
4928 # SafeStack
4931 if test "$safe_stack" = "yes"; then
4932 cat > $TMPC << EOF
4933 int main(int argc, char *argv[])
4935 #if ! __has_feature(safe_stack)
4936 #error SafeStack Disabled
4937 #endif
4938 return 0;
4941 flag="-fsanitize=safe-stack"
4942 # Check that safe-stack is supported and enabled.
4943 if compile_prog "-Werror $flag" "$flag"; then
4944 # Flag needed both at compilation and at linking
4945 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4946 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4947 else
4948 error_exit "SafeStack not supported by your compiler"
4950 if test "$coroutine" != "ucontext"; then
4951 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4953 else
4954 cat > $TMPC << EOF
4955 int main(int argc, char *argv[])
4957 #if defined(__has_feature)
4958 #if __has_feature(safe_stack)
4959 #error SafeStack Enabled
4960 #endif
4961 #endif
4962 return 0;
4965 if test "$safe_stack" = "no"; then
4966 # Make sure that safe-stack is disabled
4967 if ! compile_prog "-Werror" ""; then
4968 # SafeStack was already enabled, try to explicitly remove the feature
4969 flag="-fno-sanitize=safe-stack"
4970 if ! compile_prog "-Werror $flag" "$flag"; then
4971 error_exit "Configure cannot disable SafeStack"
4973 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4974 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4976 else # "$safe_stack" = ""
4977 # Set safe_stack to yes or no based on pre-existing flags
4978 if compile_prog "-Werror" ""; then
4979 safe_stack="no"
4980 else
4981 safe_stack="yes"
4982 if test "$coroutine" != "ucontext"; then
4983 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4989 ##########################################
4990 # check if we have open_by_handle_at
4992 open_by_handle_at=no
4993 cat > $TMPC << EOF
4994 #include <fcntl.h>
4995 #if !defined(AT_EMPTY_PATH)
4996 # error missing definition
4997 #else
4998 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4999 #endif
5001 if compile_prog "" "" ; then
5002 open_by_handle_at=yes
5005 ########################################
5006 # check if we have linux/magic.h
5008 linux_magic_h=no
5009 cat > $TMPC << EOF
5010 #include <linux/magic.h>
5011 int main(void) {
5012 return 0;
5015 if compile_prog "" "" ; then
5016 linux_magic_h=yes
5019 ########################################
5020 # check if we have valgrind/valgrind.h
5022 valgrind_h=no
5023 cat > $TMPC << EOF
5024 #include <valgrind/valgrind.h>
5025 int main(void) {
5026 return 0;
5029 if compile_prog "" "" ; then
5030 valgrind_h=yes
5033 ########################################
5034 # check if environ is declared
5036 has_environ=no
5037 cat > $TMPC << EOF
5038 #include <unistd.h>
5039 int main(void) {
5040 environ = 0;
5041 return 0;
5044 if compile_prog "" "" ; then
5045 has_environ=yes
5048 ########################################
5049 # check if cpuid.h is usable.
5051 cat > $TMPC << EOF
5052 #include <cpuid.h>
5053 int main(void) {
5054 unsigned a, b, c, d;
5055 int max = __get_cpuid_max(0, 0);
5057 if (max >= 1) {
5058 __cpuid(1, a, b, c, d);
5061 if (max >= 7) {
5062 __cpuid_count(7, 0, a, b, c, d);
5065 return 0;
5068 if compile_prog "" "" ; then
5069 cpuid_h=yes
5072 ##########################################
5073 # avx2 optimization requirement check
5075 # There is no point enabling this if cpuid.h is not usable,
5076 # since we won't be able to select the new routines.
5078 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5079 cat > $TMPC << EOF
5080 #pragma GCC push_options
5081 #pragma GCC target("avx2")
5082 #include <cpuid.h>
5083 #include <immintrin.h>
5084 static int bar(void *a) {
5085 __m256i x = *(__m256i *)a;
5086 return _mm256_testz_si256(x, x);
5088 int main(int argc, char *argv[]) { return bar(argv[0]); }
5090 if compile_object "" ; then
5091 avx2_opt="yes"
5092 else
5093 avx2_opt="no"
5097 ##########################################
5098 # avx512f optimization requirement check
5100 # There is no point enabling this if cpuid.h is not usable,
5101 # since we won't be able to select the new routines.
5102 # by default, it is turned off.
5103 # if user explicitly want to enable it, check environment
5105 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5106 cat > $TMPC << EOF
5107 #pragma GCC push_options
5108 #pragma GCC target("avx512f")
5109 #include <cpuid.h>
5110 #include <immintrin.h>
5111 static int bar(void *a) {
5112 __m512i x = *(__m512i *)a;
5113 return _mm512_test_epi64_mask(x, x);
5115 int main(int argc, char *argv[])
5117 return bar(argv[0]);
5120 if ! compile_object "" ; then
5121 avx512f_opt="no"
5123 else
5124 avx512f_opt="no"
5127 ########################################
5128 # check if __[u]int128_t is usable.
5130 int128=no
5131 cat > $TMPC << EOF
5132 __int128_t a;
5133 __uint128_t b;
5134 int main (void) {
5135 a = a + b;
5136 b = a * b;
5137 a = a * a;
5138 return 0;
5141 if compile_prog "" "" ; then
5142 int128=yes
5145 #########################################
5146 # See if 128-bit atomic operations are supported.
5148 atomic128=no
5149 if test "$int128" = "yes"; then
5150 cat > $TMPC << EOF
5151 int main(void)
5153 unsigned __int128 x = 0, y = 0;
5154 y = __atomic_load_16(&x, 0);
5155 __atomic_store_16(&x, y, 0);
5156 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5157 return 0;
5160 if compile_prog "" "" ; then
5161 atomic128=yes
5165 cmpxchg128=no
5166 if test "$int128" = yes && test "$atomic128" = no; then
5167 cat > $TMPC << EOF
5168 int main(void)
5170 unsigned __int128 x = 0, y = 0;
5171 __sync_val_compare_and_swap_16(&x, y, x);
5172 return 0;
5175 if compile_prog "" "" ; then
5176 cmpxchg128=yes
5180 #########################################
5181 # See if 64-bit atomic operations are supported.
5182 # Note that without __atomic builtins, we can only
5183 # assume atomic loads/stores max at pointer size.
5185 cat > $TMPC << EOF
5186 #include <stdint.h>
5187 int main(void)
5189 uint64_t x = 0, y = 0;
5190 #ifdef __ATOMIC_RELAXED
5191 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
5192 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
5193 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
5194 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
5195 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
5196 #else
5197 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5198 __sync_lock_test_and_set(&x, y);
5199 __sync_val_compare_and_swap(&x, y, 0);
5200 __sync_fetch_and_add(&x, y);
5201 #endif
5202 return 0;
5205 if compile_prog "" "" ; then
5206 atomic64=yes
5209 #########################################
5210 # See if --dynamic-list is supported by the linker
5211 ld_dynamic_list="no"
5212 if test "$static" = "no" ; then
5213 cat > $TMPTXT <<EOF
5215 foo;
5219 cat > $TMPC <<EOF
5220 #include <stdio.h>
5221 void foo(void);
5223 void foo(void)
5225 printf("foo\n");
5228 int main(void)
5230 foo();
5231 return 0;
5235 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5236 ld_dynamic_list="yes"
5240 #########################################
5241 # See if -exported_symbols_list is supported by the linker
5243 ld_exported_symbols_list="no"
5244 if test "$static" = "no" ; then
5245 cat > $TMPTXT <<EOF
5246 _foo
5249 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5250 ld_exported_symbols_list="yes"
5254 if test "$plugins" = "yes" &&
5255 test "$ld_dynamic_list" = "no" &&
5256 test "$ld_exported_symbols_list" = "no" ; then
5257 error_exit \
5258 "Plugin support requires dynamic linking and specifying a set of symbols " \
5259 "that are exported to plugins. Unfortunately your linker doesn't " \
5260 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5261 "for this purpose. You can't build with --static."
5264 ########################################
5265 # See if __attribute__((alias)) is supported.
5266 # This false for Xcode 9, but has been remedied for Xcode 10.
5267 # Unfortunately, travis uses Xcode 9 by default.
5269 attralias=no
5270 cat > $TMPC << EOF
5271 int x = 1;
5272 extern const int y __attribute__((alias("x")));
5273 int main(void) { return 0; }
5275 if compile_prog "" "" ; then
5276 attralias=yes
5279 ########################################
5280 # check if getauxval is available.
5282 getauxval=no
5283 cat > $TMPC << EOF
5284 #include <sys/auxv.h>
5285 int main(void) {
5286 return getauxval(AT_HWCAP) == 0;
5289 if compile_prog "" "" ; then
5290 getauxval=yes
5293 ########################################
5294 # check if ccache is interfering with
5295 # semantic analysis of macros
5297 unset CCACHE_CPP2
5298 ccache_cpp2=no
5299 cat > $TMPC << EOF
5300 static const int Z = 1;
5301 #define fn() ({ Z; })
5302 #define TAUT(X) ((X) == Z)
5303 #define PAREN(X, Y) (X == Y)
5304 #define ID(X) (X)
5305 int main(int argc, char *argv[])
5307 int x = 0, y = 0;
5308 x = ID(x);
5309 x = fn();
5310 fn();
5311 if (PAREN(x, y)) return 0;
5312 if (TAUT(Z)) return 0;
5313 return 0;
5317 if ! compile_object "-Werror"; then
5318 ccache_cpp2=yes
5321 #################################################
5322 # clang does not support glibc + FORTIFY_SOURCE.
5324 if test "$fortify_source" != "no"; then
5325 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5326 fortify_source="no";
5327 elif test -n "$cxx" && has $cxx &&
5328 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5329 fortify_source="no";
5330 else
5331 fortify_source="yes"
5335 ###############################################
5336 # Check if copy_file_range is provided by glibc
5337 have_copy_file_range=no
5338 cat > $TMPC << EOF
5339 #include <unistd.h>
5340 int main(void) {
5341 copy_file_range(0, NULL, 0, NULL, 0, 0);
5342 return 0;
5345 if compile_prog "" "" ; then
5346 have_copy_file_range=yes
5349 ##########################################
5350 # check if struct fsxattr is available via linux/fs.h
5352 have_fsxattr=no
5353 cat > $TMPC << EOF
5354 #include <linux/fs.h>
5355 struct fsxattr foo;
5356 int main(void) {
5357 return 0;
5360 if compile_prog "" "" ; then
5361 have_fsxattr=yes
5364 ##########################################
5365 # check for usable membarrier system call
5366 if test "$membarrier" = "yes"; then
5367 have_membarrier=no
5368 if test "$mingw32" = "yes" ; then
5369 have_membarrier=yes
5370 elif test "$linux" = "yes" ; then
5371 cat > $TMPC << EOF
5372 #include <linux/membarrier.h>
5373 #include <sys/syscall.h>
5374 #include <unistd.h>
5375 #include <stdlib.h>
5376 int main(void) {
5377 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5378 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5379 exit(0);
5382 if compile_prog "" "" ; then
5383 have_membarrier=yes
5386 if test "$have_membarrier" = "no"; then
5387 feature_not_found "membarrier" "membarrier system call not available"
5389 else
5390 # Do not enable it by default even for Mingw32, because it doesn't
5391 # work on Wine.
5392 membarrier=no
5395 ##########################################
5396 # check if rtnetlink.h exists and is useful
5397 have_rtnetlink=no
5398 cat > $TMPC << EOF
5399 #include <linux/rtnetlink.h>
5400 int main(void) {
5401 return IFLA_PROTO_DOWN;
5404 if compile_prog "" "" ; then
5405 have_rtnetlink=yes
5408 ##########################################
5409 # check for usable AF_VSOCK environment
5410 have_af_vsock=no
5411 cat > $TMPC << EOF
5412 #include <errno.h>
5413 #include <sys/types.h>
5414 #include <sys/socket.h>
5415 #if !defined(AF_VSOCK)
5416 # error missing AF_VSOCK flag
5417 #endif
5418 #include <linux/vm_sockets.h>
5419 int main(void) {
5420 int sock, ret;
5421 struct sockaddr_vm svm;
5422 socklen_t len = sizeof(svm);
5423 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5424 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5425 if ((ret == -1) && (errno == ENOTCONN)) {
5426 return 0;
5428 return -1;
5431 if compile_prog "" "" ; then
5432 have_af_vsock=yes
5435 ##########################################
5436 # check for usable AF_ALG environment
5437 have_afalg=no
5438 cat > $TMPC << EOF
5439 #include <errno.h>
5440 #include <sys/types.h>
5441 #include <sys/socket.h>
5442 #include <linux/if_alg.h>
5443 int main(void) {
5444 int sock;
5445 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5446 return sock;
5449 if compile_prog "" "" ; then
5450 have_afalg=yes
5452 if test "$crypto_afalg" = "yes"
5453 then
5454 if test "$have_afalg" != "yes"
5455 then
5456 error_exit "AF_ALG requested but could not be detected"
5461 #################################################
5462 # check for sysmacros.h
5464 have_sysmacros=no
5465 cat > $TMPC << EOF
5466 #include <sys/sysmacros.h>
5467 int main(void) {
5468 return makedev(0, 0);
5471 if compile_prog "" "" ; then
5472 have_sysmacros=yes
5475 ##########################################
5476 # check for _Static_assert()
5478 have_static_assert=no
5479 cat > $TMPC << EOF
5480 _Static_assert(1, "success");
5481 int main(void) {
5482 return 0;
5485 if compile_prog "" "" ; then
5486 have_static_assert=yes
5489 ##########################################
5490 # check for utmpx.h, it is missing e.g. on OpenBSD
5492 have_utmpx=no
5493 cat > $TMPC << EOF
5494 #include <utmpx.h>
5495 struct utmpx user_info;
5496 int main(void) {
5497 return 0;
5500 if compile_prog "" "" ; then
5501 have_utmpx=yes
5504 ##########################################
5505 # check for getrandom()
5507 have_getrandom=no
5508 cat > $TMPC << EOF
5509 #include <sys/random.h>
5510 int main(void) {
5511 return getrandom(0, 0, GRND_NONBLOCK);
5514 if compile_prog "" "" ; then
5515 have_getrandom=yes
5518 ##########################################
5519 # checks for sanitizers
5521 have_asan=no
5522 have_ubsan=no
5523 have_asan_iface_h=no
5524 have_asan_iface_fiber=no
5526 if test "$sanitizers" = "yes" ; then
5527 write_c_skeleton
5528 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5529 have_asan=yes
5532 # we could use a simple skeleton for flags checks, but this also
5533 # detect the static linking issue of ubsan, see also:
5534 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5535 cat > $TMPC << EOF
5536 #include <stdlib.h>
5537 int main(void) {
5538 void *tmp = malloc(10);
5539 if (tmp != NULL) {
5540 return *(int *)(tmp + 2);
5542 return 1;
5545 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5546 have_ubsan=yes
5549 if check_include "sanitizer/asan_interface.h" ; then
5550 have_asan_iface_h=yes
5553 cat > $TMPC << EOF
5554 #include <sanitizer/asan_interface.h>
5555 int main(void) {
5556 __sanitizer_start_switch_fiber(0, 0, 0);
5557 return 0;
5560 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5561 have_asan_iface_fiber=yes
5565 ##########################################
5566 # checks for fuzzer
5567 if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
5568 write_c_fuzzer_skeleton
5569 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
5570 have_fuzzer=yes
5571 else
5572 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
5573 exit 1
5577 # Thread sanitizer is, for now, much noisier than the other sanitizers;
5578 # keep it separate until that is not the case.
5579 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
5580 error_exit "TSAN is not supported with other sanitiziers."
5582 have_tsan=no
5583 have_tsan_iface_fiber=no
5584 if test "$tsan" = "yes" ; then
5585 write_c_skeleton
5586 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5587 have_tsan=yes
5589 cat > $TMPC << EOF
5590 #include <sanitizer/tsan_interface.h>
5591 int main(void) {
5592 __tsan_create_fiber(0);
5593 return 0;
5596 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5597 have_tsan_iface_fiber=yes
5601 ##########################################
5602 # check for libpmem
5604 if test "$libpmem" != "no"; then
5605 if $pkg_config --exists "libpmem"; then
5606 libpmem="yes"
5607 libpmem_libs=$($pkg_config --libs libpmem)
5608 libpmem_cflags=$($pkg_config --cflags libpmem)
5609 else
5610 if test "$libpmem" = "yes" ; then
5611 feature_not_found "libpmem" "Install nvml or pmdk"
5613 libpmem="no"
5617 ##########################################
5618 # check for libdaxctl
5620 if test "$libdaxctl" != "no"; then
5621 if $pkg_config --atleast-version=57 "libdaxctl"; then
5622 libdaxctl="yes"
5623 libdaxctl_libs=$($pkg_config --libs libdaxctl)
5624 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
5625 else
5626 if test "$libdaxctl" = "yes" ; then
5627 feature_not_found "libdaxctl" "Install libdaxctl"
5629 libdaxctl="no"
5633 ##########################################
5634 # check for slirp
5636 case "$slirp" in
5637 auto | enabled | internal)
5638 # Simpler to always update submodule, even if not needed.
5639 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5640 git_submodules="${git_submodules} slirp"
5643 esac
5645 ##########################################
5646 # check for usable __NR_keyctl syscall
5648 if test "$linux" = "yes" ; then
5650 have_keyring=no
5651 cat > $TMPC << EOF
5652 #include <errno.h>
5653 #include <asm/unistd.h>
5654 #include <linux/keyctl.h>
5655 #include <unistd.h>
5656 int main(void) {
5657 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
5660 if compile_prog "" "" ; then
5661 have_keyring=yes
5664 if test "$secret_keyring" != "no"
5665 then
5666 if test "$have_keyring" = "yes"
5667 then
5668 secret_keyring=yes
5669 else
5670 if test "$secret_keyring" = "yes"
5671 then
5672 error_exit "syscall __NR_keyctl requested, \
5673 but not implemented on your system"
5674 else
5675 secret_keyring=no
5680 ##########################################
5681 # End of CC checks
5682 # After here, no more $cc or $ld runs
5684 write_c_skeleton
5686 if test "$gcov" = "yes" ; then
5688 elif test "$fortify_source" = "yes" ; then
5689 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5690 debug=no
5693 case "$ARCH" in
5694 alpha)
5695 # Ensure there's only a single GP
5696 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
5698 esac
5700 if test "$gprof" = "yes" ; then
5701 QEMU_CFLAGS="-p $QEMU_CFLAGS"
5702 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
5705 if test "$have_asan" = "yes"; then
5706 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
5707 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
5708 if test "$have_asan_iface_h" = "no" ; then
5709 echo "ASAN build enabled, but ASAN header missing." \
5710 "Without code annotation, the report may be inferior."
5711 elif test "$have_asan_iface_fiber" = "no" ; then
5712 echo "ASAN build enabled, but ASAN header is too old." \
5713 "Without code annotation, the report may be inferior."
5716 if test "$have_tsan" = "yes" ; then
5717 if test "$have_tsan_iface_fiber" = "yes" ; then
5718 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
5719 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
5720 else
5721 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
5723 elif test "$tsan" = "yes" ; then
5724 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
5726 if test "$have_ubsan" = "yes"; then
5727 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
5728 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
5731 ##########################################
5732 # Do we have libnfs
5733 if test "$libnfs" != "no" ; then
5734 if $pkg_config --atleast-version=1.9.3 libnfs; then
5735 libnfs="yes"
5736 libnfs_libs=$($pkg_config --libs libnfs)
5737 else
5738 if test "$libnfs" = "yes" ; then
5739 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5741 libnfs="no"
5745 ##########################################
5747 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
5748 if test "$solaris" = "no" && test "$tsan" = "no"; then
5749 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5750 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
5754 # Use ASLR, no-SEH and DEP if available
5755 if test "$mingw32" = "yes" ; then
5756 flags="--no-seh --nxcompat"
5758 # Disable ASLR for debug builds to allow debugging with gdb
5759 if test "$debug" = "no" ; then
5760 flags="--dynamicbase $flags"
5763 for flag in $flags; do
5764 if ld_has $flag ; then
5765 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
5767 done
5770 qemu_confdir="$sysconfdir/$qemu_suffix"
5771 qemu_moddir="$libdir/$qemu_suffix"
5772 qemu_datadir="$datadir/$qemu_suffix"
5773 qemu_docdir="$docdir/$qemu_suffix"
5774 qemu_localedir="$datadir/locale"
5775 qemu_icondir="$datadir/icons"
5776 qemu_desktopdir="$datadir/applications"
5778 # We can only support ivshmem if we have eventfd
5779 if [ "$eventfd" = "yes" ]; then
5780 ivshmem=yes
5783 if test "$softmmu" = yes ; then
5784 if test "$linux" = yes; then
5785 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
5786 virtfs=yes
5787 else
5788 if test "$virtfs" = yes; then
5789 error_exit "VirtFS requires libcap-ng devel and libattr devel"
5791 virtfs=no
5793 else
5794 if test "$virtfs" = yes; then
5795 error_exit "VirtFS is supported only on Linux"
5797 virtfs=no
5801 # Probe for guest agent support/options
5803 if [ "$guest_agent" != "no" ]; then
5804 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
5805 guest_agent=no
5806 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5807 guest_agent=yes
5808 elif [ "$guest_agent" != yes ]; then
5809 guest_agent=no
5810 else
5811 error_exit "Guest agent is not supported on this platform"
5815 # Guest agent Window MSI package
5817 if test "$guest_agent" != yes; then
5818 if test "$guest_agent_msi" = yes; then
5819 error_exit "MSI guest agent package requires guest agent enabled"
5821 guest_agent_msi=no
5822 elif test "$mingw32" != "yes"; then
5823 if test "$guest_agent_msi" = "yes"; then
5824 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5826 guest_agent_msi=no
5827 elif ! has wixl; then
5828 if test "$guest_agent_msi" = "yes"; then
5829 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5831 guest_agent_msi=no
5832 else
5833 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5834 # disabled explicitly
5835 if test "$guest_agent_msi" != "no"; then
5836 guest_agent_msi=yes
5840 if test "$guest_agent_msi" = "yes"; then
5841 if test "$guest_agent_with_vss" = "yes"; then
5842 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5845 if test "$QEMU_GA_MANUFACTURER" = ""; then
5846 QEMU_GA_MANUFACTURER=QEMU
5849 if test "$QEMU_GA_DISTRO" = ""; then
5850 QEMU_GA_DISTRO=Linux
5853 if test "$QEMU_GA_VERSION" = ""; then
5854 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5857 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5859 case "$cpu" in
5860 x86_64)
5861 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5863 i386)
5864 QEMU_GA_MSI_ARCH="-D Arch=32"
5867 error_exit "CPU $cpu not supported for building installation package"
5869 esac
5872 # Mac OS X ships with a broken assembler
5873 roms=
5874 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5875 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
5876 test "$softmmu" = yes ; then
5877 # Different host OS linkers have different ideas about the name of the ELF
5878 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5879 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5880 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5881 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5882 ld_i386_emulation="$emu"
5883 roms="optionrom"
5884 break
5886 done
5889 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
5890 if test "$cpu" = "s390x" ; then
5891 write_c_skeleton
5892 if compile_prog "-march=z900" ""; then
5893 roms="$roms s390-ccw"
5894 # SLOF is required for building the s390-ccw firmware on s390x,
5895 # since it is using the libnet code from SLOF for network booting.
5896 if test -e "${source_path}/.git" ; then
5897 git_submodules="${git_submodules} roms/SLOF"
5902 # Check that the C++ compiler exists and works with the C compiler.
5903 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5904 if has $cxx; then
5905 cat > $TMPC <<EOF
5906 int c_function(void);
5907 int main(void) { return c_function(); }
5910 compile_object
5912 cat > $TMPCXX <<EOF
5913 extern "C" {
5914 int c_function(void);
5916 int c_function(void) { return 42; }
5919 update_cxxflags
5921 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
5922 # C++ compiler $cxx works ok with C compiler $cc
5924 else
5925 echo "C++ compiler $cxx does not work with C compiler $cc"
5926 echo "Disabling C++ specific optional code"
5927 cxx=
5929 else
5930 echo "No C++ compiler available; disabling C++ specific optional code"
5931 cxx=
5934 if test $git_update = 'yes' ; then
5935 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
5938 config_host_mak="config-host.mak"
5940 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5941 echo >> $config_host_mak
5943 echo all: >> $config_host_mak
5944 echo "prefix=$prefix" >> $config_host_mak
5945 echo "bindir=$bindir" >> $config_host_mak
5946 echo "libdir=$libdir" >> $config_host_mak
5947 echo "libexecdir=$libexecdir" >> $config_host_mak
5948 echo "includedir=$includedir" >> $config_host_mak
5949 echo "sysconfdir=$sysconfdir" >> $config_host_mak
5950 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5951 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5952 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
5953 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5954 if test "$mingw32" = "no" ; then
5955 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5957 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5958 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5959 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
5960 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
5961 echo "GIT=$git" >> $config_host_mak
5962 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5963 echo "GIT_UPDATE=$git_update" >> $config_host_mak
5965 echo "ARCH=$ARCH" >> $config_host_mak
5967 if test "$default_devices" = "yes" ; then
5968 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
5969 else
5970 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
5972 if test "$debug_tcg" = "yes" ; then
5973 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5975 if test "$strip_opt" = "yes" ; then
5976 echo "STRIP=${strip}" >> $config_host_mak
5978 if test "$bigendian" = "yes" ; then
5979 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5981 if test "$mingw32" = "yes" ; then
5982 echo "CONFIG_WIN32=y" >> $config_host_mak
5983 rc_version=$(cat $source_path/VERSION)
5984 version_major=${rc_version%%.*}
5985 rc_version=${rc_version#*.}
5986 version_minor=${rc_version%%.*}
5987 rc_version=${rc_version#*.}
5988 version_subminor=${rc_version%%.*}
5989 version_micro=0
5990 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5991 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5992 if test "$guest_agent_with_vss" = "yes" ; then
5993 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5994 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5995 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5997 if test "$guest_agent_ntddscsi" = "yes" ; then
5998 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6000 if test "$guest_agent_msi" = "yes"; then
6001 echo "CONFIG_QGA_MSI=y" >> $config_host_mak
6002 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6003 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6004 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6005 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6006 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6007 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6009 else
6010 echo "CONFIG_POSIX=y" >> $config_host_mak
6013 if test "$linux" = "yes" ; then
6014 echo "CONFIG_LINUX=y" >> $config_host_mak
6017 if test "$darwin" = "yes" ; then
6018 echo "CONFIG_DARWIN=y" >> $config_host_mak
6021 if test "$solaris" = "yes" ; then
6022 echo "CONFIG_SOLARIS=y" >> $config_host_mak
6024 if test "$haiku" = "yes" ; then
6025 echo "CONFIG_HAIKU=y" >> $config_host_mak
6027 if test "$static" = "yes" ; then
6028 echo "CONFIG_STATIC=y" >> $config_host_mak
6030 if test "$profiler" = "yes" ; then
6031 echo "CONFIG_PROFILER=y" >> $config_host_mak
6033 if test "$want_tools" = "yes" ; then
6034 echo "CONFIG_TOOLS=y" >> $config_host_mak
6036 if test "$guest_agent" = "yes" ; then
6037 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
6039 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6040 if test "$vde" = "yes" ; then
6041 echo "CONFIG_VDE=y" >> $config_host_mak
6042 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6044 if test "$netmap" = "yes" ; then
6045 echo "CONFIG_NETMAP=y" >> $config_host_mak
6047 if test "$l2tpv3" = "yes" ; then
6048 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6050 if test "$gprof" = "yes" ; then
6051 echo "CONFIG_GPROF=y" >> $config_host_mak
6053 if test "$cap_ng" = "yes" ; then
6054 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
6055 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
6057 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6058 for drv in $audio_drv_list; do
6059 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6060 echo "$def=y" >> $config_host_mak
6061 done
6062 if test "$alsa" = "yes" ; then
6063 echo "CONFIG_ALSA=y" >> $config_host_mak
6065 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6066 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
6067 if test "$libpulse" = "yes" ; then
6068 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
6070 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6071 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
6072 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6073 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6074 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6075 if test "$libjack" = "yes" ; then
6076 echo "CONFIG_LIBJACK=y" >> $config_host_mak
6078 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
6079 if test "$audio_win_int" = "yes" ; then
6080 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6082 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6083 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6084 if test "$xfs" = "yes" ; then
6085 echo "CONFIG_XFS=y" >> $config_host_mak
6087 qemu_version=$(head $source_path/VERSION)
6088 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6089 echo "SRC_PATH=$source_path" >> $config_host_mak
6090 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6091 if [ "$docs" = "yes" ] ; then
6092 echo "BUILD_DOCS=yes" >> $config_host_mak
6094 if test "$modules" = "yes"; then
6095 # $shacmd can generate a hash started with digit, which the compiler doesn't
6096 # like as an symbol. So prefix it with an underscore
6097 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6098 echo "CONFIG_MODULES=y" >> $config_host_mak
6100 if test "$module_upgrades" = "yes"; then
6101 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6103 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6104 echo "CONFIG_X11=y" >> $config_host_mak
6105 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6106 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6108 if test "$pipe2" = "yes" ; then
6109 echo "CONFIG_PIPE2=y" >> $config_host_mak
6111 if test "$accept4" = "yes" ; then
6112 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6114 if test "$splice" = "yes" ; then
6115 echo "CONFIG_SPLICE=y" >> $config_host_mak
6117 if test "$eventfd" = "yes" ; then
6118 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6120 if test "$memfd" = "yes" ; then
6121 echo "CONFIG_MEMFD=y" >> $config_host_mak
6123 if test "$have_usbfs" = "yes" ; then
6124 echo "CONFIG_USBFS=y" >> $config_host_mak
6126 if test "$fallocate" = "yes" ; then
6127 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6129 if test "$fallocate_punch_hole" = "yes" ; then
6130 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6132 if test "$fallocate_zero_range" = "yes" ; then
6133 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6135 if test "$posix_fallocate" = "yes" ; then
6136 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6138 if test "$sync_file_range" = "yes" ; then
6139 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6141 if test "$fiemap" = "yes" ; then
6142 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6144 if test "$dup3" = "yes" ; then
6145 echo "CONFIG_DUP3=y" >> $config_host_mak
6147 if test "$ppoll" = "yes" ; then
6148 echo "CONFIG_PPOLL=y" >> $config_host_mak
6150 if test "$prctl_pr_set_timerslack" = "yes" ; then
6151 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6153 if test "$epoll" = "yes" ; then
6154 echo "CONFIG_EPOLL=y" >> $config_host_mak
6156 if test "$epoll_create1" = "yes" ; then
6157 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6159 if test "$sendfile" = "yes" ; then
6160 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6162 if test "$timerfd" = "yes" ; then
6163 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6165 if test "$setns" = "yes" ; then
6166 echo "CONFIG_SETNS=y" >> $config_host_mak
6168 if test "$clock_adjtime" = "yes" ; then
6169 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6171 if test "$syncfs" = "yes" ; then
6172 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6174 if test "$kcov" = "yes" ; then
6175 echo "CONFIG_KCOV=y" >> $config_host_mak
6177 if test "$btrfs" = "yes" ; then
6178 echo "CONFIG_BTRFS=y" >> $config_host_mak
6180 if test "$inotify" = "yes" ; then
6181 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6183 if test "$inotify1" = "yes" ; then
6184 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6186 if test "$sem_timedwait" = "yes" ; then
6187 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6189 if test "$strchrnul" = "yes" ; then
6190 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6192 if test "$st_atim" = "yes" ; then
6193 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
6195 if test "$byteswap_h" = "yes" ; then
6196 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6198 if test "$bswap_h" = "yes" ; then
6199 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6201 if test "$curl" = "yes" ; then
6202 echo "CONFIG_CURL=y" >> $config_host_mak
6203 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6204 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6206 if test "$brlapi" = "yes" ; then
6207 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6208 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6210 if test "$gtk" = "yes" ; then
6211 echo "CONFIG_GTK=y" >> $config_host_mak
6212 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6213 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6214 if test "$gtk_gl" = "yes" ; then
6215 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6218 if test "$gio" = "yes" ; then
6219 echo "CONFIG_GIO=y" >> $config_host_mak
6220 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6221 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6222 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
6224 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6225 if test "$gnutls" = "yes" ; then
6226 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6227 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
6228 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
6230 if test "$gcrypt" = "yes" ; then
6231 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6232 if test "$gcrypt_hmac" = "yes" ; then
6233 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6235 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
6236 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
6238 if test "$nettle" = "yes" ; then
6239 echo "CONFIG_NETTLE=y" >> $config_host_mak
6240 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6241 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
6242 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
6244 if test "$qemu_private_xts" = "yes" ; then
6245 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
6247 if test "$tasn1" = "yes" ; then
6248 echo "CONFIG_TASN1=y" >> $config_host_mak
6250 if test "$auth_pam" = "yes" ; then
6251 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6253 if test "$have_ifaddrs_h" = "yes" ; then
6254 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6256 if test "$have_drm_h" = "yes" ; then
6257 echo "HAVE_DRM_H=y" >> $config_host_mak
6259 if test "$have_broken_size_max" = "yes" ; then
6260 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6262 if test "$have_openpty" = "yes" ; then
6263 echo "HAVE_OPENPTY=y" >> $config_host_mak
6265 if test "$have_sys_signal_h" = "yes" ; then
6266 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
6269 # Work around a system header bug with some kernel/XFS header
6270 # versions where they both try to define 'struct fsxattr':
6271 # xfs headers will not try to redefine structs from linux headers
6272 # if this macro is set.
6273 if test "$have_fsxattr" = "yes" ; then
6274 echo "HAVE_FSXATTR=y" >> $config_host_mak
6276 if test "$have_copy_file_range" = "yes" ; then
6277 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6279 if test "$vte" = "yes" ; then
6280 echo "CONFIG_VTE=y" >> $config_host_mak
6281 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6282 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6284 if test "$virglrenderer" = "yes" ; then
6285 echo "CONFIG_VIRGL=y" >> $config_host_mak
6286 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6287 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6289 if test "$xen" = "enabled" ; then
6290 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6291 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6292 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
6293 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
6295 if test "$linux_aio" = "yes" ; then
6296 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6298 if test "$linux_io_uring" = "yes" ; then
6299 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
6300 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
6301 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
6303 if test "$attr" = "yes" ; then
6304 echo "CONFIG_ATTR=y" >> $config_host_mak
6305 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
6307 if test "$libattr" = "yes" ; then
6308 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6310 if test "$virtfs" = "yes" ; then
6311 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6313 if test "$vhost_scsi" = "yes" ; then
6314 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6316 if test "$vhost_net" = "yes" ; then
6317 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6319 if test "$vhost_net_user" = "yes" ; then
6320 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
6322 if test "$vhost_net_vdpa" = "yes" ; then
6323 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
6325 if test "$vhost_crypto" = "yes" ; then
6326 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6328 if test "$vhost_vsock" = "yes" ; then
6329 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6330 if test "$vhost_user" = "yes" ; then
6331 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
6334 if test "$vhost_kernel" = "yes" ; then
6335 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6337 if test "$vhost_user" = "yes" ; then
6338 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6340 if test "$vhost_vdpa" = "yes" ; then
6341 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
6343 if test "$vhost_user_fs" = "yes" ; then
6344 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
6346 if test "$blobs" = "yes" ; then
6347 echo "INSTALL_BLOBS=yes" >> $config_host_mak
6349 if test "$iovec" = "yes" ; then
6350 echo "CONFIG_IOVEC=y" >> $config_host_mak
6352 if test "$preadv" = "yes" ; then
6353 echo "CONFIG_PREADV=y" >> $config_host_mak
6355 if test "$membarrier" = "yes" ; then
6356 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6358 if test "$signalfd" = "yes" ; then
6359 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6361 if test "$optreset" = "yes" ; then
6362 echo "HAVE_OPTRESET=y" >> $config_host_mak
6364 if test "$tcg" = "enabled"; then
6365 if test "$tcg_interpreter" = "yes" ; then
6366 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6369 if test "$fdatasync" = "yes" ; then
6370 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6372 if test "$madvise" = "yes" ; then
6373 echo "CONFIG_MADVISE=y" >> $config_host_mak
6375 if test "$posix_madvise" = "yes" ; then
6376 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6378 if test "$posix_memalign" = "yes" ; then
6379 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6381 if test "$spice" = "yes" ; then
6382 echo "CONFIG_SPICE=y" >> $config_host_mak
6383 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
6384 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
6387 if test "$smartcard" = "yes" ; then
6388 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6389 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6390 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6393 if test "$libusb" = "yes" ; then
6394 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6395 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6396 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6399 if test "$usb_redir" = "yes" ; then
6400 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6401 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6402 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6405 if test "$opengl" = "yes" ; then
6406 echo "CONFIG_OPENGL=y" >> $config_host_mak
6407 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
6408 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6409 if test "$opengl_dmabuf" = "yes" ; then
6410 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6414 if test "$gbm" = "yes" ; then
6415 echo "CONFIG_GBM=y" >> $config_host_mak
6416 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6417 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6421 if test "$avx2_opt" = "yes" ; then
6422 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6425 if test "$avx512f_opt" = "yes" ; then
6426 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
6429 if test "$lzo" = "yes" ; then
6430 echo "CONFIG_LZO=y" >> $config_host_mak
6431 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
6434 if test "$snappy" = "yes" ; then
6435 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6436 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
6439 if test "$bzip2" = "yes" ; then
6440 echo "CONFIG_BZIP2=y" >> $config_host_mak
6441 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6444 if test "$lzfse" = "yes" ; then
6445 echo "CONFIG_LZFSE=y" >> $config_host_mak
6446 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6449 if test "$zstd" = "yes" ; then
6450 echo "CONFIG_ZSTD=y" >> $config_host_mak
6451 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
6452 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
6455 if test "$libiscsi" = "yes" ; then
6456 echo "CONFIG_LIBISCSI=y" >> $config_host_mak
6457 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6458 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6461 if test "$libnfs" = "yes" ; then
6462 echo "CONFIG_LIBNFS=y" >> $config_host_mak
6463 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6466 if test "$seccomp" = "yes"; then
6467 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6468 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6469 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6472 # XXX: suppress that
6473 if [ "$bsd" = "yes" ] ; then
6474 echo "CONFIG_BSD=y" >> $config_host_mak
6477 if test "$qom_cast_debug" = "yes" ; then
6478 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6480 if test "$rbd" = "yes" ; then
6481 echo "CONFIG_RBD=y" >> $config_host_mak
6482 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6485 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6486 if test "$coroutine_pool" = "yes" ; then
6487 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6488 else
6489 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6492 if test "$debug_stack_usage" = "yes" ; then
6493 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6496 if test "$crypto_afalg" = "yes" ; then
6497 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6500 if test "$open_by_handle_at" = "yes" ; then
6501 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6504 if test "$linux_magic_h" = "yes" ; then
6505 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6508 if test "$valgrind_h" = "yes" ; then
6509 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6512 if test "$have_asan_iface_fiber" = "yes" ; then
6513 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6516 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
6517 echo "CONFIG_TSAN=y" >> $config_host_mak
6520 if test "$has_environ" = "yes" ; then
6521 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6524 if test "$cpuid_h" = "yes" ; then
6525 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6528 if test "$int128" = "yes" ; then
6529 echo "CONFIG_INT128=y" >> $config_host_mak
6532 if test "$atomic128" = "yes" ; then
6533 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6536 if test "$cmpxchg128" = "yes" ; then
6537 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6540 if test "$atomic64" = "yes" ; then
6541 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6544 if test "$attralias" = "yes" ; then
6545 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
6548 if test "$getauxval" = "yes" ; then
6549 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6552 if test "$glusterfs" = "yes" ; then
6553 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
6554 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6555 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6558 if test "$glusterfs_xlator_opt" = "yes" ; then
6559 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6562 if test "$glusterfs_discard" = "yes" ; then
6563 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6566 if test "$glusterfs_fallocate" = "yes" ; then
6567 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6570 if test "$glusterfs_zerofill" = "yes" ; then
6571 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6574 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
6575 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
6578 if test "$glusterfs_iocb_has_stat" = "yes" ; then
6579 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
6582 if test "$libssh" = "yes" ; then
6583 echo "CONFIG_LIBSSH=y" >> $config_host_mak
6584 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
6585 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
6588 if test "$live_block_migration" = "yes" ; then
6589 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6592 if test "$tpm" = "yes"; then
6593 echo 'CONFIG_TPM=y' >> $config_host_mak
6596 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6597 if have_backend "nop"; then
6598 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6600 if have_backend "simple"; then
6601 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6602 # Set the appropriate trace file.
6603 trace_file="\"$trace_file-\" FMT_pid"
6605 if have_backend "log"; then
6606 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6608 if have_backend "ust"; then
6609 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6610 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6611 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
6613 if have_backend "dtrace"; then
6614 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6615 if test "$trace_backend_stap" = "yes" ; then
6616 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6619 if have_backend "ftrace"; then
6620 if test "$linux" = "yes" ; then
6621 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6622 else
6623 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6626 if have_backend "syslog"; then
6627 if test "$posix_syslog" = "yes" ; then
6628 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6629 else
6630 feature_not_found "syslog(trace backend)" "syslog not available"
6633 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6635 if test "$rdma" = "yes" ; then
6636 echo "CONFIG_RDMA=y" >> $config_host_mak
6637 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6640 if test "$pvrdma" = "yes" ; then
6641 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6644 if test "$have_rtnetlink" = "yes" ; then
6645 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6648 if test "$libxml2" = "yes" ; then
6649 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6650 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6651 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6654 if test "$replication" = "yes" ; then
6655 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6658 if test "$have_af_vsock" = "yes" ; then
6659 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6662 if test "$have_sysmacros" = "yes" ; then
6663 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6666 if test "$have_static_assert" = "yes" ; then
6667 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6670 if test "$have_utmpx" = "yes" ; then
6671 echo "HAVE_UTMPX=y" >> $config_host_mak
6673 if test "$have_getrandom" = "yes" ; then
6674 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6676 if test "$ivshmem" = "yes" ; then
6677 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6679 if test "$debug_mutex" = "yes" ; then
6680 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6683 # Hold two types of flag:
6684 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6685 # a thread we have a handle to
6686 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
6687 # platform
6688 if test "$pthread_setname_np_w_tid" = "yes" ; then
6689 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6690 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6691 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6692 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6693 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
6696 if test "$libpmem" = "yes" ; then
6697 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6698 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
6699 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
6702 if test "$libdaxctl" = "yes" ; then
6703 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
6704 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
6707 if test "$bochs" = "yes" ; then
6708 echo "CONFIG_BOCHS=y" >> $config_host_mak
6710 if test "$cloop" = "yes" ; then
6711 echo "CONFIG_CLOOP=y" >> $config_host_mak
6713 if test "$dmg" = "yes" ; then
6714 echo "CONFIG_DMG=y" >> $config_host_mak
6716 if test "$qcow1" = "yes" ; then
6717 echo "CONFIG_QCOW1=y" >> $config_host_mak
6719 if test "$vdi" = "yes" ; then
6720 echo "CONFIG_VDI=y" >> $config_host_mak
6722 if test "$vvfat" = "yes" ; then
6723 echo "CONFIG_VVFAT=y" >> $config_host_mak
6725 if test "$qed" = "yes" ; then
6726 echo "CONFIG_QED=y" >> $config_host_mak
6728 if test "$parallels" = "yes" ; then
6729 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6731 if test "$sheepdog" = "yes" ; then
6732 add_to deprecated_features "sheepdog"
6733 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6735 if test "$pty_h" = "yes" ; then
6736 echo "HAVE_PTY_H=y" >> $config_host_mak
6738 if test "$have_mlockall" = "yes" ; then
6739 echo "HAVE_MLOCKALL=y" >> $config_host_mak
6741 if test "$fuzzing" = "yes" ; then
6742 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
6743 # needed CFLAGS have already been provided
6744 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
6745 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
6746 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
6747 else
6748 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
6752 if test "$plugins" = "yes" ; then
6753 echo "CONFIG_PLUGIN=y" >> $config_host_mak
6754 # Copy the export object list to the build dir
6755 if test "$ld_dynamic_list" = "yes" ; then
6756 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
6757 ld_symbols=qemu-plugins-ld.symbols
6758 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
6759 elif test "$ld_exported_symbols_list" = "yes" ; then
6760 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
6761 ld64_symbols=qemu-plugins-ld64.symbols
6762 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
6763 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
6764 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
6765 else
6766 error_exit \
6767 "If \$plugins=yes, either \$ld_dynamic_list or " \
6768 "\$ld_exported_symbols_list should have been set to 'yes'."
6772 if test -n "$gdb_bin" ; then
6773 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
6776 if test "$secret_keyring" = "yes" ; then
6777 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
6780 if test "$tcg_interpreter" = "yes"; then
6781 QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES"
6782 elif test "$ARCH" = "sparc64" ; then
6783 QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES"
6784 elif test "$ARCH" = "s390x" ; then
6785 QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES"
6786 elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
6787 QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES"
6788 elif test "$ARCH" = "ppc64" ; then
6789 QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES"
6790 elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
6791 QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES"
6792 else
6793 QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES"
6796 echo "ROMS=$roms" >> $config_host_mak
6797 echo "MAKE=$make" >> $config_host_mak
6798 echo "PYTHON=$python" >> $config_host_mak
6799 echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak
6800 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
6801 echo "MESON=$meson" >> $config_host_mak
6802 echo "CC=$cc" >> $config_host_mak
6803 if $iasl -h > /dev/null 2>&1; then
6804 echo "CONFIG_IASL=$iasl" >> $config_host_mak
6806 echo "CXX=$cxx" >> $config_host_mak
6807 echo "OBJCC=$objcc" >> $config_host_mak
6808 echo "AR=$ar" >> $config_host_mak
6809 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6810 echo "AS=$as" >> $config_host_mak
6811 echo "CCAS=$ccas" >> $config_host_mak
6812 echo "CPP=$cpp" >> $config_host_mak
6813 echo "OBJCOPY=$objcopy" >> $config_host_mak
6814 echo "LD=$ld" >> $config_host_mak
6815 echo "RANLIB=$ranlib" >> $config_host_mak
6816 echo "NM=$nm" >> $config_host_mak
6817 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
6818 echo "WINDRES=$windres" >> $config_host_mak
6819 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6820 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6821 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6822 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6823 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6824 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
6825 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6826 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6827 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6828 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6829 echo "EXESUF=$EXESUF" >> $config_host_mak
6830 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
6831 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
6832 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6833 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6834 if test "$gcov" = "yes" ; then
6835 echo "CONFIG_GCOV=y" >> $config_host_mak
6838 if test "$fuzzing" != "no"; then
6839 echo "CONFIG_FUZZ=y" >> $config_host_mak
6841 echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
6843 if test "$edk2_blobs" = "yes" ; then
6844 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak
6847 if test "$rng_none" = "yes"; then
6848 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
6851 # use included Linux headers
6852 if test "$linux" = "yes" ; then
6853 mkdir -p linux-headers
6854 case "$cpu" in
6855 i386|x86_64|x32)
6856 linux_arch=x86
6858 ppc|ppc64|ppc64le)
6859 linux_arch=powerpc
6861 s390x)
6862 linux_arch=s390
6864 aarch64)
6865 linux_arch=arm64
6867 mips64)
6868 linux_arch=mips
6871 # For most CPUs the kernel architecture name and QEMU CPU name match.
6872 linux_arch="$cpu"
6874 esac
6875 # For non-KVM architectures we will not have asm headers
6876 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6877 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6881 for target in $target_list; do
6882 target_dir="$target"
6883 target_name=$(echo $target | cut -d '-' -f 1)
6884 mkdir -p $target_dir
6885 case $target in
6886 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
6887 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
6888 esac
6889 done
6891 echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
6892 if test "$default_targets" = "yes"; then
6893 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
6896 if test "$numa" = "yes"; then
6897 echo "CONFIG_NUMA=y" >> $config_host_mak
6898 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
6901 if test "$ccache_cpp2" = "yes"; then
6902 echo "export CCACHE_CPP2=y" >> $config_host_mak
6905 if test "$safe_stack" = "yes"; then
6906 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
6909 # If we're using a separate build tree, set it up now.
6910 # DIRS are directories which we simply mkdir in the build tree;
6911 # LINKS are things to symlink back into the source tree
6912 # (these can be both files and directories).
6913 # Caution: do not add files or directories here using wildcards. This
6914 # will result in problems later if a new file matching the wildcard is
6915 # added to the source tree -- nothing will cause configure to be rerun
6916 # so the build tree will be missing the link back to the new file, and
6917 # tests might fail. Prefer to keep the relevant files in their own
6918 # directory and symlink the directory instead.
6919 # UNLINK is used to remove symlinks from older development versions
6920 # that might get into the way when doing "git update" without doing
6921 # a "make distclean" in between.
6922 DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
6923 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
6924 DIRS="$DIRS docs docs/interop fsdev scsi"
6925 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
6926 DIRS="$DIRS roms/seabios"
6927 DIRS="$DIRS contrib/plugins/"
6928 LINKS="Makefile"
6929 LINKS="$LINKS tests/tcg/lm32/Makefile"
6930 LINKS="$LINKS tests/tcg/Makefile.target"
6931 LINKS="$LINKS pc-bios/optionrom/Makefile"
6932 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
6933 LINKS="$LINKS roms/seabios/Makefile"
6934 LINKS="$LINKS pc-bios/qemu-icon.bmp"
6935 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
6936 LINKS="$LINKS tests/acceptance tests/data"
6937 LINKS="$LINKS tests/qemu-iotests/check"
6938 LINKS="$LINKS python"
6939 LINKS="$LINKS contrib/plugins/Makefile "
6940 UNLINK="pc-bios/keymaps"
6941 for bios_file in \
6942 $source_path/pc-bios/*.bin \
6943 $source_path/pc-bios/*.elf \
6944 $source_path/pc-bios/*.lid \
6945 $source_path/pc-bios/*.rom \
6946 $source_path/pc-bios/*.dtb \
6947 $source_path/pc-bios/*.img \
6948 $source_path/pc-bios/openbios-* \
6949 $source_path/pc-bios/u-boot.* \
6950 $source_path/pc-bios/edk2-*.fd.bz2 \
6951 $source_path/pc-bios/palcode-*
6953 LINKS="$LINKS pc-bios/$(basename $bios_file)"
6954 done
6955 mkdir -p $DIRS
6956 for f in $LINKS ; do
6957 if [ -e "$source_path/$f" ]; then
6958 symlink "$source_path/$f" "$f"
6960 done
6961 for f in $UNLINK ; do
6962 if [ -L "$f" ]; then
6963 rm -f "$f"
6965 done
6967 (for i in $cross_cc_vars; do
6968 export $i
6969 done
6970 export target_list source_path use_containers
6971 $source_path/tests/tcg/configure.sh)
6973 # temporary config to build submodules
6974 for rom in seabios; do
6975 config_mak=roms/$rom/config.mak
6976 echo "# Automatically generated by configure - do not modify" > $config_mak
6977 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6978 echo "AS=$as" >> $config_mak
6979 echo "CCAS=$ccas" >> $config_mak
6980 echo "CC=$cc" >> $config_mak
6981 echo "BCC=bcc" >> $config_mak
6982 echo "CPP=$cpp" >> $config_mak
6983 echo "OBJCOPY=objcopy" >> $config_mak
6984 echo "IASL=$iasl" >> $config_mak
6985 echo "LD=$ld" >> $config_mak
6986 echo "RANLIB=$ranlib" >> $config_mak
6987 done
6989 # set up qemu-iotests in this build directory
6990 iotests_common_env="tests/qemu-iotests/common.env"
6992 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6993 echo >> "$iotests_common_env"
6994 echo "export PYTHON='$python'" >> "$iotests_common_env"
6996 if test "$skip_meson" = no; then
6997 cross="config-meson.cross.new"
6998 meson_quote() {
6999 echo "'$(echo $* | sed "s/ /','/g")'"
7002 echo "# Automatically generated by configure - do not modify" > $cross
7003 echo "[properties]" >> $cross
7004 test -z "$cxx" && echo "link_language = 'c'" >> $cross
7005 echo "[built-in options]" >> $cross
7006 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
7007 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
7008 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
7009 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
7010 echo "[binaries]" >> $cross
7011 echo "c = [$(meson_quote $cc)]" >> $cross
7012 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
7013 echo "ar = [$(meson_quote $ar)]" >> $cross
7014 echo "nm = [$(meson_quote $nm)]" >> $cross
7015 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
7016 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
7017 if has $sdl2_config; then
7018 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
7020 echo "strip = [$(meson_quote $strip)]" >> $cross
7021 echo "windres = [$(meson_quote $windres)]" >> $cross
7022 if test -n "$cross_prefix"; then
7023 cross_arg="--cross-file config-meson.cross"
7024 echo "[host_machine]" >> $cross
7025 if test "$mingw32" = "yes" ; then
7026 echo "system = 'windows'" >> $cross
7028 if test "$linux" = "yes" ; then
7029 echo "system = 'linux'" >> $cross
7031 case "$ARCH" in
7032 i386|x86_64)
7033 echo "cpu_family = 'x86'" >> $cross
7035 ppc64le)
7036 echo "cpu_family = 'ppc64'" >> $cross
7039 echo "cpu_family = '$ARCH'" >> $cross
7041 esac
7042 echo "cpu = '$cpu'" >> $cross
7043 if test "$bigendian" = "yes" ; then
7044 echo "endian = 'big'" >> $cross
7045 else
7046 echo "endian = 'little'" >> $cross
7048 else
7049 cross_arg="--native-file config-meson.cross"
7051 mv $cross config-meson.cross
7053 rm -rf meson-private meson-info meson-logs
7054 NINJA=${ninja:-$PWD/ninjatool} $meson setup \
7055 --prefix "$prefix" \
7056 --libdir "$libdir" \
7057 --libexecdir "$libexecdir" \
7058 --bindir "$bindir" \
7059 --includedir "$includedir" \
7060 --datadir "$datadir" \
7061 --mandir "$mandir" \
7062 --sysconfdir "$sysconfdir" \
7063 --localstatedir "$local_statedir" \
7064 -Ddocdir="$docdir" \
7065 -Dqemu_suffix="$qemu_suffix" \
7066 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
7067 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
7068 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
7069 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
7070 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
7071 -Db_staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi) \
7072 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
7073 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
7074 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
7075 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
7076 -Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
7077 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
7078 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f \
7079 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \
7080 -Diconv=$iconv -Dcurses=$curses \
7081 $cross_arg \
7082 "$PWD" "$source_path"
7084 if test "$?" -ne 0 ; then
7085 error_exit "meson setup failed"
7087 touch ninjatool.stamp
7090 if test -n "${deprecated_features}"; then
7091 echo "Warning, deprecated features enabled."
7092 echo "Please see docs/system/deprecated.rst"
7093 echo " features: ${deprecated_features}"
7096 # Save the configure command line for later reuse.
7097 cat <<EOD >config.status
7098 #!/bin/sh
7099 # Generated by configure.
7100 # Run this file to recreate the current configuration.
7101 # Compiler output produced by configure, useful for debugging
7102 # configure, is in config.log if it exists.
7105 preserve_env() {
7106 envname=$1
7108 eval envval=\$$envname
7110 if test -n "$envval"
7111 then
7112 echo "$envname='$envval'" >> config.status
7113 echo "export $envname" >> config.status
7114 else
7115 echo "unset $envname" >> config.status
7119 # Preserve various env variables that influence what
7120 # features/build target configure will detect
7121 preserve_env AR
7122 preserve_env AS
7123 preserve_env CC
7124 preserve_env CPP
7125 preserve_env CXX
7126 preserve_env INSTALL
7127 preserve_env LD
7128 preserve_env LD_LIBRARY_PATH
7129 preserve_env LIBTOOL
7130 preserve_env MAKE
7131 preserve_env NM
7132 preserve_env OBJCOPY
7133 preserve_env PATH
7134 preserve_env PKG_CONFIG
7135 preserve_env PKG_CONFIG_LIBDIR
7136 preserve_env PKG_CONFIG_PATH
7137 preserve_env PYTHON
7138 preserve_env SDL2_CONFIG
7139 preserve_env SMBD
7140 preserve_env STRIP
7141 preserve_env WINDRES
7143 printf "exec" >>config.status
7144 for i in "$0" "$@"; do
7145 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
7146 done
7147 echo ' "$@"' >>config.status
7148 chmod +x config.status
7150 rm -r "$TMPDIR1"