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