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