target-i386: Set AMD alias bits after filtering CPUID data
[qemu/ar7.git] / configure
blobf1c307bfc69caf883509d1e4f336c9a3c61a6d61
1 #!/bin/sh
3 # qemu configure script (c) 2003 Fabrice Bellard
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
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
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
27 TMPB="qemu-conf"
28 TMPC="${TMPDIR1}/${TMPB}.c"
29 TMPO="${TMPDIR1}/${TMPB}.o"
30 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31 TMPL="${TMPDIR1}/${TMPB}.lo"
32 TMPA="${TMPDIR1}/lib${TMPB}.la"
33 TMPE="${TMPDIR1}/${TMPB}.exe"
35 rm -f config.log
37 # Print a helpful header at the top of config.log
38 echo "# QEMU configure log $(date)" >> config.log
39 printf "# Configured with:" >> config.log
40 printf " '%s'" "$0" "$@" >> config.log
41 echo >> config.log
42 echo "#" >> config.log
44 error_exit() {
45 echo
46 echo "ERROR: $1"
47 while test -n "$2"; do
48 echo " $2"
49 shift
50 done
51 echo
52 exit 1
55 do_compiler() {
56 # Run the compiler, capturing its output to the log. First argument
57 # is compiler binary to execute.
58 local compiler="$1"
59 shift
60 echo $compiler "$@" >> config.log
61 $compiler "$@" >> config.log 2>&1 || return $?
62 # Test passed. If this is an --enable-werror build, rerun
63 # the test with -Werror and bail out if it fails. This
64 # makes warning-generating-errors in configure test code
65 # obvious to developers.
66 if test "$werror" != "yes"; then
67 return 0
69 # Don't bother rerunning the compile if we were already using -Werror
70 case "$*" in
71 *-Werror*)
72 return 0
74 esac
75 echo $compiler -Werror "$@" >> config.log
76 $compiler -Werror "$@" >> config.log 2>&1 && return $?
77 error_exit "configure test passed without -Werror but failed with -Werror." \
78 "This is probably a bug in the configure script. The failing command" \
79 "will be at the bottom of config.log." \
80 "You can run configure with --disable-werror to bypass this check."
83 do_cc() {
84 do_compiler "$cc" "$@"
87 do_cxx() {
88 do_compiler "$cxx" "$@"
91 update_cxxflags() {
92 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
93 # options which some versions of GCC's C++ compiler complain about
94 # because they only make sense for C programs.
95 QEMU_CXXFLAGS=
96 for arg in $QEMU_CFLAGS; do
97 case $arg in
98 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
99 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
102 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
104 esac
105 done
108 compile_object() {
109 local_cflags="$1"
110 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
113 compile_prog() {
114 local_cflags="$1"
115 local_ldflags="$2"
116 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
119 # symbolically link $1 to $2. Portable version of "ln -sf".
120 symlink() {
121 rm -rf "$2"
122 mkdir -p "$(dirname "$2")"
123 ln -s "$1" "$2"
126 # check whether a command is available to this shell (may be either an
127 # executable or a builtin)
128 has() {
129 type "$1" >/dev/null 2>&1
132 # search for an executable in PATH
133 path_of() {
134 local_command="$1"
135 local_ifs="$IFS"
136 local_dir=""
138 # pathname has a dir component?
139 if [ "${local_command#*/}" != "$local_command" ]; then
140 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
141 echo "$local_command"
142 return 0
145 if [ -z "$local_command" ]; then
146 return 1
149 IFS=:
150 for local_dir in $PATH; do
151 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
152 echo "$local_dir/$local_command"
153 IFS="${local_ifs:-$(printf ' \t\n')}"
154 return 0
156 done
157 # not found
158 IFS="${local_ifs:-$(printf ' \t\n')}"
159 return 1
162 have_backend () {
163 echo "$trace_backends" | grep "$1" >/dev/null
166 # default parameters
167 source_path=`dirname "$0"`
168 cpu=""
169 iasl="iasl"
170 interp_prefix="/usr/gnemul/qemu-%M"
171 static="no"
172 cross_prefix=""
173 audio_drv_list=""
174 block_drv_rw_whitelist=""
175 block_drv_ro_whitelist=""
176 host_cc="cc"
177 libs_softmmu=""
178 libs_tools=""
179 audio_pt_int=""
180 audio_win_int=""
181 cc_i386=i386-pc-linux-gnu-gcc
182 libs_qga=""
183 debug_info="yes"
184 stack_protector=""
186 # Don't accept a target_list environment variable.
187 unset target_list
189 # Default value for a variable defining feature "foo".
190 # * foo="no" feature will only be used if --enable-foo arg is given
191 # * foo="" feature will be searched for, and if found, will be used
192 # unless --disable-foo is given
193 # * foo="yes" this value will only be set by --enable-foo flag.
194 # feature will searched for,
195 # if not found, configure exits with error
197 # Always add --enable-foo and --disable-foo command line args.
198 # Distributions want to ensure that several features are compiled in, and it
199 # is impossible without a --enable-foo that exits if a feature is not found.
201 bluez=""
202 brlapi=""
203 curl=""
204 curses=""
205 docs=""
206 fdt=""
207 netmap="no"
208 pixman=""
209 sdl=""
210 sdlabi="1.2"
211 virtfs=""
212 vnc="yes"
213 sparse="no"
214 uuid=""
215 vde=""
216 vnc_sasl=""
217 vnc_jpeg=""
218 vnc_png=""
219 xen=""
220 xen_ctrl_version=""
221 xen_pv_domain_build="no"
222 xen_pci_passthrough=""
223 linux_aio=""
224 cap_ng=""
225 attr=""
226 libattr=""
227 xfs=""
229 vhost_net="no"
230 vhost_scsi="no"
231 kvm="no"
232 rdma=""
233 gprof="no"
234 debug_tcg="no"
235 debug="no"
236 fortify_source=""
237 strip_opt="yes"
238 tcg_interpreter="no"
239 bigendian="no"
240 mingw32="no"
241 gcov="no"
242 gcov_tool="gcov"
243 EXESUF=""
244 DSOSUF=".so"
245 LDFLAGS_SHARED="-shared"
246 modules="no"
247 prefix="/usr/local"
248 mandir="\${prefix}/share/man"
249 datadir="\${prefix}/share"
250 qemu_docdir="\${prefix}/share/doc/qemu"
251 bindir="\${prefix}/bin"
252 libdir="\${prefix}/lib"
253 libexecdir="\${prefix}/libexec"
254 includedir="\${prefix}/include"
255 sysconfdir="\${prefix}/etc"
256 local_statedir="\${prefix}/var"
257 confsuffix="/qemu"
258 slirp="yes"
259 oss_lib=""
260 bsd="no"
261 linux="no"
262 solaris="no"
263 profiler="no"
264 cocoa="no"
265 softmmu="yes"
266 linux_user="no"
267 bsd_user="no"
268 aix="no"
269 blobs="yes"
270 pkgversion=""
271 pie=""
272 zero_malloc=""
273 qom_cast_debug="yes"
274 trace_backends="log"
275 trace_file="trace"
276 spice=""
277 rbd=""
278 smartcard=""
279 libusb=""
280 usb_redir=""
281 opengl=""
282 opengl_dmabuf="no"
283 avx2_opt="no"
284 zlib="yes"
285 lzo=""
286 snappy=""
287 bzip2=""
288 guest_agent=""
289 guest_agent_with_vss="no"
290 guest_agent_ntddscsi="no"
291 guest_agent_msi=""
292 vss_win32_sdk=""
293 win_sdk="no"
294 want_tools="yes"
295 libiscsi=""
296 libnfs=""
297 coroutine=""
298 coroutine_pool=""
299 seccomp=""
300 glusterfs=""
301 glusterfs_discard="no"
302 glusterfs_zerofill="no"
303 archipelago="no"
304 gtk=""
305 gtkabi=""
306 gtk_gl="no"
307 gnutls=""
308 gnutls_hash=""
309 gnutls_rnd=""
310 nettle=""
311 nettle_kdf="no"
312 gcrypt=""
313 gcrypt_kdf="no"
314 vte=""
315 virglrenderer=""
316 tpm="yes"
317 libssh2=""
318 vhdx=""
319 numa=""
320 tcmalloc="no"
321 jemalloc="no"
323 # parse CC options first
324 for opt do
325 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
326 case "$opt" in
327 --cross-prefix=*) cross_prefix="$optarg"
329 --cc=*) CC="$optarg"
331 --cxx=*) CXX="$optarg"
333 --source-path=*) source_path="$optarg"
335 --cpu=*) cpu="$optarg"
337 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
338 EXTRA_CFLAGS="$optarg"
340 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
341 EXTRA_LDFLAGS="$optarg"
343 --enable-debug-info) debug_info="yes"
345 --disable-debug-info) debug_info="no"
347 esac
348 done
349 # OS specific
350 # Using uname is really, really broken. Once we have the right set of checks
351 # we can eliminate its usage altogether.
353 # Preferred compiler:
354 # ${CC} (if set)
355 # ${cross_prefix}gcc (if cross-prefix specified)
356 # system compiler
357 if test -z "${CC}${cross_prefix}"; then
358 cc="$host_cc"
359 else
360 cc="${CC-${cross_prefix}gcc}"
363 if test -z "${CXX}${cross_prefix}"; then
364 cxx="c++"
365 else
366 cxx="${CXX-${cross_prefix}g++}"
369 ar="${AR-${cross_prefix}ar}"
370 as="${AS-${cross_prefix}as}"
371 cpp="${CPP-$cc -E}"
372 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
373 ld="${LD-${cross_prefix}ld}"
374 nm="${NM-${cross_prefix}nm}"
375 strip="${STRIP-${cross_prefix}strip}"
376 windres="${WINDRES-${cross_prefix}windres}"
377 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
378 query_pkg_config() {
379 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
381 pkg_config=query_pkg_config
382 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
383 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
385 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
386 ARFLAGS="${ARFLAGS-rv}"
388 # default flags for all hosts
389 QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
390 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
391 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
392 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
393 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
394 if test "$debug_info" = "yes"; then
395 CFLAGS="-g $CFLAGS"
396 LDFLAGS="-g $LDFLAGS"
399 # make source path absolute
400 source_path=`cd "$source_path"; pwd`
402 # running configure in the source tree?
403 # we know that's the case if configure is there.
404 if test -f "./configure"; then
405 pwd_is_source_path="y"
406 else
407 pwd_is_source_path="n"
410 check_define() {
411 cat > $TMPC <<EOF
412 #if !defined($1)
413 #error $1 not defined
414 #endif
415 int main(void) { return 0; }
417 compile_object
420 check_include() {
421 cat > $TMPC <<EOF
422 #include <$1>
423 int main(void) { return 0; }
425 compile_object
428 write_c_skeleton() {
429 cat > $TMPC <<EOF
430 int main(void) { return 0; }
434 if check_define __linux__ ; then
435 targetos="Linux"
436 elif check_define _WIN32 ; then
437 targetos='MINGW32'
438 elif check_define __OpenBSD__ ; then
439 targetos='OpenBSD'
440 elif check_define __sun__ ; then
441 targetos='SunOS'
442 elif check_define __HAIKU__ ; then
443 targetos='Haiku'
444 else
445 targetos=`uname -s`
448 # Some host OSes need non-standard checks for which CPU to use.
449 # Note that these checks are broken for cross-compilation: if you're
450 # cross-compiling to one of these OSes then you'll need to specify
451 # the correct CPU with the --cpu option.
452 case $targetos in
453 Darwin)
454 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
455 # run 64-bit userspace code.
456 # If the user didn't specify a CPU explicitly and the kernel says this is
457 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
458 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
459 cpu="x86_64"
462 SunOS)
463 # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
464 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
465 cpu="x86_64"
467 esac
469 if test ! -z "$cpu" ; then
470 # command line argument
472 elif check_define __i386__ ; then
473 cpu="i386"
474 elif check_define __x86_64__ ; then
475 if check_define __ILP32__ ; then
476 cpu="x32"
477 else
478 cpu="x86_64"
480 elif check_define __sparc__ ; then
481 if check_define __arch64__ ; then
482 cpu="sparc64"
483 else
484 cpu="sparc"
486 elif check_define _ARCH_PPC ; then
487 if check_define _ARCH_PPC64 ; then
488 cpu="ppc64"
489 else
490 cpu="ppc"
492 elif check_define __mips__ ; then
493 cpu="mips"
494 elif check_define __ia64__ ; then
495 cpu="ia64"
496 elif check_define __s390__ ; then
497 if check_define __s390x__ ; then
498 cpu="s390x"
499 else
500 cpu="s390"
502 elif check_define __arm__ ; then
503 cpu="arm"
504 elif check_define __aarch64__ ; then
505 cpu="aarch64"
506 elif check_define __hppa__ ; then
507 cpu="hppa"
508 else
509 cpu=`uname -m`
512 ARCH=
513 # Normalise host CPU name and set ARCH.
514 # Note that this case should only have supported host CPUs, not guests.
515 case "$cpu" in
516 ia64|ppc|ppc64|s390|s390x|sparc64|x32)
517 cpu="$cpu"
519 i386|i486|i586|i686|i86pc|BePC)
520 cpu="i386"
522 x86_64|amd64)
523 cpu="x86_64"
525 armv*b|armv*l|arm)
526 cpu="arm"
528 aarch64)
529 cpu="aarch64"
531 mips*)
532 cpu="mips"
534 sparc|sun4[cdmuv])
535 cpu="sparc"
538 # This will result in either an error or falling back to TCI later
539 ARCH=unknown
541 esac
542 if test -z "$ARCH"; then
543 ARCH="$cpu"
546 # OS specific
548 # host *BSD for user mode
549 HOST_VARIANT_DIR=""
551 case $targetos in
552 CYGWIN*)
553 mingw32="yes"
554 QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
555 audio_possible_drivers="sdl"
556 audio_drv_list="sdl"
558 MINGW32*)
559 mingw32="yes"
560 audio_possible_drivers="dsound sdl"
561 if check_include dsound.h; then
562 audio_drv_list="dsound"
563 else
564 audio_drv_list=""
567 GNU/kFreeBSD)
568 bsd="yes"
569 audio_drv_list="oss"
570 audio_possible_drivers="oss sdl pa"
572 FreeBSD)
573 bsd="yes"
574 make="${MAKE-gmake}"
575 audio_drv_list="oss"
576 audio_possible_drivers="oss sdl pa"
577 # needed for kinfo_getvmmap(3) in libutil.h
578 LIBS="-lutil $LIBS"
579 netmap="" # enable netmap autodetect
580 HOST_VARIANT_DIR="freebsd"
582 DragonFly)
583 bsd="yes"
584 make="${MAKE-gmake}"
585 audio_drv_list="oss"
586 audio_possible_drivers="oss sdl pa"
587 HOST_VARIANT_DIR="dragonfly"
589 NetBSD)
590 bsd="yes"
591 make="${MAKE-gmake}"
592 audio_drv_list="oss"
593 audio_possible_drivers="oss sdl"
594 oss_lib="-lossaudio"
595 HOST_VARIANT_DIR="netbsd"
597 OpenBSD)
598 bsd="yes"
599 make="${MAKE-gmake}"
600 audio_drv_list="sdl"
601 audio_possible_drivers="sdl"
602 HOST_VARIANT_DIR="openbsd"
604 Darwin)
605 bsd="yes"
606 darwin="yes"
607 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
608 if [ "$cpu" = "x86_64" ] ; then
609 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
610 LDFLAGS="-arch x86_64 $LDFLAGS"
612 cocoa="yes"
613 audio_drv_list="coreaudio"
614 audio_possible_drivers="coreaudio sdl"
615 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
616 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
617 # Disable attempts to use ObjectiveC features in os/object.h since they
618 # won't work when we're compiling with gcc as a C compiler.
619 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
620 HOST_VARIANT_DIR="darwin"
622 SunOS)
623 solaris="yes"
624 make="${MAKE-gmake}"
625 install="${INSTALL-ginstall}"
626 ld="gld"
627 smbd="${SMBD-/usr/sfw/sbin/smbd}"
628 needs_libsunmath="no"
629 solarisrev=`uname -r | cut -f2 -d.`
630 if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
631 if test "$solarisrev" -le 9 ; then
632 if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
633 needs_libsunmath="yes"
634 QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
635 LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
636 LIBS="-lsunmath $LIBS"
637 else
638 error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
639 "libsunmath from the Sun Studio compilers tools, due to a lack of" \
640 "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
641 "Studio 11 can be downloaded from www.sun.com."
645 if test -f /usr/include/sys/soundcard.h ; then
646 audio_drv_list="oss"
648 audio_possible_drivers="oss sdl"
649 # needed for CMSG_ macros in sys/socket.h
650 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
651 # needed for TIOCWIN* defines in termios.h
652 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
653 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
654 solarisnetlibs="-lsocket -lnsl -lresolv"
655 LIBS="$solarisnetlibs $LIBS"
656 libs_qga="$solarisnetlibs $libs_qga"
658 AIX)
659 aix="yes"
660 make="${MAKE-gmake}"
662 Haiku)
663 haiku="yes"
664 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
665 LIBS="-lposix_error_mapper -lnetwork $LIBS"
668 audio_drv_list="oss"
669 audio_possible_drivers="oss alsa sdl pa"
670 linux="yes"
671 linux_user="yes"
672 kvm="yes"
673 vhost_net="yes"
674 vhost_scsi="yes"
675 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
677 esac
679 if [ "$bsd" = "yes" ] ; then
680 if [ "$darwin" != "yes" ] ; then
681 bsd_user="yes"
685 : ${make=${MAKE-make}}
686 : ${install=${INSTALL-install}}
687 : ${python=${PYTHON-python}}
688 : ${smbd=${SMBD-/usr/sbin/smbd}}
690 # Default objcc to clang if available, otherwise use CC
691 if has clang; then
692 objcc=clang
693 else
694 objcc="$cc"
697 if test "$mingw32" = "yes" ; then
698 EXESUF=".exe"
699 DSOSUF=".dll"
700 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
701 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
702 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
703 # MinGW needs -mthreads for TLS and macro _MT.
704 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
705 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
706 write_c_skeleton;
707 if compile_prog "" "-liberty" ; then
708 LIBS="-liberty $LIBS"
710 prefix="c:/Program Files/QEMU"
711 mandir="\${prefix}"
712 datadir="\${prefix}"
713 qemu_docdir="\${prefix}"
714 bindir="\${prefix}"
715 sysconfdir="\${prefix}"
716 local_statedir=
717 confsuffix=""
718 libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi -lnetapi32 $libs_qga"
721 werror=""
723 for opt do
724 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
725 case "$opt" in
726 --help|-h) show_help=yes
728 --version|-V) exec cat $source_path/VERSION
730 --prefix=*) prefix="$optarg"
732 --interp-prefix=*) interp_prefix="$optarg"
734 --source-path=*)
736 --cross-prefix=*)
738 --cc=*)
740 --host-cc=*) host_cc="$optarg"
742 --cxx=*)
744 --iasl=*) iasl="$optarg"
746 --objcc=*) objcc="$optarg"
748 --make=*) make="$optarg"
750 --install=*) install="$optarg"
752 --python=*) python="$optarg"
754 --gcov=*) gcov_tool="$optarg"
756 --smbd=*) smbd="$optarg"
758 --extra-cflags=*)
760 --extra-ldflags=*)
762 --enable-debug-info)
764 --disable-debug-info)
766 --enable-modules)
767 modules="yes"
769 --disable-modules)
770 modules="no"
772 --cpu=*)
774 --target-list=*) target_list="$optarg"
776 --enable-trace-backends=*) trace_backends="$optarg"
778 # XXX: backwards compatibility
779 --enable-trace-backend=*) trace_backends="$optarg"
781 --with-trace-file=*) trace_file="$optarg"
783 --enable-gprof) gprof="yes"
785 --enable-gcov) gcov="yes"
787 --static)
788 static="yes"
789 LDFLAGS="-static $LDFLAGS"
790 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
792 --mandir=*) mandir="$optarg"
794 --bindir=*) bindir="$optarg"
796 --libdir=*) libdir="$optarg"
798 --libexecdir=*) libexecdir="$optarg"
800 --includedir=*) includedir="$optarg"
802 --datadir=*) datadir="$optarg"
804 --with-confsuffix=*) confsuffix="$optarg"
806 --docdir=*) qemu_docdir="$optarg"
808 --sysconfdir=*) sysconfdir="$optarg"
810 --localstatedir=*) local_statedir="$optarg"
812 --sbindir=*|--sharedstatedir=*|\
813 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
814 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
815 # These switches are silently ignored, for compatibility with
816 # autoconf-generated configure scripts. This allows QEMU's
817 # configure to be used by RPM and similar macros that set
818 # lots of directory switches by default.
820 --with-system-pixman) pixman="system"
822 --without-system-pixman) pixman="internal"
824 --without-pixman) pixman="none"
826 --disable-sdl) sdl="no"
828 --enable-sdl) sdl="yes"
830 --with-sdlabi=*) sdlabi="$optarg"
832 --disable-qom-cast-debug) qom_cast_debug="no"
834 --enable-qom-cast-debug) qom_cast_debug="yes"
836 --disable-virtfs) virtfs="no"
838 --enable-virtfs) virtfs="yes"
840 --disable-vnc) vnc="no"
842 --enable-vnc) vnc="yes"
844 --oss-lib=*) oss_lib="$optarg"
846 --audio-drv-list=*) audio_drv_list="$optarg"
848 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
850 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
852 --enable-debug-tcg) debug_tcg="yes"
854 --disable-debug-tcg) debug_tcg="no"
856 --enable-debug)
857 # Enable debugging options that aren't excessively noisy
858 debug_tcg="yes"
859 debug="yes"
860 strip_opt="no"
861 fortify_source="no"
863 --enable-sparse) sparse="yes"
865 --disable-sparse) sparse="no"
867 --disable-strip) strip_opt="no"
869 --disable-vnc-sasl) vnc_sasl="no"
871 --enable-vnc-sasl) vnc_sasl="yes"
873 --disable-vnc-jpeg) vnc_jpeg="no"
875 --enable-vnc-jpeg) vnc_jpeg="yes"
877 --disable-vnc-png) vnc_png="no"
879 --enable-vnc-png) vnc_png="yes"
881 --disable-slirp) slirp="no"
883 --disable-uuid) uuid="no"
885 --enable-uuid) uuid="yes"
887 --disable-vde) vde="no"
889 --enable-vde) vde="yes"
891 --disable-netmap) netmap="no"
893 --enable-netmap) netmap="yes"
895 --disable-xen) xen="no"
897 --enable-xen) xen="yes"
899 --disable-xen-pci-passthrough) xen_pci_passthrough="no"
901 --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
903 --disable-xen-pv-domain-build) xen_pv_domain_build="no"
905 --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
907 --disable-brlapi) brlapi="no"
909 --enable-brlapi) brlapi="yes"
911 --disable-bluez) bluez="no"
913 --enable-bluez) bluez="yes"
915 --disable-kvm) kvm="no"
917 --enable-kvm) kvm="yes"
919 --disable-tcg-interpreter) tcg_interpreter="no"
921 --enable-tcg-interpreter) tcg_interpreter="yes"
923 --disable-cap-ng) cap_ng="no"
925 --enable-cap-ng) cap_ng="yes"
927 --disable-spice) spice="no"
929 --enable-spice) spice="yes"
931 --disable-libiscsi) libiscsi="no"
933 --enable-libiscsi) libiscsi="yes"
935 --disable-libnfs) libnfs="no"
937 --enable-libnfs) libnfs="yes"
939 --enable-profiler) profiler="yes"
941 --disable-cocoa) cocoa="no"
943 --enable-cocoa)
944 cocoa="yes" ;
945 audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
947 --disable-system) softmmu="no"
949 --enable-system) softmmu="yes"
951 --disable-user)
952 linux_user="no" ;
953 bsd_user="no" ;
955 --enable-user) ;;
956 --disable-linux-user) linux_user="no"
958 --enable-linux-user) linux_user="yes"
960 --disable-bsd-user) bsd_user="no"
962 --enable-bsd-user) bsd_user="yes"
964 --enable-pie) pie="yes"
966 --disable-pie) pie="no"
968 --enable-werror) werror="yes"
970 --disable-werror) werror="no"
972 --enable-stack-protector) stack_protector="yes"
974 --disable-stack-protector) stack_protector="no"
976 --disable-curses) curses="no"
978 --enable-curses) curses="yes"
980 --disable-curl) curl="no"
982 --enable-curl) curl="yes"
984 --disable-fdt) fdt="no"
986 --enable-fdt) fdt="yes"
988 --disable-linux-aio) linux_aio="no"
990 --enable-linux-aio) linux_aio="yes"
992 --disable-attr) attr="no"
994 --enable-attr) attr="yes"
996 --disable-blobs) blobs="no"
998 --with-pkgversion=*) pkgversion=" ($optarg)"
1000 --with-coroutine=*) coroutine="$optarg"
1002 --disable-coroutine-pool) coroutine_pool="no"
1004 --enable-coroutine-pool) coroutine_pool="yes"
1006 --disable-docs) docs="no"
1008 --enable-docs) docs="yes"
1010 --disable-vhost-net) vhost_net="no"
1012 --enable-vhost-net) vhost_net="yes"
1014 --disable-vhost-scsi) vhost_scsi="no"
1016 --enable-vhost-scsi) vhost_scsi="yes"
1018 --disable-opengl) opengl="no"
1020 --enable-opengl) opengl="yes"
1022 --disable-rbd) rbd="no"
1024 --enable-rbd) rbd="yes"
1026 --disable-xfsctl) xfs="no"
1028 --enable-xfsctl) xfs="yes"
1030 --disable-smartcard) smartcard="no"
1032 --enable-smartcard) smartcard="yes"
1034 --disable-libusb) libusb="no"
1036 --enable-libusb) libusb="yes"
1038 --disable-usb-redir) usb_redir="no"
1040 --enable-usb-redir) usb_redir="yes"
1042 --disable-zlib-test) zlib="no"
1044 --disable-lzo) lzo="no"
1046 --enable-lzo) lzo="yes"
1048 --disable-snappy) snappy="no"
1050 --enable-snappy) snappy="yes"
1052 --disable-bzip2) bzip2="no"
1054 --enable-bzip2) bzip2="yes"
1056 --enable-guest-agent) guest_agent="yes"
1058 --disable-guest-agent) guest_agent="no"
1060 --enable-guest-agent-msi) guest_agent_msi="yes"
1062 --disable-guest-agent-msi) guest_agent_msi="no"
1064 --with-vss-sdk) vss_win32_sdk=""
1066 --with-vss-sdk=*) vss_win32_sdk="$optarg"
1068 --without-vss-sdk) vss_win32_sdk="no"
1070 --with-win-sdk) win_sdk=""
1072 --with-win-sdk=*) win_sdk="$optarg"
1074 --without-win-sdk) win_sdk="no"
1076 --enable-tools) want_tools="yes"
1078 --disable-tools) want_tools="no"
1080 --enable-seccomp) seccomp="yes"
1082 --disable-seccomp) seccomp="no"
1084 --disable-glusterfs) glusterfs="no"
1086 --enable-glusterfs) glusterfs="yes"
1088 --disable-archipelago) archipelago="no"
1090 --enable-archipelago) archipelago="yes"
1092 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1093 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1095 --disable-gtk) gtk="no"
1097 --enable-gtk) gtk="yes"
1099 --disable-gnutls) gnutls="no"
1101 --enable-gnutls) gnutls="yes"
1103 --disable-nettle) nettle="no"
1105 --enable-nettle) nettle="yes"
1107 --disable-gcrypt) gcrypt="no"
1109 --enable-gcrypt) gcrypt="yes"
1111 --enable-rdma) rdma="yes"
1113 --disable-rdma) rdma="no"
1115 --with-gtkabi=*) gtkabi="$optarg"
1117 --disable-vte) vte="no"
1119 --enable-vte) vte="yes"
1121 --disable-virglrenderer) virglrenderer="no"
1123 --enable-virglrenderer) virglrenderer="yes"
1125 --disable-tpm) tpm="no"
1127 --enable-tpm) tpm="yes"
1129 --disable-libssh2) libssh2="no"
1131 --enable-libssh2) libssh2="yes"
1133 --enable-vhdx) vhdx="yes"
1135 --disable-vhdx) vhdx="no"
1137 --disable-numa) numa="no"
1139 --enable-numa) numa="yes"
1141 --disable-tcmalloc) tcmalloc="no"
1143 --enable-tcmalloc) tcmalloc="yes"
1145 --disable-jemalloc) jemalloc="no"
1147 --enable-jemalloc) jemalloc="yes"
1150 echo "ERROR: unknown option $opt"
1151 echo "Try '$0 --help' for more information"
1152 exit 1
1154 esac
1155 done
1157 if ! has $python; then
1158 error_exit "Python not found. Use --python=/path/to/python"
1161 # Note that if the Python conditional here evaluates True we will exit
1162 # with status 1 which is a shell 'false' value.
1163 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1164 error_exit "Cannot use '$python', Python 2.6 or later is required." \
1165 "Note that Python 3 or later is not yet supported." \
1166 "Use --python=/path/to/python to specify a supported Python."
1169 # Suppress writing compiled files
1170 python="$python -B"
1172 case "$cpu" in
1173 ppc)
1174 CPU_CFLAGS="-m32"
1175 LDFLAGS="-m32 $LDFLAGS"
1177 ppc64)
1178 CPU_CFLAGS="-m64"
1179 LDFLAGS="-m64 $LDFLAGS"
1181 sparc)
1182 LDFLAGS="-m32 $LDFLAGS"
1183 CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1185 sparc64)
1186 LDFLAGS="-m64 $LDFLAGS"
1187 CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1189 s390)
1190 CPU_CFLAGS="-m31"
1191 LDFLAGS="-m31 $LDFLAGS"
1193 s390x)
1194 CPU_CFLAGS="-m64"
1195 LDFLAGS="-m64 $LDFLAGS"
1197 i386)
1198 CPU_CFLAGS="-m32"
1199 LDFLAGS="-m32 $LDFLAGS"
1200 cc_i386='$(CC) -m32'
1202 x86_64)
1203 CPU_CFLAGS="-m64"
1204 LDFLAGS="-m64 $LDFLAGS"
1205 cc_i386='$(CC) -m32'
1207 x32)
1208 CPU_CFLAGS="-mx32"
1209 LDFLAGS="-mx32 $LDFLAGS"
1210 cc_i386='$(CC) -m32'
1212 # No special flags required for other host CPUs
1213 esac
1215 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1216 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1218 default_target_list=""
1220 mak_wilds=""
1222 if [ "$softmmu" = "yes" ]; then
1223 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1225 if [ "$linux_user" = "yes" ]; then
1226 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1228 if [ "$bsd_user" = "yes" ]; then
1229 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1232 for config in $mak_wilds; do
1233 default_target_list="${default_target_list} $(basename "$config" .mak)"
1234 done
1236 if test x"$show_help" = x"yes" ; then
1237 cat << EOF
1239 Usage: configure [options]
1240 Options: [defaults in brackets after descriptions]
1242 Standard options:
1243 --help print this message
1244 --prefix=PREFIX install in PREFIX [$prefix]
1245 --interp-prefix=PREFIX where to find shared libraries, etc.
1246 use %M for cpu name [$interp_prefix]
1247 --target-list=LIST set target list (default: build everything)
1248 $(echo Available targets: $default_target_list | \
1249 fold -s -w 53 | sed -e 's/^/ /')
1251 Advanced options (experts only):
1252 --source-path=PATH path of source code [$source_path]
1253 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
1254 --cc=CC use C compiler CC [$cc]
1255 --iasl=IASL use ACPI compiler IASL [$iasl]
1256 --host-cc=CC use C compiler CC [$host_cc] for code run at
1257 build time
1258 --cxx=CXX use C++ compiler CXX [$cxx]
1259 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
1260 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
1261 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
1262 --make=MAKE use specified make [$make]
1263 --install=INSTALL use specified install [$install]
1264 --python=PYTHON use specified python [$python]
1265 --smbd=SMBD use specified smbd [$smbd]
1266 --static enable static build [$static]
1267 --mandir=PATH install man pages in PATH
1268 --datadir=PATH install firmware in PATH$confsuffix
1269 --docdir=PATH install documentation in PATH$confsuffix
1270 --bindir=PATH install binaries in PATH
1271 --libdir=PATH install libraries in PATH
1272 --sysconfdir=PATH install config in PATH$confsuffix
1273 --localstatedir=PATH install local state in PATH (set at runtime on win32)
1274 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1275 --enable-debug enable common debug build options
1276 --disable-strip disable stripping binaries
1277 --disable-werror disable compilation abort on warning
1278 --disable-stack-protector disable compiler-provided stack protection
1279 --audio-drv-list=LIST set audio drivers list:
1280 Available drivers: $audio_possible_drivers
1281 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
1282 --block-drv-rw-whitelist=L
1283 set block driver read-write whitelist
1284 (affects only QEMU, not qemu-img)
1285 --block-drv-ro-whitelist=L
1286 set block driver read-only whitelist
1287 (affects only QEMU, not qemu-img)
1288 --enable-trace-backends=B Set trace backend
1289 Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1290 --with-trace-file=NAME Full PATH,NAME of file to store traces
1291 Default:trace-<pid>
1292 --disable-slirp disable SLIRP userspace network connectivity
1293 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1294 --oss-lib path to OSS library
1295 --cpu=CPU Build for host CPU [$cpu]
1296 --with-coroutine=BACKEND coroutine backend. Supported options:
1297 gthread, ucontext, sigaltstack, windows
1298 --enable-gcov enable test coverage analysis with gcov
1299 --gcov=GCOV use specified gcov [$gcov_tool]
1300 --disable-blobs disable installing provided firmware blobs
1301 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
1302 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
1304 Optional features, enabled with --enable-FEATURE and
1305 disabled with --disable-FEATURE, default is enabled if available:
1307 system all system emulation targets
1308 user supported user emulation targets
1309 linux-user all linux usermode emulation targets
1310 bsd-user all BSD usermode emulation targets
1311 docs build documentation
1312 guest-agent build the QEMU Guest Agent
1313 guest-agent-msi build guest agent Windows MSI installation package
1314 pie Position Independent Executables
1315 modules modules support
1316 debug-tcg TCG debugging (default is disabled)
1317 debug-info debugging information
1318 sparse sparse checker
1320 gnutls GNUTLS cryptography support
1321 nettle nettle cryptography support
1322 gcrypt libgcrypt cryptography support
1323 sdl SDL UI
1324 --with-sdlabi select preferred SDL ABI 1.2 or 2.0
1325 gtk gtk UI
1326 --with-gtkabi select preferred GTK ABI 2.0 or 3.0
1327 vte vte support for the gtk UI
1328 curses curses UI
1329 vnc VNC UI support
1330 vnc-sasl SASL encryption for VNC server
1331 vnc-jpeg JPEG lossy compression for VNC server
1332 vnc-png PNG compression for VNC server
1333 cocoa Cocoa UI (Mac OS X only)
1334 virtfs VirtFS
1335 xen xen backend driver support
1336 xen-pci-passthrough
1337 brlapi BrlAPI (Braile)
1338 curl curl connectivity
1339 fdt fdt device tree
1340 bluez bluez stack connectivity
1341 kvm KVM acceleration support
1342 rdma RDMA-based migration support
1343 uuid uuid support
1344 vde support for vde network
1345 netmap support for netmap network
1346 linux-aio Linux AIO support
1347 cap-ng libcap-ng support
1348 attr attr and xattr support
1349 vhost-net vhost-net acceleration support
1350 spice spice
1351 rbd rados block device (rbd)
1352 libiscsi iscsi support
1353 libnfs nfs support
1354 smartcard smartcard support (libcacard)
1355 libusb libusb (for usb passthrough)
1356 usb-redir usb network redirection support
1357 lzo support of lzo compression library
1358 snappy support of snappy compression library
1359 bzip2 support of bzip2 compression library
1360 (for reading bzip2-compressed dmg images)
1361 seccomp seccomp support
1362 coroutine-pool coroutine freelist (better performance)
1363 glusterfs GlusterFS backend
1364 archipelago Archipelago backend
1365 tpm TPM support
1366 libssh2 ssh block device support
1367 vhdx support for the Microsoft VHDX image format
1368 numa libnuma support
1369 tcmalloc tcmalloc support
1370 jemalloc jemalloc support
1372 NOTE: The object files are built at the place where configure is launched
1374 exit 0
1377 # Now we have handled --enable-tcg-interpreter and know we're not just
1378 # printing the help message, bail out if the host CPU isn't supported.
1379 if test "$ARCH" = "unknown"; then
1380 if test "$tcg_interpreter" = "yes" ; then
1381 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1382 ARCH=tci
1383 else
1384 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1388 # Consult white-list to determine whether to enable werror
1389 # by default. Only enable by default for git builds
1390 z_version=`cut -f3 -d. $source_path/VERSION`
1392 if test -z "$werror" ; then
1393 if test -d "$source_path/.git" -a \
1394 "$linux" = "yes" ; then
1395 werror="yes"
1396 else
1397 werror="no"
1401 # check that the C compiler works.
1402 write_c_skeleton;
1403 if compile_object ; then
1404 : C compiler works ok
1405 else
1406 error_exit "\"$cc\" either does not exist or does not work"
1408 if ! compile_prog ; then
1409 error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1412 # Check that the C++ compiler exists and works with the C compiler
1413 if has $cxx; then
1414 cat > $TMPC <<EOF
1415 int c_function(void);
1416 int main(void) { return c_function(); }
1419 compile_object
1421 cat > $TMPCXX <<EOF
1422 extern "C" {
1423 int c_function(void);
1425 int c_function(void) { return 42; }
1428 update_cxxflags
1430 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1431 # C++ compiler $cxx works ok with C compiler $cc
1433 else
1434 echo "C++ compiler $cxx does not work with C compiler $cc"
1435 echo "Disabling C++ specific optional code"
1436 cxx=
1438 else
1439 echo "No C++ compiler available; disabling C++ specific optional code"
1440 cxx=
1443 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1444 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1445 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1446 gcc_flags="-Wendif-labels $gcc_flags"
1447 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1448 gcc_flags="-Wno-string-plus-int $gcc_flags"
1449 # Note that we do not add -Werror to gcc_flags here, because that would
1450 # enable it for all configure tests. If a configure test failed due
1451 # to -Werror this would just silently disable some features,
1452 # so it's too error prone.
1454 cc_has_warning_flag() {
1455 write_c_skeleton;
1457 # Use the positive sense of the flag when testing for -Wno-wombat
1458 # support (gcc will happily accept the -Wno- form of unknown
1459 # warning options).
1460 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1461 compile_prog "-Werror $optflag" ""
1464 for flag in $gcc_flags; do
1465 if cc_has_warning_flag $flag ; then
1466 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1468 done
1470 if test "$stack_protector" != "no"; then
1471 cat > $TMPC << EOF
1472 int main(int argc, char *argv[])
1474 char arr[64], *p = arr, *c = argv[0];
1475 while (*c) {
1476 *p++ = *c++;
1478 return 0;
1481 gcc_flags="-fstack-protector-strong -fstack-protector-all"
1482 sp_on=0
1483 for flag in $gcc_flags; do
1484 # We need to check both a compile and a link, since some compiler
1485 # setups fail only on a .c->.o compile and some only at link time
1486 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1487 compile_prog "-Werror $flag" ""; then
1488 QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1489 sp_on=1
1490 break
1492 done
1493 if test "$stack_protector" = yes; then
1494 if test $sp_on = 0; then
1495 error_exit "Stack protector not supported"
1500 # Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and
1501 # large functions that use global variables. The bug is in all releases of
1502 # GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in
1503 # 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013.
1504 cat > $TMPC << EOF
1505 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1506 int main(void) { return 0; }
1507 #else
1508 #error No bug in this compiler.
1509 #endif
1511 if compile_prog "-Werror -fno-gcse" "" ; then
1512 TRANSLATE_OPT_CFLAGS=-fno-gcse
1515 if test "$static" = "yes" ; then
1516 if test "$modules" = "yes" ; then
1517 error_exit "static and modules are mutually incompatible"
1519 if test "$pie" = "yes" ; then
1520 error_exit "static and pie are mutually incompatible"
1521 else
1522 pie="no"
1526 # Unconditional check for compiler __thread support
1527 cat > $TMPC << EOF
1528 static __thread int tls_var;
1529 int main(void) { return tls_var; }
1532 if ! compile_prog "-Werror" "" ; then
1533 error_exit "Your compiler does not support the __thread specifier for " \
1534 "Thread-Local Storage (TLS). Please upgrade to a version that does."
1537 if test "$pie" = ""; then
1538 case "$cpu-$targetos" in
1539 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1542 pie="no"
1544 esac
1547 if test "$pie" != "no" ; then
1548 cat > $TMPC << EOF
1550 #ifdef __linux__
1551 # define THREAD __thread
1552 #else
1553 # define THREAD
1554 #endif
1556 static THREAD int tls_var;
1558 int main(void) { return tls_var; }
1561 if compile_prog "-fPIE -DPIE" "-pie"; then
1562 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1563 LDFLAGS="-pie $LDFLAGS"
1564 pie="yes"
1565 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1566 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1568 else
1569 if test "$pie" = "yes"; then
1570 error_exit "PIE not available due to missing toolchain support"
1571 else
1572 echo "Disabling PIE due to missing toolchain support"
1573 pie="no"
1577 if compile_prog "-Werror -fno-pie" "-nopie"; then
1578 CFLAGS_NOPIE="-fno-pie"
1579 LDFLAGS_NOPIE="-nopie"
1583 ##########################################
1584 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1585 # use i686 as default anyway, but for those that don't, an explicit
1586 # specification is necessary
1588 if test "$cpu" = "i386"; then
1589 cat > $TMPC << EOF
1590 static int sfaa(int *ptr)
1592 return __sync_fetch_and_and(ptr, 0);
1595 int main(void)
1597 int val = 42;
1598 val = __sync_val_compare_and_swap(&val, 0, 1);
1599 sfaa(&val);
1600 return val;
1603 if ! compile_prog "" "" ; then
1604 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1608 #########################################
1609 # Solaris specific configure tool chain decisions
1611 if test "$solaris" = "yes" ; then
1612 if has $install; then
1614 else
1615 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1616 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1617 "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1619 if test "`path_of $install`" = "/usr/sbin/install" ; then
1620 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1621 "try ginstall from the GNU fileutils available from www.blastwave.org" \
1622 "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1624 if has ar; then
1626 else
1627 if test -f /usr/ccs/bin/ar ; then
1628 error_exit "No path includes ar" \
1629 "Add /usr/ccs/bin to your path and rerun configure"
1631 error_exit "No path includes ar"
1635 if test -z "${target_list+xxx}" ; then
1636 target_list="$default_target_list"
1637 else
1638 target_list=`echo "$target_list" | sed -e 's/,/ /g'`
1641 # Check that we recognised the target name; this allows a more
1642 # friendly error message than if we let it fall through.
1643 for target in $target_list; do
1644 case " $default_target_list " in
1645 *" $target "*)
1648 error_exit "Unknown target name '$target'"
1650 esac
1651 done
1653 # see if system emulation was really requested
1654 case " $target_list " in
1655 *"-softmmu "*) softmmu=yes
1657 *) softmmu=no
1659 esac
1661 feature_not_found() {
1662 feature=$1
1663 remedy=$2
1665 error_exit "User requested feature $feature" \
1666 "configure was not able to find it." \
1667 "$remedy"
1670 # ---
1671 # big/little endian test
1672 cat > $TMPC << EOF
1673 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1674 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1675 extern int foo(short *, short *);
1676 int main(int argc, char *argv[]) {
1677 return foo(big_endian, little_endian);
1681 if compile_object ; then
1682 if grep -q BiGeNdIaN $TMPO ; then
1683 bigendian="yes"
1684 elif grep -q LiTtLeEnDiAn $TMPO ; then
1685 bigendian="no"
1686 else
1687 echo big/little test failed
1689 else
1690 echo big/little test failed
1693 ##########################################
1694 # cocoa implies not SDL or GTK
1695 # (the cocoa UI code currently assumes it is always the active UI
1696 # and doesn't interact well with other UI frontend code)
1697 if test "$cocoa" = "yes"; then
1698 if test "$sdl" = "yes"; then
1699 error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1701 if test "$gtk" = "yes"; then
1702 error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1704 gtk=no
1705 sdl=no
1708 ##########################################
1709 # L2TPV3 probe
1711 cat > $TMPC <<EOF
1712 #include <sys/socket.h>
1713 #include <linux/ip.h>
1714 int main(void) { return sizeof(struct mmsghdr); }
1716 if compile_prog "" "" ; then
1717 l2tpv3=yes
1718 else
1719 l2tpv3=no
1722 ##########################################
1723 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1725 if test "$mingw32" = "yes"; then
1726 # Some versions of MinGW / Mingw-w64 lack localtime_r
1727 # and gmtime_r entirely.
1729 # Some versions of Mingw-w64 define a macro for
1730 # localtime_r/gmtime_r.
1732 # Some versions of Mingw-w64 will define functions
1733 # for localtime_r/gmtime_r, but only if you have
1734 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1735 # though, unistd.h and pthread.h both define
1736 # that for you.
1738 # So this #undef localtime_r and #include <unistd.h>
1739 # are not in fact redundant.
1740 cat > $TMPC << EOF
1741 #include <unistd.h>
1742 #include <time.h>
1743 #undef localtime_r
1744 int main(void) { localtime_r(NULL, NULL); return 0; }
1746 if compile_prog "" "" ; then
1747 localtime_r="yes"
1748 else
1749 localtime_r="no"
1753 ##########################################
1754 # pkg-config probe
1756 if ! has "$pkg_config_exe"; then
1757 error_exit "pkg-config binary '$pkg_config_exe' not found"
1760 ##########################################
1761 # NPTL probe
1763 if test "$linux_user" = "yes"; then
1764 cat > $TMPC <<EOF
1765 #include <sched.h>
1766 #include <linux/futex.h>
1767 int main(void) {
1768 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1769 #error bork
1770 #endif
1771 return 0;
1774 if ! compile_object ; then
1775 feature_not_found "nptl" "Install glibc and linux kernel headers."
1779 ##########################################
1780 # avx2 optimization requirement check
1782 cat > $TMPC << EOF
1783 static void bar(void) {}
1784 static void *bar_ifunc(void) {return (void*) bar;}
1785 static void foo(void) __attribute__((ifunc("bar_ifunc")));
1786 int main(void) { foo(); return 0; }
1788 if compile_prog "-mavx2" "" ; then
1789 if readelf --syms $TMPE |grep "IFUNC.*foo" >/dev/null 2>&1; then
1790 avx2_opt="yes"
1794 #########################################
1795 # zlib check
1797 if test "$zlib" != "no" ; then
1798 cat > $TMPC << EOF
1799 #include <zlib.h>
1800 int main(void) { zlibVersion(); return 0; }
1802 if compile_prog "" "-lz" ; then
1804 else
1805 error_exit "zlib check failed" \
1806 "Make sure to have the zlib libs and headers installed."
1809 LIBS="$LIBS -lz"
1811 ##########################################
1812 # lzo check
1814 if test "$lzo" != "no" ; then
1815 cat > $TMPC << EOF
1816 #include <lzo/lzo1x.h>
1817 int main(void) { lzo_version(); return 0; }
1819 if compile_prog "" "-llzo2" ; then
1820 libs_softmmu="$libs_softmmu -llzo2"
1821 lzo="yes"
1822 else
1823 if test "$lzo" = "yes"; then
1824 feature_not_found "liblzo2" "Install liblzo2 devel"
1826 lzo="no"
1830 ##########################################
1831 # snappy check
1833 if test "$snappy" != "no" ; then
1834 cat > $TMPC << EOF
1835 #include <snappy-c.h>
1836 int main(void) { snappy_max_compressed_length(4096); return 0; }
1838 if compile_prog "" "-lsnappy" ; then
1839 libs_softmmu="$libs_softmmu -lsnappy"
1840 snappy="yes"
1841 else
1842 if test "$snappy" = "yes"; then
1843 feature_not_found "libsnappy" "Install libsnappy devel"
1845 snappy="no"
1849 ##########################################
1850 # bzip2 check
1852 if test "$bzip2" != "no" ; then
1853 cat > $TMPC << EOF
1854 #include <bzlib.h>
1855 int main(void) { BZ2_bzlibVersion(); return 0; }
1857 if compile_prog "" "-lbz2" ; then
1858 bzip2="yes"
1859 else
1860 if test "$bzip2" = "yes"; then
1861 feature_not_found "libbzip2" "Install libbzip2 devel"
1863 bzip2="no"
1867 ##########################################
1868 # libseccomp check
1870 if test "$seccomp" != "no" ; then
1871 case "$cpu" in
1872 i386|x86_64)
1873 libseccomp_minver="2.1.0"
1875 mips)
1876 libseccomp_minver="2.2.0"
1878 arm|aarch64)
1879 libseccomp_minver="2.2.3"
1882 libseccomp_minver=""
1884 esac
1886 if test "$libseccomp_minver" != "" &&
1887 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
1888 libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
1889 QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
1890 seccomp="yes"
1891 else
1892 if test "$seccomp" = "yes" ; then
1893 if test "$libseccomp_minver" != "" ; then
1894 feature_not_found "libseccomp" \
1895 "Install libseccomp devel >= $libseccomp_minver"
1896 else
1897 feature_not_found "libseccomp" \
1898 "libseccomp is not supported for host cpu $cpu"
1901 seccomp="no"
1904 ##########################################
1905 # xen probe
1907 if test "$xen" != "no" ; then
1908 xen_libs="-lxenstore -lxenctrl -lxenguest"
1909 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
1911 # First we test whether Xen headers and libraries are available.
1912 # If no, we are done and there is no Xen support.
1913 # If yes, more tests are run to detect the Xen version.
1915 # Xen (any)
1916 cat > $TMPC <<EOF
1917 #include <xenctrl.h>
1918 int main(void) {
1919 return 0;
1922 if ! compile_prog "" "$xen_libs" ; then
1923 # Xen not found
1924 if test "$xen" = "yes" ; then
1925 feature_not_found "xen" "Install xen devel"
1927 xen=no
1929 # Xen unstable
1930 elif
1931 cat > $TMPC <<EOF &&
1933 * If we have stable libs the we don't want the libxc compat
1934 * layers, regardless of what CFLAGS we may have been given.
1936 #undef XC_WANT_COMPAT_EVTCHN_API
1937 #undef XC_WANT_COMPAT_GNTTAB_API
1938 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
1939 #include <xenctrl.h>
1940 #include <xenstore.h>
1941 #include <xenevtchn.h>
1942 #include <xengnttab.h>
1943 #include <xenforeignmemory.h>
1944 #include <stdint.h>
1945 #include <xen/hvm/hvm_info_table.h>
1946 #if !defined(HVM_MAX_VCPUS)
1947 # error HVM_MAX_VCPUS not defined
1948 #endif
1949 int main(void) {
1950 xc_interface *xc = NULL;
1951 xenforeignmemory_handle *xfmem;
1952 xenevtchn_handle *xe;
1953 xengnttab_handle *xg;
1954 xen_domain_handle_t handle;
1956 xs_daemon_open();
1958 xc = xc_interface_open(0, 0, 0);
1959 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1960 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1961 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1962 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
1963 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
1965 xfmem = xenforeignmemory_open(0, 0);
1966 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
1968 xe = xenevtchn_open(0, 0);
1969 xenevtchn_fd(xe);
1971 xg = xengnttab_open(0, 0);
1972 xengnttab_map_grant_ref(xg, 0, 0, 0);
1974 return 0;
1977 compile_prog "" "$xen_libs $xen_stable_libs"
1978 then
1979 xen_ctrl_version=471
1980 xen=yes
1981 elif
1982 cat > $TMPC <<EOF &&
1983 #include <xenctrl.h>
1984 #include <stdint.h>
1985 int main(void) {
1986 xc_interface *xc = NULL;
1987 xen_domain_handle_t handle;
1988 xc_domain_create(xc, 0, handle, 0, NULL, NULL);
1989 return 0;
1992 compile_prog "" "$xen_libs"
1993 then
1994 xen_ctrl_version=470
1995 xen=yes
1997 # Xen 4.6
1998 elif
1999 cat > $TMPC <<EOF &&
2000 #include <xenctrl.h>
2001 #include <xenstore.h>
2002 #include <stdint.h>
2003 #include <xen/hvm/hvm_info_table.h>
2004 #if !defined(HVM_MAX_VCPUS)
2005 # error HVM_MAX_VCPUS not defined
2006 #endif
2007 int main(void) {
2008 xc_interface *xc;
2009 xs_daemon_open();
2010 xc = xc_interface_open(0, 0, 0);
2011 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2012 xc_gnttab_open(NULL, 0);
2013 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2014 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2015 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2016 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2017 return 0;
2020 compile_prog "" "$xen_libs"
2021 then
2022 xen_ctrl_version=460
2023 xen=yes
2025 # Xen 4.5
2026 elif
2027 cat > $TMPC <<EOF &&
2028 #include <xenctrl.h>
2029 #include <xenstore.h>
2030 #include <stdint.h>
2031 #include <xen/hvm/hvm_info_table.h>
2032 #if !defined(HVM_MAX_VCPUS)
2033 # error HVM_MAX_VCPUS not defined
2034 #endif
2035 int main(void) {
2036 xc_interface *xc;
2037 xs_daemon_open();
2038 xc = xc_interface_open(0, 0, 0);
2039 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2040 xc_gnttab_open(NULL, 0);
2041 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2042 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2043 xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2044 return 0;
2047 compile_prog "" "$xen_libs"
2048 then
2049 xen_ctrl_version=450
2050 xen=yes
2052 elif
2053 cat > $TMPC <<EOF &&
2054 #include <xenctrl.h>
2055 #include <xenstore.h>
2056 #include <stdint.h>
2057 #include <xen/hvm/hvm_info_table.h>
2058 #if !defined(HVM_MAX_VCPUS)
2059 # error HVM_MAX_VCPUS not defined
2060 #endif
2061 int main(void) {
2062 xc_interface *xc;
2063 xs_daemon_open();
2064 xc = xc_interface_open(0, 0, 0);
2065 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2066 xc_gnttab_open(NULL, 0);
2067 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2068 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2069 return 0;
2072 compile_prog "" "$xen_libs"
2073 then
2074 xen_ctrl_version=420
2075 xen=yes
2077 else
2078 if test "$xen" = "yes" ; then
2079 feature_not_found "xen (unsupported version)" \
2080 "Install a supported xen (xen 4.2 or newer)"
2082 xen=no
2085 if test "$xen" = yes; then
2086 if test $xen_ctrl_version -ge 471 ; then
2087 libs_softmmu="$xen_stable_libs $libs_softmmu"
2089 libs_softmmu="$xen_libs $libs_softmmu"
2093 if test "$xen_pci_passthrough" != "no"; then
2094 if test "$xen" = "yes" && test "$linux" = "yes"; then
2095 xen_pci_passthrough=yes
2096 else
2097 if test "$xen_pci_passthrough" = "yes"; then
2098 error_exit "User requested feature Xen PCI Passthrough" \
2099 " but this feature requires /sys from Linux"
2101 xen_pci_passthrough=no
2105 if test "$xen_pv_domain_build" = "yes" &&
2106 test "$xen" != "yes"; then
2107 error_exit "User requested Xen PV domain builder support" \
2108 "which requires Xen support."
2111 ##########################################
2112 # Sparse probe
2113 if test "$sparse" != "no" ; then
2114 if has cgcc; then
2115 sparse=yes
2116 else
2117 if test "$sparse" = "yes" ; then
2118 feature_not_found "sparse" "Install sparse binary"
2120 sparse=no
2124 ##########################################
2125 # X11 probe
2126 x11_cflags=
2127 x11_libs=-lX11
2128 if $pkg_config --exists "x11"; then
2129 x11_cflags=`$pkg_config --cflags x11`
2130 x11_libs=`$pkg_config --libs x11`
2133 ##########################################
2134 # GTK probe
2136 if test "$gtkabi" = ""; then
2137 # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2138 # Use 3.0 as a fallback if that is available.
2139 if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2140 gtkabi=2.0
2141 elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2142 gtkabi=3.0
2143 else
2144 gtkabi=2.0
2148 if test "$gtk" != "no"; then
2149 gtkpackage="gtk+-$gtkabi"
2150 gtkx11package="gtk+-x11-$gtkabi"
2151 if test "$gtkabi" = "3.0" ; then
2152 gtkversion="3.0.0"
2153 else
2154 gtkversion="2.18.0"
2156 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2157 gtk_cflags=`$pkg_config --cflags $gtkpackage`
2158 gtk_libs=`$pkg_config --libs $gtkpackage`
2159 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2160 gtk_cflags="$gtk_cflags $x11_cflags"
2161 gtk_libs="$gtk_libs $x11_libs"
2163 libs_softmmu="$gtk_libs $libs_softmmu"
2164 gtk="yes"
2165 elif test "$gtk" = "yes"; then
2166 feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2167 else
2168 gtk="no"
2173 ##########################################
2174 # GNUTLS probe
2176 gnutls_works() {
2177 # Unfortunately some distros have bad pkg-config information for gnutls
2178 # such that it claims to exist but you get a compiler error if you try
2179 # to use the options returned by --libs. Specifically, Ubuntu for --static
2180 # builds doesn't work:
2181 # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2183 # So sanity check the cflags/libs before assuming gnutls can be used.
2184 if ! $pkg_config --exists "gnutls"; then
2185 return 1
2188 write_c_skeleton
2189 compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2192 gnutls_gcrypt=no
2193 gnutls_nettle=no
2194 if test "$gnutls" != "no"; then
2195 if gnutls_works; then
2196 gnutls_cflags=`$pkg_config --cflags gnutls`
2197 gnutls_libs=`$pkg_config --libs gnutls`
2198 libs_softmmu="$gnutls_libs $libs_softmmu"
2199 libs_tools="$gnutls_libs $libs_tools"
2200 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2201 gnutls="yes"
2203 # gnutls_hash_init requires >= 2.9.10
2204 if $pkg_config --exists "gnutls >= 2.9.10"; then
2205 gnutls_hash="yes"
2206 else
2207 gnutls_hash="no"
2210 # gnutls_rnd requires >= 2.11.0
2211 if $pkg_config --exists "gnutls >= 2.11.0"; then
2212 gnutls_rnd="yes"
2213 else
2214 gnutls_rnd="no"
2217 if $pkg_config --exists 'gnutls >= 3.0'; then
2218 gnutls_gcrypt=no
2219 gnutls_nettle=yes
2220 elif $pkg_config --exists 'gnutls >= 2.12'; then
2221 case `$pkg_config --libs --static gnutls` in
2222 *gcrypt*)
2223 gnutls_gcrypt=yes
2224 gnutls_nettle=no
2226 *nettle*)
2227 gnutls_gcrypt=no
2228 gnutls_nettle=yes
2231 gnutls_gcrypt=yes
2232 gnutls_nettle=no
2234 esac
2235 else
2236 gnutls_gcrypt=yes
2237 gnutls_nettle=no
2239 elif test "$gnutls" = "yes"; then
2240 feature_not_found "gnutls" "Install gnutls devel"
2241 else
2242 gnutls="no"
2243 gnutls_hash="no"
2244 gnutls_rnd="no"
2246 else
2247 gnutls_hash="no"
2248 gnutls_rnd="no"
2252 # If user didn't give a --disable/enable-gcrypt flag,
2253 # then mark as disabled if user requested nettle
2254 # explicitly, or if gnutls links to nettle
2255 if test -z "$gcrypt"
2256 then
2257 if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2258 then
2259 gcrypt="no"
2263 # If user didn't give a --disable/enable-nettle flag,
2264 # then mark as disabled if user requested gcrypt
2265 # explicitly, or if gnutls links to gcrypt
2266 if test -z "$nettle"
2267 then
2268 if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2269 then
2270 nettle="no"
2274 has_libgcrypt_config() {
2275 if ! has "libgcrypt-config"
2276 then
2277 return 1
2280 if test -n "$cross_prefix"
2281 then
2282 host=`libgcrypt-config --host`
2283 if test "$host-" != $cross_prefix
2284 then
2285 return 1
2289 return 0
2292 if test "$gcrypt" != "no"; then
2293 if has_libgcrypt_config; then
2294 gcrypt_cflags=`libgcrypt-config --cflags`
2295 gcrypt_libs=`libgcrypt-config --libs`
2296 # Debian has remove -lgpg-error from libgcrypt-config
2297 # as it "spreads unnecessary dependencies" which in
2298 # turn breaks static builds...
2299 if test "$static" = "yes"
2300 then
2301 gcrypt_libs="$gcrypt_libs -lgpg-error"
2303 libs_softmmu="$gcrypt_libs $libs_softmmu"
2304 libs_tools="$gcrypt_libs $libs_tools"
2305 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2306 gcrypt="yes"
2307 if test -z "$nettle"; then
2308 nettle="no"
2311 cat > $TMPC << EOF
2312 #include <gcrypt.h>
2313 int main(void) {
2314 gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2315 GCRY_MD_SHA256,
2316 NULL, 0, 0, 0, NULL);
2317 return 0;
2320 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2321 gcrypt_kdf=yes
2323 else
2324 if test "$gcrypt" = "yes"; then
2325 feature_not_found "gcrypt" "Install gcrypt devel"
2326 else
2327 gcrypt="no"
2333 if test "$nettle" != "no"; then
2334 if $pkg_config --exists "nettle"; then
2335 nettle_cflags=`$pkg_config --cflags nettle`
2336 nettle_libs=`$pkg_config --libs nettle`
2337 nettle_version=`$pkg_config --modversion nettle`
2338 libs_softmmu="$nettle_libs $libs_softmmu"
2339 libs_tools="$nettle_libs $libs_tools"
2340 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2341 nettle="yes"
2343 cat > $TMPC << EOF
2344 #include <nettle/pbkdf2.h>
2345 int main(void) {
2346 pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2347 return 0;
2350 if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2351 nettle_kdf=yes
2353 else
2354 if test "$nettle" = "yes"; then
2355 feature_not_found "nettle" "Install nettle devel"
2356 else
2357 nettle="no"
2362 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2363 then
2364 error_exit "Only one of gcrypt & nettle can be enabled"
2367 ##########################################
2368 # libtasn1 - only for the TLS creds/session test suite
2370 tasn1=yes
2371 tasn1_cflags=""
2372 tasn1_libs=""
2373 if $pkg_config --exists "libtasn1"; then
2374 tasn1_cflags=`$pkg_config --cflags libtasn1`
2375 tasn1_libs=`$pkg_config --libs libtasn1`
2376 else
2377 tasn1=no
2381 ##########################################
2382 # getifaddrs (for tests/test-io-channel-socket )
2384 have_ifaddrs_h=yes
2385 if ! check_include "ifaddrs.h" ; then
2386 have_ifaddrs_h=no
2389 ##########################################
2390 # VTE probe
2392 if test "$vte" != "no"; then
2393 if test "$gtkabi" = "3.0"; then
2394 vtepackage="vte-2.90"
2395 vteversion="0.32.0"
2396 else
2397 vtepackage="vte"
2398 vteversion="0.24.0"
2400 if $pkg_config --exists "$vtepackage >= $vteversion"; then
2401 vte_cflags=`$pkg_config --cflags $vtepackage`
2402 vte_libs=`$pkg_config --libs $vtepackage`
2403 libs_softmmu="$vte_libs $libs_softmmu"
2404 vte="yes"
2405 elif test "$vte" = "yes"; then
2406 if test "$gtkabi" = "3.0"; then
2407 feature_not_found "vte" "Install libvte-2.90 devel"
2408 else
2409 feature_not_found "vte" "Install libvte devel"
2411 else
2412 vte="no"
2416 ##########################################
2417 # SDL probe
2419 # Look for sdl configuration program (pkg-config or sdl-config). Try
2420 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2422 if test $sdlabi = "2.0"; then
2423 sdl_config=$sdl2_config
2424 sdlname=sdl2
2425 sdlconfigname=sdl2_config
2426 else
2427 sdlname=sdl
2428 sdlconfigname=sdl_config
2431 if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2432 sdl_config=$sdlconfigname
2435 if $pkg_config $sdlname --exists; then
2436 sdlconfig="$pkg_config $sdlname"
2437 _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
2438 elif has ${sdl_config}; then
2439 sdlconfig="$sdl_config"
2440 _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2441 else
2442 if test "$sdl" = "yes" ; then
2443 feature_not_found "sdl" "Install SDL devel"
2445 sdl=no
2447 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2448 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2451 sdl_too_old=no
2452 if test "$sdl" != "no" ; then
2453 cat > $TMPC << EOF
2454 #include <SDL.h>
2455 #undef main /* We don't want SDL to override our main() */
2456 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2458 sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2459 if test "$static" = "yes" ; then
2460 sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2461 else
2462 sdl_libs=`$sdlconfig --libs 2> /dev/null`
2464 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2465 if test "$_sdlversion" -lt 121 ; then
2466 sdl_too_old=yes
2467 else
2468 sdl=yes
2471 # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2472 if test "$sdl" = "yes" -a "$static" = "yes" ; then
2473 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2474 sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2475 sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
2477 if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2479 else
2480 sdl=no
2482 fi # static link
2483 else # sdl not found
2484 if test "$sdl" = "yes" ; then
2485 feature_not_found "sdl" "Install SDL devel"
2487 sdl=no
2488 fi # sdl compile test
2491 if test "$sdl" = "yes" ; then
2492 cat > $TMPC <<EOF
2493 #include <SDL.h>
2494 #if defined(SDL_VIDEO_DRIVER_X11)
2495 #include <X11/XKBlib.h>
2496 #else
2497 #error No x11 support
2498 #endif
2499 int main(void) { return 0; }
2501 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2502 sdl_cflags="$sdl_cflags $x11_cflags"
2503 sdl_libs="$sdl_libs $x11_libs"
2505 libs_softmmu="$sdl_libs $libs_softmmu"
2508 ##########################################
2509 # RDMA needs OpenFabrics libraries
2510 if test "$rdma" != "no" ; then
2511 cat > $TMPC <<EOF
2512 #include <rdma/rdma_cma.h>
2513 int main(void) { return 0; }
2515 rdma_libs="-lrdmacm -libverbs"
2516 if compile_prog "" "$rdma_libs" ; then
2517 rdma="yes"
2518 libs_softmmu="$libs_softmmu $rdma_libs"
2519 else
2520 if test "$rdma" = "yes" ; then
2521 error_exit \
2522 " OpenFabrics librdmacm/libibverbs not present." \
2523 " Your options:" \
2524 " (1) Fast: Install infiniband packages from your distro." \
2525 " (2) Cleanest: Install libraries from www.openfabrics.org" \
2526 " (3) Also: Install softiwarp if you don't have RDMA hardware"
2528 rdma="no"
2533 ##########################################
2534 # VNC SASL detection
2535 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2536 cat > $TMPC <<EOF
2537 #include <sasl/sasl.h>
2538 #include <stdio.h>
2539 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2541 # Assuming Cyrus-SASL installed in /usr prefix
2542 vnc_sasl_cflags=""
2543 vnc_sasl_libs="-lsasl2"
2544 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2545 vnc_sasl=yes
2546 libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2547 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2548 else
2549 if test "$vnc_sasl" = "yes" ; then
2550 feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2552 vnc_sasl=no
2556 ##########################################
2557 # VNC JPEG detection
2558 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2559 cat > $TMPC <<EOF
2560 #include <stdio.h>
2561 #include <jpeglib.h>
2562 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2564 vnc_jpeg_cflags=""
2565 vnc_jpeg_libs="-ljpeg"
2566 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2567 vnc_jpeg=yes
2568 libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2569 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2570 else
2571 if test "$vnc_jpeg" = "yes" ; then
2572 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2574 vnc_jpeg=no
2578 ##########################################
2579 # VNC PNG detection
2580 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2581 cat > $TMPC <<EOF
2582 //#include <stdio.h>
2583 #include <png.h>
2584 #include <stddef.h>
2585 int main(void) {
2586 png_structp png_ptr;
2587 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2588 return png_ptr != 0;
2591 if $pkg_config libpng --exists; then
2592 vnc_png_cflags=`$pkg_config libpng --cflags`
2593 vnc_png_libs=`$pkg_config libpng --libs`
2594 else
2595 vnc_png_cflags=""
2596 vnc_png_libs="-lpng"
2598 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2599 vnc_png=yes
2600 libs_softmmu="$vnc_png_libs $libs_softmmu"
2601 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2602 else
2603 if test "$vnc_png" = "yes" ; then
2604 feature_not_found "vnc-png" "Install libpng devel"
2606 vnc_png=no
2610 ##########################################
2611 # fnmatch() probe, used for ACL routines
2612 fnmatch="no"
2613 cat > $TMPC << EOF
2614 #include <fnmatch.h>
2615 int main(void)
2617 fnmatch("foo", "foo", 0);
2618 return 0;
2621 if compile_prog "" "" ; then
2622 fnmatch="yes"
2625 ##########################################
2626 # uuid_generate() probe, used for vdi block driver
2627 # Note that on some systems (notably MacOSX) no extra library
2628 # need be linked to get the uuid functions.
2629 if test "$uuid" != "no" ; then
2630 uuid_libs="-luuid"
2631 cat > $TMPC << EOF
2632 #include <uuid/uuid.h>
2633 int main(void)
2635 uuid_t my_uuid;
2636 uuid_generate(my_uuid);
2637 return 0;
2640 if compile_prog "" "" ; then
2641 uuid="yes"
2642 elif compile_prog "" "$uuid_libs" ; then
2643 uuid="yes"
2644 libs_softmmu="$uuid_libs $libs_softmmu"
2645 libs_tools="$uuid_libs $libs_tools"
2646 else
2647 if test "$uuid" = "yes" ; then
2648 feature_not_found "uuid" "Install libuuid devel"
2650 uuid=no
2654 if test "$vhdx" = "yes" ; then
2655 if test "$uuid" = "no" ; then
2656 error_exit "uuid required for VHDX support"
2658 elif test "$vhdx" != "no" ; then
2659 if test "$uuid" = "yes" ; then
2660 vhdx=yes
2661 else
2662 vhdx=no
2666 ##########################################
2667 # xfsctl() probe, used for raw-posix
2668 if test "$xfs" != "no" ; then
2669 cat > $TMPC << EOF
2670 #include <stddef.h> /* NULL */
2671 #include <xfs/xfs.h>
2672 int main(void)
2674 xfsctl(NULL, 0, 0, NULL);
2675 return 0;
2678 if compile_prog "" "" ; then
2679 xfs="yes"
2680 else
2681 if test "$xfs" = "yes" ; then
2682 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2684 xfs=no
2688 ##########################################
2689 # vde libraries probe
2690 if test "$vde" != "no" ; then
2691 vde_libs="-lvdeplug"
2692 cat > $TMPC << EOF
2693 #include <libvdeplug.h>
2694 int main(void)
2696 struct vde_open_args a = {0, 0, 0};
2697 char s[] = "";
2698 vde_open(s, s, &a);
2699 return 0;
2702 if compile_prog "" "$vde_libs" ; then
2703 vde=yes
2704 libs_softmmu="$vde_libs $libs_softmmu"
2705 libs_tools="$vde_libs $libs_tools"
2706 else
2707 if test "$vde" = "yes" ; then
2708 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2710 vde=no
2714 ##########################################
2715 # netmap support probe
2716 # Apart from looking for netmap headers, we make sure that the host API version
2717 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2718 # a minor/major version number. Minor new features will be marked with values up
2719 # to 15, and if something happens that requires a change to the backend we will
2720 # move above 15, submit the backend fixes and modify this two bounds.
2721 if test "$netmap" != "no" ; then
2722 cat > $TMPC << EOF
2723 #include <inttypes.h>
2724 #include <net/if.h>
2725 #include <net/netmap.h>
2726 #include <net/netmap_user.h>
2727 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2728 #error
2729 #endif
2730 int main(void) { return 0; }
2732 if compile_prog "" "" ; then
2733 netmap=yes
2734 else
2735 if test "$netmap" = "yes" ; then
2736 feature_not_found "netmap"
2738 netmap=no
2742 ##########################################
2743 # libcap-ng library probe
2744 if test "$cap_ng" != "no" ; then
2745 cap_libs="-lcap-ng"
2746 cat > $TMPC << EOF
2747 #include <cap-ng.h>
2748 int main(void)
2750 capng_capability_to_name(CAPNG_EFFECTIVE);
2751 return 0;
2754 if compile_prog "" "$cap_libs" ; then
2755 cap_ng=yes
2756 libs_tools="$cap_libs $libs_tools"
2757 else
2758 if test "$cap_ng" = "yes" ; then
2759 feature_not_found "cap_ng" "Install libcap-ng devel"
2761 cap_ng=no
2765 ##########################################
2766 # Sound support libraries probe
2768 audio_drv_probe()
2770 drv=$1
2771 hdr=$2
2772 lib=$3
2773 exp=$4
2774 cfl=$5
2775 cat > $TMPC << EOF
2776 #include <$hdr>
2777 int main(void) { $exp }
2779 if compile_prog "$cfl" "$lib" ; then
2781 else
2782 error_exit "$drv check failed" \
2783 "Make sure to have the $drv libs and headers installed."
2787 audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2788 for drv in $audio_drv_list; do
2789 case $drv in
2790 alsa)
2791 audio_drv_probe $drv alsa/asoundlib.h -lasound \
2792 "return snd_pcm_close((snd_pcm_t *)0);"
2793 libs_softmmu="-lasound $libs_softmmu"
2797 audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2798 "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2799 libs_softmmu="-lpulse $libs_softmmu"
2800 audio_pt_int="yes"
2803 coreaudio)
2804 libs_softmmu="-framework CoreAudio $libs_softmmu"
2807 dsound)
2808 libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2809 audio_win_int="yes"
2812 oss)
2813 libs_softmmu="$oss_lib $libs_softmmu"
2816 sdl|wav)
2817 # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2821 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2822 error_exit "Unknown driver '$drv' selected" \
2823 "Possible drivers are: $audio_possible_drivers"
2826 esac
2827 done
2829 ##########################################
2830 # BrlAPI probe
2832 if test "$brlapi" != "no" ; then
2833 brlapi_libs="-lbrlapi"
2834 cat > $TMPC << EOF
2835 #include <brlapi.h>
2836 #include <stddef.h>
2837 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2839 if compile_prog "" "$brlapi_libs" ; then
2840 brlapi=yes
2841 libs_softmmu="$brlapi_libs $libs_softmmu"
2842 else
2843 if test "$brlapi" = "yes" ; then
2844 feature_not_found "brlapi" "Install brlapi devel"
2846 brlapi=no
2850 ##########################################
2851 # curses probe
2852 if test "$curses" != "no" ; then
2853 if test "$mingw32" = "yes" ; then
2854 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
2855 else
2856 curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2858 curses_found=no
2859 cat > $TMPC << EOF
2860 #include <curses.h>
2861 int main(void) {
2862 const char *s = curses_version();
2863 resize_term(0, 0);
2864 return s != 0;
2867 IFS=:
2868 for curses_lib in $curses_list; do
2869 unset IFS
2870 if compile_prog "" "$curses_lib" ; then
2871 curses_found=yes
2872 libs_softmmu="$curses_lib $libs_softmmu"
2873 break
2875 done
2876 unset IFS
2877 if test "$curses_found" = "yes" ; then
2878 curses=yes
2879 else
2880 if test "$curses" = "yes" ; then
2881 feature_not_found "curses" "Install ncurses devel"
2883 curses=no
2887 ##########################################
2888 # curl probe
2889 if test "$curl" != "no" ; then
2890 if $pkg_config libcurl --exists; then
2891 curlconfig="$pkg_config libcurl"
2892 else
2893 curlconfig=curl-config
2895 cat > $TMPC << EOF
2896 #include <curl/curl.h>
2897 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2899 curl_cflags=`$curlconfig --cflags 2>/dev/null`
2900 curl_libs=`$curlconfig --libs 2>/dev/null`
2901 if compile_prog "$curl_cflags" "$curl_libs" ; then
2902 curl=yes
2903 else
2904 if test "$curl" = "yes" ; then
2905 feature_not_found "curl" "Install libcurl devel"
2907 curl=no
2909 fi # test "$curl"
2911 ##########################################
2912 # bluez support probe
2913 if test "$bluez" != "no" ; then
2914 cat > $TMPC << EOF
2915 #include <bluetooth/bluetooth.h>
2916 int main(void) { return bt_error(0); }
2918 bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2919 bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2920 if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2921 bluez=yes
2922 libs_softmmu="$bluez_libs $libs_softmmu"
2923 else
2924 if test "$bluez" = "yes" ; then
2925 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2927 bluez="no"
2931 ##########################################
2932 # glib support probe
2934 glib_req_ver=2.22
2935 glib_modules=gthread-2.0
2936 if test "$modules" = yes; then
2937 glib_modules="$glib_modules gmodule-2.0"
2940 for i in $glib_modules; do
2941 if $pkg_config --atleast-version=$glib_req_ver $i; then
2942 glib_cflags=`$pkg_config --cflags $i`
2943 glib_libs=`$pkg_config --libs $i`
2944 CFLAGS="$glib_cflags $CFLAGS"
2945 LIBS="$glib_libs $LIBS"
2946 libs_qga="$glib_libs $libs_qga"
2947 else
2948 error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2950 done
2952 # Sanity check that the current size_t matches the
2953 # size that glib thinks it should be. This catches
2954 # problems on multi-arch where people try to build
2955 # 32-bit QEMU while pointing at 64-bit glib headers
2956 cat > $TMPC <<EOF
2957 #include <glib.h>
2958 #include <unistd.h>
2960 #define QEMU_BUILD_BUG_ON(x) \
2961 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
2963 int main(void) {
2964 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
2965 return 0;
2969 if ! compile_prog "-Werror $CFLAGS" "$LIBS" ; then
2970 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
2971 "You probably need to set PKG_CONFIG_LIBDIR"\
2972 "to point to the right pkg-config files for your"\
2973 "build target"
2976 # g_test_trap_subprocess added in 2.38. Used by some tests.
2977 glib_subprocess=yes
2978 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2979 glib_subprocess=no
2982 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2983 cat > $TMPC << EOF
2984 #include <glib.h>
2985 int main(void) { return 0; }
2987 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2988 if cc_has_warning_flag "-Wno-unknown-attributes"; then
2989 glib_cflags="-Wno-unknown-attributes $glib_cflags"
2990 CFLAGS="-Wno-unknown-attributes $CFLAGS"
2994 ##########################################
2995 # SHA command probe for modules
2996 if test "$modules" = yes; then
2997 shacmd_probe="sha1sum sha1 shasum"
2998 for c in $shacmd_probe; do
2999 if has $c; then
3000 shacmd="$c"
3001 break
3003 done
3004 if test "$shacmd" = ""; then
3005 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3009 ##########################################
3010 # pixman support probe
3012 if test "$pixman" = ""; then
3013 if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3014 pixman="none"
3015 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3016 pixman="system"
3017 else
3018 pixman="internal"
3021 if test "$pixman" = "none"; then
3022 if test "$want_tools" != "no" -o "$softmmu" != "no"; then
3023 error_exit "pixman disabled but system emulation or tools build" \
3024 "enabled. You can turn off pixman only if you also" \
3025 "disable all system emulation targets and the tools" \
3026 "build with '--disable-tools --disable-system'."
3028 pixman_cflags=
3029 pixman_libs=
3030 elif test "$pixman" = "system"; then
3031 # pixman version has been checked above
3032 pixman_cflags=`$pkg_config --cflags pixman-1`
3033 pixman_libs=`$pkg_config --libs pixman-1`
3034 else
3035 if test ! -d ${source_path}/pixman/pixman; then
3036 error_exit "pixman >= 0.21.8 not present. Your options:" \
3037 " (1) Preferred: Install the pixman devel package (any recent" \
3038 " distro should have packages as Xorg needs pixman too)." \
3039 " (2) Fetch the pixman submodule, using:" \
3040 " git submodule update --init pixman"
3042 mkdir -p pixman/pixman
3043 pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3044 pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
3047 ##########################################
3048 # libcap probe
3050 if test "$cap" != "no" ; then
3051 cat > $TMPC <<EOF
3052 #include <stdio.h>
3053 #include <sys/capability.h>
3054 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3056 if compile_prog "" "-lcap" ; then
3057 cap=yes
3058 else
3059 cap=no
3063 ##########################################
3064 # pthread probe
3065 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3067 pthread=no
3068 cat > $TMPC << EOF
3069 #include <pthread.h>
3070 static void *f(void *p) { return NULL; }
3071 int main(void) {
3072 pthread_t thread;
3073 pthread_create(&thread, 0, f, 0);
3074 return 0;
3077 if compile_prog "" "" ; then
3078 pthread=yes
3079 else
3080 for pthread_lib in $PTHREADLIBS_LIST; do
3081 if compile_prog "" "$pthread_lib" ; then
3082 pthread=yes
3083 found=no
3084 for lib_entry in $LIBS; do
3085 if test "$lib_entry" = "$pthread_lib"; then
3086 found=yes
3087 break
3089 done
3090 if test "$found" = "no"; then
3091 LIBS="$pthread_lib $LIBS"
3093 break
3095 done
3098 if test "$mingw32" != yes -a "$pthread" = no; then
3099 error_exit "pthread check failed" \
3100 "Make sure to have the pthread libs and headers installed."
3103 # check for pthread_setname_np
3104 pthread_setname_np=no
3105 cat > $TMPC << EOF
3106 #include <pthread.h>
3108 static void *f(void *p) { return NULL; }
3109 int main(void)
3111 pthread_t thread;
3112 pthread_create(&thread, 0, f, 0);
3113 pthread_setname_np(thread, "QEMU");
3114 return 0;
3117 if compile_prog "" "$pthread_lib" ; then
3118 pthread_setname_np=yes
3121 ##########################################
3122 # rbd probe
3123 if test "$rbd" != "no" ; then
3124 cat > $TMPC <<EOF
3125 #include <stdio.h>
3126 #include <rbd/librbd.h>
3127 int main(void) {
3128 rados_t cluster;
3129 rados_create(&cluster, NULL);
3130 return 0;
3133 rbd_libs="-lrbd -lrados"
3134 if compile_prog "" "$rbd_libs" ; then
3135 rbd=yes
3136 else
3137 if test "$rbd" = "yes" ; then
3138 feature_not_found "rados block device" "Install librbd/ceph devel"
3140 rbd=no
3144 ##########################################
3145 # libssh2 probe
3146 min_libssh2_version=1.2.8
3147 if test "$libssh2" != "no" ; then
3148 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3149 libssh2_cflags=`$pkg_config libssh2 --cflags`
3150 libssh2_libs=`$pkg_config libssh2 --libs`
3151 libssh2=yes
3152 else
3153 if test "$libssh2" = "yes" ; then
3154 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3156 libssh2=no
3160 ##########################################
3161 # libssh2_sftp_fsync probe
3163 if test "$libssh2" = "yes"; then
3164 cat > $TMPC <<EOF
3165 #include <stdio.h>
3166 #include <libssh2.h>
3167 #include <libssh2_sftp.h>
3168 int main(void) {
3169 LIBSSH2_SESSION *session;
3170 LIBSSH2_SFTP *sftp;
3171 LIBSSH2_SFTP_HANDLE *sftp_handle;
3172 session = libssh2_session_init ();
3173 sftp = libssh2_sftp_init (session);
3174 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3175 libssh2_sftp_fsync (sftp_handle);
3176 return 0;
3179 # libssh2_cflags/libssh2_libs defined in previous test.
3180 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3181 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3185 ##########################################
3186 # linux-aio probe
3188 if test "$linux_aio" != "no" ; then
3189 cat > $TMPC <<EOF
3190 #include <libaio.h>
3191 #include <sys/eventfd.h>
3192 #include <stddef.h>
3193 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3195 if compile_prog "" "-laio" ; then
3196 linux_aio=yes
3197 else
3198 if test "$linux_aio" = "yes" ; then
3199 feature_not_found "linux AIO" "Install libaio devel"
3201 linux_aio=no
3205 ##########################################
3206 # TPM passthrough is only on x86 Linux
3208 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3209 tpm_passthrough=$tpm
3210 else
3211 tpm_passthrough=no
3214 ##########################################
3215 # attr probe
3217 if test "$attr" != "no" ; then
3218 cat > $TMPC <<EOF
3219 #include <stdio.h>
3220 #include <sys/types.h>
3221 #ifdef CONFIG_LIBATTR
3222 #include <attr/xattr.h>
3223 #else
3224 #include <sys/xattr.h>
3225 #endif
3226 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3228 if compile_prog "" "" ; then
3229 attr=yes
3230 # Older distros have <attr/xattr.h>, and need -lattr:
3231 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3232 attr=yes
3233 LIBS="-lattr $LIBS"
3234 libattr=yes
3235 else
3236 if test "$attr" = "yes" ; then
3237 feature_not_found "ATTR" "Install libc6 or libattr devel"
3239 attr=no
3243 ##########################################
3244 # iovec probe
3245 cat > $TMPC <<EOF
3246 #include <sys/types.h>
3247 #include <sys/uio.h>
3248 #include <unistd.h>
3249 int main(void) { return sizeof(struct iovec); }
3251 iovec=no
3252 if compile_prog "" "" ; then
3253 iovec=yes
3256 ##########################################
3257 # preadv probe
3258 cat > $TMPC <<EOF
3259 #include <sys/types.h>
3260 #include <sys/uio.h>
3261 #include <unistd.h>
3262 int main(void) { return preadv(0, 0, 0, 0); }
3264 preadv=no
3265 if compile_prog "" "" ; then
3266 preadv=yes
3269 ##########################################
3270 # fdt probe
3271 # fdt support is mandatory for at least some target architectures,
3272 # so insist on it if we're building those system emulators.
3273 fdt_required=no
3274 for target in $target_list; do
3275 case $target in
3276 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3277 fdt_required=yes
3279 esac
3280 done
3282 if test "$fdt_required" = "yes"; then
3283 if test "$fdt" = "no"; then
3284 error_exit "fdt disabled but some requested targets require it." \
3285 "You can turn off fdt only if you also disable all the system emulation" \
3286 "targets which need it (by specifying a cut down --target-list)."
3288 fdt=yes
3291 if test "$fdt" != "no" ; then
3292 fdt_libs="-lfdt"
3293 # explicitly check for libfdt_env.h as it is missing in some stable installs
3294 # and test for required functions to make sure we are on a version >= 1.4.0
3295 cat > $TMPC << EOF
3296 #include <libfdt.h>
3297 #include <libfdt_env.h>
3298 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3300 if compile_prog "" "$fdt_libs" ; then
3301 # system DTC is good - use it
3302 fdt=yes
3303 elif test -d ${source_path}/dtc/libfdt ; then
3304 # have submodule DTC - use it
3305 fdt=yes
3306 dtc_internal="yes"
3307 mkdir -p dtc
3308 if [ "$pwd_is_source_path" != "y" ] ; then
3309 symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3310 symlink "$source_path/dtc/scripts" "dtc/scripts"
3312 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3313 fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3314 elif test "$fdt" = "yes" ; then
3315 # have neither and want - prompt for system/submodule install
3316 error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3317 " (1) Preferred: Install the DTC (libfdt) devel package" \
3318 " (2) Fetch the DTC submodule, using:" \
3319 " git submodule update --init dtc"
3320 else
3321 # don't have and don't want
3322 fdt_libs=
3323 fdt=no
3327 libs_softmmu="$libs_softmmu $fdt_libs"
3329 ##########################################
3330 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3332 if test "$opengl" != "no" ; then
3333 opengl_pkgs="epoxy libdrm gbm"
3334 if $pkg_config $opengl_pkgs x11; then
3335 opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3336 opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3337 opengl=yes
3338 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3339 gtk_gl="yes"
3341 else
3342 if test "$opengl" = "yes" ; then
3343 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3345 opengl_cflags=""
3346 opengl_libs=""
3347 opengl=no
3351 if test "$opengl" = "yes"; then
3352 cat > $TMPC << EOF
3353 #include <epoxy/egl.h>
3354 #ifndef EGL_MESA_image_dma_buf_export
3355 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3356 #endif
3357 int main(void) { return 0; }
3359 if compile_prog "" "" ; then
3360 opengl_dmabuf=yes
3364 ##########################################
3365 # archipelago probe
3366 if test "$archipelago" != "no" ; then
3367 cat > $TMPC <<EOF
3368 #include <stdio.h>
3369 #include <xseg/xseg.h>
3370 #include <xseg/protocol.h>
3371 int main(void) {
3372 xseg_initialize();
3373 return 0;
3376 archipelago_libs=-lxseg
3377 if compile_prog "" "$archipelago_libs"; then
3378 archipelago="yes"
3379 libs_tools="$archipelago_libs $libs_tools"
3380 libs_softmmu="$archipelago_libs $libs_softmmu"
3382 echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3383 echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3384 echo "license and therefore prevent redistribution."
3385 echo
3386 echo "To disable Archipelago, use --disable-archipelago"
3387 else
3388 if test "$archipelago" = "yes" ; then
3389 feature_not_found "Archipelago backend support" "Install libxseg devel"
3391 archipelago="no"
3396 ##########################################
3397 # glusterfs probe
3398 if test "$glusterfs" != "no" ; then
3399 if $pkg_config --atleast-version=3 glusterfs-api; then
3400 glusterfs="yes"
3401 glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3402 glusterfs_libs=`$pkg_config --libs glusterfs-api`
3403 if $pkg_config --atleast-version=5 glusterfs-api; then
3404 glusterfs_discard="yes"
3406 if $pkg_config --atleast-version=6 glusterfs-api; then
3407 glusterfs_zerofill="yes"
3409 else
3410 if test "$glusterfs" = "yes" ; then
3411 feature_not_found "GlusterFS backend support" \
3412 "Install glusterfs-api devel >= 3"
3414 glusterfs="no"
3418 # Check for inotify functions when we are building linux-user
3419 # emulator. This is done because older glibc versions don't
3420 # have syscall stubs for these implemented. In that case we
3421 # don't provide them even if kernel supports them.
3423 inotify=no
3424 cat > $TMPC << EOF
3425 #include <sys/inotify.h>
3428 main(void)
3430 /* try to start inotify */
3431 return inotify_init();
3434 if compile_prog "" "" ; then
3435 inotify=yes
3438 inotify1=no
3439 cat > $TMPC << EOF
3440 #include <sys/inotify.h>
3443 main(void)
3445 /* try to start inotify */
3446 return inotify_init1(0);
3449 if compile_prog "" "" ; then
3450 inotify1=yes
3453 # check if utimensat and futimens are supported
3454 utimens=no
3455 cat > $TMPC << EOF
3456 #define _ATFILE_SOURCE
3457 #include <stddef.h>
3458 #include <fcntl.h>
3459 #include <sys/stat.h>
3461 int main(void)
3463 utimensat(AT_FDCWD, "foo", NULL, 0);
3464 futimens(0, NULL);
3465 return 0;
3468 if compile_prog "" "" ; then
3469 utimens=yes
3472 # check if pipe2 is there
3473 pipe2=no
3474 cat > $TMPC << EOF
3475 #include <unistd.h>
3476 #include <fcntl.h>
3478 int main(void)
3480 int pipefd[2];
3481 return pipe2(pipefd, O_CLOEXEC);
3484 if compile_prog "" "" ; then
3485 pipe2=yes
3488 # check if accept4 is there
3489 accept4=no
3490 cat > $TMPC << EOF
3491 #include <sys/socket.h>
3492 #include <stddef.h>
3494 int main(void)
3496 accept4(0, NULL, NULL, SOCK_CLOEXEC);
3497 return 0;
3500 if compile_prog "" "" ; then
3501 accept4=yes
3504 # check if tee/splice is there. vmsplice was added same time.
3505 splice=no
3506 cat > $TMPC << EOF
3507 #include <unistd.h>
3508 #include <fcntl.h>
3509 #include <limits.h>
3511 int main(void)
3513 int len, fd = 0;
3514 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3515 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3516 return 0;
3519 if compile_prog "" "" ; then
3520 splice=yes
3523 ##########################################
3524 # libnuma probe
3526 if test "$numa" != "no" ; then
3527 cat > $TMPC << EOF
3528 #include <numa.h>
3529 int main(void) { return numa_available(); }
3532 if compile_prog "" "-lnuma" ; then
3533 numa=yes
3534 libs_softmmu="-lnuma $libs_softmmu"
3535 else
3536 if test "$numa" = "yes" ; then
3537 feature_not_found "numa" "install numactl devel"
3539 numa=no
3543 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3544 echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3545 exit 1
3548 ##########################################
3549 # tcmalloc probe
3551 if test "$tcmalloc" = "yes" ; then
3552 cat > $TMPC << EOF
3553 #include <stdlib.h>
3554 int main(void) { malloc(1); return 0; }
3557 if compile_prog "" "-ltcmalloc" ; then
3558 LIBS="-ltcmalloc $LIBS"
3559 else
3560 feature_not_found "tcmalloc" "install gperftools devel"
3564 ##########################################
3565 # jemalloc probe
3567 if test "$jemalloc" = "yes" ; then
3568 cat > $TMPC << EOF
3569 #include <stdlib.h>
3570 int main(void) { malloc(1); return 0; }
3573 if compile_prog "" "-ljemalloc" ; then
3574 LIBS="-ljemalloc $LIBS"
3575 else
3576 feature_not_found "jemalloc" "install jemalloc devel"
3580 ##########################################
3581 # signalfd probe
3582 signalfd="no"
3583 cat > $TMPC << EOF
3584 #include <unistd.h>
3585 #include <sys/syscall.h>
3586 #include <signal.h>
3587 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3590 if compile_prog "" "" ; then
3591 signalfd=yes
3594 # check if eventfd is supported
3595 eventfd=no
3596 cat > $TMPC << EOF
3597 #include <sys/eventfd.h>
3599 int main(void)
3601 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3604 if compile_prog "" "" ; then
3605 eventfd=yes
3608 # check if memfd is supported
3609 memfd=no
3610 cat > $TMPC << EOF
3611 #include <sys/memfd.h>
3613 int main(void)
3615 return memfd_create("foo", MFD_ALLOW_SEALING);
3618 if compile_prog "" "" ; then
3619 memfd=yes
3624 # check for fallocate
3625 fallocate=no
3626 cat > $TMPC << EOF
3627 #include <fcntl.h>
3629 int main(void)
3631 fallocate(0, 0, 0, 0);
3632 return 0;
3635 if compile_prog "" "" ; then
3636 fallocate=yes
3639 # check for fallocate hole punching
3640 fallocate_punch_hole=no
3641 cat > $TMPC << EOF
3642 #include <fcntl.h>
3643 #include <linux/falloc.h>
3645 int main(void)
3647 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3648 return 0;
3651 if compile_prog "" "" ; then
3652 fallocate_punch_hole=yes
3655 # check that fallocate supports range zeroing inside the file
3656 fallocate_zero_range=no
3657 cat > $TMPC << EOF
3658 #include <fcntl.h>
3659 #include <linux/falloc.h>
3661 int main(void)
3663 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3664 return 0;
3667 if compile_prog "" "" ; then
3668 fallocate_zero_range=yes
3671 # check for posix_fallocate
3672 posix_fallocate=no
3673 cat > $TMPC << EOF
3674 #include <fcntl.h>
3676 int main(void)
3678 posix_fallocate(0, 0, 0);
3679 return 0;
3682 if compile_prog "" "" ; then
3683 posix_fallocate=yes
3686 # check for sync_file_range
3687 sync_file_range=no
3688 cat > $TMPC << EOF
3689 #include <fcntl.h>
3691 int main(void)
3693 sync_file_range(0, 0, 0, 0);
3694 return 0;
3697 if compile_prog "" "" ; then
3698 sync_file_range=yes
3701 # check for linux/fiemap.h and FS_IOC_FIEMAP
3702 fiemap=no
3703 cat > $TMPC << EOF
3704 #include <sys/ioctl.h>
3705 #include <linux/fs.h>
3706 #include <linux/fiemap.h>
3708 int main(void)
3710 ioctl(0, FS_IOC_FIEMAP, 0);
3711 return 0;
3714 if compile_prog "" "" ; then
3715 fiemap=yes
3718 # check for dup3
3719 dup3=no
3720 cat > $TMPC << EOF
3721 #include <unistd.h>
3723 int main(void)
3725 dup3(0, 0, 0);
3726 return 0;
3729 if compile_prog "" "" ; then
3730 dup3=yes
3733 # check for ppoll support
3734 ppoll=no
3735 cat > $TMPC << EOF
3736 #include <poll.h>
3738 int main(void)
3740 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3741 ppoll(&pfd, 1, 0, 0);
3742 return 0;
3745 if compile_prog "" "" ; then
3746 ppoll=yes
3749 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3750 prctl_pr_set_timerslack=no
3751 cat > $TMPC << EOF
3752 #include <sys/prctl.h>
3754 int main(void)
3756 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3757 return 0;
3760 if compile_prog "" "" ; then
3761 prctl_pr_set_timerslack=yes
3764 # check for epoll support
3765 epoll=no
3766 cat > $TMPC << EOF
3767 #include <sys/epoll.h>
3769 int main(void)
3771 epoll_create(0);
3772 return 0;
3775 if compile_prog "" "" ; then
3776 epoll=yes
3779 # epoll_create1 and epoll_pwait are later additions
3780 # so we must check separately for their presence
3781 epoll_create1=no
3782 cat > $TMPC << EOF
3783 #include <sys/epoll.h>
3785 int main(void)
3787 /* Note that we use epoll_create1 as a value, not as
3788 * a function being called. This is necessary so that on
3789 * old SPARC glibc versions where the function was present in
3790 * the library but not declared in the header file we will
3791 * fail the configure check. (Otherwise we will get a compiler
3792 * warning but not an error, and will proceed to fail the
3793 * qemu compile where we compile with -Werror.)
3795 return (int)(uintptr_t)&epoll_create1;
3798 if compile_prog "" "" ; then
3799 epoll_create1=yes
3802 epoll_pwait=no
3803 cat > $TMPC << EOF
3804 #include <sys/epoll.h>
3806 int main(void)
3808 epoll_pwait(0, 0, 0, 0, 0);
3809 return 0;
3812 if compile_prog "" "" ; then
3813 epoll_pwait=yes
3816 # check for sendfile support
3817 sendfile=no
3818 cat > $TMPC << EOF
3819 #include <sys/sendfile.h>
3821 int main(void)
3823 return sendfile(0, 0, 0, 0);
3826 if compile_prog "" "" ; then
3827 sendfile=yes
3830 # check for timerfd support (glibc 2.8 and newer)
3831 timerfd=no
3832 cat > $TMPC << EOF
3833 #include <sys/timerfd.h>
3835 int main(void)
3837 return(timerfd_create(CLOCK_REALTIME, 0));
3840 if compile_prog "" "" ; then
3841 timerfd=yes
3844 # check for setns and unshare support
3845 setns=no
3846 cat > $TMPC << EOF
3847 #include <sched.h>
3849 int main(void)
3851 int ret;
3852 ret = setns(0, 0);
3853 ret = unshare(0);
3854 return ret;
3857 if compile_prog "" "" ; then
3858 setns=yes
3861 # Check if tools are available to build documentation.
3862 if test "$docs" != "no" ; then
3863 if has makeinfo && has pod2man; then
3864 docs=yes
3865 else
3866 if test "$docs" = "yes" ; then
3867 feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3869 docs=no
3873 # Search for bswap_32 function
3874 byteswap_h=no
3875 cat > $TMPC << EOF
3876 #include <byteswap.h>
3877 int main(void) { return bswap_32(0); }
3879 if compile_prog "" "" ; then
3880 byteswap_h=yes
3883 # Search for bswap32 function
3884 bswap_h=no
3885 cat > $TMPC << EOF
3886 #include <sys/endian.h>
3887 #include <sys/types.h>
3888 #include <machine/bswap.h>
3889 int main(void) { return bswap32(0); }
3891 if compile_prog "" "" ; then
3892 bswap_h=yes
3895 ##########################################
3896 # Do we have libiscsi >= 1.9.0
3897 if test "$libiscsi" != "no" ; then
3898 if $pkg_config --atleast-version=1.9.0 libiscsi; then
3899 libiscsi="yes"
3900 libiscsi_cflags=$($pkg_config --cflags libiscsi)
3901 libiscsi_libs=$($pkg_config --libs libiscsi)
3902 else
3903 if test "$libiscsi" = "yes" ; then
3904 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3906 libiscsi="no"
3910 ##########################################
3911 # Do we need libm
3912 cat > $TMPC << EOF
3913 #include <math.h>
3914 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3916 if compile_prog "" "" ; then
3918 elif compile_prog "" "-lm" ; then
3919 LIBS="-lm $LIBS"
3920 libs_qga="-lm $libs_qga"
3921 else
3922 error_exit "libm check failed"
3925 ##########################################
3926 # Do we need librt
3927 # uClibc provides 2 versions of clock_gettime(), one with realtime
3928 # support and one without. This means that the clock_gettime() don't
3929 # need -lrt. We still need it for timer_create() so we check for this
3930 # function in addition.
3931 cat > $TMPC <<EOF
3932 #include <signal.h>
3933 #include <time.h>
3934 int main(void) {
3935 timer_create(CLOCK_REALTIME, NULL, NULL);
3936 return clock_gettime(CLOCK_REALTIME, NULL);
3940 if compile_prog "" "" ; then
3942 # we need pthread for static linking. use previous pthread test result
3943 elif compile_prog "" "$pthread_lib -lrt" ; then
3944 LIBS="$LIBS -lrt"
3945 libs_qga="$libs_qga -lrt"
3948 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3949 "$aix" != "yes" -a "$haiku" != "yes" ; then
3950 libs_softmmu="-lutil $libs_softmmu"
3953 ##########################################
3954 # spice probe
3955 if test "$spice" != "no" ; then
3956 cat > $TMPC << EOF
3957 #include <spice.h>
3958 int main(void) { spice_server_new(); return 0; }
3960 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3961 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3962 if $pkg_config --atleast-version=0.12.0 spice-server && \
3963 $pkg_config --atleast-version=0.12.3 spice-protocol && \
3964 compile_prog "$spice_cflags" "$spice_libs" ; then
3965 spice="yes"
3966 libs_softmmu="$libs_softmmu $spice_libs"
3967 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3968 spice_protocol_version=$($pkg_config --modversion spice-protocol)
3969 spice_server_version=$($pkg_config --modversion spice-server)
3970 else
3971 if test "$spice" = "yes" ; then
3972 feature_not_found "spice" \
3973 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3975 spice="no"
3979 # check for smartcard support
3980 smartcard_cflags=""
3981 if test "$smartcard" != "no"; then
3982 if $pkg_config libcacard; then
3983 libcacard_cflags=$($pkg_config --cflags libcacard)
3984 libcacard_libs=$($pkg_config --libs libcacard)
3985 QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
3986 libs_softmmu="$libs_softmmu $libcacard_libs"
3987 smartcard="yes"
3988 else
3989 if test "$smartcard" = "yes"; then
3990 feature_not_found "smartcard" "Install libcacard devel"
3992 smartcard="no"
3996 # check for libusb
3997 if test "$libusb" != "no" ; then
3998 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3999 libusb="yes"
4000 libusb_cflags=$($pkg_config --cflags libusb-1.0)
4001 libusb_libs=$($pkg_config --libs libusb-1.0)
4002 QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4003 libs_softmmu="$libs_softmmu $libusb_libs"
4004 else
4005 if test "$libusb" = "yes"; then
4006 feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4008 libusb="no"
4012 # check for usbredirparser for usb network redirection support
4013 if test "$usb_redir" != "no" ; then
4014 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4015 usb_redir="yes"
4016 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4017 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4018 QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
4019 libs_softmmu="$libs_softmmu $usb_redir_libs"
4020 else
4021 if test "$usb_redir" = "yes"; then
4022 feature_not_found "usb-redir" "Install usbredir devel"
4024 usb_redir="no"
4028 ##########################################
4029 # check if we have VSS SDK headers for win
4031 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4032 case "$vss_win32_sdk" in
4033 "") vss_win32_include="-I$source_path" ;;
4034 *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4035 # handle path with spaces. So we symlink the headers into ".sdk/vss".
4036 vss_win32_include="-I$source_path/.sdk/vss"
4037 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4039 *) vss_win32_include="-I$vss_win32_sdk"
4040 esac
4041 cat > $TMPC << EOF
4042 #define __MIDL_user_allocate_free_DEFINED__
4043 #include <inc/win2003/vss.h>
4044 int main(void) { return VSS_CTX_BACKUP; }
4046 if compile_prog "$vss_win32_include" "" ; then
4047 guest_agent_with_vss="yes"
4048 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4049 libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4050 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4051 else
4052 if test "$vss_win32_sdk" != "" ; then
4053 echo "ERROR: Please download and install Microsoft VSS SDK:"
4054 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4055 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4056 echo "ERROR: scripts/extract-vsssdk-headers setup.exe"
4057 echo "ERROR: The headers are extracted in the directory \`inc'."
4058 feature_not_found "VSS support"
4060 guest_agent_with_vss="no"
4064 ##########################################
4065 # lookup Windows platform SDK (if not specified)
4066 # The SDK is needed only to build .tlb (type library) file of guest agent
4067 # VSS provider from the source. It is usually unnecessary because the
4068 # pre-compiled .tlb file is included.
4070 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4071 if test -z "$win_sdk"; then
4072 programfiles="$PROGRAMFILES"
4073 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4074 if test -n "$programfiles"; then
4075 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4076 else
4077 feature_not_found "Windows SDK"
4079 elif test "$win_sdk" = "no"; then
4080 win_sdk=""
4084 ##########################################
4085 # check if mingw environment provides a recent ntddscsi.h
4086 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4087 cat > $TMPC << EOF
4088 #include <windows.h>
4089 #include <ntddscsi.h>
4090 int main(void) {
4091 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4092 #error Missing required ioctl definitions
4093 #endif
4094 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4095 return addr.Lun;
4098 if compile_prog "" "" ; then
4099 guest_agent_ntddscsi=yes
4100 libs_qga="-lsetupapi $libs_qga"
4104 ##########################################
4105 # virgl renderer probe
4107 if test "$virglrenderer" != "no" ; then
4108 cat > $TMPC << EOF
4109 #include <virglrenderer.h>
4110 int main(void) { virgl_renderer_poll(); return 0; }
4112 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4113 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4114 if $pkg_config virglrenderer >/dev/null 2>&1 && \
4115 compile_prog "$virgl_cflags" "$virgl_libs" ; then
4116 virglrenderer="yes"
4117 else
4118 if test "$virglrenderer" = "yes" ; then
4119 feature_not_found "virglrenderer"
4121 virglrenderer="no"
4125 ##########################################
4126 # check if we have fdatasync
4128 fdatasync=no
4129 cat > $TMPC << EOF
4130 #include <unistd.h>
4131 int main(void) {
4132 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4133 return fdatasync(0);
4134 #else
4135 #error Not supported
4136 #endif
4139 if compile_prog "" "" ; then
4140 fdatasync=yes
4143 ##########################################
4144 # check if we have madvise
4146 madvise=no
4147 cat > $TMPC << EOF
4148 #include <sys/types.h>
4149 #include <sys/mman.h>
4150 #include <stddef.h>
4151 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4153 if compile_prog "" "" ; then
4154 madvise=yes
4157 ##########################################
4158 # check if we have posix_madvise
4160 posix_madvise=no
4161 cat > $TMPC << EOF
4162 #include <sys/mman.h>
4163 #include <stddef.h>
4164 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4166 if compile_prog "" "" ; then
4167 posix_madvise=yes
4170 ##########################################
4171 # check if we have usable SIGEV_THREAD_ID
4173 sigev_thread_id=no
4174 cat > $TMPC << EOF
4175 #include <signal.h>
4176 int main(void) {
4177 struct sigevent ev;
4178 ev.sigev_notify = SIGEV_THREAD_ID;
4179 ev._sigev_un._tid = 0;
4180 asm volatile("" : : "g"(&ev));
4181 return 0;
4184 if compile_prog "" "" ; then
4185 sigev_thread_id=yes
4188 ##########################################
4189 # check if trace backend exists
4191 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
4192 if test "$?" -ne 0 ; then
4193 error_exit "invalid trace backends" \
4194 "Please choose supported trace backends."
4197 ##########################################
4198 # For 'ust' backend, test if ust headers are present
4199 if have_backend "ust"; then
4200 cat > $TMPC << EOF
4201 #include <lttng/tracepoint.h>
4202 int main(void) { return 0; }
4204 if compile_prog "" "" ; then
4205 if $pkg_config lttng-ust --exists; then
4206 lttng_ust_libs=`$pkg_config --libs lttng-ust`
4207 else
4208 lttng_ust_libs="-llttng-ust"
4210 if $pkg_config liburcu-bp --exists; then
4211 urcu_bp_libs=`$pkg_config --libs liburcu-bp`
4212 else
4213 urcu_bp_libs="-lurcu-bp"
4216 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4217 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4218 else
4219 error_exit "Trace backend 'ust' missing lttng-ust header files"
4223 ##########################################
4224 # For 'dtrace' backend, test if 'dtrace' command is present
4225 if have_backend "dtrace"; then
4226 if ! has 'dtrace' ; then
4227 error_exit "dtrace command is not found in PATH $PATH"
4229 trace_backend_stap="no"
4230 if has 'stap' ; then
4231 trace_backend_stap="yes"
4235 ##########################################
4236 # check and set a backend for coroutine
4238 # We prefer ucontext, but it's not always possible. The fallback
4239 # is sigcontext. gthread is not selectable except explicitly, because
4240 # it is not functional enough to run QEMU proper. (It is occasionally
4241 # useful for debugging purposes.) On Windows the only valid backend
4242 # is the Windows-specific one.
4244 ucontext_works=no
4245 if test "$darwin" != "yes"; then
4246 cat > $TMPC << EOF
4247 #include <ucontext.h>
4248 #ifdef __stub_makecontext
4249 #error Ignoring glibc stub makecontext which will always fail
4250 #endif
4251 int main(void) { makecontext(0, 0, 0); return 0; }
4253 if compile_prog "" "" ; then
4254 ucontext_works=yes
4258 if test "$coroutine" = ""; then
4259 if test "$mingw32" = "yes"; then
4260 coroutine=win32
4261 elif test "$ucontext_works" = "yes"; then
4262 coroutine=ucontext
4263 else
4264 coroutine=sigaltstack
4266 else
4267 case $coroutine in
4268 windows)
4269 if test "$mingw32" != "yes"; then
4270 error_exit "'windows' coroutine backend only valid for Windows"
4272 # Unfortunately the user visible backend name doesn't match the
4273 # coroutine-*.c filename for this case, so we have to adjust it here.
4274 coroutine=win32
4276 ucontext)
4277 if test "$ucontext_works" != "yes"; then
4278 feature_not_found "ucontext"
4281 gthread|sigaltstack)
4282 if test "$mingw32" = "yes"; then
4283 error_exit "only the 'windows' coroutine backend is valid for Windows"
4287 error_exit "unknown coroutine backend $coroutine"
4289 esac
4292 if test "$coroutine_pool" = ""; then
4293 if test "$coroutine" = "gthread"; then
4294 coroutine_pool=no
4295 else
4296 coroutine_pool=yes
4299 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4300 error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4303 ##########################################
4304 # check if we have open_by_handle_at
4306 open_by_handle_at=no
4307 cat > $TMPC << EOF
4308 #include <fcntl.h>
4309 #if !defined(AT_EMPTY_PATH)
4310 # error missing definition
4311 #else
4312 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4313 #endif
4315 if compile_prog "" "" ; then
4316 open_by_handle_at=yes
4319 ########################################
4320 # check if we have linux/magic.h
4322 linux_magic_h=no
4323 cat > $TMPC << EOF
4324 #include <linux/magic.h>
4325 int main(void) {
4326 return 0;
4329 if compile_prog "" "" ; then
4330 linux_magic_h=yes
4333 ########################################
4334 # check whether we can disable warning option with a pragma (this is needed
4335 # to silence warnings in the headers of some versions of external libraries).
4336 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4337 # only a warning.
4339 # If we can't selectively disable warning in the code, disable -Werror so that
4340 # the build doesn't fail anyway.
4342 pragma_disable_unused_but_set=no
4343 cat > $TMPC << EOF
4344 #pragma GCC diagnostic push
4345 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4346 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4347 #pragma GCC diagnostic pop
4349 int main(void) {
4350 return 0;
4353 if compile_prog "-Werror" "" ; then
4354 pragma_diagnostic_available=yes
4355 else
4356 werror=no
4359 ########################################
4360 # check if we have valgrind/valgrind.h
4362 valgrind_h=no
4363 cat > $TMPC << EOF
4364 #include <valgrind/valgrind.h>
4365 int main(void) {
4366 return 0;
4369 if compile_prog "" "" ; then
4370 valgrind_h=yes
4373 ########################################
4374 # check if environ is declared
4376 has_environ=no
4377 cat > $TMPC << EOF
4378 #include <unistd.h>
4379 int main(void) {
4380 environ = 0;
4381 return 0;
4384 if compile_prog "" "" ; then
4385 has_environ=yes
4388 ########################################
4389 # check if cpuid.h is usable.
4391 cpuid_h=no
4392 cat > $TMPC << EOF
4393 #include <cpuid.h>
4394 int main(void) {
4395 unsigned a, b, c, d;
4396 int max = __get_cpuid_max(0, 0);
4398 if (max >= 1) {
4399 __cpuid(1, a, b, c, d);
4402 if (max >= 7) {
4403 __cpuid_count(7, 0, a, b, c, d);
4406 return 0;
4409 if compile_prog "" "" ; then
4410 cpuid_h=yes
4413 ########################################
4414 # check if __[u]int128_t is usable.
4416 int128=no
4417 cat > $TMPC << EOF
4418 #if defined(__clang_major__) && defined(__clang_minor__)
4419 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4420 # error __int128_t does not work in CLANG before 3.2
4421 # endif
4422 #endif
4423 __int128_t a;
4424 __uint128_t b;
4425 int main (void) {
4426 a = a + b;
4427 b = a * b;
4428 a = a * a;
4429 return 0;
4432 if compile_prog "" "" ; then
4433 int128=yes
4436 ########################################
4437 # check if getauxval is available.
4439 getauxval=no
4440 cat > $TMPC << EOF
4441 #include <sys/auxv.h>
4442 int main(void) {
4443 return getauxval(AT_HWCAP) == 0;
4446 if compile_prog "" "" ; then
4447 getauxval=yes
4450 ########################################
4451 # check if ccache is interfering with
4452 # semantic analysis of macros
4454 unset CCACHE_CPP2
4455 ccache_cpp2=no
4456 cat > $TMPC << EOF
4457 static const int Z = 1;
4458 #define fn() ({ Z; })
4459 #define TAUT(X) ((X) == Z)
4460 #define PAREN(X, Y) (X == Y)
4461 #define ID(X) (X)
4462 int main(int argc, char *argv[])
4464 int x = 0, y = 0;
4465 x = ID(x);
4466 x = fn();
4467 fn();
4468 if (PAREN(x, y)) return 0;
4469 if (TAUT(Z)) return 0;
4470 return 0;
4474 if ! compile_object "-Werror"; then
4475 ccache_cpp2=yes
4478 #################################################
4479 # clang does not support glibc + FORTIFY_SOURCE.
4481 if test "$fortify_source" != "no"; then
4482 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4483 fortify_source="no";
4484 elif test -n "$cxx" &&
4485 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4486 fortify_source="no";
4487 else
4488 fortify_source="yes"
4492 ##########################################
4493 # End of CC checks
4494 # After here, no more $cc or $ld runs
4496 if test "$gcov" = "yes" ; then
4497 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4498 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4499 elif test "$fortify_source" = "yes" ; then
4500 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4501 elif test "$debug" = "no"; then
4502 CFLAGS="-O2 $CFLAGS"
4505 ##########################################
4506 # Do we have libnfs
4507 if test "$libnfs" != "no" ; then
4508 if $pkg_config --atleast-version=1.9.3 libnfs; then
4509 libnfs="yes"
4510 libnfs_libs=$($pkg_config --libs libnfs)
4511 LIBS="$LIBS $libnfs_libs"
4512 else
4513 if test "$libnfs" = "yes" ; then
4514 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4516 libnfs="no"
4520 # Disable zero malloc errors for official releases unless explicitly told to
4521 # enable/disable
4522 if test -z "$zero_malloc" ; then
4523 if test "$z_version" = "50" ; then
4524 zero_malloc="no"
4525 else
4526 zero_malloc="yes"
4530 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4531 if test "$werror" = "yes"; then
4532 QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4535 if test "$solaris" = "no" ; then
4536 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4537 LDFLAGS="-Wl,--warn-common $LDFLAGS"
4541 # test if pod2man has --utf8 option
4542 if pod2man --help | grep -q utf8; then
4543 POD2MAN="pod2man --utf8"
4544 else
4545 POD2MAN="pod2man"
4548 # Use ASLR, no-SEH and DEP if available
4549 if test "$mingw32" = "yes" ; then
4550 for flag in --dynamicbase --no-seh --nxcompat; do
4551 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4552 LDFLAGS="-Wl,$flag $LDFLAGS"
4554 done
4557 qemu_confdir=$sysconfdir$confsuffix
4558 qemu_moddir=$libdir$confsuffix
4559 qemu_datadir=$datadir$confsuffix
4560 qemu_localedir="$datadir/locale"
4562 tools=""
4563 if test "$want_tools" = "yes" ; then
4564 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4565 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4566 tools="qemu-nbd\$(EXESUF) $tools"
4567 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4570 if test "$softmmu" = yes ; then
4571 if test "$virtfs" != no ; then
4572 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4573 virtfs=yes
4574 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4575 else
4576 if test "$virtfs" = yes; then
4577 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4579 virtfs=no
4584 # Probe for guest agent support/options
4586 if [ "$guest_agent" != "no" ]; then
4587 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4588 tools="qemu-ga $tools"
4589 guest_agent=yes
4590 elif [ "$guest_agent" != yes ]; then
4591 guest_agent=no
4592 else
4593 error_exit "Guest agent is not supported on this platform"
4597 # Guest agent Window MSI package
4599 if test "$guest_agent" != yes; then
4600 if test "$guest_agent_msi" = yes; then
4601 error_exit "MSI guest agent package requires guest agent enabled"
4603 guest_agent_msi=no
4604 elif test "$mingw32" != "yes"; then
4605 if test "$guest_agent_msi" = "yes"; then
4606 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4608 guest_agent_msi=no
4609 elif ! has wixl; then
4610 if test "$guest_agent_msi" = "yes"; then
4611 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4613 guest_agent_msi=no
4614 else
4615 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4616 # disabled explicitly
4617 if test "$guest_agent_msi" != "no"; then
4618 guest_agent_msi=yes
4622 if test "$guest_agent_msi" = "yes"; then
4623 if test "$guest_agent_with_vss" = "yes"; then
4624 QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4627 if test "$QEMU_GA_MANUFACTURER" = ""; then
4628 QEMU_GA_MANUFACTURER=QEMU
4631 if test "$QEMU_GA_DISTRO" = ""; then
4632 QEMU_GA_DISTRO=Linux
4635 if test "$QEMU_GA_VERSION" = ""; then
4636 QEMU_GA_VERSION=`cat $source_path/VERSION`
4639 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
4641 case "$cpu" in
4642 x86_64)
4643 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4645 i386)
4646 QEMU_GA_MSI_ARCH="-D Arch=32"
4649 error_exit "CPU $cpu not supported for building installation package"
4651 esac
4654 # Mac OS X ships with a broken assembler
4655 roms=
4656 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4657 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4658 "$softmmu" = yes ; then
4659 roms="optionrom"
4661 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4662 roms="$roms spapr-rtas"
4665 if test "$cpu" = "s390x" ; then
4666 roms="$roms s390-ccw"
4669 # Probe for the need for relocating the user-only binary.
4670 if test "$pie" = "no" ; then
4671 textseg_addr=
4672 case "$cpu" in
4673 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4674 # ??? Rationale for choosing this address
4675 textseg_addr=0x60000000
4677 mips)
4678 # A 256M aligned address, high in the address space, with enough
4679 # room for the code_gen_buffer above it before the stack.
4680 textseg_addr=0x60000000
4682 esac
4683 if [ -n "$textseg_addr" ]; then
4684 cat > $TMPC <<EOF
4685 int main(void) { return 0; }
4687 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4688 if ! compile_prog "" "$textseg_ldflags"; then
4689 # In case ld does not support -Ttext-segment, edit the default linker
4690 # script via sed to set the .text start addr. This is needed on FreeBSD
4691 # at least.
4692 $ld --verbose | sed \
4693 -e '1,/==================================================/d' \
4694 -e '/==================================================/,$d' \
4695 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4696 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4697 textseg_ldflags="-Wl,-T../config-host.ld"
4702 # prepend pixman and ftd flags after all config tests are done
4703 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4704 libs_softmmu="$pixman_libs $libs_softmmu"
4706 echo "Install prefix $prefix"
4707 echo "BIOS directory `eval echo $qemu_datadir`"
4708 echo "binary directory `eval echo $bindir`"
4709 echo "library directory `eval echo $libdir`"
4710 echo "module directory `eval echo $qemu_moddir`"
4711 echo "libexec directory `eval echo $libexecdir`"
4712 echo "include directory `eval echo $includedir`"
4713 echo "config directory `eval echo $sysconfdir`"
4714 if test "$mingw32" = "no" ; then
4715 echo "local state directory `eval echo $local_statedir`"
4716 echo "Manual directory `eval echo $mandir`"
4717 echo "ELF interp prefix $interp_prefix"
4718 else
4719 echo "local state directory queried at runtime"
4720 echo "Windows SDK $win_sdk"
4722 echo "Source path $source_path"
4723 echo "C compiler $cc"
4724 echo "Host C compiler $host_cc"
4725 echo "C++ compiler $cxx"
4726 echo "Objective-C compiler $objcc"
4727 echo "ARFLAGS $ARFLAGS"
4728 echo "CFLAGS $CFLAGS"
4729 echo "QEMU_CFLAGS $QEMU_CFLAGS"
4730 echo "LDFLAGS $LDFLAGS"
4731 echo "make $make"
4732 echo "install $install"
4733 echo "python $python"
4734 if test "$slirp" = "yes" ; then
4735 echo "smbd $smbd"
4737 echo "module support $modules"
4738 echo "host CPU $cpu"
4739 echo "host big endian $bigendian"
4740 echo "target list $target_list"
4741 echo "tcg debug enabled $debug_tcg"
4742 echo "gprof enabled $gprof"
4743 echo "sparse enabled $sparse"
4744 echo "strip binaries $strip_opt"
4745 echo "profiler $profiler"
4746 echo "static build $static"
4747 if test "$darwin" = "yes" ; then
4748 echo "Cocoa support $cocoa"
4750 echo "pixman $pixman"
4751 echo "SDL support $sdl"
4752 echo "GTK support $gtk"
4753 echo "GTK GL support $gtk_gl"
4754 echo "GNUTLS support $gnutls"
4755 echo "GNUTLS hash $gnutls_hash"
4756 echo "GNUTLS rnd $gnutls_rnd"
4757 echo "libgcrypt $gcrypt"
4758 echo "libgcrypt kdf $gcrypt_kdf"
4759 if test "$nettle" = "yes"; then
4760 echo "nettle $nettle ($nettle_version)"
4761 else
4762 echo "nettle $nettle"
4764 echo "nettle kdf $nettle_kdf"
4765 echo "libtasn1 $tasn1"
4766 echo "VTE support $vte"
4767 echo "curses support $curses"
4768 echo "virgl support $virglrenderer"
4769 echo "curl support $curl"
4770 echo "mingw32 support $mingw32"
4771 echo "Audio drivers $audio_drv_list"
4772 echo "Block whitelist (rw) $block_drv_rw_whitelist"
4773 echo "Block whitelist (ro) $block_drv_ro_whitelist"
4774 echo "VirtFS support $virtfs"
4775 echo "VNC support $vnc"
4776 if test "$vnc" = "yes" ; then
4777 echo "VNC SASL support $vnc_sasl"
4778 echo "VNC JPEG support $vnc_jpeg"
4779 echo "VNC PNG support $vnc_png"
4781 if test -n "$sparc_cpu"; then
4782 echo "Target Sparc Arch $sparc_cpu"
4784 echo "xen support $xen"
4785 if test "$xen" = "yes" ; then
4786 echo "xen ctrl version $xen_ctrl_version"
4787 echo "pv dom build $xen_pv_domain_build"
4789 echo "brlapi support $brlapi"
4790 echo "bluez support $bluez"
4791 echo "Documentation $docs"
4792 echo "PIE $pie"
4793 echo "vde support $vde"
4794 echo "netmap support $netmap"
4795 echo "Linux AIO support $linux_aio"
4796 echo "ATTR/XATTR support $attr"
4797 echo "Install blobs $blobs"
4798 echo "KVM support $kvm"
4799 echo "RDMA support $rdma"
4800 echo "TCG interpreter $tcg_interpreter"
4801 echo "fdt support $fdt"
4802 echo "preadv support $preadv"
4803 echo "fdatasync $fdatasync"
4804 echo "madvise $madvise"
4805 echo "posix_madvise $posix_madvise"
4806 echo "sigev_thread_id $sigev_thread_id"
4807 echo "uuid support $uuid"
4808 echo "libcap-ng support $cap_ng"
4809 echo "vhost-net support $vhost_net"
4810 echo "vhost-scsi support $vhost_scsi"
4811 echo "Trace backends $trace_backends"
4812 if have_backend "simple"; then
4813 echo "Trace output file $trace_file-<pid>"
4815 if test "$spice" = "yes"; then
4816 echo "spice support $spice ($spice_protocol_version/$spice_server_version)"
4817 else
4818 echo "spice support $spice"
4820 echo "rbd support $rbd"
4821 echo "xfsctl support $xfs"
4822 echo "smartcard support $smartcard"
4823 echo "libusb $libusb"
4824 echo "usb net redir $usb_redir"
4825 echo "OpenGL support $opengl"
4826 echo "OpenGL dmabufs $opengl_dmabuf"
4827 echo "libiscsi support $libiscsi"
4828 echo "libnfs support $libnfs"
4829 echo "build guest agent $guest_agent"
4830 echo "QGA VSS support $guest_agent_with_vss"
4831 echo "QGA w32 disk info $guest_agent_ntddscsi"
4832 echo "QGA MSI support $guest_agent_msi"
4833 echo "seccomp support $seccomp"
4834 echo "coroutine backend $coroutine"
4835 echo "coroutine pool $coroutine_pool"
4836 echo "GlusterFS support $glusterfs"
4837 echo "Archipelago support $archipelago"
4838 echo "gcov $gcov_tool"
4839 echo "gcov enabled $gcov"
4840 echo "TPM support $tpm"
4841 echo "libssh2 support $libssh2"
4842 echo "TPM passthrough $tpm_passthrough"
4843 echo "QOM debugging $qom_cast_debug"
4844 echo "vhdx $vhdx"
4845 echo "lzo support $lzo"
4846 echo "snappy support $snappy"
4847 echo "bzip2 support $bzip2"
4848 echo "NUMA host support $numa"
4849 echo "tcmalloc support $tcmalloc"
4850 echo "jemalloc support $jemalloc"
4851 echo "avx2 optimization $avx2_opt"
4853 if test "$sdl_too_old" = "yes"; then
4854 echo "-> Your SDL version is too old - please upgrade to have SDL support"
4857 config_host_mak="config-host.mak"
4859 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4861 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4862 echo >> $config_host_mak
4864 echo all: >> $config_host_mak
4865 echo "prefix=$prefix" >> $config_host_mak
4866 echo "bindir=$bindir" >> $config_host_mak
4867 echo "libdir=$libdir" >> $config_host_mak
4868 echo "libexecdir=$libexecdir" >> $config_host_mak
4869 echo "includedir=$includedir" >> $config_host_mak
4870 echo "mandir=$mandir" >> $config_host_mak
4871 echo "sysconfdir=$sysconfdir" >> $config_host_mak
4872 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4873 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4874 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4875 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4876 if test "$mingw32" = "no" ; then
4877 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4879 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4880 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4881 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4882 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4883 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4885 echo "ARCH=$ARCH" >> $config_host_mak
4887 if test "$debug_tcg" = "yes" ; then
4888 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4890 if test "$strip_opt" = "yes" ; then
4891 echo "STRIP=${strip}" >> $config_host_mak
4893 if test "$bigendian" = "yes" ; then
4894 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4896 if test "$mingw32" = "yes" ; then
4897 echo "CONFIG_WIN32=y" >> $config_host_mak
4898 rc_version=`cat $source_path/VERSION`
4899 version_major=${rc_version%%.*}
4900 rc_version=${rc_version#*.}
4901 version_minor=${rc_version%%.*}
4902 rc_version=${rc_version#*.}
4903 version_subminor=${rc_version%%.*}
4904 version_micro=0
4905 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4906 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4907 if test "$guest_agent_with_vss" = "yes" ; then
4908 echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4909 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
4910 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4912 if test "$guest_agent_ntddscsi" = "yes" ; then
4913 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
4915 if test "$guest_agent_msi" = "yes"; then
4916 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
4917 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4918 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4919 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4920 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4921 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4922 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4924 else
4925 echo "CONFIG_POSIX=y" >> $config_host_mak
4928 if test "$linux" = "yes" ; then
4929 echo "CONFIG_LINUX=y" >> $config_host_mak
4932 if test "$darwin" = "yes" ; then
4933 echo "CONFIG_DARWIN=y" >> $config_host_mak
4936 if test "$aix" = "yes" ; then
4937 echo "CONFIG_AIX=y" >> $config_host_mak
4940 if test "$solaris" = "yes" ; then
4941 echo "CONFIG_SOLARIS=y" >> $config_host_mak
4942 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4943 if test "$needs_libsunmath" = "yes" ; then
4944 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4947 if test "$haiku" = "yes" ; then
4948 echo "CONFIG_HAIKU=y" >> $config_host_mak
4950 if test "$static" = "yes" ; then
4951 echo "CONFIG_STATIC=y" >> $config_host_mak
4953 if test "$profiler" = "yes" ; then
4954 echo "CONFIG_PROFILER=y" >> $config_host_mak
4956 if test "$slirp" = "yes" ; then
4957 echo "CONFIG_SLIRP=y" >> $config_host_mak
4958 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4960 if test "$vde" = "yes" ; then
4961 echo "CONFIG_VDE=y" >> $config_host_mak
4963 if test "$netmap" = "yes" ; then
4964 echo "CONFIG_NETMAP=y" >> $config_host_mak
4966 if test "$l2tpv3" = "yes" ; then
4967 echo "CONFIG_L2TPV3=y" >> $config_host_mak
4969 if test "$cap_ng" = "yes" ; then
4970 echo "CONFIG_LIBCAP=y" >> $config_host_mak
4972 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4973 for drv in $audio_drv_list; do
4974 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4975 echo "$def=y" >> $config_host_mak
4976 done
4977 if test "$audio_pt_int" = "yes" ; then
4978 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4980 if test "$audio_win_int" = "yes" ; then
4981 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4983 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4984 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4985 if test "$vnc" = "yes" ; then
4986 echo "CONFIG_VNC=y" >> $config_host_mak
4988 if test "$vnc_sasl" = "yes" ; then
4989 echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4991 if test "$vnc_jpeg" = "yes" ; then
4992 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4994 if test "$vnc_png" = "yes" ; then
4995 echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4997 if test "$fnmatch" = "yes" ; then
4998 echo "CONFIG_FNMATCH=y" >> $config_host_mak
5000 if test "$uuid" = "yes" ; then
5001 echo "CONFIG_UUID=y" >> $config_host_mak
5003 if test "$xfs" = "yes" ; then
5004 echo "CONFIG_XFS=y" >> $config_host_mak
5006 qemu_version=`head $source_path/VERSION`
5007 echo "VERSION=$qemu_version" >>$config_host_mak
5008 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5009 echo "SRC_PATH=$source_path" >> $config_host_mak
5010 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5011 if [ "$docs" = "yes" ] ; then
5012 echo "BUILD_DOCS=yes" >> $config_host_mak
5014 if test "$modules" = "yes"; then
5015 # $shacmd can generate a hash started with digit, which the compiler doesn't
5016 # like as an symbol. So prefix it with an underscore
5017 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
5018 echo "CONFIG_MODULES=y" >> $config_host_mak
5020 if test "$sdl" = "yes" ; then
5021 echo "CONFIG_SDL=y" >> $config_host_mak
5022 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5023 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5025 if test "$cocoa" = "yes" ; then
5026 echo "CONFIG_COCOA=y" >> $config_host_mak
5028 if test "$curses" = "yes" ; then
5029 echo "CONFIG_CURSES=y" >> $config_host_mak
5031 if test "$utimens" = "yes" ; then
5032 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
5034 if test "$pipe2" = "yes" ; then
5035 echo "CONFIG_PIPE2=y" >> $config_host_mak
5037 if test "$accept4" = "yes" ; then
5038 echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5040 if test "$splice" = "yes" ; then
5041 echo "CONFIG_SPLICE=y" >> $config_host_mak
5043 if test "$eventfd" = "yes" ; then
5044 echo "CONFIG_EVENTFD=y" >> $config_host_mak
5046 if test "$memfd" = "yes" ; then
5047 echo "CONFIG_MEMFD=y" >> $config_host_mak
5049 if test "$fallocate" = "yes" ; then
5050 echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5052 if test "$fallocate_punch_hole" = "yes" ; then
5053 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5055 if test "$fallocate_zero_range" = "yes" ; then
5056 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5058 if test "$posix_fallocate" = "yes" ; then
5059 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5061 if test "$sync_file_range" = "yes" ; then
5062 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5064 if test "$fiemap" = "yes" ; then
5065 echo "CONFIG_FIEMAP=y" >> $config_host_mak
5067 if test "$dup3" = "yes" ; then
5068 echo "CONFIG_DUP3=y" >> $config_host_mak
5070 if test "$ppoll" = "yes" ; then
5071 echo "CONFIG_PPOLL=y" >> $config_host_mak
5073 if test "$prctl_pr_set_timerslack" = "yes" ; then
5074 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5076 if test "$epoll" = "yes" ; then
5077 echo "CONFIG_EPOLL=y" >> $config_host_mak
5079 if test "$epoll_create1" = "yes" ; then
5080 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5082 if test "$epoll_pwait" = "yes" ; then
5083 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
5085 if test "$sendfile" = "yes" ; then
5086 echo "CONFIG_SENDFILE=y" >> $config_host_mak
5088 if test "$timerfd" = "yes" ; then
5089 echo "CONFIG_TIMERFD=y" >> $config_host_mak
5091 if test "$setns" = "yes" ; then
5092 echo "CONFIG_SETNS=y" >> $config_host_mak
5094 if test "$inotify" = "yes" ; then
5095 echo "CONFIG_INOTIFY=y" >> $config_host_mak
5097 if test "$inotify1" = "yes" ; then
5098 echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5100 if test "$byteswap_h" = "yes" ; then
5101 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5103 if test "$bswap_h" = "yes" ; then
5104 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5106 if test "$curl" = "yes" ; then
5107 echo "CONFIG_CURL=m" >> $config_host_mak
5108 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5109 echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5111 if test "$brlapi" = "yes" ; then
5112 echo "CONFIG_BRLAPI=y" >> $config_host_mak
5114 if test "$bluez" = "yes" ; then
5115 echo "CONFIG_BLUEZ=y" >> $config_host_mak
5116 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5118 if test "$glib_subprocess" = "yes" ; then
5119 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5121 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
5122 if test "$gtk" = "yes" ; then
5123 echo "CONFIG_GTK=y" >> $config_host_mak
5124 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5125 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5126 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5127 if test "$gtk_gl" = "yes" ; then
5128 echo "CONFIG_GTK_GL=y" >> $config_host_mak
5131 if test "$gnutls" = "yes" ; then
5132 echo "CONFIG_GNUTLS=y" >> $config_host_mak
5134 if test "$gnutls_hash" = "yes" ; then
5135 echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak
5137 if test "$gnutls_rnd" = "yes" ; then
5138 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5140 if test "$gcrypt" = "yes" ; then
5141 echo "CONFIG_GCRYPT=y" >> $config_host_mak
5142 if test "$gcrypt_kdf" = "yes" ; then
5143 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5146 if test "$nettle" = "yes" ; then
5147 echo "CONFIG_NETTLE=y" >> $config_host_mak
5148 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5149 if test "$nettle_kdf" = "yes" ; then
5150 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5153 if test "$tasn1" = "yes" ; then
5154 echo "CONFIG_TASN1=y" >> $config_host_mak
5156 if test "$have_ifaddrs_h" = "yes" ; then
5157 echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5159 if test "$vte" = "yes" ; then
5160 echo "CONFIG_VTE=y" >> $config_host_mak
5161 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5163 if test "$virglrenderer" = "yes" ; then
5164 echo "CONFIG_VIRGL=y" >> $config_host_mak
5165 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5166 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5168 if test "$xen" = "yes" ; then
5169 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5170 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5171 if test "$xen_pv_domain_build" = "yes" ; then
5172 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5175 if test "$linux_aio" = "yes" ; then
5176 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5178 if test "$attr" = "yes" ; then
5179 echo "CONFIG_ATTR=y" >> $config_host_mak
5181 if test "$libattr" = "yes" ; then
5182 echo "CONFIG_LIBATTR=y" >> $config_host_mak
5184 if test "$virtfs" = "yes" ; then
5185 echo "CONFIG_VIRTFS=y" >> $config_host_mak
5187 if test "$vhost_scsi" = "yes" ; then
5188 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5190 if test "$vhost_net" = "yes" ; then
5191 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5193 if test "$blobs" = "yes" ; then
5194 echo "INSTALL_BLOBS=yes" >> $config_host_mak
5196 if test "$iovec" = "yes" ; then
5197 echo "CONFIG_IOVEC=y" >> $config_host_mak
5199 if test "$preadv" = "yes" ; then
5200 echo "CONFIG_PREADV=y" >> $config_host_mak
5202 if test "$fdt" = "yes" ; then
5203 echo "CONFIG_FDT=y" >> $config_host_mak
5205 if test "$signalfd" = "yes" ; then
5206 echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5208 if test "$tcg_interpreter" = "yes" ; then
5209 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5211 if test "$fdatasync" = "yes" ; then
5212 echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5214 if test "$madvise" = "yes" ; then
5215 echo "CONFIG_MADVISE=y" >> $config_host_mak
5217 if test "$posix_madvise" = "yes" ; then
5218 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5220 if test "$sigev_thread_id" = "yes" ; then
5221 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
5224 if test "$spice" = "yes" ; then
5225 echo "CONFIG_SPICE=y" >> $config_host_mak
5228 if test "$smartcard" = "yes" ; then
5229 echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5232 if test "$libusb" = "yes" ; then
5233 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5236 if test "$usb_redir" = "yes" ; then
5237 echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5240 if test "$opengl" = "yes" ; then
5241 echo "CONFIG_OPENGL=y" >> $config_host_mak
5242 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5243 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5244 if test "$opengl_dmabuf" = "yes" ; then
5245 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5249 if test "$avx2_opt" = "yes" ; then
5250 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5253 if test "$lzo" = "yes" ; then
5254 echo "CONFIG_LZO=y" >> $config_host_mak
5257 if test "$snappy" = "yes" ; then
5258 echo "CONFIG_SNAPPY=y" >> $config_host_mak
5261 if test "$bzip2" = "yes" ; then
5262 echo "CONFIG_BZIP2=y" >> $config_host_mak
5263 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5266 if test "$libiscsi" = "yes" ; then
5267 echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5268 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5269 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5272 if test "$libnfs" = "yes" ; then
5273 echo "CONFIG_LIBNFS=y" >> $config_host_mak
5276 if test "$seccomp" = "yes"; then
5277 echo "CONFIG_SECCOMP=y" >> $config_host_mak
5280 # XXX: suppress that
5281 if [ "$bsd" = "yes" ] ; then
5282 echo "CONFIG_BSD=y" >> $config_host_mak
5285 if test "$zero_malloc" = "yes" ; then
5286 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
5288 if test "$localtime_r" = "yes" ; then
5289 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5291 if test "$qom_cast_debug" = "yes" ; then
5292 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5294 if test "$rbd" = "yes" ; then
5295 echo "CONFIG_RBD=m" >> $config_host_mak
5296 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5297 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5300 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5301 if test "$coroutine_pool" = "yes" ; then
5302 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5303 else
5304 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5307 if test "$open_by_handle_at" = "yes" ; then
5308 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5311 if test "$linux_magic_h" = "yes" ; then
5312 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5315 if test "$pragma_diagnostic_available" = "yes" ; then
5316 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5319 if test "$valgrind_h" = "yes" ; then
5320 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5323 if test "$has_environ" = "yes" ; then
5324 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5327 if test "$cpuid_h" = "yes" ; then
5328 echo "CONFIG_CPUID_H=y" >> $config_host_mak
5331 if test "$int128" = "yes" ; then
5332 echo "CONFIG_INT128=y" >> $config_host_mak
5335 if test "$getauxval" = "yes" ; then
5336 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5339 if test "$glusterfs" = "yes" ; then
5340 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5341 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5342 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5345 if test "$glusterfs_discard" = "yes" ; then
5346 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5349 if test "$glusterfs_zerofill" = "yes" ; then
5350 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5353 if test "$archipelago" = "yes" ; then
5354 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5355 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5358 if test "$libssh2" = "yes" ; then
5359 echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5360 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5361 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5364 if test "$vhdx" = "yes" ; then
5365 echo "CONFIG_VHDX=y" >> $config_host_mak
5368 # USB host support
5369 if test "$libusb" = "yes"; then
5370 echo "HOST_USB=libusb legacy" >> $config_host_mak
5371 else
5372 echo "HOST_USB=stub" >> $config_host_mak
5375 # TPM passthrough support?
5376 if test "$tpm" = "yes"; then
5377 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5378 if test "$tpm_passthrough" = "yes"; then
5379 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5383 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5384 if have_backend "nop"; then
5385 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5387 if have_backend "simple"; then
5388 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5389 # Set the appropriate trace file.
5390 trace_file="\"$trace_file-\" FMT_pid"
5392 if have_backend "log"; then
5393 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5395 if have_backend "ust"; then
5396 echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5398 if have_backend "dtrace"; then
5399 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5400 if test "$trace_backend_stap" = "yes" ; then
5401 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5404 if have_backend "ftrace"; then
5405 if test "$linux" = "yes" ; then
5406 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5407 else
5408 feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5411 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5413 if test "$rdma" = "yes" ; then
5414 echo "CONFIG_RDMA=y" >> $config_host_mak
5417 # Hold two types of flag:
5418 # CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
5419 # a thread we have a handle to
5420 # CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
5421 # platform
5422 if test "$pthread_setname_np" = "yes" ; then
5423 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5424 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5427 if test "$tcg_interpreter" = "yes"; then
5428 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5429 elif test "$ARCH" = "sparc64" ; then
5430 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5431 elif test "$ARCH" = "s390x" ; then
5432 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5433 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5434 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5435 elif test "$ARCH" = "ppc64" ; then
5436 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5437 else
5438 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5440 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5442 echo "TOOLS=$tools" >> $config_host_mak
5443 echo "ROMS=$roms" >> $config_host_mak
5444 echo "MAKE=$make" >> $config_host_mak
5445 echo "INSTALL=$install" >> $config_host_mak
5446 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5447 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5448 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5449 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5450 echo "PYTHON=$python" >> $config_host_mak
5451 echo "CC=$cc" >> $config_host_mak
5452 if $iasl -h > /dev/null 2>&1; then
5453 echo "IASL=$iasl" >> $config_host_mak
5455 echo "CC_I386=$cc_i386" >> $config_host_mak
5456 echo "HOST_CC=$host_cc" >> $config_host_mak
5457 echo "CXX=$cxx" >> $config_host_mak
5458 echo "OBJCC=$objcc" >> $config_host_mak
5459 echo "AR=$ar" >> $config_host_mak
5460 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5461 echo "AS=$as" >> $config_host_mak
5462 echo "CPP=$cpp" >> $config_host_mak
5463 echo "OBJCOPY=$objcopy" >> $config_host_mak
5464 echo "LD=$ld" >> $config_host_mak
5465 echo "NM=$nm" >> $config_host_mak
5466 echo "WINDRES=$windres" >> $config_host_mak
5467 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5468 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5469 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5470 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5471 if test "$sparse" = "yes" ; then
5472 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
5473 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
5474 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
5475 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
5476 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5478 if test "$cross_prefix" != ""; then
5479 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
5480 else
5481 echo "AUTOCONF_HOST := " >> $config_host_mak
5483 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5484 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5485 echo "LIBS+=$LIBS" >> $config_host_mak
5486 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5487 echo "EXESUF=$EXESUF" >> $config_host_mak
5488 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5489 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5490 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5491 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5492 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
5493 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5494 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5495 if test "$gcov" = "yes" ; then
5496 echo "CONFIG_GCOV=y" >> $config_host_mak
5497 echo "GCOV=$gcov_tool" >> $config_host_mak
5500 # use included Linux headers
5501 if test "$linux" = "yes" ; then
5502 mkdir -p linux-headers
5503 case "$cpu" in
5504 i386|x86_64|x32)
5505 linux_arch=x86
5507 ppcemb|ppc|ppc64)
5508 linux_arch=powerpc
5510 s390x)
5511 linux_arch=s390
5513 aarch64)
5514 linux_arch=arm64
5516 mips64)
5517 linux_arch=mips
5520 # For most CPUs the kernel architecture name and QEMU CPU name match.
5521 linux_arch="$cpu"
5523 esac
5524 # For non-KVM architectures we will not have asm headers
5525 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5526 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5530 for target in $target_list; do
5531 target_dir="$target"
5532 config_target_mak=$target_dir/config-target.mak
5533 target_name=`echo $target | cut -d '-' -f 1`
5534 target_bigendian="no"
5536 case "$target_name" in
5537 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5538 target_bigendian=yes
5540 esac
5541 target_softmmu="no"
5542 target_user_only="no"
5543 target_linux_user="no"
5544 target_bsd_user="no"
5545 case "$target" in
5546 ${target_name}-softmmu)
5547 target_softmmu="yes"
5549 ${target_name}-linux-user)
5550 if test "$linux" != "yes" ; then
5551 error_exit "Target '$target' is only available on a Linux host"
5553 target_user_only="yes"
5554 target_linux_user="yes"
5556 ${target_name}-bsd-user)
5557 if test "$bsd" != "yes" ; then
5558 error_exit "Target '$target' is only available on a BSD host"
5560 target_user_only="yes"
5561 target_bsd_user="yes"
5564 error_exit "Target '$target' not recognised"
5565 exit 1
5567 esac
5569 mkdir -p $target_dir
5570 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5572 bflt="no"
5573 interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5574 gdb_xml_files=""
5576 TARGET_ARCH="$target_name"
5577 TARGET_BASE_ARCH=""
5578 TARGET_ABI_DIR=""
5580 case "$target_name" in
5581 i386)
5583 x86_64)
5584 TARGET_BASE_ARCH=i386
5586 alpha)
5588 arm|armeb)
5589 TARGET_ARCH=arm
5590 bflt="yes"
5591 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5593 aarch64)
5594 TARGET_BASE_ARCH=arm
5595 bflt="yes"
5596 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5598 cris)
5600 lm32)
5602 m68k)
5603 bflt="yes"
5604 gdb_xml_files="cf-core.xml cf-fp.xml"
5606 microblaze|microblazeel)
5607 TARGET_ARCH=microblaze
5608 bflt="yes"
5610 mips|mipsel)
5611 TARGET_ARCH=mips
5612 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5614 mipsn32|mipsn32el)
5615 TARGET_ARCH=mips64
5616 TARGET_BASE_ARCH=mips
5617 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5618 echo "TARGET_ABI32=y" >> $config_target_mak
5620 mips64|mips64el)
5621 TARGET_ARCH=mips64
5622 TARGET_BASE_ARCH=mips
5623 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5625 moxie)
5627 or32)
5628 TARGET_ARCH=openrisc
5629 TARGET_BASE_ARCH=openrisc
5631 ppc)
5632 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5634 ppcemb)
5635 TARGET_BASE_ARCH=ppc
5636 TARGET_ABI_DIR=ppc
5637 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5639 ppc64)
5640 TARGET_BASE_ARCH=ppc
5641 TARGET_ABI_DIR=ppc
5642 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5644 ppc64le)
5645 TARGET_ARCH=ppc64
5646 TARGET_BASE_ARCH=ppc
5647 TARGET_ABI_DIR=ppc
5648 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5650 ppc64abi32)
5651 TARGET_ARCH=ppc64
5652 TARGET_BASE_ARCH=ppc
5653 TARGET_ABI_DIR=ppc
5654 echo "TARGET_ABI32=y" >> $config_target_mak
5655 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5657 sh4|sh4eb)
5658 TARGET_ARCH=sh4
5659 bflt="yes"
5661 sparc)
5663 sparc64)
5664 TARGET_BASE_ARCH=sparc
5666 sparc32plus)
5667 TARGET_ARCH=sparc64
5668 TARGET_BASE_ARCH=sparc
5669 TARGET_ABI_DIR=sparc
5670 echo "TARGET_ABI32=y" >> $config_target_mak
5672 s390x)
5673 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
5675 tilegx)
5677 tricore)
5679 unicore32)
5681 xtensa|xtensaeb)
5682 TARGET_ARCH=xtensa
5685 error_exit "Unsupported target CPU"
5687 esac
5688 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5689 if [ "$TARGET_BASE_ARCH" = "" ]; then
5690 TARGET_BASE_ARCH=$TARGET_ARCH
5693 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5695 upper() {
5696 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5699 target_arch_name="`upper $TARGET_ARCH`"
5700 echo "TARGET_$target_arch_name=y" >> $config_target_mak
5701 echo "TARGET_NAME=$target_name" >> $config_target_mak
5702 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5703 if [ "$TARGET_ABI_DIR" = "" ]; then
5704 TARGET_ABI_DIR=$TARGET_ARCH
5706 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5707 if [ "$HOST_VARIANT_DIR" != "" ]; then
5708 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5710 case "$target_name" in
5711 i386|x86_64)
5712 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5713 echo "CONFIG_XEN=y" >> $config_target_mak
5714 if test "$xen_pci_passthrough" = yes; then
5715 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5720 esac
5721 case "$target_name" in
5722 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5723 # Make sure the target and host cpus are compatible
5724 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5725 \( "$target_name" = "$cpu" -o \
5726 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5727 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \
5728 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \
5729 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5730 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5731 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \
5732 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \
5733 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \
5734 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then
5735 echo "CONFIG_KVM=y" >> $config_target_mak
5736 if test "$vhost_net" = "yes" ; then
5737 echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5738 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
5741 esac
5742 if test "$target_bigendian" = "yes" ; then
5743 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5745 if test "$target_softmmu" = "yes" ; then
5746 echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5748 if test "$target_user_only" = "yes" ; then
5749 echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5750 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5752 if test "$target_linux_user" = "yes" ; then
5753 echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5755 list=""
5756 if test ! -z "$gdb_xml_files" ; then
5757 for x in $gdb_xml_files; do
5758 list="$list $source_path/gdb-xml/$x"
5759 done
5760 echo "TARGET_XML_FILES=$list" >> $config_target_mak
5763 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5764 echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5766 if test "$target_bsd_user" = "yes" ; then
5767 echo "CONFIG_BSD_USER=y" >> $config_target_mak
5770 # generate QEMU_CFLAGS/LDFLAGS for targets
5772 cflags=""
5773 ldflags=""
5775 disas_config() {
5776 echo "CONFIG_${1}_DIS=y" >> $config_target_mak
5777 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
5780 for i in $ARCH $TARGET_BASE_ARCH ; do
5781 case "$i" in
5782 alpha)
5783 disas_config "ALPHA"
5785 aarch64)
5786 if test -n "${cxx}"; then
5787 disas_config "ARM_A64"
5790 arm)
5791 disas_config "ARM"
5792 if test -n "${cxx}"; then
5793 disas_config "ARM_A64"
5796 cris)
5797 disas_config "CRIS"
5799 hppa)
5800 disas_config "HPPA"
5802 i386|x86_64|x32)
5803 disas_config "I386"
5805 ia64*)
5806 disas_config "IA64"
5808 lm32)
5809 disas_config "LM32"
5811 m68k)
5812 disas_config "M68K"
5814 microblaze*)
5815 disas_config "MICROBLAZE"
5817 mips*)
5818 disas_config "MIPS"
5820 moxie*)
5821 disas_config "MOXIE"
5823 or32)
5824 disas_config "OPENRISC"
5826 ppc*)
5827 disas_config "PPC"
5829 s390*)
5830 disas_config "S390"
5832 sh4)
5833 disas_config "SH4"
5835 sparc*)
5836 disas_config "SPARC"
5838 xtensa*)
5839 disas_config "XTENSA"
5841 esac
5842 done
5843 if test "$tcg_interpreter" = "yes" ; then
5844 disas_config "TCI"
5847 case "$ARCH" in
5848 alpha)
5849 # Ensure there's only a single GP
5850 cflags="-msmall-data $cflags"
5852 esac
5854 if test "$gprof" = "yes" ; then
5855 echo "TARGET_GPROF=yes" >> $config_target_mak
5856 if test "$target_linux_user" = "yes" ; then
5857 cflags="-p $cflags"
5858 ldflags="-p $ldflags"
5860 if test "$target_softmmu" = "yes" ; then
5861 ldflags="-p $ldflags"
5862 echo "GPROF_CFLAGS=-p" >> $config_target_mak
5866 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5867 ldflags="$ldflags $textseg_ldflags"
5870 echo "LDFLAGS+=$ldflags" >> $config_target_mak
5871 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5873 done # for target in $targets
5875 if [ "$pixman" = "internal" ]; then
5876 echo "config-host.h: subdir-pixman" >> $config_host_mak
5879 if [ "$dtc_internal" = "yes" ]; then
5880 echo "config-host.h: subdir-dtc" >> $config_host_mak
5883 if test "$numa" = "yes"; then
5884 echo "CONFIG_NUMA=y" >> $config_host_mak
5887 if test "$ccache_cpp2" = "yes"; then
5888 echo "export CCACHE_CPP2=y" >> $config_host_mak
5891 # build tree in object directory in case the source is not in the current directory
5892 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5893 DIRS="$DIRS fsdev"
5894 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5895 DIRS="$DIRS roms/seabios roms/vgabios"
5896 DIRS="$DIRS qapi-generated"
5897 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5898 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5899 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5900 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5901 FILES="$FILES pc-bios/spapr-rtas/Makefile"
5902 FILES="$FILES pc-bios/s390-ccw/Makefile"
5903 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5904 FILES="$FILES pc-bios/qemu-icon.bmp"
5905 for bios_file in \
5906 $source_path/pc-bios/*.bin \
5907 $source_path/pc-bios/*.aml \
5908 $source_path/pc-bios/*.rom \
5909 $source_path/pc-bios/*.dtb \
5910 $source_path/pc-bios/*.img \
5911 $source_path/pc-bios/openbios-* \
5912 $source_path/pc-bios/u-boot.* \
5913 $source_path/pc-bios/palcode-*
5915 FILES="$FILES pc-bios/`basename $bios_file`"
5916 done
5917 for test_file in `find $source_path/tests/acpi-test-data -type f`
5919 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5920 done
5921 mkdir -p $DIRS
5922 for f in $FILES ; do
5923 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5924 symlink "$source_path/$f" "$f"
5926 done
5928 # temporary config to build submodules
5929 for rom in seabios vgabios ; do
5930 config_mak=roms/$rom/config.mak
5931 echo "# Automatically generated by configure - do not modify" > $config_mak
5932 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5933 echo "AS=$as" >> $config_mak
5934 echo "CC=$cc" >> $config_mak
5935 echo "BCC=bcc" >> $config_mak
5936 echo "CPP=$cpp" >> $config_mak
5937 echo "OBJCOPY=objcopy" >> $config_mak
5938 echo "IASL=$iasl" >> $config_mak
5939 echo "LD=$ld" >> $config_mak
5940 done
5942 # set up qemu-iotests in this build directory
5943 iotests_common_env="tests/qemu-iotests/common.env"
5944 iotests_check="tests/qemu-iotests/check"
5946 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5947 echo >> "$iotests_common_env"
5948 echo "export PYTHON='$python'" >> "$iotests_common_env"
5950 if [ ! -e "$iotests_check" ]; then
5951 symlink "$source_path/$iotests_check" "$iotests_check"
5954 # Save the configure command line for later reuse.
5955 cat <<EOD >config.status
5956 #!/bin/sh
5957 # Generated by configure.
5958 # Run this file to recreate the current configuration.
5959 # Compiler output produced by configure, useful for debugging
5960 # configure, is in config.log if it exists.
5962 printf "exec" >>config.status
5963 printf " '%s'" "$0" "$@" >>config.status
5964 echo ' "$@"' >>config.status
5965 chmod +x config.status
5967 rm -r "$TMPDIR1"