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