cocoa: do not enable coreaudio automatically
[qemu/ar7.git] / configure
blob10f43d59fe13a410c9ac6839f2564c7a52664b61
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 lto="false"
246 stack_protector=""
247 safe_stack=""
248 use_containers="yes"
249 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
251 if test -e "$source_path/.git"
252 then
253 git_update=yes
254 git_submodules="ui/keycodemapdb"
255 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
256 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
257 else
258 git_update=no
259 git_submodules=""
261 if ! test -f "$source_path/ui/keycodemapdb/README"
262 then
263 echo
264 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
265 echo
266 echo "This is not a GIT checkout but module content appears to"
267 echo "be missing. Do not use 'git archive' or GitHub download links"
268 echo "to acquire QEMU source archives. Non-GIT builds are only"
269 echo "supported with source archives linked from:"
270 echo
271 echo " https://www.qemu.org/download/#source"
272 echo
273 echo "Developers working with GIT can use scripts/archive-source.sh"
274 echo "if they need to create valid source archives."
275 echo
276 exit 1
279 git="git"
281 # Don't accept a target_list environment variable.
282 unset target_list
283 unset target_list_exclude
285 # Default value for a variable defining feature "foo".
286 # * foo="no" feature will only be used if --enable-foo arg is given
287 # * foo="" feature will be searched for, and if found, will be used
288 # unless --disable-foo is given
289 # * foo="yes" this value will only be set by --enable-foo flag.
290 # feature will searched for,
291 # if not found, configure exits with error
293 # Always add --enable-foo and --disable-foo command line args.
294 # Distributions want to ensure that several features are compiled in, and it
295 # is impossible without a --enable-foo that exits if a feature is not found.
297 default_feature=""
298 # parse CC options second
299 for opt do
300 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
301 case "$opt" in
302 --without-default-features)
303 default_feature="no"
305 esac
306 done
308 brlapi="auto"
309 curl="auto"
310 iconv="auto"
311 curses="auto"
312 docs="auto"
313 fdt="auto"
314 netmap="no"
315 sdl="auto"
316 sdl_image="auto"
317 virtiofsd="auto"
318 virtfs="auto"
319 libudev="auto"
320 mpath="auto"
321 vnc="enabled"
322 sparse="auto"
323 vde="$default_feature"
324 vnc_sasl="auto"
325 vnc_jpeg="auto"
326 vnc_png="auto"
327 xkbcommon="auto"
328 xen="$default_feature"
329 xen_ctrl_version="$default_feature"
330 xen_pci_passthrough="auto"
331 linux_aio="$default_feature"
332 linux_io_uring="$default_feature"
333 cap_ng="auto"
334 attr="auto"
335 xfs="$default_feature"
336 tcg="enabled"
337 membarrier="$default_feature"
338 vhost_net="$default_feature"
339 vhost_crypto="$default_feature"
340 vhost_scsi="$default_feature"
341 vhost_vsock="$default_feature"
342 vhost_user="no"
343 vhost_user_blk_server="auto"
344 vhost_user_fs="$default_feature"
345 kvm="auto"
346 hax="auto"
347 hvf="auto"
348 whpx="auto"
349 rdma="$default_feature"
350 pvrdma="$default_feature"
351 gprof="no"
352 debug_tcg="no"
353 debug="no"
354 sanitizers="no"
355 tsan="no"
356 fortify_source="$default_feature"
357 strip_opt="yes"
358 tcg_interpreter="no"
359 bigendian="no"
360 mingw32="no"
361 gcov="no"
362 EXESUF="$default_feature"
363 HOST_DSOSUF=".so"
364 modules="no"
365 module_upgrades="no"
366 prefix="/usr/local"
367 qemu_suffix="qemu"
368 slirp="auto"
369 oss_lib=""
370 bsd="no"
371 linux="no"
372 solaris="no"
373 profiler="no"
374 cocoa="auto"
375 softmmu="yes"
376 linux_user="no"
377 bsd_user="no"
378 blobs="true"
379 pkgversion=""
380 pie=""
381 qom_cast_debug="yes"
382 trace_backends="log"
383 trace_file="trace"
384 spice="$default_feature"
385 rbd="auto"
386 smartcard="$default_feature"
387 u2f="auto"
388 libusb="$default_feature"
389 usb_redir="$default_feature"
390 opengl="$default_feature"
391 opengl_dmabuf="no"
392 cpuid_h="no"
393 avx2_opt="$default_feature"
394 capstone="auto"
395 lzo="auto"
396 snappy="auto"
397 bzip2="auto"
398 lzfse="auto"
399 zstd="auto"
400 guest_agent="$default_feature"
401 guest_agent_with_vss="no"
402 guest_agent_ntddscsi="no"
403 guest_agent_msi="$default_feature"
404 vss_win32_sdk="$default_feature"
405 win_sdk="no"
406 want_tools="$default_feature"
407 libiscsi="auto"
408 libnfs="auto"
409 coroutine=""
410 coroutine_pool="$default_feature"
411 debug_stack_usage="no"
412 crypto_afalg="no"
413 cfi="false"
414 cfi_debug="false"
415 seccomp="auto"
416 glusterfs="auto"
417 gtk="$default_feature"
418 gtk_gl="no"
419 tls_priority="NORMAL"
420 gnutls="$default_feature"
421 nettle="$default_feature"
422 nettle_xts="no"
423 gcrypt="$default_feature"
424 gcrypt_hmac="no"
425 gcrypt_xts="no"
426 qemu_private_xts="yes"
427 auth_pam="$default_feature"
428 vte="$default_feature"
429 virglrenderer="$default_feature"
430 tpm="$default_feature"
431 libssh="$default_feature"
432 live_block_migration=${default_feature:-yes}
433 numa="$default_feature"
434 tcmalloc="no"
435 jemalloc="no"
436 replication=${default_feature:-yes}
437 bochs=${default_feature:-yes}
438 cloop=${default_feature:-yes}
439 dmg=${default_feature:-yes}
440 qcow1=${default_feature:-yes}
441 vdi=${default_feature:-yes}
442 vvfat=${default_feature:-yes}
443 qed=${default_feature:-yes}
444 parallels=${default_feature:-yes}
445 sheepdog="no"
446 libxml2="$default_feature"
447 debug_mutex="no"
448 libpmem="$default_feature"
449 default_devices="true"
450 plugins="no"
451 fuzzing="no"
452 rng_none="no"
453 secret_keyring="$default_feature"
454 libdaxctl="$default_feature"
455 meson=""
456 ninja=""
457 skip_meson=no
458 gettext="auto"
459 fuse="auto"
460 fuse_lseek="auto"
462 malloc_trim="auto"
464 # parse CC options second
465 for opt do
466 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
467 case "$opt" in
468 --cross-prefix=*) cross_prefix="$optarg"
470 --cc=*) CC="$optarg"
472 --cxx=*) CXX="$optarg"
474 --cpu=*) cpu="$optarg"
476 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
477 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
479 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
481 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
482 EXTRA_LDFLAGS="$optarg"
484 --enable-debug-info) debug_info="yes"
486 --disable-debug-info) debug_info="no"
488 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
490 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
491 eval "cross_cc_cflags_${cc_arch}=\$optarg"
492 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
494 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
495 cc_archs="$cc_archs $cc_arch"
496 eval "cross_cc_${cc_arch}=\$optarg"
497 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
499 esac
500 done
501 # OS specific
502 # Using uname is really, really broken. Once we have the right set of checks
503 # we can eliminate its usage altogether.
505 # Preferred compiler:
506 # ${CC} (if set)
507 # ${cross_prefix}gcc (if cross-prefix specified)
508 # system compiler
509 if test -z "${CC}${cross_prefix}"; then
510 cc="$host_cc"
511 else
512 cc="${CC-${cross_prefix}gcc}"
515 if test -z "${CXX}${cross_prefix}"; then
516 cxx="c++"
517 else
518 cxx="${CXX-${cross_prefix}g++}"
521 ar="${AR-${cross_prefix}ar}"
522 as="${AS-${cross_prefix}as}"
523 ccas="${CCAS-$cc}"
524 cpp="${CPP-$cc -E}"
525 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
526 ld="${LD-${cross_prefix}ld}"
527 ranlib="${RANLIB-${cross_prefix}ranlib}"
528 nm="${NM-${cross_prefix}nm}"
529 strip="${STRIP-${cross_prefix}strip}"
530 windres="${WINDRES-${cross_prefix}windres}"
531 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
532 query_pkg_config() {
533 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
535 pkg_config=query_pkg_config
536 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
538 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
539 ARFLAGS="${ARFLAGS-rv}"
541 # default flags for all hosts
542 # We use -fwrapv to tell the compiler that we require a C dialect where
543 # left shift of signed integers is well defined and has the expected
544 # 2s-complement style results. (Both clang and gcc agree that it
545 # provides these semantics.)
546 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
547 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
548 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
549 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
551 # Flags that are needed during configure but later taken care of by Meson
552 CONFIGURE_CFLAGS="-std=gnu99 -Wall"
553 CONFIGURE_LDFLAGS=
556 check_define() {
557 cat > $TMPC <<EOF
558 #if !defined($1)
559 #error $1 not defined
560 #endif
561 int main(void) { return 0; }
563 compile_object
566 check_include() {
567 cat > $TMPC <<EOF
568 #include <$1>
569 int main(void) { return 0; }
571 compile_object
574 write_c_skeleton() {
575 cat > $TMPC <<EOF
576 int main(void) { return 0; }
580 write_c_fuzzer_skeleton() {
581 cat > $TMPC <<EOF
582 #include <stdint.h>
583 #include <sys/types.h>
584 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
585 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
589 if check_define __linux__ ; then
590 targetos="Linux"
591 elif check_define _WIN32 ; then
592 targetos='MINGW32'
593 elif check_define __OpenBSD__ ; then
594 targetos='OpenBSD'
595 elif check_define __sun__ ; then
596 targetos='SunOS'
597 elif check_define __HAIKU__ ; then
598 targetos='Haiku'
599 elif check_define __FreeBSD__ ; then
600 targetos='FreeBSD'
601 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
602 targetos='GNU/kFreeBSD'
603 elif check_define __DragonFly__ ; then
604 targetos='DragonFly'
605 elif check_define __NetBSD__; then
606 targetos='NetBSD'
607 elif check_define __APPLE__; then
608 targetos='Darwin'
609 else
610 # This is a fatal error, but don't report it yet, because we
611 # might be going to just print the --help text, or it might
612 # be the result of a missing compiler.
613 targetos='bogus'
616 # Some host OSes need non-standard checks for which CPU to use.
617 # Note that these checks are broken for cross-compilation: if you're
618 # cross-compiling to one of these OSes then you'll need to specify
619 # the correct CPU with the --cpu option.
620 case $targetos in
621 Darwin)
622 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
623 # run 64-bit userspace code.
624 # If the user didn't specify a CPU explicitly and the kernel says this is
625 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
626 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
627 cpu="x86_64"
629 HOST_DSOSUF=".dylib"
631 SunOS)
632 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
633 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
634 cpu="x86_64"
636 esac
638 if test ! -z "$cpu" ; then
639 # command line argument
641 elif check_define __i386__ ; then
642 cpu="i386"
643 elif check_define __x86_64__ ; then
644 if check_define __ILP32__ ; then
645 cpu="x32"
646 else
647 cpu="x86_64"
649 elif check_define __sparc__ ; then
650 if check_define __arch64__ ; then
651 cpu="sparc64"
652 else
653 cpu="sparc"
655 elif check_define _ARCH_PPC ; then
656 if check_define _ARCH_PPC64 ; then
657 if check_define _LITTLE_ENDIAN ; then
658 cpu="ppc64le"
659 else
660 cpu="ppc64"
662 else
663 cpu="ppc"
665 elif check_define __mips__ ; then
666 cpu="mips"
667 elif check_define __s390__ ; then
668 if check_define __s390x__ ; then
669 cpu="s390x"
670 else
671 cpu="s390"
673 elif check_define __riscv ; then
674 if check_define _LP64 ; then
675 cpu="riscv64"
676 else
677 cpu="riscv32"
679 elif check_define __arm__ ; then
680 cpu="arm"
681 elif check_define __aarch64__ ; then
682 cpu="aarch64"
683 else
684 cpu=$(uname -m)
687 ARCH=
688 # Normalise host CPU name and set ARCH.
689 # Note that this case should only have supported host CPUs, not guests.
690 case "$cpu" in
691 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
693 ppc64le)
694 ARCH="ppc64"
696 i386|i486|i586|i686|i86pc|BePC)
697 cpu="i386"
699 x86_64|amd64)
700 cpu="x86_64"
702 armv*b|armv*l|arm)
703 cpu="arm"
705 aarch64)
706 cpu="aarch64"
708 mips*)
709 cpu="mips"
711 sparc|sun4[cdmuv])
712 cpu="sparc"
715 # This will result in either an error or falling back to TCI later
716 ARCH=unknown
718 esac
719 if test -z "$ARCH"; then
720 ARCH="$cpu"
723 # OS specific
725 case $targetos in
726 MINGW32*)
727 mingw32="yes"
728 audio_possible_drivers="dsound sdl"
729 if check_include dsound.h; then
730 audio_drv_list="dsound"
731 else
732 audio_drv_list=""
734 supported_os="yes"
735 pie="no"
737 GNU/kFreeBSD)
738 bsd="yes"
739 audio_drv_list="oss try-sdl"
740 audio_possible_drivers="oss sdl pa"
742 FreeBSD)
743 bsd="yes"
744 make="${MAKE-gmake}"
745 audio_drv_list="oss try-sdl"
746 audio_possible_drivers="oss sdl pa"
747 # needed for kinfo_getvmmap(3) in libutil.h
748 netmap="" # enable netmap autodetect
750 DragonFly)
751 bsd="yes"
752 make="${MAKE-gmake}"
753 audio_drv_list="oss try-sdl"
754 audio_possible_drivers="oss sdl pa"
756 NetBSD)
757 bsd="yes"
758 make="${MAKE-gmake}"
759 audio_drv_list="oss try-sdl"
760 audio_possible_drivers="oss sdl"
761 oss_lib="-lossaudio"
763 OpenBSD)
764 bsd="yes"
765 make="${MAKE-gmake}"
766 audio_drv_list="try-sdl"
767 audio_possible_drivers="sdl"
769 Darwin)
770 bsd="yes"
771 darwin="yes"
772 if [ "$cpu" = "x86_64" ] ; then
773 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
774 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
776 cocoa="enabled"
777 audio_drv_list="coreaudio try-sdl"
778 audio_possible_drivers="coreaudio sdl"
779 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
780 # Disable attempts to use ObjectiveC features in os/object.h since they
781 # won't work when we're compiling with gcc as a C compiler.
782 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
784 SunOS)
785 solaris="yes"
786 make="${MAKE-gmake}"
787 smbd="${SMBD-/usr/sfw/sbin/smbd}"
788 if test -f /usr/include/sys/soundcard.h ; then
789 audio_drv_list="oss try-sdl"
791 audio_possible_drivers="oss sdl"
792 # needed for CMSG_ macros in sys/socket.h
793 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
794 # needed for TIOCWIN* defines in termios.h
795 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
797 Haiku)
798 haiku="yes"
799 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS"
801 Linux)
802 audio_drv_list="try-pa oss"
803 audio_possible_drivers="oss alsa sdl pa"
804 linux="yes"
805 linux_user="yes"
806 vhost_user=${default_feature:-yes}
808 esac
810 if [ "$bsd" = "yes" ] ; then
811 if [ "$darwin" != "yes" ] ; then
812 bsd_user="yes"
816 : ${make=${MAKE-make}}
818 # We prefer python 3.x. A bare 'python' is traditionally
819 # python 2.x, but some distros have it as python 3.x, so
820 # we check that too
821 python=
822 explicit_python=no
823 for binary in "${PYTHON-python3}" python
825 if has "$binary"
826 then
827 python=$(command -v "$binary")
828 break
830 done
833 # Check for ancillary tools used in testing
834 genisoimage=
835 for binary in genisoimage mkisofs
837 if has $binary
838 then
839 genisoimage=$(command -v "$binary")
840 break
842 done
844 : ${smbd=${SMBD-/usr/sbin/smbd}}
846 # Default objcc to clang if available, otherwise use CC
847 if has clang; then
848 objcc=clang
849 else
850 objcc="$cc"
853 if test "$mingw32" = "yes" ; then
854 EXESUF=".exe"
855 HOST_DSOSUF=".dll"
856 # MinGW needs -mthreads for TLS and macro _MT.
857 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
858 write_c_skeleton;
859 prefix="/qemu"
860 qemu_suffix=""
861 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
864 werror=""
866 for opt do
867 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
868 case "$opt" in
869 --help|-h) show_help=yes
871 --version|-V) exec cat $source_path/VERSION
873 --prefix=*) prefix="$optarg"
875 --interp-prefix=*) interp_prefix="$optarg"
877 --cross-prefix=*)
879 --cc=*)
881 --host-cc=*) host_cc="$optarg"
883 --cxx=*)
885 --iasl=*) iasl="$optarg"
887 --objcc=*) objcc="$optarg"
889 --make=*) make="$optarg"
891 --install=*)
893 --python=*) python="$optarg" ; explicit_python=yes
895 --sphinx-build=*) sphinx_build="$optarg"
897 --skip-meson) skip_meson=yes
899 --meson=*) meson="$optarg"
901 --ninja=*) ninja="$optarg"
903 --smbd=*) smbd="$optarg"
905 --extra-cflags=*)
907 --extra-cxxflags=*)
909 --extra-ldflags=*)
911 --enable-debug-info)
913 --disable-debug-info)
915 --cross-cc-*)
917 --enable-modules)
918 modules="yes"
920 --disable-modules)
921 modules="no"
923 --disable-module-upgrades) module_upgrades="no"
925 --enable-module-upgrades) module_upgrades="yes"
927 --cpu=*)
929 --target-list=*) target_list="$optarg"
930 if test "$target_list_exclude"; then
931 error_exit "Can't mix --target-list with --target-list-exclude"
934 --target-list-exclude=*) target_list_exclude="$optarg"
935 if test "$target_list"; then
936 error_exit "Can't mix --target-list-exclude with --target-list"
939 --enable-trace-backends=*) trace_backends="$optarg"
941 # XXX: backwards compatibility
942 --enable-trace-backend=*) trace_backends="$optarg"
944 --with-trace-file=*) trace_file="$optarg"
946 --with-default-devices) default_devices="true"
948 --without-default-devices) default_devices="false"
950 --without-default-features) # processed above
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=*) docdir="$optarg"
976 --localedir=*) localedir="$optarg"
978 --sysconfdir=*) sysconfdir="$optarg"
980 --localstatedir=*) local_statedir="$optarg"
982 --firmwarepath=*) firmwarepath="$optarg"
984 --host=*|--build=*|\
985 --disable-dependency-tracking|\
986 --sbindir=*|--sharedstatedir=*|\
987 --oldincludedir=*|--datarootdir=*|--infodir=*|\
988 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
989 # These switches are silently ignored, for compatibility with
990 # autoconf-generated configure scripts. This allows QEMU's
991 # configure to be used by RPM and similar macros that set
992 # lots of directory switches by default.
994 --disable-sdl) sdl="disabled"
996 --enable-sdl) sdl="enabled"
998 --disable-sdl-image) sdl_image="disabled"
1000 --enable-sdl-image) sdl_image="enabled"
1002 --disable-qom-cast-debug) qom_cast_debug="no"
1004 --enable-qom-cast-debug) qom_cast_debug="yes"
1006 --disable-virtfs) virtfs="disabled"
1008 --enable-virtfs) virtfs="enabled"
1010 --disable-libudev) libudev="disabled"
1012 --enable-libudev) libudev="enabled"
1014 --disable-virtiofsd) virtiofsd="disabled"
1016 --enable-virtiofsd) virtiofsd="enabled"
1018 --disable-mpath) mpath="disabled"
1020 --enable-mpath) mpath="enabled"
1022 --disable-vnc) vnc="disabled"
1024 --enable-vnc) vnc="enabled"
1026 --disable-gettext) gettext="disabled"
1028 --enable-gettext) gettext="enabled"
1030 --oss-lib=*) oss_lib="$optarg"
1032 --audio-drv-list=*) audio_drv_list="$optarg"
1034 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1036 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1038 --enable-debug-tcg) debug_tcg="yes"
1040 --disable-debug-tcg) debug_tcg="no"
1042 --enable-debug)
1043 # Enable debugging options that aren't excessively noisy
1044 debug_tcg="yes"
1045 debug_mutex="yes"
1046 debug="yes"
1047 strip_opt="no"
1048 fortify_source="no"
1050 --enable-sanitizers) sanitizers="yes"
1052 --disable-sanitizers) sanitizers="no"
1054 --enable-tsan) tsan="yes"
1056 --disable-tsan) tsan="no"
1058 --enable-sparse) sparse="enabled"
1060 --disable-sparse) sparse="disabled"
1062 --disable-strip) strip_opt="no"
1064 --disable-vnc-sasl) vnc_sasl="disabled"
1066 --enable-vnc-sasl) vnc_sasl="enabled"
1068 --disable-vnc-jpeg) vnc_jpeg="disabled"
1070 --enable-vnc-jpeg) vnc_jpeg="enabled"
1072 --disable-vnc-png) vnc_png="disabled"
1074 --enable-vnc-png) vnc_png="enabled"
1076 --disable-slirp) slirp="disabled"
1078 --enable-slirp) slirp="enabled"
1080 --enable-slirp=git) slirp="internal"
1082 --enable-slirp=system) slirp="system"
1084 --disable-vde) vde="no"
1086 --enable-vde) vde="yes"
1088 --disable-netmap) netmap="no"
1090 --enable-netmap) netmap="yes"
1092 --disable-xen) xen="disabled"
1094 --enable-xen) xen="enabled"
1096 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
1098 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
1100 --disable-brlapi) brlapi="disabled"
1102 --enable-brlapi) brlapi="enabled"
1104 --disable-kvm) kvm="disabled"
1106 --enable-kvm) kvm="enabled"
1108 --disable-hax) hax="disabled"
1110 --enable-hax) hax="enabled"
1112 --disable-hvf) hvf="disabled"
1114 --enable-hvf) hvf="enabled"
1116 --disable-whpx) whpx="disabled"
1118 --enable-whpx) whpx="enabled"
1120 --disable-tcg-interpreter) tcg_interpreter="no"
1122 --enable-tcg-interpreter) tcg_interpreter="yes"
1124 --disable-cap-ng) cap_ng="disabled"
1126 --enable-cap-ng) cap_ng="enabled"
1128 --disable-tcg) tcg="disabled"
1130 --enable-tcg) tcg="enabled"
1132 --disable-malloc-trim) malloc_trim="disabled"
1134 --enable-malloc-trim) malloc_trim="enabled"
1136 --disable-spice) spice="no"
1138 --enable-spice) spice="yes"
1140 --disable-libiscsi) libiscsi="disabled"
1142 --enable-libiscsi) libiscsi="enabled"
1144 --disable-libnfs) libnfs="disabled"
1146 --enable-libnfs) libnfs="enabled"
1148 --enable-profiler) profiler="yes"
1150 --disable-cocoa) cocoa="disabled"
1152 --enable-cocoa) cocoa="enabled"
1154 --disable-system) softmmu="no"
1156 --enable-system) softmmu="yes"
1158 --disable-user)
1159 linux_user="no" ;
1160 bsd_user="no" ;
1162 --enable-user) ;;
1163 --disable-linux-user) linux_user="no"
1165 --enable-linux-user) linux_user="yes"
1167 --disable-bsd-user) bsd_user="no"
1169 --enable-bsd-user) bsd_user="yes"
1171 --enable-pie) pie="yes"
1173 --disable-pie) pie="no"
1175 --enable-werror) werror="yes"
1177 --disable-werror) werror="no"
1179 --enable-lto) lto="true"
1181 --disable-lto) lto="false"
1183 --enable-stack-protector) stack_protector="yes"
1185 --disable-stack-protector) stack_protector="no"
1187 --enable-safe-stack) safe_stack="yes"
1189 --disable-safe-stack) safe_stack="no"
1191 --enable-cfi)
1192 cfi="true";
1193 lto="true";
1195 --disable-cfi) cfi="false"
1197 --enable-cfi-debug) cfi_debug="true"
1199 --disable-cfi-debug) cfi_debug="false"
1201 --disable-curses) curses="disabled"
1203 --enable-curses) curses="enabled"
1205 --disable-iconv) iconv="disabled"
1207 --enable-iconv) iconv="enabled"
1209 --disable-curl) curl="disabled"
1211 --enable-curl) curl="enabled"
1213 --disable-fdt) fdt="disabled"
1215 --enable-fdt) fdt="enabled"
1217 --enable-fdt=git) fdt="internal"
1219 --enable-fdt=system) fdt="system"
1221 --disable-linux-aio) linux_aio="no"
1223 --enable-linux-aio) linux_aio="yes"
1225 --disable-linux-io-uring) linux_io_uring="no"
1227 --enable-linux-io-uring) linux_io_uring="yes"
1229 --disable-attr) attr="disabled"
1231 --enable-attr) attr="enabled"
1233 --disable-membarrier) membarrier="no"
1235 --enable-membarrier) membarrier="yes"
1237 --disable-blobs) blobs="false"
1239 --with-pkgversion=*) pkgversion="$optarg"
1241 --with-coroutine=*) coroutine="$optarg"
1243 --disable-coroutine-pool) coroutine_pool="no"
1245 --enable-coroutine-pool) coroutine_pool="yes"
1247 --enable-debug-stack-usage) debug_stack_usage="yes"
1249 --enable-crypto-afalg) crypto_afalg="yes"
1251 --disable-crypto-afalg) crypto_afalg="no"
1253 --disable-docs) docs="disabled"
1255 --enable-docs) docs="enabled"
1257 --disable-vhost-net) vhost_net="no"
1259 --enable-vhost-net) vhost_net="yes"
1261 --disable-vhost-crypto) vhost_crypto="no"
1263 --enable-vhost-crypto) vhost_crypto="yes"
1265 --disable-vhost-scsi) vhost_scsi="no"
1267 --enable-vhost-scsi) vhost_scsi="yes"
1269 --disable-vhost-vsock) vhost_vsock="no"
1271 --enable-vhost-vsock) vhost_vsock="yes"
1273 --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
1275 --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
1277 --disable-vhost-user-fs) vhost_user_fs="no"
1279 --enable-vhost-user-fs) vhost_user_fs="yes"
1281 --disable-opengl) opengl="no"
1283 --enable-opengl) opengl="yes"
1285 --disable-rbd) rbd="disabled"
1287 --enable-rbd) rbd="enabled"
1289 --disable-xfsctl) xfs="no"
1291 --enable-xfsctl) xfs="yes"
1293 --disable-smartcard) smartcard="no"
1295 --enable-smartcard) smartcard="yes"
1297 --disable-u2f) u2f="disabled"
1299 --enable-u2f) u2f="enabled"
1301 --disable-libusb) libusb="no"
1303 --enable-libusb) libusb="yes"
1305 --disable-usb-redir) usb_redir="no"
1307 --enable-usb-redir) usb_redir="yes"
1309 --disable-zlib-test)
1311 --disable-lzo) lzo="disabled"
1313 --enable-lzo) lzo="enabled"
1315 --disable-snappy) snappy="disabled"
1317 --enable-snappy) snappy="enabled"
1319 --disable-bzip2) bzip2="disabled"
1321 --enable-bzip2) bzip2="enabled"
1323 --enable-lzfse) lzfse="enabled"
1325 --disable-lzfse) lzfse="disabled"
1327 --disable-zstd) zstd="disabled"
1329 --enable-zstd) zstd="enabled"
1331 --enable-guest-agent) guest_agent="yes"
1333 --disable-guest-agent) guest_agent="no"
1335 --enable-guest-agent-msi) guest_agent_msi="yes"
1337 --disable-guest-agent-msi) guest_agent_msi="no"
1339 --with-vss-sdk) vss_win32_sdk=""
1341 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1343 --without-vss-sdk) vss_win32_sdk="no"
1345 --with-win-sdk) win_sdk=""
1347 --with-win-sdk=*) win_sdk="$optarg"
1349 --without-win-sdk) win_sdk="no"
1351 --enable-tools) want_tools="yes"
1353 --disable-tools) want_tools="no"
1355 --enable-seccomp) seccomp="enabled"
1357 --disable-seccomp) seccomp="disabled"
1359 --disable-glusterfs) glusterfs="disabled"
1361 --disable-avx2) avx2_opt="no"
1363 --enable-avx2) avx2_opt="yes"
1365 --disable-avx512f) avx512f_opt="no"
1367 --enable-avx512f) avx512f_opt="yes"
1370 --enable-glusterfs) glusterfs="enabled"
1372 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1373 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1375 --enable-vhdx|--disable-vhdx)
1376 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1378 --enable-uuid|--disable-uuid)
1379 echo "$0: $opt is obsolete, UUID support is always built" >&2
1381 --disable-gtk) gtk="no"
1383 --enable-gtk) gtk="yes"
1385 --tls-priority=*) tls_priority="$optarg"
1387 --disable-gnutls) gnutls="no"
1389 --enable-gnutls) gnutls="yes"
1391 --disable-nettle) nettle="no"
1393 --enable-nettle) nettle="yes"
1395 --disable-gcrypt) gcrypt="no"
1397 --enable-gcrypt) gcrypt="yes"
1399 --disable-auth-pam) auth_pam="no"
1401 --enable-auth-pam) auth_pam="yes"
1403 --enable-rdma) rdma="yes"
1405 --disable-rdma) rdma="no"
1407 --enable-pvrdma) pvrdma="yes"
1409 --disable-pvrdma) pvrdma="no"
1411 --disable-vte) vte="no"
1413 --enable-vte) vte="yes"
1415 --disable-virglrenderer) virglrenderer="no"
1417 --enable-virglrenderer) virglrenderer="yes"
1419 --disable-tpm) tpm="no"
1421 --enable-tpm) tpm="yes"
1423 --disable-libssh) libssh="no"
1425 --enable-libssh) libssh="yes"
1427 --disable-live-block-migration) live_block_migration="no"
1429 --enable-live-block-migration) live_block_migration="yes"
1431 --disable-numa) numa="no"
1433 --enable-numa) numa="yes"
1435 --disable-libxml2) libxml2="no"
1437 --enable-libxml2) libxml2="yes"
1439 --disable-tcmalloc) tcmalloc="no"
1441 --enable-tcmalloc) tcmalloc="yes"
1443 --disable-jemalloc) jemalloc="no"
1445 --enable-jemalloc) jemalloc="yes"
1447 --disable-replication) replication="no"
1449 --enable-replication) replication="yes"
1451 --disable-bochs) bochs="no"
1453 --enable-bochs) bochs="yes"
1455 --disable-cloop) cloop="no"
1457 --enable-cloop) cloop="yes"
1459 --disable-dmg) dmg="no"
1461 --enable-dmg) dmg="yes"
1463 --disable-qcow1) qcow1="no"
1465 --enable-qcow1) qcow1="yes"
1467 --disable-vdi) vdi="no"
1469 --enable-vdi) vdi="yes"
1471 --disable-vvfat) vvfat="no"
1473 --enable-vvfat) vvfat="yes"
1475 --disable-qed) qed="no"
1477 --enable-qed) qed="yes"
1479 --disable-parallels) parallels="no"
1481 --enable-parallels) parallels="yes"
1483 --disable-sheepdog) sheepdog="no"
1485 --enable-sheepdog) sheepdog="yes"
1487 --disable-vhost-user) vhost_user="no"
1489 --enable-vhost-user) vhost_user="yes"
1491 --disable-vhost-vdpa) vhost_vdpa="no"
1493 --enable-vhost-vdpa) vhost_vdpa="yes"
1495 --disable-vhost-kernel) vhost_kernel="no"
1497 --enable-vhost-kernel) vhost_kernel="yes"
1499 --disable-capstone) capstone="disabled"
1501 --enable-capstone) capstone="enabled"
1503 --enable-capstone=git) capstone="internal"
1505 --enable-capstone=system) capstone="system"
1507 --with-git=*) git="$optarg"
1509 --enable-git-update) git_update=yes
1511 --disable-git-update) git_update=no
1513 --enable-debug-mutex) debug_mutex=yes
1515 --disable-debug-mutex) debug_mutex=no
1517 --enable-libpmem) libpmem=yes
1519 --disable-libpmem) libpmem=no
1521 --enable-xkbcommon) xkbcommon="enabled"
1523 --disable-xkbcommon) xkbcommon="disabled"
1525 --enable-plugins) plugins="yes"
1527 --disable-plugins) plugins="no"
1529 --enable-containers) use_containers="yes"
1531 --disable-containers) use_containers="no"
1533 --enable-fuzzing) fuzzing=yes
1535 --disable-fuzzing) fuzzing=no
1537 --gdb=*) gdb_bin="$optarg"
1539 --enable-rng-none) rng_none=yes
1541 --disable-rng-none) rng_none=no
1543 --enable-keyring) secret_keyring="yes"
1545 --disable-keyring) secret_keyring="no"
1547 --enable-libdaxctl) libdaxctl=yes
1549 --disable-libdaxctl) libdaxctl=no
1551 --enable-fuse) fuse="enabled"
1553 --disable-fuse) fuse="disabled"
1555 --enable-fuse-lseek) fuse_lseek="enabled"
1557 --disable-fuse-lseek) fuse_lseek="disabled"
1560 echo "ERROR: unknown option $opt"
1561 echo "Try '$0 --help' for more information"
1562 exit 1
1564 esac
1565 done
1567 libdir="${libdir:-$prefix/lib}"
1568 libexecdir="${libexecdir:-$prefix/libexec}"
1569 includedir="${includedir:-$prefix/include}"
1571 if test "$mingw32" = "yes" ; then
1572 mandir="$prefix"
1573 datadir="$prefix"
1574 docdir="$prefix"
1575 bindir="$prefix"
1576 sysconfdir="$prefix"
1577 local_statedir="$prefix"
1578 else
1579 mandir="${mandir:-$prefix/share/man}"
1580 datadir="${datadir:-$prefix/share}"
1581 docdir="${docdir:-$prefix/share/doc}"
1582 bindir="${bindir:-$prefix/bin}"
1583 sysconfdir="${sysconfdir:-$prefix/etc}"
1584 local_statedir="${local_statedir:-$prefix/var}"
1586 firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
1587 localedir="${localedir:-$datadir/locale}"
1589 case "$cpu" in
1590 ppc)
1591 CPU_CFLAGS="-m32"
1592 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1594 ppc64)
1595 CPU_CFLAGS="-m64"
1596 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1598 sparc)
1599 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1600 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1602 sparc64)
1603 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1604 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1606 s390)
1607 CPU_CFLAGS="-m31"
1608 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1610 s390x)
1611 CPU_CFLAGS="-m64"
1612 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1614 i386)
1615 CPU_CFLAGS="-m32"
1616 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1618 x86_64)
1619 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1620 # If we truly care, we should simply detect this case at
1621 # runtime and generate the fallback to serial emulation.
1622 CPU_CFLAGS="-m64 -mcx16"
1623 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1625 x32)
1626 CPU_CFLAGS="-mx32"
1627 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1629 # No special flags required for other host CPUs
1630 esac
1632 eval "cross_cc_${cpu}=\$host_cc"
1633 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1634 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1636 # For user-mode emulation the host arch has to be one we explicitly
1637 # support, even if we're using TCI.
1638 if [ "$ARCH" = "unknown" ]; then
1639 bsd_user="no"
1640 linux_user="no"
1643 default_target_list=""
1644 deprecated_targets_list=ppc64abi32-linux-user,tilegx-linux-user,lm32-softmmu,unicore32-softmmu
1645 deprecated_features=""
1646 mak_wilds=""
1648 if [ "$softmmu" = "yes" ]; then
1649 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak"
1651 if [ "$linux_user" = "yes" ]; then
1652 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak"
1654 if [ "$bsd_user" = "yes" ]; then
1655 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak"
1658 # If the user doesn't explicitly specify a deprecated target we will
1659 # skip it.
1660 if test -z "$target_list"; then
1661 if test -z "$target_list_exclude"; then
1662 target_list_exclude="$deprecated_targets_list"
1663 else
1664 target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1668 for config in $mak_wilds; do
1669 target="$(basename "$config" .mak)"
1670 if echo "$target_list_exclude" | grep -vq "$target"; then
1671 default_target_list="${default_target_list} $target"
1673 done
1675 # Enumerate public trace backends for --help output
1676 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1678 if test x"$show_help" = x"yes" ; then
1679 cat << EOF
1681 Usage: configure [options]
1682 Options: [defaults in brackets after descriptions]
1684 Standard options:
1685 --help print this message
1686 --prefix=PREFIX install in PREFIX [$prefix]
1687 --interp-prefix=PREFIX where to find shared libraries, etc.
1688 use %M for cpu name [$interp_prefix]
1689 --target-list=LIST set target list (default: build all non-deprecated)
1690 $(echo Available targets: $default_target_list | \
1691 fold -s -w 53 | sed -e 's/^/ /')
1692 $(echo Deprecated targets: $deprecated_targets_list | \
1693 fold -s -w 53 | sed -e 's/^/ /')
1694 --target-list-exclude=LIST exclude a set of targets from the default target-list
1696 Advanced options (experts only):
1697 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1698 --cc=CC use C compiler CC [$cc]
1699 --iasl=IASL use ACPI compiler IASL [$iasl]
1700 --host-cc=CC use C compiler CC [$host_cc] for code run at
1701 build time
1702 --cxx=CXX use C++ compiler CXX [$cxx]
1703 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1704 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1705 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1706 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1707 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1708 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1709 --make=MAKE use specified make [$make]
1710 --python=PYTHON use specified python [$python]
1711 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1712 --meson=MESON use specified meson [$meson]
1713 --ninja=NINJA use specified ninja [$ninja]
1714 --smbd=SMBD use specified smbd [$smbd]
1715 --with-git=GIT use specified git [$git]
1716 --static enable static build [$static]
1717 --mandir=PATH install man pages in PATH
1718 --datadir=PATH install firmware in PATH/$qemu_suffix
1719 --localedir=PATH install translation in PATH/$qemu_suffix
1720 --docdir=PATH install documentation in PATH/$qemu_suffix
1721 --bindir=PATH install binaries in PATH
1722 --libdir=PATH install libraries in PATH
1723 --libexecdir=PATH install helper binaries in PATH
1724 --sysconfdir=PATH install config in PATH/$qemu_suffix
1725 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1726 --firmwarepath=PATH search PATH for firmware files
1727 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1728 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1729 --with-pkgversion=VERS use specified string as sub-version of the package
1730 --without-default-features default all --enable-* options to "disabled"
1731 --without-default-devices do not include any device that is not needed to
1732 start the emulator (only use if you are including
1733 desired devices in default-configs/devices/)
1734 --enable-debug enable common debug build options
1735 --enable-sanitizers enable default sanitizers
1736 --enable-tsan enable thread sanitizer
1737 --disable-strip disable stripping binaries
1738 --disable-werror disable compilation abort on warning
1739 --disable-stack-protector disable compiler-provided stack protection
1740 --audio-drv-list=LIST set audio drivers list:
1741 Available drivers: $audio_possible_drivers
1742 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1743 --block-drv-rw-whitelist=L
1744 set block driver read-write whitelist
1745 (affects only QEMU, not qemu-img)
1746 --block-drv-ro-whitelist=L
1747 set block driver read-only whitelist
1748 (affects only QEMU, not qemu-img)
1749 --enable-trace-backends=B Set trace backend
1750 Available backends: $trace_backend_list
1751 --with-trace-file=NAME Full PATH,NAME of file to store traces
1752 Default:trace-<pid>
1753 --disable-slirp disable SLIRP userspace network connectivity
1754 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1755 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1756 --oss-lib path to OSS library
1757 --cpu=CPU Build for host CPU [$cpu]
1758 --with-coroutine=BACKEND coroutine backend. Supported options:
1759 ucontext, sigaltstack, windows
1760 --enable-gcov enable test coverage analysis with gcov
1761 --disable-blobs disable installing provided firmware blobs
1762 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1763 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1764 --tls-priority default TLS protocol/cipher priority string
1765 --enable-gprof QEMU profiling with gprof
1766 --enable-profiler profiler support
1767 --enable-debug-stack-usage
1768 track the maximum stack usage of stacks created by qemu_alloc_stack
1769 --enable-plugins
1770 enable plugins via shared library loading
1771 --disable-containers don't use containers for cross-building
1772 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1774 Optional features, enabled with --enable-FEATURE and
1775 disabled with --disable-FEATURE, default is enabled if available
1776 (unless built with --without-default-features):
1778 system all system emulation targets
1779 user supported user emulation targets
1780 linux-user all linux usermode emulation targets
1781 bsd-user all BSD usermode emulation targets
1782 docs build documentation
1783 guest-agent build the QEMU Guest Agent
1784 guest-agent-msi build guest agent Windows MSI installation package
1785 pie Position Independent Executables
1786 modules modules support (non-Windows)
1787 module-upgrades try to load modules from alternate paths for upgrades
1788 debug-tcg TCG debugging (default is disabled)
1789 debug-info debugging information
1790 lto Enable Link-Time Optimization.
1791 sparse sparse checker
1792 safe-stack SafeStack Stack Smash Protection. Depends on
1793 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1794 cfi Enable Control-Flow Integrity for indirect function calls.
1795 In case of a cfi violation, QEMU is terminated with SIGILL
1796 Depends on lto and is incompatible with modules
1797 Automatically enables Link-Time Optimization (lto)
1798 cfi-debug In case of a cfi violation, a message containing the line that
1799 triggered the error is written to stderr. After the error,
1800 QEMU is still terminated with SIGILL
1801 gnutls GNUTLS cryptography support
1802 nettle nettle cryptography support
1803 gcrypt libgcrypt cryptography support
1804 auth-pam PAM access control
1805 sdl SDL UI
1806 sdl-image SDL Image support for icons
1807 gtk gtk UI
1808 vte vte support for the gtk UI
1809 curses curses UI
1810 iconv font glyph conversion support
1811 vnc VNC UI support
1812 vnc-sasl SASL encryption for VNC server
1813 vnc-jpeg JPEG lossy compression for VNC server
1814 vnc-png PNG compression for VNC server
1815 cocoa Cocoa UI (Mac OS X only)
1816 virtfs VirtFS
1817 virtiofsd build virtiofs daemon (virtiofsd)
1818 libudev Use libudev to enumerate host devices
1819 mpath Multipath persistent reservation passthrough
1820 xen xen backend driver support
1821 xen-pci-passthrough PCI passthrough support for Xen
1822 brlapi BrlAPI (Braile)
1823 curl curl connectivity
1824 membarrier membarrier system call (for Linux 4.14+ or Windows)
1825 fdt fdt device tree
1826 kvm KVM acceleration support
1827 hax HAX acceleration support
1828 hvf Hypervisor.framework acceleration support
1829 whpx Windows Hypervisor Platform acceleration support
1830 rdma Enable RDMA-based migration
1831 pvrdma Enable PVRDMA support
1832 vde support for vde network
1833 netmap support for netmap network
1834 linux-aio Linux AIO support
1835 linux-io-uring Linux io_uring support
1836 cap-ng libcap-ng support
1837 attr attr and xattr support
1838 vhost-net vhost-net kernel acceleration support
1839 vhost-vsock virtio sockets device support
1840 vhost-scsi vhost-scsi kernel target support
1841 vhost-crypto vhost-user-crypto backend support
1842 vhost-kernel vhost kernel backend support
1843 vhost-user vhost-user backend support
1844 vhost-user-blk-server vhost-user-blk server support
1845 vhost-vdpa vhost-vdpa kernel backend support
1846 spice spice
1847 rbd rados block device (rbd)
1848 libiscsi iscsi support
1849 libnfs nfs support
1850 smartcard smartcard support (libcacard)
1851 u2f U2F support (u2f-emu)
1852 libusb libusb (for usb passthrough)
1853 live-block-migration Block migration in the main migration stream
1854 usb-redir usb network redirection support
1855 lzo support of lzo compression library
1856 snappy support of snappy compression library
1857 bzip2 support of bzip2 compression library
1858 (for reading bzip2-compressed dmg images)
1859 lzfse support of lzfse compression library
1860 (for reading lzfse-compressed dmg images)
1861 zstd support for zstd compression library
1862 (for migration compression and qcow2 cluster compression)
1863 seccomp seccomp support
1864 coroutine-pool coroutine freelist (better performance)
1865 glusterfs GlusterFS backend
1866 tpm TPM support
1867 libssh ssh block device support
1868 numa libnuma support
1869 libxml2 for Parallels image format
1870 tcmalloc tcmalloc support
1871 jemalloc jemalloc support
1872 avx2 AVX2 optimization support
1873 avx512f AVX512F optimization support
1874 replication replication support
1875 opengl opengl support
1876 virglrenderer virgl rendering support
1877 xfsctl xfsctl support
1878 qom-cast-debug cast debugging support
1879 tools build qemu-io, qemu-nbd and qemu-img tools
1880 bochs bochs image format support
1881 cloop cloop image format support
1882 dmg dmg image format support
1883 qcow1 qcow v1 image format support
1884 vdi vdi image format support
1885 vvfat vvfat image format support
1886 qed qed image format support
1887 parallels parallels image format support
1888 sheepdog sheepdog block driver support (deprecated)
1889 crypto-afalg Linux AF_ALG crypto backend driver
1890 capstone capstone disassembler support
1891 debug-mutex mutex debugging support
1892 libpmem libpmem support
1893 xkbcommon xkbcommon support
1894 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1895 libdaxctl libdaxctl support
1896 fuse FUSE block device export
1897 fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports
1899 NOTE: The object files are built at the place where configure is launched
1901 exit 0
1904 # Remove old dependency files to make sure that they get properly regenerated
1905 rm -f */config-devices.mak.d
1907 if test -z "$python"
1908 then
1909 error_exit "Python not found. Use --python=/path/to/python"
1911 if ! has "$make"
1912 then
1913 error_exit "GNU make ($make) not found"
1916 # Note that if the Python conditional here evaluates True we will exit
1917 # with status 1 which is a shell 'false' value.
1918 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1919 error_exit "Cannot use '$python', Python >= 3.6 is required." \
1920 "Use --python=/path/to/python to specify a supported Python."
1923 # Preserve python version since some functionality is dependent on it
1924 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)
1926 # Suppress writing compiled files
1927 python="$python -B"
1929 if test -z "$meson"; then
1930 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
1931 meson=meson
1932 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
1933 meson=git
1934 elif test -e "${source_path}/meson/meson.py" ; then
1935 meson=internal
1936 else
1937 if test "$explicit_python" = yes; then
1938 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
1939 else
1940 error_exit "Meson not found. Use --meson=/path/to/meson"
1943 else
1944 # Meson uses its own Python interpreter to invoke other Python scripts,
1945 # but the user wants to use the one they specified with --python.
1947 # We do not want to override the distro Python interpreter (and sometimes
1948 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1949 # just require --meson=git|internal together with --python.
1950 if test "$explicit_python" = yes; then
1951 case "$meson" in
1952 git | internal) ;;
1953 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
1954 esac
1958 if test "$meson" = git; then
1959 git_submodules="${git_submodules} meson"
1962 case "$meson" in
1963 git | internal)
1964 meson="$python ${source_path}/meson/meson.py"
1966 *) meson=$(command -v "$meson") ;;
1967 esac
1969 # Probe for ninja
1971 if test -z "$ninja"; then
1972 for c in ninja ninja-build samu; do
1973 if has $c; then
1974 ninja=$(command -v "$c")
1975 break
1977 done
1978 if test -z "$ninja"; then
1979 error_exit "Cannot find Ninja"
1983 # Check that the C compiler works. Doing this here before testing
1984 # the host CPU ensures that we had a valid CC to autodetect the
1985 # $cpu var (and we should bail right here if that's not the case).
1986 # It also allows the help message to be printed without a CC.
1987 write_c_skeleton;
1988 if compile_object ; then
1989 : C compiler works ok
1990 else
1991 error_exit "\"$cc\" either does not exist or does not work"
1993 if ! compile_prog ; then
1994 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1997 # Consult white-list to determine whether to enable werror
1998 # by default. Only enable by default for git builds
1999 if test -z "$werror" ; then
2000 if test -e "$source_path/.git" && \
2001 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2002 werror="yes"
2003 else
2004 werror="no"
2008 if test "$targetos" = "bogus"; then
2009 # Now that we know that we're not printing the help and that
2010 # the compiler works (so the results of the check_defines we used
2011 # to identify the OS are reliable), if we didn't recognize the
2012 # host OS we should stop now.
2013 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2016 # Check whether the compiler matches our minimum requirements:
2017 cat > $TMPC << EOF
2018 #if defined(__clang_major__) && defined(__clang_minor__)
2019 # ifdef __apple_build_version__
2020 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2021 # error You need at least XCode Clang v5.1 to compile QEMU
2022 # endif
2023 # else
2024 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2025 # error You need at least Clang v3.4 to compile QEMU
2026 # endif
2027 # endif
2028 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2029 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2030 # error You need at least GCC v4.8 to compile QEMU
2031 # endif
2032 #else
2033 # error You either need GCC or Clang to compiler QEMU
2034 #endif
2035 int main (void) { return 0; }
2037 if ! compile_prog "" "" ; then
2038 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2041 # Accumulate -Wfoo and -Wno-bar separately.
2042 # We will list all of the enable flags first, and the disable flags second.
2043 # Note that we do not add -Werror, because that would enable it for all
2044 # configure tests. If a configure test failed due to -Werror this would
2045 # just silently disable some features, so it's too error prone.
2047 warn_flags=
2048 add_to warn_flags -Wold-style-declaration
2049 add_to warn_flags -Wold-style-definition
2050 add_to warn_flags -Wtype-limits
2051 add_to warn_flags -Wformat-security
2052 add_to warn_flags -Wformat-y2k
2053 add_to warn_flags -Winit-self
2054 add_to warn_flags -Wignored-qualifiers
2055 add_to warn_flags -Wempty-body
2056 add_to warn_flags -Wnested-externs
2057 add_to warn_flags -Wendif-labels
2058 add_to warn_flags -Wexpansion-to-defined
2059 add_to warn_flags -Wimplicit-fallthrough=2
2061 nowarn_flags=
2062 add_to nowarn_flags -Wno-initializer-overrides
2063 add_to nowarn_flags -Wno-missing-include-dirs
2064 add_to nowarn_flags -Wno-shift-negative-value
2065 add_to nowarn_flags -Wno-string-plus-int
2066 add_to nowarn_flags -Wno-typedef-redefinition
2067 add_to nowarn_flags -Wno-tautological-type-limit-compare
2068 add_to nowarn_flags -Wno-psabi
2070 gcc_flags="$warn_flags $nowarn_flags"
2072 cc_has_warning_flag() {
2073 write_c_skeleton;
2075 # Use the positive sense of the flag when testing for -Wno-wombat
2076 # support (gcc will happily accept the -Wno- form of unknown
2077 # warning options).
2078 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2079 compile_prog "-Werror $optflag" ""
2082 for flag in $gcc_flags; do
2083 if cc_has_warning_flag $flag ; then
2084 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2086 done
2088 if test "$stack_protector" != "no"; then
2089 cat > $TMPC << EOF
2090 int main(int argc, char *argv[])
2092 char arr[64], *p = arr, *c = argv[0];
2093 while (*c) {
2094 *p++ = *c++;
2096 return 0;
2099 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2100 sp_on=0
2101 for flag in $gcc_flags; do
2102 # We need to check both a compile and a link, since some compiler
2103 # setups fail only on a .c->.o compile and some only at link time
2104 if compile_object "-Werror $flag" &&
2105 compile_prog "-Werror $flag" ""; then
2106 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2107 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2108 sp_on=1
2109 break
2111 done
2112 if test "$stack_protector" = yes; then
2113 if test $sp_on = 0; then
2114 error_exit "Stack protector not supported"
2119 # Disable -Wmissing-braces on older compilers that warn even for
2120 # the "universal" C zero initializer {0}.
2121 cat > $TMPC << EOF
2122 struct {
2123 int a[2];
2124 } x = {0};
2126 if compile_object "-Werror" "" ; then
2128 else
2129 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2132 # Our module code doesn't support Windows
2133 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2134 error_exit "Modules are not available for Windows"
2137 # module_upgrades is only reasonable if modules are enabled
2138 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2139 error_exit "Can't enable module-upgrades as Modules are not enabled"
2142 # Static linking is not possible with modules or PIE
2143 if test "$static" = "yes" ; then
2144 if test "$modules" = "yes" ; then
2145 error_exit "static and modules are mutually incompatible"
2149 # Unconditional check for compiler __thread support
2150 cat > $TMPC << EOF
2151 static __thread int tls_var;
2152 int main(void) { return tls_var; }
2155 if ! compile_prog "-Werror" "" ; then
2156 error_exit "Your compiler does not support the __thread specifier for " \
2157 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2160 cat > $TMPC << EOF
2162 #ifdef __linux__
2163 # define THREAD __thread
2164 #else
2165 # define THREAD
2166 #endif
2167 static THREAD int tls_var;
2168 int main(void) { return tls_var; }
2171 # Check we support --no-pie first; we will need this for building ROMs.
2172 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2173 CFLAGS_NOPIE="-fno-pie"
2176 if test "$static" = "yes"; then
2177 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2178 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2179 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2180 pie="yes"
2181 elif test "$pie" = "yes"; then
2182 error_exit "-static-pie not available due to missing toolchain support"
2183 else
2184 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2185 pie="no"
2187 elif test "$pie" = "no"; then
2188 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2189 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2190 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2191 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2192 pie="yes"
2193 elif test "$pie" = "yes"; then
2194 error_exit "PIE not available due to missing toolchain support"
2195 else
2196 echo "Disabling PIE due to missing toolchain support"
2197 pie="no"
2200 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2201 # The combination is known as "full relro", because .got.plt is read-only too.
2202 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2203 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2206 ##########################################
2207 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2208 # use i686 as default anyway, but for those that don't, an explicit
2209 # specification is necessary
2211 if test "$cpu" = "i386"; then
2212 cat > $TMPC << EOF
2213 static int sfaa(int *ptr)
2215 return __sync_fetch_and_and(ptr, 0);
2218 int main(void)
2220 int val = 42;
2221 val = __sync_val_compare_and_swap(&val, 0, 1);
2222 sfaa(&val);
2223 return val;
2226 if ! compile_prog "" "" ; then
2227 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2231 #########################################
2232 # Solaris specific configure tool chain decisions
2234 if test "$solaris" = "yes" ; then
2235 if has ar; then
2237 else
2238 if test -f /usr/ccs/bin/ar ; then
2239 error_exit "No path includes ar" \
2240 "Add /usr/ccs/bin to your path and rerun configure"
2242 error_exit "No path includes ar"
2246 if test -z "${target_list+xxx}" ; then
2247 default_targets=yes
2248 for target in $default_target_list; do
2249 target_list="$target_list $target"
2250 done
2251 target_list="${target_list# }"
2252 else
2253 default_targets=no
2254 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2255 for target in $target_list; do
2256 # Check that we recognised the target name; this allows a more
2257 # friendly error message than if we let it fall through.
2258 case " $default_target_list " in
2259 *" $target "*)
2262 error_exit "Unknown target name '$target'"
2264 esac
2265 done
2268 for target in $target_list; do
2269 # if a deprecated target is enabled we note it here
2270 if echo "$deprecated_targets_list" | grep -q "$target"; then
2271 add_to deprecated_features $target
2273 done
2275 # see if system emulation was really requested
2276 case " $target_list " in
2277 *"-softmmu "*) softmmu=yes
2279 *) softmmu=no
2281 esac
2283 feature_not_found() {
2284 feature=$1
2285 remedy=$2
2287 error_exit "User requested feature $feature" \
2288 "configure was not able to find it." \
2289 "$remedy"
2292 # ---
2293 # big/little endian test
2294 cat > $TMPC << EOF
2295 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2296 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2297 extern int foo(short *, short *);
2298 int main(int argc, char *argv[]) {
2299 return foo(big_endian, little_endian);
2303 if compile_object ; then
2304 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2305 bigendian="yes"
2306 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2307 bigendian="no"
2308 else
2309 echo big/little test failed
2311 else
2312 echo big/little test failed
2315 ##########################################
2316 # system tools
2317 if test -z "$want_tools"; then
2318 if test "$softmmu" = "no"; then
2319 want_tools=no
2320 else
2321 want_tools=yes
2325 ##########################################
2326 # cocoa implies not SDL or GTK
2327 # (the cocoa UI code currently assumes it is always the active UI
2328 # and doesn't interact well with other UI frontend code)
2329 if test "$cocoa" = "enabled"; then
2330 if test "$sdl" = "enabled"; then
2331 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2333 if test "$gtk" = "yes"; then
2334 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2336 gtk=no
2337 sdl=disabled
2340 # Some versions of Mac OS X incorrectly define SIZE_MAX
2341 cat > $TMPC << EOF
2342 #include <stdint.h>
2343 #include <stdio.h>
2344 int main(int argc, char *argv[]) {
2345 return printf("%zu", SIZE_MAX);
2348 have_broken_size_max=no
2349 if ! compile_object -Werror ; then
2350 have_broken_size_max=yes
2353 ##########################################
2354 # L2TPV3 probe
2356 cat > $TMPC <<EOF
2357 #include <sys/socket.h>
2358 #include <linux/ip.h>
2359 int main(void) { return sizeof(struct mmsghdr); }
2361 if compile_prog "" "" ; then
2362 l2tpv3=yes
2363 else
2364 l2tpv3=no
2367 cat > $TMPC <<EOF
2368 #include <sys/mman.h>
2369 int main(int argc, char *argv[]) {
2370 return mlockall(MCL_FUTURE);
2373 if compile_prog "" "" ; then
2374 have_mlockall=yes
2375 else
2376 have_mlockall=no
2379 #########################################
2380 # vhost interdependencies and host support
2382 # vhost backends
2383 if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2384 error_exit "vhost-user is only available on Linux"
2386 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2387 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2388 error_exit "vhost-vdpa is only available on Linux"
2390 test "$vhost_kernel" = "" && vhost_kernel=$linux
2391 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2392 error_exit "vhost-kernel is only available on Linux"
2395 # vhost-kernel devices
2396 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2397 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2398 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2400 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2401 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2402 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2405 # vhost-user backends
2406 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2407 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2408 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2410 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2411 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2412 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2414 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2415 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2416 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2418 #vhost-vdpa backends
2419 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2420 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2421 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2424 # OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2425 if test "$vhost_net" = ""; then
2426 test "$vhost_net_user" = "yes" && vhost_net=yes
2427 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
2428 test "$vhost_kernel" = "yes" && vhost_net=yes
2431 ##########################################
2432 # pkg-config probe
2434 if ! has "$pkg_config_exe"; then
2435 error_exit "pkg-config binary '$pkg_config_exe' not found"
2438 ##########################################
2439 # NPTL probe
2441 if test "$linux_user" = "yes"; then
2442 cat > $TMPC <<EOF
2443 #include <sched.h>
2444 #include <linux/futex.h>
2445 int main(void) {
2446 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2447 #error bork
2448 #endif
2449 return 0;
2452 if ! compile_object ; then
2453 feature_not_found "nptl" "Install glibc and linux kernel headers."
2457 ##########################################
2458 # xen probe
2460 if test "$xen" != "disabled" ; then
2461 # Check whether Xen library path is specified via --extra-ldflags to avoid
2462 # overriding this setting with pkg-config output. If not, try pkg-config
2463 # to obtain all needed flags.
2465 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2466 $pkg_config --exists xencontrol ; then
2467 xen_ctrl_version="$(printf '%d%02d%02d' \
2468 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2469 xen=enabled
2470 xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
2471 xen_pc="$xen_pc xenevtchn xendevicemodel"
2472 if $pkg_config --exists xentoolcore; then
2473 xen_pc="$xen_pc xentoolcore"
2475 xen_cflags="$($pkg_config --cflags $xen_pc)"
2476 xen_libs="$($pkg_config --libs $xen_pc)"
2477 else
2479 xen_libs="-lxenstore -lxenctrl"
2480 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2482 # First we test whether Xen headers and libraries are available.
2483 # If no, we are done and there is no Xen support.
2484 # If yes, more tests are run to detect the Xen version.
2486 # Xen (any)
2487 cat > $TMPC <<EOF
2488 #include <xenctrl.h>
2489 int main(void) {
2490 return 0;
2493 if ! compile_prog "" "$xen_libs" ; then
2494 # Xen not found
2495 if test "$xen" = "enabled" ; then
2496 feature_not_found "xen" "Install xen devel"
2498 xen=disabled
2500 # Xen unstable
2501 elif
2502 cat > $TMPC <<EOF &&
2503 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2504 #define __XEN_TOOLS__
2505 #include <xendevicemodel.h>
2506 #include <xenforeignmemory.h>
2507 int main(void) {
2508 xendevicemodel_handle *xd;
2509 xenforeignmemory_handle *xfmem;
2511 xd = xendevicemodel_open(0, 0);
2512 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2514 xfmem = xenforeignmemory_open(0, 0);
2515 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2517 return 0;
2520 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2521 then
2522 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2523 xen_ctrl_version=41100
2524 xen=enabled
2525 elif
2526 cat > $TMPC <<EOF &&
2527 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2528 #include <xenforeignmemory.h>
2529 #include <xentoolcore.h>
2530 int main(void) {
2531 xenforeignmemory_handle *xfmem;
2533 xfmem = xenforeignmemory_open(0, 0);
2534 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2535 xentoolcore_restrict_all(0);
2537 return 0;
2540 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2541 then
2542 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2543 xen_ctrl_version=41000
2544 xen=enabled
2545 elif
2546 cat > $TMPC <<EOF &&
2547 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2548 #define __XEN_TOOLS__
2549 #include <xendevicemodel.h>
2550 int main(void) {
2551 xendevicemodel_handle *xd;
2553 xd = xendevicemodel_open(0, 0);
2554 xendevicemodel_close(xd);
2556 return 0;
2559 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2560 then
2561 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2562 xen_ctrl_version=40900
2563 xen=enabled
2564 elif
2565 cat > $TMPC <<EOF &&
2567 * If we have stable libs the we don't want the libxc compat
2568 * layers, regardless of what CFLAGS we may have been given.
2570 * Also, check if xengnttab_grant_copy_segment_t is defined and
2571 * grant copy operation is implemented.
2573 #undef XC_WANT_COMPAT_EVTCHN_API
2574 #undef XC_WANT_COMPAT_GNTTAB_API
2575 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2576 #include <xenctrl.h>
2577 #include <xenstore.h>
2578 #include <xenevtchn.h>
2579 #include <xengnttab.h>
2580 #include <xenforeignmemory.h>
2581 #include <stdint.h>
2582 #include <xen/hvm/hvm_info_table.h>
2583 #if !defined(HVM_MAX_VCPUS)
2584 # error HVM_MAX_VCPUS not defined
2585 #endif
2586 int main(void) {
2587 xc_interface *xc = NULL;
2588 xenforeignmemory_handle *xfmem;
2589 xenevtchn_handle *xe;
2590 xengnttab_handle *xg;
2591 xengnttab_grant_copy_segment_t* seg = NULL;
2593 xs_daemon_open();
2595 xc = xc_interface_open(0, 0, 0);
2596 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2597 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2598 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2599 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2601 xfmem = xenforeignmemory_open(0, 0);
2602 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2604 xe = xenevtchn_open(0, 0);
2605 xenevtchn_fd(xe);
2607 xg = xengnttab_open(0, 0);
2608 xengnttab_grant_copy(xg, 0, seg);
2610 return 0;
2613 compile_prog "" "$xen_libs $xen_stable_libs"
2614 then
2615 xen_ctrl_version=40800
2616 xen=enabled
2617 elif
2618 cat > $TMPC <<EOF &&
2620 * If we have stable libs the we don't want the libxc compat
2621 * layers, regardless of what CFLAGS we may have been given.
2623 #undef XC_WANT_COMPAT_EVTCHN_API
2624 #undef XC_WANT_COMPAT_GNTTAB_API
2625 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2626 #include <xenctrl.h>
2627 #include <xenstore.h>
2628 #include <xenevtchn.h>
2629 #include <xengnttab.h>
2630 #include <xenforeignmemory.h>
2631 #include <stdint.h>
2632 #include <xen/hvm/hvm_info_table.h>
2633 #if !defined(HVM_MAX_VCPUS)
2634 # error HVM_MAX_VCPUS not defined
2635 #endif
2636 int main(void) {
2637 xc_interface *xc = NULL;
2638 xenforeignmemory_handle *xfmem;
2639 xenevtchn_handle *xe;
2640 xengnttab_handle *xg;
2642 xs_daemon_open();
2644 xc = xc_interface_open(0, 0, 0);
2645 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2646 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2647 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2648 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2650 xfmem = xenforeignmemory_open(0, 0);
2651 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2653 xe = xenevtchn_open(0, 0);
2654 xenevtchn_fd(xe);
2656 xg = xengnttab_open(0, 0);
2657 xengnttab_map_grant_ref(xg, 0, 0, 0);
2659 return 0;
2662 compile_prog "" "$xen_libs $xen_stable_libs"
2663 then
2664 xen_ctrl_version=40701
2665 xen=enabled
2667 # Xen 4.6
2668 elif
2669 cat > $TMPC <<EOF &&
2670 #include <xenctrl.h>
2671 #include <xenstore.h>
2672 #include <stdint.h>
2673 #include <xen/hvm/hvm_info_table.h>
2674 #if !defined(HVM_MAX_VCPUS)
2675 # error HVM_MAX_VCPUS not defined
2676 #endif
2677 int main(void) {
2678 xc_interface *xc;
2679 xs_daemon_open();
2680 xc = xc_interface_open(0, 0, 0);
2681 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2682 xc_gnttab_open(NULL, 0);
2683 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2684 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2685 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2686 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2687 return 0;
2690 compile_prog "" "$xen_libs"
2691 then
2692 xen_ctrl_version=40600
2693 xen=enabled
2695 # Xen 4.5
2696 elif
2697 cat > $TMPC <<EOF &&
2698 #include <xenctrl.h>
2699 #include <xenstore.h>
2700 #include <stdint.h>
2701 #include <xen/hvm/hvm_info_table.h>
2702 #if !defined(HVM_MAX_VCPUS)
2703 # error HVM_MAX_VCPUS not defined
2704 #endif
2705 int main(void) {
2706 xc_interface *xc;
2707 xs_daemon_open();
2708 xc = xc_interface_open(0, 0, 0);
2709 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2710 xc_gnttab_open(NULL, 0);
2711 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2712 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2713 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2714 return 0;
2717 compile_prog "" "$xen_libs"
2718 then
2719 xen_ctrl_version=40500
2720 xen=enabled
2722 elif
2723 cat > $TMPC <<EOF &&
2724 #include <xenctrl.h>
2725 #include <xenstore.h>
2726 #include <stdint.h>
2727 #include <xen/hvm/hvm_info_table.h>
2728 #if !defined(HVM_MAX_VCPUS)
2729 # error HVM_MAX_VCPUS not defined
2730 #endif
2731 int main(void) {
2732 xc_interface *xc;
2733 xs_daemon_open();
2734 xc = xc_interface_open(0, 0, 0);
2735 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2736 xc_gnttab_open(NULL, 0);
2737 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2738 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2739 return 0;
2742 compile_prog "" "$xen_libs"
2743 then
2744 xen_ctrl_version=40200
2745 xen=enabled
2747 else
2748 if test "$xen" = "enabled" ; then
2749 feature_not_found "xen (unsupported version)" \
2750 "Install a supported xen (xen 4.2 or newer)"
2752 xen=disabled
2755 if test "$xen" = enabled; then
2756 if test $xen_ctrl_version -ge 40701 ; then
2757 xen_libs="$xen_libs $xen_stable_libs "
2763 ##########################################
2764 # X11 probe
2765 if $pkg_config --exists "x11"; then
2766 have_x11=yes
2767 x11_cflags=$($pkg_config --cflags x11)
2768 x11_libs=$($pkg_config --libs x11)
2771 ##########################################
2772 # GTK probe
2774 if test "$gtk" != "no"; then
2775 gtkpackage="gtk+-3.0"
2776 gtkx11package="gtk+-x11-3.0"
2777 gtkversion="3.22.0"
2778 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2779 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2780 gtk_libs=$($pkg_config --libs $gtkpackage)
2781 gtk_version=$($pkg_config --modversion $gtkpackage)
2782 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2783 need_x11=yes
2784 gtk_cflags="$gtk_cflags $x11_cflags"
2785 gtk_libs="$gtk_libs $x11_libs"
2787 gtk="yes"
2788 elif test "$gtk" = "yes"; then
2789 feature_not_found "gtk" "Install gtk3-devel"
2790 else
2791 gtk="no"
2796 ##########################################
2797 # GNUTLS probe
2799 if test "$gnutls" != "no"; then
2800 pass="no"
2801 if $pkg_config --exists "gnutls >= 3.1.18"; then
2802 gnutls_cflags=$($pkg_config --cflags gnutls)
2803 gnutls_libs=$($pkg_config --libs gnutls)
2804 # Packaging for the static libraries is not always correct.
2805 # At least ubuntu 18.04 ships only shared libraries.
2806 write_c_skeleton
2807 if compile_prog "" "$gnutls_libs" ; then
2808 pass="yes"
2811 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2812 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2813 else
2814 gnutls="$pass"
2819 # If user didn't give a --disable/enable-gcrypt flag,
2820 # then mark as disabled if user requested nettle
2821 # explicitly
2822 if test -z "$gcrypt"
2823 then
2824 if test "$nettle" = "yes"
2825 then
2826 gcrypt="no"
2830 # If user didn't give a --disable/enable-nettle flag,
2831 # then mark as disabled if user requested gcrypt
2832 # explicitly
2833 if test -z "$nettle"
2834 then
2835 if test "$gcrypt" = "yes"
2836 then
2837 nettle="no"
2841 has_libgcrypt() {
2842 if ! has "libgcrypt-config"
2843 then
2844 return 1
2847 if test -n "$cross_prefix"
2848 then
2849 host=$(libgcrypt-config --host)
2850 if test "$host-" != $cross_prefix
2851 then
2852 return 1
2856 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2857 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2859 if test $maj != 1 || test $min -lt 5
2860 then
2861 return 1
2864 return 0
2868 if test "$nettle" != "no"; then
2869 pass="no"
2870 if $pkg_config --exists "nettle >= 2.7.1"; then
2871 nettle_cflags=$($pkg_config --cflags nettle)
2872 nettle_libs=$($pkg_config --libs nettle)
2873 nettle_version=$($pkg_config --modversion nettle)
2874 # Link test to make sure the given libraries work (e.g for static).
2875 write_c_skeleton
2876 if compile_prog "" "$nettle_libs" ; then
2877 if test -z "$gcrypt"; then
2878 gcrypt="no"
2880 pass="yes"
2883 if test "$pass" = "yes"
2884 then
2885 cat > $TMPC << EOF
2886 #include <nettle/xts.h>
2887 int main(void) {
2888 return 0;
2891 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2892 nettle_xts=yes
2893 qemu_private_xts=no
2896 if test "$pass" = "no" && test "$nettle" = "yes"; then
2897 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2898 else
2899 nettle="$pass"
2903 if test "$gcrypt" != "no"; then
2904 pass="no"
2905 if has_libgcrypt; then
2906 gcrypt_cflags=$(libgcrypt-config --cflags)
2907 gcrypt_libs=$(libgcrypt-config --libs)
2908 # Debian has removed -lgpg-error from libgcrypt-config
2909 # as it "spreads unnecessary dependencies" which in
2910 # turn breaks static builds...
2911 if test "$static" = "yes"
2912 then
2913 gcrypt_libs="$gcrypt_libs -lgpg-error"
2916 # Link test to make sure the given libraries work (e.g for static).
2917 write_c_skeleton
2918 if compile_prog "" "$gcrypt_libs" ; then
2919 pass="yes"
2922 if test "$pass" = "yes"; then
2923 gcrypt="yes"
2924 cat > $TMPC << EOF
2925 #include <gcrypt.h>
2926 int main(void) {
2927 gcry_mac_hd_t handle;
2928 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2929 GCRY_MAC_FLAG_SECURE, NULL);
2930 return 0;
2933 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2934 gcrypt_hmac=yes
2936 cat > $TMPC << EOF
2937 #include <gcrypt.h>
2938 int main(void) {
2939 gcry_cipher_hd_t handle;
2940 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
2941 return 0;
2944 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2945 gcrypt_xts=yes
2946 qemu_private_xts=no
2948 elif test "$gcrypt" = "yes"; then
2949 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
2950 else
2951 gcrypt="no"
2956 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2957 then
2958 error_exit "Only one of gcrypt & nettle can be enabled"
2961 ##########################################
2962 # libtasn1 - only for the TLS creds/session test suite
2964 tasn1=yes
2965 tasn1_cflags=""
2966 tasn1_libs=""
2967 if $pkg_config --exists "libtasn1"; then
2968 tasn1_cflags=$($pkg_config --cflags libtasn1)
2969 tasn1_libs=$($pkg_config --libs libtasn1)
2970 else
2971 tasn1=no
2975 ##########################################
2976 # PAM probe
2978 if test "$auth_pam" != "no"; then
2979 cat > $TMPC <<EOF
2980 #include <security/pam_appl.h>
2981 #include <stdio.h>
2982 int main(void) {
2983 const char *service_name = "qemu";
2984 const char *user = "frank";
2985 const struct pam_conv pam_conv = { 0 };
2986 pam_handle_t *pamh = NULL;
2987 pam_start(service_name, user, &pam_conv, &pamh);
2988 return 0;
2991 if compile_prog "" "-lpam" ; then
2992 auth_pam=yes
2993 else
2994 if test "$auth_pam" = "yes"; then
2995 feature_not_found "PAM" "Install PAM development package"
2996 else
2997 auth_pam=no
3002 ##########################################
3003 # VTE probe
3005 if test "$vte" != "no"; then
3006 vteminversion="0.32.0"
3007 if $pkg_config --exists "vte-2.91"; then
3008 vtepackage="vte-2.91"
3009 else
3010 vtepackage="vte-2.90"
3012 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3013 vte_cflags=$($pkg_config --cflags $vtepackage)
3014 vte_libs=$($pkg_config --libs $vtepackage)
3015 vteversion=$($pkg_config --modversion $vtepackage)
3016 vte="yes"
3017 elif test "$vte" = "yes"; then
3018 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3019 else
3020 vte="no"
3024 ##########################################
3025 # RDMA needs OpenFabrics libraries
3026 if test "$rdma" != "no" ; then
3027 cat > $TMPC <<EOF
3028 #include <rdma/rdma_cma.h>
3029 int main(void) { return 0; }
3031 rdma_libs="-lrdmacm -libverbs -libumad"
3032 if compile_prog "" "$rdma_libs" ; then
3033 rdma="yes"
3034 else
3035 if test "$rdma" = "yes" ; then
3036 error_exit \
3037 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3038 " Your options:" \
3039 " (1) Fast: Install infiniband packages (devel) from your distro." \
3040 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3041 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3043 rdma="no"
3047 ##########################################
3048 # PVRDMA detection
3050 cat > $TMPC <<EOF &&
3051 #include <sys/mman.h>
3054 main(void)
3056 char buf = 0;
3057 void *addr = &buf;
3058 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3060 return 0;
3064 if test "$rdma" = "yes" ; then
3065 case "$pvrdma" in
3067 if compile_prog "" ""; then
3068 pvrdma="yes"
3069 else
3070 pvrdma="no"
3073 "yes")
3074 if ! compile_prog "" ""; then
3075 error_exit "PVRDMA is not supported since mremap is not implemented"
3077 pvrdma="yes"
3079 "no")
3080 pvrdma="no"
3082 esac
3083 else
3084 if test "$pvrdma" = "yes" ; then
3085 error_exit "PVRDMA requires rdma suppport"
3087 pvrdma="no"
3090 # Let's see if enhanced reg_mr is supported
3091 if test "$pvrdma" = "yes" ; then
3093 cat > $TMPC <<EOF &&
3094 #include <infiniband/verbs.h>
3097 main(void)
3099 struct ibv_mr *mr;
3100 struct ibv_pd *pd = NULL;
3101 size_t length = 10;
3102 uint64_t iova = 0;
3103 int access = 0;
3104 void *addr = NULL;
3106 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3108 ibv_dereg_mr(mr);
3110 return 0;
3113 if ! compile_prog "" "-libverbs"; then
3114 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3118 ##########################################
3119 # xfsctl() probe, used for file-posix.c
3120 if test "$xfs" != "no" ; then
3121 cat > $TMPC << EOF
3122 #include <stddef.h> /* NULL */
3123 #include <xfs/xfs.h>
3124 int main(void)
3126 xfsctl(NULL, 0, 0, NULL);
3127 return 0;
3130 if compile_prog "" "" ; then
3131 xfs="yes"
3132 else
3133 if test "$xfs" = "yes" ; then
3134 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
3136 xfs=no
3140 ##########################################
3141 # vde libraries probe
3142 if test "$vde" != "no" ; then
3143 vde_libs="-lvdeplug"
3144 cat > $TMPC << EOF
3145 #include <libvdeplug.h>
3146 int main(void)
3148 struct vde_open_args a = {0, 0, 0};
3149 char s[] = "";
3150 vde_open(s, s, &a);
3151 return 0;
3154 if compile_prog "" "$vde_libs" ; then
3155 vde=yes
3156 else
3157 if test "$vde" = "yes" ; then
3158 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3160 vde=no
3164 ##########################################
3165 # netmap support probe
3166 # Apart from looking for netmap headers, we make sure that the host API version
3167 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3168 # a minor/major version number. Minor new features will be marked with values up
3169 # to 15, and if something happens that requires a change to the backend we will
3170 # move above 15, submit the backend fixes and modify this two bounds.
3171 if test "$netmap" != "no" ; then
3172 cat > $TMPC << EOF
3173 #include <inttypes.h>
3174 #include <net/if.h>
3175 #include <net/netmap.h>
3176 #include <net/netmap_user.h>
3177 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3178 #error
3179 #endif
3180 int main(void) { return 0; }
3182 if compile_prog "" "" ; then
3183 netmap=yes
3184 else
3185 if test "$netmap" = "yes" ; then
3186 feature_not_found "netmap"
3188 netmap=no
3192 ##########################################
3193 # Sound support libraries probe
3195 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3196 for drv in $audio_drv_list; do
3197 case $drv in
3198 alsa | try-alsa)
3199 if $pkg_config alsa --exists; then
3200 alsa_libs=$($pkg_config alsa --libs)
3201 alsa_cflags=$($pkg_config alsa --cflags)
3202 alsa=yes
3203 if test "$drv" = "try-alsa"; then
3204 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3206 else
3207 if test "$drv" = "try-alsa"; then
3208 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3209 else
3210 error_exit "$drv check failed" \
3211 "Make sure to have the $drv libs and headers installed."
3216 pa | try-pa)
3217 if $pkg_config libpulse --exists; then
3218 libpulse=yes
3219 pulse_libs=$($pkg_config libpulse --libs)
3220 pulse_cflags=$($pkg_config libpulse --cflags)
3221 if test "$drv" = "try-pa"; then
3222 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3224 else
3225 if test "$drv" = "try-pa"; then
3226 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3227 else
3228 error_exit "$drv check failed" \
3229 "Make sure to have the $drv libs and headers installed."
3234 sdl)
3235 if test "$sdl" = "no"; then
3236 error_exit "sdl not found or disabled, can not use sdl audio driver"
3240 try-sdl)
3241 if test "$sdl" = "no"; then
3242 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3243 else
3244 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3248 coreaudio)
3249 coreaudio_libs="-framework CoreAudio"
3252 dsound)
3253 dsound_libs="-lole32 -ldxguid"
3254 audio_win_int="yes"
3257 oss)
3258 oss_libs="$oss_lib"
3261 jack | try-jack)
3262 if $pkg_config jack --exists; then
3263 libjack=yes
3264 jack_libs=$($pkg_config jack --libs)
3265 if test "$drv" = "try-jack"; then
3266 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3268 else
3269 if test "$drv" = "try-jack"; then
3270 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3271 else
3272 error_exit "$drv check failed" \
3273 "Make sure to have the $drv libs and headers installed."
3279 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3280 error_exit "Unknown driver '$drv' selected" \
3281 "Possible drivers are: $audio_possible_drivers"
3284 esac
3285 done
3287 ##########################################
3288 # glib support probe
3290 glib_req_ver=2.48
3291 glib_modules=gthread-2.0
3292 if test "$modules" = yes; then
3293 glib_modules="$glib_modules gmodule-export-2.0"
3295 if test "$plugins" = yes; then
3296 glib_modules="$glib_modules gmodule-2.0"
3299 for i in $glib_modules; do
3300 if $pkg_config --atleast-version=$glib_req_ver $i; then
3301 glib_cflags=$($pkg_config --cflags $i)
3302 glib_libs=$($pkg_config --libs $i)
3303 else
3304 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3306 done
3308 # This workaround is required due to a bug in pkg-config file for glib as it
3309 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3311 if test "$static" = yes && test "$mingw32" = yes; then
3312 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3315 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3316 gio_cflags=$($pkg_config --cflags gio-2.0)
3317 gio_libs=$($pkg_config --libs gio-2.0)
3318 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3319 if [ ! -x "$gdbus_codegen" ]; then
3320 gdbus_codegen=
3322 # Check that the libraries actually work -- Ubuntu 18.04 ships
3323 # with pkg-config --static --libs data for gio-2.0 that is missing
3324 # -lblkid and will give a link error.
3325 cat > $TMPC <<EOF
3326 #include <gio/gio.h>
3327 int main(void)
3329 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3330 return 0;
3333 if compile_prog "$gio_cflags" "$gio_libs" ; then
3334 gio=yes
3335 else
3336 gio=no
3338 else
3339 gio=no
3342 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3343 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3344 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3347 # Sanity check that the current size_t matches the
3348 # size that glib thinks it should be. This catches
3349 # problems on multi-arch where people try to build
3350 # 32-bit QEMU while pointing at 64-bit glib headers
3351 cat > $TMPC <<EOF
3352 #include <glib.h>
3353 #include <unistd.h>
3355 #define QEMU_BUILD_BUG_ON(x) \
3356 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3358 int main(void) {
3359 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3360 return 0;
3364 if ! compile_prog "$glib_cflags" "$glib_libs" ; then
3365 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3366 "You probably need to set PKG_CONFIG_LIBDIR"\
3367 "to point to the right pkg-config files for your"\
3368 "build target"
3371 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3372 cat > $TMPC << EOF
3373 #include <glib.h>
3374 int main(void) { return 0; }
3376 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3377 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3378 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3379 CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
3383 # Silence clang warnings triggered by glib < 2.57.2
3384 cat > $TMPC << EOF
3385 #include <glib.h>
3386 typedef struct Foo {
3387 int i;
3388 } Foo;
3389 static void foo_free(Foo *f)
3391 g_free(f);
3393 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3394 int main(void) { return 0; }
3396 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3397 if cc_has_warning_flag "-Wno-unused-function"; then
3398 glib_cflags="$glib_cflags -Wno-unused-function"
3399 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
3403 ##########################################
3404 # SHA command probe for modules
3405 if test "$modules" = yes; then
3406 shacmd_probe="sha1sum sha1 shasum"
3407 for c in $shacmd_probe; do
3408 if has $c; then
3409 shacmd="$c"
3410 break
3412 done
3413 if test "$shacmd" = ""; then
3414 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3418 ##########################################
3419 # pthread probe
3420 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3422 pthread=no
3423 cat > $TMPC << EOF
3424 #include <pthread.h>
3425 static void *f(void *p) { return NULL; }
3426 int main(void) {
3427 pthread_t thread;
3428 pthread_create(&thread, 0, f, 0);
3429 return 0;
3432 if compile_prog "" "" ; then
3433 pthread=yes
3434 else
3435 for pthread_lib in $PTHREADLIBS_LIST; do
3436 if compile_prog "" "$pthread_lib" ; then
3437 pthread=yes
3438 found=no
3439 for lib_entry in $LIBS; do
3440 if test "$lib_entry" = "$pthread_lib"; then
3441 found=yes
3442 break
3444 done
3445 if test "$found" = "no"; then
3446 LIBS="$pthread_lib $LIBS"
3448 break
3450 done
3453 if test "$mingw32" != yes && test "$pthread" = no; then
3454 error_exit "pthread check failed" \
3455 "Make sure to have the pthread libs and headers installed."
3458 # check for pthread_setname_np with thread id
3459 pthread_setname_np_w_tid=no
3460 cat > $TMPC << EOF
3461 #include <pthread.h>
3463 static void *f(void *p) { return NULL; }
3464 int main(void)
3466 pthread_t thread;
3467 pthread_create(&thread, 0, f, 0);
3468 pthread_setname_np(thread, "QEMU");
3469 return 0;
3472 if compile_prog "" "$pthread_lib" ; then
3473 pthread_setname_np_w_tid=yes
3476 # check for pthread_setname_np without thread id
3477 pthread_setname_np_wo_tid=no
3478 cat > $TMPC << EOF
3479 #include <pthread.h>
3481 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3482 int main(void)
3484 pthread_t thread;
3485 pthread_create(&thread, 0, f, 0);
3486 return 0;
3489 if compile_prog "" "$pthread_lib" ; then
3490 pthread_setname_np_wo_tid=yes
3493 ##########################################
3494 # libssh probe
3495 if test "$libssh" != "no" ; then
3496 if $pkg_config --exists libssh; then
3497 libssh_cflags=$($pkg_config libssh --cflags)
3498 libssh_libs=$($pkg_config libssh --libs)
3499 libssh=yes
3500 else
3501 if test "$libssh" = "yes" ; then
3502 error_exit "libssh required for --enable-libssh"
3504 libssh=no
3508 ##########################################
3509 # Check for libssh 0.8
3510 # This is done like this instead of using the LIBSSH_VERSION_* and
3511 # SSH_VERSION_* macros because some distributions in the past shipped
3512 # snapshots of the future 0.8 from Git, and those snapshots did not
3513 # have updated version numbers (still referring to 0.7.0).
3515 if test "$libssh" = "yes"; then
3516 cat > $TMPC <<EOF
3517 #include <libssh/libssh.h>
3518 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3520 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3521 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3525 ##########################################
3526 # linux-aio probe
3528 if test "$linux_aio" != "no" ; then
3529 cat > $TMPC <<EOF
3530 #include <libaio.h>
3531 #include <sys/eventfd.h>
3532 #include <stddef.h>
3533 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3535 if compile_prog "" "-laio" ; then
3536 linux_aio=yes
3537 else
3538 if test "$linux_aio" = "yes" ; then
3539 feature_not_found "linux AIO" "Install libaio devel"
3541 linux_aio=no
3544 ##########################################
3545 # linux-io-uring probe
3547 if test "$linux_io_uring" != "no" ; then
3548 if $pkg_config liburing; then
3549 linux_io_uring_cflags=$($pkg_config --cflags liburing)
3550 linux_io_uring_libs=$($pkg_config --libs liburing)
3551 linux_io_uring=yes
3552 else
3553 if test "$linux_io_uring" = "yes" ; then
3554 feature_not_found "linux io_uring" "Install liburing devel"
3556 linux_io_uring=no
3560 ##########################################
3561 # TPM emulation is only on POSIX
3563 if test "$tpm" = ""; then
3564 if test "$mingw32" = "yes"; then
3565 tpm=no
3566 else
3567 tpm=yes
3569 elif test "$tpm" = "yes"; then
3570 if test "$mingw32" = "yes" ; then
3571 error_exit "TPM emulation only available on POSIX systems"
3575 ##########################################
3576 # iovec probe
3577 cat > $TMPC <<EOF
3578 #include <sys/types.h>
3579 #include <sys/uio.h>
3580 #include <unistd.h>
3581 int main(void) { return sizeof(struct iovec); }
3583 iovec=no
3584 if compile_prog "" "" ; then
3585 iovec=yes
3588 ##########################################
3589 # preadv probe
3590 cat > $TMPC <<EOF
3591 #include <sys/types.h>
3592 #include <sys/uio.h>
3593 #include <unistd.h>
3594 int main(void) { return preadv(0, 0, 0, 0); }
3596 preadv=no
3597 if compile_prog "" "" ; then
3598 preadv=yes
3601 ##########################################
3602 # fdt probe
3604 case "$fdt" in
3605 auto | enabled | internal)
3606 # Simpler to always update submodule, even if not needed.
3607 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
3608 git_submodules="${git_submodules} dtc"
3611 esac
3613 ##########################################
3614 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3616 gbm="no"
3617 if $pkg_config gbm; then
3618 gbm_cflags="$($pkg_config --cflags gbm)"
3619 gbm_libs="$($pkg_config --libs gbm)"
3620 gbm="yes"
3623 if test "$opengl" != "no" ; then
3624 opengl_pkgs="epoxy gbm"
3625 if $pkg_config $opengl_pkgs; then
3626 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3627 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
3628 opengl=yes
3629 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3630 gtk_gl="yes"
3632 else
3633 if test "$opengl" = "yes" ; then
3634 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3636 opengl_cflags=""
3637 opengl_libs=""
3638 opengl=no
3642 if test "$opengl" = "yes"; then
3643 cat > $TMPC << EOF
3644 #include <epoxy/egl.h>
3645 #ifndef EGL_MESA_image_dma_buf_export
3646 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3647 #endif
3648 int main(void) { return 0; }
3650 if compile_prog "" "" ; then
3651 opengl_dmabuf=yes
3655 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
3656 for target in $target_list; do
3657 case $target in
3658 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
3659 need_x11=yes
3661 esac
3662 done
3665 ##########################################
3666 # libxml2 probe
3667 if test "$libxml2" != "no" ; then
3668 if $pkg_config --exists libxml-2.0; then
3669 libxml2="yes"
3670 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3671 libxml2_libs=$($pkg_config --libs libxml-2.0)
3672 else
3673 if test "$libxml2" = "yes"; then
3674 feature_not_found "libxml2" "Install libxml2 devel"
3676 libxml2="no"
3680 # Check for inotify functions when we are building linux-user
3681 # emulator. This is done because older glibc versions don't
3682 # have syscall stubs for these implemented. In that case we
3683 # don't provide them even if kernel supports them.
3685 inotify=no
3686 cat > $TMPC << EOF
3687 #include <sys/inotify.h>
3690 main(void)
3692 /* try to start inotify */
3693 return inotify_init();
3696 if compile_prog "" "" ; then
3697 inotify=yes
3700 inotify1=no
3701 cat > $TMPC << EOF
3702 #include <sys/inotify.h>
3705 main(void)
3707 /* try to start inotify */
3708 return inotify_init1(0);
3711 if compile_prog "" "" ; then
3712 inotify1=yes
3715 # check if pipe2 is there
3716 pipe2=no
3717 cat > $TMPC << EOF
3718 #include <unistd.h>
3719 #include <fcntl.h>
3721 int main(void)
3723 int pipefd[2];
3724 return pipe2(pipefd, O_CLOEXEC);
3727 if compile_prog "" "" ; then
3728 pipe2=yes
3731 # check if accept4 is there
3732 accept4=no
3733 cat > $TMPC << EOF
3734 #include <sys/socket.h>
3735 #include <stddef.h>
3737 int main(void)
3739 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3740 return 0;
3743 if compile_prog "" "" ; then
3744 accept4=yes
3747 # check if tee/splice is there. vmsplice was added same time.
3748 splice=no
3749 cat > $TMPC << EOF
3750 #include <unistd.h>
3751 #include <fcntl.h>
3752 #include <limits.h>
3754 int main(void)
3756 int len, fd = 0;
3757 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3758 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3759 return 0;
3762 if compile_prog "" "" ; then
3763 splice=yes
3766 ##########################################
3767 # libnuma probe
3769 if test "$numa" != "no" ; then
3770 cat > $TMPC << EOF
3771 #include <numa.h>
3772 int main(void) { return numa_available(); }
3775 if compile_prog "" "-lnuma" ; then
3776 numa=yes
3777 numa_libs="-lnuma"
3778 else
3779 if test "$numa" = "yes" ; then
3780 feature_not_found "numa" "install numactl devel"
3782 numa=no
3786 malloc=system
3787 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3788 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3789 exit 1
3790 elif test "$tcmalloc" = "yes" ; then
3791 malloc=tcmalloc
3792 elif test "$jemalloc" = "yes" ; then
3793 malloc=jemalloc
3796 ##########################################
3797 # signalfd probe
3798 signalfd="no"
3799 cat > $TMPC << EOF
3800 #include <unistd.h>
3801 #include <sys/syscall.h>
3802 #include <signal.h>
3803 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3806 if compile_prog "" "" ; then
3807 signalfd=yes
3810 # check if optreset global is declared by <getopt.h>
3811 optreset="no"
3812 cat > $TMPC << EOF
3813 #include <getopt.h>
3814 int main(void) { return optreset; }
3817 if compile_prog "" "" ; then
3818 optreset=yes
3821 # check if eventfd is supported
3822 eventfd=no
3823 cat > $TMPC << EOF
3824 #include <sys/eventfd.h>
3826 int main(void)
3828 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3831 if compile_prog "" "" ; then
3832 eventfd=yes
3835 # check if memfd is supported
3836 memfd=no
3837 cat > $TMPC << EOF
3838 #include <sys/mman.h>
3840 int main(void)
3842 return memfd_create("foo", MFD_ALLOW_SEALING);
3845 if compile_prog "" "" ; then
3846 memfd=yes
3849 # check for usbfs
3850 have_usbfs=no
3851 if test "$linux_user" = "yes"; then
3852 cat > $TMPC << EOF
3853 #include <linux/usbdevice_fs.h>
3855 #ifndef USBDEVFS_GET_CAPABILITIES
3856 #error "USBDEVFS_GET_CAPABILITIES undefined"
3857 #endif
3859 #ifndef USBDEVFS_DISCONNECT_CLAIM
3860 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
3861 #endif
3863 int main(void)
3865 return 0;
3868 if compile_prog "" ""; then
3869 have_usbfs=yes
3873 # check for fallocate
3874 fallocate=no
3875 cat > $TMPC << EOF
3876 #include <fcntl.h>
3878 int main(void)
3880 fallocate(0, 0, 0, 0);
3881 return 0;
3884 if compile_prog "" "" ; then
3885 fallocate=yes
3888 # check for fallocate hole punching
3889 fallocate_punch_hole=no
3890 cat > $TMPC << EOF
3891 #include <fcntl.h>
3892 #include <linux/falloc.h>
3894 int main(void)
3896 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3897 return 0;
3900 if compile_prog "" "" ; then
3901 fallocate_punch_hole=yes
3904 # check that fallocate supports range zeroing inside the file
3905 fallocate_zero_range=no
3906 cat > $TMPC << EOF
3907 #include <fcntl.h>
3908 #include <linux/falloc.h>
3910 int main(void)
3912 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3913 return 0;
3916 if compile_prog "" "" ; then
3917 fallocate_zero_range=yes
3920 # check for posix_fallocate
3921 posix_fallocate=no
3922 cat > $TMPC << EOF
3923 #include <fcntl.h>
3925 int main(void)
3927 posix_fallocate(0, 0, 0);
3928 return 0;
3931 if compile_prog "" "" ; then
3932 posix_fallocate=yes
3935 # check for sync_file_range
3936 sync_file_range=no
3937 cat > $TMPC << EOF
3938 #include <fcntl.h>
3940 int main(void)
3942 sync_file_range(0, 0, 0, 0);
3943 return 0;
3946 if compile_prog "" "" ; then
3947 sync_file_range=yes
3950 # check for linux/fiemap.h and FS_IOC_FIEMAP
3951 fiemap=no
3952 cat > $TMPC << EOF
3953 #include <sys/ioctl.h>
3954 #include <linux/fs.h>
3955 #include <linux/fiemap.h>
3957 int main(void)
3959 ioctl(0, FS_IOC_FIEMAP, 0);
3960 return 0;
3963 if compile_prog "" "" ; then
3964 fiemap=yes
3967 # check for dup3
3968 dup3=no
3969 cat > $TMPC << EOF
3970 #include <unistd.h>
3972 int main(void)
3974 dup3(0, 0, 0);
3975 return 0;
3978 if compile_prog "" "" ; then
3979 dup3=yes
3982 # check for ppoll support
3983 ppoll=no
3984 cat > $TMPC << EOF
3985 #include <poll.h>
3987 int main(void)
3989 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3990 ppoll(&pfd, 1, 0, 0);
3991 return 0;
3994 if compile_prog "" "" ; then
3995 ppoll=yes
3998 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3999 prctl_pr_set_timerslack=no
4000 cat > $TMPC << EOF
4001 #include <sys/prctl.h>
4003 int main(void)
4005 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4006 return 0;
4009 if compile_prog "" "" ; then
4010 prctl_pr_set_timerslack=yes
4013 # check for epoll support
4014 epoll=no
4015 cat > $TMPC << EOF
4016 #include <sys/epoll.h>
4018 int main(void)
4020 epoll_create(0);
4021 return 0;
4024 if compile_prog "" "" ; then
4025 epoll=yes
4028 # epoll_create1 is a later addition
4029 # so we must check separately for its presence
4030 epoll_create1=no
4031 cat > $TMPC << EOF
4032 #include <sys/epoll.h>
4034 int main(void)
4036 /* Note that we use epoll_create1 as a value, not as
4037 * a function being called. This is necessary so that on
4038 * old SPARC glibc versions where the function was present in
4039 * the library but not declared in the header file we will
4040 * fail the configure check. (Otherwise we will get a compiler
4041 * warning but not an error, and will proceed to fail the
4042 * qemu compile where we compile with -Werror.)
4044 return (int)(uintptr_t)&epoll_create1;
4047 if compile_prog "" "" ; then
4048 epoll_create1=yes
4051 # check for sendfile support
4052 sendfile=no
4053 cat > $TMPC << EOF
4054 #include <sys/sendfile.h>
4056 int main(void)
4058 return sendfile(0, 0, 0, 0);
4061 if compile_prog "" "" ; then
4062 sendfile=yes
4065 # check for timerfd support (glibc 2.8 and newer)
4066 timerfd=no
4067 cat > $TMPC << EOF
4068 #include <sys/timerfd.h>
4070 int main(void)
4072 return(timerfd_create(CLOCK_REALTIME, 0));
4075 if compile_prog "" "" ; then
4076 timerfd=yes
4079 # check for setns and unshare support
4080 setns=no
4081 cat > $TMPC << EOF
4082 #include <sched.h>
4084 int main(void)
4086 int ret;
4087 ret = setns(0, 0);
4088 ret = unshare(0);
4089 return ret;
4092 if compile_prog "" "" ; then
4093 setns=yes
4096 # clock_adjtime probe
4097 clock_adjtime=no
4098 cat > $TMPC <<EOF
4099 #include <time.h>
4101 int main(void)
4103 return clock_adjtime(0, 0);
4106 clock_adjtime=no
4107 if compile_prog "" "" ; then
4108 clock_adjtime=yes
4111 # syncfs probe
4112 syncfs=no
4113 cat > $TMPC <<EOF
4114 #include <unistd.h>
4116 int main(void)
4118 return syncfs(0);
4121 syncfs=no
4122 if compile_prog "" "" ; then
4123 syncfs=yes
4126 # Search for bswap_32 function
4127 byteswap_h=no
4128 cat > $TMPC << EOF
4129 #include <byteswap.h>
4130 int main(void) { return bswap_32(0); }
4132 if compile_prog "" "" ; then
4133 byteswap_h=yes
4136 # Search for bswap32 function
4137 bswap_h=no
4138 cat > $TMPC << EOF
4139 #include <sys/endian.h>
4140 #include <sys/types.h>
4141 #include <machine/bswap.h>
4142 int main(void) { return bswap32(0); }
4144 if compile_prog "" "" ; then
4145 bswap_h=yes
4148 ##########################################
4149 # Do we need librt
4150 # uClibc provides 2 versions of clock_gettime(), one with realtime
4151 # support and one without. This means that the clock_gettime() don't
4152 # need -lrt. We still need it for timer_create() so we check for this
4153 # function in addition.
4154 cat > $TMPC <<EOF
4155 #include <signal.h>
4156 #include <time.h>
4157 int main(void) {
4158 timer_create(CLOCK_REALTIME, NULL, NULL);
4159 return clock_gettime(CLOCK_REALTIME, NULL);
4163 if compile_prog "" "" ; then
4165 # we need pthread for static linking. use previous pthread test result
4166 elif compile_prog "" "$pthread_lib -lrt" ; then
4167 LIBS="$LIBS -lrt"
4170 # Check whether we have openpty() in either libc or libutil
4171 cat > $TMPC << EOF
4172 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4173 int main(void) { return openpty(0, 0, 0, 0, 0); }
4176 have_openpty="no"
4177 if compile_prog "" "" ; then
4178 have_openpty="yes"
4179 else
4180 if compile_prog "" "-lutil" ; then
4181 have_openpty="yes"
4185 ##########################################
4186 # spice probe
4187 if test "$spice" != "no" ; then
4188 cat > $TMPC << EOF
4189 #include <spice.h>
4190 int main(void) { spice_server_new(); return 0; }
4192 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4193 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4194 if $pkg_config --atleast-version=0.12.5 spice-server && \
4195 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4196 compile_prog "$spice_cflags" "$spice_libs" ; then
4197 spice="yes"
4198 else
4199 if test "$spice" = "yes" ; then
4200 feature_not_found "spice" \
4201 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4203 spice="no"
4207 # check for smartcard support
4208 if test "$smartcard" != "no"; then
4209 if $pkg_config --atleast-version=2.5.1 libcacard; then
4210 libcacard_cflags=$($pkg_config --cflags libcacard)
4211 libcacard_libs=$($pkg_config --libs libcacard)
4212 smartcard="yes"
4213 else
4214 if test "$smartcard" = "yes"; then
4215 feature_not_found "smartcard" "Install libcacard devel"
4217 smartcard="no"
4221 # check for libusb
4222 if test "$libusb" != "no" ; then
4223 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4224 libusb="yes"
4225 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4226 libusb_libs=$($pkg_config --libs libusb-1.0)
4227 else
4228 if test "$libusb" = "yes"; then
4229 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4231 libusb="no"
4235 # check for usbredirparser for usb network redirection support
4236 if test "$usb_redir" != "no" ; then
4237 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4238 usb_redir="yes"
4239 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4240 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4241 else
4242 if test "$usb_redir" = "yes"; then
4243 feature_not_found "usb-redir" "Install usbredir devel"
4245 usb_redir="no"
4249 ##########################################
4250 # check if we have VSS SDK headers for win
4252 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4253 test "$vss_win32_sdk" != "no" ; then
4254 case "$vss_win32_sdk" in
4255 "") vss_win32_include="-isystem $source_path" ;;
4256 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4257 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4258 vss_win32_include="-isystem $source_path/.sdk/vss"
4259 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4261 *) vss_win32_include="-isystem $vss_win32_sdk"
4262 esac
4263 cat > $TMPC << EOF
4264 #define __MIDL_user_allocate_free_DEFINED__
4265 #include <inc/win2003/vss.h>
4266 int main(void) { return VSS_CTX_BACKUP; }
4268 if compile_prog "$vss_win32_include" "" ; then
4269 guest_agent_with_vss="yes"
4270 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4271 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4272 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4273 else
4274 if test "$vss_win32_sdk" != "" ; then
4275 echo "ERROR: Please download and install Microsoft VSS SDK:"
4276 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4277 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4278 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4279 echo "ERROR: The headers are extracted in the directory \`inc'."
4280 feature_not_found "VSS support"
4282 guest_agent_with_vss="no"
4286 ##########################################
4287 # lookup Windows platform SDK (if not specified)
4288 # The SDK is needed only to build .tlb (type library) file of guest agent
4289 # VSS provider from the source. It is usually unnecessary because the
4290 # pre-compiled .tlb file is included.
4292 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4293 test "$guest_agent_with_vss" = "yes" ; then
4294 if test -z "$win_sdk"; then
4295 programfiles="$PROGRAMFILES"
4296 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4297 if test -n "$programfiles"; then
4298 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4299 else
4300 feature_not_found "Windows SDK"
4302 elif test "$win_sdk" = "no"; then
4303 win_sdk=""
4307 ##########################################
4308 # check if mingw environment provides a recent ntddscsi.h
4309 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4310 cat > $TMPC << EOF
4311 #include <windows.h>
4312 #include <ntddscsi.h>
4313 int main(void) {
4314 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4315 #error Missing required ioctl definitions
4316 #endif
4317 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4318 return addr.Lun;
4321 if compile_prog "" "" ; then
4322 guest_agent_ntddscsi=yes
4323 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4327 ##########################################
4328 # virgl renderer probe
4330 if test "$virglrenderer" != "no" ; then
4331 cat > $TMPC << EOF
4332 #include <virglrenderer.h>
4333 int main(void) { virgl_renderer_poll(); return 0; }
4335 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4336 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4337 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4338 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4339 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4340 virglrenderer="yes"
4341 else
4342 if test "$virglrenderer" = "yes" ; then
4343 feature_not_found "virglrenderer"
4345 virglrenderer="no"
4349 ##########################################
4350 # capstone
4352 case "$capstone" in
4353 auto | enabled | internal)
4354 # Simpler to always update submodule, even if not needed.
4355 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
4356 git_submodules="${git_submodules} capstone"
4359 esac
4361 ##########################################
4362 # check if we have fdatasync
4364 fdatasync=no
4365 cat > $TMPC << EOF
4366 #include <unistd.h>
4367 int main(void) {
4368 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4369 return fdatasync(0);
4370 #else
4371 #error Not supported
4372 #endif
4375 if compile_prog "" "" ; then
4376 fdatasync=yes
4379 ##########################################
4380 # check if we have madvise
4382 madvise=no
4383 cat > $TMPC << EOF
4384 #include <sys/types.h>
4385 #include <sys/mman.h>
4386 #include <stddef.h>
4387 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4389 if compile_prog "" "" ; then
4390 madvise=yes
4393 ##########################################
4394 # check if we have posix_madvise
4396 posix_madvise=no
4397 cat > $TMPC << EOF
4398 #include <sys/mman.h>
4399 #include <stddef.h>
4400 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4402 if compile_prog "" "" ; then
4403 posix_madvise=yes
4406 ##########################################
4407 # check if we have posix_memalign()
4409 posix_memalign=no
4410 cat > $TMPC << EOF
4411 #include <stdlib.h>
4412 int main(void) {
4413 void *p;
4414 return posix_memalign(&p, 8, 8);
4417 if compile_prog "" "" ; then
4418 posix_memalign=yes
4421 ##########################################
4422 # check if we have posix_syslog
4424 posix_syslog=no
4425 cat > $TMPC << EOF
4426 #include <syslog.h>
4427 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4429 if compile_prog "" "" ; then
4430 posix_syslog=yes
4433 ##########################################
4434 # check if we have sem_timedwait
4436 sem_timedwait=no
4437 cat > $TMPC << EOF
4438 #include <semaphore.h>
4439 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
4441 if compile_prog "" "" ; then
4442 sem_timedwait=yes
4445 ##########################################
4446 # check if we have strchrnul
4448 strchrnul=no
4449 cat > $TMPC << EOF
4450 #include <string.h>
4451 int main(void);
4452 // Use a haystack that the compiler shouldn't be able to constant fold
4453 char *haystack = (char*)&main;
4454 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4456 if compile_prog "" "" ; then
4457 strchrnul=yes
4460 #########################################
4461 # check if we have st_atim
4463 st_atim=no
4464 cat > $TMPC << EOF
4465 #include <sys/stat.h>
4466 #include <stddef.h>
4467 int main(void) { return offsetof(struct stat, st_atim); }
4469 if compile_prog "" "" ; then
4470 st_atim=yes
4473 ##########################################
4474 # check if trace backend exists
4476 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4477 if test "$?" -ne 0 ; then
4478 error_exit "invalid trace backends" \
4479 "Please choose supported trace backends."
4482 ##########################################
4483 # For 'ust' backend, test if ust headers are present
4484 if have_backend "ust"; then
4485 cat > $TMPC << EOF
4486 #include <lttng/tracepoint.h>
4487 int main(void) { return 0; }
4489 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4490 if $pkg_config lttng-ust --exists; then
4491 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4492 else
4493 lttng_ust_libs="-llttng-ust -ldl"
4495 if $pkg_config liburcu-bp --exists; then
4496 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4497 else
4498 urcu_bp_libs="-lurcu-bp"
4500 else
4501 error_exit "Trace backend 'ust' missing lttng-ust header files"
4505 ##########################################
4506 # For 'dtrace' backend, test if 'dtrace' command is present
4507 if have_backend "dtrace"; then
4508 if ! has 'dtrace' ; then
4509 error_exit "dtrace command is not found in PATH $PATH"
4511 trace_backend_stap="no"
4512 if has 'stap' ; then
4513 trace_backend_stap="yes"
4515 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
4516 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
4517 # instead. QEMU --enable-modules depends on this because the SystemTap
4518 # semaphores are linked into the main binary and not the module's shared
4519 # object.
4520 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
4524 ##########################################
4525 # check and set a backend for coroutine
4527 # We prefer ucontext, but it's not always possible. The fallback
4528 # is sigcontext. On Windows the only valid backend is the Windows
4529 # specific one.
4531 ucontext_works=no
4532 if test "$darwin" != "yes"; then
4533 cat > $TMPC << EOF
4534 #include <ucontext.h>
4535 #ifdef __stub_makecontext
4536 #error Ignoring glibc stub makecontext which will always fail
4537 #endif
4538 int main(void) { makecontext(0, 0, 0); return 0; }
4540 if compile_prog "" "" ; then
4541 ucontext_works=yes
4545 if test "$coroutine" = ""; then
4546 if test "$mingw32" = "yes"; then
4547 coroutine=win32
4548 elif test "$ucontext_works" = "yes"; then
4549 coroutine=ucontext
4550 else
4551 coroutine=sigaltstack
4553 else
4554 case $coroutine in
4555 windows)
4556 if test "$mingw32" != "yes"; then
4557 error_exit "'windows' coroutine backend only valid for Windows"
4559 # Unfortunately the user visible backend name doesn't match the
4560 # coroutine-*.c filename for this case, so we have to adjust it here.
4561 coroutine=win32
4563 ucontext)
4564 if test "$ucontext_works" != "yes"; then
4565 feature_not_found "ucontext"
4568 sigaltstack)
4569 if test "$mingw32" = "yes"; then
4570 error_exit "only the 'windows' coroutine backend is valid for Windows"
4574 error_exit "unknown coroutine backend $coroutine"
4576 esac
4579 if test "$coroutine_pool" = ""; then
4580 coroutine_pool=yes
4583 if test "$debug_stack_usage" = "yes"; then
4584 if test "$coroutine_pool" = "yes"; then
4585 echo "WARN: disabling coroutine pool for stack usage debugging"
4586 coroutine_pool=no
4590 ##################################################
4591 # SafeStack
4594 if test "$safe_stack" = "yes"; then
4595 cat > $TMPC << EOF
4596 int main(int argc, char *argv[])
4598 #if ! __has_feature(safe_stack)
4599 #error SafeStack Disabled
4600 #endif
4601 return 0;
4604 flag="-fsanitize=safe-stack"
4605 # Check that safe-stack is supported and enabled.
4606 if compile_prog "-Werror $flag" "$flag"; then
4607 # Flag needed both at compilation and at linking
4608 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4609 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4610 else
4611 error_exit "SafeStack not supported by your compiler"
4613 if test "$coroutine" != "ucontext"; then
4614 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4616 else
4617 cat > $TMPC << EOF
4618 int main(int argc, char *argv[])
4620 #if defined(__has_feature)
4621 #if __has_feature(safe_stack)
4622 #error SafeStack Enabled
4623 #endif
4624 #endif
4625 return 0;
4628 if test "$safe_stack" = "no"; then
4629 # Make sure that safe-stack is disabled
4630 if ! compile_prog "-Werror" ""; then
4631 # SafeStack was already enabled, try to explicitly remove the feature
4632 flag="-fno-sanitize=safe-stack"
4633 if ! compile_prog "-Werror $flag" "$flag"; then
4634 error_exit "Configure cannot disable SafeStack"
4636 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4637 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4639 else # "$safe_stack" = ""
4640 # Set safe_stack to yes or no based on pre-existing flags
4641 if compile_prog "-Werror" ""; then
4642 safe_stack="no"
4643 else
4644 safe_stack="yes"
4645 if test "$coroutine" != "ucontext"; then
4646 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4652 ##########################################
4653 # check if we have open_by_handle_at
4655 open_by_handle_at=no
4656 cat > $TMPC << EOF
4657 #include <fcntl.h>
4658 #if !defined(AT_EMPTY_PATH)
4659 # error missing definition
4660 #else
4661 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4662 #endif
4664 if compile_prog "" "" ; then
4665 open_by_handle_at=yes
4668 ########################################
4669 # check if we have linux/magic.h
4671 linux_magic_h=no
4672 cat > $TMPC << EOF
4673 #include <linux/magic.h>
4674 int main(void) {
4675 return 0;
4678 if compile_prog "" "" ; then
4679 linux_magic_h=yes
4682 ########################################
4683 # check if we have valgrind/valgrind.h
4685 valgrind_h=no
4686 cat > $TMPC << EOF
4687 #include <valgrind/valgrind.h>
4688 int main(void) {
4689 return 0;
4692 if compile_prog "" "" ; then
4693 valgrind_h=yes
4696 ########################################
4697 # check if environ is declared
4699 has_environ=no
4700 cat > $TMPC << EOF
4701 #include <unistd.h>
4702 int main(void) {
4703 environ = 0;
4704 return 0;
4707 if compile_prog "" "" ; then
4708 has_environ=yes
4711 ########################################
4712 # check if cpuid.h is usable.
4714 cat > $TMPC << EOF
4715 #include <cpuid.h>
4716 int main(void) {
4717 unsigned a, b, c, d;
4718 int max = __get_cpuid_max(0, 0);
4720 if (max >= 1) {
4721 __cpuid(1, a, b, c, d);
4724 if (max >= 7) {
4725 __cpuid_count(7, 0, a, b, c, d);
4728 return 0;
4731 if compile_prog "" "" ; then
4732 cpuid_h=yes
4735 ##########################################
4736 # avx2 optimization requirement check
4738 # There is no point enabling this if cpuid.h is not usable,
4739 # since we won't be able to select the new routines.
4741 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
4742 cat > $TMPC << EOF
4743 #pragma GCC push_options
4744 #pragma GCC target("avx2")
4745 #include <cpuid.h>
4746 #include <immintrin.h>
4747 static int bar(void *a) {
4748 __m256i x = *(__m256i *)a;
4749 return _mm256_testz_si256(x, x);
4751 int main(int argc, char *argv[]) { return bar(argv[0]); }
4753 if compile_object "" ; then
4754 avx2_opt="yes"
4755 else
4756 avx2_opt="no"
4760 ##########################################
4761 # avx512f optimization requirement check
4763 # There is no point enabling this if cpuid.h is not usable,
4764 # since we won't be able to select the new routines.
4765 # by default, it is turned off.
4766 # if user explicitly want to enable it, check environment
4768 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
4769 cat > $TMPC << EOF
4770 #pragma GCC push_options
4771 #pragma GCC target("avx512f")
4772 #include <cpuid.h>
4773 #include <immintrin.h>
4774 static int bar(void *a) {
4775 __m512i x = *(__m512i *)a;
4776 return _mm512_test_epi64_mask(x, x);
4778 int main(int argc, char *argv[])
4780 return bar(argv[0]);
4783 if ! compile_object "" ; then
4784 avx512f_opt="no"
4786 else
4787 avx512f_opt="no"
4790 ########################################
4791 # check if __[u]int128_t is usable.
4793 int128=no
4794 cat > $TMPC << EOF
4795 __int128_t a;
4796 __uint128_t b;
4797 int main (void) {
4798 a = a + b;
4799 b = a * b;
4800 a = a * a;
4801 return 0;
4804 if compile_prog "" "" ; then
4805 int128=yes
4808 #########################################
4809 # See if 128-bit atomic operations are supported.
4811 atomic128=no
4812 if test "$int128" = "yes"; then
4813 cat > $TMPC << EOF
4814 int main(void)
4816 unsigned __int128 x = 0, y = 0;
4817 y = __atomic_load_16(&x, 0);
4818 __atomic_store_16(&x, y, 0);
4819 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4820 return 0;
4823 if compile_prog "" "" ; then
4824 atomic128=yes
4828 cmpxchg128=no
4829 if test "$int128" = yes && test "$atomic128" = no; then
4830 cat > $TMPC << EOF
4831 int main(void)
4833 unsigned __int128 x = 0, y = 0;
4834 __sync_val_compare_and_swap_16(&x, y, x);
4835 return 0;
4838 if compile_prog "" "" ; then
4839 cmpxchg128=yes
4843 #########################################
4844 # See if 64-bit atomic operations are supported.
4845 # Note that without __atomic builtins, we can only
4846 # assume atomic loads/stores max at pointer size.
4848 cat > $TMPC << EOF
4849 #include <stdint.h>
4850 int main(void)
4852 uint64_t x = 0, y = 0;
4853 #ifdef __ATOMIC_RELAXED
4854 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
4855 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
4856 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
4857 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
4858 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
4859 #else
4860 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4861 __sync_lock_test_and_set(&x, y);
4862 __sync_val_compare_and_swap(&x, y, 0);
4863 __sync_fetch_and_add(&x, y);
4864 #endif
4865 return 0;
4868 if compile_prog "" "" ; then
4869 atomic64=yes
4872 #########################################
4873 # See if --dynamic-list is supported by the linker
4874 ld_dynamic_list="no"
4875 if test "$static" = "no" ; then
4876 cat > $TMPTXT <<EOF
4878 foo;
4882 cat > $TMPC <<EOF
4883 #include <stdio.h>
4884 void foo(void);
4886 void foo(void)
4888 printf("foo\n");
4891 int main(void)
4893 foo();
4894 return 0;
4898 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
4899 ld_dynamic_list="yes"
4903 #########################################
4904 # See if -exported_symbols_list is supported by the linker
4906 ld_exported_symbols_list="no"
4907 if test "$static" = "no" ; then
4908 cat > $TMPTXT <<EOF
4909 _foo
4912 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
4913 ld_exported_symbols_list="yes"
4917 if test "$plugins" = "yes" &&
4918 test "$ld_dynamic_list" = "no" &&
4919 test "$ld_exported_symbols_list" = "no" ; then
4920 error_exit \
4921 "Plugin support requires dynamic linking and specifying a set of symbols " \
4922 "that are exported to plugins. Unfortunately your linker doesn't " \
4923 "support the flag (--dynamic-list or -exported_symbols_list) used " \
4924 "for this purpose. You can't build with --static."
4927 ########################################
4928 # See if __attribute__((alias)) is supported.
4929 # This false for Xcode 9, but has been remedied for Xcode 10.
4930 # Unfortunately, travis uses Xcode 9 by default.
4932 attralias=no
4933 cat > $TMPC << EOF
4934 int x = 1;
4935 extern const int y __attribute__((alias("x")));
4936 int main(void) { return 0; }
4938 if compile_prog "" "" ; then
4939 attralias=yes
4942 ########################################
4943 # check if getauxval is available.
4945 getauxval=no
4946 cat > $TMPC << EOF
4947 #include <sys/auxv.h>
4948 int main(void) {
4949 return getauxval(AT_HWCAP) == 0;
4952 if compile_prog "" "" ; then
4953 getauxval=yes
4956 ########################################
4957 # check if ccache is interfering with
4958 # semantic analysis of macros
4960 unset CCACHE_CPP2
4961 ccache_cpp2=no
4962 cat > $TMPC << EOF
4963 static const int Z = 1;
4964 #define fn() ({ Z; })
4965 #define TAUT(X) ((X) == Z)
4966 #define PAREN(X, Y) (X == Y)
4967 #define ID(X) (X)
4968 int main(int argc, char *argv[])
4970 int x = 0, y = 0;
4971 x = ID(x);
4972 x = fn();
4973 fn();
4974 if (PAREN(x, y)) return 0;
4975 if (TAUT(Z)) return 0;
4976 return 0;
4980 if ! compile_object "-Werror"; then
4981 ccache_cpp2=yes
4984 #################################################
4985 # clang does not support glibc + FORTIFY_SOURCE.
4987 if test "$fortify_source" != "no"; then
4988 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4989 fortify_source="no";
4990 elif test -n "$cxx" && has $cxx &&
4991 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4992 fortify_source="no";
4993 else
4994 fortify_source="yes"
4998 ###############################################
4999 # Check if copy_file_range is provided by glibc
5000 have_copy_file_range=no
5001 cat > $TMPC << EOF
5002 #include <unistd.h>
5003 int main(void) {
5004 copy_file_range(0, NULL, 0, NULL, 0, 0);
5005 return 0;
5008 if compile_prog "" "" ; then
5009 have_copy_file_range=yes
5012 ##########################################
5013 # check if struct fsxattr is available via linux/fs.h
5015 have_fsxattr=no
5016 cat > $TMPC << EOF
5017 #include <linux/fs.h>
5018 struct fsxattr foo;
5019 int main(void) {
5020 return 0;
5023 if compile_prog "" "" ; then
5024 have_fsxattr=yes
5027 ##########################################
5028 # check for usable membarrier system call
5029 if test "$membarrier" = "yes"; then
5030 have_membarrier=no
5031 if test "$mingw32" = "yes" ; then
5032 have_membarrier=yes
5033 elif test "$linux" = "yes" ; then
5034 cat > $TMPC << EOF
5035 #include <linux/membarrier.h>
5036 #include <sys/syscall.h>
5037 #include <unistd.h>
5038 #include <stdlib.h>
5039 int main(void) {
5040 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5041 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5042 exit(0);
5045 if compile_prog "" "" ; then
5046 have_membarrier=yes
5049 if test "$have_membarrier" = "no"; then
5050 feature_not_found "membarrier" "membarrier system call not available"
5052 else
5053 # Do not enable it by default even for Mingw32, because it doesn't
5054 # work on Wine.
5055 membarrier=no
5058 ##########################################
5059 # check if rtnetlink.h exists and is useful
5060 have_rtnetlink=no
5061 cat > $TMPC << EOF
5062 #include <linux/rtnetlink.h>
5063 int main(void) {
5064 return IFLA_PROTO_DOWN;
5067 if compile_prog "" "" ; then
5068 have_rtnetlink=yes
5071 ##########################################
5072 # check for usable AF_VSOCK environment
5073 have_af_vsock=no
5074 cat > $TMPC << EOF
5075 #include <errno.h>
5076 #include <sys/types.h>
5077 #include <sys/socket.h>
5078 #if !defined(AF_VSOCK)
5079 # error missing AF_VSOCK flag
5080 #endif
5081 #include <linux/vm_sockets.h>
5082 int main(void) {
5083 int sock, ret;
5084 struct sockaddr_vm svm;
5085 socklen_t len = sizeof(svm);
5086 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5087 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5088 if ((ret == -1) && (errno == ENOTCONN)) {
5089 return 0;
5091 return -1;
5094 if compile_prog "" "" ; then
5095 have_af_vsock=yes
5098 ##########################################
5099 # check for usable AF_ALG environment
5100 have_afalg=no
5101 cat > $TMPC << EOF
5102 #include <errno.h>
5103 #include <sys/types.h>
5104 #include <sys/socket.h>
5105 #include <linux/if_alg.h>
5106 int main(void) {
5107 int sock;
5108 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5109 return sock;
5112 if compile_prog "" "" ; then
5113 have_afalg=yes
5115 if test "$crypto_afalg" = "yes"
5116 then
5117 if test "$have_afalg" != "yes"
5118 then
5119 error_exit "AF_ALG requested but could not be detected"
5124 #################################################
5125 # check for sysmacros.h
5127 have_sysmacros=no
5128 cat > $TMPC << EOF
5129 #include <sys/sysmacros.h>
5130 int main(void) {
5131 return makedev(0, 0);
5134 if compile_prog "" "" ; then
5135 have_sysmacros=yes
5138 ##########################################
5139 # check for _Static_assert()
5141 have_static_assert=no
5142 cat > $TMPC << EOF
5143 _Static_assert(1, "success");
5144 int main(void) {
5145 return 0;
5148 if compile_prog "" "" ; then
5149 have_static_assert=yes
5152 ##########################################
5153 # check for utmpx.h, it is missing e.g. on OpenBSD
5155 have_utmpx=no
5156 cat > $TMPC << EOF
5157 #include <utmpx.h>
5158 struct utmpx user_info;
5159 int main(void) {
5160 return 0;
5163 if compile_prog "" "" ; then
5164 have_utmpx=yes
5167 ##########################################
5168 # check for getrandom()
5170 have_getrandom=no
5171 cat > $TMPC << EOF
5172 #include <sys/random.h>
5173 int main(void) {
5174 return getrandom(0, 0, GRND_NONBLOCK);
5177 if compile_prog "" "" ; then
5178 have_getrandom=yes
5181 ##########################################
5182 # checks for sanitizers
5184 have_asan=no
5185 have_ubsan=no
5186 have_asan_iface_h=no
5187 have_asan_iface_fiber=no
5189 if test "$sanitizers" = "yes" ; then
5190 write_c_skeleton
5191 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5192 have_asan=yes
5195 # we could use a simple skeleton for flags checks, but this also
5196 # detect the static linking issue of ubsan, see also:
5197 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5198 cat > $TMPC << EOF
5199 #include <stdlib.h>
5200 int main(void) {
5201 void *tmp = malloc(10);
5202 if (tmp != NULL) {
5203 return *(int *)(tmp + 2);
5205 return 1;
5208 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5209 have_ubsan=yes
5212 if check_include "sanitizer/asan_interface.h" ; then
5213 have_asan_iface_h=yes
5216 cat > $TMPC << EOF
5217 #include <sanitizer/asan_interface.h>
5218 int main(void) {
5219 __sanitizer_start_switch_fiber(0, 0, 0);
5220 return 0;
5223 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5224 have_asan_iface_fiber=yes
5228 ##########################################
5229 # checks for fuzzer
5230 if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
5231 write_c_fuzzer_skeleton
5232 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
5233 have_fuzzer=yes
5234 else
5235 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
5236 exit 1
5240 # Thread sanitizer is, for now, much noisier than the other sanitizers;
5241 # keep it separate until that is not the case.
5242 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
5243 error_exit "TSAN is not supported with other sanitiziers."
5245 have_tsan=no
5246 have_tsan_iface_fiber=no
5247 if test "$tsan" = "yes" ; then
5248 write_c_skeleton
5249 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5250 have_tsan=yes
5252 cat > $TMPC << EOF
5253 #include <sanitizer/tsan_interface.h>
5254 int main(void) {
5255 __tsan_create_fiber(0);
5256 return 0;
5259 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5260 have_tsan_iface_fiber=yes
5264 ##########################################
5265 # check for libpmem
5267 if test "$libpmem" != "no"; then
5268 if $pkg_config --exists "libpmem"; then
5269 libpmem="yes"
5270 libpmem_libs=$($pkg_config --libs libpmem)
5271 libpmem_cflags=$($pkg_config --cflags libpmem)
5272 else
5273 if test "$libpmem" = "yes" ; then
5274 feature_not_found "libpmem" "Install nvml or pmdk"
5276 libpmem="no"
5280 ##########################################
5281 # check for libdaxctl
5283 if test "$libdaxctl" != "no"; then
5284 if $pkg_config --atleast-version=57 "libdaxctl"; then
5285 libdaxctl="yes"
5286 libdaxctl_libs=$($pkg_config --libs libdaxctl)
5287 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
5288 else
5289 if test "$libdaxctl" = "yes" ; then
5290 feature_not_found "libdaxctl" "Install libdaxctl"
5292 libdaxctl="no"
5296 ##########################################
5297 # check for slirp
5299 case "$slirp" in
5300 auto | enabled | internal)
5301 # Simpler to always update submodule, even if not needed.
5302 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5303 git_submodules="${git_submodules} slirp"
5306 esac
5308 ##########################################
5309 # check for usable __NR_keyctl syscall
5311 if test "$linux" = "yes" ; then
5313 have_keyring=no
5314 cat > $TMPC << EOF
5315 #include <errno.h>
5316 #include <asm/unistd.h>
5317 #include <linux/keyctl.h>
5318 #include <unistd.h>
5319 int main(void) {
5320 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
5323 if compile_prog "" "" ; then
5324 have_keyring=yes
5327 if test "$secret_keyring" != "no"
5328 then
5329 if test "$have_keyring" = "yes"
5330 then
5331 secret_keyring=yes
5332 else
5333 if test "$secret_keyring" = "yes"
5334 then
5335 error_exit "syscall __NR_keyctl requested, \
5336 but not implemented on your system"
5337 else
5338 secret_keyring=no
5343 ##########################################
5344 # End of CC checks
5345 # After here, no more $cc or $ld runs
5347 write_c_skeleton
5349 if test "$gcov" = "yes" ; then
5351 elif test "$fortify_source" = "yes" ; then
5352 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5353 debug=no
5356 case "$ARCH" in
5357 alpha)
5358 # Ensure there's only a single GP
5359 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
5361 esac
5363 if test "$gprof" = "yes" ; then
5364 QEMU_CFLAGS="-p $QEMU_CFLAGS"
5365 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
5368 if test "$have_asan" = "yes"; then
5369 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
5370 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
5371 if test "$have_asan_iface_h" = "no" ; then
5372 echo "ASAN build enabled, but ASAN header missing." \
5373 "Without code annotation, the report may be inferior."
5374 elif test "$have_asan_iface_fiber" = "no" ; then
5375 echo "ASAN build enabled, but ASAN header is too old." \
5376 "Without code annotation, the report may be inferior."
5379 if test "$have_tsan" = "yes" ; then
5380 if test "$have_tsan_iface_fiber" = "yes" ; then
5381 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
5382 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
5383 else
5384 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
5386 elif test "$tsan" = "yes" ; then
5387 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
5389 if test "$have_ubsan" = "yes"; then
5390 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
5391 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
5394 ##########################################
5396 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
5397 if test "$solaris" = "no" && test "$tsan" = "no"; then
5398 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5399 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
5403 # Use ASLR, no-SEH and DEP if available
5404 if test "$mingw32" = "yes" ; then
5405 flags="--no-seh --nxcompat"
5407 # Disable ASLR for debug builds to allow debugging with gdb
5408 if test "$debug" = "no" ; then
5409 flags="--dynamicbase $flags"
5412 for flag in $flags; do
5413 if ld_has $flag ; then
5414 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
5416 done
5419 # We can only support ivshmem if we have eventfd
5420 if [ "$eventfd" = "yes" ]; then
5421 ivshmem=yes
5424 # Probe for guest agent support/options
5426 if [ "$guest_agent" != "no" ]; then
5427 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
5428 guest_agent=no
5429 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5430 guest_agent=yes
5431 elif [ "$guest_agent" != yes ]; then
5432 guest_agent=no
5433 else
5434 error_exit "Guest agent is not supported on this platform"
5438 # Guest agent Window MSI package
5440 if test "$guest_agent" != yes; then
5441 if test "$guest_agent_msi" = yes; then
5442 error_exit "MSI guest agent package requires guest agent enabled"
5444 guest_agent_msi=no
5445 elif test "$mingw32" != "yes"; then
5446 if test "$guest_agent_msi" = "yes"; then
5447 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5449 guest_agent_msi=no
5450 elif ! has wixl; then
5451 if test "$guest_agent_msi" = "yes"; then
5452 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5454 guest_agent_msi=no
5455 else
5456 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5457 # disabled explicitly
5458 if test "$guest_agent_msi" != "no"; then
5459 guest_agent_msi=yes
5463 if test "$guest_agent_msi" = "yes"; then
5464 if test "$guest_agent_with_vss" = "yes"; then
5465 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5468 if test "$QEMU_GA_MANUFACTURER" = ""; then
5469 QEMU_GA_MANUFACTURER=QEMU
5472 if test "$QEMU_GA_DISTRO" = ""; then
5473 QEMU_GA_DISTRO=Linux
5476 if test "$QEMU_GA_VERSION" = ""; then
5477 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5480 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5482 case "$cpu" in
5483 x86_64)
5484 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5486 i386)
5487 QEMU_GA_MSI_ARCH="-D Arch=32"
5490 error_exit "CPU $cpu not supported for building installation package"
5492 esac
5495 # Mac OS X ships with a broken assembler
5496 roms=
5497 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5498 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
5499 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
5500 # Different host OS linkers have different ideas about the name of the ELF
5501 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5502 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5503 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5504 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5505 ld_i386_emulation="$emu"
5506 roms="optionrom"
5507 break
5509 done
5512 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
5513 if test "$cpu" = "s390x" ; then
5514 write_c_skeleton
5515 if compile_prog "-march=z900" ""; then
5516 roms="$roms s390-ccw"
5517 # SLOF is required for building the s390-ccw firmware on s390x,
5518 # since it is using the libnet code from SLOF for network booting.
5519 if test -e "${source_path}/.git" ; then
5520 git_submodules="${git_submodules} roms/SLOF"
5525 # Check that the C++ compiler exists and works with the C compiler.
5526 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5527 if has $cxx; then
5528 cat > $TMPC <<EOF
5529 int c_function(void);
5530 int main(void) { return c_function(); }
5533 compile_object
5535 cat > $TMPCXX <<EOF
5536 extern "C" {
5537 int c_function(void);
5539 int c_function(void) { return 42; }
5542 update_cxxflags
5544 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
5545 # C++ compiler $cxx works ok with C compiler $cc
5547 else
5548 echo "C++ compiler $cxx does not work with C compiler $cc"
5549 echo "Disabling C++ specific optional code"
5550 cxx=
5552 else
5553 echo "No C++ compiler available; disabling C++ specific optional code"
5554 cxx=
5557 if test $git_update = 'yes' ; then
5558 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
5561 config_host_mak="config-host.mak"
5563 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5564 echo >> $config_host_mak
5566 echo all: >> $config_host_mak
5567 echo "GIT=$git" >> $config_host_mak
5568 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5569 echo "GIT_UPDATE=$git_update" >> $config_host_mak
5571 echo "ARCH=$ARCH" >> $config_host_mak
5573 if test "$debug_tcg" = "yes" ; then
5574 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5576 if test "$strip_opt" = "yes" ; then
5577 echo "STRIP=${strip}" >> $config_host_mak
5579 if test "$bigendian" = "yes" ; then
5580 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5582 if test "$mingw32" = "yes" ; then
5583 echo "CONFIG_WIN32=y" >> $config_host_mak
5584 if test "$guest_agent_with_vss" = "yes" ; then
5585 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5586 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5587 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5589 if test "$guest_agent_ntddscsi" = "yes" ; then
5590 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
5592 if test "$guest_agent_msi" = "yes"; then
5593 echo "CONFIG_QGA_MSI=y" >> $config_host_mak
5594 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5595 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5596 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5597 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5598 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5599 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5601 else
5602 echo "CONFIG_POSIX=y" >> $config_host_mak
5605 if test "$linux" = "yes" ; then
5606 echo "CONFIG_LINUX=y" >> $config_host_mak
5609 if test "$darwin" = "yes" ; then
5610 echo "CONFIG_DARWIN=y" >> $config_host_mak
5613 if test "$solaris" = "yes" ; then
5614 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5616 if test "$haiku" = "yes" ; then
5617 echo "CONFIG_HAIKU=y" >> $config_host_mak
5619 if test "$static" = "yes" ; then
5620 echo "CONFIG_STATIC=y" >> $config_host_mak
5622 if test "$profiler" = "yes" ; then
5623 echo "CONFIG_PROFILER=y" >> $config_host_mak
5625 if test "$want_tools" = "yes" ; then
5626 echo "CONFIG_TOOLS=y" >> $config_host_mak
5628 if test "$guest_agent" = "yes" ; then
5629 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
5631 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5632 if test "$vde" = "yes" ; then
5633 echo "CONFIG_VDE=y" >> $config_host_mak
5634 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5636 if test "$netmap" = "yes" ; then
5637 echo "CONFIG_NETMAP=y" >> $config_host_mak
5639 if test "$l2tpv3" = "yes" ; then
5640 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5642 if test "$gprof" = "yes" ; then
5643 echo "CONFIG_GPROF=y" >> $config_host_mak
5645 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5646 for drv in $audio_drv_list; do
5647 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5648 echo "$def=y" >> $config_host_mak
5649 done
5650 if test "$alsa" = "yes" ; then
5651 echo "CONFIG_ALSA=y" >> $config_host_mak
5653 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5654 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
5655 if test "$libpulse" = "yes" ; then
5656 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
5658 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5659 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
5660 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5661 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5662 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
5663 if test "$libjack" = "yes" ; then
5664 echo "CONFIG_LIBJACK=y" >> $config_host_mak
5666 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
5667 if test "$audio_win_int" = "yes" ; then
5668 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5670 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5671 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5672 if test "$xfs" = "yes" ; then
5673 echo "CONFIG_XFS=y" >> $config_host_mak
5675 qemu_version=$(head $source_path/VERSION)
5676 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5677 echo "SRC_PATH=$source_path" >> $config_host_mak
5678 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5679 if test "$modules" = "yes"; then
5680 # $shacmd can generate a hash started with digit, which the compiler doesn't
5681 # like as an symbol. So prefix it with an underscore
5682 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5683 echo "CONFIG_MODULES=y" >> $config_host_mak
5685 if test "$module_upgrades" = "yes"; then
5686 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
5688 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
5689 echo "CONFIG_X11=y" >> $config_host_mak
5690 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
5691 echo "X11_LIBS=$x11_libs" >> $config_host_mak
5693 if test "$pipe2" = "yes" ; then
5694 echo "CONFIG_PIPE2=y" >> $config_host_mak
5696 if test "$accept4" = "yes" ; then
5697 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5699 if test "$splice" = "yes" ; then
5700 echo "CONFIG_SPLICE=y" >> $config_host_mak
5702 if test "$eventfd" = "yes" ; then
5703 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5705 if test "$memfd" = "yes" ; then
5706 echo "CONFIG_MEMFD=y" >> $config_host_mak
5708 if test "$have_usbfs" = "yes" ; then
5709 echo "CONFIG_USBFS=y" >> $config_host_mak
5711 if test "$fallocate" = "yes" ; then
5712 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5714 if test "$fallocate_punch_hole" = "yes" ; then
5715 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5717 if test "$fallocate_zero_range" = "yes" ; then
5718 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5720 if test "$posix_fallocate" = "yes" ; then
5721 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5723 if test "$sync_file_range" = "yes" ; then
5724 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5726 if test "$fiemap" = "yes" ; then
5727 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5729 if test "$dup3" = "yes" ; then
5730 echo "CONFIG_DUP3=y" >> $config_host_mak
5732 if test "$ppoll" = "yes" ; then
5733 echo "CONFIG_PPOLL=y" >> $config_host_mak
5735 if test "$prctl_pr_set_timerslack" = "yes" ; then
5736 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5738 if test "$epoll" = "yes" ; then
5739 echo "CONFIG_EPOLL=y" >> $config_host_mak
5741 if test "$epoll_create1" = "yes" ; then
5742 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5744 if test "$sendfile" = "yes" ; then
5745 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5747 if test "$timerfd" = "yes" ; then
5748 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5750 if test "$setns" = "yes" ; then
5751 echo "CONFIG_SETNS=y" >> $config_host_mak
5753 if test "$clock_adjtime" = "yes" ; then
5754 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5756 if test "$syncfs" = "yes" ; then
5757 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5759 if test "$inotify" = "yes" ; then
5760 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5762 if test "$inotify1" = "yes" ; then
5763 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5765 if test "$sem_timedwait" = "yes" ; then
5766 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5768 if test "$strchrnul" = "yes" ; then
5769 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
5771 if test "$st_atim" = "yes" ; then
5772 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
5774 if test "$byteswap_h" = "yes" ; then
5775 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5777 if test "$bswap_h" = "yes" ; then
5778 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5780 if test "$gtk" = "yes" ; then
5781 echo "CONFIG_GTK=y" >> $config_host_mak
5782 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5783 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5784 if test "$gtk_gl" = "yes" ; then
5785 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5788 if test "$gio" = "yes" ; then
5789 echo "CONFIG_GIO=y" >> $config_host_mak
5790 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
5791 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
5792 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
5794 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5795 if test "$gnutls" = "yes" ; then
5796 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5797 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
5798 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
5800 if test "$gcrypt" = "yes" ; then
5801 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5802 if test "$gcrypt_hmac" = "yes" ; then
5803 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5805 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
5806 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
5808 if test "$nettle" = "yes" ; then
5809 echo "CONFIG_NETTLE=y" >> $config_host_mak
5810 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5811 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
5812 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
5814 if test "$qemu_private_xts" = "yes" ; then
5815 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
5817 if test "$tasn1" = "yes" ; then
5818 echo "CONFIG_TASN1=y" >> $config_host_mak
5820 if test "$auth_pam" = "yes" ; then
5821 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
5823 if test "$have_broken_size_max" = "yes" ; then
5824 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5826 if test "$have_openpty" = "yes" ; then
5827 echo "HAVE_OPENPTY=y" >> $config_host_mak
5830 # Work around a system header bug with some kernel/XFS header
5831 # versions where they both try to define 'struct fsxattr':
5832 # xfs headers will not try to redefine structs from linux headers
5833 # if this macro is set.
5834 if test "$have_fsxattr" = "yes" ; then
5835 echo "HAVE_FSXATTR=y" >> $config_host_mak
5837 if test "$have_copy_file_range" = "yes" ; then
5838 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
5840 if test "$vte" = "yes" ; then
5841 echo "CONFIG_VTE=y" >> $config_host_mak
5842 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5843 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
5845 if test "$virglrenderer" = "yes" ; then
5846 echo "CONFIG_VIRGL=y" >> $config_host_mak
5847 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5848 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5850 if test "$xen" = "enabled" ; then
5851 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5852 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5853 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
5854 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
5856 if test "$linux_aio" = "yes" ; then
5857 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5859 if test "$linux_io_uring" = "yes" ; then
5860 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
5861 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
5862 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
5864 if test "$vhost_scsi" = "yes" ; then
5865 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5867 if test "$vhost_net" = "yes" ; then
5868 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
5870 if test "$vhost_net_user" = "yes" ; then
5871 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
5873 if test "$vhost_net_vdpa" = "yes" ; then
5874 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
5876 if test "$vhost_crypto" = "yes" ; then
5877 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
5879 if test "$vhost_vsock" = "yes" ; then
5880 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5881 if test "$vhost_user" = "yes" ; then
5882 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
5885 if test "$vhost_kernel" = "yes" ; then
5886 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
5888 if test "$vhost_user" = "yes" ; then
5889 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5891 if test "$vhost_vdpa" = "yes" ; then
5892 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
5894 if test "$vhost_user_fs" = "yes" ; then
5895 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
5897 if test "$iovec" = "yes" ; then
5898 echo "CONFIG_IOVEC=y" >> $config_host_mak
5900 if test "$preadv" = "yes" ; then
5901 echo "CONFIG_PREADV=y" >> $config_host_mak
5903 if test "$membarrier" = "yes" ; then
5904 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
5906 if test "$signalfd" = "yes" ; then
5907 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5909 if test "$optreset" = "yes" ; then
5910 echo "HAVE_OPTRESET=y" >> $config_host_mak
5912 if test "$tcg" = "enabled"; then
5913 if test "$tcg_interpreter" = "yes" ; then
5914 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5917 if test "$fdatasync" = "yes" ; then
5918 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5920 if test "$madvise" = "yes" ; then
5921 echo "CONFIG_MADVISE=y" >> $config_host_mak
5923 if test "$posix_madvise" = "yes" ; then
5924 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5926 if test "$posix_memalign" = "yes" ; then
5927 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
5929 if test "$spice" = "yes" ; then
5930 echo "CONFIG_SPICE=y" >> $config_host_mak
5931 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
5932 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
5935 if test "$smartcard" = "yes" ; then
5936 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5937 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
5938 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
5941 if test "$libusb" = "yes" ; then
5942 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5943 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
5944 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
5947 if test "$usb_redir" = "yes" ; then
5948 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5949 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
5950 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
5953 if test "$opengl" = "yes" ; then
5954 echo "CONFIG_OPENGL=y" >> $config_host_mak
5955 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5956 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5957 if test "$opengl_dmabuf" = "yes" ; then
5958 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5962 if test "$gbm" = "yes" ; then
5963 echo "CONFIG_GBM=y" >> $config_host_mak
5964 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
5965 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
5969 if test "$avx2_opt" = "yes" ; then
5970 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5973 if test "$avx512f_opt" = "yes" ; then
5974 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
5977 # XXX: suppress that
5978 if [ "$bsd" = "yes" ] ; then
5979 echo "CONFIG_BSD=y" >> $config_host_mak
5982 if test "$qom_cast_debug" = "yes" ; then
5983 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5986 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5987 if test "$coroutine_pool" = "yes" ; then
5988 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5989 else
5990 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5993 if test "$debug_stack_usage" = "yes" ; then
5994 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5997 if test "$crypto_afalg" = "yes" ; then
5998 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6001 if test "$open_by_handle_at" = "yes" ; then
6002 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6005 if test "$linux_magic_h" = "yes" ; then
6006 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6009 if test "$valgrind_h" = "yes" ; then
6010 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6013 if test "$have_asan_iface_fiber" = "yes" ; then
6014 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6017 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
6018 echo "CONFIG_TSAN=y" >> $config_host_mak
6021 if test "$has_environ" = "yes" ; then
6022 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6025 if test "$cpuid_h" = "yes" ; then
6026 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6029 if test "$int128" = "yes" ; then
6030 echo "CONFIG_INT128=y" >> $config_host_mak
6033 if test "$atomic128" = "yes" ; then
6034 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6037 if test "$cmpxchg128" = "yes" ; then
6038 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6041 if test "$atomic64" = "yes" ; then
6042 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6045 if test "$attralias" = "yes" ; then
6046 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
6049 if test "$getauxval" = "yes" ; then
6050 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6053 if test "$libssh" = "yes" ; then
6054 echo "CONFIG_LIBSSH=y" >> $config_host_mak
6055 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
6056 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
6059 if test "$live_block_migration" = "yes" ; then
6060 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6063 if test "$tpm" = "yes"; then
6064 echo 'CONFIG_TPM=y' >> $config_host_mak
6067 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6068 if have_backend "nop"; then
6069 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6071 if have_backend "simple"; then
6072 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6073 # Set the appropriate trace file.
6074 trace_file="\"$trace_file-\" FMT_pid"
6076 if have_backend "log"; then
6077 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6079 if have_backend "ust"; then
6080 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6081 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6082 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
6084 if have_backend "dtrace"; then
6085 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6086 if test "$trace_backend_stap" = "yes" ; then
6087 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6090 if have_backend "ftrace"; then
6091 if test "$linux" = "yes" ; then
6092 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6093 else
6094 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6097 if have_backend "syslog"; then
6098 if test "$posix_syslog" = "yes" ; then
6099 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6100 else
6101 feature_not_found "syslog(trace backend)" "syslog not available"
6104 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6106 if test "$rdma" = "yes" ; then
6107 echo "CONFIG_RDMA=y" >> $config_host_mak
6108 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6111 if test "$pvrdma" = "yes" ; then
6112 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6115 if test "$have_rtnetlink" = "yes" ; then
6116 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6119 if test "$libxml2" = "yes" ; then
6120 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6121 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6122 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6125 if test "$replication" = "yes" ; then
6126 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6129 if test "$have_af_vsock" = "yes" ; then
6130 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6133 if test "$have_sysmacros" = "yes" ; then
6134 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6137 if test "$have_static_assert" = "yes" ; then
6138 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6141 if test "$have_utmpx" = "yes" ; then
6142 echo "HAVE_UTMPX=y" >> $config_host_mak
6144 if test "$have_getrandom" = "yes" ; then
6145 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6147 if test "$ivshmem" = "yes" ; then
6148 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6150 if test "$debug_mutex" = "yes" ; then
6151 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6154 # Hold two types of flag:
6155 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6156 # a thread we have a handle to
6157 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
6158 # platform
6159 if test "$pthread_setname_np_w_tid" = "yes" ; then
6160 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6161 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6162 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6163 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6164 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
6167 if test "$libpmem" = "yes" ; then
6168 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6169 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
6170 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
6173 if test "$libdaxctl" = "yes" ; then
6174 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
6175 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
6178 if test "$bochs" = "yes" ; then
6179 echo "CONFIG_BOCHS=y" >> $config_host_mak
6181 if test "$cloop" = "yes" ; then
6182 echo "CONFIG_CLOOP=y" >> $config_host_mak
6184 if test "$dmg" = "yes" ; then
6185 echo "CONFIG_DMG=y" >> $config_host_mak
6187 if test "$qcow1" = "yes" ; then
6188 echo "CONFIG_QCOW1=y" >> $config_host_mak
6190 if test "$vdi" = "yes" ; then
6191 echo "CONFIG_VDI=y" >> $config_host_mak
6193 if test "$vvfat" = "yes" ; then
6194 echo "CONFIG_VVFAT=y" >> $config_host_mak
6196 if test "$qed" = "yes" ; then
6197 echo "CONFIG_QED=y" >> $config_host_mak
6199 if test "$parallels" = "yes" ; then
6200 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6202 if test "$sheepdog" = "yes" ; then
6203 add_to deprecated_features "sheepdog"
6204 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6206 if test "$have_mlockall" = "yes" ; then
6207 echo "HAVE_MLOCKALL=y" >> $config_host_mak
6209 if test "$fuzzing" = "yes" ; then
6210 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
6211 # needed CFLAGS have already been provided
6212 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
6213 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
6214 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
6215 else
6216 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
6220 if test "$plugins" = "yes" ; then
6221 echo "CONFIG_PLUGIN=y" >> $config_host_mak
6222 # Copy the export object list to the build dir
6223 if test "$ld_dynamic_list" = "yes" ; then
6224 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
6225 ld_symbols=qemu-plugins-ld.symbols
6226 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
6227 elif test "$ld_exported_symbols_list" = "yes" ; then
6228 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
6229 ld64_symbols=qemu-plugins-ld64.symbols
6230 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
6231 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
6232 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
6233 else
6234 error_exit \
6235 "If \$plugins=yes, either \$ld_dynamic_list or " \
6236 "\$ld_exported_symbols_list should have been set to 'yes'."
6240 if test -n "$gdb_bin" ; then
6241 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
6244 if test "$secret_keyring" = "yes" ; then
6245 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
6248 echo "ROMS=$roms" >> $config_host_mak
6249 echo "MAKE=$make" >> $config_host_mak
6250 echo "PYTHON=$python" >> $config_host_mak
6251 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
6252 echo "MESON=$meson" >> $config_host_mak
6253 echo "NINJA=$ninja" >> $config_host_mak
6254 echo "CC=$cc" >> $config_host_mak
6255 if $iasl -h > /dev/null 2>&1; then
6256 echo "CONFIG_IASL=$iasl" >> $config_host_mak
6258 echo "CXX=$cxx" >> $config_host_mak
6259 echo "OBJCC=$objcc" >> $config_host_mak
6260 echo "AR=$ar" >> $config_host_mak
6261 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6262 echo "AS=$as" >> $config_host_mak
6263 echo "CCAS=$ccas" >> $config_host_mak
6264 echo "CPP=$cpp" >> $config_host_mak
6265 echo "OBJCOPY=$objcopy" >> $config_host_mak
6266 echo "LD=$ld" >> $config_host_mak
6267 echo "RANLIB=$ranlib" >> $config_host_mak
6268 echo "NM=$nm" >> $config_host_mak
6269 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
6270 echo "WINDRES=$windres" >> $config_host_mak
6271 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6272 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6273 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6274 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6275 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
6276 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6277 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6278 echo "EXESUF=$EXESUF" >> $config_host_mak
6279 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
6280 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
6281 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6282 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6283 if test "$gcov" = "yes" ; then
6284 echo "CONFIG_GCOV=y" >> $config_host_mak
6287 if test "$fuzzing" != "no"; then
6288 echo "CONFIG_FUZZ=y" >> $config_host_mak
6290 echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
6292 if test "$rng_none" = "yes"; then
6293 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
6296 # use included Linux headers
6297 if test "$linux" = "yes" ; then
6298 mkdir -p linux-headers
6299 case "$cpu" in
6300 i386|x86_64|x32)
6301 linux_arch=x86
6303 ppc|ppc64|ppc64le)
6304 linux_arch=powerpc
6306 s390x)
6307 linux_arch=s390
6309 aarch64)
6310 linux_arch=arm64
6312 mips64)
6313 linux_arch=mips
6316 # For most CPUs the kernel architecture name and QEMU CPU name match.
6317 linux_arch="$cpu"
6319 esac
6320 # For non-KVM architectures we will not have asm headers
6321 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6322 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6326 for target in $target_list; do
6327 target_dir="$target"
6328 target_name=$(echo $target | cut -d '-' -f 1)
6329 mkdir -p $target_dir
6330 case $target in
6331 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
6332 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
6333 esac
6334 done
6336 echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
6337 if test "$default_targets" = "yes"; then
6338 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
6341 if test "$numa" = "yes"; then
6342 echo "CONFIG_NUMA=y" >> $config_host_mak
6343 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
6346 if test "$ccache_cpp2" = "yes"; then
6347 echo "export CCACHE_CPP2=y" >> $config_host_mak
6350 if test "$safe_stack" = "yes"; then
6351 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
6354 # If we're using a separate build tree, set it up now.
6355 # DIRS are directories which we simply mkdir in the build tree;
6356 # LINKS are things to symlink back into the source tree
6357 # (these can be both files and directories).
6358 # Caution: do not add files or directories here using wildcards. This
6359 # will result in problems later if a new file matching the wildcard is
6360 # added to the source tree -- nothing will cause configure to be rerun
6361 # so the build tree will be missing the link back to the new file, and
6362 # tests might fail. Prefer to keep the relevant files in their own
6363 # directory and symlink the directory instead.
6364 # UNLINK is used to remove symlinks from older development versions
6365 # that might get into the way when doing "git update" without doing
6366 # a "make distclean" in between.
6367 DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
6368 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
6369 DIRS="$DIRS docs docs/interop fsdev scsi"
6370 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
6371 DIRS="$DIRS roms/seabios"
6372 DIRS="$DIRS contrib/plugins/"
6373 LINKS="Makefile"
6374 LINKS="$LINKS tests/tcg/lm32/Makefile"
6375 LINKS="$LINKS tests/tcg/Makefile.target"
6376 LINKS="$LINKS pc-bios/optionrom/Makefile"
6377 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
6378 LINKS="$LINKS roms/seabios/Makefile"
6379 LINKS="$LINKS pc-bios/qemu-icon.bmp"
6380 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
6381 LINKS="$LINKS tests/acceptance tests/data"
6382 LINKS="$LINKS tests/qemu-iotests/check"
6383 LINKS="$LINKS python"
6384 LINKS="$LINKS contrib/plugins/Makefile "
6385 UNLINK="pc-bios/keymaps"
6386 for bios_file in \
6387 $source_path/pc-bios/*.bin \
6388 $source_path/pc-bios/*.elf \
6389 $source_path/pc-bios/*.lid \
6390 $source_path/pc-bios/*.rom \
6391 $source_path/pc-bios/*.dtb \
6392 $source_path/pc-bios/*.img \
6393 $source_path/pc-bios/openbios-* \
6394 $source_path/pc-bios/u-boot.* \
6395 $source_path/pc-bios/edk2-*.fd.bz2 \
6396 $source_path/pc-bios/palcode-*
6398 LINKS="$LINKS pc-bios/$(basename $bios_file)"
6399 done
6400 mkdir -p $DIRS
6401 for f in $LINKS ; do
6402 if [ -e "$source_path/$f" ]; then
6403 symlink "$source_path/$f" "$f"
6405 done
6406 for f in $UNLINK ; do
6407 if [ -L "$f" ]; then
6408 rm -f "$f"
6410 done
6412 (for i in $cross_cc_vars; do
6413 export $i
6414 done
6415 export target_list source_path use_containers
6416 $source_path/tests/tcg/configure.sh)
6418 # temporary config to build submodules
6419 for rom in seabios; do
6420 config_mak=roms/$rom/config.mak
6421 echo "# Automatically generated by configure - do not modify" > $config_mak
6422 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6423 echo "AS=$as" >> $config_mak
6424 echo "CCAS=$ccas" >> $config_mak
6425 echo "CC=$cc" >> $config_mak
6426 echo "BCC=bcc" >> $config_mak
6427 echo "CPP=$cpp" >> $config_mak
6428 echo "OBJCOPY=objcopy" >> $config_mak
6429 echo "IASL=$iasl" >> $config_mak
6430 echo "LD=$ld" >> $config_mak
6431 echo "RANLIB=$ranlib" >> $config_mak
6432 done
6434 if test "$skip_meson" = no; then
6435 cross="config-meson.cross.new"
6436 meson_quote() {
6437 echo "'$(echo $* | sed "s/ /','/g")'"
6440 echo "# Automatically generated by configure - do not modify" > $cross
6441 echo "[properties]" >> $cross
6442 test -z "$cxx" && echo "link_language = 'c'" >> $cross
6443 echo "[built-in options]" >> $cross
6444 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
6445 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
6446 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6447 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6448 echo "[binaries]" >> $cross
6449 echo "c = [$(meson_quote $cc)]" >> $cross
6450 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
6451 echo "ar = [$(meson_quote $ar)]" >> $cross
6452 echo "nm = [$(meson_quote $nm)]" >> $cross
6453 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
6454 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
6455 if has $sdl2_config; then
6456 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
6458 echo "strip = [$(meson_quote $strip)]" >> $cross
6459 echo "windres = [$(meson_quote $windres)]" >> $cross
6460 if test -n "$cross_prefix"; then
6461 cross_arg="--cross-file config-meson.cross"
6462 echo "[host_machine]" >> $cross
6463 if test "$mingw32" = "yes" ; then
6464 echo "system = 'windows'" >> $cross
6466 if test "$linux" = "yes" ; then
6467 echo "system = 'linux'" >> $cross
6469 case "$ARCH" in
6470 i386|x86_64)
6471 echo "cpu_family = 'x86'" >> $cross
6473 ppc64le)
6474 echo "cpu_family = 'ppc64'" >> $cross
6477 echo "cpu_family = '$ARCH'" >> $cross
6479 esac
6480 echo "cpu = '$cpu'" >> $cross
6481 if test "$bigendian" = "yes" ; then
6482 echo "endian = 'big'" >> $cross
6483 else
6484 echo "endian = 'little'" >> $cross
6486 else
6487 cross_arg="--native-file config-meson.cross"
6489 mv $cross config-meson.cross
6491 rm -rf meson-private meson-info meson-logs
6492 unset staticpic
6493 if ! version_ge "$($meson --version)" 0.56.0; then
6494 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
6496 NINJA=$ninja $meson setup \
6497 --prefix "$prefix" \
6498 --libdir "$libdir" \
6499 --libexecdir "$libexecdir" \
6500 --bindir "$bindir" \
6501 --includedir "$includedir" \
6502 --datadir "$datadir" \
6503 --mandir "$mandir" \
6504 --sysconfdir "$sysconfdir" \
6505 --localedir "$localedir" \
6506 --localstatedir "$local_statedir" \
6507 -Ddocdir="$docdir" \
6508 -Dqemu_firmwarepath="$firmwarepath" \
6509 -Dqemu_suffix="$qemu_suffix" \
6510 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
6511 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
6512 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
6513 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
6514 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
6515 ${staticpic:+-Db_staticpic=$staticpic} \
6516 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
6517 -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug \
6518 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
6519 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
6520 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
6521 -Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
6522 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
6523 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
6524 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
6525 -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \
6526 -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
6527 -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse \
6528 -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \
6529 -Dattr=$attr -Ddefault_devices=$default_devices \
6530 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
6531 -Dvhost_user_blk_server=$vhost_user_blk_server \
6532 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek \
6533 $(if test "$default_features" = no; then echo "-Dauto_features=disabled"; fi) \
6534 $cross_arg \
6535 "$PWD" "$source_path"
6537 if test "$?" -ne 0 ; then
6538 error_exit "meson setup failed"
6542 if test -n "${deprecated_features}"; then
6543 echo "Warning, deprecated features enabled."
6544 echo "Please see docs/system/deprecated.rst"
6545 echo " features: ${deprecated_features}"
6548 # Save the configure command line for later reuse.
6549 cat <<EOD >config.status
6550 #!/bin/sh
6551 # Generated by configure.
6552 # Run this file to recreate the current configuration.
6553 # Compiler output produced by configure, useful for debugging
6554 # configure, is in config.log if it exists.
6557 preserve_env() {
6558 envname=$1
6560 eval envval=\$$envname
6562 if test -n "$envval"
6563 then
6564 echo "$envname='$envval'" >> config.status
6565 echo "export $envname" >> config.status
6566 else
6567 echo "unset $envname" >> config.status
6571 # Preserve various env variables that influence what
6572 # features/build target configure will detect
6573 preserve_env AR
6574 preserve_env AS
6575 preserve_env CC
6576 preserve_env CPP
6577 preserve_env CXX
6578 preserve_env INSTALL
6579 preserve_env LD
6580 preserve_env LD_LIBRARY_PATH
6581 preserve_env LIBTOOL
6582 preserve_env MAKE
6583 preserve_env NM
6584 preserve_env OBJCOPY
6585 preserve_env PATH
6586 preserve_env PKG_CONFIG
6587 preserve_env PKG_CONFIG_LIBDIR
6588 preserve_env PKG_CONFIG_PATH
6589 preserve_env PYTHON
6590 preserve_env SDL2_CONFIG
6591 preserve_env SMBD
6592 preserve_env STRIP
6593 preserve_env WINDRES
6595 printf "exec" >>config.status
6596 for i in "$0" "$@"; do
6597 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
6598 done
6599 echo ' "$@"' >>config.status
6600 chmod +x config.status
6602 rm -r "$TMPDIR1"