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