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