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