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