OSDN Git Service

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