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