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