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