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