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