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