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