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