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