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