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