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