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