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