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