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