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