OSDN Git Service

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