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