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