]> git.proxmox.com Git - mirror_qemu.git/blob - configure
18c26e0389741643748c70ac7788a996ef006834
[mirror_qemu.git] / configure
1 #!/bin/sh
2 #
3 # qemu configure script (c) 2003 Fabrice Bellard
4 #
5
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
10
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
13
14 # make source path absolute
15 source_path=$(cd "$(dirname -- "$0")"; pwd)
16
17 if test "$PWD" = "$source_path"
18 then
19 echo "Using './build' as the directory for build output"
20
21 MARKER=build/auto-created-by-configure
22
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
31 fi
32 fi
33
34 mkdir build
35 touch $MARKER
36
37 cat > GNUmakefile <<'EOF'
38 # This file is auto-generated by configure to support in-source tree
39 # 'make' command invocation
40
41 ifeq ($(MAKECMDGOALS),)
42 recurse: all
43 endif
44
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 ; \
53 fi
54 force: ;
55 .PHONY: force
56 GNUmakefile: ;
57
58 EOF
59 cd build
60 exec $source_path/configure "$@"
61 fi
62
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
74 fi
75
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"
82
83 rm -f config.log
84
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
91
92 print_error() {
93 (echo
94 echo "ERROR: $1"
95 while test -n "$2"; do
96 echo " $2"
97 shift
98 done
99 echo) >&2
100 }
101
102 error_exit() {
103 print_error "$@"
104 exit 1
105 }
106
107 do_compiler() {
108 # Run the compiler, capturing its output to the log. First argument
109 # is compiler binary to execute.
110 local compiler="$1"
111 shift
112 if test -n "$BASH_VERSION"; then eval '
113 echo >>config.log "
114 funcs: ${FUNCNAME[*]}
115 lines: ${BASH_LINENO[*]}"
116 '; fi
117 echo $compiler "$@" >> config.log
118 $compiler "$@" >> config.log 2>&1 || return $?
119 # Test passed. If this is an --enable-werror build, rerun
120 # the test with -Werror and bail out if it fails. This
121 # makes warning-generating-errors in configure test code
122 # obvious to developers.
123 if test "$werror" != "yes"; then
124 return 0
125 fi
126 # Don't bother rerunning the compile if we were already using -Werror
127 case "$*" in
128 *-Werror*)
129 return 0
130 ;;
131 esac
132 echo $compiler -Werror "$@" >> config.log
133 $compiler -Werror "$@" >> config.log 2>&1 && return $?
134 error_exit "configure test passed without -Werror but failed with -Werror." \
135 "This is probably a bug in the configure script. The failing command" \
136 "will be at the bottom of config.log." \
137 "You can run configure with --disable-werror to bypass this check."
138 }
139
140 do_cc() {
141 do_compiler "$cc" "$@"
142 }
143
144 do_cxx() {
145 do_compiler "$cxx" "$@"
146 }
147
148 # Append $2 to the variable named $1, with space separation
149 add_to() {
150 eval $1=\${$1:+\"\$$1 \"}\$2
151 }
152
153 update_cxxflags() {
154 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
155 # options which some versions of GCC's C++ compiler complain about
156 # because they only make sense for C programs.
157 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
158 CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
159 for arg in $QEMU_CFLAGS; do
160 case $arg in
161 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
162 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
163 ;;
164 *)
165 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
166 ;;
167 esac
168 done
169 }
170
171 compile_object() {
172 local_cflags="$1"
173 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
174 }
175
176 compile_prog() {
177 local_cflags="$1"
178 local_ldflags="$2"
179 do_cc $CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
180 $LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
181 }
182
183 # symbolically link $1 to $2. Portable version of "ln -sf".
184 symlink() {
185 rm -rf "$2"
186 mkdir -p "$(dirname "$2")"
187 ln -s "$1" "$2"
188 }
189
190 # check whether a command is available to this shell (may be either an
191 # executable or a builtin)
192 has() {
193 type "$1" >/dev/null 2>&1
194 }
195
196 version_ge () {
197 local_ver1=`echo $1 | tr . ' '`
198 local_ver2=`echo $2 | tr . ' '`
199 while true; do
200 set x $local_ver1
201 local_first=${2-0}
202 # 'shift 2' if $2 is set, or 'shift' if $2 is not set
203 shift ${2:+2}
204 local_ver1=$*
205 set x $local_ver2
206 # the second argument finished, the first must be greater or equal
207 test $# = 1 && return 0
208 test $local_first -lt $2 && return 1
209 test $local_first -gt $2 && return 0
210 shift ${2:+2}
211 local_ver2=$*
212 done
213 }
214
215 have_backend () {
216 echo "$trace_backends" | grep "$1" >/dev/null
217 }
218
219 glob() {
220 eval test -z '"${1#'"$2"'}"'
221 }
222
223 ld_has() {
224 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
225 }
226
227 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
228 then
229 error_exit "main directory cannot contain spaces nor colons"
230 fi
231
232 # default parameters
233 cpu=""
234 iasl="iasl"
235 interp_prefix="/usr/gnemul/qemu-%M"
236 static="no"
237 cross_prefix=""
238 audio_drv_list=""
239 block_drv_rw_whitelist=""
240 block_drv_ro_whitelist=""
241 host_cc="cc"
242 audio_win_int=""
243 libs_qga=""
244 debug_info="yes"
245 stack_protector=""
246 safe_stack=""
247 use_containers="yes"
248 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
249
250 if test -e "$source_path/.git"
251 then
252 git_update=yes
253 git_submodules="ui/keycodemapdb"
254 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
255 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
256 else
257 git_update=no
258 git_submodules=""
259
260 if ! test -f "$source_path/ui/keycodemapdb/README"
261 then
262 echo
263 echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
264 echo
265 echo "This is not a GIT checkout but module content appears to"
266 echo "be missing. Do not use 'git archive' or GitHub download links"
267 echo "to acquire QEMU source archives. Non-GIT builds are only"
268 echo "supported with source archives linked from:"
269 echo
270 echo " https://www.qemu.org/download/#source"
271 echo
272 echo "Developers working with GIT can use scripts/archive-source.sh"
273 echo "if they need to create valid source archives."
274 echo
275 exit 1
276 fi
277 fi
278 git="git"
279
280 # Don't accept a target_list environment variable.
281 unset target_list
282 unset target_list_exclude
283
284 # Default value for a variable defining feature "foo".
285 # * foo="no" feature will only be used if --enable-foo arg is given
286 # * foo="" feature will be searched for, and if found, will be used
287 # unless --disable-foo is given
288 # * foo="yes" this value will only be set by --enable-foo flag.
289 # feature will searched for,
290 # if not found, configure exits with error
291 #
292 # Always add --enable-foo and --disable-foo command line args.
293 # Distributions want to ensure that several features are compiled in, and it
294 # is impossible without a --enable-foo that exits if a feature is not found.
295
296 brlapi=""
297 curl=""
298 iconv="auto"
299 curses="auto"
300 docs="auto"
301 fdt="auto"
302 netmap="no"
303 sdl="auto"
304 sdl_image="auto"
305 virtiofsd="auto"
306 virtfs=""
307 libudev="auto"
308 mpath="auto"
309 vnc="enabled"
310 sparse="auto"
311 vde=""
312 vnc_sasl="auto"
313 vnc_jpeg="auto"
314 vnc_png="auto"
315 xkbcommon="auto"
316 xen=""
317 xen_ctrl_version=""
318 xen_pci_passthrough="auto"
319 linux_aio=""
320 linux_io_uring=""
321 cap_ng=""
322 attr=""
323 libattr=""
324 xfs=""
325 tcg="enabled"
326 membarrier=""
327 vhost_net=""
328 vhost_crypto=""
329 vhost_scsi=""
330 vhost_vsock=""
331 vhost_user="no"
332 vhost_user_blk_server="auto"
333 vhost_user_fs=""
334 kvm="auto"
335 hax="auto"
336 hvf="auto"
337 whpx="auto"
338 rdma=""
339 pvrdma=""
340 gprof="no"
341 debug_tcg="no"
342 debug="no"
343 sanitizers="no"
344 tsan="no"
345 fortify_source=""
346 strip_opt="yes"
347 tcg_interpreter="no"
348 bigendian="no"
349 mingw32="no"
350 gcov="no"
351 EXESUF=""
352 HOST_DSOSUF=".so"
353 modules="no"
354 module_upgrades="no"
355 prefix="/usr/local"
356 qemu_suffix="qemu"
357 slirp="auto"
358 oss_lib=""
359 bsd="no"
360 linux="no"
361 solaris="no"
362 profiler="no"
363 cocoa="auto"
364 softmmu="yes"
365 linux_user="no"
366 bsd_user="no"
367 blobs="true"
368 pkgversion=""
369 pie=""
370 qom_cast_debug="yes"
371 trace_backends="log"
372 trace_file="trace"
373 spice=""
374 rbd=""
375 smartcard=""
376 u2f="auto"
377 libusb=""
378 usb_redir=""
379 opengl=""
380 opengl_dmabuf="no"
381 cpuid_h="no"
382 avx2_opt=""
383 capstone="auto"
384 lzo=""
385 snappy=""
386 bzip2=""
387 lzfse=""
388 zstd=""
389 guest_agent=""
390 guest_agent_with_vss="no"
391 guest_agent_ntddscsi="no"
392 guest_agent_msi=""
393 vss_win32_sdk=""
394 win_sdk="no"
395 want_tools=""
396 libiscsi=""
397 libnfs=""
398 coroutine=""
399 coroutine_pool=""
400 debug_stack_usage="no"
401 crypto_afalg="no"
402 seccomp=""
403 glusterfs=""
404 glusterfs_xlator_opt="no"
405 glusterfs_discard="no"
406 glusterfs_fallocate="no"
407 glusterfs_zerofill="no"
408 glusterfs_ftruncate_has_stat="no"
409 glusterfs_iocb_has_stat="no"
410 gtk=""
411 gtk_gl="no"
412 tls_priority="NORMAL"
413 gnutls=""
414 nettle=""
415 nettle_xts="no"
416 gcrypt=""
417 gcrypt_hmac="no"
418 gcrypt_xts="no"
419 qemu_private_xts="yes"
420 auth_pam=""
421 vte=""
422 virglrenderer=""
423 tpm=""
424 libssh=""
425 live_block_migration="yes"
426 numa=""
427 tcmalloc="no"
428 jemalloc="no"
429 replication="yes"
430 bochs="yes"
431 cloop="yes"
432 dmg="yes"
433 qcow1="yes"
434 vdi="yes"
435 vvfat="yes"
436 qed="yes"
437 parallels="yes"
438 sheepdog="no"
439 libxml2=""
440 debug_mutex="no"
441 libpmem=""
442 default_devices="yes"
443 plugins="no"
444 fuzzing="no"
445 rng_none="no"
446 secret_keyring=""
447 libdaxctl=""
448 meson=""
449 ninja=""
450 skip_meson=no
451 gettext=""
452
453 bogus_os="no"
454 malloc_trim="auto"
455
456 # parse CC options first
457 for opt do
458 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
459 case "$opt" in
460 --cross-prefix=*) cross_prefix="$optarg"
461 ;;
462 --cc=*) CC="$optarg"
463 ;;
464 --cxx=*) CXX="$optarg"
465 ;;
466 --cpu=*) cpu="$optarg"
467 ;;
468 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
469 QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
470 ;;
471 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
472 ;;
473 --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
474 EXTRA_LDFLAGS="$optarg"
475 ;;
476 --enable-debug-info) debug_info="yes"
477 ;;
478 --disable-debug-info) debug_info="no"
479 ;;
480 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
481 ;;
482 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
483 eval "cross_cc_cflags_${cc_arch}=\$optarg"
484 cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
485 ;;
486 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
487 cc_archs="$cc_archs $cc_arch"
488 eval "cross_cc_${cc_arch}=\$optarg"
489 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
490 ;;
491 esac
492 done
493 # OS specific
494 # Using uname is really, really broken. Once we have the right set of checks
495 # we can eliminate its usage altogether.
496
497 # Preferred compiler:
498 # ${CC} (if set)
499 # ${cross_prefix}gcc (if cross-prefix specified)
500 # system compiler
501 if test -z "${CC}${cross_prefix}"; then
502 cc="$host_cc"
503 else
504 cc="${CC-${cross_prefix}gcc}"
505 fi
506
507 if test -z "${CXX}${cross_prefix}"; then
508 cxx="c++"
509 else
510 cxx="${CXX-${cross_prefix}g++}"
511 fi
512
513 ar="${AR-${cross_prefix}ar}"
514 as="${AS-${cross_prefix}as}"
515 ccas="${CCAS-$cc}"
516 cpp="${CPP-$cc -E}"
517 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
518 ld="${LD-${cross_prefix}ld}"
519 ranlib="${RANLIB-${cross_prefix}ranlib}"
520 nm="${NM-${cross_prefix}nm}"
521 strip="${STRIP-${cross_prefix}strip}"
522 windres="${WINDRES-${cross_prefix}windres}"
523 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
524 query_pkg_config() {
525 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
526 }
527 pkg_config=query_pkg_config
528 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
529
530 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
531 ARFLAGS="${ARFLAGS-rv}"
532
533 # default flags for all hosts
534 # We use -fwrapv to tell the compiler that we require a C dialect where
535 # left shift of signed integers is well defined and has the expected
536 # 2s-complement style results. (Both clang and gcc agree that it
537 # provides these semantics.)
538 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
539 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
540 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
541 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
542
543 # Flags that are needed during configure but later taken care of by Meson
544 CONFIGURE_CFLAGS="-std=gnu99 -Wall"
545 CONFIGURE_LDFLAGS=
546
547
548 check_define() {
549 cat > $TMPC <<EOF
550 #if !defined($1)
551 #error $1 not defined
552 #endif
553 int main(void) { return 0; }
554 EOF
555 compile_object
556 }
557
558 check_include() {
559 cat > $TMPC <<EOF
560 #include <$1>
561 int main(void) { return 0; }
562 EOF
563 compile_object
564 }
565
566 write_c_skeleton() {
567 cat > $TMPC <<EOF
568 int main(void) { return 0; }
569 EOF
570 }
571
572 write_c_fuzzer_skeleton() {
573 cat > $TMPC <<EOF
574 #include <stdint.h>
575 #include <sys/types.h>
576 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
577 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
578 EOF
579 }
580
581 if check_define __linux__ ; then
582 targetos="Linux"
583 elif check_define _WIN32 ; then
584 targetos='MINGW32'
585 elif check_define __OpenBSD__ ; then
586 targetos='OpenBSD'
587 elif check_define __sun__ ; then
588 targetos='SunOS'
589 elif check_define __HAIKU__ ; then
590 targetos='Haiku'
591 elif check_define __FreeBSD__ ; then
592 targetos='FreeBSD'
593 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
594 targetos='GNU/kFreeBSD'
595 elif check_define __DragonFly__ ; then
596 targetos='DragonFly'
597 elif check_define __NetBSD__; then
598 targetos='NetBSD'
599 elif check_define __APPLE__; then
600 targetos='Darwin'
601 else
602 # This is a fatal error, but don't report it yet, because we
603 # might be going to just print the --help text, or it might
604 # be the result of a missing compiler.
605 targetos='bogus'
606 bogus_os='yes'
607 fi
608
609 # Some host OSes need non-standard checks for which CPU to use.
610 # Note that these checks are broken for cross-compilation: if you're
611 # cross-compiling to one of these OSes then you'll need to specify
612 # the correct CPU with the --cpu option.
613 case $targetos in
614 Darwin)
615 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
616 # run 64-bit userspace code.
617 # If the user didn't specify a CPU explicitly and the kernel says this is
618 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
619 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
620 cpu="x86_64"
621 fi
622 HOST_DSOSUF=".dylib"
623 ;;
624 SunOS)
625 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
626 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
627 cpu="x86_64"
628 fi
629 esac
630
631 if test ! -z "$cpu" ; then
632 # command line argument
633 :
634 elif check_define __i386__ ; then
635 cpu="i386"
636 elif check_define __x86_64__ ; then
637 if check_define __ILP32__ ; then
638 cpu="x32"
639 else
640 cpu="x86_64"
641 fi
642 elif check_define __sparc__ ; then
643 if check_define __arch64__ ; then
644 cpu="sparc64"
645 else
646 cpu="sparc"
647 fi
648 elif check_define _ARCH_PPC ; then
649 if check_define _ARCH_PPC64 ; then
650 if check_define _LITTLE_ENDIAN ; then
651 cpu="ppc64le"
652 else
653 cpu="ppc64"
654 fi
655 else
656 cpu="ppc"
657 fi
658 elif check_define __mips__ ; then
659 cpu="mips"
660 elif check_define __s390__ ; then
661 if check_define __s390x__ ; then
662 cpu="s390x"
663 else
664 cpu="s390"
665 fi
666 elif check_define __riscv ; then
667 if check_define _LP64 ; then
668 cpu="riscv64"
669 else
670 cpu="riscv32"
671 fi
672 elif check_define __arm__ ; then
673 cpu="arm"
674 elif check_define __aarch64__ ; then
675 cpu="aarch64"
676 else
677 cpu=$(uname -m)
678 fi
679
680 ARCH=
681 # Normalise host CPU name and set ARCH.
682 # Note that this case should only have supported host CPUs, not guests.
683 case "$cpu" in
684 ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
685 ;;
686 ppc64le)
687 ARCH="ppc64"
688 ;;
689 i386|i486|i586|i686|i86pc|BePC)
690 cpu="i386"
691 ;;
692 x86_64|amd64)
693 cpu="x86_64"
694 ;;
695 armv*b|armv*l|arm)
696 cpu="arm"
697 ;;
698 aarch64)
699 cpu="aarch64"
700 ;;
701 mips*)
702 cpu="mips"
703 ;;
704 sparc|sun4[cdmuv])
705 cpu="sparc"
706 ;;
707 *)
708 # This will result in either an error or falling back to TCI later
709 ARCH=unknown
710 ;;
711 esac
712 if test -z "$ARCH"; then
713 ARCH="$cpu"
714 fi
715
716 # OS specific
717
718 case $targetos in
719 MINGW32*)
720 mingw32="yes"
721 audio_possible_drivers="dsound sdl"
722 if check_include dsound.h; then
723 audio_drv_list="dsound"
724 else
725 audio_drv_list=""
726 fi
727 supported_os="yes"
728 pie="no"
729 ;;
730 GNU/kFreeBSD)
731 bsd="yes"
732 audio_drv_list="oss try-sdl"
733 audio_possible_drivers="oss sdl pa"
734 ;;
735 FreeBSD)
736 bsd="yes"
737 make="${MAKE-gmake}"
738 audio_drv_list="oss try-sdl"
739 audio_possible_drivers="oss sdl pa"
740 # needed for kinfo_getvmmap(3) in libutil.h
741 netmap="" # enable netmap autodetect
742 ;;
743 DragonFly)
744 bsd="yes"
745 make="${MAKE-gmake}"
746 audio_drv_list="oss try-sdl"
747 audio_possible_drivers="oss sdl pa"
748 ;;
749 NetBSD)
750 bsd="yes"
751 make="${MAKE-gmake}"
752 audio_drv_list="oss try-sdl"
753 audio_possible_drivers="oss sdl"
754 oss_lib="-lossaudio"
755 ;;
756 OpenBSD)
757 bsd="yes"
758 make="${MAKE-gmake}"
759 audio_drv_list="try-sdl"
760 audio_possible_drivers="sdl"
761 ;;
762 Darwin)
763 bsd="yes"
764 darwin="yes"
765 if [ "$cpu" = "x86_64" ] ; then
766 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
767 QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
768 fi
769 cocoa="enabled"
770 audio_drv_list="coreaudio try-sdl"
771 audio_possible_drivers="coreaudio sdl"
772 QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
773 # Disable attempts to use ObjectiveC features in os/object.h since they
774 # won't work when we're compiling with gcc as a C compiler.
775 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
776 ;;
777 SunOS)
778 solaris="yes"
779 make="${MAKE-gmake}"
780 smbd="${SMBD-/usr/sfw/sbin/smbd}"
781 if test -f /usr/include/sys/soundcard.h ; then
782 audio_drv_list="oss try-sdl"
783 fi
784 audio_possible_drivers="oss sdl"
785 # needed for CMSG_ macros in sys/socket.h
786 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
787 # needed for TIOCWIN* defines in termios.h
788 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
789 ;;
790 Haiku)
791 haiku="yes"
792 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE $QEMU_CFLAGS"
793 ;;
794 Linux)
795 audio_drv_list="try-pa oss"
796 audio_possible_drivers="oss alsa sdl pa"
797 linux="yes"
798 linux_user="yes"
799 vhost_user="yes"
800 ;;
801 esac
802
803 if [ "$bsd" = "yes" ] ; then
804 if [ "$darwin" != "yes" ] ; then
805 bsd_user="yes"
806 fi
807 fi
808
809 : ${make=${MAKE-make}}
810
811 # We prefer python 3.x. A bare 'python' is traditionally
812 # python 2.x, but some distros have it as python 3.x, so
813 # we check that too
814 python=
815 explicit_python=no
816 for binary in "${PYTHON-python3}" python
817 do
818 if has "$binary"
819 then
820 python=$(command -v "$binary")
821 break
822 fi
823 done
824
825
826 # Check for ancillary tools used in testing
827 genisoimage=
828 for binary in genisoimage mkisofs
829 do
830 if has $binary
831 then
832 genisoimage=$(command -v "$binary")
833 break
834 fi
835 done
836
837 : ${smbd=${SMBD-/usr/sbin/smbd}}
838
839 # Default objcc to clang if available, otherwise use CC
840 if has clang; then
841 objcc=clang
842 else
843 objcc="$cc"
844 fi
845
846 if test "$mingw32" = "yes" ; then
847 EXESUF=".exe"
848 HOST_DSOSUF=".dll"
849 # MinGW needs -mthreads for TLS and macro _MT.
850 CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
851 write_c_skeleton;
852 prefix="/qemu"
853 qemu_suffix=""
854 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
855 fi
856
857 werror=""
858
859 for opt do
860 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
861 case "$opt" in
862 --help|-h) show_help=yes
863 ;;
864 --version|-V) exec cat $source_path/VERSION
865 ;;
866 --prefix=*) prefix="$optarg"
867 ;;
868 --interp-prefix=*) interp_prefix="$optarg"
869 ;;
870 --cross-prefix=*)
871 ;;
872 --cc=*)
873 ;;
874 --host-cc=*) host_cc="$optarg"
875 ;;
876 --cxx=*)
877 ;;
878 --iasl=*) iasl="$optarg"
879 ;;
880 --objcc=*) objcc="$optarg"
881 ;;
882 --make=*) make="$optarg"
883 ;;
884 --install=*)
885 ;;
886 --python=*) python="$optarg" ; explicit_python=yes
887 ;;
888 --sphinx-build=*) sphinx_build="$optarg"
889 ;;
890 --skip-meson) skip_meson=yes
891 ;;
892 --meson=*) meson="$optarg"
893 ;;
894 --ninja=*) ninja="$optarg"
895 ;;
896 --smbd=*) smbd="$optarg"
897 ;;
898 --extra-cflags=*)
899 ;;
900 --extra-cxxflags=*)
901 ;;
902 --extra-ldflags=*)
903 ;;
904 --enable-debug-info)
905 ;;
906 --disable-debug-info)
907 ;;
908 --cross-cc-*)
909 ;;
910 --enable-modules)
911 modules="yes"
912 ;;
913 --disable-modules)
914 modules="no"
915 ;;
916 --disable-module-upgrades) module_upgrades="no"
917 ;;
918 --enable-module-upgrades) module_upgrades="yes"
919 ;;
920 --cpu=*)
921 ;;
922 --target-list=*) target_list="$optarg"
923 if test "$target_list_exclude"; then
924 error_exit "Can't mix --target-list with --target-list-exclude"
925 fi
926 ;;
927 --target-list-exclude=*) target_list_exclude="$optarg"
928 if test "$target_list"; then
929 error_exit "Can't mix --target-list-exclude with --target-list"
930 fi
931 ;;
932 --enable-trace-backends=*) trace_backends="$optarg"
933 ;;
934 # XXX: backwards compatibility
935 --enable-trace-backend=*) trace_backends="$optarg"
936 ;;
937 --with-trace-file=*) trace_file="$optarg"
938 ;;
939 --with-default-devices) default_devices="yes"
940 ;;
941 --without-default-devices) default_devices="no"
942 ;;
943 --enable-gprof) gprof="yes"
944 ;;
945 --enable-gcov) gcov="yes"
946 ;;
947 --static)
948 static="yes"
949 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
950 ;;
951 --mandir=*) mandir="$optarg"
952 ;;
953 --bindir=*) bindir="$optarg"
954 ;;
955 --libdir=*) libdir="$optarg"
956 ;;
957 --libexecdir=*) libexecdir="$optarg"
958 ;;
959 --includedir=*) includedir="$optarg"
960 ;;
961 --datadir=*) datadir="$optarg"
962 ;;
963 --with-suffix=*) qemu_suffix="$optarg"
964 ;;
965 --docdir=*) docdir="$optarg"
966 ;;
967 --localedir=*) localedir="$optarg"
968 ;;
969 --sysconfdir=*) sysconfdir="$optarg"
970 ;;
971 --localstatedir=*) local_statedir="$optarg"
972 ;;
973 --firmwarepath=*) firmwarepath="$optarg"
974 ;;
975 --host=*|--build=*|\
976 --disable-dependency-tracking|\
977 --sbindir=*|--sharedstatedir=*|\
978 --oldincludedir=*|--datarootdir=*|--infodir=*|\
979 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
980 # These switches are silently ignored, for compatibility with
981 # autoconf-generated configure scripts. This allows QEMU's
982 # configure to be used by RPM and similar macros that set
983 # lots of directory switches by default.
984 ;;
985 --disable-sdl) sdl="disabled"
986 ;;
987 --enable-sdl) sdl="enabled"
988 ;;
989 --disable-sdl-image) sdl_image="disabled"
990 ;;
991 --enable-sdl-image) sdl_image="enabled"
992 ;;
993 --disable-qom-cast-debug) qom_cast_debug="no"
994 ;;
995 --enable-qom-cast-debug) qom_cast_debug="yes"
996 ;;
997 --disable-virtfs) virtfs="no"
998 ;;
999 --enable-virtfs) virtfs="yes"
1000 ;;
1001 --disable-libudev) libudev="disabled"
1002 ;;
1003 --enable-libudev) libudev="enabled"
1004 ;;
1005 --disable-virtiofsd) virtiofsd="disabled"
1006 ;;
1007 --enable-virtiofsd) virtiofsd="enabled"
1008 ;;
1009 --disable-mpath) mpath="disabled"
1010 ;;
1011 --enable-mpath) mpath="enabled"
1012 ;;
1013 --disable-vnc) vnc="disabled"
1014 ;;
1015 --enable-vnc) vnc="enabled"
1016 ;;
1017 --disable-gettext) gettext="false"
1018 ;;
1019 --enable-gettext) gettext="true"
1020 ;;
1021 --oss-lib=*) oss_lib="$optarg"
1022 ;;
1023 --audio-drv-list=*) audio_drv_list="$optarg"
1024 ;;
1025 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1026 ;;
1027 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1028 ;;
1029 --enable-debug-tcg) debug_tcg="yes"
1030 ;;
1031 --disable-debug-tcg) debug_tcg="no"
1032 ;;
1033 --enable-debug)
1034 # Enable debugging options that aren't excessively noisy
1035 debug_tcg="yes"
1036 debug_mutex="yes"
1037 debug="yes"
1038 strip_opt="no"
1039 fortify_source="no"
1040 ;;
1041 --enable-sanitizers) sanitizers="yes"
1042 ;;
1043 --disable-sanitizers) sanitizers="no"
1044 ;;
1045 --enable-tsan) tsan="yes"
1046 ;;
1047 --disable-tsan) tsan="no"
1048 ;;
1049 --enable-sparse) sparse="enabled"
1050 ;;
1051 --disable-sparse) sparse="disabled"
1052 ;;
1053 --disable-strip) strip_opt="no"
1054 ;;
1055 --disable-vnc-sasl) vnc_sasl="disabled"
1056 ;;
1057 --enable-vnc-sasl) vnc_sasl="enabled"
1058 ;;
1059 --disable-vnc-jpeg) vnc_jpeg="disabled"
1060 ;;
1061 --enable-vnc-jpeg) vnc_jpeg="enabled"
1062 ;;
1063 --disable-vnc-png) vnc_png="disabled"
1064 ;;
1065 --enable-vnc-png) vnc_png="enabled"
1066 ;;
1067 --disable-slirp) slirp="disabled"
1068 ;;
1069 --enable-slirp=git) slirp="internal"
1070 ;;
1071 --enable-slirp=system) slirp="system"
1072 ;;
1073 --disable-vde) vde="no"
1074 ;;
1075 --enable-vde) vde="yes"
1076 ;;
1077 --disable-netmap) netmap="no"
1078 ;;
1079 --enable-netmap) netmap="yes"
1080 ;;
1081 --disable-xen) xen="disabled"
1082 ;;
1083 --enable-xen) xen="enabled"
1084 ;;
1085 --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
1086 ;;
1087 --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
1088 ;;
1089 --disable-brlapi) brlapi="no"
1090 ;;
1091 --enable-brlapi) brlapi="yes"
1092 ;;
1093 --disable-kvm) kvm="disabled"
1094 ;;
1095 --enable-kvm) kvm="enabled"
1096 ;;
1097 --disable-hax) hax="disabled"
1098 ;;
1099 --enable-hax) hax="enabled"
1100 ;;
1101 --disable-hvf) hvf="disabled"
1102 ;;
1103 --enable-hvf) hvf="enabled"
1104 ;;
1105 --disable-whpx) whpx="disabled"
1106 ;;
1107 --enable-whpx) whpx="enabled"
1108 ;;
1109 --disable-tcg-interpreter) tcg_interpreter="no"
1110 ;;
1111 --enable-tcg-interpreter) tcg_interpreter="yes"
1112 ;;
1113 --disable-cap-ng) cap_ng="no"
1114 ;;
1115 --enable-cap-ng) cap_ng="yes"
1116 ;;
1117 --disable-tcg) tcg="disabled"
1118 ;;
1119 --enable-tcg) tcg="enabled"
1120 ;;
1121 --disable-malloc-trim) malloc_trim="disabled"
1122 ;;
1123 --enable-malloc-trim) malloc_trim="enabled"
1124 ;;
1125 --disable-spice) spice="no"
1126 ;;
1127 --enable-spice) spice="yes"
1128 ;;
1129 --disable-libiscsi) libiscsi="no"
1130 ;;
1131 --enable-libiscsi) libiscsi="yes"
1132 ;;
1133 --disable-libnfs) libnfs="no"
1134 ;;
1135 --enable-libnfs) libnfs="yes"
1136 ;;
1137 --enable-profiler) profiler="yes"
1138 ;;
1139 --disable-cocoa) cocoa="disabled"
1140 ;;
1141 --enable-cocoa)
1142 cocoa="enabled" ;
1143 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1144 ;;
1145 --disable-system) softmmu="no"
1146 ;;
1147 --enable-system) softmmu="yes"
1148 ;;
1149 --disable-user)
1150 linux_user="no" ;
1151 bsd_user="no" ;
1152 ;;
1153 --enable-user) ;;
1154 --disable-linux-user) linux_user="no"
1155 ;;
1156 --enable-linux-user) linux_user="yes"
1157 ;;
1158 --disable-bsd-user) bsd_user="no"
1159 ;;
1160 --enable-bsd-user) bsd_user="yes"
1161 ;;
1162 --enable-pie) pie="yes"
1163 ;;
1164 --disable-pie) pie="no"
1165 ;;
1166 --enable-werror) werror="yes"
1167 ;;
1168 --disable-werror) werror="no"
1169 ;;
1170 --enable-stack-protector) stack_protector="yes"
1171 ;;
1172 --disable-stack-protector) stack_protector="no"
1173 ;;
1174 --enable-safe-stack) safe_stack="yes"
1175 ;;
1176 --disable-safe-stack) safe_stack="no"
1177 ;;
1178 --disable-curses) curses="disabled"
1179 ;;
1180 --enable-curses) curses="enabled"
1181 ;;
1182 --disable-iconv) iconv="disabled"
1183 ;;
1184 --enable-iconv) iconv="enabled"
1185 ;;
1186 --disable-curl) curl="no"
1187 ;;
1188 --enable-curl) curl="yes"
1189 ;;
1190 --disable-fdt) fdt="disabled"
1191 ;;
1192 --enable-fdt) fdt="enabled"
1193 ;;
1194 --enable-fdt=git) fdt="internal"
1195 ;;
1196 --enable-fdt=system) fdt="system"
1197 ;;
1198 --disable-linux-aio) linux_aio="no"
1199 ;;
1200 --enable-linux-aio) linux_aio="yes"
1201 ;;
1202 --disable-linux-io-uring) linux_io_uring="no"
1203 ;;
1204 --enable-linux-io-uring) linux_io_uring="yes"
1205 ;;
1206 --disable-attr) attr="no"
1207 ;;
1208 --enable-attr) attr="yes"
1209 ;;
1210 --disable-membarrier) membarrier="no"
1211 ;;
1212 --enable-membarrier) membarrier="yes"
1213 ;;
1214 --disable-blobs) blobs="false"
1215 ;;
1216 --with-pkgversion=*) pkgversion="$optarg"
1217 ;;
1218 --with-coroutine=*) coroutine="$optarg"
1219 ;;
1220 --disable-coroutine-pool) coroutine_pool="no"
1221 ;;
1222 --enable-coroutine-pool) coroutine_pool="yes"
1223 ;;
1224 --enable-debug-stack-usage) debug_stack_usage="yes"
1225 ;;
1226 --enable-crypto-afalg) crypto_afalg="yes"
1227 ;;
1228 --disable-crypto-afalg) crypto_afalg="no"
1229 ;;
1230 --disable-docs) docs="disabled"
1231 ;;
1232 --enable-docs) docs="enabled"
1233 ;;
1234 --disable-vhost-net) vhost_net="no"
1235 ;;
1236 --enable-vhost-net) vhost_net="yes"
1237 ;;
1238 --disable-vhost-crypto) vhost_crypto="no"
1239 ;;
1240 --enable-vhost-crypto) vhost_crypto="yes"
1241 ;;
1242 --disable-vhost-scsi) vhost_scsi="no"
1243 ;;
1244 --enable-vhost-scsi) vhost_scsi="yes"
1245 ;;
1246 --disable-vhost-vsock) vhost_vsock="no"
1247 ;;
1248 --enable-vhost-vsock) vhost_vsock="yes"
1249 ;;
1250 --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
1251 ;;
1252 --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
1253 ;;
1254 --disable-vhost-user-fs) vhost_user_fs="no"
1255 ;;
1256 --enable-vhost-user-fs) vhost_user_fs="yes"
1257 ;;
1258 --disable-opengl) opengl="no"
1259 ;;
1260 --enable-opengl) opengl="yes"
1261 ;;
1262 --disable-rbd) rbd="no"
1263 ;;
1264 --enable-rbd) rbd="yes"
1265 ;;
1266 --disable-xfsctl) xfs="no"
1267 ;;
1268 --enable-xfsctl) xfs="yes"
1269 ;;
1270 --disable-smartcard) smartcard="no"
1271 ;;
1272 --enable-smartcard) smartcard="yes"
1273 ;;
1274 --disable-u2f) u2f="disabled"
1275 ;;
1276 --enable-u2f) u2f="enabled"
1277 ;;
1278 --disable-libusb) libusb="no"
1279 ;;
1280 --enable-libusb) libusb="yes"
1281 ;;
1282 --disable-usb-redir) usb_redir="no"
1283 ;;
1284 --enable-usb-redir) usb_redir="yes"
1285 ;;
1286 --disable-zlib-test)
1287 ;;
1288 --disable-lzo) lzo="no"
1289 ;;
1290 --enable-lzo) lzo="yes"
1291 ;;
1292 --disable-snappy) snappy="no"
1293 ;;
1294 --enable-snappy) snappy="yes"
1295 ;;
1296 --disable-bzip2) bzip2="no"
1297 ;;
1298 --enable-bzip2) bzip2="yes"
1299 ;;
1300 --enable-lzfse) lzfse="yes"
1301 ;;
1302 --disable-lzfse) lzfse="no"
1303 ;;
1304 --disable-zstd) zstd="no"
1305 ;;
1306 --enable-zstd) zstd="yes"
1307 ;;
1308 --enable-guest-agent) guest_agent="yes"
1309 ;;
1310 --disable-guest-agent) guest_agent="no"
1311 ;;
1312 --enable-guest-agent-msi) guest_agent_msi="yes"
1313 ;;
1314 --disable-guest-agent-msi) guest_agent_msi="no"
1315 ;;
1316 --with-vss-sdk) vss_win32_sdk=""
1317 ;;
1318 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1319 ;;
1320 --without-vss-sdk) vss_win32_sdk="no"
1321 ;;
1322 --with-win-sdk) win_sdk=""
1323 ;;
1324 --with-win-sdk=*) win_sdk="$optarg"
1325 ;;
1326 --without-win-sdk) win_sdk="no"
1327 ;;
1328 --enable-tools) want_tools="yes"
1329 ;;
1330 --disable-tools) want_tools="no"
1331 ;;
1332 --enable-seccomp) seccomp="yes"
1333 ;;
1334 --disable-seccomp) seccomp="no"
1335 ;;
1336 --disable-glusterfs) glusterfs="no"
1337 ;;
1338 --disable-avx2) avx2_opt="no"
1339 ;;
1340 --enable-avx2) avx2_opt="yes"
1341 ;;
1342 --disable-avx512f) avx512f_opt="no"
1343 ;;
1344 --enable-avx512f) avx512f_opt="yes"
1345 ;;
1346
1347 --enable-glusterfs) glusterfs="yes"
1348 ;;
1349 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1350 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1351 ;;
1352 --enable-vhdx|--disable-vhdx)
1353 echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1354 ;;
1355 --enable-uuid|--disable-uuid)
1356 echo "$0: $opt is obsolete, UUID support is always built" >&2
1357 ;;
1358 --disable-gtk) gtk="no"
1359 ;;
1360 --enable-gtk) gtk="yes"
1361 ;;
1362 --tls-priority=*) tls_priority="$optarg"
1363 ;;
1364 --disable-gnutls) gnutls="no"
1365 ;;
1366 --enable-gnutls) gnutls="yes"
1367 ;;
1368 --disable-nettle) nettle="no"
1369 ;;
1370 --enable-nettle) nettle="yes"
1371 ;;
1372 --disable-gcrypt) gcrypt="no"
1373 ;;
1374 --enable-gcrypt) gcrypt="yes"
1375 ;;
1376 --disable-auth-pam) auth_pam="no"
1377 ;;
1378 --enable-auth-pam) auth_pam="yes"
1379 ;;
1380 --enable-rdma) rdma="yes"
1381 ;;
1382 --disable-rdma) rdma="no"
1383 ;;
1384 --enable-pvrdma) pvrdma="yes"
1385 ;;
1386 --disable-pvrdma) pvrdma="no"
1387 ;;
1388 --disable-vte) vte="no"
1389 ;;
1390 --enable-vte) vte="yes"
1391 ;;
1392 --disable-virglrenderer) virglrenderer="no"
1393 ;;
1394 --enable-virglrenderer) virglrenderer="yes"
1395 ;;
1396 --disable-tpm) tpm="no"
1397 ;;
1398 --enable-tpm) tpm="yes"
1399 ;;
1400 --disable-libssh) libssh="no"
1401 ;;
1402 --enable-libssh) libssh="yes"
1403 ;;
1404 --disable-live-block-migration) live_block_migration="no"
1405 ;;
1406 --enable-live-block-migration) live_block_migration="yes"
1407 ;;
1408 --disable-numa) numa="no"
1409 ;;
1410 --enable-numa) numa="yes"
1411 ;;
1412 --disable-libxml2) libxml2="no"
1413 ;;
1414 --enable-libxml2) libxml2="yes"
1415 ;;
1416 --disable-tcmalloc) tcmalloc="no"
1417 ;;
1418 --enable-tcmalloc) tcmalloc="yes"
1419 ;;
1420 --disable-jemalloc) jemalloc="no"
1421 ;;
1422 --enable-jemalloc) jemalloc="yes"
1423 ;;
1424 --disable-replication) replication="no"
1425 ;;
1426 --enable-replication) replication="yes"
1427 ;;
1428 --disable-bochs) bochs="no"
1429 ;;
1430 --enable-bochs) bochs="yes"
1431 ;;
1432 --disable-cloop) cloop="no"
1433 ;;
1434 --enable-cloop) cloop="yes"
1435 ;;
1436 --disable-dmg) dmg="no"
1437 ;;
1438 --enable-dmg) dmg="yes"
1439 ;;
1440 --disable-qcow1) qcow1="no"
1441 ;;
1442 --enable-qcow1) qcow1="yes"
1443 ;;
1444 --disable-vdi) vdi="no"
1445 ;;
1446 --enable-vdi) vdi="yes"
1447 ;;
1448 --disable-vvfat) vvfat="no"
1449 ;;
1450 --enable-vvfat) vvfat="yes"
1451 ;;
1452 --disable-qed) qed="no"
1453 ;;
1454 --enable-qed) qed="yes"
1455 ;;
1456 --disable-parallels) parallels="no"
1457 ;;
1458 --enable-parallels) parallels="yes"
1459 ;;
1460 --disable-sheepdog) sheepdog="no"
1461 ;;
1462 --enable-sheepdog) sheepdog="yes"
1463 ;;
1464 --disable-vhost-user) vhost_user="no"
1465 ;;
1466 --enable-vhost-user) vhost_user="yes"
1467 ;;
1468 --disable-vhost-vdpa) vhost_vdpa="no"
1469 ;;
1470 --enable-vhost-vdpa) vhost_vdpa="yes"
1471 ;;
1472 --disable-vhost-kernel) vhost_kernel="no"
1473 ;;
1474 --enable-vhost-kernel) vhost_kernel="yes"
1475 ;;
1476 --disable-capstone) capstone="disabled"
1477 ;;
1478 --enable-capstone) capstone="enabled"
1479 ;;
1480 --enable-capstone=git) capstone="internal"
1481 ;;
1482 --enable-capstone=system) capstone="system"
1483 ;;
1484 --with-git=*) git="$optarg"
1485 ;;
1486 --enable-git-update) git_update=yes
1487 ;;
1488 --disable-git-update) git_update=no
1489 ;;
1490 --enable-debug-mutex) debug_mutex=yes
1491 ;;
1492 --disable-debug-mutex) debug_mutex=no
1493 ;;
1494 --enable-libpmem) libpmem=yes
1495 ;;
1496 --disable-libpmem) libpmem=no
1497 ;;
1498 --enable-xkbcommon) xkbcommon="enabled"
1499 ;;
1500 --disable-xkbcommon) xkbcommon="disabled"
1501 ;;
1502 --enable-plugins) plugins="yes"
1503 ;;
1504 --disable-plugins) plugins="no"
1505 ;;
1506 --enable-containers) use_containers="yes"
1507 ;;
1508 --disable-containers) use_containers="no"
1509 ;;
1510 --enable-fuzzing) fuzzing=yes
1511 ;;
1512 --disable-fuzzing) fuzzing=no
1513 ;;
1514 --gdb=*) gdb_bin="$optarg"
1515 ;;
1516 --enable-rng-none) rng_none=yes
1517 ;;
1518 --disable-rng-none) rng_none=no
1519 ;;
1520 --enable-keyring) secret_keyring="yes"
1521 ;;
1522 --disable-keyring) secret_keyring="no"
1523 ;;
1524 --enable-libdaxctl) libdaxctl=yes
1525 ;;
1526 --disable-libdaxctl) libdaxctl=no
1527 ;;
1528 *)
1529 echo "ERROR: unknown option $opt"
1530 echo "Try '$0 --help' for more information"
1531 exit 1
1532 ;;
1533 esac
1534 done
1535
1536 libdir="${libdir:-$prefix/lib}"
1537 libexecdir="${libexecdir:-$prefix/libexec}"
1538 includedir="${includedir:-$prefix/include}"
1539
1540 if test "$mingw32" = "yes" ; then
1541 mandir="$prefix"
1542 datadir="$prefix"
1543 docdir="$prefix"
1544 bindir="$prefix"
1545 sysconfdir="$prefix"
1546 local_statedir="$prefix"
1547 else
1548 mandir="${mandir:-$prefix/share/man}"
1549 datadir="${datadir:-$prefix/share}"
1550 docdir="${docdir:-$prefix/share/doc}"
1551 bindir="${bindir:-$prefix/bin}"
1552 sysconfdir="${sysconfdir:-$prefix/etc}"
1553 local_statedir="${local_statedir:-$prefix/var}"
1554 fi
1555 firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
1556 localedir="${localedir:-$datadir/locale}"
1557
1558 case "$cpu" in
1559 ppc)
1560 CPU_CFLAGS="-m32"
1561 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1562 ;;
1563 ppc64)
1564 CPU_CFLAGS="-m64"
1565 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1566 ;;
1567 sparc)
1568 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1569 QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1570 ;;
1571 sparc64)
1572 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1573 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1574 ;;
1575 s390)
1576 CPU_CFLAGS="-m31"
1577 QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1578 ;;
1579 s390x)
1580 CPU_CFLAGS="-m64"
1581 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1582 ;;
1583 i386)
1584 CPU_CFLAGS="-m32"
1585 QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1586 ;;
1587 x86_64)
1588 # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1589 # If we truly care, we should simply detect this case at
1590 # runtime and generate the fallback to serial emulation.
1591 CPU_CFLAGS="-m64 -mcx16"
1592 QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1593 ;;
1594 x32)
1595 CPU_CFLAGS="-mx32"
1596 QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1597 ;;
1598 # No special flags required for other host CPUs
1599 esac
1600
1601 eval "cross_cc_${cpu}=\$host_cc"
1602 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1603 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1604
1605 # For user-mode emulation the host arch has to be one we explicitly
1606 # support, even if we're using TCI.
1607 if [ "$ARCH" = "unknown" ]; then
1608 bsd_user="no"
1609 linux_user="no"
1610 fi
1611
1612 default_target_list=""
1613 deprecated_targets_list=ppc64abi32-linux-user,tilegx-linux-user,lm32-softmmu,unicore32-softmmu
1614 deprecated_features=""
1615 mak_wilds=""
1616
1617 if [ "$softmmu" = "yes" ]; then
1618 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-softmmu.mak"
1619 fi
1620 if [ "$linux_user" = "yes" ]; then
1621 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-linux-user.mak"
1622 fi
1623 if [ "$bsd_user" = "yes" ]; then
1624 mak_wilds="${mak_wilds} $source_path/default-configs/targets/*-bsd-user.mak"
1625 fi
1626
1627 # If the user doesn't explicitly specify a deprecated target we will
1628 # skip it.
1629 if test -z "$target_list"; then
1630 if test -z "$target_list_exclude"; then
1631 target_list_exclude="$deprecated_targets_list"
1632 else
1633 target_list_exclude="$target_list_exclude,$deprecated_targets_list"
1634 fi
1635 fi
1636
1637 for config in $mak_wilds; do
1638 target="$(basename "$config" .mak)"
1639 if echo "$target_list_exclude" | grep -vq "$target"; then
1640 default_target_list="${default_target_list} $target"
1641 fi
1642 done
1643
1644 # Enumerate public trace backends for --help output
1645 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1646
1647 if test x"$show_help" = x"yes" ; then
1648 cat << EOF
1649
1650 Usage: configure [options]
1651 Options: [defaults in brackets after descriptions]
1652
1653 Standard options:
1654 --help print this message
1655 --prefix=PREFIX install in PREFIX [$prefix]
1656 --interp-prefix=PREFIX where to find shared libraries, etc.
1657 use %M for cpu name [$interp_prefix]
1658 --target-list=LIST set target list (default: build all non-deprecated)
1659 $(echo Available targets: $default_target_list | \
1660 fold -s -w 53 | sed -e 's/^/ /')
1661 $(echo Deprecated targets: $deprecated_targets_list | \
1662 fold -s -w 53 | sed -e 's/^/ /')
1663 --target-list-exclude=LIST exclude a set of targets from the default target-list
1664
1665 Advanced options (experts only):
1666 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1667 --cc=CC use C compiler CC [$cc]
1668 --iasl=IASL use ACPI compiler IASL [$iasl]
1669 --host-cc=CC use C compiler CC [$host_cc] for code run at
1670 build time
1671 --cxx=CXX use C++ compiler CXX [$cxx]
1672 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1673 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1674 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1675 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1676 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
1677 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
1678 --make=MAKE use specified make [$make]
1679 --python=PYTHON use specified python [$python]
1680 --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
1681 --meson=MESON use specified meson [$meson]
1682 --ninja=NINJA use specified ninja [$ninja]
1683 --smbd=SMBD use specified smbd [$smbd]
1684 --with-git=GIT use specified git [$git]
1685 --static enable static build [$static]
1686 --mandir=PATH install man pages in PATH
1687 --datadir=PATH install firmware in PATH/$qemu_suffix
1688 --localedir=PATH install translation in PATH/$qemu_suffix
1689 --docdir=PATH install documentation in PATH/$qemu_suffix
1690 --bindir=PATH install binaries in PATH
1691 --libdir=PATH install libraries in PATH
1692 --libexecdir=PATH install helper binaries in PATH
1693 --sysconfdir=PATH install config in PATH/$qemu_suffix
1694 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1695 --firmwarepath=PATH search PATH for firmware files
1696 --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
1697 --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1698 --with-pkgversion=VERS use specified string as sub-version of the package
1699 --enable-debug enable common debug build options
1700 --enable-sanitizers enable default sanitizers
1701 --enable-tsan enable thread sanitizer
1702 --disable-strip disable stripping binaries
1703 --disable-werror disable compilation abort on warning
1704 --disable-stack-protector disable compiler-provided stack protection
1705 --audio-drv-list=LIST set audio drivers list:
1706 Available drivers: $audio_possible_drivers
1707 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1708 --block-drv-rw-whitelist=L
1709 set block driver read-write whitelist
1710 (affects only QEMU, not qemu-img)
1711 --block-drv-ro-whitelist=L
1712 set block driver read-only whitelist
1713 (affects only QEMU, not qemu-img)
1714 --enable-trace-backends=B Set trace backend
1715 Available backends: $trace_backend_list
1716 --with-trace-file=NAME Full PATH,NAME of file to store traces
1717 Default:trace-<pid>
1718 --disable-slirp disable SLIRP userspace network connectivity
1719 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1720 --enable-malloc-trim enable libc malloc_trim() for memory optimization
1721 --oss-lib path to OSS library
1722 --cpu=CPU Build for host CPU [$cpu]
1723 --with-coroutine=BACKEND coroutine backend. Supported options:
1724 ucontext, sigaltstack, windows
1725 --enable-gcov enable test coverage analysis with gcov
1726 --disable-blobs disable installing provided firmware blobs
1727 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1728 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1729 --tls-priority default TLS protocol/cipher priority string
1730 --enable-gprof QEMU profiling with gprof
1731 --enable-profiler profiler support
1732 --enable-debug-stack-usage
1733 track the maximum stack usage of stacks created by qemu_alloc_stack
1734 --enable-plugins
1735 enable plugins via shared library loading
1736 --disable-containers don't use containers for cross-building
1737 --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
1738
1739 Optional features, enabled with --enable-FEATURE and
1740 disabled with --disable-FEATURE, default is enabled if available:
1741
1742 system all system emulation targets
1743 user supported user emulation targets
1744 linux-user all linux usermode emulation targets
1745 bsd-user all BSD usermode emulation targets
1746 docs build documentation
1747 guest-agent build the QEMU Guest Agent
1748 guest-agent-msi build guest agent Windows MSI installation package
1749 pie Position Independent Executables
1750 modules modules support (non-Windows)
1751 module-upgrades try to load modules from alternate paths for upgrades
1752 debug-tcg TCG debugging (default is disabled)
1753 debug-info debugging information
1754 sparse sparse checker
1755 safe-stack SafeStack Stack Smash Protection. Depends on
1756 clang/llvm >= 3.7 and requires coroutine backend ucontext.
1757
1758 gnutls GNUTLS cryptography support
1759 nettle nettle cryptography support
1760 gcrypt libgcrypt cryptography support
1761 auth-pam PAM access control
1762 sdl SDL UI
1763 sdl-image SDL Image support for icons
1764 gtk gtk UI
1765 vte vte support for the gtk UI
1766 curses curses UI
1767 iconv font glyph conversion support
1768 vnc VNC UI support
1769 vnc-sasl SASL encryption for VNC server
1770 vnc-jpeg JPEG lossy compression for VNC server
1771 vnc-png PNG compression for VNC server
1772 cocoa Cocoa UI (Mac OS X only)
1773 virtfs VirtFS
1774 virtiofsd build virtiofs daemon (virtiofsd)
1775 libudev Use libudev to enumerate host devices
1776 mpath Multipath persistent reservation passthrough
1777 xen xen backend driver support
1778 xen-pci-passthrough PCI passthrough support for Xen
1779 brlapi BrlAPI (Braile)
1780 curl curl connectivity
1781 membarrier membarrier system call (for Linux 4.14+ or Windows)
1782 fdt fdt device tree
1783 kvm KVM acceleration support
1784 hax HAX acceleration support
1785 hvf Hypervisor.framework acceleration support
1786 whpx Windows Hypervisor Platform acceleration support
1787 rdma Enable RDMA-based migration
1788 pvrdma Enable PVRDMA support
1789 vde support for vde network
1790 netmap support for netmap network
1791 linux-aio Linux AIO support
1792 linux-io-uring Linux io_uring support
1793 cap-ng libcap-ng support
1794 attr attr and xattr support
1795 vhost-net vhost-net kernel acceleration support
1796 vhost-vsock virtio sockets device support
1797 vhost-scsi vhost-scsi kernel target support
1798 vhost-crypto vhost-user-crypto backend support
1799 vhost-kernel vhost kernel backend support
1800 vhost-user vhost-user backend support
1801 vhost-user-blk-server vhost-user-blk server support
1802 vhost-vdpa vhost-vdpa kernel backend support
1803 spice spice
1804 rbd rados block device (rbd)
1805 libiscsi iscsi support
1806 libnfs nfs support
1807 smartcard smartcard support (libcacard)
1808 u2f U2F support (u2f-emu)
1809 libusb libusb (for usb passthrough)
1810 live-block-migration Block migration in the main migration stream
1811 usb-redir usb network redirection support
1812 lzo support of lzo compression library
1813 snappy support of snappy compression library
1814 bzip2 support of bzip2 compression library
1815 (for reading bzip2-compressed dmg images)
1816 lzfse support of lzfse compression library
1817 (for reading lzfse-compressed dmg images)
1818 zstd support for zstd compression library
1819 (for migration compression and qcow2 cluster compression)
1820 seccomp seccomp support
1821 coroutine-pool coroutine freelist (better performance)
1822 glusterfs GlusterFS backend
1823 tpm TPM support
1824 libssh ssh block device support
1825 numa libnuma support
1826 libxml2 for Parallels image format
1827 tcmalloc tcmalloc support
1828 jemalloc jemalloc support
1829 avx2 AVX2 optimization support
1830 avx512f AVX512F optimization support
1831 replication replication support
1832 opengl opengl support
1833 virglrenderer virgl rendering support
1834 xfsctl xfsctl support
1835 qom-cast-debug cast debugging support
1836 tools build qemu-io, qemu-nbd and qemu-img tools
1837 bochs bochs image format support
1838 cloop cloop image format support
1839 dmg dmg image format support
1840 qcow1 qcow v1 image format support
1841 vdi vdi image format support
1842 vvfat vvfat image format support
1843 qed qed image format support
1844 parallels parallels image format support
1845 sheepdog sheepdog block driver support (deprecated)
1846 crypto-afalg Linux AF_ALG crypto backend driver
1847 capstone capstone disassembler support
1848 debug-mutex mutex debugging support
1849 libpmem libpmem support
1850 xkbcommon xkbcommon support
1851 rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
1852 libdaxctl libdaxctl support
1853
1854 NOTE: The object files are built at the place where configure is launched
1855 EOF
1856 exit 0
1857 fi
1858
1859 # Remove old dependency files to make sure that they get properly regenerated
1860 rm -f */config-devices.mak.d
1861
1862 if test -z "$python"
1863 then
1864 error_exit "Python not found. Use --python=/path/to/python"
1865 fi
1866
1867 # Note that if the Python conditional here evaluates True we will exit
1868 # with status 1 which is a shell 'false' value.
1869 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
1870 error_exit "Cannot use '$python', Python >= 3.6 is required." \
1871 "Use --python=/path/to/python to specify a supported Python."
1872 fi
1873
1874 # Preserve python version since some functionality is dependent on it
1875 python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
1876
1877 # Suppress writing compiled files
1878 python="$python -B"
1879
1880 if test -z "$meson"; then
1881 if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
1882 meson=meson
1883 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
1884 meson=git
1885 elif test -e "${source_path}/meson/meson.py" ; then
1886 meson=internal
1887 else
1888 if test "$explicit_python" = yes; then
1889 error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
1890 else
1891 error_exit "Meson not found. Use --meson=/path/to/meson"
1892 fi
1893 fi
1894 else
1895 # Meson uses its own Python interpreter to invoke other Python scripts,
1896 # but the user wants to use the one they specified with --python.
1897 #
1898 # We do not want to override the distro Python interpreter (and sometimes
1899 # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
1900 # just require --meson=git|internal together with --python.
1901 if test "$explicit_python" = yes; then
1902 case "$meson" in
1903 git | internal) ;;
1904 *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
1905 esac
1906 fi
1907 fi
1908
1909 if test "$meson" = git; then
1910 git_submodules="${git_submodules} meson"
1911 fi
1912
1913 case "$meson" in
1914 git | internal)
1915 meson="$python ${source_path}/meson/meson.py"
1916 ;;
1917 *) meson=$(command -v "$meson") ;;
1918 esac
1919
1920 # Probe for ninja
1921
1922 if test -z "$ninja"; then
1923 for c in ninja ninja-build samu; do
1924 if has $c; then
1925 ninja=$(command -v "$c")
1926 break
1927 fi
1928 done
1929 if test -z "$ninja"; then
1930 error_exit "Cannot find Ninja"
1931 fi
1932 fi
1933
1934 # Check that the C compiler works. Doing this here before testing
1935 # the host CPU ensures that we had a valid CC to autodetect the
1936 # $cpu var (and we should bail right here if that's not the case).
1937 # It also allows the help message to be printed without a CC.
1938 write_c_skeleton;
1939 if compile_object ; then
1940 : C compiler works ok
1941 else
1942 error_exit "\"$cc\" either does not exist or does not work"
1943 fi
1944 if ! compile_prog ; then
1945 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1946 fi
1947
1948 # Consult white-list to determine whether to enable werror
1949 # by default. Only enable by default for git builds
1950 if test -z "$werror" ; then
1951 if test -e "$source_path/.git" && \
1952 { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1953 werror="yes"
1954 else
1955 werror="no"
1956 fi
1957 fi
1958
1959 if test "$bogus_os" = "yes"; then
1960 # Now that we know that we're not printing the help and that
1961 # the compiler works (so the results of the check_defines we used
1962 # to identify the OS are reliable), if we didn't recognize the
1963 # host OS we should stop now.
1964 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1965 fi
1966
1967 # Check whether the compiler matches our minimum requirements:
1968 cat > $TMPC << EOF
1969 #if defined(__clang_major__) && defined(__clang_minor__)
1970 # ifdef __apple_build_version__
1971 # if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1972 # error You need at least XCode Clang v5.1 to compile QEMU
1973 # endif
1974 # else
1975 # if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1976 # error You need at least Clang v3.4 to compile QEMU
1977 # endif
1978 # endif
1979 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1980 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1981 # error You need at least GCC v4.8 to compile QEMU
1982 # endif
1983 #else
1984 # error You either need GCC or Clang to compiler QEMU
1985 #endif
1986 int main (void) { return 0; }
1987 EOF
1988 if ! compile_prog "" "" ; then
1989 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1990 fi
1991
1992 # Accumulate -Wfoo and -Wno-bar separately.
1993 # We will list all of the enable flags first, and the disable flags second.
1994 # Note that we do not add -Werror, because that would enable it for all
1995 # configure tests. If a configure test failed due to -Werror this would
1996 # just silently disable some features, so it's too error prone.
1997
1998 warn_flags=
1999 add_to warn_flags -Wold-style-declaration
2000 add_to warn_flags -Wold-style-definition
2001 add_to warn_flags -Wtype-limits
2002 add_to warn_flags -Wformat-security
2003 add_to warn_flags -Wformat-y2k
2004 add_to warn_flags -Winit-self
2005 add_to warn_flags -Wignored-qualifiers
2006 add_to warn_flags -Wempty-body
2007 add_to warn_flags -Wnested-externs
2008 add_to warn_flags -Wendif-labels
2009 add_to warn_flags -Wexpansion-to-defined
2010
2011 nowarn_flags=
2012 add_to nowarn_flags -Wno-initializer-overrides
2013 add_to nowarn_flags -Wno-missing-include-dirs
2014 add_to nowarn_flags -Wno-shift-negative-value
2015 add_to nowarn_flags -Wno-string-plus-int
2016 add_to nowarn_flags -Wno-typedef-redefinition
2017 add_to nowarn_flags -Wno-tautological-type-limit-compare
2018 add_to nowarn_flags -Wno-psabi
2019
2020 gcc_flags="$warn_flags $nowarn_flags"
2021
2022 cc_has_warning_flag() {
2023 write_c_skeleton;
2024
2025 # Use the positive sense of the flag when testing for -Wno-wombat
2026 # support (gcc will happily accept the -Wno- form of unknown
2027 # warning options).
2028 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2029 compile_prog "-Werror $optflag" ""
2030 }
2031
2032 for flag in $gcc_flags; do
2033 if cc_has_warning_flag $flag ; then
2034 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2035 fi
2036 done
2037
2038 if test "$stack_protector" != "no"; then
2039 cat > $TMPC << EOF
2040 int main(int argc, char *argv[])
2041 {
2042 char arr[64], *p = arr, *c = argv[0];
2043 while (*c) {
2044 *p++ = *c++;
2045 }
2046 return 0;
2047 }
2048 EOF
2049 gcc_flags="-fstack-protector-strong -fstack-protector-all"
2050 sp_on=0
2051 for flag in $gcc_flags; do
2052 # We need to check both a compile and a link, since some compiler
2053 # setups fail only on a .c->.o compile and some only at link time
2054 if compile_object "-Werror $flag" &&
2055 compile_prog "-Werror $flag" ""; then
2056 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2057 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2058 sp_on=1
2059 break
2060 fi
2061 done
2062 if test "$stack_protector" = yes; then
2063 if test $sp_on = 0; then
2064 error_exit "Stack protector not supported"
2065 fi
2066 fi
2067 fi
2068
2069 # Disable -Wmissing-braces on older compilers that warn even for
2070 # the "universal" C zero initializer {0}.
2071 cat > $TMPC << EOF
2072 struct {
2073 int a[2];
2074 } x = {0};
2075 EOF
2076 if compile_object "-Werror" "" ; then
2077 :
2078 else
2079 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2080 fi
2081
2082 # Our module code doesn't support Windows
2083 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2084 error_exit "Modules are not available for Windows"
2085 fi
2086
2087 # module_upgrades is only reasonable if modules are enabled
2088 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2089 error_exit "Can't enable module-upgrades as Modules are not enabled"
2090 fi
2091
2092 # Static linking is not possible with modules or PIE
2093 if test "$static" = "yes" ; then
2094 if test "$modules" = "yes" ; then
2095 error_exit "static and modules are mutually incompatible"
2096 fi
2097 fi
2098
2099 # Unconditional check for compiler __thread support
2100 cat > $TMPC << EOF
2101 static __thread int tls_var;
2102 int main(void) { return tls_var; }
2103 EOF
2104
2105 if ! compile_prog "-Werror" "" ; then
2106 error_exit "Your compiler does not support the __thread specifier for " \
2107 "Thread-Local Storage (TLS). Please upgrade to a version that does."
2108 fi
2109
2110 cat > $TMPC << EOF
2111
2112 #ifdef __linux__
2113 # define THREAD __thread
2114 #else
2115 # define THREAD
2116 #endif
2117 static THREAD int tls_var;
2118 int main(void) { return tls_var; }
2119 EOF
2120
2121 # Check we support --no-pie first; we will need this for building ROMs.
2122 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2123 CFLAGS_NOPIE="-fno-pie"
2124 LDFLAGS_NOPIE="-no-pie"
2125 fi
2126
2127 if test "$static" = "yes"; then
2128 if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2129 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2130 QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2131 pie="yes"
2132 elif test "$pie" = "yes"; then
2133 error_exit "-static-pie not available due to missing toolchain support"
2134 else
2135 QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2136 pie="no"
2137 fi
2138 elif test "$pie" = "no"; then
2139 CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
2140 CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS"
2141 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2142 CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
2143 CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
2144 pie="yes"
2145 elif test "$pie" = "yes"; then
2146 error_exit "PIE not available due to missing toolchain support"
2147 else
2148 echo "Disabling PIE due to missing toolchain support"
2149 pie="no"
2150 fi
2151
2152 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2153 # The combination is known as "full relro", because .got.plt is read-only too.
2154 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2155 QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2156 fi
2157
2158 ##########################################
2159 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2160 # use i686 as default anyway, but for those that don't, an explicit
2161 # specification is necessary
2162
2163 if test "$cpu" = "i386"; then
2164 cat > $TMPC << EOF
2165 static int sfaa(int *ptr)
2166 {
2167 return __sync_fetch_and_and(ptr, 0);
2168 }
2169
2170 int main(void)
2171 {
2172 int val = 42;
2173 val = __sync_val_compare_and_swap(&val, 0, 1);
2174 sfaa(&val);
2175 return val;
2176 }
2177 EOF
2178 if ! compile_prog "" "" ; then
2179 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2180 fi
2181 fi
2182
2183 #########################################
2184 # Solaris specific configure tool chain decisions
2185
2186 if test "$solaris" = "yes" ; then
2187 if has ar; then
2188 :
2189 else
2190 if test -f /usr/ccs/bin/ar ; then
2191 error_exit "No path includes ar" \
2192 "Add /usr/ccs/bin to your path and rerun configure"
2193 fi
2194 error_exit "No path includes ar"
2195 fi
2196 fi
2197
2198 if test -z "${target_list+xxx}" ; then
2199 default_targets=yes
2200 for target in $default_target_list; do
2201 target_list="$target_list $target"
2202 done
2203 target_list="${target_list# }"
2204 else
2205 default_targets=no
2206 target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2207 for target in $target_list; do
2208 # Check that we recognised the target name; this allows a more
2209 # friendly error message than if we let it fall through.
2210 case " $default_target_list " in
2211 *" $target "*)
2212 ;;
2213 *)
2214 error_exit "Unknown target name '$target'"
2215 ;;
2216 esac
2217 done
2218 fi
2219
2220 for target in $target_list; do
2221 # if a deprecated target is enabled we note it here
2222 if echo "$deprecated_targets_list" | grep -q "$target"; then
2223 add_to deprecated_features $target
2224 fi
2225 done
2226
2227 # see if system emulation was really requested
2228 case " $target_list " in
2229 *"-softmmu "*) softmmu=yes
2230 ;;
2231 *) softmmu=no
2232 ;;
2233 esac
2234
2235 feature_not_found() {
2236 feature=$1
2237 remedy=$2
2238
2239 error_exit "User requested feature $feature" \
2240 "configure was not able to find it." \
2241 "$remedy"
2242 }
2243
2244 # ---
2245 # big/little endian test
2246 cat > $TMPC << EOF
2247 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2248 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2249 extern int foo(short *, short *);
2250 int main(int argc, char *argv[]) {
2251 return foo(big_endian, little_endian);
2252 }
2253 EOF
2254
2255 if compile_object ; then
2256 if strings -a $TMPO | grep -q BiGeNdIaN ; then
2257 bigendian="yes"
2258 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2259 bigendian="no"
2260 else
2261 echo big/little test failed
2262 fi
2263 else
2264 echo big/little test failed
2265 fi
2266
2267 ##########################################
2268 # system tools
2269 if test -z "$want_tools"; then
2270 if test "$softmmu" = "no"; then
2271 want_tools=no
2272 else
2273 want_tools=yes
2274 fi
2275 fi
2276
2277 ##########################################
2278 # cocoa implies not SDL or GTK
2279 # (the cocoa UI code currently assumes it is always the active UI
2280 # and doesn't interact well with other UI frontend code)
2281 if test "$cocoa" = "enabled"; then
2282 if test "$sdl" = "enabled"; then
2283 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2284 fi
2285 if test "$gtk" = "yes"; then
2286 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2287 fi
2288 gtk=no
2289 sdl=disabled
2290 fi
2291
2292 # Some versions of Mac OS X incorrectly define SIZE_MAX
2293 cat > $TMPC << EOF
2294 #include <stdint.h>
2295 #include <stdio.h>
2296 int main(int argc, char *argv[]) {
2297 return printf("%zu", SIZE_MAX);
2298 }
2299 EOF
2300 have_broken_size_max=no
2301 if ! compile_object -Werror ; then
2302 have_broken_size_max=yes
2303 fi
2304
2305 ##########################################
2306 # L2TPV3 probe
2307
2308 cat > $TMPC <<EOF
2309 #include <sys/socket.h>
2310 #include <linux/ip.h>
2311 int main(void) { return sizeof(struct mmsghdr); }
2312 EOF
2313 if compile_prog "" "" ; then
2314 l2tpv3=yes
2315 else
2316 l2tpv3=no
2317 fi
2318
2319 if check_include "pty.h" ; then
2320 pty_h=yes
2321 else
2322 pty_h=no
2323 fi
2324
2325 cat > $TMPC <<EOF
2326 #include <sys/mman.h>
2327 int main(int argc, char *argv[]) {
2328 return mlockall(MCL_FUTURE);
2329 }
2330 EOF
2331 if compile_prog "" "" ; then
2332 have_mlockall=yes
2333 else
2334 have_mlockall=no
2335 fi
2336
2337 #########################################
2338 # vhost interdependencies and host support
2339
2340 # vhost backends
2341 if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
2342 error_exit "vhost-user is only available on Linux"
2343 fi
2344 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2345 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2346 error_exit "vhost-vdpa is only available on Linux"
2347 fi
2348 test "$vhost_kernel" = "" && vhost_kernel=$linux
2349 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2350 error_exit "vhost-kernel is only available on Linux"
2351 fi
2352
2353 # vhost-kernel devices
2354 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2355 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2356 error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2357 fi
2358 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2359 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2360 error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2361 fi
2362
2363 # vhost-user backends
2364 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2365 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2366 error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2367 fi
2368 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2369 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2370 error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2371 fi
2372 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2373 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2374 error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2375 fi
2376 #vhost-vdpa backends
2377 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2378 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2379 error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2380 fi
2381
2382 # OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
2383 if test "$vhost_net" = ""; then
2384 test "$vhost_net_user" = "yes" && vhost_net=yes
2385 test "$vhost_net_vdpa" = "yes" && vhost_net=yes
2386 test "$vhost_kernel" = "yes" && vhost_net=yes
2387 fi
2388
2389 ##########################################
2390 # pkg-config probe
2391
2392 if ! has "$pkg_config_exe"; then
2393 error_exit "pkg-config binary '$pkg_config_exe' not found"
2394 fi
2395
2396 ##########################################
2397 # NPTL probe
2398
2399 if test "$linux_user" = "yes"; then
2400 cat > $TMPC <<EOF
2401 #include <sched.h>
2402 #include <linux/futex.h>
2403 int main(void) {
2404 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2405 #error bork
2406 #endif
2407 return 0;
2408 }
2409 EOF
2410 if ! compile_object ; then
2411 feature_not_found "nptl" "Install glibc and linux kernel headers."
2412 fi
2413 fi
2414
2415 ##########################################
2416 # lzo check
2417
2418 if test "$lzo" != "no" ; then
2419 cat > $TMPC << EOF
2420 #include <lzo/lzo1x.h>
2421 int main(void) { lzo_version(); return 0; }
2422 EOF
2423 if compile_prog "" "-llzo2" ; then
2424 lzo_libs="-llzo2"
2425 lzo="yes"
2426 else
2427 if test "$lzo" = "yes"; then
2428 feature_not_found "liblzo2" "Install liblzo2 devel"
2429 fi
2430 lzo="no"
2431 fi
2432 fi
2433
2434 ##########################################
2435 # snappy check
2436
2437 if test "$snappy" != "no" ; then
2438 cat > $TMPC << EOF
2439 #include <snappy-c.h>
2440 int main(void) { snappy_max_compressed_length(4096); return 0; }
2441 EOF
2442 if compile_prog "" "-lsnappy" ; then
2443 snappy_libs='-lsnappy'
2444 snappy="yes"
2445 else
2446 if test "$snappy" = "yes"; then
2447 feature_not_found "libsnappy" "Install libsnappy devel"
2448 fi
2449 snappy="no"
2450 fi
2451 fi
2452
2453 ##########################################
2454 # bzip2 check
2455
2456 if test "$bzip2" != "no" ; then
2457 cat > $TMPC << EOF
2458 #include <bzlib.h>
2459 int main(void) { BZ2_bzlibVersion(); return 0; }
2460 EOF
2461 if compile_prog "" "-lbz2" ; then
2462 bzip2="yes"
2463 else
2464 if test "$bzip2" = "yes"; then
2465 feature_not_found "libbzip2" "Install libbzip2 devel"
2466 fi
2467 bzip2="no"
2468 fi
2469 fi
2470
2471 ##########################################
2472 # lzfse check
2473
2474 if test "$lzfse" != "no" ; then
2475 cat > $TMPC << EOF
2476 #include <lzfse.h>
2477 int main(void) { lzfse_decode_scratch_size(); return 0; }
2478 EOF
2479 if compile_prog "" "-llzfse" ; then
2480 lzfse="yes"
2481 else
2482 if test "$lzfse" = "yes"; then
2483 feature_not_found "lzfse" "Install lzfse devel"
2484 fi
2485 lzfse="no"
2486 fi
2487 fi
2488
2489 ##########################################
2490 # zstd check
2491
2492 if test "$zstd" != "no" ; then
2493 libzstd_minver="1.4.0"
2494 if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2495 zstd_cflags="$($pkg_config --cflags libzstd)"
2496 zstd_libs="$($pkg_config --libs libzstd)"
2497 zstd="yes"
2498 else
2499 if test "$zstd" = "yes" ; then
2500 feature_not_found "libzstd" "Install libzstd devel"
2501 fi
2502 zstd="no"
2503 fi
2504 fi
2505
2506 ##########################################
2507 # libseccomp check
2508
2509 if test "$seccomp" != "no" ; then
2510 libseccomp_minver="2.3.0"
2511 if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2512 seccomp_cflags="$($pkg_config --cflags libseccomp)"
2513 seccomp_libs="$($pkg_config --libs libseccomp)"
2514 seccomp="yes"
2515 else
2516 if test "$seccomp" = "yes" ; then
2517 feature_not_found "libseccomp" \
2518 "Install libseccomp devel >= $libseccomp_minver"
2519 fi
2520 seccomp="no"
2521 fi
2522 fi
2523
2524 ##########################################
2525 # xen probe
2526
2527 if test "$xen" != "disabled" ; then
2528 # Check whether Xen library path is specified via --extra-ldflags to avoid
2529 # overriding this setting with pkg-config output. If not, try pkg-config
2530 # to obtain all needed flags.
2531
2532 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2533 $pkg_config --exists xencontrol ; then
2534 xen_ctrl_version="$(printf '%d%02d%02d' \
2535 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2536 xen=enabled
2537 xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
2538 xen_pc="$xen_pc xenevtchn xendevicemodel"
2539 if $pkg_config --exists xentoolcore; then
2540 xen_pc="$xen_pc xentoolcore"
2541 fi
2542 xen_cflags="$($pkg_config --cflags $xen_pc)"
2543 xen_libs="$($pkg_config --libs $xen_pc)"
2544 else
2545
2546 xen_libs="-lxenstore -lxenctrl"
2547 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2548
2549 # First we test whether Xen headers and libraries are available.
2550 # If no, we are done and there is no Xen support.
2551 # If yes, more tests are run to detect the Xen version.
2552
2553 # Xen (any)
2554 cat > $TMPC <<EOF
2555 #include <xenctrl.h>
2556 int main(void) {
2557 return 0;
2558 }
2559 EOF
2560 if ! compile_prog "" "$xen_libs" ; then
2561 # Xen not found
2562 if test "$xen" = "enabled" ; then
2563 feature_not_found "xen" "Install xen devel"
2564 fi
2565 xen=disabled
2566
2567 # Xen unstable
2568 elif
2569 cat > $TMPC <<EOF &&
2570 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2571 #define __XEN_TOOLS__
2572 #include <xendevicemodel.h>
2573 #include <xenforeignmemory.h>
2574 int main(void) {
2575 xendevicemodel_handle *xd;
2576 xenforeignmemory_handle *xfmem;
2577
2578 xd = xendevicemodel_open(0, 0);
2579 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2580
2581 xfmem = xenforeignmemory_open(0, 0);
2582 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2583
2584 return 0;
2585 }
2586 EOF
2587 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2588 then
2589 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2590 xen_ctrl_version=41100
2591 xen=enabled
2592 elif
2593 cat > $TMPC <<EOF &&
2594 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2595 #include <xenforeignmemory.h>
2596 #include <xentoolcore.h>
2597 int main(void) {
2598 xenforeignmemory_handle *xfmem;
2599
2600 xfmem = xenforeignmemory_open(0, 0);
2601 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2602 xentoolcore_restrict_all(0);
2603
2604 return 0;
2605 }
2606 EOF
2607 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2608 then
2609 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2610 xen_ctrl_version=41000
2611 xen=enabled
2612 elif
2613 cat > $TMPC <<EOF &&
2614 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2615 #define __XEN_TOOLS__
2616 #include <xendevicemodel.h>
2617 int main(void) {
2618 xendevicemodel_handle *xd;
2619
2620 xd = xendevicemodel_open(0, 0);
2621 xendevicemodel_close(xd);
2622
2623 return 0;
2624 }
2625 EOF
2626 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2627 then
2628 xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2629 xen_ctrl_version=40900
2630 xen=enabled
2631 elif
2632 cat > $TMPC <<EOF &&
2633 /*
2634 * If we have stable libs the we don't want the libxc compat
2635 * layers, regardless of what CFLAGS we may have been given.
2636 *
2637 * Also, check if xengnttab_grant_copy_segment_t is defined and
2638 * grant copy operation is implemented.
2639 */
2640 #undef XC_WANT_COMPAT_EVTCHN_API
2641 #undef XC_WANT_COMPAT_GNTTAB_API
2642 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2643 #include <xenctrl.h>
2644 #include <xenstore.h>
2645 #include <xenevtchn.h>
2646 #include <xengnttab.h>
2647 #include <xenforeignmemory.h>
2648 #include <stdint.h>
2649 #include <xen/hvm/hvm_info_table.h>
2650 #if !defined(HVM_MAX_VCPUS)
2651 # error HVM_MAX_VCPUS not defined
2652 #endif
2653 int main(void) {
2654 xc_interface *xc = NULL;
2655 xenforeignmemory_handle *xfmem;
2656 xenevtchn_handle *xe;
2657 xengnttab_handle *xg;
2658 xengnttab_grant_copy_segment_t* seg = NULL;
2659
2660 xs_daemon_open();
2661
2662 xc = xc_interface_open(0, 0, 0);
2663 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2664 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2665 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2666 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2667
2668 xfmem = xenforeignmemory_open(0, 0);
2669 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2670
2671 xe = xenevtchn_open(0, 0);
2672 xenevtchn_fd(xe);
2673
2674 xg = xengnttab_open(0, 0);
2675 xengnttab_grant_copy(xg, 0, seg);
2676
2677 return 0;
2678 }
2679 EOF
2680 compile_prog "" "$xen_libs $xen_stable_libs"
2681 then
2682 xen_ctrl_version=40800
2683 xen=enabled
2684 elif
2685 cat > $TMPC <<EOF &&
2686 /*
2687 * If we have stable libs the we don't want the libxc compat
2688 * layers, regardless of what CFLAGS we may have been given.
2689 */
2690 #undef XC_WANT_COMPAT_EVTCHN_API
2691 #undef XC_WANT_COMPAT_GNTTAB_API
2692 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2693 #include <xenctrl.h>
2694 #include <xenstore.h>
2695 #include <xenevtchn.h>
2696 #include <xengnttab.h>
2697 #include <xenforeignmemory.h>
2698 #include <stdint.h>
2699 #include <xen/hvm/hvm_info_table.h>
2700 #if !defined(HVM_MAX_VCPUS)
2701 # error HVM_MAX_VCPUS not defined
2702 #endif
2703 int main(void) {
2704 xc_interface *xc = NULL;
2705 xenforeignmemory_handle *xfmem;
2706 xenevtchn_handle *xe;
2707 xengnttab_handle *xg;
2708
2709 xs_daemon_open();
2710
2711 xc = xc_interface_open(0, 0, 0);
2712 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2713 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2714 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2715 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2716
2717 xfmem = xenforeignmemory_open(0, 0);
2718 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2719
2720 xe = xenevtchn_open(0, 0);
2721 xenevtchn_fd(xe);
2722
2723 xg = xengnttab_open(0, 0);
2724 xengnttab_map_grant_ref(xg, 0, 0, 0);
2725
2726 return 0;
2727 }
2728 EOF
2729 compile_prog "" "$xen_libs $xen_stable_libs"
2730 then
2731 xen_ctrl_version=40701
2732 xen=enabled
2733
2734 # Xen 4.6
2735 elif
2736 cat > $TMPC <<EOF &&
2737 #include <xenctrl.h>
2738 #include <xenstore.h>
2739 #include <stdint.h>
2740 #include <xen/hvm/hvm_info_table.h>
2741 #if !defined(HVM_MAX_VCPUS)
2742 # error HVM_MAX_VCPUS not defined
2743 #endif
2744 int main(void) {
2745 xc_interface *xc;
2746 xs_daemon_open();
2747 xc = xc_interface_open(0, 0, 0);
2748 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2749 xc_gnttab_open(NULL, 0);
2750 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2751 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2752 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2753 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2754 return 0;
2755 }
2756 EOF
2757 compile_prog "" "$xen_libs"
2758 then
2759 xen_ctrl_version=40600
2760 xen=enabled
2761
2762 # Xen 4.5
2763 elif
2764 cat > $TMPC <<EOF &&
2765 #include <xenctrl.h>
2766 #include <xenstore.h>
2767 #include <stdint.h>
2768 #include <xen/hvm/hvm_info_table.h>
2769 #if !defined(HVM_MAX_VCPUS)
2770 # error HVM_MAX_VCPUS not defined
2771 #endif
2772 int main(void) {
2773 xc_interface *xc;
2774 xs_daemon_open();
2775 xc = xc_interface_open(0, 0, 0);
2776 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2777 xc_gnttab_open(NULL, 0);
2778 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2779 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2780 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2781 return 0;
2782 }
2783 EOF
2784 compile_prog "" "$xen_libs"
2785 then
2786 xen_ctrl_version=40500
2787 xen=enabled
2788
2789 elif
2790 cat > $TMPC <<EOF &&
2791 #include <xenctrl.h>
2792 #include <xenstore.h>
2793 #include <stdint.h>
2794 #include <xen/hvm/hvm_info_table.h>
2795 #if !defined(HVM_MAX_VCPUS)
2796 # error HVM_MAX_VCPUS not defined
2797 #endif
2798 int main(void) {
2799 xc_interface *xc;
2800 xs_daemon_open();
2801 xc = xc_interface_open(0, 0, 0);
2802 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2803 xc_gnttab_open(NULL, 0);
2804 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2805 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2806 return 0;
2807 }
2808 EOF
2809 compile_prog "" "$xen_libs"
2810 then
2811 xen_ctrl_version=40200
2812 xen=enabled
2813
2814 else
2815 if test "$xen" = "enabled" ; then
2816 feature_not_found "xen (unsupported version)" \
2817 "Install a supported xen (xen 4.2 or newer)"
2818 fi
2819 xen=disabled
2820 fi
2821
2822 if test "$xen" = enabled; then
2823 if test $xen_ctrl_version -ge 40701 ; then
2824 xen_libs="$xen_libs $xen_stable_libs "
2825 fi
2826 fi
2827 fi
2828 fi
2829
2830 if test "$xen_pci_passthrough" != "disabled"; then
2831 if test "$xen" = "enabled" && test "$linux" = "yes"; then
2832 xen_pci_passthrough=enabled
2833 else
2834 if test "$xen_pci_passthrough" = "enabled"; then
2835 error_exit "User requested feature Xen PCI Passthrough" \
2836 " but this feature requires /sys from Linux"
2837 fi
2838 xen_pci_passthrough=disabled
2839 fi
2840 fi
2841
2842 ##########################################
2843 # gettext probe
2844 if test "$gettext" != "false" ; then
2845 if has xgettext; then
2846 gettext=true
2847 else
2848 if test "$gettext" = "true" ; then
2849 feature_not_found "gettext" "Install xgettext binary"
2850 fi
2851 gettext=false
2852 fi
2853 fi
2854
2855 ##########################################
2856 # X11 probe
2857 if $pkg_config --exists "x11"; then
2858 have_x11=yes
2859 x11_cflags=$($pkg_config --cflags x11)
2860 x11_libs=$($pkg_config --libs x11)
2861 fi
2862
2863 ##########################################
2864 # GTK probe
2865
2866 if test "$gtk" != "no"; then
2867 gtkpackage="gtk+-3.0"
2868 gtkx11package="gtk+-x11-3.0"
2869 gtkversion="3.22.0"
2870 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2871 gtk_cflags=$($pkg_config --cflags $gtkpackage)
2872 gtk_libs=$($pkg_config --libs $gtkpackage)
2873 gtk_version=$($pkg_config --modversion $gtkpackage)
2874 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2875 need_x11=yes
2876 gtk_cflags="$gtk_cflags $x11_cflags"
2877 gtk_libs="$gtk_libs $x11_libs"
2878 fi
2879 gtk="yes"
2880 elif test "$gtk" = "yes"; then
2881 feature_not_found "gtk" "Install gtk3-devel"
2882 else
2883 gtk="no"
2884 fi
2885 fi
2886
2887
2888 ##########################################
2889 # GNUTLS probe
2890
2891 if test "$gnutls" != "no"; then
2892 pass="no"
2893 if $pkg_config --exists "gnutls >= 3.1.18"; then
2894 gnutls_cflags=$($pkg_config --cflags gnutls)
2895 gnutls_libs=$($pkg_config --libs gnutls)
2896 # Packaging for the static libraries is not always correct.
2897 # At least ubuntu 18.04 ships only shared libraries.
2898 write_c_skeleton
2899 if compile_prog "" "$gnutls_libs" ; then
2900 pass="yes"
2901 fi
2902 fi
2903 if test "$pass" = "no" && test "$gnutls" = "yes"; then
2904 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2905 else
2906 gnutls="$pass"
2907 fi
2908 fi
2909
2910
2911 # If user didn't give a --disable/enable-gcrypt flag,
2912 # then mark as disabled if user requested nettle
2913 # explicitly
2914 if test -z "$gcrypt"
2915 then
2916 if test "$nettle" = "yes"
2917 then
2918 gcrypt="no"
2919 fi
2920 fi
2921
2922 # If user didn't give a --disable/enable-nettle flag,
2923 # then mark as disabled if user requested gcrypt
2924 # explicitly
2925 if test -z "$nettle"
2926 then
2927 if test "$gcrypt" = "yes"
2928 then
2929 nettle="no"
2930 fi
2931 fi
2932
2933 has_libgcrypt() {
2934 if ! has "libgcrypt-config"
2935 then
2936 return 1
2937 fi
2938
2939 if test -n "$cross_prefix"
2940 then
2941 host=$(libgcrypt-config --host)
2942 if test "$host-" != $cross_prefix
2943 then
2944 return 1
2945 fi
2946 fi
2947
2948 maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2949 min=`libgcrypt-config --version | awk -F . '{print $2}'`
2950
2951 if test $maj != 1 || test $min -lt 5
2952 then
2953 return 1
2954 fi
2955
2956 return 0
2957 }
2958
2959
2960 if test "$nettle" != "no"; then
2961 pass="no"
2962 if $pkg_config --exists "nettle >= 2.7.1"; then
2963 nettle_cflags=$($pkg_config --cflags nettle)
2964 nettle_libs=$($pkg_config --libs nettle)
2965 nettle_version=$($pkg_config --modversion nettle)
2966 # Link test to make sure the given libraries work (e.g for static).
2967 write_c_skeleton
2968 if compile_prog "" "$nettle_libs" ; then
2969 if test -z "$gcrypt"; then
2970 gcrypt="no"
2971 fi
2972 pass="yes"
2973 fi
2974 fi
2975 if test "$pass" = "yes"
2976 then
2977 cat > $TMPC << EOF
2978 #include <nettle/xts.h>
2979 int main(void) {
2980 return 0;
2981 }
2982 EOF
2983 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2984 nettle_xts=yes
2985 qemu_private_xts=no
2986 fi
2987 fi
2988 if test "$pass" = "no" && test "$nettle" = "yes"; then
2989 feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2990 else
2991 nettle="$pass"
2992 fi
2993 fi
2994
2995 if test "$gcrypt" != "no"; then
2996 pass="no"
2997 if has_libgcrypt; then
2998 gcrypt_cflags=$(libgcrypt-config --cflags)
2999 gcrypt_libs=$(libgcrypt-config --libs)
3000 # Debian has removed -lgpg-error from libgcrypt-config
3001 # as it "spreads unnecessary dependencies" which in
3002 # turn breaks static builds...
3003 if test "$static" = "yes"
3004 then
3005 gcrypt_libs="$gcrypt_libs -lgpg-error"
3006 fi
3007
3008 # Link test to make sure the given libraries work (e.g for static).
3009 write_c_skeleton
3010 if compile_prog "" "$gcrypt_libs" ; then
3011 pass="yes"
3012 fi
3013 fi
3014 if test "$pass" = "yes"; then
3015 gcrypt="yes"
3016 cat > $TMPC << EOF
3017 #include <gcrypt.h>
3018 int main(void) {
3019 gcry_mac_hd_t handle;
3020 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3021 GCRY_MAC_FLAG_SECURE, NULL);
3022 return 0;
3023 }
3024 EOF
3025 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3026 gcrypt_hmac=yes
3027 fi
3028 cat > $TMPC << EOF
3029 #include <gcrypt.h>
3030 int main(void) {
3031 gcry_cipher_hd_t handle;
3032 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3033 return 0;
3034 }
3035 EOF
3036 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3037 gcrypt_xts=yes
3038 qemu_private_xts=no
3039 fi
3040 elif test "$gcrypt" = "yes"; then
3041 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3042 else
3043 gcrypt="no"
3044 fi
3045 fi
3046
3047
3048 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3049 then
3050 error_exit "Only one of gcrypt & nettle can be enabled"
3051 fi
3052
3053 ##########################################
3054 # libtasn1 - only for the TLS creds/session test suite
3055
3056 tasn1=yes
3057 tasn1_cflags=""
3058 tasn1_libs=""
3059 if $pkg_config --exists "libtasn1"; then
3060 tasn1_cflags=$($pkg_config --cflags libtasn1)
3061 tasn1_libs=$($pkg_config --libs libtasn1)
3062 else
3063 tasn1=no
3064 fi
3065
3066
3067 ##########################################
3068 # PAM probe
3069
3070 if test "$auth_pam" != "no"; then
3071 cat > $TMPC <<EOF
3072 #include <security/pam_appl.h>
3073 #include <stdio.h>
3074 int main(void) {
3075 const char *service_name = "qemu";
3076 const char *user = "frank";
3077 const struct pam_conv pam_conv = { 0 };
3078 pam_handle_t *pamh = NULL;
3079 pam_start(service_name, user, &pam_conv, &pamh);
3080 return 0;
3081 }
3082 EOF
3083 if compile_prog "" "-lpam" ; then
3084 auth_pam=yes
3085 else
3086 if test "$auth_pam" = "yes"; then
3087 feature_not_found "PAM" "Install PAM development package"
3088 else
3089 auth_pam=no
3090 fi
3091 fi
3092 fi
3093
3094 ##########################################
3095 # getifaddrs (for tests/test-io-channel-socket )
3096
3097 have_ifaddrs_h=yes
3098 if ! check_include "ifaddrs.h" ; then
3099 have_ifaddrs_h=no
3100 fi
3101
3102 #########################################
3103 # libdrm check
3104 have_drm_h=no
3105 if check_include "libdrm/drm.h" ; then
3106 have_drm_h=yes
3107 fi
3108
3109 #########################################
3110 # sys/signal.h check
3111 have_sys_signal_h=no
3112 if check_include "sys/signal.h" ; then
3113 have_sys_signal_h=yes
3114 fi
3115
3116 ##########################################
3117 # VTE probe
3118
3119 if test "$vte" != "no"; then
3120 vteminversion="0.32.0"
3121 if $pkg_config --exists "vte-2.91"; then
3122 vtepackage="vte-2.91"
3123 else
3124 vtepackage="vte-2.90"
3125 fi
3126 if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3127 vte_cflags=$($pkg_config --cflags $vtepackage)
3128 vte_libs=$($pkg_config --libs $vtepackage)
3129 vteversion=$($pkg_config --modversion $vtepackage)
3130 vte="yes"
3131 elif test "$vte" = "yes"; then
3132 feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3133 else
3134 vte="no"
3135 fi
3136 fi
3137
3138 ##########################################
3139 # RDMA needs OpenFabrics libraries
3140 if test "$rdma" != "no" ; then
3141 cat > $TMPC <<EOF
3142 #include <rdma/rdma_cma.h>
3143 int main(void) { return 0; }
3144 EOF
3145 rdma_libs="-lrdmacm -libverbs -libumad"
3146 if compile_prog "" "$rdma_libs" ; then
3147 rdma="yes"
3148 else
3149 if test "$rdma" = "yes" ; then
3150 error_exit \
3151 " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3152 " Your options:" \
3153 " (1) Fast: Install infiniband packages (devel) from your distro." \
3154 " (2) Cleanest: Install libraries from www.openfabrics.org" \
3155 " (3) Also: Install softiwarp if you don't have RDMA hardware"
3156 fi
3157 rdma="no"
3158 fi
3159 fi
3160
3161 ##########################################
3162 # PVRDMA detection
3163
3164 cat > $TMPC <<EOF &&
3165 #include <sys/mman.h>
3166
3167 int
3168 main(void)
3169 {
3170 char buf = 0;
3171 void *addr = &buf;
3172 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3173
3174 return 0;
3175 }
3176 EOF
3177
3178 if test "$rdma" = "yes" ; then
3179 case "$pvrdma" in
3180 "")
3181 if compile_prog "" ""; then
3182 pvrdma="yes"
3183 else
3184 pvrdma="no"
3185 fi
3186 ;;
3187 "yes")
3188 if ! compile_prog "" ""; then
3189 error_exit "PVRDMA is not supported since mremap is not implemented"
3190 fi
3191 pvrdma="yes"
3192 ;;
3193 "no")
3194 pvrdma="no"
3195 ;;
3196 esac
3197 else
3198 if test "$pvrdma" = "yes" ; then
3199 error_exit "PVRDMA requires rdma suppport"
3200 fi
3201 pvrdma="no"
3202 fi
3203
3204 # Let's see if enhanced reg_mr is supported
3205 if test "$pvrdma" = "yes" ; then
3206
3207 cat > $TMPC <<EOF &&
3208 #include <infiniband/verbs.h>
3209
3210 int
3211 main(void)
3212 {
3213 struct ibv_mr *mr;
3214 struct ibv_pd *pd = NULL;
3215 size_t length = 10;
3216 uint64_t iova = 0;
3217 int access = 0;
3218 void *addr = NULL;
3219
3220 mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3221
3222 ibv_dereg_mr(mr);
3223
3224 return 0;
3225 }
3226 EOF
3227 if ! compile_prog "" "-libverbs"; then
3228 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3229 fi
3230 fi
3231
3232 ##########################################
3233 # xfsctl() probe, used for file-posix.c
3234 if test "$xfs" != "no" ; then
3235 cat > $TMPC << EOF
3236 #include <stddef.h> /* NULL */
3237 #include <xfs/xfs.h>
3238 int main(void)
3239 {
3240 xfsctl(NULL, 0, 0, NULL);
3241 return 0;
3242 }
3243 EOF
3244 if compile_prog "" "" ; then
3245 xfs="yes"
3246 else
3247 if test "$xfs" = "yes" ; then
3248 feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
3249 fi
3250 xfs=no
3251 fi
3252 fi
3253
3254 ##########################################
3255 # vde libraries probe
3256 if test "$vde" != "no" ; then
3257 vde_libs="-lvdeplug"
3258 cat > $TMPC << EOF
3259 #include <libvdeplug.h>
3260 int main(void)
3261 {
3262 struct vde_open_args a = {0, 0, 0};
3263 char s[] = "";
3264 vde_open(s, s, &a);
3265 return 0;
3266 }
3267 EOF
3268 if compile_prog "" "$vde_libs" ; then
3269 vde=yes
3270 else
3271 if test "$vde" = "yes" ; then
3272 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3273 fi
3274 vde=no
3275 fi
3276 fi
3277
3278 ##########################################
3279 # netmap support probe
3280 # Apart from looking for netmap headers, we make sure that the host API version
3281 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3282 # a minor/major version number. Minor new features will be marked with values up
3283 # to 15, and if something happens that requires a change to the backend we will
3284 # move above 15, submit the backend fixes and modify this two bounds.
3285 if test "$netmap" != "no" ; then
3286 cat > $TMPC << EOF
3287 #include <inttypes.h>
3288 #include <net/if.h>
3289 #include <net/netmap.h>
3290 #include <net/netmap_user.h>
3291 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3292 #error
3293 #endif
3294 int main(void) { return 0; }
3295 EOF
3296 if compile_prog "" "" ; then
3297 netmap=yes
3298 else
3299 if test "$netmap" = "yes" ; then
3300 feature_not_found "netmap"
3301 fi
3302 netmap=no
3303 fi
3304 fi
3305
3306 ##########################################
3307 # libcap-ng library probe
3308 if test "$cap_ng" != "no" ; then
3309 cap_libs="-lcap-ng"
3310 cat > $TMPC << EOF
3311 #include <cap-ng.h>
3312 int main(void)
3313 {
3314 capng_capability_to_name(CAPNG_EFFECTIVE);
3315 return 0;
3316 }
3317 EOF
3318 if compile_prog "" "$cap_libs" ; then
3319 cap_ng=yes
3320 else
3321 if test "$cap_ng" = "yes" ; then
3322 feature_not_found "cap_ng" "Install libcap-ng devel"
3323 fi
3324 cap_ng=no
3325 fi
3326 fi
3327
3328 ##########################################
3329 # Sound support libraries probe
3330
3331 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3332 for drv in $audio_drv_list; do
3333 case $drv in
3334 alsa | try-alsa)
3335 if $pkg_config alsa --exists; then
3336 alsa_libs=$($pkg_config alsa --libs)
3337 alsa_cflags=$($pkg_config alsa --cflags)
3338 alsa=yes
3339 if test "$drv" = "try-alsa"; then
3340 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3341 fi
3342 else
3343 if test "$drv" = "try-alsa"; then
3344 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3345 else
3346 error_exit "$drv check failed" \
3347 "Make sure to have the $drv libs and headers installed."
3348 fi
3349 fi
3350 ;;
3351
3352 pa | try-pa)
3353 if $pkg_config libpulse --exists; then
3354 libpulse=yes
3355 pulse_libs=$($pkg_config libpulse --libs)
3356 pulse_cflags=$($pkg_config libpulse --cflags)
3357 if test "$drv" = "try-pa"; then
3358 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3359 fi
3360 else
3361 if test "$drv" = "try-pa"; then
3362 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3363 else
3364 error_exit "$drv check failed" \
3365 "Make sure to have the $drv libs and headers installed."
3366 fi
3367 fi
3368 ;;
3369
3370 sdl)
3371 if test "$sdl" = "no"; then
3372 error_exit "sdl not found or disabled, can not use sdl audio driver"
3373 fi
3374 ;;
3375
3376 try-sdl)
3377 if test "$sdl" = "no"; then
3378 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3379 else
3380 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3381 fi
3382 ;;
3383
3384 coreaudio)
3385 coreaudio_libs="-framework CoreAudio"
3386 ;;
3387
3388 dsound)
3389 dsound_libs="-lole32 -ldxguid"
3390 audio_win_int="yes"
3391 ;;
3392
3393 oss)
3394 oss_libs="$oss_lib"
3395 ;;
3396
3397 jack | try-jack)
3398 if $pkg_config jack --exists; then
3399 libjack=yes
3400 jack_libs=$($pkg_config jack --libs)
3401 if test "$drv" = "try-jack"; then
3402 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3403 fi
3404 else
3405 if test "$drv" = "try-jack"; then
3406 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3407 else
3408 error_exit "$drv check failed" \
3409 "Make sure to have the $drv libs and headers installed."
3410 fi
3411 fi
3412 ;;
3413
3414 *)
3415 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3416 error_exit "Unknown driver '$drv' selected" \
3417 "Possible drivers are: $audio_possible_drivers"
3418 }
3419 ;;
3420 esac
3421 done
3422
3423 ##########################################
3424 # BrlAPI probe
3425
3426 if test "$brlapi" != "no" ; then
3427 brlapi_libs="-lbrlapi"
3428 cat > $TMPC << EOF
3429 #include <brlapi.h>
3430 #include <stddef.h>
3431 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3432 EOF
3433 if compile_prog "" "$brlapi_libs" ; then
3434 brlapi=yes
3435 else
3436 if test "$brlapi" = "yes" ; then
3437 feature_not_found "brlapi" "Install brlapi devel"
3438 fi
3439 brlapi=no
3440 fi
3441 fi
3442
3443 ##########################################
3444 # curl probe
3445 if test "$curl" != "no" ; then
3446 if $pkg_config libcurl --exists; then
3447 curlconfig="$pkg_config libcurl"
3448 else
3449 curlconfig=curl-config
3450 fi
3451 cat > $TMPC << EOF
3452 #include <curl/curl.h>
3453 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3454 EOF
3455 curl_cflags=$($curlconfig --cflags 2>/dev/null)
3456 curl_libs=$($curlconfig --libs 2>/dev/null)
3457 if compile_prog "$curl_cflags" "$curl_libs" ; then
3458 curl=yes
3459 else
3460 if test "$curl" = "yes" ; then
3461 feature_not_found "curl" "Install libcurl devel"
3462 fi
3463 curl=no
3464 fi
3465 fi # test "$curl"
3466
3467 ##########################################
3468 # glib support probe
3469
3470 glib_req_ver=2.48
3471 glib_modules=gthread-2.0
3472 if test "$modules" = yes; then
3473 glib_modules="$glib_modules gmodule-export-2.0"
3474 fi
3475 if test "$plugins" = yes; then
3476 glib_modules="$glib_modules gmodule-2.0"
3477 fi
3478
3479 for i in $glib_modules; do
3480 if $pkg_config --atleast-version=$glib_req_ver $i; then
3481 glib_cflags=$($pkg_config --cflags $i)
3482 glib_libs=$($pkg_config --libs $i)
3483 else
3484 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3485 fi
3486 done
3487
3488 # This workaround is required due to a bug in pkg-config file for glib as it
3489 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3490
3491 if test "$static" = yes && test "$mingw32" = yes; then
3492 glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
3493 fi
3494
3495 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3496 gio_cflags=$($pkg_config --cflags gio-2.0)
3497 gio_libs=$($pkg_config --libs gio-2.0)
3498 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3499 if [ ! -x "$gdbus_codegen" ]; then
3500 gdbus_codegen=
3501 fi
3502 # Check that the libraries actually work -- Ubuntu 18.04 ships
3503 # with pkg-config --static --libs data for gio-2.0 that is missing
3504 # -lblkid and will give a link error.
3505 cat > $TMPC <<EOF
3506 #include <gio/gio.h>
3507 int main(void)
3508 {
3509 g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
3510 return 0;
3511 }
3512 EOF
3513 if compile_prog "$gio_cflags" "$gio_libs" ; then
3514 gio=yes
3515 else
3516 gio=no
3517 fi
3518 else
3519 gio=no
3520 fi
3521
3522 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3523 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3524 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3525 fi
3526
3527 # Sanity check that the current size_t matches the
3528 # size that glib thinks it should be. This catches
3529 # problems on multi-arch where people try to build
3530 # 32-bit QEMU while pointing at 64-bit glib headers
3531 cat > $TMPC <<EOF
3532 #include <glib.h>
3533 #include <unistd.h>
3534
3535 #define QEMU_BUILD_BUG_ON(x) \
3536 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3537
3538 int main(void) {
3539 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3540 return 0;
3541 }
3542 EOF
3543
3544 if ! compile_prog "$glib_cflags" "$glib_libs" ; then
3545 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3546 "You probably need to set PKG_CONFIG_LIBDIR"\
3547 "to point to the right pkg-config files for your"\
3548 "build target"
3549 fi
3550
3551 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3552 cat > $TMPC << EOF
3553 #include <glib.h>
3554 int main(void) { return 0; }
3555 EOF
3556 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3557 if cc_has_warning_flag "-Wno-unknown-attributes"; then
3558 glib_cflags="-Wno-unknown-attributes $glib_cflags"
3559 CONFIGURE_CFLAGS="-Wno-unknown-attributes $CONFIGURE_CFLAGS"
3560 fi
3561 fi
3562
3563 # Silence clang warnings triggered by glib < 2.57.2
3564 cat > $TMPC << EOF
3565 #include <glib.h>
3566 typedef struct Foo {
3567 int i;
3568 } Foo;
3569 static void foo_free(Foo *f)
3570 {
3571 g_free(f);
3572 }
3573 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3574 int main(void) { return 0; }
3575 EOF
3576 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3577 if cc_has_warning_flag "-Wno-unused-function"; then
3578 glib_cflags="$glib_cflags -Wno-unused-function"
3579 CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
3580 fi
3581 fi
3582
3583 ##########################################
3584 # SHA command probe for modules
3585 if test "$modules" = yes; then
3586 shacmd_probe="sha1sum sha1 shasum"
3587 for c in $shacmd_probe; do
3588 if has $c; then
3589 shacmd="$c"
3590 break
3591 fi
3592 done
3593 if test "$shacmd" = ""; then
3594 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3595 fi
3596 fi
3597
3598 ##########################################
3599 # pthread probe
3600 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3601
3602 pthread=no
3603 cat > $TMPC << EOF
3604 #include <pthread.h>
3605 static void *f(void *p) { return NULL; }
3606 int main(void) {
3607 pthread_t thread;
3608 pthread_create(&thread, 0, f, 0);
3609 return 0;
3610 }
3611 EOF
3612 if compile_prog "" "" ; then
3613 pthread=yes
3614 else
3615 for pthread_lib in $PTHREADLIBS_LIST; do
3616 if compile_prog "" "$pthread_lib" ; then
3617 pthread=yes
3618 found=no
3619 for lib_entry in $LIBS; do
3620 if test "$lib_entry" = "$pthread_lib"; then
3621 found=yes
3622 break
3623 fi
3624 done
3625 if test "$found" = "no"; then
3626 LIBS="$pthread_lib $LIBS"
3627 fi
3628 break
3629 fi
3630 done
3631 fi
3632
3633 if test "$mingw32" != yes && test "$pthread" = no; then
3634 error_exit "pthread check failed" \
3635 "Make sure to have the pthread libs and headers installed."
3636 fi
3637
3638 # check for pthread_setname_np with thread id
3639 pthread_setname_np_w_tid=no
3640 cat > $TMPC << EOF
3641 #include <pthread.h>
3642
3643 static void *f(void *p) { return NULL; }
3644 int main(void)
3645 {
3646 pthread_t thread;
3647 pthread_create(&thread, 0, f, 0);
3648 pthread_setname_np(thread, "QEMU");
3649 return 0;
3650 }
3651 EOF
3652 if compile_prog "" "$pthread_lib" ; then
3653 pthread_setname_np_w_tid=yes
3654 fi
3655
3656 # check for pthread_setname_np without thread id
3657 pthread_setname_np_wo_tid=no
3658 cat > $TMPC << EOF
3659 #include <pthread.h>
3660
3661 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
3662 int main(void)
3663 {
3664 pthread_t thread;
3665 pthread_create(&thread, 0, f, 0);
3666 return 0;
3667 }
3668 EOF
3669 if compile_prog "" "$pthread_lib" ; then
3670 pthread_setname_np_wo_tid=yes
3671 fi
3672
3673 ##########################################
3674 # rbd probe
3675 if test "$rbd" != "no" ; then
3676 cat > $TMPC <<EOF
3677 #include <stdio.h>
3678 #include <rbd/librbd.h>
3679 int main(void) {
3680 rados_t cluster;
3681 rados_create(&cluster, NULL);
3682 return 0;
3683 }
3684 EOF
3685 rbd_libs="-lrbd -lrados"
3686 if compile_prog "" "$rbd_libs" ; then
3687 rbd=yes
3688 else
3689 if test "$rbd" = "yes" ; then
3690 feature_not_found "rados block device" "Install librbd/ceph devel"
3691 fi
3692 rbd=no
3693 fi
3694 fi
3695
3696 ##########################################
3697 # libssh probe
3698 if test "$libssh" != "no" ; then
3699 if $pkg_config --exists libssh; then
3700 libssh_cflags=$($pkg_config libssh --cflags)
3701 libssh_libs=$($pkg_config libssh --libs)
3702 libssh=yes
3703 else
3704 if test "$libssh" = "yes" ; then
3705 error_exit "libssh required for --enable-libssh"
3706 fi
3707 libssh=no
3708 fi
3709 fi
3710
3711 ##########################################
3712 # Check for libssh 0.8
3713 # This is done like this instead of using the LIBSSH_VERSION_* and
3714 # SSH_VERSION_* macros because some distributions in the past shipped
3715 # snapshots of the future 0.8 from Git, and those snapshots did not
3716 # have updated version numbers (still referring to 0.7.0).
3717
3718 if test "$libssh" = "yes"; then
3719 cat > $TMPC <<EOF
3720 #include <libssh/libssh.h>
3721 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3722 EOF
3723 if compile_prog "$libssh_cflags" "$libssh_libs"; then
3724 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3725 fi
3726 fi
3727
3728 ##########################################
3729 # linux-aio probe
3730
3731 if test "$linux_aio" != "no" ; then
3732 cat > $TMPC <<EOF
3733 #include <libaio.h>
3734 #include <sys/eventfd.h>
3735 #include <stddef.h>
3736 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3737 EOF
3738 if compile_prog "" "-laio" ; then
3739 linux_aio=yes
3740 else
3741 if test "$linux_aio" = "yes" ; then
3742 feature_not_found "linux AIO" "Install libaio devel"
3743 fi
3744 linux_aio=no
3745 fi
3746 fi
3747 ##########################################
3748 # linux-io-uring probe
3749
3750 if test "$linux_io_uring" != "no" ; then
3751 if $pkg_config liburing; then
3752 linux_io_uring_cflags=$($pkg_config --cflags liburing)
3753 linux_io_uring_libs=$($pkg_config --libs liburing)
3754 linux_io_uring=yes
3755 else
3756 if test "$linux_io_uring" = "yes" ; then
3757 feature_not_found "linux io_uring" "Install liburing devel"
3758 fi
3759 linux_io_uring=no
3760 fi
3761 fi
3762
3763 ##########################################
3764 # TPM emulation is only on POSIX
3765
3766 if test "$tpm" = ""; then
3767 if test "$mingw32" = "yes"; then
3768 tpm=no
3769 else
3770 tpm=yes
3771 fi
3772 elif test "$tpm" = "yes"; then
3773 if test "$mingw32" = "yes" ; then
3774 error_exit "TPM emulation only available on POSIX systems"
3775 fi
3776 fi
3777
3778 ##########################################
3779 # attr probe
3780
3781 libattr_libs=
3782 if test "$attr" != "no" ; then
3783 cat > $TMPC <<EOF
3784 #include <stdio.h>
3785 #include <sys/types.h>
3786 #ifdef CONFIG_LIBATTR
3787 #include <attr/xattr.h>
3788 #else
3789 #include <sys/xattr.h>
3790 #endif
3791 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3792 EOF
3793 if compile_prog "" "" ; then
3794 attr=yes
3795 # Older distros have <attr/xattr.h>, and need -lattr:
3796 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3797 attr=yes
3798 libattr_libs="-lattr"
3799 libattr=yes
3800 else
3801 if test "$attr" = "yes" ; then
3802 feature_not_found "ATTR" "Install libc6 or libattr devel"
3803 fi
3804 attr=no
3805 fi
3806 fi
3807
3808 ##########################################
3809 # iovec probe
3810 cat > $TMPC <<EOF
3811 #include <sys/types.h>
3812 #include <sys/uio.h>
3813 #include <unistd.h>
3814 int main(void) { return sizeof(struct iovec); }
3815 EOF
3816 iovec=no
3817 if compile_prog "" "" ; then
3818 iovec=yes
3819 fi
3820
3821 ##########################################
3822 # preadv probe
3823 cat > $TMPC <<EOF
3824 #include <sys/types.h>
3825 #include <sys/uio.h>
3826 #include <unistd.h>
3827 int main(void) { return preadv(0, 0, 0, 0); }
3828 EOF
3829 preadv=no
3830 if compile_prog "" "" ; then
3831 preadv=yes
3832 fi
3833
3834 ##########################################
3835 # fdt probe
3836
3837 case "$fdt" in
3838 auto | enabled | internal)
3839 # Simpler to always update submodule, even if not needed.
3840 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
3841 git_submodules="${git_submodules} dtc"
3842 fi
3843 ;;
3844 esac
3845
3846 ##########################################
3847 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3848
3849 gbm="no"
3850 if $pkg_config gbm; then
3851 gbm_cflags="$($pkg_config --cflags gbm)"
3852 gbm_libs="$($pkg_config --libs gbm)"
3853 gbm="yes"
3854 fi
3855
3856 if test "$opengl" != "no" ; then
3857 opengl_pkgs="epoxy gbm"
3858 if $pkg_config $opengl_pkgs; then
3859 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
3860 opengl_libs="$($pkg_config --libs $opengl_pkgs)"
3861 opengl=yes
3862 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3863 gtk_gl="yes"
3864 fi
3865 else
3866 if test "$opengl" = "yes" ; then
3867 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3868 fi
3869 opengl_cflags=""
3870 opengl_libs=""
3871 opengl=no
3872 fi
3873 fi
3874
3875 if test "$opengl" = "yes"; then
3876 cat > $TMPC << EOF
3877 #include <epoxy/egl.h>
3878 #ifndef EGL_MESA_image_dma_buf_export
3879 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3880 #endif
3881 int main(void) { return 0; }
3882 EOF
3883 if compile_prog "" "" ; then
3884 opengl_dmabuf=yes
3885 fi
3886 fi
3887
3888 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
3889 for target in $target_list; do
3890 case $target in
3891 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
3892 need_x11=yes
3893 ;;
3894 esac
3895 done
3896 fi
3897
3898 ##########################################
3899 # libxml2 probe
3900 if test "$libxml2" != "no" ; then
3901 if $pkg_config --exists libxml-2.0; then
3902 libxml2="yes"
3903 libxml2_cflags=$($pkg_config --cflags libxml-2.0)
3904 libxml2_libs=$($pkg_config --libs libxml-2.0)
3905 else
3906 if test "$libxml2" = "yes"; then
3907 feature_not_found "libxml2" "Install libxml2 devel"
3908 fi
3909 libxml2="no"
3910 fi
3911 fi
3912
3913 ##########################################
3914 # glusterfs probe
3915 if test "$glusterfs" != "no" ; then
3916 if $pkg_config --atleast-version=3 glusterfs-api; then
3917 glusterfs="yes"
3918 glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3919 glusterfs_libs=$($pkg_config --libs glusterfs-api)
3920 if $pkg_config --atleast-version=4 glusterfs-api; then
3921 glusterfs_xlator_opt="yes"
3922 fi
3923 if $pkg_config --atleast-version=5 glusterfs-api; then
3924 glusterfs_discard="yes"
3925 fi
3926 if $pkg_config --atleast-version=6 glusterfs-api; then
3927 glusterfs_fallocate="yes"
3928 glusterfs_zerofill="yes"
3929 fi
3930 cat > $TMPC << EOF
3931 #include <glusterfs/api/glfs.h>
3932
3933 int
3934 main(void)
3935 {
3936 /* new glfs_ftruncate() passes two additional args */
3937 return glfs_ftruncate(NULL, 0, NULL, NULL);
3938 }
3939 EOF
3940 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
3941 glusterfs_ftruncate_has_stat="yes"
3942 fi
3943 cat > $TMPC << EOF
3944 #include <glusterfs/api/glfs.h>
3945
3946 /* new glfs_io_cbk() passes two additional glfs_stat structs */
3947 static void
3948 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
3949 {}
3950
3951 int
3952 main(void)
3953 {
3954 glfs_io_cbk iocb = &glusterfs_iocb;
3955 iocb(NULL, 0 , NULL, NULL, NULL);
3956 return 0;
3957 }
3958 EOF
3959 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
3960 glusterfs_iocb_has_stat="yes"
3961 fi
3962 else
3963 if test "$glusterfs" = "yes" ; then
3964 feature_not_found "GlusterFS backend support" \
3965 "Install glusterfs-api devel >= 3"
3966 fi
3967 glusterfs="no"
3968 fi
3969 fi
3970
3971 # Check for inotify functions when we are building linux-user
3972 # emulator. This is done because older glibc versions don't
3973 # have syscall stubs for these implemented. In that case we
3974 # don't provide them even if kernel supports them.
3975 #
3976 inotify=no
3977 cat > $TMPC << EOF
3978 #include <sys/inotify.h>
3979
3980 int
3981 main(void)
3982 {
3983 /* try to start inotify */
3984 return inotify_init();
3985 }
3986 EOF
3987 if compile_prog "" "" ; then
3988 inotify=yes
3989 fi
3990
3991 inotify1=no
3992 cat > $TMPC << EOF
3993 #include <sys/inotify.h>
3994
3995 int
3996 main(void)
3997 {
3998 /* try to start inotify */
3999 return inotify_init1(0);
4000 }
4001 EOF
4002 if compile_prog "" "" ; then
4003 inotify1=yes
4004 fi
4005
4006 # check if pipe2 is there
4007 pipe2=no
4008 cat > $TMPC << EOF
4009 #include <unistd.h>
4010 #include <fcntl.h>
4011
4012 int main(void)
4013 {
4014 int pipefd[2];
4015 return pipe2(pipefd, O_CLOEXEC);
4016 }
4017 EOF
4018 if compile_prog "" "" ; then
4019 pipe2=yes
4020 fi
4021
4022 # check if accept4 is there
4023 accept4=no
4024 cat > $TMPC << EOF
4025 #include <sys/socket.h>
4026 #include <stddef.h>
4027
4028 int main(void)
4029 {
4030 accept4(0, NULL, NULL, SOCK_CLOEXEC);
4031 return 0;
4032 }
4033 EOF
4034 if compile_prog "" "" ; then
4035 accept4=yes
4036 fi
4037
4038 # check if tee/splice is there. vmsplice was added same time.
4039 splice=no
4040 cat > $TMPC << EOF
4041 #include <unistd.h>
4042 #include <fcntl.h>
4043 #include <limits.h>
4044
4045 int main(void)
4046 {
4047 int len, fd = 0;
4048 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4049 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4050 return 0;
4051 }
4052 EOF
4053 if compile_prog "" "" ; then
4054 splice=yes
4055 fi
4056
4057 ##########################################
4058 # libnuma probe
4059
4060 if test "$numa" != "no" ; then
4061 cat > $TMPC << EOF
4062 #include <numa.h>
4063 int main(void) { return numa_available(); }
4064 EOF
4065
4066 if compile_prog "" "-lnuma" ; then
4067 numa=yes
4068 numa_libs="-lnuma"
4069 else
4070 if test "$numa" = "yes" ; then
4071 feature_not_found "numa" "install numactl devel"
4072 fi
4073 numa=no
4074 fi
4075 fi
4076
4077 malloc=system
4078 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4079 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4080 exit 1
4081 elif test "$tcmalloc" = "yes" ; then
4082 malloc=tcmalloc
4083 elif test "$jemalloc" = "yes" ; then
4084 malloc=jemalloc
4085 fi
4086
4087 ##########################################
4088 # signalfd probe
4089 signalfd="no"
4090 cat > $TMPC << EOF
4091 #include <unistd.h>
4092 #include <sys/syscall.h>
4093 #include <signal.h>
4094 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4095 EOF
4096
4097 if compile_prog "" "" ; then
4098 signalfd=yes
4099 fi
4100
4101 # check if optreset global is declared by <getopt.h>
4102 optreset="no"
4103 cat > $TMPC << EOF
4104 #include <getopt.h>
4105 int main(void) { return optreset; }
4106 EOF
4107
4108 if compile_prog "" "" ; then
4109 optreset=yes
4110 fi
4111
4112 # check if eventfd is supported
4113 eventfd=no
4114 cat > $TMPC << EOF
4115 #include <sys/eventfd.h>
4116
4117 int main(void)
4118 {
4119 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4120 }
4121 EOF
4122 if compile_prog "" "" ; then
4123 eventfd=yes
4124 fi
4125
4126 # check if memfd is supported
4127 memfd=no
4128 cat > $TMPC << EOF
4129 #include <sys/mman.h>
4130
4131 int main(void)
4132 {
4133 return memfd_create("foo", MFD_ALLOW_SEALING);
4134 }
4135 EOF
4136 if compile_prog "" "" ; then
4137 memfd=yes
4138 fi
4139
4140 # check for usbfs
4141 have_usbfs=no
4142 if test "$linux_user" = "yes"; then
4143 cat > $TMPC << EOF
4144 #include <linux/usbdevice_fs.h>
4145
4146 #ifndef USBDEVFS_GET_CAPABILITIES
4147 #error "USBDEVFS_GET_CAPABILITIES undefined"
4148 #endif
4149
4150 #ifndef USBDEVFS_DISCONNECT_CLAIM
4151 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4152 #endif
4153
4154 int main(void)
4155 {
4156 return 0;
4157 }
4158 EOF
4159 if compile_prog "" ""; then
4160 have_usbfs=yes
4161 fi
4162 fi
4163
4164 # check for fallocate
4165 fallocate=no
4166 cat > $TMPC << EOF
4167 #include <fcntl.h>
4168
4169 int main(void)
4170 {
4171 fallocate(0, 0, 0, 0);
4172 return 0;
4173 }
4174 EOF
4175 if compile_prog "" "" ; then
4176 fallocate=yes
4177 fi
4178
4179 # check for fallocate hole punching
4180 fallocate_punch_hole=no
4181 cat > $TMPC << EOF
4182 #include <fcntl.h>
4183 #include <linux/falloc.h>
4184
4185 int main(void)
4186 {
4187 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4188 return 0;
4189 }
4190 EOF
4191 if compile_prog "" "" ; then
4192 fallocate_punch_hole=yes
4193 fi
4194
4195 # check that fallocate supports range zeroing inside the file
4196 fallocate_zero_range=no
4197 cat > $TMPC << EOF
4198 #include <fcntl.h>
4199 #include <linux/falloc.h>
4200
4201 int main(void)
4202 {
4203 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4204 return 0;
4205 }
4206 EOF
4207 if compile_prog "" "" ; then
4208 fallocate_zero_range=yes
4209 fi
4210
4211 # check for posix_fallocate
4212 posix_fallocate=no
4213 cat > $TMPC << EOF
4214 #include <fcntl.h>
4215
4216 int main(void)
4217 {
4218 posix_fallocate(0, 0, 0);
4219 return 0;
4220 }
4221 EOF
4222 if compile_prog "" "" ; then
4223 posix_fallocate=yes
4224 fi
4225
4226 # check for sync_file_range
4227 sync_file_range=no
4228 cat > $TMPC << EOF
4229 #include <fcntl.h>
4230
4231 int main(void)
4232 {
4233 sync_file_range(0, 0, 0, 0);
4234 return 0;
4235 }
4236 EOF
4237 if compile_prog "" "" ; then
4238 sync_file_range=yes
4239 fi
4240
4241 # check for linux/fiemap.h and FS_IOC_FIEMAP
4242 fiemap=no
4243 cat > $TMPC << EOF
4244 #include <sys/ioctl.h>
4245 #include <linux/fs.h>
4246 #include <linux/fiemap.h>
4247
4248 int main(void)
4249 {
4250 ioctl(0, FS_IOC_FIEMAP, 0);
4251 return 0;
4252 }
4253 EOF
4254 if compile_prog "" "" ; then
4255 fiemap=yes
4256 fi
4257
4258 # check for dup3
4259 dup3=no
4260 cat > $TMPC << EOF
4261 #include <unistd.h>
4262
4263 int main(void)
4264 {
4265 dup3(0, 0, 0);
4266 return 0;
4267 }
4268 EOF
4269 if compile_prog "" "" ; then
4270 dup3=yes
4271 fi
4272
4273 # check for ppoll support
4274 ppoll=no
4275 cat > $TMPC << EOF
4276 #include <poll.h>
4277
4278 int main(void)
4279 {
4280 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4281 ppoll(&pfd, 1, 0, 0);
4282 return 0;
4283 }
4284 EOF
4285 if compile_prog "" "" ; then
4286 ppoll=yes
4287 fi
4288
4289 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4290 prctl_pr_set_timerslack=no
4291 cat > $TMPC << EOF
4292 #include <sys/prctl.h>
4293
4294 int main(void)
4295 {
4296 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4297 return 0;
4298 }
4299 EOF
4300 if compile_prog "" "" ; then
4301 prctl_pr_set_timerslack=yes
4302 fi
4303
4304 # check for epoll support
4305 epoll=no
4306 cat > $TMPC << EOF
4307 #include <sys/epoll.h>
4308
4309 int main(void)
4310 {
4311 epoll_create(0);
4312 return 0;
4313 }
4314 EOF
4315 if compile_prog "" "" ; then
4316 epoll=yes
4317 fi
4318
4319 # epoll_create1 is a later addition
4320 # so we must check separately for its presence
4321 epoll_create1=no
4322 cat > $TMPC << EOF
4323 #include <sys/epoll.h>
4324
4325 int main(void)
4326 {
4327 /* Note that we use epoll_create1 as a value, not as
4328 * a function being called. This is necessary so that on
4329 * old SPARC glibc versions where the function was present in
4330 * the library but not declared in the header file we will
4331 * fail the configure check. (Otherwise we will get a compiler
4332 * warning but not an error, and will proceed to fail the
4333 * qemu compile where we compile with -Werror.)
4334 */
4335 return (int)(uintptr_t)&epoll_create1;
4336 }
4337 EOF
4338 if compile_prog "" "" ; then
4339 epoll_create1=yes
4340 fi
4341
4342 # check for sendfile support
4343 sendfile=no
4344 cat > $TMPC << EOF
4345 #include <sys/sendfile.h>
4346
4347 int main(void)
4348 {
4349 return sendfile(0, 0, 0, 0);
4350 }
4351 EOF
4352 if compile_prog "" "" ; then
4353 sendfile=yes
4354 fi
4355
4356 # check for timerfd support (glibc 2.8 and newer)
4357 timerfd=no
4358 cat > $TMPC << EOF
4359 #include <sys/timerfd.h>
4360
4361 int main(void)
4362 {
4363 return(timerfd_create(CLOCK_REALTIME, 0));
4364 }
4365 EOF
4366 if compile_prog "" "" ; then
4367 timerfd=yes
4368 fi
4369
4370 # check for setns and unshare support
4371 setns=no
4372 cat > $TMPC << EOF
4373 #include <sched.h>
4374
4375 int main(void)
4376 {
4377 int ret;
4378 ret = setns(0, 0);
4379 ret = unshare(0);
4380 return ret;
4381 }
4382 EOF
4383 if compile_prog "" "" ; then
4384 setns=yes
4385 fi
4386
4387 # clock_adjtime probe
4388 clock_adjtime=no
4389 cat > $TMPC <<EOF
4390 #include <time.h>
4391
4392 int main(void)
4393 {
4394 return clock_adjtime(0, 0);
4395 }
4396 EOF
4397 clock_adjtime=no
4398 if compile_prog "" "" ; then
4399 clock_adjtime=yes
4400 fi
4401
4402 # syncfs probe
4403 syncfs=no
4404 cat > $TMPC <<EOF
4405 #include <unistd.h>
4406
4407 int main(void)
4408 {
4409 return syncfs(0);
4410 }
4411 EOF
4412 syncfs=no
4413 if compile_prog "" "" ; then
4414 syncfs=yes
4415 fi
4416
4417 # check for kcov support (kernel must be 4.4+, compiled with certain options)
4418 kcov=no
4419 if check_include sys/kcov.h ; then
4420 kcov=yes
4421 fi
4422
4423 # check for btrfs filesystem support (kernel must be 3.9+)
4424 btrfs=no
4425 if check_include linux/btrfs.h ; then
4426 btrfs=yes
4427 fi
4428
4429 # Search for bswap_32 function
4430 byteswap_h=no
4431 cat > $TMPC << EOF
4432 #include <byteswap.h>
4433 int main(void) { return bswap_32(0); }
4434 EOF
4435 if compile_prog "" "" ; then
4436 byteswap_h=yes
4437 fi
4438
4439 # Search for bswap32 function
4440 bswap_h=no
4441 cat > $TMPC << EOF
4442 #include <sys/endian.h>
4443 #include <sys/types.h>
4444 #include <machine/bswap.h>
4445 int main(void) { return bswap32(0); }
4446 EOF
4447 if compile_prog "" "" ; then
4448 bswap_h=yes
4449 fi
4450
4451 ##########################################
4452 # Do we have libiscsi >= 1.9.0
4453 if test "$libiscsi" != "no" ; then
4454 if $pkg_config --atleast-version=1.9.0 libiscsi; then
4455 libiscsi="yes"
4456 libiscsi_cflags=$($pkg_config --cflags libiscsi)
4457 libiscsi_libs=$($pkg_config --libs libiscsi)
4458 else
4459 if test "$libiscsi" = "yes" ; then
4460 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4461 fi
4462 libiscsi="no"
4463 fi
4464 fi
4465
4466 ##########################################
4467 # Do we need librt
4468 # uClibc provides 2 versions of clock_gettime(), one with realtime
4469 # support and one without. This means that the clock_gettime() don't
4470 # need -lrt. We still need it for timer_create() so we check for this
4471 # function in addition.
4472 cat > $TMPC <<EOF
4473 #include <signal.h>
4474 #include <time.h>
4475 int main(void) {
4476 timer_create(CLOCK_REALTIME, NULL, NULL);
4477 return clock_gettime(CLOCK_REALTIME, NULL);
4478 }
4479 EOF
4480
4481 if compile_prog "" "" ; then
4482 :
4483 # we need pthread for static linking. use previous pthread test result
4484 elif compile_prog "" "$pthread_lib -lrt" ; then
4485 LIBS="$LIBS -lrt"
4486 fi
4487
4488 # Check whether we have openpty() in either libc or libutil
4489 cat > $TMPC << EOF
4490 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4491 int main(void) { return openpty(0, 0, 0, 0, 0); }
4492 EOF
4493
4494 have_openpty="no"
4495 if compile_prog "" "" ; then
4496 have_openpty="yes"
4497 else
4498 if compile_prog "" "-lutil" ; then
4499 have_openpty="yes"
4500 fi
4501 fi
4502
4503 ##########################################
4504 # spice probe
4505 if test "$spice" != "no" ; then
4506 cat > $TMPC << EOF
4507 #include <spice.h>
4508 int main(void) { spice_server_new(); return 0; }
4509 EOF
4510 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4511 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4512 if $pkg_config --atleast-version=0.12.5 spice-server && \
4513 $pkg_config --atleast-version=0.12.3 spice-protocol && \
4514 compile_prog "$spice_cflags" "$spice_libs" ; then
4515 spice="yes"
4516 else
4517 if test "$spice" = "yes" ; then
4518 feature_not_found "spice" \
4519 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4520 fi
4521 spice="no"
4522 fi
4523 fi
4524
4525 # check for smartcard support
4526 if test "$smartcard" != "no"; then
4527 if $pkg_config --atleast-version=2.5.1 libcacard; then
4528 libcacard_cflags=$($pkg_config --cflags libcacard)
4529 libcacard_libs=$($pkg_config --libs libcacard)
4530 smartcard="yes"
4531 else
4532 if test "$smartcard" = "yes"; then
4533 feature_not_found "smartcard" "Install libcacard devel"
4534 fi
4535 smartcard="no"
4536 fi
4537 fi
4538
4539 # check for libusb
4540 if test "$libusb" != "no" ; then
4541 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4542 libusb="yes"
4543 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4544 libusb_libs=$($pkg_config --libs libusb-1.0)
4545 else
4546 if test "$libusb" = "yes"; then
4547 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4548 fi
4549 libusb="no"
4550 fi
4551 fi
4552
4553 # check for usbredirparser for usb network redirection support
4554 if test "$usb_redir" != "no" ; then
4555 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4556 usb_redir="yes"
4557 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4558 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4559 else
4560 if test "$usb_redir" = "yes"; then
4561 feature_not_found "usb-redir" "Install usbredir devel"
4562 fi
4563 usb_redir="no"
4564 fi
4565 fi
4566
4567 ##########################################
4568 # check if we have VSS SDK headers for win
4569
4570 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4571 test "$vss_win32_sdk" != "no" ; then
4572 case "$vss_win32_sdk" in
4573 "") vss_win32_include="-isystem $source_path" ;;
4574 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4575 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4576 vss_win32_include="-isystem $source_path/.sdk/vss"
4577 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4578 ;;
4579 *) vss_win32_include="-isystem $vss_win32_sdk"
4580 esac
4581 cat > $TMPC << EOF
4582 #define __MIDL_user_allocate_free_DEFINED__
4583 #include <inc/win2003/vss.h>
4584 int main(void) { return VSS_CTX_BACKUP; }
4585 EOF
4586 if compile_prog "$vss_win32_include" "" ; then
4587 guest_agent_with_vss="yes"
4588 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4589 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4590 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4591 else
4592 if test "$vss_win32_sdk" != "" ; then
4593 echo "ERROR: Please download and install Microsoft VSS SDK:"
4594 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4595 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4596 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4597 echo "ERROR: The headers are extracted in the directory \`inc'."
4598 feature_not_found "VSS support"
4599 fi
4600 guest_agent_with_vss="no"
4601 fi
4602 fi
4603
4604 ##########################################
4605 # lookup Windows platform SDK (if not specified)
4606 # The SDK is needed only to build .tlb (type library) file of guest agent
4607 # VSS provider from the source. It is usually unnecessary because the
4608 # pre-compiled .tlb file is included.
4609
4610 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4611 test "$guest_agent_with_vss" = "yes" ; then
4612 if test -z "$win_sdk"; then
4613 programfiles="$PROGRAMFILES"
4614 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4615 if test -n "$programfiles"; then
4616 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4617 else
4618 feature_not_found "Windows SDK"
4619 fi
4620 elif test "$win_sdk" = "no"; then
4621 win_sdk=""
4622 fi
4623 fi
4624
4625 ##########################################
4626 # check if mingw environment provides a recent ntddscsi.h
4627 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4628 cat > $TMPC << EOF
4629 #include <windows.h>
4630 #include <ntddscsi.h>
4631 int main(void) {
4632 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4633 #error Missing required ioctl definitions
4634 #endif
4635 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4636 return addr.Lun;
4637 }
4638 EOF
4639 if compile_prog "" "" ; then
4640 guest_agent_ntddscsi=yes
4641 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4642 fi
4643 fi
4644
4645 ##########################################
4646 # virgl renderer probe
4647
4648 if test "$virglrenderer" != "no" ; then
4649 cat > $TMPC << EOF
4650 #include <virglrenderer.h>
4651 int main(void) { virgl_renderer_poll(); return 0; }
4652 EOF
4653 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4654 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4655 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4656 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4657 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4658 virglrenderer="yes"
4659 else
4660 if test "$virglrenderer" = "yes" ; then
4661 feature_not_found "virglrenderer"
4662 fi
4663 virglrenderer="no"
4664 fi
4665 fi
4666
4667 ##########################################
4668 # capstone
4669
4670 case "$capstone" in
4671 auto | enabled | internal)
4672 # Simpler to always update submodule, even if not needed.
4673 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
4674 git_submodules="${git_submodules} capstone"
4675 fi
4676 ;;
4677 esac
4678
4679 ##########################################
4680 # check if we have fdatasync
4681
4682 fdatasync=no
4683 cat > $TMPC << EOF
4684 #include <unistd.h>
4685 int main(void) {
4686 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4687 return fdatasync(0);
4688 #else
4689 #error Not supported
4690 #endif
4691 }
4692 EOF
4693 if compile_prog "" "" ; then
4694 fdatasync=yes
4695 fi
4696
4697 ##########################################
4698 # check if we have madvise
4699
4700 madvise=no
4701 cat > $TMPC << EOF
4702 #include <sys/types.h>
4703 #include <sys/mman.h>
4704 #include <stddef.h>
4705 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4706 EOF
4707 if compile_prog "" "" ; then
4708 madvise=yes
4709 fi
4710
4711 ##########################################
4712 # check if we have posix_madvise
4713
4714 posix_madvise=no
4715 cat > $TMPC << EOF
4716 #include <sys/mman.h>
4717 #include <stddef.h>
4718 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4719 EOF
4720 if compile_prog "" "" ; then
4721 posix_madvise=yes
4722 fi
4723
4724 ##########################################
4725 # check if we have posix_memalign()
4726
4727 posix_memalign=no
4728 cat > $TMPC << EOF
4729 #include <stdlib.h>
4730 int main(void) {
4731 void *p;
4732 return posix_memalign(&p, 8, 8);
4733 }
4734 EOF
4735 if compile_prog "" "" ; then
4736 posix_memalign=yes
4737 fi
4738
4739 ##########################################
4740 # check if we have posix_syslog
4741
4742 posix_syslog=no
4743 cat > $TMPC << EOF
4744 #include <syslog.h>
4745 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4746 EOF
4747 if compile_prog "" "" ; then
4748 posix_syslog=yes
4749 fi
4750
4751 ##########################################
4752 # check if we have sem_timedwait
4753
4754 sem_timedwait=no
4755 cat > $TMPC << EOF
4756 #include <semaphore.h>
4757 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
4758 EOF
4759 if compile_prog "" "" ; then
4760 sem_timedwait=yes
4761 fi
4762
4763 ##########################################
4764 # check if we have strchrnul
4765
4766 strchrnul=no
4767 cat > $TMPC << EOF
4768 #include <string.h>
4769 int main(void);
4770 // Use a haystack that the compiler shouldn't be able to constant fold
4771 char *haystack = (char*)&main;
4772 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
4773 EOF
4774 if compile_prog "" "" ; then
4775 strchrnul=yes
4776 fi
4777
4778 #########################################
4779 # check if we have st_atim
4780
4781 st_atim=no
4782 cat > $TMPC << EOF
4783 #include <sys/stat.h>
4784 #include <stddef.h>
4785 int main(void) { return offsetof(struct stat, st_atim); }
4786 EOF
4787 if compile_prog "" "" ; then
4788 st_atim=yes
4789 fi
4790
4791 ##########################################
4792 # check if trace backend exists
4793
4794 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4795 if test "$?" -ne 0 ; then
4796 error_exit "invalid trace backends" \
4797 "Please choose supported trace backends."
4798 fi
4799
4800 ##########################################
4801 # For 'ust' backend, test if ust headers are present
4802 if have_backend "ust"; then
4803 cat > $TMPC << EOF
4804 #include <lttng/tracepoint.h>
4805 int main(void) { return 0; }
4806 EOF
4807 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4808 if $pkg_config lttng-ust --exists; then
4809 lttng_ust_libs=$($pkg_config --libs lttng-ust)
4810 else
4811 lttng_ust_libs="-llttng-ust -ldl"
4812 fi
4813 if $pkg_config liburcu-bp --exists; then
4814 urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4815 else
4816 urcu_bp_libs="-lurcu-bp"
4817 fi
4818 else
4819 error_exit "Trace backend 'ust' missing lttng-ust header files"
4820 fi
4821 fi
4822
4823 ##########################################
4824 # For 'dtrace' backend, test if 'dtrace' command is present
4825 if have_backend "dtrace"; then
4826 if ! has 'dtrace' ; then
4827 error_exit "dtrace command is not found in PATH $PATH"
4828 fi
4829 trace_backend_stap="no"
4830 if has 'stap' ; then
4831 trace_backend_stap="yes"
4832
4833 # Workaround to avoid dtrace(1) producing a file with 'hidden' symbol
4834 # visibility. Define STAP_SDT_V2 to produce 'default' symbol visibility
4835 # instead. QEMU --enable-modules depends on this because the SystemTap
4836 # semaphores are linked into the main binary and not the module's shared
4837 # object.
4838 QEMU_CFLAGS="$QEMU_CFLAGS -DSTAP_SDT_V2"
4839 fi
4840 fi
4841
4842 ##########################################
4843 # check and set a backend for coroutine
4844
4845 # We prefer ucontext, but it's not always possible. The fallback
4846 # is sigcontext. On Windows the only valid backend is the Windows
4847 # specific one.
4848
4849 ucontext_works=no
4850 if test "$darwin" != "yes"; then
4851 cat > $TMPC << EOF
4852 #include <ucontext.h>
4853 #ifdef __stub_makecontext
4854 #error Ignoring glibc stub makecontext which will always fail
4855 #endif
4856 int main(void) { makecontext(0, 0, 0); return 0; }
4857 EOF
4858 if compile_prog "" "" ; then
4859 ucontext_works=yes
4860 fi
4861 fi
4862
4863 if test "$coroutine" = ""; then
4864 if test "$mingw32" = "yes"; then
4865 coroutine=win32
4866 elif test "$ucontext_works" = "yes"; then
4867 coroutine=ucontext
4868 else
4869 coroutine=sigaltstack
4870 fi
4871 else
4872 case $coroutine in
4873 windows)
4874 if test "$mingw32" != "yes"; then
4875 error_exit "'windows' coroutine backend only valid for Windows"
4876 fi
4877 # Unfortunately the user visible backend name doesn't match the
4878 # coroutine-*.c filename for this case, so we have to adjust it here.
4879 coroutine=win32
4880 ;;
4881 ucontext)
4882 if test "$ucontext_works" != "yes"; then
4883 feature_not_found "ucontext"
4884 fi
4885 ;;
4886 sigaltstack)
4887 if test "$mingw32" = "yes"; then
4888 error_exit "only the 'windows' coroutine backend is valid for Windows"
4889 fi
4890 ;;
4891 *)
4892 error_exit "unknown coroutine backend $coroutine"
4893 ;;
4894 esac
4895 fi
4896
4897 if test "$coroutine_pool" = ""; then
4898 coroutine_pool=yes
4899 fi
4900
4901 if test "$debug_stack_usage" = "yes"; then
4902 if test "$coroutine_pool" = "yes"; then
4903 echo "WARN: disabling coroutine pool for stack usage debugging"
4904 coroutine_pool=no
4905 fi
4906 fi
4907
4908 ##################################################
4909 # SafeStack
4910
4911
4912 if test "$safe_stack" = "yes"; then
4913 cat > $TMPC << EOF
4914 int main(int argc, char *argv[])
4915 {
4916 #if ! __has_feature(safe_stack)
4917 #error SafeStack Disabled
4918 #endif
4919 return 0;
4920 }
4921 EOF
4922 flag="-fsanitize=safe-stack"
4923 # Check that safe-stack is supported and enabled.
4924 if compile_prog "-Werror $flag" "$flag"; then
4925 # Flag needed both at compilation and at linking
4926 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4927 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4928 else
4929 error_exit "SafeStack not supported by your compiler"
4930 fi
4931 if test "$coroutine" != "ucontext"; then
4932 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4933 fi
4934 else
4935 cat > $TMPC << EOF
4936 int main(int argc, char *argv[])
4937 {
4938 #if defined(__has_feature)
4939 #if __has_feature(safe_stack)
4940 #error SafeStack Enabled
4941 #endif
4942 #endif
4943 return 0;
4944 }
4945 EOF
4946 if test "$safe_stack" = "no"; then
4947 # Make sure that safe-stack is disabled
4948 if ! compile_prog "-Werror" ""; then
4949 # SafeStack was already enabled, try to explicitly remove the feature
4950 flag="-fno-sanitize=safe-stack"
4951 if ! compile_prog "-Werror $flag" "$flag"; then
4952 error_exit "Configure cannot disable SafeStack"
4953 fi
4954 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
4955 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
4956 fi
4957 else # "$safe_stack" = ""
4958 # Set safe_stack to yes or no based on pre-existing flags
4959 if compile_prog "-Werror" ""; then
4960 safe_stack="no"
4961 else
4962 safe_stack="yes"
4963 if test "$coroutine" != "ucontext"; then
4964 error_exit "SafeStack is only supported by the coroutine backend ucontext"
4965 fi
4966 fi
4967 fi
4968 fi
4969
4970 ##########################################
4971 # check if we have open_by_handle_at
4972
4973 open_by_handle_at=no
4974 cat > $TMPC << EOF
4975 #include <fcntl.h>
4976 #if !defined(AT_EMPTY_PATH)
4977 # error missing definition
4978 #else
4979 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4980 #endif
4981 EOF
4982 if compile_prog "" "" ; then
4983 open_by_handle_at=yes
4984 fi
4985
4986 ########################################
4987 # check if we have linux/magic.h
4988
4989 linux_magic_h=no
4990 cat > $TMPC << EOF
4991 #include <linux/magic.h>
4992 int main(void) {
4993 return 0;
4994 }
4995 EOF
4996 if compile_prog "" "" ; then
4997 linux_magic_h=yes
4998 fi
4999
5000 ########################################
5001 # check if we have valgrind/valgrind.h
5002
5003 valgrind_h=no
5004 cat > $TMPC << EOF
5005 #include <valgrind/valgrind.h>
5006 int main(void) {
5007 return 0;
5008 }
5009 EOF
5010 if compile_prog "" "" ; then
5011 valgrind_h=yes
5012 fi
5013
5014 ########################################
5015 # check if environ is declared
5016
5017 has_environ=no
5018 cat > $TMPC << EOF
5019 #include <unistd.h>
5020 int main(void) {
5021 environ = 0;
5022 return 0;
5023 }
5024 EOF
5025 if compile_prog "" "" ; then
5026 has_environ=yes
5027 fi
5028
5029 ########################################
5030 # check if cpuid.h is usable.
5031
5032 cat > $TMPC << EOF
5033 #include <cpuid.h>
5034 int main(void) {
5035 unsigned a, b, c, d;
5036 int max = __get_cpuid_max(0, 0);
5037
5038 if (max >= 1) {
5039 __cpuid(1, a, b, c, d);
5040 }
5041
5042 if (max >= 7) {
5043 __cpuid_count(7, 0, a, b, c, d);
5044 }
5045
5046 return 0;
5047 }
5048 EOF
5049 if compile_prog "" "" ; then
5050 cpuid_h=yes
5051 fi
5052
5053 ##########################################
5054 # avx2 optimization requirement check
5055 #
5056 # There is no point enabling this if cpuid.h is not usable,
5057 # since we won't be able to select the new routines.
5058
5059 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5060 cat > $TMPC << EOF
5061 #pragma GCC push_options
5062 #pragma GCC target("avx2")
5063 #include <cpuid.h>
5064 #include <immintrin.h>
5065 static int bar(void *a) {
5066 __m256i x = *(__m256i *)a;
5067 return _mm256_testz_si256(x, x);
5068 }
5069 int main(int argc, char *argv[]) { return bar(argv[0]); }
5070 EOF
5071 if compile_object "" ; then
5072 avx2_opt="yes"
5073 else
5074 avx2_opt="no"
5075 fi
5076 fi
5077
5078 ##########################################
5079 # avx512f optimization requirement check
5080 #
5081 # There is no point enabling this if cpuid.h is not usable,
5082 # since we won't be able to select the new routines.
5083 # by default, it is turned off.
5084 # if user explicitly want to enable it, check environment
5085
5086 if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then
5087 cat > $TMPC << EOF
5088 #pragma GCC push_options
5089 #pragma GCC target("avx512f")
5090 #include <cpuid.h>
5091 #include <immintrin.h>
5092 static int bar(void *a) {
5093 __m512i x = *(__m512i *)a;
5094 return _mm512_test_epi64_mask(x, x);
5095 }
5096 int main(int argc, char *argv[])
5097 {
5098 return bar(argv[0]);
5099 }
5100 EOF
5101 if ! compile_object "" ; then
5102 avx512f_opt="no"
5103 fi
5104 else
5105 avx512f_opt="no"
5106 fi
5107
5108 ########################################
5109 # check if __[u]int128_t is usable.
5110
5111 int128=no
5112 cat > $TMPC << EOF
5113 __int128_t a;
5114 __uint128_t b;
5115 int main (void) {
5116 a = a + b;
5117 b = a * b;
5118 a = a * a;
5119 return 0;
5120 }
5121 EOF
5122 if compile_prog "" "" ; then
5123 int128=yes
5124 fi
5125
5126 #########################################
5127 # See if 128-bit atomic operations are supported.
5128
5129 atomic128=no
5130 if test "$int128" = "yes"; then
5131 cat > $TMPC << EOF
5132 int main(void)
5133 {
5134 unsigned __int128 x = 0, y = 0;
5135 y = __atomic_load_16(&x, 0);
5136 __atomic_store_16(&x, y, 0);
5137 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5138 return 0;
5139 }
5140 EOF
5141 if compile_prog "" "" ; then
5142 atomic128=yes
5143 fi
5144 fi
5145
5146 cmpxchg128=no
5147 if test "$int128" = yes && test "$atomic128" = no; then
5148 cat > $TMPC << EOF
5149 int main(void)
5150 {
5151 unsigned __int128 x = 0, y = 0;
5152 __sync_val_compare_and_swap_16(&x, y, x);
5153 return 0;
5154 }
5155 EOF
5156 if compile_prog "" "" ; then
5157 cmpxchg128=yes
5158 fi
5159 fi
5160
5161 #########################################
5162 # See if 64-bit atomic operations are supported.
5163 # Note that without __atomic builtins, we can only
5164 # assume atomic loads/stores max at pointer size.
5165
5166 cat > $TMPC << EOF
5167 #include <stdint.h>
5168 int main(void)
5169 {
5170 uint64_t x = 0, y = 0;
5171 #ifdef __ATOMIC_RELAXED
5172 y = __atomic_load_n(&x, __ATOMIC_RELAXED);
5173 __atomic_store_n(&x, y, __ATOMIC_RELAXED);
5174 __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
5175 __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
5176 __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
5177 #else
5178 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5179 __sync_lock_test_and_set(&x, y);
5180 __sync_val_compare_and_swap(&x, y, 0);
5181 __sync_fetch_and_add(&x, y);
5182 #endif
5183 return 0;
5184 }
5185 EOF
5186 if compile_prog "" "" ; then
5187 atomic64=yes
5188 fi
5189
5190 #########################################
5191 # See if --dynamic-list is supported by the linker
5192 ld_dynamic_list="no"
5193 if test "$static" = "no" ; then
5194 cat > $TMPTXT <<EOF
5195 {
5196 foo;
5197 };
5198 EOF
5199
5200 cat > $TMPC <<EOF
5201 #include <stdio.h>
5202 void foo(void);
5203
5204 void foo(void)
5205 {
5206 printf("foo\n");
5207 }
5208
5209 int main(void)
5210 {
5211 foo();
5212 return 0;
5213 }
5214 EOF
5215
5216 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then
5217 ld_dynamic_list="yes"
5218 fi
5219 fi
5220
5221 #########################################
5222 # See if -exported_symbols_list is supported by the linker
5223
5224 ld_exported_symbols_list="no"
5225 if test "$static" = "no" ; then
5226 cat > $TMPTXT <<EOF
5227 _foo
5228 EOF
5229
5230 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
5231 ld_exported_symbols_list="yes"
5232 fi
5233 fi
5234
5235 if test "$plugins" = "yes" &&
5236 test "$ld_dynamic_list" = "no" &&
5237 test "$ld_exported_symbols_list" = "no" ; then
5238 error_exit \
5239 "Plugin support requires dynamic linking and specifying a set of symbols " \
5240 "that are exported to plugins. Unfortunately your linker doesn't " \
5241 "support the flag (--dynamic-list or -exported_symbols_list) used " \
5242 "for this purpose. You can't build with --static."
5243 fi
5244
5245 ########################################
5246 # See if __attribute__((alias)) is supported.
5247 # This false for Xcode 9, but has been remedied for Xcode 10.
5248 # Unfortunately, travis uses Xcode 9 by default.
5249
5250 attralias=no
5251 cat > $TMPC << EOF
5252 int x = 1;
5253 extern const int y __attribute__((alias("x")));
5254 int main(void) { return 0; }
5255 EOF
5256 if compile_prog "" "" ; then
5257 attralias=yes
5258 fi
5259
5260 ########################################
5261 # check if getauxval is available.
5262
5263 getauxval=no
5264 cat > $TMPC << EOF
5265 #include <sys/auxv.h>
5266 int main(void) {
5267 return getauxval(AT_HWCAP) == 0;
5268 }
5269 EOF
5270 if compile_prog "" "" ; then
5271 getauxval=yes
5272 fi
5273
5274 ########################################
5275 # check if ccache is interfering with
5276 # semantic analysis of macros
5277
5278 unset CCACHE_CPP2
5279 ccache_cpp2=no
5280 cat > $TMPC << EOF
5281 static const int Z = 1;
5282 #define fn() ({ Z; })
5283 #define TAUT(X) ((X) == Z)
5284 #define PAREN(X, Y) (X == Y)
5285 #define ID(X) (X)
5286 int main(int argc, char *argv[])
5287 {
5288 int x = 0, y = 0;
5289 x = ID(x);
5290 x = fn();
5291 fn();
5292 if (PAREN(x, y)) return 0;
5293 if (TAUT(Z)) return 0;
5294 return 0;
5295 }
5296 EOF
5297
5298 if ! compile_object "-Werror"; then
5299 ccache_cpp2=yes
5300 fi
5301
5302 #################################################
5303 # clang does not support glibc + FORTIFY_SOURCE.
5304
5305 if test "$fortify_source" != "no"; then
5306 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5307 fortify_source="no";
5308 elif test -n "$cxx" && has $cxx &&
5309 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5310 fortify_source="no";
5311 else
5312 fortify_source="yes"
5313 fi
5314 fi
5315
5316 ###############################################
5317 # Check if copy_file_range is provided by glibc
5318 have_copy_file_range=no
5319 cat > $TMPC << EOF
5320 #include <unistd.h>
5321 int main(void) {
5322 copy_file_range(0, NULL, 0, NULL, 0, 0);
5323 return 0;
5324 }
5325 EOF
5326 if compile_prog "" "" ; then
5327 have_copy_file_range=yes
5328 fi
5329
5330 ##########################################
5331 # check if struct fsxattr is available via linux/fs.h
5332
5333 have_fsxattr=no
5334 cat > $TMPC << EOF
5335 #include <linux/fs.h>
5336 struct fsxattr foo;
5337 int main(void) {
5338 return 0;
5339 }
5340 EOF
5341 if compile_prog "" "" ; then
5342 have_fsxattr=yes
5343 fi
5344
5345 ##########################################
5346 # check for usable membarrier system call
5347 if test "$membarrier" = "yes"; then
5348 have_membarrier=no
5349 if test "$mingw32" = "yes" ; then
5350 have_membarrier=yes
5351 elif test "$linux" = "yes" ; then
5352 cat > $TMPC << EOF
5353 #include <linux/membarrier.h>
5354 #include <sys/syscall.h>
5355 #include <unistd.h>
5356 #include <stdlib.h>
5357 int main(void) {
5358 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5359 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5360 exit(0);
5361 }
5362 EOF
5363 if compile_prog "" "" ; then
5364 have_membarrier=yes
5365 fi
5366 fi
5367 if test "$have_membarrier" = "no"; then
5368 feature_not_found "membarrier" "membarrier system call not available"
5369 fi
5370 else
5371 # Do not enable it by default even for Mingw32, because it doesn't
5372 # work on Wine.
5373 membarrier=no
5374 fi
5375
5376 ##########################################
5377 # check if rtnetlink.h exists and is useful
5378 have_rtnetlink=no
5379 cat > $TMPC << EOF
5380 #include <linux/rtnetlink.h>
5381 int main(void) {
5382 return IFLA_PROTO_DOWN;
5383 }
5384 EOF
5385 if compile_prog "" "" ; then
5386 have_rtnetlink=yes
5387 fi
5388
5389 ##########################################
5390 # check for usable AF_VSOCK environment
5391 have_af_vsock=no
5392 cat > $TMPC << EOF
5393 #include <errno.h>
5394 #include <sys/types.h>
5395 #include <sys/socket.h>
5396 #if !defined(AF_VSOCK)
5397 # error missing AF_VSOCK flag
5398 #endif
5399 #include <linux/vm_sockets.h>
5400 int main(void) {
5401 int sock, ret;
5402 struct sockaddr_vm svm;
5403 socklen_t len = sizeof(svm);
5404 sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5405 ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5406 if ((ret == -1) && (errno == ENOTCONN)) {
5407 return 0;
5408 }
5409 return -1;
5410 }
5411 EOF
5412 if compile_prog "" "" ; then
5413 have_af_vsock=yes
5414 fi
5415
5416 ##########################################
5417 # check for usable AF_ALG environment
5418 have_afalg=no
5419 cat > $TMPC << EOF
5420 #include <errno.h>
5421 #include <sys/types.h>
5422 #include <sys/socket.h>
5423 #include <linux/if_alg.h>
5424 int main(void) {
5425 int sock;
5426 sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5427 return sock;
5428 }
5429 EOF
5430 if compile_prog "" "" ; then
5431 have_afalg=yes
5432 fi
5433 if test "$crypto_afalg" = "yes"
5434 then
5435 if test "$have_afalg" != "yes"
5436 then
5437 error_exit "AF_ALG requested but could not be detected"
5438 fi
5439 fi
5440
5441
5442 #################################################
5443 # check for sysmacros.h
5444
5445 have_sysmacros=no
5446 cat > $TMPC << EOF
5447 #include <sys/sysmacros.h>
5448 int main(void) {
5449 return makedev(0, 0);
5450 }
5451 EOF
5452 if compile_prog "" "" ; then
5453 have_sysmacros=yes
5454 fi
5455
5456 ##########################################
5457 # check for _Static_assert()
5458
5459 have_static_assert=no
5460 cat > $TMPC << EOF
5461 _Static_assert(1, "success");
5462 int main(void) {
5463 return 0;
5464 }
5465 EOF
5466 if compile_prog "" "" ; then
5467 have_static_assert=yes
5468 fi
5469
5470 ##########################################
5471 # check for utmpx.h, it is missing e.g. on OpenBSD
5472
5473 have_utmpx=no
5474 cat > $TMPC << EOF
5475 #include <utmpx.h>
5476 struct utmpx user_info;
5477 int main(void) {
5478 return 0;
5479 }
5480 EOF
5481 if compile_prog "" "" ; then
5482 have_utmpx=yes
5483 fi
5484
5485 ##########################################
5486 # check for getrandom()
5487
5488 have_getrandom=no
5489 cat > $TMPC << EOF
5490 #include <sys/random.h>
5491 int main(void) {
5492 return getrandom(0, 0, GRND_NONBLOCK);
5493 }
5494 EOF
5495 if compile_prog "" "" ; then
5496 have_getrandom=yes
5497 fi
5498
5499 ##########################################
5500 # checks for sanitizers
5501
5502 have_asan=no
5503 have_ubsan=no
5504 have_asan_iface_h=no
5505 have_asan_iface_fiber=no
5506
5507 if test "$sanitizers" = "yes" ; then
5508 write_c_skeleton
5509 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5510 have_asan=yes
5511 fi
5512
5513 # we could use a simple skeleton for flags checks, but this also
5514 # detect the static linking issue of ubsan, see also:
5515 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5516 cat > $TMPC << EOF
5517 #include <stdlib.h>
5518 int main(void) {
5519 void *tmp = malloc(10);
5520 if (tmp != NULL) {
5521 return *(int *)(tmp + 2);
5522 }
5523 return 1;
5524 }
5525 EOF
5526 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5527 have_ubsan=yes
5528 fi
5529
5530 if check_include "sanitizer/asan_interface.h" ; then
5531 have_asan_iface_h=yes
5532 fi
5533
5534 cat > $TMPC << EOF
5535 #include <sanitizer/asan_interface.h>
5536 int main(void) {
5537 __sanitizer_start_switch_fiber(0, 0, 0);
5538 return 0;
5539 }
5540 EOF
5541 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5542 have_asan_iface_fiber=yes
5543 fi
5544 fi
5545
5546 ##########################################
5547 # checks for fuzzer
5548 if test "$fuzzing" = "yes" && test -z "${LIB_FUZZING_ENGINE+xxx}"; then
5549 write_c_fuzzer_skeleton
5550 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then
5551 have_fuzzer=yes
5552 else
5553 error_exit "Your compiler doesn't support -fsanitize=fuzzer"
5554 exit 1
5555 fi
5556 fi
5557
5558 # Thread sanitizer is, for now, much noisier than the other sanitizers;
5559 # keep it separate until that is not the case.
5560 if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then
5561 error_exit "TSAN is not supported with other sanitiziers."
5562 fi
5563 have_tsan=no
5564 have_tsan_iface_fiber=no
5565 if test "$tsan" = "yes" ; then
5566 write_c_skeleton
5567 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5568 have_tsan=yes
5569 fi
5570 cat > $TMPC << EOF
5571 #include <sanitizer/tsan_interface.h>
5572 int main(void) {
5573 __tsan_create_fiber(0);
5574 return 0;
5575 }
5576 EOF
5577 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then
5578 have_tsan_iface_fiber=yes
5579 fi
5580 fi
5581
5582 ##########################################
5583 # check for libpmem
5584
5585 if test "$libpmem" != "no"; then
5586 if $pkg_config --exists "libpmem"; then
5587 libpmem="yes"
5588 libpmem_libs=$($pkg_config --libs libpmem)
5589 libpmem_cflags=$($pkg_config --cflags libpmem)
5590 else
5591 if test "$libpmem" = "yes" ; then
5592 feature_not_found "libpmem" "Install nvml or pmdk"
5593 fi
5594 libpmem="no"
5595 fi
5596 fi
5597
5598 ##########################################
5599 # check for libdaxctl
5600
5601 if test "$libdaxctl" != "no"; then
5602 if $pkg_config --atleast-version=57 "libdaxctl"; then
5603 libdaxctl="yes"
5604 libdaxctl_libs=$($pkg_config --libs libdaxctl)
5605 libdaxctl_cflags=$($pkg_config --cflags libdaxctl)
5606 else
5607 if test "$libdaxctl" = "yes" ; then
5608 feature_not_found "libdaxctl" "Install libdaxctl"
5609 fi
5610 libdaxctl="no"
5611 fi
5612 fi
5613
5614 ##########################################
5615 # check for slirp
5616
5617 case "$slirp" in
5618 auto | enabled | internal)
5619 # Simpler to always update submodule, even if not needed.
5620 if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5621 git_submodules="${git_submodules} slirp"
5622 fi
5623 ;;
5624 esac
5625
5626 ##########################################
5627 # check for usable __NR_keyctl syscall
5628
5629 if test "$linux" = "yes" ; then
5630
5631 have_keyring=no
5632 cat > $TMPC << EOF
5633 #include <errno.h>
5634 #include <asm/unistd.h>
5635 #include <linux/keyctl.h>
5636 #include <unistd.h>
5637 int main(void) {
5638 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0);
5639 }
5640 EOF
5641 if compile_prog "" "" ; then
5642 have_keyring=yes
5643 fi
5644 fi
5645 if test "$secret_keyring" != "no"
5646 then
5647 if test "$have_keyring" = "yes"
5648 then
5649 secret_keyring=yes
5650 else
5651 if test "$secret_keyring" = "yes"
5652 then
5653 error_exit "syscall __NR_keyctl requested, \
5654 but not implemented on your system"
5655 else
5656 secret_keyring=no
5657 fi
5658 fi
5659 fi
5660
5661 ##########################################
5662 # End of CC checks
5663 # After here, no more $cc or $ld runs
5664
5665 write_c_skeleton
5666
5667 if test "$gcov" = "yes" ; then
5668 :
5669 elif test "$fortify_source" = "yes" ; then
5670 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
5671 debug=no
5672 fi
5673
5674 case "$ARCH" in
5675 alpha)
5676 # Ensure there's only a single GP
5677 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS"
5678 ;;
5679 esac
5680
5681 if test "$gprof" = "yes" ; then
5682 QEMU_CFLAGS="-p $QEMU_CFLAGS"
5683 QEMU_LDFLAGS="-p $QEMU_LDFLAGS"
5684 fi
5685
5686 if test "$have_asan" = "yes"; then
5687 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
5688 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
5689 if test "$have_asan_iface_h" = "no" ; then
5690 echo "ASAN build enabled, but ASAN header missing." \
5691 "Without code annotation, the report may be inferior."
5692 elif test "$have_asan_iface_fiber" = "no" ; then
5693 echo "ASAN build enabled, but ASAN header is too old." \
5694 "Without code annotation, the report may be inferior."
5695 fi
5696 fi
5697 if test "$have_tsan" = "yes" ; then
5698 if test "$have_tsan_iface_fiber" = "yes" ; then
5699 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS"
5700 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS"
5701 else
5702 error_exit "Cannot enable TSAN due to missing fiber annotation interface."
5703 fi
5704 elif test "$tsan" = "yes" ; then
5705 error_exit "Cannot enable TSAN due to missing sanitize thread interface."
5706 fi
5707 if test "$have_ubsan" = "yes"; then
5708 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
5709 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
5710 fi
5711
5712 ##########################################
5713 # Do we have libnfs
5714 if test "$libnfs" != "no" ; then
5715 if $pkg_config --atleast-version=1.9.3 libnfs; then
5716 libnfs="yes"
5717 libnfs_libs=$($pkg_config --libs libnfs)
5718 else
5719 if test "$libnfs" = "yes" ; then
5720 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5721 fi
5722 libnfs="no"
5723 fi
5724 fi
5725
5726 ##########################################
5727
5728 # Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
5729 if test "$solaris" = "no" && test "$tsan" = "no"; then
5730 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5731 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
5732 fi
5733 fi
5734
5735 # Use ASLR, no-SEH and DEP if available
5736 if test "$mingw32" = "yes" ; then
5737 flags="--no-seh --nxcompat"
5738
5739 # Disable ASLR for debug builds to allow debugging with gdb
5740 if test "$debug" = "no" ; then
5741 flags="--dynamicbase $flags"
5742 fi
5743
5744 for flag in $flags; do
5745 if ld_has $flag ; then
5746 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
5747 fi
5748 done
5749 fi
5750
5751 # We can only support ivshmem if we have eventfd
5752 if [ "$eventfd" = "yes" ]; then
5753 ivshmem=yes
5754 fi
5755
5756 if test "$softmmu" = yes ; then
5757 if test "$linux" = yes; then
5758 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then
5759 virtfs=yes
5760 else
5761 if test "$virtfs" = yes; then
5762 error_exit "VirtFS requires libcap-ng devel and libattr devel"
5763 fi
5764 virtfs=no
5765 fi
5766 else
5767 if test "$virtfs" = yes; then
5768 error_exit "VirtFS is supported only on Linux"
5769 fi
5770 virtfs=no
5771 fi
5772 fi
5773
5774 # Probe for guest agent support/options
5775
5776 if [ "$guest_agent" != "no" ]; then
5777 if [ "$softmmu" = no -a "$want_tools" = no ] ; then
5778 guest_agent=no
5779 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5780 guest_agent=yes
5781 elif [ "$guest_agent" != yes ]; then
5782 guest_agent=no
5783 else
5784 error_exit "Guest agent is not supported on this platform"
5785 fi
5786 fi
5787
5788 # Guest agent Window MSI package
5789
5790 if test "$guest_agent" != yes; then
5791 if test "$guest_agent_msi" = yes; then
5792 error_exit "MSI guest agent package requires guest agent enabled"
5793 fi
5794 guest_agent_msi=no
5795 elif test "$mingw32" != "yes"; then
5796 if test "$guest_agent_msi" = "yes"; then
5797 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5798 fi
5799 guest_agent_msi=no
5800 elif ! has wixl; then
5801 if test "$guest_agent_msi" = "yes"; then
5802 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5803 fi
5804 guest_agent_msi=no
5805 else
5806 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5807 # disabled explicitly
5808 if test "$guest_agent_msi" != "no"; then
5809 guest_agent_msi=yes
5810 fi
5811 fi
5812
5813 if test "$guest_agent_msi" = "yes"; then
5814 if test "$guest_agent_with_vss" = "yes"; then
5815 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5816 fi
5817
5818 if test "$QEMU_GA_MANUFACTURER" = ""; then
5819 QEMU_GA_MANUFACTURER=QEMU
5820 fi
5821
5822 if test "$QEMU_GA_DISTRO" = ""; then
5823 QEMU_GA_DISTRO=Linux
5824 fi
5825
5826 if test "$QEMU_GA_VERSION" = ""; then
5827 QEMU_GA_VERSION=$(cat $source_path/VERSION)
5828 fi
5829
5830 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5831
5832 case "$cpu" in
5833 x86_64)
5834 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5835 ;;
5836 i386)
5837 QEMU_GA_MSI_ARCH="-D Arch=32"
5838 ;;
5839 *)
5840 error_exit "CPU $cpu not supported for building installation package"
5841 ;;
5842 esac
5843 fi
5844
5845 # Mac OS X ships with a broken assembler
5846 roms=
5847 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
5848 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
5849 test "$targetos" != "Haiku" && test "$softmmu" = yes ; then
5850 # Different host OS linkers have different ideas about the name of the ELF
5851 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5852 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5853 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5854 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5855 ld_i386_emulation="$emu"
5856 roms="optionrom"
5857 break
5858 fi
5859 done
5860 fi
5861
5862 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
5863 if test "$cpu" = "s390x" ; then
5864 write_c_skeleton
5865 if compile_prog "-march=z900" ""; then
5866 roms="$roms s390-ccw"
5867 # SLOF is required for building the s390-ccw firmware on s390x,
5868 # since it is using the libnet code from SLOF for network booting.
5869 if test -e "${source_path}/.git" ; then
5870 git_submodules="${git_submodules} roms/SLOF"
5871 fi
5872 fi
5873 fi
5874
5875 # Check that the C++ compiler exists and works with the C compiler.
5876 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5877 if has $cxx; then
5878 cat > $TMPC <<EOF
5879 int c_function(void);
5880 int main(void) { return c_function(); }
5881 EOF
5882
5883 compile_object
5884
5885 cat > $TMPCXX <<EOF
5886 extern "C" {
5887 int c_function(void);
5888 }
5889 int c_function(void) { return 42; }
5890 EOF
5891
5892 update_cxxflags
5893
5894 if do_cxx $CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
5895 # C++ compiler $cxx works ok with C compiler $cc
5896 :
5897 else
5898 echo "C++ compiler $cxx does not work with C compiler $cc"
5899 echo "Disabling C++ specific optional code"
5900 cxx=
5901 fi
5902 else
5903 echo "No C++ compiler available; disabling C++ specific optional code"
5904 cxx=
5905 fi
5906
5907 if test $git_update = 'yes' ; then
5908 (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
5909 fi
5910
5911 config_host_mak="config-host.mak"
5912
5913 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5914 echo >> $config_host_mak
5915
5916 echo all: >> $config_host_mak
5917 echo "GIT=$git" >> $config_host_mak
5918 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5919 echo "GIT_UPDATE=$git_update" >> $config_host_mak
5920
5921 echo "ARCH=$ARCH" >> $config_host_mak
5922
5923 if test "$default_devices" = "yes" ; then
5924 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
5925 else
5926 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
5927 fi
5928 if test "$debug_tcg" = "yes" ; then
5929 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5930 fi
5931 if test "$strip_opt" = "yes" ; then
5932 echo "STRIP=${strip}" >> $config_host_mak
5933 fi
5934 if test "$bigendian" = "yes" ; then
5935 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5936 fi
5937 if test "$mingw32" = "yes" ; then
5938 echo "CONFIG_WIN32=y" >> $config_host_mak
5939 rc_version=$(cat $source_path/VERSION)
5940 version_major=${rc_version%%.*}
5941 rc_version=${rc_version#*.}
5942 version_minor=${rc_version%%.*}
5943 rc_version=${rc_version#*.}
5944 version_subminor=${rc_version%%.*}
5945 version_micro=0
5946 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5947 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5948 if test "$guest_agent_with_vss" = "yes" ; then
5949 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5950 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5951 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5952 fi
5953 if test "$guest_agent_ntddscsi" = "yes" ; then
5954 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
5955 fi
5956 if test "$guest_agent_msi" = "yes"; then
5957 echo "CONFIG_QGA_MSI=y" >> $config_host_mak
5958 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5959 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5960 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5961 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5962 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5963 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5964 fi
5965 else
5966 echo "CONFIG_POSIX=y" >> $config_host_mak
5967 fi
5968
5969 if test "$linux" = "yes" ; then
5970 echo "CONFIG_LINUX=y" >> $config_host_mak
5971 fi
5972
5973 if test "$darwin" = "yes" ; then
5974 echo "CONFIG_DARWIN=y" >> $config_host_mak
5975 fi
5976
5977 if test "$solaris" = "yes" ; then
5978 echo "CONFIG_SOLARIS=y" >> $config_host_mak
5979 fi
5980 if test "$haiku" = "yes" ; then
5981 echo "CONFIG_HAIKU=y" >> $config_host_mak
5982 fi
5983 if test "$static" = "yes" ; then
5984 echo "CONFIG_STATIC=y" >> $config_host_mak
5985 fi
5986 if test "$profiler" = "yes" ; then
5987 echo "CONFIG_PROFILER=y" >> $config_host_mak
5988 fi
5989 if test "$want_tools" = "yes" ; then
5990 echo "CONFIG_TOOLS=y" >> $config_host_mak
5991 fi
5992 if test "$guest_agent" = "yes" ; then
5993 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
5994 fi
5995 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5996 if test "$vde" = "yes" ; then
5997 echo "CONFIG_VDE=y" >> $config_host_mak
5998 echo "VDE_LIBS=$vde_libs" >> $config_host_mak
5999 fi
6000 if test "$netmap" = "yes" ; then
6001 echo "CONFIG_NETMAP=y" >> $config_host_mak
6002 fi
6003 if test "$l2tpv3" = "yes" ; then
6004 echo "CONFIG_L2TPV3=y" >> $config_host_mak
6005 fi
6006 if test "$gprof" = "yes" ; then
6007 echo "CONFIG_GPROF=y" >> $config_host_mak
6008 fi
6009 if test "$cap_ng" = "yes" ; then
6010 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak
6011 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak
6012 fi
6013 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6014 for drv in $audio_drv_list; do
6015 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6016 echo "$def=y" >> $config_host_mak
6017 done
6018 if test "$alsa" = "yes" ; then
6019 echo "CONFIG_ALSA=y" >> $config_host_mak
6020 fi
6021 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6022 echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak
6023 if test "$libpulse" = "yes" ; then
6024 echo "CONFIG_LIBPULSE=y" >> $config_host_mak
6025 fi
6026 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6027 echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak
6028 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6029 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6030 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6031 if test "$libjack" = "yes" ; then
6032 echo "CONFIG_LIBJACK=y" >> $config_host_mak
6033 fi
6034 echo "JACK_LIBS=$jack_libs" >> $config_host_mak
6035 if test "$audio_win_int" = "yes" ; then
6036 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6037 fi
6038 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6039 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6040 if test "$xfs" = "yes" ; then
6041 echo "CONFIG_XFS=y" >> $config_host_mak
6042 fi
6043 qemu_version=$(head $source_path/VERSION)
6044 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6045 echo "SRC_PATH=$source_path" >> $config_host_mak
6046 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6047 if test "$modules" = "yes"; then
6048 # $shacmd can generate a hash started with digit, which the compiler doesn't
6049 # like as an symbol. So prefix it with an underscore
6050 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6051 echo "CONFIG_MODULES=y" >> $config_host_mak
6052 fi
6053 if test "$module_upgrades" = "yes"; then
6054 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
6055 fi
6056 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6057 echo "CONFIG_X11=y" >> $config_host_mak
6058 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6059 echo "X11_LIBS=$x11_libs" >> $config_host_mak
6060 fi
6061 if test "$pipe2" = "yes" ; then
6062 echo "CONFIG_PIPE2=y" >> $config_host_mak
6063 fi
6064 if test "$accept4" = "yes" ; then
6065 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6066 fi
6067 if test "$splice" = "yes" ; then
6068 echo "CONFIG_SPLICE=y" >> $config_host_mak
6069 fi
6070 if test "$eventfd" = "yes" ; then
6071 echo "CONFIG_EVENTFD=y" >> $config_host_mak
6072 fi
6073 if test "$memfd" = "yes" ; then
6074 echo "CONFIG_MEMFD=y" >> $config_host_mak
6075 fi
6076 if test "$have_usbfs" = "yes" ; then
6077 echo "CONFIG_USBFS=y" >> $config_host_mak
6078 fi
6079 if test "$fallocate" = "yes" ; then
6080 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6081 fi
6082 if test "$fallocate_punch_hole" = "yes" ; then
6083 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6084 fi
6085 if test "$fallocate_zero_range" = "yes" ; then
6086 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6087 fi
6088 if test "$posix_fallocate" = "yes" ; then
6089 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6090 fi
6091 if test "$sync_file_range" = "yes" ; then
6092 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6093 fi
6094 if test "$fiemap" = "yes" ; then
6095 echo "CONFIG_FIEMAP=y" >> $config_host_mak
6096 fi
6097 if test "$dup3" = "yes" ; then
6098 echo "CONFIG_DUP3=y" >> $config_host_mak
6099 fi
6100 if test "$ppoll" = "yes" ; then
6101 echo "CONFIG_PPOLL=y" >> $config_host_mak
6102 fi
6103 if test "$prctl_pr_set_timerslack" = "yes" ; then
6104 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6105 fi
6106 if test "$epoll" = "yes" ; then
6107 echo "CONFIG_EPOLL=y" >> $config_host_mak
6108 fi
6109 if test "$epoll_create1" = "yes" ; then
6110 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6111 fi
6112 if test "$sendfile" = "yes" ; then
6113 echo "CONFIG_SENDFILE=y" >> $config_host_mak
6114 fi
6115 if test "$timerfd" = "yes" ; then
6116 echo "CONFIG_TIMERFD=y" >> $config_host_mak
6117 fi
6118 if test "$setns" = "yes" ; then
6119 echo "CONFIG_SETNS=y" >> $config_host_mak
6120 fi
6121 if test "$clock_adjtime" = "yes" ; then
6122 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6123 fi
6124 if test "$syncfs" = "yes" ; then
6125 echo "CONFIG_SYNCFS=y" >> $config_host_mak
6126 fi
6127 if test "$kcov" = "yes" ; then
6128 echo "CONFIG_KCOV=y" >> $config_host_mak
6129 fi
6130 if test "$btrfs" = "yes" ; then
6131 echo "CONFIG_BTRFS=y" >> $config_host_mak
6132 fi
6133 if test "$inotify" = "yes" ; then
6134 echo "CONFIG_INOTIFY=y" >> $config_host_mak
6135 fi
6136 if test "$inotify1" = "yes" ; then
6137 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6138 fi
6139 if test "$sem_timedwait" = "yes" ; then
6140 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6141 fi
6142 if test "$strchrnul" = "yes" ; then
6143 echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6144 fi
6145 if test "$st_atim" = "yes" ; then
6146 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak
6147 fi
6148 if test "$byteswap_h" = "yes" ; then
6149 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6150 fi
6151 if test "$bswap_h" = "yes" ; then
6152 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6153 fi
6154 if test "$curl" = "yes" ; then
6155 echo "CONFIG_CURL=y" >> $config_host_mak
6156 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6157 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6158 fi
6159 if test "$brlapi" = "yes" ; then
6160 echo "CONFIG_BRLAPI=y" >> $config_host_mak
6161 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6162 fi
6163 if test "$gtk" = "yes" ; then
6164 echo "CONFIG_GTK=y" >> $config_host_mak
6165 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6166 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6167 if test "$gtk_gl" = "yes" ; then
6168 echo "CONFIG_GTK_GL=y" >> $config_host_mak
6169 fi
6170 fi
6171 if test "$gio" = "yes" ; then
6172 echo "CONFIG_GIO=y" >> $config_host_mak
6173 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6174 echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6175 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
6176 fi
6177 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6178 if test "$gnutls" = "yes" ; then
6179 echo "CONFIG_GNUTLS=y" >> $config_host_mak
6180 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak
6181 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak
6182 fi
6183 if test "$gcrypt" = "yes" ; then
6184 echo "CONFIG_GCRYPT=y" >> $config_host_mak
6185 if test "$gcrypt_hmac" = "yes" ; then
6186 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6187 fi
6188 echo "GCRYPT_CFLAGS=$gcrypt_cflags" >> $config_host_mak
6189 echo "GCRYPT_LIBS=$gcrypt_libs" >> $config_host_mak
6190 fi
6191 if test "$nettle" = "yes" ; then
6192 echo "CONFIG_NETTLE=y" >> $config_host_mak
6193 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6194 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak
6195 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak
6196 fi
6197 if test "$qemu_private_xts" = "yes" ; then
6198 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak
6199 fi
6200 if test "$tasn1" = "yes" ; then
6201 echo "CONFIG_TASN1=y" >> $config_host_mak
6202 fi
6203 if test "$auth_pam" = "yes" ; then
6204 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6205 fi
6206 if test "$have_ifaddrs_h" = "yes" ; then
6207 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6208 fi
6209 if test "$have_drm_h" = "yes" ; then
6210 echo "HAVE_DRM_H=y" >> $config_host_mak
6211 fi
6212 if test "$have_broken_size_max" = "yes" ; then
6213 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6214 fi
6215 if test "$have_openpty" = "yes" ; then
6216 echo "HAVE_OPENPTY=y" >> $config_host_mak
6217 fi
6218 if test "$have_sys_signal_h" = "yes" ; then
6219 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak
6220 fi
6221
6222 # Work around a system header bug with some kernel/XFS header
6223 # versions where they both try to define 'struct fsxattr':
6224 # xfs headers will not try to redefine structs from linux headers
6225 # if this macro is set.
6226 if test "$have_fsxattr" = "yes" ; then
6227 echo "HAVE_FSXATTR=y" >> $config_host_mak
6228 fi
6229 if test "$have_copy_file_range" = "yes" ; then
6230 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6231 fi
6232 if test "$vte" = "yes" ; then
6233 echo "CONFIG_VTE=y" >> $config_host_mak
6234 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6235 echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6236 fi
6237 if test "$virglrenderer" = "yes" ; then
6238 echo "CONFIG_VIRGL=y" >> $config_host_mak
6239 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6240 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6241 fi
6242 if test "$xen" = "enabled" ; then
6243 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6244 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6245 echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
6246 echo "XEN_LIBS=$xen_libs" >> $config_host_mak
6247 fi
6248 if test "$linux_aio" = "yes" ; then
6249 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6250 fi
6251 if test "$linux_io_uring" = "yes" ; then
6252 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak
6253 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak
6254 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak
6255 fi
6256 if test "$attr" = "yes" ; then
6257 echo "CONFIG_ATTR=y" >> $config_host_mak
6258 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak
6259 fi
6260 if test "$libattr" = "yes" ; then
6261 echo "CONFIG_LIBATTR=y" >> $config_host_mak
6262 fi
6263 if test "$virtfs" = "yes" ; then
6264 echo "CONFIG_VIRTFS=y" >> $config_host_mak
6265 fi
6266 if test "$vhost_scsi" = "yes" ; then
6267 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6268 fi
6269 if test "$vhost_net" = "yes" ; then
6270 echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6271 fi
6272 if test "$vhost_net_user" = "yes" ; then
6273 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
6274 fi
6275 if test "$vhost_net_vdpa" = "yes" ; then
6276 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
6277 fi
6278 if test "$vhost_crypto" = "yes" ; then
6279 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6280 fi
6281 if test "$vhost_vsock" = "yes" ; then
6282 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6283 if test "$vhost_user" = "yes" ; then
6284 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
6285 fi
6286 fi
6287 if test "$vhost_kernel" = "yes" ; then
6288 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6289 fi
6290 if test "$vhost_user" = "yes" ; then
6291 echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6292 fi
6293 if test "$vhost_vdpa" = "yes" ; then
6294 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
6295 fi
6296 if test "$vhost_user_fs" = "yes" ; then
6297 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
6298 fi
6299 if test "$iovec" = "yes" ; then
6300 echo "CONFIG_IOVEC=y" >> $config_host_mak
6301 fi
6302 if test "$preadv" = "yes" ; then
6303 echo "CONFIG_PREADV=y" >> $config_host_mak
6304 fi
6305 if test "$membarrier" = "yes" ; then
6306 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6307 fi
6308 if test "$signalfd" = "yes" ; then
6309 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6310 fi
6311 if test "$optreset" = "yes" ; then
6312 echo "HAVE_OPTRESET=y" >> $config_host_mak
6313 fi
6314 if test "$tcg" = "enabled"; then
6315 if test "$tcg_interpreter" = "yes" ; then
6316 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6317 fi
6318 fi
6319 if test "$fdatasync" = "yes" ; then
6320 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6321 fi
6322 if test "$madvise" = "yes" ; then
6323 echo "CONFIG_MADVISE=y" >> $config_host_mak
6324 fi
6325 if test "$posix_madvise" = "yes" ; then
6326 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6327 fi
6328 if test "$posix_memalign" = "yes" ; then
6329 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6330 fi
6331 if test "$spice" = "yes" ; then
6332 echo "CONFIG_SPICE=y" >> $config_host_mak
6333 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak
6334 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak
6335 fi
6336
6337 if test "$smartcard" = "yes" ; then
6338 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6339 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6340 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6341 fi
6342
6343 if test "$libusb" = "yes" ; then
6344 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6345 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6346 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6347 fi
6348
6349 if test "$usb_redir" = "yes" ; then
6350 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6351 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6352 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6353 fi
6354
6355 if test "$opengl" = "yes" ; then
6356 echo "CONFIG_OPENGL=y" >> $config_host_mak
6357 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
6358 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6359 if test "$opengl_dmabuf" = "yes" ; then
6360 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6361 fi
6362 fi
6363
6364 if test "$gbm" = "yes" ; then
6365 echo "CONFIG_GBM=y" >> $config_host_mak
6366 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6367 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6368 fi
6369
6370
6371 if test "$avx2_opt" = "yes" ; then
6372 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6373 fi
6374
6375 if test "$avx512f_opt" = "yes" ; then
6376 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
6377 fi
6378
6379 if test "$lzo" = "yes" ; then
6380 echo "CONFIG_LZO=y" >> $config_host_mak
6381 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak
6382 fi
6383
6384 if test "$snappy" = "yes" ; then
6385 echo "CONFIG_SNAPPY=y" >> $config_host_mak
6386 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak
6387 fi
6388
6389 if test "$bzip2" = "yes" ; then
6390 echo "CONFIG_BZIP2=y" >> $config_host_mak
6391 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6392 fi
6393
6394 if test "$lzfse" = "yes" ; then
6395 echo "CONFIG_LZFSE=y" >> $config_host_mak
6396 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6397 fi
6398
6399 if test "$zstd" = "yes" ; then
6400 echo "CONFIG_ZSTD=y" >> $config_host_mak
6401 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak
6402 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak
6403 fi
6404
6405 if test "$libiscsi" = "yes" ; then
6406 echo "CONFIG_LIBISCSI=y" >> $config_host_mak
6407 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6408 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6409 fi
6410
6411 if test "$libnfs" = "yes" ; then
6412 echo "CONFIG_LIBNFS=y" >> $config_host_mak
6413 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6414 fi
6415
6416 if test "$seccomp" = "yes"; then
6417 echo "CONFIG_SECCOMP=y" >> $config_host_mak
6418 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6419 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6420 fi
6421
6422 # XXX: suppress that
6423 if [ "$bsd" = "yes" ] ; then
6424 echo "CONFIG_BSD=y" >> $config_host_mak
6425 fi
6426
6427 if test "$qom_cast_debug" = "yes" ; then
6428 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6429 fi
6430 if test "$rbd" = "yes" ; then
6431 echo "CONFIG_RBD=y" >> $config_host_mak
6432 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6433 fi
6434
6435 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6436 if test "$coroutine_pool" = "yes" ; then
6437 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6438 else
6439 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6440 fi
6441
6442 if test "$debug_stack_usage" = "yes" ; then
6443 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6444 fi
6445
6446 if test "$crypto_afalg" = "yes" ; then
6447 echo "CONFIG_AF_ALG=y" >> $config_host_mak
6448 fi
6449
6450 if test "$open_by_handle_at" = "yes" ; then
6451 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6452 fi
6453
6454 if test "$linux_magic_h" = "yes" ; then
6455 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6456 fi
6457
6458 if test "$valgrind_h" = "yes" ; then
6459 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6460 fi
6461
6462 if test "$have_asan_iface_fiber" = "yes" ; then
6463 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6464 fi
6465
6466 if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
6467 echo "CONFIG_TSAN=y" >> $config_host_mak
6468 fi
6469
6470 if test "$has_environ" = "yes" ; then
6471 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6472 fi
6473
6474 if test "$cpuid_h" = "yes" ; then
6475 echo "CONFIG_CPUID_H=y" >> $config_host_mak
6476 fi
6477
6478 if test "$int128" = "yes" ; then
6479 echo "CONFIG_INT128=y" >> $config_host_mak
6480 fi
6481
6482 if test "$atomic128" = "yes" ; then
6483 echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6484 fi
6485
6486 if test "$cmpxchg128" = "yes" ; then
6487 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
6488 fi
6489
6490 if test "$atomic64" = "yes" ; then
6491 echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6492 fi
6493
6494 if test "$attralias" = "yes" ; then
6495 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak
6496 fi
6497
6498 if test "$getauxval" = "yes" ; then
6499 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6500 fi
6501
6502 if test "$glusterfs" = "yes" ; then
6503 echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
6504 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6505 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6506 fi
6507
6508 if test "$glusterfs_xlator_opt" = "yes" ; then
6509 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6510 fi
6511
6512 if test "$glusterfs_discard" = "yes" ; then
6513 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6514 fi
6515
6516 if test "$glusterfs_fallocate" = "yes" ; then
6517 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6518 fi
6519
6520 if test "$glusterfs_zerofill" = "yes" ; then
6521 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6522 fi
6523
6524 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
6525 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
6526 fi
6527
6528 if test "$glusterfs_iocb_has_stat" = "yes" ; then
6529 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
6530 fi
6531
6532 if test "$libssh" = "yes" ; then
6533 echo "CONFIG_LIBSSH=y" >> $config_host_mak
6534 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
6535 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
6536 fi
6537
6538 if test "$live_block_migration" = "yes" ; then
6539 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6540 fi
6541
6542 if test "$tpm" = "yes"; then
6543 echo 'CONFIG_TPM=y' >> $config_host_mak
6544 fi
6545
6546 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6547 if have_backend "nop"; then
6548 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6549 fi
6550 if have_backend "simple"; then
6551 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6552 # Set the appropriate trace file.
6553 trace_file="\"$trace_file-\" FMT_pid"
6554 fi
6555 if have_backend "log"; then
6556 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6557 fi
6558 if have_backend "ust"; then
6559 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6560 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak
6561 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak
6562 fi
6563 if have_backend "dtrace"; then
6564 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6565 if test "$trace_backend_stap" = "yes" ; then
6566 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6567 fi
6568 fi
6569 if have_backend "ftrace"; then
6570 if test "$linux" = "yes" ; then
6571 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6572 else
6573 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6574 fi
6575 fi
6576 if have_backend "syslog"; then
6577 if test "$posix_syslog" = "yes" ; then
6578 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6579 else
6580 feature_not_found "syslog(trace backend)" "syslog not available"
6581 fi
6582 fi
6583 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6584
6585 if test "$rdma" = "yes" ; then
6586 echo "CONFIG_RDMA=y" >> $config_host_mak
6587 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6588 fi
6589
6590 if test "$pvrdma" = "yes" ; then
6591 echo "CONFIG_PVRDMA=y" >> $config_host_mak
6592 fi
6593
6594 if test "$have_rtnetlink" = "yes" ; then
6595 echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6596 fi
6597
6598 if test "$libxml2" = "yes" ; then
6599 echo "CONFIG_LIBXML2=y" >> $config_host_mak
6600 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6601 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6602 fi
6603
6604 if test "$replication" = "yes" ; then
6605 echo "CONFIG_REPLICATION=y" >> $config_host_mak
6606 fi
6607
6608 if test "$have_af_vsock" = "yes" ; then
6609 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6610 fi
6611
6612 if test "$have_sysmacros" = "yes" ; then
6613 echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6614 fi
6615
6616 if test "$have_static_assert" = "yes" ; then
6617 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6618 fi
6619
6620 if test "$have_utmpx" = "yes" ; then
6621 echo "HAVE_UTMPX=y" >> $config_host_mak
6622 fi
6623 if test "$have_getrandom" = "yes" ; then
6624 echo "CONFIG_GETRANDOM=y" >> $config_host_mak
6625 fi
6626 if test "$ivshmem" = "yes" ; then
6627 echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6628 fi
6629 if test "$debug_mutex" = "yes" ; then
6630 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
6631 fi
6632
6633 # Hold two types of flag:
6634 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
6635 # a thread we have a handle to
6636 # CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
6637 # platform
6638 if test "$pthread_setname_np_w_tid" = "yes" ; then
6639 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6640 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
6641 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
6642 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6643 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
6644 fi
6645
6646 if test "$libpmem" = "yes" ; then
6647 echo "CONFIG_LIBPMEM=y" >> $config_host_mak
6648 echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak
6649 echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak
6650 fi
6651
6652 if test "$libdaxctl" = "yes" ; then
6653 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak
6654 echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak
6655 fi
6656
6657 if test "$bochs" = "yes" ; then
6658 echo "CONFIG_BOCHS=y" >> $config_host_mak
6659 fi
6660 if test "$cloop" = "yes" ; then
6661 echo "CONFIG_CLOOP=y" >> $config_host_mak
6662 fi
6663 if test "$dmg" = "yes" ; then
6664 echo "CONFIG_DMG=y" >> $config_host_mak
6665 fi
6666 if test "$qcow1" = "yes" ; then
6667 echo "CONFIG_QCOW1=y" >> $config_host_mak
6668 fi
6669 if test "$vdi" = "yes" ; then
6670 echo "CONFIG_VDI=y" >> $config_host_mak
6671 fi
6672 if test "$vvfat" = "yes" ; then
6673 echo "CONFIG_VVFAT=y" >> $config_host_mak
6674 fi
6675 if test "$qed" = "yes" ; then
6676 echo "CONFIG_QED=y" >> $config_host_mak
6677 fi
6678 if test "$parallels" = "yes" ; then
6679 echo "CONFIG_PARALLELS=y" >> $config_host_mak
6680 fi
6681 if test "$sheepdog" = "yes" ; then
6682 add_to deprecated_features "sheepdog"
6683 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
6684 fi
6685 if test "$pty_h" = "yes" ; then
6686 echo "HAVE_PTY_H=y" >> $config_host_mak
6687 fi
6688 if test "$have_mlockall" = "yes" ; then
6689 echo "HAVE_MLOCKALL=y" >> $config_host_mak
6690 fi
6691 if test "$fuzzing" = "yes" ; then
6692 # If LIB_FUZZING_ENGINE is set, assume we are running on OSS-Fuzz, and the
6693 # needed CFLAGS have already been provided
6694 if test -z "${LIB_FUZZING_ENGINE+xxx}" ; then
6695 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link"
6696 FUZZ_EXE_LDFLAGS="-fsanitize=fuzzer"
6697 else
6698 FUZZ_EXE_LDFLAGS="$LIB_FUZZING_ENGINE"
6699 fi
6700 fi
6701
6702 if test "$plugins" = "yes" ; then
6703 echo "CONFIG_PLUGIN=y" >> $config_host_mak
6704 # Copy the export object list to the build dir
6705 if test "$ld_dynamic_list" = "yes" ; then
6706 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak
6707 ld_symbols=qemu-plugins-ld.symbols
6708 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols
6709 elif test "$ld_exported_symbols_list" = "yes" ; then
6710 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak
6711 ld64_symbols=qemu-plugins-ld64.symbols
6712 echo "# Automatically generated by configure - do not modify" > $ld64_symbols
6713 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \
6714 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols
6715 else
6716 error_exit \
6717 "If \$plugins=yes, either \$ld_dynamic_list or " \
6718 "\$ld_exported_symbols_list should have been set to 'yes'."
6719 fi
6720 fi
6721
6722 if test -n "$gdb_bin" ; then
6723 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
6724 fi
6725
6726 if test "$secret_keyring" = "yes" ; then
6727 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
6728 fi
6729
6730 echo "ROMS=$roms" >> $config_host_mak
6731 echo "MAKE=$make" >> $config_host_mak
6732 echo "PYTHON=$python" >> $config_host_mak
6733 echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
6734 echo "MESON=$meson" >> $config_host_mak
6735 echo "NINJA=$ninja" >> $config_host_mak
6736 echo "CC=$cc" >> $config_host_mak
6737 if $iasl -h > /dev/null 2>&1; then
6738 echo "CONFIG_IASL=$iasl" >> $config_host_mak
6739 fi
6740 echo "CXX=$cxx" >> $config_host_mak
6741 echo "OBJCC=$objcc" >> $config_host_mak
6742 echo "AR=$ar" >> $config_host_mak
6743 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6744 echo "AS=$as" >> $config_host_mak
6745 echo "CCAS=$ccas" >> $config_host_mak
6746 echo "CPP=$cpp" >> $config_host_mak
6747 echo "OBJCOPY=$objcopy" >> $config_host_mak
6748 echo "LD=$ld" >> $config_host_mak
6749 echo "RANLIB=$ranlib" >> $config_host_mak
6750 echo "NM=$nm" >> $config_host_mak
6751 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
6752 echo "WINDRES=$windres" >> $config_host_mak
6753 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6754 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6755 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6756 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
6757 echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
6758 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6759 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6760 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6761 echo "EXESUF=$EXESUF" >> $config_host_mak
6762 echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak
6763 echo "LIBS_QGA=$libs_qga" >> $config_host_mak
6764 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6765 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6766 if test "$gcov" = "yes" ; then
6767 echo "CONFIG_GCOV=y" >> $config_host_mak
6768 fi
6769
6770 if test "$fuzzing" != "no"; then
6771 echo "CONFIG_FUZZ=y" >> $config_host_mak
6772 fi
6773 echo "FUZZ_EXE_LDFLAGS=$FUZZ_EXE_LDFLAGS" >> $config_host_mak
6774
6775 if test "$rng_none" = "yes"; then
6776 echo "CONFIG_RNG_NONE=y" >> $config_host_mak
6777 fi
6778
6779 # use included Linux headers
6780 if test "$linux" = "yes" ; then
6781 mkdir -p linux-headers
6782 case "$cpu" in
6783 i386|x86_64|x32)
6784 linux_arch=x86
6785 ;;
6786 ppc|ppc64|ppc64le)
6787 linux_arch=powerpc
6788 ;;
6789 s390x)
6790 linux_arch=s390
6791 ;;
6792 aarch64)
6793 linux_arch=arm64
6794 ;;
6795 mips64)
6796 linux_arch=mips
6797 ;;
6798 *)
6799 # For most CPUs the kernel architecture name and QEMU CPU name match.
6800 linux_arch="$cpu"
6801 ;;
6802 esac
6803 # For non-KVM architectures we will not have asm headers
6804 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6805 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6806 fi
6807 fi
6808
6809 for target in $target_list; do
6810 target_dir="$target"
6811 target_name=$(echo $target | cut -d '-' -f 1)
6812 mkdir -p $target_dir
6813 case $target in
6814 *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
6815 *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
6816 esac
6817 done
6818
6819 echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
6820 if test "$default_targets" = "yes"; then
6821 echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
6822 fi
6823
6824 if test "$numa" = "yes"; then
6825 echo "CONFIG_NUMA=y" >> $config_host_mak
6826 echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
6827 fi
6828
6829 if test "$ccache_cpp2" = "yes"; then
6830 echo "export CCACHE_CPP2=y" >> $config_host_mak
6831 fi
6832
6833 if test "$safe_stack" = "yes"; then
6834 echo "CONFIG_SAFESTACK=y" >> $config_host_mak
6835 fi
6836
6837 # If we're using a separate build tree, set it up now.
6838 # DIRS are directories which we simply mkdir in the build tree;
6839 # LINKS are things to symlink back into the source tree
6840 # (these can be both files and directories).
6841 # Caution: do not add files or directories here using wildcards. This
6842 # will result in problems later if a new file matching the wildcard is
6843 # added to the source tree -- nothing will cause configure to be rerun
6844 # so the build tree will be missing the link back to the new file, and
6845 # tests might fail. Prefer to keep the relevant files in their own
6846 # directory and symlink the directory instead.
6847 # UNLINK is used to remove symlinks from older development versions
6848 # that might get into the way when doing "git update" without doing
6849 # a "make distclean" in between.
6850 DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos"
6851 DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph"
6852 DIRS="$DIRS docs docs/interop fsdev scsi"
6853 DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw"
6854 DIRS="$DIRS roms/seabios"
6855 DIRS="$DIRS contrib/plugins/"
6856 LINKS="Makefile"
6857 LINKS="$LINKS tests/tcg/lm32/Makefile"
6858 LINKS="$LINKS tests/tcg/Makefile.target"
6859 LINKS="$LINKS pc-bios/optionrom/Makefile"
6860 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
6861 LINKS="$LINKS roms/seabios/Makefile"
6862 LINKS="$LINKS pc-bios/qemu-icon.bmp"
6863 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
6864 LINKS="$LINKS tests/acceptance tests/data"
6865 LINKS="$LINKS tests/qemu-iotests/check"
6866 LINKS="$LINKS python"
6867 LINKS="$LINKS contrib/plugins/Makefile "
6868 UNLINK="pc-bios/keymaps"
6869 for bios_file in \
6870 $source_path/pc-bios/*.bin \
6871 $source_path/pc-bios/*.elf \
6872 $source_path/pc-bios/*.lid \
6873 $source_path/pc-bios/*.rom \
6874 $source_path/pc-bios/*.dtb \
6875 $source_path/pc-bios/*.img \
6876 $source_path/pc-bios/openbios-* \
6877 $source_path/pc-bios/u-boot.* \
6878 $source_path/pc-bios/edk2-*.fd.bz2 \
6879 $source_path/pc-bios/palcode-*
6880 do
6881 LINKS="$LINKS pc-bios/$(basename $bios_file)"
6882 done
6883 mkdir -p $DIRS
6884 for f in $LINKS ; do
6885 if [ -e "$source_path/$f" ]; then
6886 symlink "$source_path/$f" "$f"
6887 fi
6888 done
6889 for f in $UNLINK ; do
6890 if [ -L "$f" ]; then
6891 rm -f "$f"
6892 fi
6893 done
6894
6895 (for i in $cross_cc_vars; do
6896 export $i
6897 done
6898 export target_list source_path use_containers
6899 $source_path/tests/tcg/configure.sh)
6900
6901 # temporary config to build submodules
6902 for rom in seabios; do
6903 config_mak=roms/$rom/config.mak
6904 echo "# Automatically generated by configure - do not modify" > $config_mak
6905 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6906 echo "AS=$as" >> $config_mak
6907 echo "CCAS=$ccas" >> $config_mak
6908 echo "CC=$cc" >> $config_mak
6909 echo "BCC=bcc" >> $config_mak
6910 echo "CPP=$cpp" >> $config_mak
6911 echo "OBJCOPY=objcopy" >> $config_mak
6912 echo "IASL=$iasl" >> $config_mak
6913 echo "LD=$ld" >> $config_mak
6914 echo "RANLIB=$ranlib" >> $config_mak
6915 done
6916
6917 # set up qemu-iotests in this build directory
6918 iotests_common_env="tests/qemu-iotests/common.env"
6919
6920 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6921 echo >> "$iotests_common_env"
6922 echo "export PYTHON='$python'" >> "$iotests_common_env"
6923
6924 if test "$skip_meson" = no; then
6925 cross="config-meson.cross.new"
6926 meson_quote() {
6927 echo "'$(echo $* | sed "s/ /','/g")'"
6928 }
6929
6930 echo "# Automatically generated by configure - do not modify" > $cross
6931 echo "[properties]" >> $cross
6932 test -z "$cxx" && echo "link_language = 'c'" >> $cross
6933 echo "[built-in options]" >> $cross
6934 echo "c_args = [${CFLAGS:+$(meson_quote $CFLAGS)}]" >> $cross
6935 echo "cpp_args = [${CXXFLAGS:+$(meson_quote $CXXFLAGS)}]" >> $cross
6936 echo "c_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6937 echo "cpp_link_args = [${LDFLAGS:+$(meson_quote $LDFLAGS)}]" >> $cross
6938 echo "[binaries]" >> $cross
6939 echo "c = [$(meson_quote $cc)]" >> $cross
6940 test -n "$cxx" && echo "cpp = [$(meson_quote $cxx)]" >> $cross
6941 echo "ar = [$(meson_quote $ar)]" >> $cross
6942 echo "nm = [$(meson_quote $nm)]" >> $cross
6943 echo "pkgconfig = [$(meson_quote $pkg_config_exe)]" >> $cross
6944 echo "ranlib = [$(meson_quote $ranlib)]" >> $cross
6945 if has $sdl2_config; then
6946 echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
6947 fi
6948 echo "strip = [$(meson_quote $strip)]" >> $cross
6949 echo "windres = [$(meson_quote $windres)]" >> $cross
6950 if test -n "$cross_prefix"; then
6951 cross_arg="--cross-file config-meson.cross"
6952 echo "[host_machine]" >> $cross
6953 if test "$mingw32" = "yes" ; then
6954 echo "system = 'windows'" >> $cross
6955 fi
6956 if test "$linux" = "yes" ; then
6957 echo "system = 'linux'" >> $cross
6958 fi
6959 case "$ARCH" in
6960 i386|x86_64)
6961 echo "cpu_family = 'x86'" >> $cross
6962 ;;
6963 ppc64le)
6964 echo "cpu_family = 'ppc64'" >> $cross
6965 ;;
6966 *)
6967 echo "cpu_family = '$ARCH'" >> $cross
6968 ;;
6969 esac
6970 echo "cpu = '$cpu'" >> $cross
6971 if test "$bigendian" = "yes" ; then
6972 echo "endian = 'big'" >> $cross
6973 else
6974 echo "endian = 'little'" >> $cross
6975 fi
6976 else
6977 cross_arg="--native-file config-meson.cross"
6978 fi
6979 mv $cross config-meson.cross
6980
6981 rm -rf meson-private meson-info meson-logs
6982 unset staticpic
6983 if ! version_ge "$($meson --version)" 0.56.0; then
6984 staticpic=$(if test "$pie" = yes; then echo true; else echo false; fi)
6985 fi
6986 NINJA=$ninja $meson setup \
6987 --prefix "$prefix" \
6988 --libdir "$libdir" \
6989 --libexecdir "$libexecdir" \
6990 --bindir "$bindir" \
6991 --includedir "$includedir" \
6992 --datadir "$datadir" \
6993 --mandir "$mandir" \
6994 --sysconfdir "$sysconfdir" \
6995 --localedir "$localedir" \
6996 --localstatedir "$local_statedir" \
6997 -Ddocdir="$docdir" \
6998 -Dqemu_firmwarepath="$firmwarepath" \
6999 -Dqemu_suffix="$qemu_suffix" \
7000 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \
7001 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \
7002 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \
7003 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \
7004 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
7005 ${staticpic:+-Db_staticpic=$staticpic} \
7006 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
7007 -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
7008 -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf \
7009 -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
7010 -Dcocoa=$cocoa -Dmpath=$mpath -Dsdl=$sdl -Dsdl_image=$sdl_image \
7011 -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \
7012 -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f -Dvirtiofsd=$virtiofsd \
7013 -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt \
7014 -Diconv=$iconv -Dcurses=$curses -Dlibudev=$libudev\
7015 -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
7016 -Dvhost_user_blk_server=$vhost_user_blk_server \
7017 $cross_arg \
7018 "$PWD" "$source_path"
7019
7020 if test "$?" -ne 0 ; then
7021 error_exit "meson setup failed"
7022 fi
7023 fi
7024
7025 if test -n "${deprecated_features}"; then
7026 echo "Warning, deprecated features enabled."
7027 echo "Please see docs/system/deprecated.rst"
7028 echo " features: ${deprecated_features}"
7029 fi
7030
7031 # Save the configure command line for later reuse.
7032 cat <<EOD >config.status
7033 #!/bin/sh
7034 # Generated by configure.
7035 # Run this file to recreate the current configuration.
7036 # Compiler output produced by configure, useful for debugging
7037 # configure, is in config.log if it exists.
7038 EOD
7039
7040 preserve_env() {
7041 envname=$1
7042
7043 eval envval=\$$envname
7044
7045 if test -n "$envval"
7046 then
7047 echo "$envname='$envval'" >> config.status
7048 echo "export $envname" >> config.status
7049 else
7050 echo "unset $envname" >> config.status
7051 fi
7052 }
7053
7054 # Preserve various env variables that influence what
7055 # features/build target configure will detect
7056 preserve_env AR
7057 preserve_env AS
7058 preserve_env CC
7059 preserve_env CPP
7060 preserve_env CXX
7061 preserve_env INSTALL
7062 preserve_env LD
7063 preserve_env LD_LIBRARY_PATH
7064 preserve_env LIBTOOL
7065 preserve_env MAKE
7066 preserve_env NM
7067 preserve_env OBJCOPY
7068 preserve_env PATH
7069 preserve_env PKG_CONFIG
7070 preserve_env PKG_CONFIG_LIBDIR
7071 preserve_env PKG_CONFIG_PATH
7072 preserve_env PYTHON
7073 preserve_env SDL2_CONFIG
7074 preserve_env SMBD
7075 preserve_env STRIP
7076 preserve_env WINDRES
7077
7078 printf "exec" >>config.status
7079 for i in "$0" "$@"; do
7080 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status
7081 done
7082 echo ' "$@"' >>config.status
7083 chmod +x config.status
7084
7085 rm -r "$TMPDIR1"