Add NVMM Accelerator: add maintainers for NetBSD/NVMM
[qemu/kevin.git] / configure
blob268460d63d2c949c8ce136d0eef6ee7f4e4d2bec
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 quote_sh() {
93 printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
96 print_error() {
97 (echo
98 echo "ERROR: $1"
99 while test -n "$2"; do
100 echo " $2"
101 shift
102 done
103 echo) >&2
106 error_exit() {
107 print_error "$@"
108 exit 1
111 do_compiler() {
112 # Run the compiler, capturing its output to the log. First argument
113 # is compiler binary to execute.
114 compiler="$1"
115 shift
116 if test -n "$BASH_VERSION"; then eval '
117 echo >>config.log "
118 funcs: ${FUNCNAME[*]}
119 lines: ${BASH_LINENO[*]}"
120 '; fi
121 echo $compiler "$@" >> config.log
122 $compiler "$@" >> config.log 2>&1 || return $?
123 # Test passed. If this is an --enable-werror build, rerun
124 # the test with -Werror and bail out if it fails. This
125 # makes warning-generating-errors in configure test code
126 # obvious to developers.
127 if test "$werror" != "yes"; then
128 return 0
130 # Don't bother rerunning the compile if we were already using -Werror
131 case "$*" in
132 *-Werror*)
133 return 0
135 esac
136 echo $compiler -Werror "$@" >> config.log
137 $compiler -Werror "$@" >> config.log 2>&1 && return $?
138 error_exit "configure test passed without -Werror but failed with -Werror." \
139 "This is probably a bug in the configure script. The failing command" \
140 "will be at the bottom of config.log." \
141 "You can run configure with --disable-werror to bypass this check."
144 do_cc() {
145 do_compiler "$cc" "$@"
148 do_cxx() {
149 do_compiler "$cxx" "$@"
152 # Append $2 to the variable named $1, with space separation
153 add_to() {
154 eval $1=\${$1:+\"\$$1 \"}\$2
157 update_cxxflags() {
158 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
159 # options which some versions of GCC's C++ compiler complain about
160 # because they only make sense for C programs.
161 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
162 CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
163 for arg in $QEMU_CFLAGS; do
164 case $arg in
165 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
166 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
169 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
171 esac
172 done
175 compile_object() {
176 local_cflags="$1"
177 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
180 compile_prog() {
181 local_cflags="$1"
182 local_ldflags="$2"
183 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
184 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
187 # symbolically link $1 to $2. Portable version of "ln -sf".
188 symlink() {
189 rm -rf "$2"
190 mkdir -p "$(dirname "$2")"
191 ln -s "$1" "$2"
194 # check whether a command is available to this shell (may be either an
195 # executable or a builtin)
196 has() {
197 type "$1" >/dev/null 2>&1
200 version_ge () {
201 local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
202 local_ver2=$(echo "$2" | tr . ' ')
203 while true; do
204 set x $local_ver1
205 local_first=${2-0}
206 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
207 shift ${2:+2}
208 local_ver1=$*
209 set x $local_ver2
210 # the second argument finished, the first must be greater or equal
211 test $# = 1 && return 0
212 test $local_first -lt $2 && return 1
213 test $local_first -gt $2 && return 0
214 shift ${2:+2}
215 local_ver2=$*
216 done
219 have_backend () {
220 echo "$trace_backends" | grep "$1" >/dev/null
223 glob() {
224 eval test -z '"${1#'"$2"'}"'
227 ld_has() {
228 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
231 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
232 then
233 error_exit "main directory cannot contain spaces nor colons"
236 # default parameters
237 cpu=""
238 iasl="iasl"
239 interp_prefix="/usr/gnemul/qemu-%M"
240 static="no"
241 cross_compile="no"
242 cross_prefix=""
243 audio_drv_list=""
244 block_drv_rw_whitelist=""
245 block_drv_ro_whitelist=""
246 host_cc="cc"
247 audio_win_int=""
248 libs_qga=""
249 debug_info="yes"
250 lto="false"
251 stack_protector=""
252 safe_stack=""
253 use_containers="yes"
254 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
256 if test -e "$source_path/.git"
257 then
258 git_submodules_action="update"
259 git_submodules="ui/keycodemapdb"
260 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
261 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
262 else
263 git_submodules_action="ignore"
264 git_submodules=""
266 if ! test -f "$source_path/ui/keycodemapdb/README"
267 then
268 echo
269 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
270 echo
271 echo "This is not a GIT checkout but module content appears to"
272 echo "be missing. Do not use 'git archive' or GitHub download links"
273 echo "to acquire QEMU source archives. Non-GIT builds are only"
274 echo "supported with source archives linked from:"
275 echo
276 echo " https://www.qemu.org/download/#source"
277 echo
278 echo "Developers working with GIT can use scripts/archive-source.sh"
279 echo "if they need to create valid source archives."
280 echo
281 exit 1
284 git="git"
286 # Don't accept a target_list environment variable.
287 unset target_list
288 unset target_list_exclude
290 # Default value for a variable defining feature "foo".
291 # * foo="no" feature will only be used if --enable-foo arg is given
292 # * foo="" feature will be searched for, and if found, will be used
293 # unless --disable-foo is given
294 # * foo="yes" this value will only be set by --enable-foo flag.
295 # feature will searched for,
296 # if not found, configure exits with error
298 # Always add --enable-foo and --disable-foo command line args.
299 # Distributions want to ensure that several features are compiled in, and it
300 # is impossible without a --enable-foo that exits if a feature is not found.
302 default_feature=""
303 # parse CC options second
304 for opt do
305 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
306 case "$opt" in
307 --without-default-features)
308 default_feature="no"
310 esac
311 done
313 brlapi="auto"
314 curl="auto"
315 iconv="auto"
316 curses="auto"
317 docs="auto"
318 fdt="auto"
319 netmap="no"
320 sdl="auto"
321 sdl_image="auto"
322 coreaudio="auto"
323 virtiofsd="auto"
324 virtfs="auto"
325 libudev="auto"
326 mpath="auto"
327 vnc="enabled"
328 sparse="auto"
329 vde="$default_feature"
330 vnc_sasl="auto"
331 vnc_jpeg="auto"
332 vnc_png="auto"
333 xkbcommon="auto"
334 xen="$default_feature"
335 xen_ctrl_version="$default_feature"
336 xen_pci_passthrough="auto"
337 linux_aio="$default_feature"
338 linux_io_uring="$default_feature"
339 cap_ng="auto"
340 attr="auto"
341 xfs="$default_feature"
342 tcg="enabled"
343 membarrier="$default_feature"
344 vhost_net="$default_feature"
345 vhost_crypto="$default_feature"
346 vhost_scsi="$default_feature"
347 vhost_vsock="$default_feature"
348 vhost_user="no"
349 vhost_user_blk_server="auto"
350 vhost_user_fs="$default_feature"
351 kvm="auto"
352 hax="auto"
353 hvf="auto"
354 whpx="auto"
355 nvmm="auto"
356 rdma="$default_feature"
357 pvrdma="$default_feature"
358 gprof="no"
359 debug_tcg="no"
360 debug="no"
361 sanitizers="no"
362 tsan="no"
363 fortify_source="$default_feature"
364 strip_opt="yes"
365 tcg_interpreter="false"
366 bigendian="no"
367 mingw32="no"
368 gcov="no"
369 EXESUF=""
370 HOST_DSOSUF=".so"
371 modules="no"
372 module_upgrades="no"
373 prefix="/usr/local"
374 qemu_suffix="qemu"
375 slirp="auto"
376 oss_lib=""
377 bsd="no"
378 linux="no"
379 solaris="no"
380 profiler="no"
381 cocoa="auto"
382 softmmu="yes"
383 linux_user="no"
384 bsd_user="no"
385 blobs="true"
386 pkgversion=""
387 pie=""
388 qom_cast_debug="yes"
389 trace_backends="log"
390 trace_file="trace"
391 spice="$default_feature"
392 rbd="auto"
393 smartcard="$default_feature"
394 u2f="auto"
395 libusb="$default_feature"
396 usb_redir="$default_feature"
397 opengl="$default_feature"
398 cpuid_h="no"
399 avx2_opt="$default_feature"
400 capstone="auto"
401 lzo="auto"
402 snappy="auto"
403 bzip2="auto"
404 lzfse="auto"
405 zstd="auto"
406 guest_agent="$default_feature"
407 guest_agent_with_vss="no"
408 guest_agent_ntddscsi="no"
409 guest_agent_msi="auto"
410 vss_win32_sdk="$default_feature"
411 win_sdk="no"
412 want_tools="$default_feature"
413 libiscsi="auto"
414 libnfs="auto"
415 coroutine=""
416 coroutine_pool="$default_feature"
417 debug_stack_usage="no"
418 crypto_afalg="no"
419 cfi="false"
420 cfi_debug="false"
421 seccomp="auto"
422 glusterfs="auto"
423 gtk="auto"
424 tls_priority="NORMAL"
425 gnutls="$default_feature"
426 nettle="$default_feature"
427 nettle_xts="no"
428 gcrypt="$default_feature"
429 gcrypt_hmac="no"
430 gcrypt_xts="no"
431 qemu_private_xts="yes"
432 auth_pam="$default_feature"
433 vte="$default_feature"
434 virglrenderer="$default_feature"
435 tpm="$default_feature"
436 libssh="$default_feature"
437 live_block_migration=${default_feature:-yes}
438 numa="$default_feature"
439 tcmalloc="no"
440 jemalloc="no"
441 replication=${default_feature:-yes}
442 bochs=${default_feature:-yes}
443 cloop=${default_feature:-yes}
444 dmg=${default_feature:-yes}
445 qcow1=${default_feature:-yes}
446 vdi=${default_feature:-yes}
447 vvfat=${default_feature:-yes}
448 qed=${default_feature:-yes}
449 parallels=${default_feature:-yes}
450 sheepdog="no"
451 libxml2="$default_feature"
452 debug_mutex="no"
453 libpmem="$default_feature"
454 default_devices="true"
455 plugins="no"
456 fuzzing="no"
457 rng_none="no"
458 secret_keyring="$default_feature"
459 libdaxctl="$default_feature"
460 meson=""
461 ninja=""
462 skip_meson=no
463 gettext="auto"
464 fuse="auto"
465 fuse_lseek="auto"
466 multiprocess="auto"
468 malloc_trim="auto"
469 gio="$default_feature"
471 # parse CC options second
472 for opt do
473 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
474 case "$opt" in
475 --cross-prefix=*) cross_prefix="$optarg"
476 cross_compile="yes"
478 --cc=*) CC="$optarg"
480 --cxx=*) CXX="$optarg"
482 --cpu=*) cpu="$optarg"
484 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
485 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
487 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
489 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
490 EXTRA_LDFLAGS="$optarg"
492 --enable-debug-info) debug_info="yes"
494 --disable-debug-info) debug_info="no"
496 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
498 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
499 eval "cross_cc_cflags_${cc_arch}=\$optarg"
500 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
502 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
503 cc_archs="$cc_archs $cc_arch"
504 eval "cross_cc_${cc_arch}=\$optarg"
505 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
507 esac
508 done
509 # OS specific
510 # Using uname is really, really broken. Once we have the right set of checks
511 # we can eliminate its usage altogether.
513 # Preferred compiler:
514 # ${CC} (if set)
515 # ${cross_prefix}gcc (if cross-prefix specified)
516 # system compiler
517 if test -z "${CC}${cross_prefix}"; then
518 cc="$host_cc"
519 else
520 cc="${CC-${cross_prefix}gcc}"
523 if test -z "${CXX}${cross_prefix}"; then
524 cxx="c++"
525 else
526 cxx="${CXX-${cross_prefix}g++}"
529 ar="${AR-${cross_prefix}ar}"
530 as="${AS-${cross_prefix}as}"
531 ccas="${CCAS-$cc}"
532 cpp="${CPP-$cc -E}"
533 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
534 ld="${LD-${cross_prefix}ld}"
535 ranlib="${RANLIB-${cross_prefix}ranlib}"
536 nm="${NM-${cross_prefix}nm}"
537 strip="${STRIP-${cross_prefix}strip}"
538 windres="${WINDRES-${cross_prefix}windres}"
539 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
540 query_pkg_config() {
541 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
543 pkg_config=query_pkg_config
544 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
546 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
547 ARFLAGS="${ARFLAGS-rv}"
549 # default flags for all hosts
550 # We use -fwrapv to tell the compiler that we require a C dialect where
551 # left shift of signed integers is well defined and has the expected
552 # 2s-complement style results. (Both clang and gcc agree that it
553 # provides these semantics.)
554 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
555 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
556 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
557 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
559 # Flags that are needed during configure but later taken care of by Meson
560 CONFIGURE_CFLAGS="-std=gnu99 -Wall"
561 CONFIGURE_LDFLAGS=
564 check_define() {
565 cat > $TMPC <<EOF
566 #if !defined($1)
567 #error $1 not defined
568 #endif
569 int main(void) { return 0; }
571 compile_object
574 check_include() {
575 cat > $TMPC <<EOF
576 #include <$1>
577 int main(void) { return 0; }
579 compile_object
582 write_c_skeleton() {
583 cat > $TMPC <<EOF
584 int main(void) { return 0; }
588 write_c_fuzzer_skeleton() {
589 cat > $TMPC <<EOF
590 #include <stdint.h>
591 #include <sys/types.h>
592 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
593 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
597 if check_define __linux__ ; then
598 targetos="Linux"
599 elif check_define _WIN32 ; then
600 targetos='MINGW32'
601 elif check_define __OpenBSD__ ; then
602 targetos='OpenBSD'
603 elif check_define __sun__ ; then
604 targetos='SunOS'
605 elif check_define __HAIKU__ ; then
606 targetos='Haiku'
607 elif check_define __FreeBSD__ ; then
608 targetos='FreeBSD'
609 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
610 targetos='GNU/kFreeBSD'
611 elif check_define __DragonFly__ ; then
612 targetos='DragonFly'
613 elif check_define __NetBSD__; then
614 targetos='NetBSD'
615 elif check_define __APPLE__; then
616 targetos='Darwin'
617 else
618 # This is a fatal error, but don't report it yet, because we
619 # might be going to just print the --help text, or it might
620 # be the result of a missing compiler.
621 targetos='bogus'
624 # Some host OSes need non-standard checks for which CPU to use.
625 # Note that these checks are broken for cross-compilation: if you're
626 # cross-compiling to one of these OSes then you'll need to specify
627 # the correct CPU with the --cpu option.
628 case $targetos in
629 Darwin)
630 HOST_DSOSUF=".dylib"
632 SunOS)
633 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
634 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
635 cpu="x86_64"
637 esac
639 if test ! -z "$cpu" ; then
640 # command line argument
642 elif check_define __i386__ ; then
643 cpu="i386"
644 elif check_define __x86_64__ ; then
645 if check_define __ILP32__ ; then
646 cpu="x32"
647 else
648 cpu="x86_64"
650 elif check_define __sparc__ ; then
651 if check_define __arch64__ ; then
652 cpu="sparc64"
653 else
654 cpu="sparc"
656 elif check_define _ARCH_PPC ; then
657 if check_define _ARCH_PPC64 ; then
658 if check_define _LITTLE_ENDIAN ; then
659 cpu="ppc64le"
660 else
661 cpu="ppc64"
663 else
664 cpu="ppc"
666 elif check_define __mips__ ; then
667 cpu="mips"
668 elif check_define __s390__ ; then
669 if check_define __s390x__ ; then
670 cpu="s390x"
671 else
672 cpu="s390"
674 elif check_define __riscv ; then
675 if check_define _LP64 ; then
676 cpu="riscv64"
677 else
678 cpu="riscv32"
680 elif check_define __arm__ ; then
681 cpu="arm"
682 elif check_define __aarch64__ ; then
683 cpu="aarch64"
684 else
685 cpu=$(uname -m)
688 ARCH=
689 # Normalise host CPU name and set ARCH.
690 # Note that this case should only have supported host CPUs, not guests.
691 case "$cpu" in
692 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
694 ppc64le)
695 ARCH="ppc64"
697 i386|i486|i586|i686|i86pc|BePC)
698 cpu="i386"
700 x86_64|amd64)
701 cpu="x86_64"
703 armv*b|armv*l|arm)
704 cpu="arm"
706 aarch64)
707 cpu="aarch64"
709 mips*)
710 cpu="mips"
712 sparc|sun4[cdmuv])
713 cpu="sparc"
716 # This will result in either an error or falling back to TCI later
717 ARCH=unknown
719 esac
720 if test -z "$ARCH"; then
721 ARCH="$cpu"
724 # OS specific
726 case $targetos in
727 MINGW32*)
728 mingw32="yes"
729 audio_possible_drivers="dsound sdl"
730 if check_include dsound.h; then
731 audio_drv_list="dsound"
732 else
733 audio_drv_list=""
735 supported_os="yes"
736 pie="no"
738 GNU/kFreeBSD)
739 bsd="yes"
740 audio_drv_list="oss try-sdl"
741 audio_possible_drivers="oss sdl pa"
743 FreeBSD)
744 bsd="yes"
745 make="${MAKE-gmake}"
746 audio_drv_list="oss try-sdl"
747 audio_possible_drivers="oss sdl pa"
748 # needed for kinfo_getvmmap(3) in libutil.h
749 netmap="" # enable netmap autodetect
751 DragonFly)
752 bsd="yes"
753 make="${MAKE-gmake}"
754 audio_drv_list="oss try-sdl"
755 audio_possible_drivers="oss sdl pa"
757 NetBSD)
758 bsd="yes"
759 make="${MAKE-gmake}"
760 audio_drv_list="oss try-sdl"
761 audio_possible_drivers="oss sdl"
762 oss_lib="-lossaudio"
764 OpenBSD)
765 bsd="yes"
766 make="${MAKE-gmake}"
767 audio_drv_list="try-sdl"
768 audio_possible_drivers="sdl"
770 Darwin)
771 bsd="yes"
772 darwin="yes"
773 audio_drv_list="try-coreaudio try-sdl"
774 audio_possible_drivers="coreaudio sdl"
775 # Disable attempts to use ObjectiveC features in os/object.h since they
776 # won't work when we're compiling with gcc as a C compiler.
777 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
779 SunOS)
780 solaris="yes"
781 make="${MAKE-gmake}"
782 smbd="${SMBD-/usr/sfw/sbin/smbd}"
783 if test -f /usr/include/sys/soundcard.h ; then
784 audio_drv_list="oss try-sdl"
786 audio_possible_drivers="oss sdl"
787 # needed for CMSG_ macros in sys/socket.h
788 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
789 # needed for TIOCWIN* defines in termios.h
790 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
792 Haiku)
793 haiku="yes"
794 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS"
796 Linux)
797 audio_drv_list="try-pa oss"
798 audio_possible_drivers="oss alsa sdl pa"
799 linux="yes"
800 linux_user="yes"
801 vhost_user=${default_feature:-yes}
803 esac
805 if [ "$bsd" = "yes" ] ; then
806 if [ "$darwin" != "yes" ] ; then
807 bsd_user="yes"
811 : ${make=${MAKE-make}}
813 # We prefer python 3.x. A bare 'python' is traditionally
814 # python 2.x, but some distros have it as python 3.x, so
815 # we check that too
816 python=
817 explicit_python=no
818 for binary in "${PYTHON-python3}" python
820 if has "$binary"
821 then
822 python=$(command -v "$binary")
823 break
825 done
828 # Check for ancillary tools used in testing
829 genisoimage=
830 for binary in genisoimage mkisofs
832 if has $binary
833 then
834 genisoimage=$(command -v "$binary")
835 break
837 done
839 : ${smbd=${SMBD-/usr/sbin/smbd}}
841 # Default objcc to clang if available, otherwise use CC
842 if has clang; then
843 objcc=clang
844 else
845 objcc="$cc"
848 if test "$mingw32" = "yes" ; then
849 EXESUF=".exe"
850 HOST_DSOSUF=".dll"
851 # MinGW needs -mthreads for TLS and macro _MT.
852 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
853 write_c_skeleton;
854 prefix="/qemu"
855 qemu_suffix=""
856 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
859 werror=""
861 for opt do
862 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
863 case "$opt" in
864 --help|-h) show_help=yes
866 --version|-V) exec cat $source_path/VERSION
868 --prefix=*) prefix="$optarg"
870 --interp-prefix=*) interp_prefix="$optarg"
872 --cross-prefix=*)
874 --cc=*)
876 --host-cc=*) host_cc="$optarg"
878 --cxx=*)
880 --iasl=*) iasl="$optarg"
882 --objcc=*) objcc="$optarg"
884 --make=*) make="$optarg"
886 --install=*)
888 --python=*) python="$optarg" ; explicit_python=yes
890 --sphinx-build=*) sphinx_build="$optarg"
892 --skip-meson) skip_meson=yes
894 --meson=*) meson="$optarg"
896 --ninja=*) ninja="$optarg"
898 --smbd=*) smbd="$optarg"
900 --extra-cflags=*)
902 --extra-cxxflags=*)
904 --extra-ldflags=*)
906 --enable-debug-info)
908 --disable-debug-info)
910 --cross-cc-*)
912 --enable-modules)
913 modules="yes"
915 --disable-modules)
916 modules="no"
918 --disable-module-upgrades) module_upgrades="no"
920 --enable-module-upgrades) module_upgrades="yes"
922 --cpu=*)
924 --target-list=*) target_list="$optarg"
925 if test "$target_list_exclude"; then
926 error_exit "Can't mix --target-list with --target-list-exclude"
929 --target-list-exclude=*) target_list_exclude="$optarg"
930 if test "$target_list"; then
931 error_exit "Can't mix --target-list-exclude with --target-list"
934 --enable-trace-backends=*) trace_backends="$optarg"
936 # XXX: backwards compatibility
937 --enable-trace-backend=*) trace_backends="$optarg"
939 --with-trace-file=*) trace_file="$optarg"
941 --with-default-devices) default_devices="true"
943 --without-default-devices) default_devices="false"
945 --without-default-features) # processed above
947 --enable-gprof) gprof="yes"
949 --enable-gcov) gcov="yes"
951 --static)
952 static="yes"
953 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
955 --mandir=*) mandir="$optarg"
957 --bindir=*) bindir="$optarg"
959 --libdir=*) libdir="$optarg"
961 --libexecdir=*) libexecdir="$optarg"
963 --includedir=*) includedir="$optarg"
965 --datadir=*) datadir="$optarg"
967 --with-suffix=*) qemu_suffix="$optarg"
969 --docdir=*) docdir="$optarg"
971 --localedir=*) localedir="$optarg"
973 --sysconfdir=*) sysconfdir="$optarg"
975 --localstatedir=*) local_statedir="$optarg"
977 --firmwarepath=*) firmwarepath="$optarg"
979 --host=*|--build=*|\
980 --disable-dependency-tracking|\
981 --sbindir=*|--sharedstatedir=*|\
982 --oldincludedir=*|--datarootdir=*|--infodir=*|\
983 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
984 # These switches are silently ignored, for compatibility with
985 # autoconf-generated configure scripts. This allows QEMU's
986 # configure to be used by RPM and similar macros that set
987 # lots of directory switches by default.
989 --disable-sdl) sdl="disabled"
991 --enable-sdl) sdl="enabled"
993 --disable-sdl-image) sdl_image="disabled"
995 --enable-sdl-image) sdl_image="enabled"
997 --disable-qom-cast-debug) qom_cast_debug="no"
999 --enable-qom-cast-debug) qom_cast_debug="yes"
1001 --disable-virtfs) virtfs="disabled"
1003 --enable-virtfs) virtfs="enabled"
1005 --disable-libudev) libudev="disabled"
1007 --enable-libudev) libudev="enabled"
1009 --disable-virtiofsd) virtiofsd="disabled"
1011 --enable-virtiofsd) virtiofsd="enabled"
1013 --disable-mpath) mpath="disabled"
1015 --enable-mpath) mpath="enabled"
1017 --disable-vnc) vnc="disabled"
1019 --enable-vnc) vnc="enabled"
1021 --disable-gettext) gettext="disabled"
1023 --enable-gettext) gettext="enabled"
1025 --oss-lib=*) oss_lib="$optarg"
1027 --audio-drv-list=*) audio_drv_list="$optarg"
1029 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1031 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1033 --enable-debug-tcg) debug_tcg="yes"
1035 --disable-debug-tcg) debug_tcg="no"
1037 --enable-debug)
1038 # Enable debugging options that aren't excessively noisy
1039 debug_tcg="yes"
1040 debug_mutex="yes"
1041 debug="yes"
1042 strip_opt="no"
1043 fortify_source="no"
1045 --enable-sanitizers) sanitizers="yes"
1047 --disable-sanitizers) sanitizers="no"
1049 --enable-tsan) tsan="yes"
1051 --disable-tsan) tsan="no"
1053 --enable-sparse) sparse="enabled"
1055 --disable-sparse) sparse="disabled"
1057 --disable-strip) strip_opt="no"
1059 --disable-vnc-sasl) vnc_sasl="disabled"
1061 --enable-vnc-sasl) vnc_sasl="enabled"
1063 --disable-vnc-jpeg) vnc_jpeg="disabled"
1065 --enable-vnc-jpeg) vnc_jpeg="enabled"
1067 --disable-vnc-png) vnc_png="disabled"
1069 --enable-vnc-png) vnc_png="enabled"
1071 --disable-slirp) slirp="disabled"
1073 --enable-slirp) slirp="enabled"
1075 --enable-slirp=git) slirp="internal"
1077 --enable-slirp=system) slirp="system"
1079 --disable-vde) vde="no"
1081 --enable-vde) vde="yes"
1083 --disable-netmap) netmap="no"
1085 --enable-netmap) netmap="yes"
1087 --disable-xen) xen="disabled"
1089 --enable-xen) xen="enabled"
1091 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
1093 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
1095 --disable-brlapi) brlapi="disabled"
1097 --enable-brlapi) brlapi="enabled"
1099 --disable-kvm) kvm="disabled"
1101 --enable-kvm) kvm="enabled"
1103 --disable-hax) hax="disabled"
1105 --enable-hax) hax="enabled"
1107 --disable-hvf) hvf="disabled"
1109 --enable-hvf) hvf="enabled"
1111 --disable-nvmm) nvmm="disabled"
1113 --enable-nvmm) nvmm="enabled"
1115 --disable-whpx) whpx="disabled"
1117 --enable-whpx) whpx="enabled"
1119 --disable-tcg-interpreter) tcg_interpreter="false"
1121 --enable-tcg-interpreter) tcg_interpreter="true"
1123 --disable-cap-ng) cap_ng="disabled"
1125 --enable-cap-ng) cap_ng="enabled"
1127 --disable-tcg) tcg="disabled"
1129 --enable-tcg) tcg="enabled"
1131 --disable-malloc-trim) malloc_trim="disabled"
1133 --enable-malloc-trim) malloc_trim="enabled"
1135 --disable-spice) spice="no"
1137 --enable-spice) spice="yes"
1139 --disable-libiscsi) libiscsi="disabled"
1141 --enable-libiscsi) libiscsi="enabled"
1143 --disable-libnfs) libnfs="disabled"
1145 --enable-libnfs) libnfs="enabled"
1147 --enable-profiler) profiler="yes"
1149 --disable-cocoa) cocoa="disabled"
1151 --enable-cocoa) cocoa="enabled"
1153 --disable-system) softmmu="no"
1155 --enable-system) softmmu="yes"
1157 --disable-user)
1158 linux_user="no" ;
1159 bsd_user="no" ;
1161 --enable-user) ;;
1162 --disable-linux-user) linux_user="no"
1164 --enable-linux-user) linux_user="yes"
1166 --disable-bsd-user) bsd_user="no"
1168 --enable-bsd-user) bsd_user="yes"
1170 --enable-pie) pie="yes"
1172 --disable-pie) pie="no"
1174 --enable-werror) werror="yes"
1176 --disable-werror) werror="no"
1178 --enable-lto) lto="true"
1180 --disable-lto) lto="false"
1182 --enable-stack-protector) stack_protector="yes"
1184 --disable-stack-protector) stack_protector="no"
1186 --enable-safe-stack) safe_stack="yes"
1188 --disable-safe-stack) safe_stack="no"
1190 --enable-cfi)
1191 cfi="true";
1192 lto="true";
1194 --disable-cfi) cfi="false"
1196 --enable-cfi-debug) cfi_debug="true"
1198 --disable-cfi-debug) cfi_debug="false"
1200 --disable-curses) curses="disabled"
1202 --enable-curses) curses="enabled"
1204 --disable-iconv) iconv="disabled"
1206 --enable-iconv) iconv="enabled"
1208 --disable-curl) curl="disabled"
1210 --enable-curl) curl="enabled"
1212 --disable-fdt) fdt="disabled"
1214 --enable-fdt) fdt="enabled"
1216 --enable-fdt=git) fdt="internal"
1218 --enable-fdt=system) fdt="system"
1220 --disable-linux-aio) linux_aio="no"
1222 --enable-linux-aio) linux_aio="yes"
1224 --disable-linux-io-uring) linux_io_uring="no"
1226 --enable-linux-io-uring) linux_io_uring="yes"
1228 --disable-attr) attr="disabled"
1230 --enable-attr) attr="enabled"
1232 --disable-membarrier) membarrier="no"
1234 --enable-membarrier) membarrier="yes"
1236 --disable-blobs) blobs="false"
1238 --with-pkgversion=*) pkgversion="$optarg"
1240 --with-coroutine=*) coroutine="$optarg"
1242 --disable-coroutine-pool) coroutine_pool="no"
1244 --enable-coroutine-pool) coroutine_pool="yes"
1246 --enable-debug-stack-usage) debug_stack_usage="yes"
1248 --enable-crypto-afalg) crypto_afalg="yes"
1250 --disable-crypto-afalg) crypto_afalg="no"
1252 --disable-docs) docs="disabled"
1254 --enable-docs) docs="enabled"
1256 --disable-vhost-net) vhost_net="no"
1258 --enable-vhost-net) vhost_net="yes"
1260 --disable-vhost-crypto) vhost_crypto="no"
1262 --enable-vhost-crypto) vhost_crypto="yes"
1264 --disable-vhost-scsi) vhost_scsi="no"
1266 --enable-vhost-scsi) vhost_scsi="yes"
1268 --disable-vhost-vsock) vhost_vsock="no"
1270 --enable-vhost-vsock) vhost_vsock="yes"
1272 --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
1274 --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
1276 --disable-vhost-user-fs) vhost_user_fs="no"
1278 --enable-vhost-user-fs) vhost_user_fs="yes"
1280 --disable-opengl) opengl="no"
1282 --enable-opengl) opengl="yes"
1284 --disable-rbd) rbd="disabled"
1286 --enable-rbd) rbd="enabled"
1288 --disable-xfsctl) xfs="no"
1290 --enable-xfsctl) xfs="yes"
1292 --disable-smartcard) smartcard="no"
1294 --enable-smartcard) smartcard="yes"
1296 --disable-u2f) u2f="disabled"
1298 --enable-u2f) u2f="enabled"
1300 --disable-libusb) libusb="no"
1302 --enable-libusb) libusb="yes"
1304 --disable-usb-redir) usb_redir="no"
1306 --enable-usb-redir) usb_redir="yes"
1308 --disable-zlib-test)
1310 --disable-lzo) lzo="disabled"
1312 --enable-lzo) lzo="enabled"
1314 --disable-snappy) snappy="disabled"
1316 --enable-snappy) snappy="enabled"
1318 --disable-bzip2) bzip2="disabled"
1320 --enable-bzip2) bzip2="enabled"
1322 --enable-lzfse) lzfse="enabled"
1324 --disable-lzfse) lzfse="disabled"
1326 --disable-zstd) zstd="disabled"
1328 --enable-zstd) zstd="enabled"
1330 --enable-guest-agent) guest_agent="yes"
1332 --disable-guest-agent) guest_agent="no"
1334 --enable-guest-agent-msi) guest_agent_msi="enabled"
1336 --disable-guest-agent-msi) guest_agent_msi="disabled"
1338 --with-vss-sdk) vss_win32_sdk=""
1340 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1342 --without-vss-sdk) vss_win32_sdk="no"
1344 --with-win-sdk) win_sdk=""
1346 --with-win-sdk=*) win_sdk="$optarg"
1348 --without-win-sdk) win_sdk="no"
1350 --enable-tools) want_tools="yes"
1352 --disable-tools) want_tools="no"
1354 --enable-seccomp) seccomp="enabled"
1356 --disable-seccomp) seccomp="disabled"
1358 --disable-glusterfs) glusterfs="disabled"
1360 --disable-avx2) avx2_opt="no"
1362 --enable-avx2) avx2_opt="yes"
1364 --disable-avx512f) avx512f_opt="no"
1366 --enable-avx512f) avx512f_opt="yes"
1369 --enable-glusterfs) glusterfs="enabled"
1371 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1372 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1374 --enable-vhdx|--disable-vhdx)
1375 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1377 --enable-uuid|--disable-uuid)
1378 echo "$0: $opt is obsolete, UUID support is always built" >&2
1380 --disable-gtk) gtk="disabled"
1382 --enable-gtk) gtk="enabled"
1384 --tls-priority=*) tls_priority="$optarg"
1386 --disable-gnutls) gnutls="no"
1388 --enable-gnutls) gnutls="yes"
1390 --disable-nettle) nettle="no"
1392 --enable-nettle) nettle="yes"
1394 --disable-gcrypt) gcrypt="no"
1396 --enable-gcrypt) gcrypt="yes"
1398 --disable-auth-pam) auth_pam="no"
1400 --enable-auth-pam) auth_pam="yes"
1402 --enable-rdma) rdma="yes"
1404 --disable-rdma) rdma="no"
1406 --enable-pvrdma) pvrdma="yes"
1408 --disable-pvrdma) pvrdma="no"
1410 --disable-vte) vte="no"
1412 --enable-vte) vte="yes"
1414 --disable-virglrenderer) virglrenderer="no"
1416 --enable-virglrenderer) virglrenderer="yes"
1418 --disable-tpm) tpm="no"
1420 --enable-tpm) tpm="yes"
1422 --disable-libssh) libssh="no"
1424 --enable-libssh) libssh="yes"
1426 --disable-live-block-migration) live_block_migration="no"
1428 --enable-live-block-migration) live_block_migration="yes"
1430 --disable-numa) numa="no"
1432 --enable-numa) numa="yes"
1434 --disable-libxml2) libxml2="no"
1436 --enable-libxml2) libxml2="yes"
1438 --disable-tcmalloc) tcmalloc="no"
1440 --enable-tcmalloc) tcmalloc="yes"
1442 --disable-jemalloc) jemalloc="no"
1444 --enable-jemalloc) jemalloc="yes"
1446 --disable-replication) replication="no"
1448 --enable-replication) replication="yes"
1450 --disable-bochs) bochs="no"
1452 --enable-bochs) bochs="yes"
1454 --disable-cloop) cloop="no"
1456 --enable-cloop) cloop="yes"
1458 --disable-dmg) dmg="no"
1460 --enable-dmg) dmg="yes"
1462 --disable-qcow1) qcow1="no"
1464 --enable-qcow1) qcow1="yes"
1466 --disable-vdi) vdi="no"
1468 --enable-vdi) vdi="yes"
1470 --disable-vvfat) vvfat="no"
1472 --enable-vvfat) vvfat="yes"
1474 --disable-qed) qed="no"
1476 --enable-qed) qed="yes"
1478 --disable-parallels) parallels="no"
1480 --enable-parallels) parallels="yes"
1482 --disable-sheepdog) sheepdog="no"
1484 --enable-sheepdog) sheepdog="yes"
1486 --disable-vhost-user) vhost_user="no"
1488 --enable-vhost-user) vhost_user="yes"
1490 --disable-vhost-vdpa) vhost_vdpa="no"
1492 --enable-vhost-vdpa) vhost_vdpa="yes"
1494 --disable-vhost-kernel) vhost_kernel="no"
1496 --enable-vhost-kernel) vhost_kernel="yes"
1498 --disable-capstone) capstone="disabled"
1500 --enable-capstone) capstone="enabled"
1502 --enable-capstone=git) capstone="internal"
1504 --enable-capstone=system) capstone="system"
1506 --with-git=*) git="$optarg"
1508 --enable-git-update)
1509 git_submodules_action="update"
1510 echo "--enable-git-update deprecated, use --with-git-submodules=update"
1512 --disable-git-update)
1513 git_submodules_action="validate"
1514 echo "--disable-git-update deprecated, use --with-git-submodules=validate"
1516 --with-git-submodules=*)
1517 git_submodules_action="$optarg"
1519 --enable-debug-mutex) debug_mutex=yes
1521 --disable-debug-mutex) debug_mutex=no
1523 --enable-libpmem) libpmem=yes
1525 --disable-libpmem) libpmem=no
1527 --enable-xkbcommon) xkbcommon="enabled"
1529 --disable-xkbcommon) xkbcommon="disabled"
1531 --enable-plugins) plugins="yes"
1533 --disable-plugins) plugins="no"
1535 --enable-containers) use_containers="yes"
1537 --disable-containers) use_containers="no"
1539 --enable-fuzzing) fuzzing=yes
1541 --disable-fuzzing) fuzzing=no
1543 --gdb=*) gdb_bin="$optarg"
1545 --enable-rng-none) rng_none=yes
1547 --disable-rng-none) rng_none=no
1549 --enable-keyring) secret_keyring="yes"
1551 --disable-keyring) secret_keyring="no"
1553 --enable-libdaxctl) libdaxctl=yes
1555 --disable-libdaxctl) libdaxctl=no
1557 --enable-fuse) fuse="enabled"
1559 --disable-fuse) fuse="disabled"
1561 --enable-fuse-lseek) fuse_lseek="enabled"
1563 --disable-fuse-lseek) fuse_lseek="disabled"
1565 --enable-multiprocess) multiprocess="enabled"
1567 --disable-multiprocess) multiprocess="disabled"
1569 --enable-gio) gio=yes
1571 --disable-gio) gio=no
1574 echo "ERROR: unknown option $opt"
1575 echo "Try '$0 --help' for more information"
1576 exit 1
1578 esac
1579 done
1581 case $git_submodules_action in
1582 update|validate)
1583 if test ! -e "$source_path/.git"; then
1584 echo "ERROR: cannot $git_submodules_action git submodules without .git"
1585 exit 1
1588 ignore)
1591 echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
1592 exit 1
1594 esac
1596 libdir="${libdir:-$prefix/lib}"
1597 libexecdir="${libexecdir:-$prefix/libexec}"
1598 includedir="${includedir:-$prefix/include}"
1600 if test "$mingw32" = "yes" ; then
1601 bindir="${bindir:-$prefix}"
1602 else
1603 bindir="${bindir:-$prefix/bin}"
1605 mandir="${mandir:-$prefix/share/man}"
1606 datadir="${datadir:-$prefix/share}"
1607 docdir="${docdir:-$prefix/share/doc}"
1608 sysconfdir="${sysconfdir:-$prefix/etc}"
1609 local_statedir="${local_statedir:-$prefix/var}"
1610 firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
1611 localedir="${localedir:-$datadir/locale}"
1613 case "$cpu" in
1614 ppc)
1615 CPU_CFLAGS="-m32"
1616 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1618 ppc64)
1619 CPU_CFLAGS="-m64"
1620 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1622 sparc)
1623 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1624 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1626 sparc64)
1627 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1628 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1630 s390)
1631 CPU_CFLAGS="-m31"
1632 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1634 s390x)
1635 CPU_CFLAGS="-m64"
1636 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1638 i386)
1639 CPU_CFLAGS="-m32"
1640 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1642 x86_64)
1643 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1644 # If we truly care, we should simply detect this case at
1645 # runtime and generate the fallback to serial emulation.
1646 CPU_CFLAGS="-m64 -mcx16"
1647 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1649 x32)
1650 CPU_CFLAGS="-mx32"
1651 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1653 # No special flags required for other host CPUs
1654 esac
1656 eval "cross_cc_${cpu}=\$host_cc"
1657 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1658 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1660 # For user-mode emulation the host arch has to be one we explicitly
1661 # support, even if we're using TCI.
1662 if [ "$ARCH" = "unknown" ]; then
1663 bsd_user="no"
1664 linux_user="no"
1667 default_target_list=""
1668 deprecated_targets_list=ppc64abi32-linux-user,lm32-softmmu,unicore32-softmmu
1669 deprecated_features=""
1670 mak_wilds=""
1672 if [ "$softmmu" = "yes" ]; then
1673 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak"
1675 if [ "$linux_user" = "yes" ]; then
1676 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak"
1678 if [ "$bsd_user" = "yes" ]; then
1679 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak"
1682 # If the user doesn't explicitly specify a deprecated target we will
1683 # skip it.
1684 if test -z "$target_list"; then
1685 if test -z "$target_list_exclude"; then
1686 target_list_exclude="$deprecated_targets_list"
1687 else
1688 target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1692 for config in $mak_wilds; do
1693 target="$(basename "$config" .mak)"
1694 if echo "$target_list_exclude" | grep -vq "$target"; then
1695 default_target_list="${default_target_list} $target"
1697 done
1699 # Enumerate public trace backends for --help output
1700 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1702 if test x"$show_help" = x"yes" ; then
1703 cat << EOF
1705 Usage: configure [options]
1706 Options: [defaults in brackets after descriptions]
1708 Standard options:
1709 --help print this message
1710 --prefix=PREFIX install in PREFIX [$prefix]
1711 --interp-prefix=PREFIX where to find shared libraries, etc.
1712 use %M for cpu name [$interp_prefix]
1713 --target-list=LIST set target list (default: build all non-deprecated)
1714 $(echo Available targets: $default_target_list | \
1715 fold -s -w 53 | sed -e 's/^/ /')
1716 $(echo Deprecated targets: $deprecated_targets_list | \
1717 fold -s -w 53 | sed -e 's/^/ /')
1718 --target-list-exclude=LIST exclude a set of targets from the default target-list
1720 Advanced options (experts only):
1721 --cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
1722 --cc=CC use C compiler CC [$cc]
1723 --iasl=IASL use ACPI compiler IASL [$iasl]
1724 --host-cc=CC use C compiler CC [$host_cc] for code run at
1725 build time
1726 --cxx=CXX use C++ compiler CXX [$cxx]
1727 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1728 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1729 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1730 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1731 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1732 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1733 --make=MAKE use specified make [$make]
1734 --python=PYTHON use specified python [$python]
1735 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1736 --meson=MESON use specified meson [$meson]
1737 --ninja=NINJA use specified ninja [$ninja]
1738 --smbd=SMBD use specified smbd [$smbd]
1739 --with-git=GIT use specified git [$git]
1740 --with-git-submodules=update update git submodules (default if .git dir exists)
1741 --with-git-submodules=validate fail if git submodules are not up to date
1742 --with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
1743 --static enable static build [$static]
1744 --mandir=PATH install man pages in PATH
1745 --datadir=PATH install firmware in PATH/$qemu_suffix
1746 --localedir=PATH install translation in PATH/$qemu_suffix
1747 --docdir=PATH install documentation in PATH/$qemu_suffix
1748 --bindir=PATH install binaries in PATH
1749 --libdir=PATH install libraries in PATH
1750 --libexecdir=PATH install helper binaries in PATH
1751 --sysconfdir=PATH install config in PATH/$qemu_suffix
1752 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1753 --firmwarepath=PATH search PATH for firmware files
1754 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1755 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1756 --with-pkgversion=VERS use specified string as sub-version of the package
1757 --without-default-features default all --enable-* options to "disabled"
1758 --without-default-devices do not include any device that is not needed to
1759 start the emulator (only use if you are including
1760 desired devices in default-configs/devices/)
1761 --enable-debug enable common debug build options
1762 --enable-sanitizers enable default sanitizers
1763 --enable-tsan enable thread sanitizer
1764 --disable-strip disable stripping binaries
1765 --disable-werror disable compilation abort on warning
1766 --disable-stack-protector disable compiler-provided stack protection
1767 --audio-drv-list=LIST set audio drivers list:
1768 Available drivers: $audio_possible_drivers
1769 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1770 --block-drv-rw-whitelist=L
1771 set block driver read-write whitelist
1772 (affects only QEMU, not qemu-img)
1773 --block-drv-ro-whitelist=L
1774 set block driver read-only whitelist
1775 (affects only QEMU, not qemu-img)
1776 --enable-trace-backends=B Set trace backend
1777 Available backends: $trace_backend_list
1778 --with-trace-file=NAME Full PATH,NAME of file to store traces
1779 Default:trace-<pid>
1780 --disable-slirp disable SLIRP userspace network connectivity
1781 --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter, experimental and slow)
1782 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1783 --oss-lib path to OSS library
1784 --cpu=CPU Build for host CPU [$cpu]
1785 --with-coroutine=BACKEND coroutine backend. Supported options:
1786 ucontext, sigaltstack, windows
1787 --enable-gcov enable test coverage analysis with gcov
1788 --disable-blobs disable installing provided firmware blobs
1789 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1790 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1791 --tls-priority default TLS protocol/cipher priority string
1792 --enable-gprof QEMU profiling with gprof
1793 --enable-profiler profiler support
1794 --enable-debug-stack-usage
1795 track the maximum stack usage of stacks created by qemu_alloc_stack
1796 --enable-plugins
1797 enable plugins via shared library loading
1798 --disable-containers don't use containers for cross-building
1799 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1801 Optional features, enabled with --enable-FEATURE and
1802 disabled with --disable-FEATURE, default is enabled if available
1803 (unless built with --without-default-features):
1805 system all system emulation targets
1806 user supported user emulation targets
1807 linux-user all linux usermode emulation targets
1808 bsd-user all BSD usermode emulation targets
1809 docs build documentation
1810 guest-agent build the QEMU Guest Agent
1811 guest-agent-msi build guest agent Windows MSI installation package
1812 pie Position Independent Executables
1813 modules modules support (non-Windows)
1814 module-upgrades try to load modules from alternate paths for upgrades
1815 debug-tcg TCG debugging (default is disabled)
1816 debug-info debugging information
1817 lto Enable Link-Time Optimization.
1818 sparse sparse checker
1819 safe-stack SafeStack Stack Smash Protection. Depends on
1820 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1821 cfi Enable Control-Flow Integrity for indirect function calls.
1822 In case of a cfi violation, QEMU is terminated with SIGILL
1823 Depends on lto and is incompatible with modules
1824 Automatically enables Link-Time Optimization (lto)
1825 cfi-debug In case of a cfi violation, a message containing the line that
1826 triggered the error is written to stderr. After the error,
1827 QEMU is still terminated with SIGILL
1828 gnutls GNUTLS cryptography support
1829 nettle nettle cryptography support
1830 gcrypt libgcrypt cryptography support
1831 auth-pam PAM access control
1832 sdl SDL UI
1833 sdl-image SDL Image support for icons
1834 gtk gtk UI
1835 vte vte support for the gtk UI
1836 curses curses UI
1837 iconv font glyph conversion support
1838 vnc VNC UI support
1839 vnc-sasl SASL encryption for VNC server
1840 vnc-jpeg JPEG lossy compression for VNC server
1841 vnc-png PNG compression for VNC server
1842 cocoa Cocoa UI (Mac OS X only)
1843 virtfs VirtFS
1844 virtiofsd build virtiofs daemon (virtiofsd)
1845 libudev Use libudev to enumerate host devices
1846 mpath Multipath persistent reservation passthrough
1847 xen xen backend driver support
1848 xen-pci-passthrough PCI passthrough support for Xen
1849 brlapi BrlAPI (Braile)
1850 curl curl connectivity
1851 membarrier membarrier system call (for Linux 4.14+ or Windows)
1852 fdt fdt device tree
1853 kvm KVM acceleration support
1854 hax HAX acceleration support
1855 hvf Hypervisor.framework acceleration support
1856 nvmm NVMM acceleration support
1857 whpx Windows Hypervisor Platform acceleration support
1858 rdma Enable RDMA-based migration
1859 pvrdma Enable PVRDMA support
1860 vde support for vde network
1861 netmap support for netmap network
1862 linux-aio Linux AIO support
1863 linux-io-uring Linux io_uring support
1864 cap-ng libcap-ng support
1865 attr attr and xattr support
1866 vhost-net vhost-net kernel acceleration support
1867 vhost-vsock virtio sockets device support
1868 vhost-scsi vhost-scsi kernel target support
1869 vhost-crypto vhost-user-crypto backend support
1870 vhost-kernel vhost kernel backend support
1871 vhost-user vhost-user backend support
1872 vhost-user-blk-server vhost-user-blk server support
1873 vhost-vdpa vhost-vdpa kernel backend support
1874 spice spice
1875 rbd rados block device (rbd)
1876 libiscsi iscsi support
1877 libnfs nfs support
1878 smartcard smartcard support (libcacard)
1879 u2f U2F support (u2f-emu)
1880 libusb libusb (for usb passthrough)
1881 live-block-migration Block migration in the main migration stream
1882 usb-redir usb network redirection support
1883 lzo support of lzo compression library
1884 snappy support of snappy compression library
1885 bzip2 support of bzip2 compression library
1886 (for reading bzip2-compressed dmg images)
1887 lzfse support of lzfse compression library
1888 (for reading lzfse-compressed dmg images)
1889 zstd support for zstd compression library
1890 (for migration compression and qcow2 cluster compression)
1891 seccomp seccomp support
1892 coroutine-pool coroutine freelist (better performance)
1893 glusterfs GlusterFS backend
1894 tpm TPM support
1895 libssh ssh block device support
1896 numa libnuma support
1897 libxml2 for Parallels image format
1898 tcmalloc tcmalloc support
1899 jemalloc jemalloc support
1900 avx2 AVX2 optimization support
1901 avx512f AVX512F optimization support
1902 replication replication support
1903 opengl opengl support
1904 virglrenderer virgl rendering support
1905 xfsctl xfsctl support
1906 qom-cast-debug cast debugging support
1907 tools build qemu-io, qemu-nbd and qemu-img tools
1908 bochs bochs image format support
1909 cloop cloop image format support
1910 dmg dmg image format support
1911 qcow1 qcow v1 image format support
1912 vdi vdi image format support
1913 vvfat vvfat image format support
1914 qed qed image format support
1915 parallels parallels image format support
1916 sheepdog sheepdog block driver support (deprecated)
1917 crypto-afalg Linux AF_ALG crypto backend driver
1918 capstone capstone disassembler support
1919 debug-mutex mutex debugging support
1920 libpmem libpmem support
1921 xkbcommon xkbcommon support
1922 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1923 libdaxctl libdaxctl support
1924 fuse FUSE block device export
1925 fuse-lseek SEEK_HOLE/SEEK_DATA support for FUSE exports
1926 multiprocess Out of process device emulation support
1927 gio libgio support
1929 NOTE: The object files are built at the place where configure is launched
1931 exit 0
1934 # Remove old dependency files to make sure that they get properly regenerated
1935 rm -f */config-devices.mak.d
1937 if test -z "$python"
1938 then
1939 error_exit "Python not found. Use --python=/path/to/python"
1941 if ! has "$make"
1942 then
1943 error_exit "GNU make ($make) not found"
1946 # Note that if the Python conditional here evaluates True we will exit
1947 # with status 1 which is a shell 'false' value.
1948 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1949 error_exit "Cannot use '$python', Python >= 3.6 is required." \
1950 "Use --python=/path/to/python to specify a supported Python."
1953 # Preserve python version since some functionality is dependent on it
1954 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)
1956 # Suppress writing compiled files
1957 python="$python -B"
1959 if test -z "$meson"; then
1960 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
1961 meson=meson
1962 elif test $git_submodules_action != 'ignore' ; then
1963 meson=git
1964 elif test -e "${source_path}/meson/meson.py" ; then
1965 meson=internal
1966 else
1967 if test "$explicit_python" = yes; then
1968 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
1969 else
1970 error_exit "Meson not found. Use --meson=/path/to/meson"
1973 else
1974 # Meson uses its own Python interpreter to invoke other Python scripts,
1975 # but the user wants to use the one they specified with --python.
1977 # We do not want to override the distro Python interpreter (and sometimes
1978 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1979 # just require --meson=git|internal together with --python.
1980 if test "$explicit_python" = yes; then
1981 case "$meson" in
1982 git | internal) ;;
1983 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
1984 esac
1988 if test "$meson" = git; then
1989 git_submodules="${git_submodules} meson"
1992 case "$meson" in
1993 git | internal)
1994 meson="$python ${source_path}/meson/meson.py"
1996 *) meson=$(command -v "$meson") ;;
1997 esac
1999 # Probe for ninja
2001 if test -z "$ninja"; then
2002 for c in ninja ninja-build samu; do
2003 if has $c; then
2004 ninja=$(command -v "$c")
2005 break
2007 done
2008 if test -z "$ninja"; then
2009 error_exit "Cannot find Ninja"
2013 # Check that the C compiler works. Doing this here before testing
2014 # the host CPU ensures that we had a valid CC to autodetect the
2015 # $cpu var (and we should bail right here if that's not the case).
2016 # It also allows the help message to be printed without a CC.
2017 write_c_skeleton;
2018 if compile_object ; then
2019 : C compiler works ok
2020 else
2021 error_exit "\"$cc\" either does not exist or does not work"
2023 if ! compile_prog ; then
2024 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2027 # Consult white-list to determine whether to enable werror
2028 # by default. Only enable by default for git builds
2029 if test -z "$werror" ; then
2030 if test "$git_submodules_action" != "ignore" && \
2031 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2032 werror="yes"
2033 else
2034 werror="no"
2038 if test "$targetos" = "bogus"; then
2039 # Now that we know that we're not printing the help and that
2040 # the compiler works (so the results of the check_defines we used
2041 # to identify the OS are reliable), if we didn't recognize the
2042 # host OS we should stop now.
2043 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2046 # Check whether the compiler matches our minimum requirements:
2047 cat > $TMPC << EOF
2048 #if defined(__clang_major__) && defined(__clang_minor__)
2049 # ifdef __apple_build_version__
2050 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2051 # error You need at least XCode Clang v5.1 to compile QEMU
2052 # endif
2053 # else
2054 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2055 # error You need at least Clang v3.4 to compile QEMU
2056 # endif
2057 # endif
2058 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2059 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2060 # error You need at least GCC v4.8 to compile QEMU
2061 # endif
2062 #else
2063 # error You either need GCC or Clang to compiler QEMU
2064 #endif
2065 int main (void) { return 0; }
2067 if ! compile_prog "" "" ; then
2068 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2071 # Accumulate -Wfoo and -Wno-bar separately.
2072 # We will list all of the enable flags first, and the disable flags second.
2073 # Note that we do not add -Werror, because that would enable it for all
2074 # configure tests. If a configure test failed due to -Werror this would
2075 # just silently disable some features, so it's too error prone.
2077 warn_flags=
2078 add_to warn_flags -Wold-style-declaration
2079 add_to warn_flags -Wold-style-definition
2080 add_to warn_flags -Wtype-limits
2081 add_to warn_flags -Wformat-security
2082 add_to warn_flags -Wformat-y2k
2083 add_to warn_flags -Winit-self
2084 add_to warn_flags -Wignored-qualifiers
2085 add_to warn_flags -Wempty-body
2086 add_to warn_flags -Wnested-externs
2087 add_to warn_flags -Wendif-labels
2088 add_to warn_flags -Wexpansion-to-defined
2089 add_to warn_flags -Wimplicit-fallthrough=2
2091 nowarn_flags=
2092 add_to nowarn_flags -Wno-initializer-overrides
2093 add_to nowarn_flags -Wno-missing-include-dirs
2094 add_to nowarn_flags -Wno-shift-negative-value
2095 add_to nowarn_flags -Wno-string-plus-int
2096 add_to nowarn_flags -Wno-typedef-redefinition
2097 add_to nowarn_flags -Wno-tautological-type-limit-compare
2098 add_to nowarn_flags -Wno-psabi
2100 gcc_flags="$warn_flags $nowarn_flags"
2102 cc_has_warning_flag() {
2103 write_c_skeleton;
2105 # Use the positive sense of the flag when testing for -Wno-wombat
2106 # support (gcc will happily accept the -Wno- form of unknown
2107 # warning options).
2108 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2109 compile_prog "-Werror $optflag" ""
2112 for flag in $gcc_flags; do
2113 if cc_has_warning_flag $flag ; then
2114 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2116 done
2118 if test "$stack_protector" != "no"; then
2119 cat > $TMPC << EOF
2120 int main(int argc, char *argv[])
2122 char arr[64], *p = arr, *c = argv[0];
2123 while (*c) {
2124 *p++ = *c++;
2126 return 0;
2129 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2130 sp_on=0
2131 for flag in $gcc_flags; do
2132 # We need to check both a compile and a link, since some compiler
2133 # setups fail only on a .c->.o compile and some only at link time
2134 if compile_object "-Werror $flag" &&
2135 compile_prog "-Werror $flag" ""; then
2136 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2137 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2138 sp_on=1
2139 break
2141 done
2142 if test "$stack_protector" = yes; then
2143 if test $sp_on = 0; then
2144 error_exit "Stack protector not supported"
2149 # Disable -Wmissing-braces on older compilers that warn even for
2150 # the "universal" C zero initializer {0}.
2151 cat > $TMPC << EOF
2152 struct {
2153 int a[2];
2154 } x = {0};
2156 if compile_object "-Werror" "" ; then
2158 else
2159 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2162 # Our module code doesn't support Windows
2163 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2164 error_exit "Modules are not available for Windows"
2167 # module_upgrades is only reasonable if modules are enabled
2168 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2169 error_exit "Can't enable module-upgrades as Modules are not enabled"
2172 # Static linking is not possible with modules or PIE
2173 if test "$static" = "yes" ; then
2174 if test "$modules" = "yes" ; then
2175 error_exit "static and modules are mutually incompatible"
2179 # Unconditional check for compiler __thread support
2180 cat > $TMPC << EOF
2181 static __thread int tls_var;
2182 int main(void) { return tls_var; }
2185 if ! compile_prog "-Werror" "" ; then
2186 error_exit "Your compiler does not support the __thread specifier for " \
2187 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2190 cat > $TMPC << EOF
2192 #ifdef __linux__
2193 # define THREAD __thread
2194 #else
2195 # define THREAD
2196 #endif
2197 static THREAD int tls_var;
2198 int main(void) { return tls_var; }
2201 # Check we support --no-pie first; we will need this for building ROMs.
2202 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2203 CFLAGS_NOPIE="-fno-pie"
2206 if test "$static" = "yes"; then
2207 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2208 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2209 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2210 pie="yes"
2211 elif test "$pie" = "yes"; then
2212 error_exit "-static-pie not available due to missing toolchain support"
2213 else
2214 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2215 pie="no"
2217 elif test "$pie" = "no"; then
2218 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2219 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2220 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2221 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2222 pie="yes"
2223 elif test "$pie" = "yes"; then
2224 error_exit "PIE not available due to missing toolchain support"
2225 else
2226 echo "Disabling PIE due to missing toolchain support"
2227 pie="no"
2230 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2231 # The combination is known as "full relro", because .got.plt is read-only too.
2232 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2233 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2236 ##########################################
2237 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2238 # use i686 as default anyway, but for those that don't, an explicit
2239 # specification is necessary
2241 if test "$cpu" = "i386"; then
2242 cat > $TMPC << EOF
2243 static int sfaa(int *ptr)
2245 return __sync_fetch_and_and(ptr, 0);
2248 int main(void)
2250 int val = 42;
2251 val = __sync_val_compare_and_swap(&val, 0, 1);
2252 sfaa(&val);
2253 return val;
2256 if ! compile_prog "" "" ; then
2257 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2261 #########################################
2262 # Solaris specific configure tool chain decisions
2264 if test "$solaris" = "yes" ; then
2265 if has ar; then
2267 else
2268 if test -f /usr/ccs/bin/ar ; then
2269 error_exit "No path includes ar" \
2270 "Add /usr/ccs/bin to your path and rerun configure"
2272 error_exit "No path includes ar"
2276 if test -z "${target_list+xxx}" ; then
2277 default_targets=yes
2278 for target in $default_target_list; do
2279 target_list="$target_list $target"
2280 done
2281 target_list="${target_list# }"
2282 else
2283 default_targets=no
2284 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2285 for target in $target_list; do
2286 # Check that we recognised the target name; this allows a more
2287 # friendly error message than if we let it fall through.
2288 case " $default_target_list " in
2289 *" $target "*)
2292 error_exit "Unknown target name '$target'"
2294 esac
2295 done
2298 for target in $target_list; do
2299 # if a deprecated target is enabled we note it here
2300 if echo "$deprecated_targets_list" | grep -q "$target"; then
2301 add_to deprecated_features $target
2303 done
2305 # see if system emulation was really requested
2306 case " $target_list " in
2307 *"-softmmu "*) softmmu=yes
2309 *) softmmu=no
2311 esac
2313 feature_not_found() {
2314 feature=$1
2315 remedy=$2
2317 error_exit "User requested feature $feature" \
2318 "configure was not able to find it." \
2319 "$remedy"
2322 # ---
2323 # big/little endian test
2324 cat > $TMPC << EOF
2325 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2326 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2327 extern int foo(short *, short *);
2328 int main(int argc, char *argv[]) {
2329 return foo(big_endian, little_endian);
2333 if compile_object ; then
2334 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2335 bigendian="yes"
2336 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2337 bigendian="no"
2338 else
2339 echo big/little test failed
2341 else
2342 echo big/little test failed
2345 ##########################################
2346 # system tools
2347 if test -z "$want_tools"; then
2348 if test "$softmmu" = "no"; then
2349 want_tools=no
2350 else
2351 want_tools=yes
2355 ##########################################
2356 # Disable features only meaningful for system-mode emulation
2357 if test "$softmmu" = "no"; then
2358 audio_drv_list=""
2361 ##########################################
2362 # Some versions of Mac OS X incorrectly define SIZE_MAX
2363 cat > $TMPC << EOF
2364 #include <stdint.h>
2365 #include <stdio.h>
2366 int main(int argc, char *argv[]) {
2367 return printf("%zu", SIZE_MAX);
2370 have_broken_size_max=no
2371 if ! compile_object -Werror ; then
2372 have_broken_size_max=yes
2375 ##########################################
2376 # L2TPV3 probe
2378 cat > $TMPC <<EOF
2379 #include <sys/socket.h>
2380 #include <linux/ip.h>
2381 int main(void) { return sizeof(struct mmsghdr); }
2383 if compile_prog "" "" ; then
2384 l2tpv3=yes
2385 else
2386 l2tpv3=no
2389 cat > $TMPC <<EOF
2390 #include <sys/mman.h>
2391 int main(int argc, char *argv[]) {
2392 return mlockall(MCL_FUTURE);
2395 if compile_prog "" "" ; then
2396 have_mlockall=yes
2397 else
2398 have_mlockall=no
2401 #########################################
2402 # vhost interdependencies and host support
2404 # vhost backends
2405 if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2406 error_exit "vhost-user is only available on Linux"
2408 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2409 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2410 error_exit "vhost-vdpa is only available on Linux"
2412 test "$vhost_kernel" = "" && vhost_kernel=$linux
2413 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2414 error_exit "vhost-kernel is only available on Linux"
2417 # vhost-kernel devices
2418 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2419 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2420 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2422 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2423 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2424 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2427 # vhost-user backends
2428 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2429 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2430 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2432 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2433 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2434 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2436 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2437 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2438 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2440 #vhost-vdpa backends
2441 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2442 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2443 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2446 # OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2447 if test "$vhost_net" = ""; then
2448 test "$vhost_net_user" = "yes" && vhost_net=yes
2449 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
2450 test "$vhost_kernel" = "yes" && vhost_net=yes
2453 ##########################################
2454 # pkg-config probe
2456 if ! has "$pkg_config_exe"; then
2457 error_exit "pkg-config binary '$pkg_config_exe' not found"
2460 ##########################################
2461 # NPTL probe
2463 if test "$linux_user" = "yes"; then
2464 cat > $TMPC <<EOF
2465 #include <sched.h>
2466 #include <linux/futex.h>
2467 int main(void) {
2468 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2469 #error bork
2470 #endif
2471 return 0;
2474 if ! compile_object ; then
2475 feature_not_found "nptl" "Install glibc and linux kernel headers."
2479 ##########################################
2480 # xen probe
2482 if test "$xen" != "disabled" ; then
2483 # Check whether Xen library path is specified via --extra-ldflags to avoid
2484 # overriding this setting with pkg-config output. If not, try pkg-config
2485 # to obtain all needed flags.
2487 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2488 $pkg_config --exists xencontrol ; then
2489 xen_ctrl_version="$(printf '%d%02d%02d' \
2490 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2491 xen=enabled
2492 xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
2493 xen_pc="$xen_pc xenevtchn xendevicemodel"
2494 if $pkg_config --exists xentoolcore; then
2495 xen_pc="$xen_pc xentoolcore"
2497 xen_cflags="$($pkg_config --cflags $xen_pc)"
2498 xen_libs="$($pkg_config --libs $xen_pc)"
2499 else
2501 xen_libs="-lxenstore -lxenctrl"
2502 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2504 # First we test whether Xen headers and libraries are available.
2505 # If no, we are done and there is no Xen support.
2506 # If yes, more tests are run to detect the Xen version.
2508 # Xen (any)
2509 cat > $TMPC <<EOF
2510 #include <xenctrl.h>
2511 int main(void) {
2512 return 0;
2515 if ! compile_prog "" "$xen_libs" ; then
2516 # Xen not found
2517 if test "$xen" = "enabled" ; then
2518 feature_not_found "xen" "Install xen devel"
2520 xen=disabled
2522 # Xen unstable
2523 elif
2524 cat > $TMPC <<EOF &&
2525 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2526 #define __XEN_TOOLS__
2527 #include <xendevicemodel.h>
2528 #include <xenforeignmemory.h>
2529 int main(void) {
2530 xendevicemodel_handle *xd;
2531 xenforeignmemory_handle *xfmem;
2533 xd = xendevicemodel_open(0, 0);
2534 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2536 xfmem = xenforeignmemory_open(0, 0);
2537 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2539 return 0;
2542 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2543 then
2544 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2545 xen_ctrl_version=41100
2546 xen=enabled
2547 elif
2548 cat > $TMPC <<EOF &&
2549 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2550 #include <xenforeignmemory.h>
2551 #include <xentoolcore.h>
2552 int main(void) {
2553 xenforeignmemory_handle *xfmem;
2555 xfmem = xenforeignmemory_open(0, 0);
2556 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2557 xentoolcore_restrict_all(0);
2559 return 0;
2562 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2563 then
2564 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2565 xen_ctrl_version=41000
2566 xen=enabled
2567 elif
2568 cat > $TMPC <<EOF &&
2569 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2570 #define __XEN_TOOLS__
2571 #include <xendevicemodel.h>
2572 int main(void) {
2573 xendevicemodel_handle *xd;
2575 xd = xendevicemodel_open(0, 0);
2576 xendevicemodel_close(xd);
2578 return 0;
2581 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2582 then
2583 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2584 xen_ctrl_version=40900
2585 xen=enabled
2586 elif
2587 cat > $TMPC <<EOF &&
2589 * If we have stable libs the we don't want the libxc compat
2590 * layers, regardless of what CFLAGS we may have been given.
2592 * Also, check if xengnttab_grant_copy_segment_t is defined and
2593 * grant copy operation is implemented.
2595 #undef XC_WANT_COMPAT_EVTCHN_API
2596 #undef XC_WANT_COMPAT_GNTTAB_API
2597 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2598 #include <xenctrl.h>
2599 #include <xenstore.h>
2600 #include <xenevtchn.h>
2601 #include <xengnttab.h>
2602 #include <xenforeignmemory.h>
2603 #include <stdint.h>
2604 #include <xen/hvm/hvm_info_table.h>
2605 #if !defined(HVM_MAX_VCPUS)
2606 # error HVM_MAX_VCPUS not defined
2607 #endif
2608 int main(void) {
2609 xc_interface *xc = NULL;
2610 xenforeignmemory_handle *xfmem;
2611 xenevtchn_handle *xe;
2612 xengnttab_handle *xg;
2613 xengnttab_grant_copy_segment_t* seg = NULL;
2615 xs_daemon_open();
2617 xc = xc_interface_open(0, 0, 0);
2618 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2619 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2620 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2621 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2623 xfmem = xenforeignmemory_open(0, 0);
2624 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2626 xe = xenevtchn_open(0, 0);
2627 xenevtchn_fd(xe);
2629 xg = xengnttab_open(0, 0);
2630 xengnttab_grant_copy(xg, 0, seg);
2632 return 0;
2635 compile_prog "" "$xen_libs $xen_stable_libs"
2636 then
2637 xen_ctrl_version=40800
2638 xen=enabled
2639 elif
2640 cat > $TMPC <<EOF &&
2642 * If we have stable libs the we don't want the libxc compat
2643 * layers, regardless of what CFLAGS we may have been given.
2645 #undef XC_WANT_COMPAT_EVTCHN_API
2646 #undef XC_WANT_COMPAT_GNTTAB_API
2647 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2648 #include <xenctrl.h>
2649 #include <xenstore.h>
2650 #include <xenevtchn.h>
2651 #include <xengnttab.h>
2652 #include <xenforeignmemory.h>
2653 #include <stdint.h>
2654 #include <xen/hvm/hvm_info_table.h>
2655 #if !defined(HVM_MAX_VCPUS)
2656 # error HVM_MAX_VCPUS not defined
2657 #endif
2658 int main(void) {
2659 xc_interface *xc = NULL;
2660 xenforeignmemory_handle *xfmem;
2661 xenevtchn_handle *xe;
2662 xengnttab_handle *xg;
2664 xs_daemon_open();
2666 xc = xc_interface_open(0, 0, 0);
2667 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2668 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2669 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2670 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2672 xfmem = xenforeignmemory_open(0, 0);
2673 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2675 xe = xenevtchn_open(0, 0);
2676 xenevtchn_fd(xe);
2678 xg = xengnttab_open(0, 0);
2679 xengnttab_map_grant_ref(xg, 0, 0, 0);
2681 return 0;
2684 compile_prog "" "$xen_libs $xen_stable_libs"
2685 then
2686 xen_ctrl_version=40701
2687 xen=enabled
2689 # Xen 4.6
2690 elif
2691 cat > $TMPC <<EOF &&
2692 #include <xenctrl.h>
2693 #include <xenstore.h>
2694 #include <stdint.h>
2695 #include <xen/hvm/hvm_info_table.h>
2696 #if !defined(HVM_MAX_VCPUS)
2697 # error HVM_MAX_VCPUS not defined
2698 #endif
2699 int main(void) {
2700 xc_interface *xc;
2701 xs_daemon_open();
2702 xc = xc_interface_open(0, 0, 0);
2703 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2704 xc_gnttab_open(NULL, 0);
2705 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2706 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2707 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2708 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2709 return 0;
2712 compile_prog "" "$xen_libs"
2713 then
2714 xen_ctrl_version=40600
2715 xen=enabled
2717 # Xen 4.5
2718 elif
2719 cat > $TMPC <<EOF &&
2720 #include <xenctrl.h>
2721 #include <xenstore.h>
2722 #include <stdint.h>
2723 #include <xen/hvm/hvm_info_table.h>
2724 #if !defined(HVM_MAX_VCPUS)
2725 # error HVM_MAX_VCPUS not defined
2726 #endif
2727 int main(void) {
2728 xc_interface *xc;
2729 xs_daemon_open();
2730 xc = xc_interface_open(0, 0, 0);
2731 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2732 xc_gnttab_open(NULL, 0);
2733 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2734 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2735 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2736 return 0;
2739 compile_prog "" "$xen_libs"
2740 then
2741 xen_ctrl_version=40500
2742 xen=enabled
2744 elif
2745 cat > $TMPC <<EOF &&
2746 #include <xenctrl.h>
2747 #include <xenstore.h>
2748 #include <stdint.h>
2749 #include <xen/hvm/hvm_info_table.h>
2750 #if !defined(HVM_MAX_VCPUS)
2751 # error HVM_MAX_VCPUS not defined
2752 #endif
2753 int main(void) {
2754 xc_interface *xc;
2755 xs_daemon_open();
2756 xc = xc_interface_open(0, 0, 0);
2757 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2758 xc_gnttab_open(NULL, 0);
2759 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2760 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2761 return 0;
2764 compile_prog "" "$xen_libs"
2765 then
2766 xen_ctrl_version=40200
2767 xen=enabled
2769 else
2770 if test "$xen" = "enabled" ; then
2771 feature_not_found "xen (unsupported version)" \
2772 "Install a supported xen (xen 4.2 or newer)"
2774 xen=disabled
2777 if test "$xen" = enabled; then
2778 if test $xen_ctrl_version -ge 40701 ; then
2779 xen_libs="$xen_libs $xen_stable_libs "
2785 ##########################################
2786 # GNUTLS probe
2788 if test "$gnutls" != "no"; then
2789 pass="no"
2790 if $pkg_config --exists "gnutls >= 3.1.18"; then
2791 gnutls_cflags=$($pkg_config --cflags gnutls)
2792 gnutls_libs=$($pkg_config --libs gnutls)
2793 # Packaging for the static libraries is not always correct.
2794 # At least ubuntu 18.04 ships only shared libraries.
2795 write_c_skeleton
2796 if compile_prog "" "$gnutls_libs" ; then
2797 pass="yes"
2800 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2801 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2802 else
2803 gnutls="$pass"
2808 # If user didn't give a --disable/enable-gcrypt flag,
2809 # then mark as disabled if user requested nettle
2810 # explicitly
2811 if test -z "$gcrypt"
2812 then
2813 if test "$nettle" = "yes"
2814 then
2815 gcrypt="no"
2819 # If user didn't give a --disable/enable-nettle flag,
2820 # then mark as disabled if user requested gcrypt
2821 # explicitly
2822 if test -z "$nettle"
2823 then
2824 if test "$gcrypt" = "yes"
2825 then
2826 nettle="no"
2830 has_libgcrypt() {
2831 if ! has "libgcrypt-config"
2832 then
2833 return 1
2836 if test -n "$cross_prefix"
2837 then
2838 host=$(libgcrypt-config --host)
2839 if test "$host-" != $cross_prefix
2840 then
2841 return 1
2845 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2846 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2848 if test $maj != 1 || test $min -lt 5
2849 then
2850 return 1
2853 return 0
2857 if test "$nettle" != "no"; then
2858 pass="no"
2859 if $pkg_config --exists "nettle >= 2.7.1"; then
2860 nettle_cflags=$($pkg_config --cflags nettle)
2861 nettle_libs=$($pkg_config --libs nettle)
2862 nettle_version=$($pkg_config --modversion nettle)
2863 # Link test to make sure the given libraries work (e.g for static).
2864 write_c_skeleton
2865 if compile_prog "" "$nettle_libs" ; then
2866 if test -z "$gcrypt"; then
2867 gcrypt="no"
2869 pass="yes"
2872 if test "$pass" = "yes"
2873 then
2874 cat > $TMPC << EOF
2875 #include <nettle/xts.h>
2876 int main(void) {
2877 return 0;
2880 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2881 nettle_xts=yes
2882 qemu_private_xts=no
2885 if test "$pass" = "no" && test "$nettle" = "yes"; then
2886 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2887 else
2888 nettle="$pass"
2892 if test "$gcrypt" != "no"; then
2893 pass="no"
2894 if has_libgcrypt; then
2895 gcrypt_cflags=$(libgcrypt-config --cflags)
2896 gcrypt_libs=$(libgcrypt-config --libs)
2897 # Debian has removed -lgpg-error from libgcrypt-config
2898 # as it "spreads unnecessary dependencies" which in
2899 # turn breaks static builds...
2900 if test "$static" = "yes"
2901 then
2902 gcrypt_libs="$gcrypt_libs -lgpg-error"
2905 # Link test to make sure the given libraries work (e.g for static).
2906 write_c_skeleton
2907 if compile_prog "" "$gcrypt_libs" ; then
2908 pass="yes"
2911 if test "$pass" = "yes"; then
2912 gcrypt="yes"
2913 cat > $TMPC << EOF
2914 #include <gcrypt.h>
2915 int main(void) {
2916 gcry_mac_hd_t handle;
2917 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2918 GCRY_MAC_FLAG_SECURE, NULL);
2919 return 0;
2922 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2923 gcrypt_hmac=yes
2925 cat > $TMPC << EOF
2926 #include <gcrypt.h>
2927 int main(void) {
2928 gcry_cipher_hd_t handle;
2929 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
2930 return 0;
2933 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2934 gcrypt_xts=yes
2935 qemu_private_xts=no
2937 elif test "$gcrypt" = "yes"; then
2938 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
2939 else
2940 gcrypt="no"
2945 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2946 then
2947 error_exit "Only one of gcrypt & nettle can be enabled"
2950 ##########################################
2951 # libtasn1 - only for the TLS creds/session test suite
2953 tasn1=yes
2954 tasn1_cflags=""
2955 tasn1_libs=""
2956 if $pkg_config --exists "libtasn1"; then
2957 tasn1_cflags=$($pkg_config --cflags libtasn1)
2958 tasn1_libs=$($pkg_config --libs libtasn1)
2959 else
2960 tasn1=no
2964 ##########################################
2965 # PAM probe
2967 if test "$auth_pam" != "no"; then
2968 cat > $TMPC <<EOF
2969 #include <security/pam_appl.h>
2970 #include <stdio.h>
2971 int main(void) {
2972 const char *service_name = "qemu";
2973 const char *user = "frank";
2974 const struct pam_conv pam_conv = { 0 };
2975 pam_handle_t *pamh = NULL;
2976 pam_start(service_name, user, &pam_conv, &pamh);
2977 return 0;
2980 if compile_prog "" "-lpam" ; then
2981 auth_pam=yes
2982 else
2983 if test "$auth_pam" = "yes"; then
2984 feature_not_found "PAM" "Install PAM development package"
2985 else
2986 auth_pam=no
2991 ##########################################
2992 # VTE probe
2994 if test "$vte" != "no"; then
2995 vteminversion="0.32.0"
2996 if $pkg_config --exists "vte-2.91"; then
2997 vtepackage="vte-2.91"
2998 else
2999 vtepackage="vte-2.90"
3001 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3002 vte_cflags=$($pkg_config --cflags $vtepackage)
3003 vte_libs=$($pkg_config --libs $vtepackage)
3004 vteversion=$($pkg_config --modversion $vtepackage)
3005 vte="yes"
3006 elif test "$vte" = "yes"; then
3007 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3008 else
3009 vte="no"
3013 ##########################################
3014 # RDMA needs OpenFabrics libraries
3015 if test "$rdma" != "no" ; then
3016 cat > $TMPC <<EOF
3017 #include <rdma/rdma_cma.h>
3018 int main(void) { return 0; }
3020 rdma_libs="-lrdmacm -libverbs -libumad"
3021 if compile_prog "" "$rdma_libs" ; then
3022 rdma="yes"
3023 else
3024 if test "$rdma" = "yes" ; then
3025 error_exit \
3026 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3027 " Your options:" \
3028 " (1) Fast: Install infiniband packages (devel) from your distro." \
3029 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3030 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3032 rdma="no"
3036 ##########################################
3037 # PVRDMA detection
3039 cat > $TMPC <<EOF &&
3040 #include <sys/mman.h>
3043 main(void)
3045 char buf = 0;
3046 void *addr = &buf;
3047 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3049 return 0;
3053 if test "$rdma" = "yes" ; then
3054 case "$pvrdma" in
3056 if compile_prog "" ""; then
3057 pvrdma="yes"
3058 else
3059 pvrdma="no"
3062 "yes")
3063 if ! compile_prog "" ""; then
3064 error_exit "PVRDMA is not supported since mremap is not implemented"
3066 pvrdma="yes"
3068 "no")
3069 pvrdma="no"
3071 esac
3072 else
3073 if test "$pvrdma" = "yes" ; then
3074 error_exit "PVRDMA requires rdma suppport"
3076 pvrdma="no"
3079 # Let's see if enhanced reg_mr is supported
3080 if test "$pvrdma" = "yes" ; then
3082 cat > $TMPC <<EOF &&
3083 #include <infiniband/verbs.h>
3086 main(void)
3088 struct ibv_mr *mr;
3089 struct ibv_pd *pd = NULL;
3090 size_t length = 10;
3091 uint64_t iova = 0;
3092 int access = 0;
3093 void *addr = NULL;
3095 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3097 ibv_dereg_mr(mr);
3099 return 0;
3102 if ! compile_prog "" "-libverbs"; then
3103 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3107 ##########################################
3108 # xfsctl() probe, used for file-posix.c
3109 if test "$xfs" != "no" ; then
3110 cat > $TMPC << EOF
3111 #include <stddef.h> /* NULL */
3112 #include <xfs/xfs.h>
3113 int main(void)
3115 xfsctl(NULL, 0, 0, NULL);
3116 return 0;
3119 if compile_prog "" "" ; then
3120 xfs="yes"
3121 else
3122 if test "$xfs" = "yes" ; then
3123 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
3125 xfs=no
3129 ##########################################
3130 # vde libraries probe
3131 if test "$vde" != "no" ; then
3132 vde_libs="-lvdeplug"
3133 cat > $TMPC << EOF
3134 #include <libvdeplug.h>
3135 int main(void)
3137 struct vde_open_args a = {0, 0, 0};
3138 char s[] = "";
3139 vde_open(s, s, &a);
3140 return 0;
3143 if compile_prog "" "$vde_libs" ; then
3144 vde=yes
3145 else
3146 if test "$vde" = "yes" ; then
3147 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3149 vde=no
3153 ##########################################
3154 # netmap support probe
3155 # Apart from looking for netmap headers, we make sure that the host API version
3156 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3157 # a minor/major version number. Minor new features will be marked with values up
3158 # to 15, and if something happens that requires a change to the backend we will
3159 # move above 15, submit the backend fixes and modify this two bounds.
3160 if test "$netmap" != "no" ; then
3161 cat > $TMPC << EOF
3162 #include <inttypes.h>
3163 #include <net/if.h>
3164 #include <net/netmap.h>
3165 #include <net/netmap_user.h>
3166 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3167 #error
3168 #endif
3169 int main(void) { return 0; }
3171 if compile_prog "" "" ; then
3172 netmap=yes
3173 else
3174 if test "$netmap" = "yes" ; then
3175 feature_not_found "netmap"
3177 netmap=no
3181 ##########################################
3182 # detect CoreAudio
3183 if test "$coreaudio" != "no" ; then
3184 coreaudio_libs="-framework CoreAudio"
3185 cat > $TMPC << EOF
3186 #include <CoreAudio/CoreAudio.h>
3187 int main(void)
3189 return (int)AudioGetCurrentHostTime();
3192 if compile_prog "" "$coreaudio_libs" ; then
3193 coreaudio=yes
3194 else
3195 coreaudio=no
3199 ##########################################
3200 # Sound support libraries probe
3202 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3203 for drv in $audio_drv_list; do
3204 case $drv in
3205 alsa | try-alsa)
3206 if $pkg_config alsa --exists; then
3207 alsa_libs=$($pkg_config alsa --libs)
3208 alsa_cflags=$($pkg_config alsa --cflags)
3209 alsa=yes
3210 if test "$drv" = "try-alsa"; then
3211 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3213 else
3214 if test "$drv" = "try-alsa"; then
3215 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3216 else
3217 error_exit "$drv check failed" \
3218 "Make sure to have the $drv libs and headers installed."
3223 pa | try-pa)
3224 if $pkg_config libpulse --exists; then
3225 libpulse=yes
3226 pulse_libs=$($pkg_config libpulse --libs)
3227 pulse_cflags=$($pkg_config libpulse --cflags)
3228 if test "$drv" = "try-pa"; then
3229 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3231 else
3232 if test "$drv" = "try-pa"; then
3233 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3234 else
3235 error_exit "$drv check failed" \
3236 "Make sure to have the $drv libs and headers installed."
3241 sdl)
3242 if test "$sdl" = "no"; then
3243 error_exit "sdl not found or disabled, can not use sdl audio driver"
3247 try-sdl)
3248 if test "$sdl" = "no"; then
3249 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3250 else
3251 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3255 coreaudio | try-coreaudio)
3256 if test "$coreaudio" = "no"; then
3257 if test "$drv" = "try-coreaudio"; then
3258 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio//')
3259 else
3260 error_exit "$drv check failed" \
3261 "Make sure to have the $drv is available."
3263 else
3264 coreaudio_libs="-framework CoreAudio"
3265 if test "$drv" = "try-coreaudio"; then
3266 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-coreaudio/coreaudio/')
3271 dsound)
3272 dsound_libs="-lole32 -ldxguid"
3273 audio_win_int="yes"
3276 oss)
3277 oss_libs="$oss_lib"
3280 jack | try-jack)
3281 if $pkg_config jack --exists; then
3282 libjack=yes
3283 jack_libs=$($pkg_config jack --libs)
3284 if test "$drv" = "try-jack"; then
3285 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3287 else
3288 if test "$drv" = "try-jack"; then
3289 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3290 else
3291 error_exit "$drv check failed" \
3292 "Make sure to have the $drv libs and headers installed."
3298 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3299 error_exit "Unknown driver '$drv' selected" \
3300 "Possible drivers are: $audio_possible_drivers"
3303 esac
3304 done
3306 ##########################################
3307 # glib support probe
3309 glib_req_ver=2.48
3310 glib_modules=gthread-2.0
3311 if test "$modules" = yes; then
3312 glib_modules="$glib_modules gmodule-export-2.0"
3314 if test "$plugins" = yes; then
3315 glib_modules="$glib_modules gmodule-2.0"
3318 for i in $glib_modules; do
3319 if $pkg_config --atleast-version=$glib_req_ver $i; then
3320 glib_cflags=$($pkg_config --cflags $i)
3321 glib_libs=$($pkg_config --libs $i)
3322 else
3323 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3325 done
3327 # This workaround is required due to a bug in pkg-config file for glib as it
3328 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3330 if test "$static" = yes && test "$mingw32" = yes; then
3331 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3334 if ! test "$gio" = "no"; then
3335 pass=no
3336 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3337 gio_cflags=$($pkg_config --cflags gio-2.0)
3338 gio_libs=$($pkg_config --libs gio-2.0)
3339 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3340 if [ ! -x "$gdbus_codegen" ]; then
3341 gdbus_codegen=
3343 # Check that the libraries actually work -- Ubuntu 18.04 ships
3344 # with pkg-config --static --libs data for gio-2.0 that is missing
3345 # -lblkid and will give a link error.
3346 cat > $TMPC <<EOF
3347 #include <gio/gio.h>
3348 int main(void)
3350 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3351 return 0;
3354 if compile_prog "$gio_cflags" "$gio_libs" ; then
3355 pass=yes
3356 else
3357 pass=no
3360 if test "$pass" = "yes" &&
3361 $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3362 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3363 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3367 if test "$pass" = "no"; then
3368 if test "$gio" = "yes"; then
3369 feature_not_found "gio" "Install libgio >= 2.0"
3370 else
3371 gio=no
3373 else
3374 gio=yes
3378 # Sanity check that the current size_t matches the
3379 # size that glib thinks it should be. This catches
3380 # problems on multi-arch where people try to build
3381 # 32-bit QEMU while pointing at 64-bit glib headers
3382 cat > $TMPC <<EOF
3383 #include <glib.h>
3384 #include <unistd.h>
3386 #define QEMU_BUILD_BUG_ON(x) \
3387 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3389 int main(void) {
3390 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3391 return 0;
3395 if ! compile_prog "$glib_cflags" "$glib_libs" ; then
3396 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3397 "You probably need to set PKG_CONFIG_LIBDIR"\
3398 "to point to the right pkg-config files for your"\
3399 "build target"
3402 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3403 cat > $TMPC << EOF
3404 #include <glib.h>
3405 int main(void) { return 0; }
3407 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3408 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3409 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3410 CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
3414 # Silence clang warnings triggered by glib < 2.57.2
3415 cat > $TMPC << EOF
3416 #include <glib.h>
3417 typedef struct Foo {
3418 int i;
3419 } Foo;
3420 static void foo_free(Foo *f)
3422 g_free(f);
3424 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3425 int main(void) { return 0; }
3427 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3428 if cc_has_warning_flag "-Wno-unused-function"; then
3429 glib_cflags="$glib_cflags -Wno-unused-function"
3430 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
3434 ##########################################
3435 # SHA command probe for modules
3436 if test "$modules" = yes; then
3437 shacmd_probe="sha1sum sha1 shasum"
3438 for c in $shacmd_probe; do
3439 if has $c; then
3440 shacmd="$c"
3441 break
3443 done
3444 if test "$shacmd" = ""; then
3445 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3449 ##########################################
3450 # pthread probe
3451 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3453 pthread=no
3454 cat > $TMPC << EOF
3455 #include <pthread.h>
3456 static void *f(void *p) { return NULL; }
3457 int main(void) {
3458 pthread_t thread;
3459 pthread_create(&thread, 0, f, 0);
3460 return 0;
3463 if compile_prog "" "" ; then
3464 pthread=yes
3465 else
3466 for pthread_lib in $PTHREADLIBS_LIST; do
3467 if compile_prog "" "$pthread_lib" ; then
3468 pthread=yes
3469 break
3471 done
3474 if test "$mingw32" != yes && test "$pthread" = no; then
3475 error_exit "pthread check failed" \
3476 "Make sure to have the pthread libs and headers installed."
3479 # check for pthread_setname_np with thread id
3480 pthread_setname_np_w_tid=no
3481 cat > $TMPC << EOF
3482 #include <pthread.h>
3484 static void *f(void *p) { return NULL; }
3485 int main(void)
3487 pthread_t thread;
3488 pthread_create(&thread, 0, f, 0);
3489 pthread_setname_np(thread, "QEMU");
3490 return 0;
3493 if compile_prog "" "$pthread_lib" ; then
3494 pthread_setname_np_w_tid=yes
3497 # check for pthread_setname_np without thread id
3498 pthread_setname_np_wo_tid=no
3499 cat > $TMPC << EOF
3500 #include <pthread.h>
3502 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3503 int main(void)
3505 pthread_t thread;
3506 pthread_create(&thread, 0, f, 0);
3507 return 0;
3510 if compile_prog "" "$pthread_lib" ; then
3511 pthread_setname_np_wo_tid=yes
3514 ##########################################
3515 # libssh probe
3516 if test "$libssh" != "no" ; then
3517 if $pkg_config --exists libssh; then
3518 libssh_cflags=$($pkg_config libssh --cflags)
3519 libssh_libs=$($pkg_config libssh --libs)
3520 libssh=yes
3521 else
3522 if test "$libssh" = "yes" ; then
3523 error_exit "libssh required for --enable-libssh"
3525 libssh=no
3529 ##########################################
3530 # Check for libssh 0.8
3531 # This is done like this instead of using the LIBSSH_VERSION_* and
3532 # SSH_VERSION_* macros because some distributions in the past shipped
3533 # snapshots of the future 0.8 from Git, and those snapshots did not
3534 # have updated version numbers (still referring to 0.7.0).
3536 if test "$libssh" = "yes"; then
3537 cat > $TMPC <<EOF
3538 #include <libssh/libssh.h>
3539 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3541 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3542 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3546 ##########################################
3547 # linux-aio probe
3549 if test "$linux_aio" != "no" ; then
3550 cat > $TMPC <<EOF
3551 #include <libaio.h>
3552 #include <sys/eventfd.h>
3553 #include <stddef.h>
3554 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3556 if compile_prog "" "-laio" ; then
3557 linux_aio=yes
3558 else
3559 if test "$linux_aio" = "yes" ; then
3560 feature_not_found "linux AIO" "Install libaio devel"
3562 linux_aio=no
3565 ##########################################
3566 # linux-io-uring probe
3568 if test "$linux_io_uring" != "no" ; then
3569 if $pkg_config liburing; then
3570 linux_io_uring_cflags=$($pkg_config --cflags liburing)
3571 linux_io_uring_libs=$($pkg_config --libs liburing)
3572 linux_io_uring=yes
3573 else
3574 if test "$linux_io_uring" = "yes" ; then
3575 feature_not_found "linux io_uring" "Install liburing devel"
3577 linux_io_uring=no
3581 ##########################################
3582 # TPM emulation is only on POSIX
3584 if test "$tpm" = ""; then
3585 if test "$mingw32" = "yes"; then
3586 tpm=no
3587 else
3588 tpm=yes
3590 elif test "$tpm" = "yes"; then
3591 if test "$mingw32" = "yes" ; then
3592 error_exit "TPM emulation only available on POSIX systems"
3596 ##########################################
3597 # iovec probe
3598 cat > $TMPC <<EOF
3599 #include <sys/types.h>
3600 #include <sys/uio.h>
3601 #include <unistd.h>
3602 int main(void) { return sizeof(struct iovec); }
3604 iovec=no
3605 if compile_prog "" "" ; then
3606 iovec=yes
3609 ##########################################
3610 # fdt probe
3612 case "$fdt" in
3613 auto | enabled | internal)
3614 # Simpler to always update submodule, even if not needed.
3615 if test "$git_submodules_action" != "ignore"; then
3616 git_submodules="${git_submodules} dtc"
3619 esac
3621 ##########################################
3622 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3624 gbm="no"
3625 if $pkg_config gbm; then
3626 gbm_cflags="$($pkg_config --cflags gbm)"
3627 gbm_libs="$($pkg_config --libs gbm)"
3628 gbm="yes"
3631 if test "$opengl" != "no" ; then
3632 epoxy=no
3633 if $pkg_config epoxy; then
3634 cat > $TMPC << EOF
3635 #include <epoxy/egl.h>
3636 int main(void) { return 0; }
3638 if compile_prog "" "" ; then
3639 epoxy=yes
3643 if test "$epoxy" = "yes" ; then
3644 opengl_cflags="$($pkg_config --cflags epoxy)"
3645 opengl_libs="$($pkg_config --libs epoxy)"
3646 opengl=yes
3647 else
3648 if test "$opengl" = "yes" ; then
3649 feature_not_found "opengl" "Please install epoxy with EGL"
3651 opengl_cflags=""
3652 opengl_libs=""
3653 opengl=no
3657 ##########################################
3658 # libxml2 probe
3659 if test "$libxml2" != "no" ; then
3660 if $pkg_config --exists libxml-2.0; then
3661 libxml2="yes"
3662 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3663 libxml2_libs=$($pkg_config --libs libxml-2.0)
3664 else
3665 if test "$libxml2" = "yes"; then
3666 feature_not_found "libxml2" "Install libxml2 devel"
3668 libxml2="no"
3672 # Check for inotify functions when we are building linux-user
3673 # emulator. This is done because older glibc versions don't
3674 # have syscall stubs for these implemented. In that case we
3675 # don't provide them even if kernel supports them.
3677 inotify=no
3678 cat > $TMPC << EOF
3679 #include <sys/inotify.h>
3682 main(void)
3684 /* try to start inotify */
3685 return inotify_init();
3688 if compile_prog "" "" ; then
3689 inotify=yes
3692 inotify1=no
3693 cat > $TMPC << EOF
3694 #include <sys/inotify.h>
3697 main(void)
3699 /* try to start inotify */
3700 return inotify_init1(0);
3703 if compile_prog "" "" ; then
3704 inotify1=yes
3707 # check if pipe2 is there
3708 pipe2=no
3709 cat > $TMPC << EOF
3710 #include <unistd.h>
3711 #include <fcntl.h>
3713 int main(void)
3715 int pipefd[2];
3716 return pipe2(pipefd, O_CLOEXEC);
3719 if compile_prog "" "" ; then
3720 pipe2=yes
3723 # check if accept4 is there
3724 accept4=no
3725 cat > $TMPC << EOF
3726 #include <sys/socket.h>
3727 #include <stddef.h>
3729 int main(void)
3731 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3732 return 0;
3735 if compile_prog "" "" ; then
3736 accept4=yes
3739 # check if tee/splice is there. vmsplice was added same time.
3740 splice=no
3741 cat > $TMPC << EOF
3742 #include <unistd.h>
3743 #include <fcntl.h>
3744 #include <limits.h>
3746 int main(void)
3748 int len, fd = 0;
3749 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3750 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3751 return 0;
3754 if compile_prog "" "" ; then
3755 splice=yes
3758 ##########################################
3759 # libnuma probe
3761 if test "$numa" != "no" ; then
3762 cat > $TMPC << EOF
3763 #include <numa.h>
3764 int main(void) { return numa_available(); }
3767 if compile_prog "" "-lnuma" ; then
3768 numa=yes
3769 numa_libs="-lnuma"
3770 else
3771 if test "$numa" = "yes" ; then
3772 feature_not_found "numa" "install numactl devel"
3774 numa=no
3778 malloc=system
3779 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3780 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3781 exit 1
3782 elif test "$tcmalloc" = "yes" ; then
3783 malloc=tcmalloc
3784 elif test "$jemalloc" = "yes" ; then
3785 malloc=jemalloc
3788 ##########################################
3789 # signalfd probe
3790 signalfd="no"
3791 cat > $TMPC << EOF
3792 #include <unistd.h>
3793 #include <sys/syscall.h>
3794 #include <signal.h>
3795 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3798 if compile_prog "" "" ; then
3799 signalfd=yes
3802 # check if optreset global is declared by <getopt.h>
3803 optreset="no"
3804 cat > $TMPC << EOF
3805 #include <getopt.h>
3806 int main(void) { return optreset; }
3809 if compile_prog "" "" ; then
3810 optreset=yes
3813 # check if eventfd is supported
3814 eventfd=no
3815 cat > $TMPC << EOF
3816 #include <sys/eventfd.h>
3818 int main(void)
3820 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3823 if compile_prog "" "" ; then
3824 eventfd=yes
3827 # check if memfd is supported
3828 memfd=no
3829 cat > $TMPC << EOF
3830 #include <sys/mman.h>
3832 int main(void)
3834 return memfd_create("foo", MFD_ALLOW_SEALING);
3837 if compile_prog "" "" ; then
3838 memfd=yes
3841 # check for usbfs
3842 have_usbfs=no
3843 if test "$linux_user" = "yes"; then
3844 cat > $TMPC << EOF
3845 #include <linux/usbdevice_fs.h>
3847 #ifndef USBDEVFS_GET_CAPABILITIES
3848 #error "USBDEVFS_GET_CAPABILITIES undefined"
3849 #endif
3851 #ifndef USBDEVFS_DISCONNECT_CLAIM
3852 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
3853 #endif
3855 int main(void)
3857 return 0;
3860 if compile_prog "" ""; then
3861 have_usbfs=yes
3865 # check for fallocate
3866 fallocate=no
3867 cat > $TMPC << EOF
3868 #include <fcntl.h>
3870 int main(void)
3872 fallocate(0, 0, 0, 0);
3873 return 0;
3876 if compile_prog "" "" ; then
3877 fallocate=yes
3880 # check for fallocate hole punching
3881 fallocate_punch_hole=no
3882 cat > $TMPC << EOF
3883 #include <fcntl.h>
3884 #include <linux/falloc.h>
3886 int main(void)
3888 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3889 return 0;
3892 if compile_prog "" "" ; then
3893 fallocate_punch_hole=yes
3896 # check that fallocate supports range zeroing inside the file
3897 fallocate_zero_range=no
3898 cat > $TMPC << EOF
3899 #include <fcntl.h>
3900 #include <linux/falloc.h>
3902 int main(void)
3904 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3905 return 0;
3908 if compile_prog "" "" ; then
3909 fallocate_zero_range=yes
3912 # check for posix_fallocate
3913 posix_fallocate=no
3914 cat > $TMPC << EOF
3915 #include <fcntl.h>
3917 int main(void)
3919 posix_fallocate(0, 0, 0);
3920 return 0;
3923 if compile_prog "" "" ; then
3924 posix_fallocate=yes
3927 # check for sync_file_range
3928 sync_file_range=no
3929 cat > $TMPC << EOF
3930 #include <fcntl.h>
3932 int main(void)
3934 sync_file_range(0, 0, 0, 0);
3935 return 0;
3938 if compile_prog "" "" ; then
3939 sync_file_range=yes
3942 # check for linux/fiemap.h and FS_IOC_FIEMAP
3943 fiemap=no
3944 cat > $TMPC << EOF
3945 #include <sys/ioctl.h>
3946 #include <linux/fs.h>
3947 #include <linux/fiemap.h>
3949 int main(void)
3951 ioctl(0, FS_IOC_FIEMAP, 0);
3952 return 0;
3955 if compile_prog "" "" ; then
3956 fiemap=yes
3959 # check for dup3
3960 dup3=no
3961 cat > $TMPC << EOF
3962 #include <unistd.h>
3964 int main(void)
3966 dup3(0, 0, 0);
3967 return 0;
3970 if compile_prog "" "" ; then
3971 dup3=yes
3974 # check for ppoll support
3975 ppoll=no
3976 cat > $TMPC << EOF
3977 #include <poll.h>
3979 int main(void)
3981 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3982 ppoll(&pfd, 1, 0, 0);
3983 return 0;
3986 if compile_prog "" "" ; then
3987 ppoll=yes
3990 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3991 prctl_pr_set_timerslack=no
3992 cat > $TMPC << EOF
3993 #include <sys/prctl.h>
3995 int main(void)
3997 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3998 return 0;
4001 if compile_prog "" "" ; then
4002 prctl_pr_set_timerslack=yes
4005 # check for epoll support
4006 epoll=no
4007 cat > $TMPC << EOF
4008 #include <sys/epoll.h>
4010 int main(void)
4012 epoll_create(0);
4013 return 0;
4016 if compile_prog "" "" ; then
4017 epoll=yes
4020 # epoll_create1 is a later addition
4021 # so we must check separately for its presence
4022 epoll_create1=no
4023 cat > $TMPC << EOF
4024 #include <sys/epoll.h>
4026 int main(void)
4028 /* Note that we use epoll_create1 as a value, not as
4029 * a function being called. This is necessary so that on
4030 * old SPARC glibc versions where the function was present in
4031 * the library but not declared in the header file we will
4032 * fail the configure check. (Otherwise we will get a compiler
4033 * warning but not an error, and will proceed to fail the
4034 * qemu compile where we compile with -Werror.)
4036 return (int)(uintptr_t)&epoll_create1;
4039 if compile_prog "" "" ; then
4040 epoll_create1=yes
4043 # check for sendfile support
4044 sendfile=no
4045 cat > $TMPC << EOF
4046 #include <sys/sendfile.h>
4048 int main(void)
4050 return sendfile(0, 0, 0, 0);
4053 if compile_prog "" "" ; then
4054 sendfile=yes
4057 # check for timerfd support (glibc 2.8 and newer)
4058 timerfd=no
4059 cat > $TMPC << EOF
4060 #include <sys/timerfd.h>
4062 int main(void)
4064 return(timerfd_create(CLOCK_REALTIME, 0));
4067 if compile_prog "" "" ; then
4068 timerfd=yes
4071 # check for setns and unshare support
4072 setns=no
4073 cat > $TMPC << EOF
4074 #include <sched.h>
4076 int main(void)
4078 int ret;
4079 ret = setns(0, 0);
4080 ret = unshare(0);
4081 return ret;
4084 if compile_prog "" "" ; then
4085 setns=yes
4088 # clock_adjtime probe
4089 clock_adjtime=no
4090 cat > $TMPC <<EOF
4091 #include <time.h>
4092 #include <sys/timex.h>
4094 int main(void)
4096 return clock_adjtime(0, 0);
4099 clock_adjtime=no
4100 if compile_prog "" "" ; then
4101 clock_adjtime=yes
4104 # syncfs probe
4105 syncfs=no
4106 cat > $TMPC <<EOF
4107 #include <unistd.h>
4109 int main(void)
4111 return syncfs(0);
4114 syncfs=no
4115 if compile_prog "" "" ; then
4116 syncfs=yes
4119 # Search for bswap_32 function
4120 byteswap_h=no
4121 cat > $TMPC << EOF
4122 #include <byteswap.h>
4123 int main(void) { return bswap_32(0); }
4125 if compile_prog "" "" ; then
4126 byteswap_h=yes
4129 # Search for bswap32 function
4130 bswap_h=no
4131 cat > $TMPC << EOF
4132 #include <sys/endian.h>
4133 #include <sys/types.h>
4134 #include <machine/bswap.h>
4135 int main(void) { return bswap32(0); }
4137 if compile_prog "" "" ; then
4138 bswap_h=yes
4141 # Check whether we have openpty() in either libc or libutil
4142 cat > $TMPC << EOF
4143 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4144 int main(void) { return openpty(0, 0, 0, 0, 0); }
4147 have_openpty="no"
4148 if compile_prog "" "" ; then
4149 have_openpty="yes"
4150 else
4151 if compile_prog "" "-lutil" ; then
4152 have_openpty="yes"
4156 ##########################################
4157 # spice probe
4158 if test "$spice" != "no" ; then
4159 cat > $TMPC << EOF
4160 #include <spice.h>
4161 int main(void) { spice_server_new(); return 0; }
4163 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4164 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4165 if $pkg_config --atleast-version=0.12.5 spice-server && \
4166 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4167 compile_prog "$spice_cflags" "$spice_libs" ; then
4168 spice="yes"
4169 else
4170 if test "$spice" = "yes" ; then
4171 feature_not_found "spice" \
4172 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4174 spice="no"
4178 # check for smartcard support
4179 if test "$smartcard" != "no"; then
4180 if $pkg_config --atleast-version=2.5.1 libcacard; then
4181 libcacard_cflags=$($pkg_config --cflags libcacard)
4182 libcacard_libs=$($pkg_config --libs libcacard)
4183 smartcard="yes"
4184 else
4185 if test "$smartcard" = "yes"; then
4186 feature_not_found "smartcard" "Install libcacard devel"
4188 smartcard="no"
4192 # check for libusb
4193 if test "$libusb" != "no" ; then
4194 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4195 libusb="yes"
4196 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4197 libusb_libs=$($pkg_config --libs libusb-1.0)
4198 else
4199 if test "$libusb" = "yes"; then
4200 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4202 libusb="no"
4206 # check for usbredirparser for usb network redirection support
4207 if test "$usb_redir" != "no" ; then
4208 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4209 usb_redir="yes"
4210 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4211 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4212 else
4213 if test "$usb_redir" = "yes"; then
4214 feature_not_found "usb-redir" "Install usbredir devel"
4216 usb_redir="no"
4220 ##########################################
4221 # check if we have VSS SDK headers for win
4223 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4224 test "$vss_win32_sdk" != "no" ; then
4225 case "$vss_win32_sdk" in
4226 "") vss_win32_include="-isystem $source_path" ;;
4227 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4228 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4229 vss_win32_include="-isystem $source_path/.sdk/vss"
4230 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4232 *) vss_win32_include="-isystem $vss_win32_sdk"
4233 esac
4234 cat > $TMPC << EOF
4235 #define __MIDL_user_allocate_free_DEFINED__
4236 #include <inc/win2003/vss.h>
4237 int main(void) { return VSS_CTX_BACKUP; }
4239 if compile_prog "$vss_win32_include" "" ; then
4240 guest_agent_with_vss="yes"
4241 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4242 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4243 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4244 else
4245 if test "$vss_win32_sdk" != "" ; then
4246 echo "ERROR: Please download and install Microsoft VSS SDK:"
4247 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4248 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4249 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4250 echo "ERROR: The headers are extracted in the directory \`inc'."
4251 feature_not_found "VSS support"
4253 guest_agent_with_vss="no"
4257 ##########################################
4258 # lookup Windows platform SDK (if not specified)
4259 # The SDK is needed only to build .tlb (type library) file of guest agent
4260 # VSS provider from the source. It is usually unnecessary because the
4261 # pre-compiled .tlb file is included.
4263 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4264 test "$guest_agent_with_vss" = "yes" ; then
4265 if test -z "$win_sdk"; then
4266 programfiles="$PROGRAMFILES"
4267 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4268 if test -n "$programfiles"; then
4269 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4270 else
4271 feature_not_found "Windows SDK"
4273 elif test "$win_sdk" = "no"; then
4274 win_sdk=""
4278 ##########################################
4279 # check if mingw environment provides a recent ntddscsi.h
4280 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4281 cat > $TMPC << EOF
4282 #include <windows.h>
4283 #include <ntddscsi.h>
4284 int main(void) {
4285 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4286 #error Missing required ioctl definitions
4287 #endif
4288 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4289 return addr.Lun;
4292 if compile_prog "" "" ; then
4293 guest_agent_ntddscsi=yes
4294 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4298 ##########################################
4299 # virgl renderer probe
4301 if test "$virglrenderer" != "no" ; then
4302 cat > $TMPC << EOF
4303 #include <virglrenderer.h>
4304 int main(void) { virgl_renderer_poll(); return 0; }
4306 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4307 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4308 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4309 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4310 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4311 virglrenderer="yes"
4312 else
4313 if test "$virglrenderer" = "yes" ; then
4314 feature_not_found "virglrenderer"
4316 virglrenderer="no"
4320 ##########################################
4321 # capstone
4323 case "$capstone" in
4324 auto | enabled | internal)
4325 # Simpler to always update submodule, even if not needed.
4326 if test "$git_submodules_action" != "ignore"; then
4327 git_submodules="${git_submodules} capstone"
4330 esac
4332 ##########################################
4333 # check if we have fdatasync
4335 fdatasync=no
4336 cat > $TMPC << EOF
4337 #include <unistd.h>
4338 int main(void) {
4339 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4340 return fdatasync(0);
4341 #else
4342 #error Not supported
4343 #endif
4346 if compile_prog "" "" ; then
4347 fdatasync=yes
4350 ##########################################
4351 # check if we have madvise
4353 madvise=no
4354 cat > $TMPC << EOF
4355 #include <sys/types.h>
4356 #include <sys/mman.h>
4357 #include <stddef.h>
4358 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4360 if compile_prog "" "" ; then
4361 madvise=yes
4364 ##########################################
4365 # check if we have posix_madvise
4367 posix_madvise=no
4368 cat > $TMPC << EOF
4369 #include <sys/mman.h>
4370 #include <stddef.h>
4371 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4373 if compile_prog "" "" ; then
4374 posix_madvise=yes
4377 ##########################################
4378 # check if we have posix_memalign()
4380 posix_memalign=no
4381 cat > $TMPC << EOF
4382 #include <stdlib.h>
4383 int main(void) {
4384 void *p;
4385 return posix_memalign(&p, 8, 8);
4388 if compile_prog "" "" ; then
4389 posix_memalign=yes
4392 ##########################################
4393 # check if we have posix_syslog
4395 posix_syslog=no
4396 cat > $TMPC << EOF
4397 #include <syslog.h>
4398 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4400 if compile_prog "" "" ; then
4401 posix_syslog=yes
4404 ##########################################
4405 # check if we have sem_timedwait
4407 sem_timedwait=no
4408 cat > $TMPC << EOF
4409 #include <semaphore.h>
4410 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
4412 if compile_prog "" "" ; then
4413 sem_timedwait=yes
4416 ##########################################
4417 # check if we have strchrnul
4419 strchrnul=no
4420 cat > $TMPC << EOF
4421 #include <string.h>
4422 int main(void);
4423 // Use a haystack that the compiler shouldn't be able to constant fold
4424 char *haystack = (char*)&main;
4425 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4427 if compile_prog "" "" ; then
4428 strchrnul=yes
4431 #########################################
4432 # check if we have st_atim
4434 st_atim=no
4435 cat > $TMPC << EOF
4436 #include <sys/stat.h>
4437 #include <stddef.h>
4438 int main(void) { return offsetof(struct stat, st_atim); }
4440 if compile_prog "" "" ; then
4441 st_atim=yes
4444 ##########################################
4445 # check if trace backend exists
4447 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4448 if test "$?" -ne 0 ; then
4449 error_exit "invalid trace backends" \
4450 "Please choose supported trace backends."
4453 ##########################################
4454 # For 'ust' backend, test if ust headers are present
4455 if have_backend "ust"; then
4456 cat > $TMPC << EOF
4457 #include <lttng/tracepoint.h>
4458 int main(void) { return 0; }
4460 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4461 if $pkg_config lttng-ust --exists; then
4462 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4463 else
4464 lttng_ust_libs="-llttng-ust -ldl"
4466 if $pkg_config liburcu-bp --exists; then
4467 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4468 else
4469 urcu_bp_libs="-lurcu-bp"
4471 else
4472 error_exit "Trace backend 'ust' missing lttng-ust header files"
4476 ##########################################
4477 # For 'dtrace' backend, test if 'dtrace' command is present
4478 if have_backend "dtrace"; then
4479 if ! has 'dtrace' ; then
4480 error_exit "dtrace command is not found in PATH $PATH"
4482 trace_backend_stap="no"
4483 if has 'stap' ; then
4484 trace_backend_stap="yes"
4486 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
4487 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
4488 # instead. QEMU --enable-modules depends on this because the SystemTap
4489 # semaphores are linked into the main binary and not the module's shared
4490 # object.
4491 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
4495 ##########################################
4496 # check and set a backend for coroutine
4498 # We prefer ucontext, but it's not always possible. The fallback
4499 # is sigcontext. On Windows the only valid backend is the Windows
4500 # specific one.
4502 ucontext_works=no
4503 if test "$darwin" != "yes"; then
4504 cat > $TMPC << EOF
4505 #include <ucontext.h>
4506 #ifdef __stub_makecontext
4507 #error Ignoring glibc stub makecontext which will always fail
4508 #endif
4509 int main(void) { makecontext(0, 0, 0); return 0; }
4511 if compile_prog "" "" ; then
4512 ucontext_works=yes
4516 if test "$coroutine" = ""; then
4517 if test "$mingw32" = "yes"; then
4518 coroutine=win32
4519 elif test "$ucontext_works" = "yes"; then
4520 coroutine=ucontext
4521 else
4522 coroutine=sigaltstack
4524 else
4525 case $coroutine in
4526 windows)
4527 if test "$mingw32" != "yes"; then
4528 error_exit "'windows' coroutine backend only valid for Windows"
4530 # Unfortunately the user visible backend name doesn't match the
4531 # coroutine-*.c filename for this case, so we have to adjust it here.
4532 coroutine=win32
4534 ucontext)
4535 if test "$ucontext_works" != "yes"; then
4536 feature_not_found "ucontext"
4539 sigaltstack)
4540 if test "$mingw32" = "yes"; then
4541 error_exit "only the 'windows' coroutine backend is valid for Windows"
4545 error_exit "unknown coroutine backend $coroutine"
4547 esac
4550 if test "$coroutine_pool" = ""; then
4551 coroutine_pool=yes
4554 if test "$debug_stack_usage" = "yes"; then
4555 if test "$coroutine_pool" = "yes"; then
4556 echo "WARN: disabling coroutine pool for stack usage debugging"
4557 coroutine_pool=no
4561 ##################################################
4562 # SafeStack
4565 if test "$safe_stack" = "yes"; then
4566 cat > $TMPC << EOF
4567 int main(int argc, char *argv[])
4569 #if ! __has_feature(safe_stack)
4570 #error SafeStack Disabled
4571 #endif
4572 return 0;
4575 flag="-fsanitize=safe-stack"
4576 # Check that safe-stack is supported and enabled.
4577 if compile_prog "-Werror $flag" "$flag"; then
4578 # Flag needed both at compilation and at linking
4579 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4580 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4581 else
4582 error_exit "SafeStack not supported by your compiler"
4584 if test "$coroutine" != "ucontext"; then
4585 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4587 else
4588 cat > $TMPC << EOF
4589 int main(int argc, char *argv[])
4591 #if defined(__has_feature)
4592 #if __has_feature(safe_stack)
4593 #error SafeStack Enabled
4594 #endif
4595 #endif
4596 return 0;
4599 if test "$safe_stack" = "no"; then
4600 # Make sure that safe-stack is disabled
4601 if ! compile_prog "-Werror" ""; then
4602 # SafeStack was already enabled, try to explicitly remove the feature
4603 flag="-fno-sanitize=safe-stack"
4604 if ! compile_prog "-Werror $flag" "$flag"; then
4605 error_exit "Configure cannot disable SafeStack"
4607 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4608 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4610 else # "$safe_stack" = ""
4611 # Set safe_stack to yes or no based on pre-existing flags
4612 if compile_prog "-Werror" ""; then
4613 safe_stack="no"
4614 else
4615 safe_stack="yes"
4616 if test "$coroutine" != "ucontext"; then
4617 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4623 ##########################################
4624 # check if we have open_by_handle_at
4626 open_by_handle_at=no
4627 cat > $TMPC << EOF
4628 #include <fcntl.h>
4629 #if !defined(AT_EMPTY_PATH)
4630 # error missing definition
4631 #else
4632 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4633 #endif
4635 if compile_prog "" "" ; then
4636 open_by_handle_at=yes
4639 ########################################
4640 # check if we have linux/magic.h
4642 linux_magic_h=no
4643 cat > $TMPC << EOF
4644 #include <linux/magic.h>
4645 int main(void) {
4646 return 0;
4649 if compile_prog "" "" ; then
4650 linux_magic_h=yes
4653 ########################################
4654 # check if we have valgrind/valgrind.h
4656 valgrind_h=no
4657 cat > $TMPC << EOF
4658 #include <valgrind/valgrind.h>
4659 int main(void) {
4660 return 0;
4663 if compile_prog "" "" ; then
4664 valgrind_h=yes
4667 ########################################
4668 # check if environ is declared
4670 has_environ=no
4671 cat > $TMPC << EOF
4672 #include <unistd.h>
4673 int main(void) {
4674 environ = 0;
4675 return 0;
4678 if compile_prog "" "" ; then
4679 has_environ=yes
4682 ########################################
4683 # check if cpuid.h is usable.
4685 cat > $TMPC << EOF
4686 #include <cpuid.h>
4687 int main(void) {
4688 unsigned a, b, c, d;
4689 int max = __get_cpuid_max(0, 0);
4691 if (max >= 1) {
4692 __cpuid(1, a, b, c, d);
4695 if (max >= 7) {
4696 __cpuid_count(7, 0, a, b, c, d);
4699 return 0;
4702 if compile_prog "" "" ; then
4703 cpuid_h=yes
4706 ##########################################
4707 # avx2 optimization requirement check
4709 # There is no point enabling this if cpuid.h is not usable,
4710 # since we won't be able to select the new routines.
4712 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
4713 cat > $TMPC << EOF
4714 #pragma GCC push_options
4715 #pragma GCC target("avx2")
4716 #include <cpuid.h>
4717 #include <immintrin.h>
4718 static int bar(void *a) {
4719 __m256i x = *(__m256i *)a;
4720 return _mm256_testz_si256(x, x);
4722 int main(int argc, char *argv[]) { return bar(argv[0]); }
4724 if compile_object "" ; then
4725 avx2_opt="yes"
4726 else
4727 avx2_opt="no"
4731 ##########################################
4732 # avx512f optimization requirement check
4734 # There is no point enabling this if cpuid.h is not usable,
4735 # since we won't be able to select the new routines.
4736 # by default, it is turned off.
4737 # if user explicitly want to enable it, check environment
4739 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
4740 cat > $TMPC << EOF
4741 #pragma GCC push_options
4742 #pragma GCC target("avx512f")
4743 #include <cpuid.h>
4744 #include <immintrin.h>
4745 static int bar(void *a) {
4746 __m512i x = *(__m512i *)a;
4747 return _mm512_test_epi64_mask(x, x);
4749 int main(int argc, char *argv[])
4751 return bar(argv[0]);
4754 if ! compile_object "" ; then
4755 avx512f_opt="no"
4757 else
4758 avx512f_opt="no"
4761 ########################################
4762 # check if __[u]int128_t is usable.
4764 int128=no
4765 cat > $TMPC << EOF
4766 __int128_t a;
4767 __uint128_t b;
4768 int main (void) {
4769 a = a + b;
4770 b = a * b;
4771 a = a * a;
4772 return 0;
4775 if compile_prog "" "" ; then
4776 int128=yes
4779 #########################################
4780 # See if 128-bit atomic operations are supported.
4782 atomic128=no
4783 if test "$int128" = "yes"; then
4784 cat > $TMPC << EOF
4785 int main(void)
4787 unsigned __int128 x = 0, y = 0;
4788 y = __atomic_load(&x, 0);
4789 __atomic_store(&x, y, 0);
4790 __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
4791 return 0;
4794 if compile_prog "" "" ; then
4795 atomic128=yes
4799 cmpxchg128=no
4800 if test "$int128" = yes && test "$atomic128" = no; then
4801 cat > $TMPC << EOF
4802 int main(void)
4804 unsigned __int128 x = 0, y = 0;
4805 __sync_val_compare_and_swap_16(&x, y, x);
4806 return 0;
4809 if compile_prog "" "" ; then
4810 cmpxchg128=yes
4814 #########################################
4815 # See if 64-bit atomic operations are supported.
4816 # Note that without __atomic builtins, we can only
4817 # assume atomic loads/stores max at pointer size.
4819 cat > $TMPC << EOF
4820 #include <stdint.h>
4821 int main(void)
4823 uint64_t x = 0, y = 0;
4824 #ifdef __ATOMIC_RELAXED
4825 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
4826 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
4827 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
4828 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
4829 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
4830 #else
4831 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4832 __sync_lock_test_and_set(&x, y);
4833 __sync_val_compare_and_swap(&x, y, 0);
4834 __sync_fetch_and_add(&x, y);
4835 #endif
4836 return 0;
4839 if compile_prog "" "" ; then
4840 atomic64=yes
4843 #########################################
4844 # See if --dynamic-list is supported by the linker
4845 ld_dynamic_list="no"
4846 if test "$static" = "no" ; then
4847 cat > $TMPTXT <<EOF
4849 foo;
4853 cat > $TMPC <<EOF
4854 #include <stdio.h>
4855 void foo(void);
4857 void foo(void)
4859 printf("foo\n");
4862 int main(void)
4864 foo();
4865 return 0;
4869 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
4870 ld_dynamic_list="yes"
4874 #########################################
4875 # See if -exported_symbols_list is supported by the linker
4877 ld_exported_symbols_list="no"
4878 if test "$static" = "no" ; then
4879 cat > $TMPTXT <<EOF
4880 _foo
4883 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
4884 ld_exported_symbols_list="yes"
4888 if test "$plugins" = "yes" &&
4889 test "$ld_dynamic_list" = "no" &&
4890 test "$ld_exported_symbols_list" = "no" ; then
4891 error_exit \
4892 "Plugin support requires dynamic linking and specifying a set of symbols " \
4893 "that are exported to plugins. Unfortunately your linker doesn't " \
4894 "support the flag (--dynamic-list or -exported_symbols_list) used " \
4895 "for this purpose. You can't build with --static."
4898 ########################################
4899 # check if getauxval is available.
4901 getauxval=no
4902 cat > $TMPC << EOF
4903 #include <sys/auxv.h>
4904 int main(void) {
4905 return getauxval(AT_HWCAP) == 0;
4908 if compile_prog "" "" ; then
4909 getauxval=yes
4912 ########################################
4913 # check if ccache is interfering with
4914 # semantic analysis of macros
4916 unset CCACHE_CPP2
4917 ccache_cpp2=no
4918 cat > $TMPC << EOF
4919 static const int Z = 1;
4920 #define fn() ({ Z; })
4921 #define TAUT(X) ((X) == Z)
4922 #define PAREN(X, Y) (X == Y)
4923 #define ID(X) (X)
4924 int main(int argc, char *argv[])
4926 int x = 0, y = 0;
4927 x = ID(x);
4928 x = fn();
4929 fn();
4930 if (PAREN(x, y)) return 0;
4931 if (TAUT(Z)) return 0;
4932 return 0;
4936 if ! compile_object "-Werror"; then
4937 ccache_cpp2=yes
4940 #################################################
4941 # clang does not support glibc + FORTIFY_SOURCE.
4943 if test "$fortify_source" != "no"; then
4944 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4945 fortify_source="no";
4946 elif test -n "$cxx" && has $cxx &&
4947 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4948 fortify_source="no";
4949 else
4950 fortify_source="yes"
4954 ###############################################
4955 # Check if copy_file_range is provided by glibc
4956 have_copy_file_range=no
4957 cat > $TMPC << EOF
4958 #include <unistd.h>
4959 int main(void) {
4960 copy_file_range(0, NULL, 0, NULL, 0, 0);
4961 return 0;
4964 if compile_prog "" "" ; then
4965 have_copy_file_range=yes
4968 ##########################################
4969 # check if struct fsxattr is available via linux/fs.h
4971 have_fsxattr=no
4972 cat > $TMPC << EOF
4973 #include <linux/fs.h>
4974 struct fsxattr foo;
4975 int main(void) {
4976 return 0;
4979 if compile_prog "" "" ; then
4980 have_fsxattr=yes
4983 ##########################################
4984 # check for usable membarrier system call
4985 if test "$membarrier" = "yes"; then
4986 have_membarrier=no
4987 if test "$mingw32" = "yes" ; then
4988 have_membarrier=yes
4989 elif test "$linux" = "yes" ; then
4990 cat > $TMPC << EOF
4991 #include <linux/membarrier.h>
4992 #include <sys/syscall.h>
4993 #include <unistd.h>
4994 #include <stdlib.h>
4995 int main(void) {
4996 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
4997 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
4998 exit(0);
5001 if compile_prog "" "" ; then
5002 have_membarrier=yes
5005 if test "$have_membarrier" = "no"; then
5006 feature_not_found "membarrier" "membarrier system call not available"
5008 else
5009 # Do not enable it by default even for Mingw32, because it doesn't
5010 # work on Wine.
5011 membarrier=no
5014 ##########################################
5015 # check if rtnetlink.h exists and is useful
5016 have_rtnetlink=no
5017 cat > $TMPC << EOF
5018 #include <linux/rtnetlink.h>
5019 int main(void) {
5020 return IFLA_PROTO_DOWN;
5023 if compile_prog "" "" ; then
5024 have_rtnetlink=yes
5027 ##########################################
5028 # check for usable AF_VSOCK environment
5029 have_af_vsock=no
5030 cat > $TMPC << EOF
5031 #include <errno.h>
5032 #include <sys/types.h>
5033 #include <sys/socket.h>
5034 #if !defined(AF_VSOCK)
5035 # error missing AF_VSOCK flag
5036 #endif
5037 #include <linux/vm_sockets.h>
5038 int main(void) {
5039 int sock, ret;
5040 struct sockaddr_vm svm;
5041 socklen_t len = sizeof(svm);
5042 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5043 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5044 if ((ret == -1) && (errno == ENOTCONN)) {
5045 return 0;
5047 return -1;
5050 if compile_prog "" "" ; then
5051 have_af_vsock=yes
5054 ##########################################
5055 # check for usable AF_ALG environment
5056 have_afalg=no
5057 cat > $TMPC << EOF
5058 #include <errno.h>
5059 #include <sys/types.h>
5060 #include <sys/socket.h>
5061 #include <linux/if_alg.h>
5062 int main(void) {
5063 int sock;
5064 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5065 return sock;
5068 if compile_prog "" "" ; then
5069 have_afalg=yes
5071 if test "$crypto_afalg" = "yes"
5072 then
5073 if test "$have_afalg" != "yes"
5074 then
5075 error_exit "AF_ALG requested but could not be detected"
5080 #################################################
5081 # check for sysmacros.h
5083 have_sysmacros=no
5084 cat > $TMPC << EOF
5085 #include <sys/sysmacros.h>
5086 int main(void) {
5087 return makedev(0, 0);
5090 if compile_prog "" "" ; then
5091 have_sysmacros=yes
5094 ##########################################
5095 # check for _Static_assert()
5097 have_static_assert=no
5098 cat > $TMPC << EOF
5099 _Static_assert(1, "success");
5100 int main(void) {
5101 return 0;
5104 if compile_prog "" "" ; then
5105 have_static_assert=yes
5108 ##########################################
5109 # check for utmpx.h, it is missing e.g. on OpenBSD
5111 have_utmpx=no
5112 cat > $TMPC << EOF
5113 #include <utmpx.h>
5114 struct utmpx user_info;
5115 int main(void) {
5116 return 0;
5119 if compile_prog "" "" ; then
5120 have_utmpx=yes
5123 ##########################################
5124 # check for getrandom()
5126 have_getrandom=no
5127 cat > $TMPC << EOF
5128 #include <sys/random.h>
5129 int main(void) {
5130 return getrandom(0, 0, GRND_NONBLOCK);
5133 if compile_prog "" "" ; then
5134 have_getrandom=yes
5137 ##########################################
5138 # checks for sanitizers
5140 have_asan=no
5141 have_ubsan=no
5142 have_asan_iface_h=no
5143 have_asan_iface_fiber=no
5145 if test "$sanitizers" = "yes" ; then
5146 write_c_skeleton
5147 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5148 have_asan=yes
5151 # we could use a simple skeleton for flags checks, but this also
5152 # detect the static linking issue of ubsan, see also:
5153 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5154 cat > $TMPC << EOF
5155 #include <stdlib.h>
5156 int main(void) {
5157 void *tmp = malloc(10);
5158 if (tmp != NULL) {
5159 return *(int *)(tmp + 2);
5161 return 1;
5164 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5165 have_ubsan=yes
5168 if check_include "sanitizer/asan_interface.h" ; then
5169 have_asan_iface_h=yes
5172 cat > $TMPC << EOF
5173 #include <sanitizer/asan_interface.h>
5174 int main(void) {
5175 __sanitizer_start_switch_fiber(0, 0, 0);
5176 return 0;
5179 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5180 have_asan_iface_fiber=yes
5184 ##########################################
5185 # checks for fuzzer
5186 if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
5187 write_c_fuzzer_skeleton
5188 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
5189 have_fuzzer=yes
5190 else
5191 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
5192 exit 1
5196 # Thread sanitizer is, for now, much noisier than the other sanitizers;
5197 # keep it separate until that is not the case.
5198 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
5199 error_exit "TSAN is not supported with other sanitiziers."
5201 have_tsan=no
5202 have_tsan_iface_fiber=no
5203 if test "$tsan" = "yes" ; then
5204 write_c_skeleton
5205 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5206 have_tsan=yes
5208 cat > $TMPC << EOF
5209 #include <sanitizer/tsan_interface.h>
5210 int main(void) {
5211 __tsan_create_fiber(0);
5212 return 0;
5215 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5216 have_tsan_iface_fiber=yes
5220 ##########################################
5221 # check for libpmem
5223 if test "$libpmem" != "no"; then
5224 if $pkg_config --exists "libpmem"; then
5225 libpmem="yes"
5226 libpmem_libs=$($pkg_config --libs libpmem)
5227 libpmem_cflags=$($pkg_config --cflags libpmem)
5228 else
5229 if test "$libpmem" = "yes" ; then
5230 feature_not_found "libpmem" "Install nvml or pmdk"
5232 libpmem="no"
5236 ##########################################
5237 # check for libdaxctl
5239 if test "$libdaxctl" != "no"; then
5240 if $pkg_config --atleast-version=57 "libdaxctl"; then
5241 libdaxctl="yes"
5242 libdaxctl_libs=$($pkg_config --libs libdaxctl)
5243 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
5244 else
5245 if test "$libdaxctl" = "yes" ; then
5246 feature_not_found "libdaxctl" "Install libdaxctl"
5248 libdaxctl="no"
5252 ##########################################
5253 # check for slirp
5255 case "$slirp" in
5256 auto | enabled | internal)
5257 # Simpler to always update submodule, even if not needed.
5258 if test "$git_submodules_action" != "ignore"; then
5259 git_submodules="${git_submodules} slirp"
5262 esac
5264 ##########################################
5265 # check for usable __NR_keyctl syscall
5267 if test "$linux" = "yes" ; then
5269 have_keyring=no
5270 cat > $TMPC << EOF
5271 #include <errno.h>
5272 #include <asm/unistd.h>
5273 #include <linux/keyctl.h>
5274 #include <unistd.h>
5275 int main(void) {
5276 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
5279 if compile_prog "" "" ; then
5280 have_keyring=yes
5283 if test "$secret_keyring" != "no"
5284 then
5285 if test "$have_keyring" = "yes"
5286 then
5287 secret_keyring=yes
5288 else
5289 if test "$secret_keyring" = "yes"
5290 then
5291 error_exit "syscall __NR_keyctl requested, \
5292 but not implemented on your system"
5293 else
5294 secret_keyring=no
5299 ##########################################
5300 # End of CC checks
5301 # After here, no more $cc or $ld runs
5303 write_c_skeleton
5305 if test "$gcov" = "yes" ; then
5307 elif test "$fortify_source" = "yes" ; then
5308 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5309 debug=no
5312 case "$ARCH" in
5313 alpha)
5314 # Ensure there's only a single GP
5315 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
5317 esac
5319 if test "$gprof" = "yes" ; then
5320 QEMU_CFLAGS="-p $QEMU_CFLAGS"
5321 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
5324 if test "$have_asan" = "yes"; then
5325 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
5326 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
5327 if test "$have_asan_iface_h" = "no" ; then
5328 echo "ASAN build enabled, but ASAN header missing." \
5329 "Without code annotation, the report may be inferior."
5330 elif test "$have_asan_iface_fiber" = "no" ; then
5331 echo "ASAN build enabled, but ASAN header is too old." \
5332 "Without code annotation, the report may be inferior."
5335 if test "$have_tsan" = "yes" ; then
5336 if test "$have_tsan_iface_fiber" = "yes" ; then
5337 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
5338 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
5339 else
5340 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
5342 elif test "$tsan" = "yes" ; then
5343 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
5345 if test "$have_ubsan" = "yes"; then
5346 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
5347 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
5350 ##########################################
5352 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
5353 if test "$solaris" = "no" && test "$tsan" = "no"; then
5354 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5355 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
5359 # Use ASLR, no-SEH and DEP if available
5360 if test "$mingw32" = "yes" ; then
5361 flags="--no-seh --nxcompat"
5363 # Disable ASLR for debug builds to allow debugging with gdb
5364 if test "$debug" = "no" ; then
5365 flags="--dynamicbase $flags"
5368 for flag in $flags; do
5369 if ld_has $flag ; then
5370 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
5372 done
5375 # We can only support ivshmem if we have eventfd
5376 if [ "$eventfd" = "yes" ]; then
5377 ivshmem=yes
5380 # Probe for guest agent support/options
5382 if [ "$guest_agent" != "no" ]; then
5383 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
5384 guest_agent=no
5385 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5386 guest_agent=yes
5387 elif [ "$guest_agent" != yes ]; then
5388 guest_agent=no
5389 else
5390 error_exit "Guest agent is not supported on this platform"
5394 # Guest agent Windows MSI package
5396 if test "$QEMU_GA_MANUFACTURER" = ""; then
5397 QEMU_GA_MANUFACTURER=QEMU
5399 if test "$QEMU_GA_DISTRO" = ""; then
5400 QEMU_GA_DISTRO=Linux
5402 if test "$QEMU_GA_VERSION" = ""; then
5403 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5406 QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
5408 # Mac OS X ships with a broken assembler
5409 roms=
5410 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5411 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
5412 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
5413 # Different host OS linkers have different ideas about the name of the ELF
5414 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5415 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5416 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5417 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5418 ld_i386_emulation="$emu"
5419 roms="optionrom"
5420 break
5422 done
5425 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
5426 if test "$cpu" = "s390x" ; then
5427 write_c_skeleton
5428 if compile_prog "-march=z900" ""; then
5429 roms="$roms s390-ccw"
5430 # SLOF is required for building the s390-ccw firmware on s390x,
5431 # since it is using the libnet code from SLOF for network booting.
5432 if test "$git_submodules_action" != "ignore"; then
5433 git_submodules="${git_submodules} roms/SLOF"
5438 # Check that the C++ compiler exists and works with the C compiler.
5439 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5440 if has $cxx; then
5441 cat > $TMPC <<EOF
5442 int c_function(void);
5443 int main(void) { return c_function(); }
5446 compile_object
5448 cat > $TMPCXX <<EOF
5449 extern "C" {
5450 int c_function(void);
5452 int c_function(void) { return 42; }
5455 update_cxxflags
5457 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
5458 # C++ compiler $cxx works ok with C compiler $cc
5460 else
5461 echo "C++ compiler $cxx does not work with C compiler $cc"
5462 echo "Disabling C++ specific optional code"
5463 cxx=
5465 else
5466 echo "No C++ compiler available; disabling C++ specific optional code"
5467 cxx=
5470 if !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
5471 exit 1
5474 config_host_mak="config-host.mak"
5476 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5477 echo >> $config_host_mak
5479 echo all: >> $config_host_mak
5480 echo "GIT=$git" >> $config_host_mak
5481 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5482 echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
5484 echo "ARCH=$ARCH" >> $config_host_mak
5486 if test "$debug_tcg" = "yes" ; then
5487 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5489 if test "$strip_opt" = "yes" ; then
5490 echo "STRIP=${strip}" >> $config_host_mak
5492 if test "$bigendian" = "yes" ; then
5493 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5495 if test "$mingw32" = "yes" ; then
5496 echo "CONFIG_WIN32=y" >> $config_host_mak
5497 if test "$guest_agent_with_vss" = "yes" ; then
5498 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5499 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5500 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5502 if test "$guest_agent_ntddscsi" = "yes" ; then
5503 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
5505 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5506 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5507 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5508 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5509 else
5510 echo "CONFIG_POSIX=y" >> $config_host_mak
5513 if test "$linux" = "yes" ; then
5514 echo "CONFIG_LINUX=y" >> $config_host_mak
5517 if test "$darwin" = "yes" ; then
5518 echo "CONFIG_DARWIN=y" >> $config_host_mak
5521 if test "$solaris" = "yes" ; then
5522 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5524 if test "$haiku" = "yes" ; then
5525 echo "CONFIG_HAIKU=y" >> $config_host_mak
5527 if test "$static" = "yes" ; then
5528 echo "CONFIG_STATIC=y" >> $config_host_mak
5530 if test "$profiler" = "yes" ; then
5531 echo "CONFIG_PROFILER=y" >> $config_host_mak
5533 if test "$want_tools" = "yes" ; then
5534 echo "CONFIG_TOOLS=y" >> $config_host_mak
5536 if test "$guest_agent" = "yes" ; then
5537 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
5539 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5540 if test "$vde" = "yes" ; then
5541 echo "CONFIG_VDE=y" >> $config_host_mak
5542 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5544 if test "$netmap" = "yes" ; then
5545 echo "CONFIG_NETMAP=y" >> $config_host_mak
5547 if test "$l2tpv3" = "yes" ; then
5548 echo "CONFIG_L2TPV3=y" >> $config_host_mak
5550 if test "$gprof" = "yes" ; then
5551 echo "CONFIG_GPROF=y" >> $config_host_mak
5553 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5554 for drv in $audio_drv_list; do
5555 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5556 echo "$def=y" >> $config_host_mak
5557 done
5558 if test "$alsa" = "yes" ; then
5559 echo "CONFIG_ALSA=y" >> $config_host_mak
5561 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
5562 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
5563 if test "$libpulse" = "yes" ; then
5564 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
5566 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
5567 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
5568 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
5569 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
5570 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
5571 if test "$libjack" = "yes" ; then
5572 echo "CONFIG_LIBJACK=y" >> $config_host_mak
5574 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
5575 if test "$audio_win_int" = "yes" ; then
5576 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5578 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5579 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5580 if test "$xfs" = "yes" ; then
5581 echo "CONFIG_XFS=y" >> $config_host_mak
5583 qemu_version=$(head $source_path/VERSION)
5584 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5585 echo "SRC_PATH=$source_path" >> $config_host_mak
5586 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5587 if test "$modules" = "yes"; then
5588 # $shacmd can generate a hash started with digit, which the compiler doesn't
5589 # like as an symbol. So prefix it with an underscore
5590 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5591 echo "CONFIG_MODULES=y" >> $config_host_mak
5593 if test "$module_upgrades" = "yes"; then
5594 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
5596 if test "$pipe2" = "yes" ; then
5597 echo "CONFIG_PIPE2=y" >> $config_host_mak
5599 if test "$accept4" = "yes" ; then
5600 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5602 if test "$splice" = "yes" ; then
5603 echo "CONFIG_SPLICE=y" >> $config_host_mak
5605 if test "$eventfd" = "yes" ; then
5606 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5608 if test "$memfd" = "yes" ; then
5609 echo "CONFIG_MEMFD=y" >> $config_host_mak
5611 if test "$have_usbfs" = "yes" ; then
5612 echo "CONFIG_USBFS=y" >> $config_host_mak
5614 if test "$fallocate" = "yes" ; then
5615 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5617 if test "$fallocate_punch_hole" = "yes" ; then
5618 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5620 if test "$fallocate_zero_range" = "yes" ; then
5621 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5623 if test "$posix_fallocate" = "yes" ; then
5624 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5626 if test "$sync_file_range" = "yes" ; then
5627 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5629 if test "$fiemap" = "yes" ; then
5630 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5632 if test "$dup3" = "yes" ; then
5633 echo "CONFIG_DUP3=y" >> $config_host_mak
5635 if test "$ppoll" = "yes" ; then
5636 echo "CONFIG_PPOLL=y" >> $config_host_mak
5638 if test "$prctl_pr_set_timerslack" = "yes" ; then
5639 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5641 if test "$epoll" = "yes" ; then
5642 echo "CONFIG_EPOLL=y" >> $config_host_mak
5644 if test "$epoll_create1" = "yes" ; then
5645 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5647 if test "$sendfile" = "yes" ; then
5648 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5650 if test "$timerfd" = "yes" ; then
5651 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5653 if test "$setns" = "yes" ; then
5654 echo "CONFIG_SETNS=y" >> $config_host_mak
5656 if test "$clock_adjtime" = "yes" ; then
5657 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5659 if test "$syncfs" = "yes" ; then
5660 echo "CONFIG_SYNCFS=y" >> $config_host_mak
5662 if test "$inotify" = "yes" ; then
5663 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5665 if test "$inotify1" = "yes" ; then
5666 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5668 if test "$sem_timedwait" = "yes" ; then
5669 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
5671 if test "$strchrnul" = "yes" ; then
5672 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
5674 if test "$st_atim" = "yes" ; then
5675 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
5677 if test "$byteswap_h" = "yes" ; then
5678 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5680 if test "$bswap_h" = "yes" ; then
5681 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5683 if test "$gio" = "yes" ; then
5684 echo "CONFIG_GIO=y" >> $config_host_mak
5685 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
5686 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
5687 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
5689 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5690 if test "$gnutls" = "yes" ; then
5691 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5692 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
5693 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
5695 if test "$gcrypt" = "yes" ; then
5696 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5697 if test "$gcrypt_hmac" = "yes" ; then
5698 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5700 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
5701 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
5703 if test "$nettle" = "yes" ; then
5704 echo "CONFIG_NETTLE=y" >> $config_host_mak
5705 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5706 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
5707 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
5709 if test "$qemu_private_xts" = "yes" ; then
5710 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
5712 if test "$tasn1" = "yes" ; then
5713 echo "CONFIG_TASN1=y" >> $config_host_mak
5715 if test "$auth_pam" = "yes" ; then
5716 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
5718 if test "$have_broken_size_max" = "yes" ; then
5719 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5721 if test "$have_openpty" = "yes" ; then
5722 echo "HAVE_OPENPTY=y" >> $config_host_mak
5725 # Work around a system header bug with some kernel/XFS header
5726 # versions where they both try to define 'struct fsxattr':
5727 # xfs headers will not try to redefine structs from linux headers
5728 # if this macro is set.
5729 if test "$have_fsxattr" = "yes" ; then
5730 echo "HAVE_FSXATTR=y" >> $config_host_mak
5732 if test "$have_copy_file_range" = "yes" ; then
5733 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
5735 if test "$vte" = "yes" ; then
5736 echo "CONFIG_VTE=y" >> $config_host_mak
5737 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5738 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
5740 if test "$virglrenderer" = "yes" ; then
5741 echo "CONFIG_VIRGL=y" >> $config_host_mak
5742 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5743 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5745 if test "$xen" = "enabled" ; then
5746 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5747 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5748 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
5749 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
5751 if test "$linux_aio" = "yes" ; then
5752 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5754 if test "$linux_io_uring" = "yes" ; then
5755 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
5756 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
5757 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
5759 if test "$vhost_scsi" = "yes" ; then
5760 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5762 if test "$vhost_net" = "yes" ; then
5763 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
5765 if test "$vhost_net_user" = "yes" ; then
5766 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
5768 if test "$vhost_net_vdpa" = "yes" ; then
5769 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
5771 if test "$vhost_crypto" = "yes" ; then
5772 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
5774 if test "$vhost_vsock" = "yes" ; then
5775 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5776 if test "$vhost_user" = "yes" ; then
5777 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
5780 if test "$vhost_kernel" = "yes" ; then
5781 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
5783 if test "$vhost_user" = "yes" ; then
5784 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
5786 if test "$vhost_vdpa" = "yes" ; then
5787 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
5789 if test "$vhost_user_fs" = "yes" ; then
5790 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
5792 if test "$iovec" = "yes" ; then
5793 echo "CONFIG_IOVEC=y" >> $config_host_mak
5795 if test "$membarrier" = "yes" ; then
5796 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
5798 if test "$signalfd" = "yes" ; then
5799 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5801 if test "$optreset" = "yes" ; then
5802 echo "HAVE_OPTRESET=y" >> $config_host_mak
5804 if test "$fdatasync" = "yes" ; then
5805 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5807 if test "$madvise" = "yes" ; then
5808 echo "CONFIG_MADVISE=y" >> $config_host_mak
5810 if test "$posix_madvise" = "yes" ; then
5811 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5813 if test "$posix_memalign" = "yes" ; then
5814 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
5816 if test "$spice" = "yes" ; then
5817 echo "CONFIG_SPICE=y" >> $config_host_mak
5818 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
5819 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
5822 if test "$smartcard" = "yes" ; then
5823 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5824 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
5825 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
5828 if test "$libusb" = "yes" ; then
5829 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5830 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
5831 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
5834 if test "$usb_redir" = "yes" ; then
5835 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5836 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
5837 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
5840 if test "$opengl" = "yes" ; then
5841 echo "CONFIG_OPENGL=y" >> $config_host_mak
5842 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5843 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5846 if test "$gbm" = "yes" ; then
5847 echo "CONFIG_GBM=y" >> $config_host_mak
5848 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
5849 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
5853 if test "$avx2_opt" = "yes" ; then
5854 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5857 if test "$avx512f_opt" = "yes" ; then
5858 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
5861 # XXX: suppress that
5862 if [ "$bsd" = "yes" ] ; then
5863 echo "CONFIG_BSD=y" >> $config_host_mak
5866 if test "$qom_cast_debug" = "yes" ; then
5867 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5870 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5871 if test "$coroutine_pool" = "yes" ; then
5872 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5873 else
5874 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5877 if test "$debug_stack_usage" = "yes" ; then
5878 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5881 if test "$crypto_afalg" = "yes" ; then
5882 echo "CONFIG_AF_ALG=y" >> $config_host_mak
5885 if test "$open_by_handle_at" = "yes" ; then
5886 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5889 if test "$linux_magic_h" = "yes" ; then
5890 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5893 if test "$valgrind_h" = "yes" ; then
5894 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5897 if test "$have_asan_iface_fiber" = "yes" ; then
5898 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
5901 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
5902 echo "CONFIG_TSAN=y" >> $config_host_mak
5905 if test "$has_environ" = "yes" ; then
5906 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5909 if test "$cpuid_h" = "yes" ; then
5910 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5913 if test "$int128" = "yes" ; then
5914 echo "CONFIG_INT128=y" >> $config_host_mak
5917 if test "$atomic128" = "yes" ; then
5918 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5921 if test "$cmpxchg128" = "yes" ; then
5922 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
5925 if test "$atomic64" = "yes" ; then
5926 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5929 if test "$getauxval" = "yes" ; then
5930 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5933 if test "$libssh" = "yes" ; then
5934 echo "CONFIG_LIBSSH=y" >> $config_host_mak
5935 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
5936 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
5939 if test "$live_block_migration" = "yes" ; then
5940 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
5943 if test "$tpm" = "yes"; then
5944 echo 'CONFIG_TPM=y' >> $config_host_mak
5947 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5948 if have_backend "nop"; then
5949 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5951 if have_backend "simple"; then
5952 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5953 # Set the appropriate trace file.
5954 trace_file="\"$trace_file-\" FMT_pid"
5956 if have_backend "log"; then
5957 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5959 if have_backend "ust"; then
5960 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5961 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
5962 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
5964 if have_backend "dtrace"; then
5965 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5966 if test "$trace_backend_stap" = "yes" ; then
5967 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5970 if have_backend "ftrace"; then
5971 if test "$linux" = "yes" ; then
5972 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5973 else
5974 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5977 if have_backend "syslog"; then
5978 if test "$posix_syslog" = "yes" ; then
5979 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
5980 else
5981 feature_not_found "syslog(trace backend)" "syslog not available"
5984 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5986 if test "$rdma" = "yes" ; then
5987 echo "CONFIG_RDMA=y" >> $config_host_mak
5988 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
5991 if test "$pvrdma" = "yes" ; then
5992 echo "CONFIG_PVRDMA=y" >> $config_host_mak
5995 if test "$have_rtnetlink" = "yes" ; then
5996 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5999 if test "$libxml2" = "yes" ; then
6000 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6001 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6002 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6005 if test "$replication" = "yes" ; then
6006 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6009 if test "$have_af_vsock" = "yes" ; then
6010 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6013 if test "$have_sysmacros" = "yes" ; then
6014 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6017 if test "$have_static_assert" = "yes" ; then
6018 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6021 if test "$have_utmpx" = "yes" ; then
6022 echo "HAVE_UTMPX=y" >> $config_host_mak
6024 if test "$have_getrandom" = "yes" ; then
6025 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6027 if test "$ivshmem" = "yes" ; then
6028 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6030 if test "$debug_mutex" = "yes" ; then
6031 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6034 # Hold two types of flag:
6035 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6036 # a thread we have a handle to
6037 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
6038 # platform
6039 if test "$pthread_setname_np_w_tid" = "yes" ; then
6040 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6041 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6042 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6043 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6044 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
6047 if test "$libpmem" = "yes" ; then
6048 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6049 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
6050 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
6053 if test "$libdaxctl" = "yes" ; then
6054 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
6055 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
6058 if test "$bochs" = "yes" ; then
6059 echo "CONFIG_BOCHS=y" >> $config_host_mak
6061 if test "$cloop" = "yes" ; then
6062 echo "CONFIG_CLOOP=y" >> $config_host_mak
6064 if test "$dmg" = "yes" ; then
6065 echo "CONFIG_DMG=y" >> $config_host_mak
6067 if test "$qcow1" = "yes" ; then
6068 echo "CONFIG_QCOW1=y" >> $config_host_mak
6070 if test "$vdi" = "yes" ; then
6071 echo "CONFIG_VDI=y" >> $config_host_mak
6073 if test "$vvfat" = "yes" ; then
6074 echo "CONFIG_VVFAT=y" >> $config_host_mak
6076 if test "$qed" = "yes" ; then
6077 echo "CONFIG_QED=y" >> $config_host_mak
6079 if test "$parallels" = "yes" ; then
6080 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6082 if test "$sheepdog" = "yes" ; then
6083 add_to deprecated_features "sheepdog"
6084 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6086 if test "$have_mlockall" = "yes" ; then
6087 echo "HAVE_MLOCKALL=y" >> $config_host_mak
6089 if test "$fuzzing" = "yes" ; then
6090 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
6091 # needed CFLAGS have already been provided
6092 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
6093 # Add CFLAGS to tell clang to add fuzzer-related instrumentation to all the
6094 # compiled code.
6095 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
6096 # To build non-fuzzer binaries with --enable-fuzzing, link everything with
6097 # fsanitize=fuzzer-no-link. Otherwise, the linker will be unable to bind
6098 # the fuzzer-related callbacks added by instrumentation.
6099 QEMU_LDFLAGS="$QEMU_LDFLAGS -fsanitize=fuzzer-no-link"
6100 # For the actual fuzzer binaries, we need to link against the libfuzzer
6101 # library. Provide the flags for doing this in FUZZ_EXE_LDFLAGS. The meson
6102 # rule for the fuzzer adds these to the link_args. They need to be
6103 # configurable, to support OSS-Fuzz
6104 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
6105 else
6106 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
6110 if test "$plugins" = "yes" ; then
6111 echo "CONFIG_PLUGIN=y" >> $config_host_mak
6112 # Copy the export object list to the build dir
6113 if test "$ld_dynamic_list" = "yes" ; then
6114 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
6115 ld_symbols=qemu-plugins-ld.symbols
6116 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
6117 elif test "$ld_exported_symbols_list" = "yes" ; then
6118 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
6119 ld64_symbols=qemu-plugins-ld64.symbols
6120 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
6121 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
6122 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
6123 else
6124 error_exit \
6125 "If \$plugins=yes, either \$ld_dynamic_list or " \
6126 "\$ld_exported_symbols_list should have been set to 'yes'."
6130 if test -n "$gdb_bin"; then
6131 gdb_version=$($gdb_bin --version | head -n 1)
6132 if version_ge ${gdb_version##* } 9.1; then
6133 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
6137 if test "$secret_keyring" = "yes" ; then
6138 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
6141 echo "ROMS=$roms" >> $config_host_mak
6142 echo "MAKE=$make" >> $config_host_mak
6143 echo "PYTHON=$python" >> $config_host_mak
6144 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
6145 echo "MESON=$meson" >> $config_host_mak
6146 echo "NINJA=$ninja" >> $config_host_mak
6147 echo "CC=$cc" >> $config_host_mak
6148 if $iasl -h > /dev/null 2>&1; then
6149 echo "CONFIG_IASL=$iasl" >> $config_host_mak
6151 echo "CXX=$cxx" >> $config_host_mak
6152 echo "OBJCC=$objcc" >> $config_host_mak
6153 echo "AR=$ar" >> $config_host_mak
6154 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6155 echo "AS=$as" >> $config_host_mak
6156 echo "CCAS=$ccas" >> $config_host_mak
6157 echo "CPP=$cpp" >> $config_host_mak
6158 echo "OBJCOPY=$objcopy" >> $config_host_mak
6159 echo "LD=$ld" >> $config_host_mak
6160 echo "RANLIB=$ranlib" >> $config_host_mak
6161 echo "NM=$nm" >> $config_host_mak
6162 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
6163 echo "WINDRES=$windres" >> $config_host_mak
6164 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6165 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6166 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6167 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6168 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
6169 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6170 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6171 echo "EXESUF=$EXESUF" >> $config_host_mak
6172 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
6173 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
6174 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6175 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6176 if test "$gcov" = "yes" ; then
6177 echo "CONFIG_GCOV=y" >> $config_host_mak
6180 if test "$fuzzing" != "no"; then
6181 echo "CONFIG_FUZZ=y" >> $config_host_mak
6183 echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
6185 if test "$rng_none" = "yes"; then
6186 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
6189 # use included Linux headers
6190 if test "$linux" = "yes" ; then
6191 mkdir -p linux-headers
6192 case "$cpu" in
6193 i386|x86_64|x32)
6194 linux_arch=x86
6196 ppc|ppc64|ppc64le)
6197 linux_arch=powerpc
6199 s390x)
6200 linux_arch=s390
6202 aarch64)
6203 linux_arch=arm64
6205 mips64)
6206 linux_arch=mips
6209 # For most CPUs the kernel architecture name and QEMU CPU name match.
6210 linux_arch="$cpu"
6212 esac
6213 # For non-KVM architectures we will not have asm headers
6214 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6215 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6219 for target in $target_list; do
6220 target_dir="$target"
6221 target_name=$(echo $target | cut -d '-' -f 1)
6222 mkdir -p $target_dir
6223 case $target in
6224 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
6225 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
6226 esac
6227 done
6229 echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
6230 if test "$default_targets" = "yes"; then
6231 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
6234 if test "$numa" = "yes"; then
6235 echo "CONFIG_NUMA=y" >> $config_host_mak
6236 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
6239 if test "$ccache_cpp2" = "yes"; then
6240 echo "export CCACHE_CPP2=y" >> $config_host_mak
6243 if test "$safe_stack" = "yes"; then
6244 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
6247 # If we're using a separate build tree, set it up now.
6248 # DIRS are directories which we simply mkdir in the build tree;
6249 # LINKS are things to symlink back into the source tree
6250 # (these can be both files and directories).
6251 # Caution: do not add files or directories here using wildcards. This
6252 # will result in problems later if a new file matching the wildcard is
6253 # added to the source tree -- nothing will cause configure to be rerun
6254 # so the build tree will be missing the link back to the new file, and
6255 # tests might fail. Prefer to keep the relevant files in their own
6256 # directory and symlink the directory instead.
6257 # UNLINK is used to remove symlinks from older development versions
6258 # that might get into the way when doing "git update" without doing
6259 # a "make distclean" in between.
6260 DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
6261 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
6262 DIRS="$DIRS docs docs/interop fsdev scsi"
6263 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
6264 DIRS="$DIRS roms/seabios"
6265 DIRS="$DIRS contrib/plugins/"
6266 LINKS="Makefile"
6267 LINKS="$LINKS tests/tcg/lm32/Makefile"
6268 LINKS="$LINKS tests/tcg/Makefile.target"
6269 LINKS="$LINKS pc-bios/optionrom/Makefile"
6270 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
6271 LINKS="$LINKS roms/seabios/Makefile"
6272 LINKS="$LINKS pc-bios/qemu-icon.bmp"
6273 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
6274 LINKS="$LINKS tests/acceptance tests/data"
6275 LINKS="$LINKS tests/qemu-iotests/check"
6276 LINKS="$LINKS python"
6277 LINKS="$LINKS contrib/plugins/Makefile "
6278 UNLINK="pc-bios/keymaps"
6279 for bios_file in \
6280 $source_path/pc-bios/*.bin \
6281 $source_path/pc-bios/*.elf \
6282 $source_path/pc-bios/*.lid \
6283 $source_path/pc-bios/*.rom \
6284 $source_path/pc-bios/*.dtb \
6285 $source_path/pc-bios/*.img \
6286 $source_path/pc-bios/openbios-* \
6287 $source_path/pc-bios/u-boot.* \
6288 $source_path/pc-bios/edk2-*.fd.bz2 \
6289 $source_path/pc-bios/palcode-*
6291 LINKS="$LINKS pc-bios/$(basename $bios_file)"
6292 done
6293 mkdir -p $DIRS
6294 for f in $LINKS ; do
6295 if [ -e "$source_path/$f" ]; then
6296 symlink "$source_path/$f" "$f"
6298 done
6299 for f in $UNLINK ; do
6300 if [ -L "$f" ]; then
6301 rm -f "$f"
6303 done
6305 (for i in $cross_cc_vars; do
6306 export $i
6307 done
6308 export target_list source_path use_containers ARCH
6309 $source_path/tests/tcg/configure.sh)
6311 # temporary config to build submodules
6312 for rom in seabios; do
6313 config_mak=roms/$rom/config.mak
6314 echo "# Automatically generated by configure - do not modify" > $config_mak
6315 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6316 echo "AS=$as" >> $config_mak
6317 echo "CCAS=$ccas" >> $config_mak
6318 echo "CC=$cc" >> $config_mak
6319 echo "BCC=bcc" >> $config_mak
6320 echo "CPP=$cpp" >> $config_mak
6321 echo "OBJCOPY=objcopy" >> $config_mak
6322 echo "IASL=$iasl" >> $config_mak
6323 echo "LD=$ld" >> $config_mak
6324 echo "RANLIB=$ranlib" >> $config_mak
6325 done
6327 if test "$skip_meson" = no; then
6328 cross="config-meson.cross.new"
6329 meson_quote() {
6330 echo "'$(echo $* | sed "s/ /','/g")'"
6333 echo "# Automatically generated by configure - do not modify" > $cross
6334 echo "[properties]" >> $cross
6335 test -z "$cxx" && echo "link_language = 'c'" >> $cross
6336 echo "[built-in options]" >> $cross
6337 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
6338 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
6339 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6340 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6341 echo "[binaries]" >> $cross
6342 echo "c = [$(meson_quote $cc)]" >> $cross
6343 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
6344 test -n "$objcc" && echo "objc = [$(meson_quote $objcc)]" >> $cross
6345 echo "ar = [$(meson_quote $ar)]" >> $cross
6346 echo "nm = [$(meson_quote $nm)]" >> $cross
6347 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
6348 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
6349 if has $sdl2_config; then
6350 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
6352 echo "strip = [$(meson_quote $strip)]" >> $cross
6353 echo "windres = [$(meson_quote $windres)]" >> $cross
6354 if test "$cross_compile" = "yes"; then
6355 cross_arg="--cross-file config-meson.cross"
6356 echo "[host_machine]" >> $cross
6357 if test "$mingw32" = "yes" ; then
6358 echo "system = 'windows'" >> $cross
6360 if test "$linux" = "yes" ; then
6361 echo "system = 'linux'" >> $cross
6363 if test "$darwin" = "yes" ; then
6364 echo "system = 'darwin'" >> $cross
6366 case "$ARCH" in
6367 i386)
6368 echo "cpu_family = 'x86'" >> $cross
6370 x86_64)
6371 echo "cpu_family = 'x86_64'" >> $cross
6373 ppc64le)
6374 echo "cpu_family = 'ppc64'" >> $cross
6377 echo "cpu_family = '$ARCH'" >> $cross
6379 esac
6380 echo "cpu = '$cpu'" >> $cross
6381 if test "$bigendian" = "yes" ; then
6382 echo "endian = 'big'" >> $cross
6383 else
6384 echo "endian = 'little'" >> $cross
6386 else
6387 cross_arg="--native-file config-meson.cross"
6389 mv $cross config-meson.cross
6391 rm -rf meson-private meson-info meson-logs
6392 unset staticpic
6393 if ! version_ge "$($meson --version)" 0.56.0; then
6394 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
6396 NINJA=$ninja $meson setup \
6397 --prefix "$prefix" \
6398 --libdir "$libdir" \
6399 --libexecdir "$libexecdir" \
6400 --bindir "$bindir" \
6401 --includedir "$includedir" \
6402 --datadir "$datadir" \
6403 --mandir "$mandir" \
6404 --sysconfdir "$sysconfdir" \
6405 --localedir "$localedir" \
6406 --localstatedir "$local_statedir" \
6407 -Ddocdir="$docdir" \
6408 -Dqemu_firmwarepath="$firmwarepath" \
6409 -Dqemu_suffix="$qemu_suffix" \
6410 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
6411 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
6412 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
6413 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
6414 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
6415 ${staticpic:+-Db_staticpic=$staticpic} \
6416 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
6417 -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug \
6418 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
6419 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
6420 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
6421 -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
6422 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
6423 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
6424 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
6425 -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2 -Dlibiscsi=$libiscsi \
6426 -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
6427 -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse \
6428 -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng \
6429 -Dattr=$attr -Ddefault_devices=$default_devices \
6430 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
6431 -Dvhost_user_blk_server=$vhost_user_blk_server -Dmultiprocess=$multiprocess \
6432 -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek -Dguest_agent_msi=$guest_agent_msi \
6433 $(if test "$default_features" = no; then echo "-Dauto_features=disabled"; fi) \
6434 -Dtcg_interpreter=$tcg_interpreter \
6435 $cross_arg \
6436 "$PWD" "$source_path"
6438 if test "$?" -ne 0 ; then
6439 error_exit "meson setup failed"
6443 if test -n "${deprecated_features}"; then
6444 echo "Warning, deprecated features enabled."
6445 echo "Please see docs/system/deprecated.rst"
6446 echo " features: ${deprecated_features}"
6449 # Save the configure command line for later reuse.
6450 cat <<EOD >config.status
6451 #!/bin/sh
6452 # Generated by configure.
6453 # Run this file to recreate the current configuration.
6454 # Compiler output produced by configure, useful for debugging
6455 # configure, is in config.log if it exists.
6458 preserve_env() {
6459 envname=$1
6461 eval envval=\$$envname
6463 if test -n "$envval"
6464 then
6465 echo "$envname='$envval'" >> config.status
6466 echo "export $envname" >> config.status
6467 else
6468 echo "unset $envname" >> config.status
6472 # Preserve various env variables that influence what
6473 # features/build target configure will detect
6474 preserve_env AR
6475 preserve_env AS
6476 preserve_env CC
6477 preserve_env CPP
6478 preserve_env CXX
6479 preserve_env INSTALL
6480 preserve_env LD
6481 preserve_env LD_LIBRARY_PATH
6482 preserve_env LIBTOOL
6483 preserve_env MAKE
6484 preserve_env NM
6485 preserve_env OBJCOPY
6486 preserve_env PATH
6487 preserve_env PKG_CONFIG
6488 preserve_env PKG_CONFIG_LIBDIR
6489 preserve_env PKG_CONFIG_PATH
6490 preserve_env PYTHON
6491 preserve_env SDL2_CONFIG
6492 preserve_env SMBD
6493 preserve_env STRIP
6494 preserve_env WINDRES
6496 printf "exec" >>config.status
6497 for i in "$0" "$@"; do
6498 test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
6499 done
6500 echo ' "$@"' >>config.status
6501 chmod +x config.status
6503 rm -r "$TMPDIR1"