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