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