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