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# End of CC checks 4498# After here, no more $cc or $ld runs 4499 4500if test "$gcov" = "yes" ; then 4501 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 4502 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 4503elif test "$fortify_source" = "yes" ; then 4504 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 4505elif test "$debug" = "no"; then 4506 CFLAGS="-O2 $CFLAGS" 4507fi 4508 4509########################################## 4510# Do we have libnfs 4511if test "$libnfs" != "no" ; then 4512 if $pkg_config --atleast-version=1.9.3 libnfs; then 4513 libnfs="yes" 4514 libnfs_libs=$($pkg_config --libs libnfs) 4515 LIBS="$LIBS $libnfs_libs" 4516 else 4517 if test "$libnfs" = "yes" ; then 4518 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 4519 fi 4520 libnfs="no" 4521 fi 4522fi 4523 4524# Disable zero malloc errors for official releases unless explicitly told to 4525# enable/disable 4526if test -z "$zero_malloc" ; then 4527 if test "$z_version" = "50" ; then 4528 zero_malloc="no" 4529 else 4530 zero_malloc="yes" 4531 fi 4532fi 4533 4534# Now we've finished running tests it's OK to add -Werror to the compiler flags 4535if test "$werror" = "yes"; then 4536 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 4537fi 4538 4539if test "$solaris" = "no" ; then 4540 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 4541 LDFLAGS="-Wl,--warn-common $LDFLAGS" 4542 fi 4543fi 4544 4545# test if pod2man has --utf8 option 4546if pod2man --help | grep -q utf8; then 4547 POD2MAN="pod2man --utf8" 4548else 4549 POD2MAN="pod2man" 4550fi 4551 4552# Use ASLR, no-SEH and DEP if available 4553if test "$mingw32" = "yes" ; then 4554 for flag in --dynamicbase --no-seh --nxcompat; do 4555 if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then 4556 LDFLAGS="-Wl,$flag $LDFLAGS" 4557 fi 4558 done 4559fi 4560 4561qemu_confdir=$sysconfdir$confsuffix 4562qemu_moddir=$libdir$confsuffix 4563qemu_datadir=$datadir$confsuffix 4564qemu_localedir="$datadir/locale" 4565 4566tools="" 4567if test "$want_tools" = "yes" ; then 4568 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools" 4569 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 4570 tools="qemu-nbd\$(EXESUF) $tools" 4571 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 4572 fi 4573fi 4574if test "$softmmu" = yes ; then 4575 if test "$virtfs" != no ; then 4576 if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then 4577 virtfs=yes 4578 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 4579 else 4580 if test "$virtfs" = yes; then 4581 error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel" 4582 fi 4583 virtfs=no 4584 fi 4585 fi 4586fi 4587 4588# Probe for guest agent support/options 4589 4590if [ "$guest_agent" != "no" ]; then 4591 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 4592 tools="qemu-ga $tools" 4593 guest_agent=yes 4594 elif [ "$guest_agent" != yes ]; then 4595 guest_agent=no 4596 else 4597 error_exit "Guest agent is not supported on this platform" 4598 fi 4599fi 4600 4601# Guest agent Window MSI package 4602 4603if test "$guest_agent" != yes; then 4604 if test "$guest_agent_msi" = yes; then 4605 error_exit "MSI guest agent package requires guest agent enabled" 4606 fi 4607 guest_agent_msi=no 4608elif test "$mingw32" != "yes"; then 4609 if test "$guest_agent_msi" = "yes"; then 4610 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 4611 fi 4612 guest_agent_msi=no 4613elif ! has wixl; then 4614 if test "$guest_agent_msi" = "yes"; then 4615 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 4616 fi 4617 guest_agent_msi=no 4618else 4619 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 4620 # disabled explicitly 4621 if test "$guest_agent_msi" != "no"; then 4622 guest_agent_msi=yes 4623 fi 4624fi 4625 4626if test "$guest_agent_msi" = "yes"; then 4627 if test "$guest_agent_with_vss" = "yes"; then 4628 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 4629 fi 4630 4631 if test "$QEMU_GA_MANUFACTURER" = ""; then 4632 QEMU_GA_MANUFACTURER=QEMU 4633 fi 4634 4635 if test "$QEMU_GA_DISTRO" = ""; then 4636 QEMU_GA_DISTRO=Linux 4637 fi 4638 4639 if test "$QEMU_GA_VERSION" = ""; then 4640 QEMU_GA_VERSION=`cat $source_path/VERSION` 4641 fi 4642 4643 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin" 4644 4645 case "$cpu" in 4646 x86_64) 4647 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 4648 ;; 4649 i386) 4650 QEMU_GA_MSI_ARCH="-D Arch=32" 4651 ;; 4652 *) 4653 error_exit "CPU $cpu not supported for building installation package" 4654 ;; 4655 esac 4656fi 4657 4658# Mac OS X ships with a broken assembler 4659roms= 4660if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 4661 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 4662 "$softmmu" = yes ; then 4663 roms="optionrom" 4664fi 4665if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 4666 roms="$roms spapr-rtas" 4667fi 4668 4669if test "$cpu" = "s390x" ; then 4670 roms="$roms s390-ccw" 4671fi 4672 4673# Probe for the need for relocating the user-only binary. 4674if test "$pie" = "no" ; then 4675 textseg_addr= 4676 case "$cpu" in 4677 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 4678 # ??? Rationale for choosing this address 4679 textseg_addr=0x60000000 4680 ;; 4681 mips) 4682 # A 256M aligned address, high in the address space, with enough 4683 # room for the code_gen_buffer above it before the stack. 4684 textseg_addr=0x60000000 4685 ;; 4686 esac 4687 if [ -n "$textseg_addr" ]; then 4688 cat > $TMPC <<EOF 4689 int main(void) { return 0; } 4690EOF 4691 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 4692 if ! compile_prog "" "$textseg_ldflags"; then 4693 # In case ld does not support -Ttext-segment, edit the default linker 4694 # script via sed to set the .text start addr. This is needed on FreeBSD 4695 # at least. 4696 $ld --verbose | sed \ 4697 -e '1,/==================================================/d' \ 4698 -e '/==================================================/,$d' \ 4699 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 4700 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 4701 textseg_ldflags="-Wl,-T../config-host.ld" 4702 fi 4703 fi 4704fi 4705 4706# prepend pixman and ftd flags after all config tests are done 4707QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 4708libs_softmmu="$pixman_libs $libs_softmmu" 4709 4710echo "Install prefix $prefix" 4711echo "BIOS directory `eval echo $qemu_datadir`" 4712echo "binary directory `eval echo $bindir`" 4713echo "library directory `eval echo $libdir`" 4714echo "module directory `eval echo $qemu_moddir`" 4715echo "libexec directory `eval echo $libexecdir`" 4716echo "include directory `eval echo $includedir`" 4717echo "config directory `eval echo $sysconfdir`" 4718if test "$mingw32" = "no" ; then 4719echo "local state directory `eval echo $local_statedir`" 4720echo "Manual directory `eval echo $mandir`" 4721echo "ELF interp prefix $interp_prefix" 4722else 4723echo "local state directory queried at runtime" 4724echo "Windows SDK $win_sdk" 4725fi 4726echo "Source path $source_path" 4727echo "C compiler $cc" 4728echo "Host C compiler $host_cc" 4729echo "C++ compiler $cxx" 4730echo "Objective-C compiler $objcc" 4731echo "ARFLAGS $ARFLAGS" 4732echo "CFLAGS $CFLAGS" 4733echo "QEMU_CFLAGS $QEMU_CFLAGS" 4734echo "LDFLAGS $LDFLAGS" 4735echo "make $make" 4736echo "install $install" 4737echo "python $python" 4738if test "$slirp" = "yes" ; then 4739 echo "smbd $smbd" 4740fi 4741echo "module support $modules" 4742echo "host CPU $cpu" 4743echo "host big endian $bigendian" 4744echo "target list $target_list" 4745echo "tcg debug enabled $debug_tcg" 4746echo "gprof enabled $gprof" 4747echo "sparse enabled $sparse" 4748echo "strip binaries $strip_opt" 4749echo "profiler $profiler" 4750echo "static build $static" 4751if test "$darwin" = "yes" ; then 4752 echo "Cocoa support $cocoa" 4753fi 4754echo "pixman $pixman" 4755echo "SDL support $sdl" 4756echo "GTK support $gtk" 4757echo "GTK GL support $gtk_gl" 4758echo "GNUTLS support $gnutls" 4759echo "GNUTLS hash $gnutls_hash" 4760echo "GNUTLS rnd $gnutls_rnd" 4761echo "libgcrypt $gcrypt" 4762echo "libgcrypt kdf $gcrypt_kdf" 4763if test "$nettle" = "yes"; then 4764 echo "nettle $nettle ($nettle_version)" 4765else 4766 echo "nettle $nettle" 4767fi 4768echo "nettle kdf $nettle_kdf" 4769echo "libtasn1 $tasn1" 4770echo "VTE support $vte" 4771echo "curses support $curses" 4772echo "virgl support $virglrenderer" 4773echo "curl support $curl" 4774echo "mingw32 support $mingw32" 4775echo "Audio drivers $audio_drv_list" 4776echo "Block whitelist (rw) $block_drv_rw_whitelist" 4777echo "Block whitelist (ro) $block_drv_ro_whitelist" 4778echo "VirtFS support $virtfs" 4779echo "VNC support $vnc" 4780if test "$vnc" = "yes" ; then 4781 echo "VNC SASL support $vnc_sasl" 4782 echo "VNC JPEG support $vnc_jpeg" 4783 echo "VNC PNG support $vnc_png" 4784fi 4785if test -n "$sparc_cpu"; then 4786 echo "Target Sparc Arch $sparc_cpu" 4787fi 4788echo "xen support $xen" 4789if test "$xen" = "yes" ; then 4790 echo "xen ctrl version $xen_ctrl_version" 4791 echo "pv dom build $xen_pv_domain_build" 4792fi 4793echo "brlapi support $brlapi" 4794echo "bluez support $bluez" 4795echo "Documentation $docs" 4796echo "PIE $pie" 4797echo "vde support $vde" 4798echo "netmap support $netmap" 4799echo "Linux AIO support $linux_aio" 4800echo "ATTR/XATTR support $attr" 4801echo "Install blobs $blobs" 4802echo "KVM support $kvm" 4803echo "RDMA support $rdma" 4804echo "TCG interpreter $tcg_interpreter" 4805echo "fdt support $fdt" 4806echo "preadv support $preadv" 4807echo "fdatasync $fdatasync" 4808echo "madvise $madvise" 4809echo "posix_madvise $posix_madvise" 4810echo "sigev_thread_id $sigev_thread_id" 4811echo "uuid support $uuid" 4812echo "libcap-ng support $cap_ng" 4813echo "vhost-net support $vhost_net" 4814echo "vhost-scsi support $vhost_scsi" 4815echo "Trace backends $trace_backends" 4816if have_backend "simple"; then 4817echo "Trace output file $trace_file-<pid>" 4818fi 4819if test "$spice" = "yes"; then 4820echo "spice support $spice ($spice_protocol_version/$spice_server_version)" 4821else 4822echo "spice support $spice" 4823fi 4824echo "rbd support $rbd" 4825echo "xfsctl support $xfs" 4826echo "smartcard support $smartcard" 4827echo "libusb $libusb" 4828echo "usb net redir $usb_redir" 4829echo "OpenGL support $opengl" 4830echo "OpenGL dmabufs $opengl_dmabuf" 4831echo "libiscsi support $libiscsi" 4832echo "libnfs support $libnfs" 4833echo "build guest agent $guest_agent" 4834echo "QGA VSS support $guest_agent_with_vss" 4835echo "QGA w32 disk info $guest_agent_ntddscsi" 4836echo "QGA MSI support $guest_agent_msi" 4837echo "seccomp support $seccomp" 4838echo "coroutine backend $coroutine" 4839echo "coroutine pool $coroutine_pool" 4840echo "GlusterFS support $glusterfs" 4841echo "Archipelago support $archipelago" 4842echo "gcov $gcov_tool" 4843echo "gcov enabled $gcov" 4844echo "TPM support $tpm" 4845echo "libssh2 support $libssh2" 4846echo "TPM passthrough $tpm_passthrough" 4847echo "QOM debugging $qom_cast_debug" 4848echo "vhdx $vhdx" 4849echo "lzo support $lzo" 4850echo "snappy support $snappy" 4851echo "bzip2 support $bzip2" 4852echo "NUMA host support $numa" 4853echo "tcmalloc support $tcmalloc" 4854echo "jemalloc support $jemalloc" 4855echo "avx2 optimization $avx2_opt" 4856 4857if test "$sdl_too_old" = "yes"; then 4858echo "-> Your SDL version is too old - please upgrade to have SDL support" 4859fi 4860 4861config_host_mak="config-host.mak" 4862 4863echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 4864 4865echo "# Automatically generated by configure - do not modify" > $config_host_mak 4866echo >> $config_host_mak 4867 4868echo all: >> $config_host_mak 4869echo "prefix=$prefix" >> $config_host_mak 4870echo "bindir=$bindir" >> $config_host_mak 4871echo "libdir=$libdir" >> $config_host_mak 4872echo "libexecdir=$libexecdir" >> $config_host_mak 4873echo "includedir=$includedir" >> $config_host_mak 4874echo "mandir=$mandir" >> $config_host_mak 4875echo "sysconfdir=$sysconfdir" >> $config_host_mak 4876echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 4877echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 4878echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 4879echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 4880if test "$mingw32" = "no" ; then 4881 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 4882fi 4883echo "qemu_helperdir=$libexecdir" >> $config_host_mak 4884echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak 4885echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak 4886echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 4887echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 4888 4889echo "ARCH=$ARCH" >> $config_host_mak 4890 4891if test "$debug_tcg" = "yes" ; then 4892 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 4893fi 4894if test "$strip_opt" = "yes" ; then 4895 echo "STRIP=${strip}" >> $config_host_mak 4896fi 4897if test "$bigendian" = "yes" ; then 4898 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 4899fi 4900if test "$mingw32" = "yes" ; then 4901 echo "CONFIG_WIN32=y" >> $config_host_mak 4902 rc_version=`cat $source_path/VERSION` 4903 version_major=${rc_version%%.*} 4904 rc_version=${rc_version#*.} 4905 version_minor=${rc_version%%.*} 4906 rc_version=${rc_version#*.} 4907 version_subminor=${rc_version%%.*} 4908 version_micro=0 4909 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 4910 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 4911 if test "$guest_agent_with_vss" = "yes" ; then 4912 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 4913 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 4914 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 4915 fi 4916 if test "$guest_agent_ntddscsi" = "yes" ; then 4917 echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak 4918 fi 4919 if test "$guest_agent_msi" = "yes"; then 4920 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 4921 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 4922 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 4923 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 4924 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 4925 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 4926 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 4927 fi 4928else 4929 echo "CONFIG_POSIX=y" >> $config_host_mak 4930fi 4931 4932if test "$linux" = "yes" ; then 4933 echo "CONFIG_LINUX=y" >> $config_host_mak 4934fi 4935 4936if test "$darwin" = "yes" ; then 4937 echo "CONFIG_DARWIN=y" >> $config_host_mak 4938fi 4939 4940if test "$aix" = "yes" ; then 4941 echo "CONFIG_AIX=y" >> $config_host_mak 4942fi 4943 4944if test "$solaris" = "yes" ; then 4945 echo "CONFIG_SOLARIS=y" >> $config_host_mak 4946 echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak 4947 if test "$needs_libsunmath" = "yes" ; then 4948 echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak 4949 fi 4950fi 4951if test "$haiku" = "yes" ; then 4952 echo "CONFIG_HAIKU=y" >> $config_host_mak 4953fi 4954if test "$static" = "yes" ; then 4955 echo "CONFIG_STATIC=y" >> $config_host_mak 4956fi 4957if test "$profiler" = "yes" ; then 4958 echo "CONFIG_PROFILER=y" >> $config_host_mak 4959fi 4960if test "$slirp" = "yes" ; then 4961 echo "CONFIG_SLIRP=y" >> $config_host_mak 4962 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 4963fi 4964if test "$vde" = "yes" ; then 4965 echo "CONFIG_VDE=y" >> $config_host_mak 4966fi 4967if test "$netmap" = "yes" ; then 4968 echo "CONFIG_NETMAP=y" >> $config_host_mak 4969fi 4970if test "$l2tpv3" = "yes" ; then 4971 echo "CONFIG_L2TPV3=y" >> $config_host_mak 4972fi 4973if test "$cap_ng" = "yes" ; then 4974 echo "CONFIG_LIBCAP=y" >> $config_host_mak 4975fi 4976echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 4977for drv in $audio_drv_list; do 4978 def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'` 4979 echo "$def=y" >> $config_host_mak 4980done 4981if test "$audio_pt_int" = "yes" ; then 4982 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 4983fi 4984if test "$audio_win_int" = "yes" ; then 4985 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 4986fi 4987echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 4988echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 4989if test "$vnc" = "yes" ; then 4990 echo "CONFIG_VNC=y" >> $config_host_mak 4991fi 4992if test "$vnc_sasl" = "yes" ; then 4993 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 4994fi 4995if test "$vnc_jpeg" = "yes" ; then 4996 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 4997fi 4998if test "$vnc_png" = "yes" ; then 4999 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 5000fi 5001if test "$fnmatch" = "yes" ; then 5002 echo "CONFIG_FNMATCH=y" >> $config_host_mak 5003fi 5004if test "$uuid" = "yes" ; then 5005 echo "CONFIG_UUID=y" >> $config_host_mak 5006fi 5007if test "$xfs" = "yes" ; then 5008 echo "CONFIG_XFS=y" >> $config_host_mak 5009fi 5010qemu_version=`head $source_path/VERSION` 5011echo "VERSION=$qemu_version" >>$config_host_mak 5012echo "PKGVERSION=$pkgversion" >>$config_host_mak 5013echo "SRC_PATH=$source_path" >> $config_host_mak 5014echo "TARGET_DIRS=$target_list" >> $config_host_mak 5015if [ "$docs" = "yes" ] ; then 5016 echo "BUILD_DOCS=yes" >> $config_host_mak 5017fi 5018if test "$modules" = "yes"; then 5019 # $shacmd can generate a hash started with digit, which the compiler doesn't 5020 # like as an symbol. So prefix it with an underscore 5021 echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak 5022 echo "CONFIG_MODULES=y" >> $config_host_mak 5023fi 5024if test "$sdl" = "yes" ; then 5025 echo "CONFIG_SDL=y" >> $config_host_mak 5026 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 5027 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 5028fi 5029if test "$cocoa" = "yes" ; then 5030 echo "CONFIG_COCOA=y" >> $config_host_mak 5031fi 5032if test "$curses" = "yes" ; then 5033 echo "CONFIG_CURSES=y" >> $config_host_mak 5034fi 5035if test "$utimens" = "yes" ; then 5036 echo "CONFIG_UTIMENSAT=y" >> $config_host_mak 5037fi 5038if test "$pipe2" = "yes" ; then 5039 echo "CONFIG_PIPE2=y" >> $config_host_mak 5040fi 5041if test "$accept4" = "yes" ; then 5042 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 5043fi 5044if test "$splice" = "yes" ; then 5045 echo "CONFIG_SPLICE=y" >> $config_host_mak 5046fi 5047if test "$eventfd" = "yes" ; then 5048 echo "CONFIG_EVENTFD=y" >> $config_host_mak 5049fi 5050if test "$memfd" = "yes" ; then 5051 echo "CONFIG_MEMFD=y" >> $config_host_mak 5052fi 5053if test "$fallocate" = "yes" ; then 5054 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 5055fi 5056if test "$fallocate_punch_hole" = "yes" ; then 5057 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 5058fi 5059if test "$fallocate_zero_range" = "yes" ; then 5060 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 5061fi 5062if test "$posix_fallocate" = "yes" ; then 5063 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 5064fi 5065if test "$sync_file_range" = "yes" ; then 5066 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 5067fi 5068if test "$fiemap" = "yes" ; then 5069 echo "CONFIG_FIEMAP=y" >> $config_host_mak 5070fi 5071if test "$dup3" = "yes" ; then 5072 echo "CONFIG_DUP3=y" >> $config_host_mak 5073fi 5074if test "$ppoll" = "yes" ; then 5075 echo "CONFIG_PPOLL=y" >> $config_host_mak 5076fi 5077if test "$prctl_pr_set_timerslack" = "yes" ; then 5078 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 5079fi 5080if test "$epoll" = "yes" ; then 5081 echo "CONFIG_EPOLL=y" >> $config_host_mak 5082fi 5083if test "$epoll_create1" = "yes" ; then 5084 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 5085fi 5086if test "$epoll_pwait" = "yes" ; then 5087 echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak 5088fi 5089if test "$sendfile" = "yes" ; then 5090 echo "CONFIG_SENDFILE=y" >> $config_host_mak 5091fi 5092if test "$timerfd" = "yes" ; then 5093 echo "CONFIG_TIMERFD=y" >> $config_host_mak 5094fi 5095if test "$setns" = "yes" ; then 5096 echo "CONFIG_SETNS=y" >> $config_host_mak 5097fi 5098if test "$inotify" = "yes" ; then 5099 echo "CONFIG_INOTIFY=y" >> $config_host_mak 5100fi 5101if test "$inotify1" = "yes" ; then 5102 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 5103fi 5104if test "$byteswap_h" = "yes" ; then 5105 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 5106fi 5107if test "$bswap_h" = "yes" ; then 5108 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 5109fi 5110if test "$curl" = "yes" ; then 5111 echo "CONFIG_CURL=m" >> $config_host_mak 5112 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 5113 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 5114fi 5115if test "$brlapi" = "yes" ; then 5116 echo "CONFIG_BRLAPI=y" >> $config_host_mak 5117fi 5118if test "$bluez" = "yes" ; then 5119 echo "CONFIG_BLUEZ=y" >> $config_host_mak 5120 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 5121fi 5122if test "$glib_subprocess" = "yes" ; then 5123 echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak 5124fi 5125echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 5126if test "$gtk" = "yes" ; then 5127 echo "CONFIG_GTK=y" >> $config_host_mak 5128 echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak 5129 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 5130 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 5131 if test "$gtk_gl" = "yes" ; then 5132 echo "CONFIG_GTK_GL=y" >> $config_host_mak 5133 fi 5134fi 5135if test "$gnutls" = "yes" ; then 5136 echo "CONFIG_GNUTLS=y" >> $config_host_mak 5137fi 5138if test "$gnutls_hash" = "yes" ; then 5139 echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak 5140fi 5141if test "$gnutls_rnd" = "yes" ; then 5142 echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak 5143fi 5144if test "$gcrypt" = "yes" ; then 5145 echo "CONFIG_GCRYPT=y" >> $config_host_mak 5146 if test "$gcrypt_kdf" = "yes" ; then 5147 echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak 5148 fi 5149fi 5150if test "$nettle" = "yes" ; then 5151 echo "CONFIG_NETTLE=y" >> $config_host_mak 5152 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 5153 if test "$nettle_kdf" = "yes" ; then 5154 echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak 5155 fi 5156fi 5157if test "$tasn1" = "yes" ; then 5158 echo "CONFIG_TASN1=y" >> $config_host_mak 5159fi 5160if test "$have_ifaddrs_h" = "yes" ; then 5161 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 5162fi 5163if test "$vte" = "yes" ; then 5164 echo "CONFIG_VTE=y" >> $config_host_mak 5165 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 5166fi 5167if test "$virglrenderer" = "yes" ; then 5168 echo "CONFIG_VIRGL=y" >> $config_host_mak 5169 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 5170 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 5171fi 5172if test "$xen" = "yes" ; then 5173 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 5174 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 5175 if test "$xen_pv_domain_build" = "yes" ; then 5176 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak 5177 fi 5178fi 5179if test "$linux_aio" = "yes" ; then 5180 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 5181fi 5182if test "$attr" = "yes" ; then 5183 echo "CONFIG_ATTR=y" >> $config_host_mak 5184fi 5185if test "$libattr" = "yes" ; then 5186 echo "CONFIG_LIBATTR=y" >> $config_host_mak 5187fi 5188if test "$virtfs" = "yes" ; then 5189 echo "CONFIG_VIRTFS=y" >> $config_host_mak 5190fi 5191if test "$vhost_scsi" = "yes" ; then 5192 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 5193fi 5194if test "$vhost_net" = "yes" ; then 5195 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 5196fi 5197if test "$blobs" = "yes" ; then 5198 echo "INSTALL_BLOBS=yes" >> $config_host_mak 5199fi 5200if test "$iovec" = "yes" ; then 5201 echo "CONFIG_IOVEC=y" >> $config_host_mak 5202fi 5203if test "$preadv" = "yes" ; then 5204 echo "CONFIG_PREADV=y" >> $config_host_mak 5205fi 5206if test "$fdt" = "yes" ; then 5207 echo "CONFIG_FDT=y" >> $config_host_mak 5208fi 5209if test "$signalfd" = "yes" ; then 5210 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 5211fi 5212if test "$tcg_interpreter" = "yes" ; then 5213 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 5214fi 5215if test "$fdatasync" = "yes" ; then 5216 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 5217fi 5218if test "$madvise" = "yes" ; then 5219 echo "CONFIG_MADVISE=y" >> $config_host_mak 5220fi 5221if test "$posix_madvise" = "yes" ; then 5222 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 5223fi 5224if test "$sigev_thread_id" = "yes" ; then 5225 echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak 5226fi 5227 5228if test "$spice" = "yes" ; then 5229 echo "CONFIG_SPICE=y" >> $config_host_mak 5230fi 5231 5232if test "$smartcard" = "yes" ; then 5233 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 5234fi 5235 5236if test "$libusb" = "yes" ; then 5237 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 5238fi 5239 5240if test "$usb_redir" = "yes" ; then 5241 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 5242fi 5243 5244if test "$opengl" = "yes" ; then 5245 echo "CONFIG_OPENGL=y" >> $config_host_mak 5246 echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak 5247 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 5248 if test "$opengl_dmabuf" = "yes" ; then 5249 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 5250 fi 5251fi 5252 5253if test "$avx2_opt" = "yes" ; then 5254 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 5255fi 5256 5257if test "$lzo" = "yes" ; then 5258 echo "CONFIG_LZO=y" >> $config_host_mak 5259fi 5260 5261if test "$snappy" = "yes" ; then 5262 echo "CONFIG_SNAPPY=y" >> $config_host_mak 5263fi 5264 5265if test "$bzip2" = "yes" ; then 5266 echo "CONFIG_BZIP2=y" >> $config_host_mak 5267 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 5268fi 5269 5270if test "$libiscsi" = "yes" ; then 5271 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 5272 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 5273 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 5274fi 5275 5276if test "$libnfs" = "yes" ; then 5277 echo "CONFIG_LIBNFS=y" >> $config_host_mak 5278fi 5279 5280if test "$seccomp" = "yes"; then 5281 echo "CONFIG_SECCOMP=y" >> $config_host_mak 5282fi 5283 5284# XXX: suppress that 5285if [ "$bsd" = "yes" ] ; then 5286 echo "CONFIG_BSD=y" >> $config_host_mak 5287fi 5288 5289if test "$zero_malloc" = "yes" ; then 5290 echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak 5291fi 5292if test "$localtime_r" = "yes" ; then 5293 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 5294fi 5295if test "$qom_cast_debug" = "yes" ; then 5296 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 5297fi 5298if test "$rbd" = "yes" ; then 5299 echo "CONFIG_RBD=m" >> $config_host_mak 5300 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 5301 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 5302fi 5303 5304echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 5305if test "$coroutine_pool" = "yes" ; then 5306 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 5307else 5308 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 5309fi 5310 5311if test "$open_by_handle_at" = "yes" ; then 5312 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 5313fi 5314 5315if test "$linux_magic_h" = "yes" ; then 5316 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 5317fi 5318 5319if test "$pragma_diagnostic_available" = "yes" ; then 5320 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 5321fi 5322 5323if test "$valgrind_h" = "yes" ; then 5324 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 5325fi 5326 5327if test "$has_environ" = "yes" ; then 5328 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 5329fi 5330 5331if test "$cpuid_h" = "yes" ; then 5332 echo "CONFIG_CPUID_H=y" >> $config_host_mak 5333fi 5334 5335if test "$int128" = "yes" ; then 5336 echo "CONFIG_INT128=y" >> $config_host_mak 5337fi 5338 5339if test "$getauxval" = "yes" ; then 5340 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 5341fi 5342 5343if test "$glusterfs" = "yes" ; then 5344 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 5345 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 5346 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 5347fi 5348 5349if test "$glusterfs_xlator_opt" = "yes" ; then 5350 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 5351fi 5352 5353if test "$glusterfs_discard" = "yes" ; then 5354 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 5355fi 5356 5357if test "$glusterfs_zerofill" = "yes" ; then 5358 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 5359fi 5360 5361if test "$archipelago" = "yes" ; then 5362 echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak 5363 echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak 5364fi 5365 5366if test "$libssh2" = "yes" ; then 5367 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 5368 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 5369 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 5370fi 5371 5372if test "$vhdx" = "yes" ; then 5373 echo "CONFIG_VHDX=y" >> $config_host_mak 5374fi 5375 5376# USB host support 5377if test "$libusb" = "yes"; then 5378 echo "HOST_USB=libusb legacy" >> $config_host_mak 5379else 5380 echo "HOST_USB=stub" >> $config_host_mak 5381fi 5382 5383# TPM passthrough support? 5384if test "$tpm" = "yes"; then 5385 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 5386 if test "$tpm_passthrough" = "yes"; then 5387 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 5388 fi 5389fi 5390 5391echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 5392if have_backend "nop"; then 5393 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 5394fi 5395if have_backend "simple"; then 5396 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 5397 # Set the appropriate trace file. 5398 trace_file="\"$trace_file-\" FMT_pid" 5399fi 5400if have_backend "log"; then 5401 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 5402fi 5403if have_backend "ust"; then 5404 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 5405fi 5406if have_backend "dtrace"; then 5407 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 5408 if test "$trace_backend_stap" = "yes" ; then 5409 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 5410 fi 5411fi 5412if have_backend "ftrace"; then 5413 if test "$linux" = "yes" ; then 5414 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 5415 else 5416 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 5417 fi 5418fi 5419echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 5420 5421if test "$rdma" = "yes" ; then 5422 echo "CONFIG_RDMA=y" >> $config_host_mak 5423fi 5424 5425# Hold two types of flag: 5426# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 5427# a thread we have a handle to 5428# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 5429# platform 5430if test "$pthread_setname_np" = "yes" ; then 5431 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 5432 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 5433fi 5434 5435if test "$tcg_interpreter" = "yes"; then 5436 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 5437elif test "$ARCH" = "sparc64" ; then 5438 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 5439elif test "$ARCH" = "s390x" ; then 5440 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 5441elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 5442 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 5443elif test "$ARCH" = "ppc64" ; then 5444 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 5445else 5446 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 5447fi 5448QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES" 5449 5450echo "TOOLS=$tools" >> $config_host_mak 5451echo "ROMS=$roms" >> $config_host_mak 5452echo "MAKE=$make" >> $config_host_mak 5453echo "INSTALL=$install" >> $config_host_mak 5454echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 5455echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 5456echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 5457echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 5458echo "PYTHON=$python" >> $config_host_mak 5459echo "CC=$cc" >> $config_host_mak 5460if $iasl -h > /dev/null 2>&1; then 5461 echo "IASL=$iasl" >> $config_host_mak 5462fi 5463echo "CC_I386=$cc_i386" >> $config_host_mak 5464echo "HOST_CC=$host_cc" >> $config_host_mak 5465echo "CXX=$cxx" >> $config_host_mak 5466echo "OBJCC=$objcc" >> $config_host_mak 5467echo "AR=$ar" >> $config_host_mak 5468echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 5469echo "AS=$as" >> $config_host_mak 5470echo "CPP=$cpp" >> $config_host_mak 5471echo "OBJCOPY=$objcopy" >> $config_host_mak 5472echo "LD=$ld" >> $config_host_mak 5473echo "NM=$nm" >> $config_host_mak 5474echo "WINDRES=$windres" >> $config_host_mak 5475echo "CFLAGS=$CFLAGS" >> $config_host_mak 5476echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 5477echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 5478echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 5479if test "$sparse" = "yes" ; then 5480 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 5481 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 5482 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 5483 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 5484 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 5485fi 5486if test "$cross_prefix" != ""; then 5487 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 5488else 5489 echo "AUTOCONF_HOST := " >> $config_host_mak 5490fi 5491echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 5492echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 5493echo "LIBS+=$LIBS" >> $config_host_mak 5494echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 5495echo "EXESUF=$EXESUF" >> $config_host_mak 5496echo "DSOSUF=$DSOSUF" >> $config_host_mak 5497echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 5498echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 5499echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 5500echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 5501echo "POD2MAN=$POD2MAN" >> $config_host_mak 5502echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 5503if test "$gcov" = "yes" ; then 5504 echo "CONFIG_GCOV=y" >> $config_host_mak 5505 echo "GCOV=$gcov_tool" >> $config_host_mak 5506fi 5507 5508# use included Linux headers 5509if test "$linux" = "yes" ; then 5510 mkdir -p linux-headers 5511 case "$cpu" in 5512 i386|x86_64|x32) 5513 linux_arch=x86 5514 ;; 5515 ppcemb|ppc|ppc64) 5516 linux_arch=powerpc 5517 ;; 5518 s390x) 5519 linux_arch=s390 5520 ;; 5521 aarch64) 5522 linux_arch=arm64 5523 ;; 5524 mips64) 5525 linux_arch=mips 5526 ;; 5527 *) 5528 # For most CPUs the kernel architecture name and QEMU CPU name match. 5529 linux_arch="$cpu" 5530 ;; 5531 esac 5532 # For non-KVM architectures we will not have asm headers 5533 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 5534 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 5535 fi 5536fi 5537 5538for target in $target_list; do 5539target_dir="$target" 5540config_target_mak=$target_dir/config-target.mak 5541target_name=`echo $target | cut -d '-' -f 1` 5542target_bigendian="no" 5543 5544case "$target_name" in 5545 armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 5546 target_bigendian=yes 5547 ;; 5548esac 5549target_softmmu="no" 5550target_user_only="no" 5551target_linux_user="no" 5552target_bsd_user="no" 5553case "$target" in 5554 ${target_name}-softmmu) 5555 target_softmmu="yes" 5556 ;; 5557 ${target_name}-linux-user) 5558 if test "$linux" != "yes" ; then 5559 error_exit "Target '$target' is only available on a Linux host" 5560 fi 5561 target_user_only="yes" 5562 target_linux_user="yes" 5563 ;; 5564 ${target_name}-bsd-user) 5565 if test "$bsd" != "yes" ; then 5566 error_exit "Target '$target' is only available on a BSD host" 5567 fi 5568 target_user_only="yes" 5569 target_bsd_user="yes" 5570 ;; 5571 *) 5572 error_exit "Target '$target' not recognised" 5573 exit 1 5574 ;; 5575esac 5576 5577mkdir -p $target_dir 5578echo "# Automatically generated by configure - do not modify" > $config_target_mak 5579 5580bflt="no" 5581interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"` 5582gdb_xml_files="" 5583 5584TARGET_ARCH="$target_name" 5585TARGET_BASE_ARCH="" 5586TARGET_ABI_DIR="" 5587 5588case "$target_name" in 5589 i386) 5590 ;; 5591 x86_64) 5592 TARGET_BASE_ARCH=i386 5593 ;; 5594 alpha) 5595 ;; 5596 arm|armeb) 5597 TARGET_ARCH=arm 5598 bflt="yes" 5599 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 5600 ;; 5601 aarch64) 5602 TARGET_BASE_ARCH=arm 5603 bflt="yes" 5604 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 5605 ;; 5606 cris) 5607 ;; 5608 lm32) 5609 ;; 5610 m68k) 5611 bflt="yes" 5612 gdb_xml_files="cf-core.xml cf-fp.xml" 5613 ;; 5614 microblaze|microblazeel) 5615 TARGET_ARCH=microblaze 5616 bflt="yes" 5617 ;; 5618 mips|mipsel) 5619 TARGET_ARCH=mips 5620 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 5621 ;; 5622 mipsn32|mipsn32el) 5623 TARGET_ARCH=mips64 5624 TARGET_BASE_ARCH=mips 5625 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 5626 echo "TARGET_ABI32=y" >> $config_target_mak 5627 ;; 5628 mips64|mips64el) 5629 TARGET_ARCH=mips64 5630 TARGET_BASE_ARCH=mips 5631 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 5632 ;; 5633 moxie) 5634 ;; 5635 or32) 5636 TARGET_ARCH=openrisc 5637 TARGET_BASE_ARCH=openrisc 5638 ;; 5639 ppc) 5640 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5641 ;; 5642 ppcemb) 5643 TARGET_BASE_ARCH=ppc 5644 TARGET_ABI_DIR=ppc 5645 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 5646 ;; 5647 ppc64) 5648 TARGET_BASE_ARCH=ppc 5649 TARGET_ABI_DIR=ppc 5650 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 5651 ;; 5652 ppc64le) 5653 TARGET_ARCH=ppc64 5654 TARGET_BASE_ARCH=ppc 5655 TARGET_ABI_DIR=ppc 5656 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 5657 ;; 5658 ppc64abi32) 5659 TARGET_ARCH=ppc64 5660 TARGET_BASE_ARCH=ppc 5661 TARGET_ABI_DIR=ppc 5662 echo "TARGET_ABI32=y" >> $config_target_mak 5663 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 5664 ;; 5665 sh4|sh4eb) 5666 TARGET_ARCH=sh4 5667 bflt="yes" 5668 ;; 5669 sparc) 5670 ;; 5671 sparc64) 5672 TARGET_BASE_ARCH=sparc 5673 ;; 5674 sparc32plus) 5675 TARGET_ARCH=sparc64 5676 TARGET_BASE_ARCH=sparc 5677 TARGET_ABI_DIR=sparc 5678 echo "TARGET_ABI32=y" >> $config_target_mak 5679 ;; 5680 s390x) 5681 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml" 5682 ;; 5683 tilegx) 5684 ;; 5685 tricore) 5686 ;; 5687 unicore32) 5688 ;; 5689 xtensa|xtensaeb) 5690 TARGET_ARCH=xtensa 5691 ;; 5692 *) 5693 error_exit "Unsupported target CPU" 5694 ;; 5695esac 5696# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 5697if [ "$TARGET_BASE_ARCH" = "" ]; then 5698 TARGET_BASE_ARCH=$TARGET_ARCH 5699fi 5700 5701symlink "$source_path/Makefile.target" "$target_dir/Makefile" 5702 5703upper() { 5704 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 5705} 5706 5707target_arch_name="`upper $TARGET_ARCH`" 5708echo "TARGET_$target_arch_name=y" >> $config_target_mak 5709echo "TARGET_NAME=$target_name" >> $config_target_mak 5710echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 5711if [ "$TARGET_ABI_DIR" = "" ]; then 5712 TARGET_ABI_DIR=$TARGET_ARCH 5713fi 5714echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 5715if [ "$HOST_VARIANT_DIR" != "" ]; then 5716 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 5717fi 5718case "$target_name" in 5719 i386|x86_64) 5720 if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then 5721 echo "CONFIG_XEN=y" >> $config_target_mak 5722 if test "$xen_pci_passthrough" = yes; then 5723 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 5724 fi 5725 fi 5726 ;; 5727 *) 5728esac 5729case "$target_name" in 5730 aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips) 5731 # Make sure the target and host cpus are compatible 5732 if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \ 5733 \( "$target_name" = "$cpu" -o \ 5734 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \ 5735 \( "$target_name" = "ppc64" -a "$cpu" = "ppc" \) -o \ 5736 \( "$target_name" = "ppc" -a "$cpu" = "ppc64" \) -o \ 5737 \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \ 5738 \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \ 5739 \( "$target_name" = "x86_64" -a "$cpu" = "i386" \) -o \ 5740 \( "$target_name" = "i386" -a "$cpu" = "x86_64" \) -o \ 5741 \( "$target_name" = "x86_64" -a "$cpu" = "x32" \) -o \ 5742 \( "$target_name" = "i386" -a "$cpu" = "x32" \) \) ; then 5743 echo "CONFIG_KVM=y" >> $config_target_mak 5744 if test "$vhost_net" = "yes" ; then 5745 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 5746 echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak 5747 fi 5748 fi 5749esac 5750if test "$target_bigendian" = "yes" ; then 5751 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 5752fi 5753if test "$target_softmmu" = "yes" ; then 5754 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 5755fi 5756if test "$target_user_only" = "yes" ; then 5757 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 5758 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 5759fi 5760if test "$target_linux_user" = "yes" ; then 5761 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 5762fi 5763list="" 5764if test ! -z "$gdb_xml_files" ; then 5765 for x in $gdb_xml_files; do 5766 list="$list $source_path/gdb-xml/$x" 5767 done 5768 echo "TARGET_XML_FILES=$list" >> $config_target_mak 5769fi 5770 5771if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 5772 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 5773fi 5774if test "$target_bsd_user" = "yes" ; then 5775 echo "CONFIG_BSD_USER=y" >> $config_target_mak 5776fi 5777 5778# generate QEMU_CFLAGS/LDFLAGS for targets 5779 5780cflags="" 5781ldflags="" 5782 5783disas_config() { 5784 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 5785 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 5786} 5787 5788for i in $ARCH $TARGET_BASE_ARCH ; do 5789 case "$i" in 5790 alpha) 5791 disas_config "ALPHA" 5792 ;; 5793 aarch64) 5794 if test -n "${cxx}"; then 5795 disas_config "ARM_A64" 5796 fi 5797 ;; 5798 arm) 5799 disas_config "ARM" 5800 if test -n "${cxx}"; then 5801 disas_config "ARM_A64" 5802 fi 5803 ;; 5804 cris) 5805 disas_config "CRIS" 5806 ;; 5807 hppa) 5808 disas_config "HPPA" 5809 ;; 5810 i386|x86_64|x32) 5811 disas_config "I386" 5812 ;; 5813 ia64*) 5814 disas_config "IA64" 5815 ;; 5816 lm32) 5817 disas_config "LM32" 5818 ;; 5819 m68k) 5820 disas_config "M68K" 5821 ;; 5822 microblaze*) 5823 disas_config "MICROBLAZE" 5824 ;; 5825 mips*) 5826 disas_config "MIPS" 5827 ;; 5828 moxie*) 5829 disas_config "MOXIE" 5830 ;; 5831 or32) 5832 disas_config "OPENRISC" 5833 ;; 5834 ppc*) 5835 disas_config "PPC" 5836 ;; 5837 s390*) 5838 disas_config "S390" 5839 ;; 5840 sh4) 5841 disas_config "SH4" 5842 ;; 5843 sparc*) 5844 disas_config "SPARC" 5845 ;; 5846 xtensa*) 5847 disas_config "XTENSA" 5848 ;; 5849 esac 5850done 5851if test "$tcg_interpreter" = "yes" ; then 5852 disas_config "TCI" 5853fi 5854 5855case "$ARCH" in 5856alpha) 5857 # Ensure there's only a single GP 5858 cflags="-msmall-data $cflags" 5859;; 5860esac 5861 5862if test "$gprof" = "yes" ; then 5863 echo "TARGET_GPROF=yes" >> $config_target_mak 5864 if test "$target_linux_user" = "yes" ; then 5865 cflags="-p $cflags" 5866 ldflags="-p $ldflags" 5867 fi 5868 if test "$target_softmmu" = "yes" ; then 5869 ldflags="-p $ldflags" 5870 echo "GPROF_CFLAGS=-p" >> $config_target_mak 5871 fi 5872fi 5873 5874if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 5875 ldflags="$ldflags $textseg_ldflags" 5876fi 5877 5878echo "LDFLAGS+=$ldflags" >> $config_target_mak 5879echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 5880 5881done # for target in $targets 5882 5883if [ "$pixman" = "internal" ]; then 5884 echo "config-host.h: subdir-pixman" >> $config_host_mak 5885fi 5886 5887if [ "$dtc_internal" = "yes" ]; then 5888 echo "config-host.h: subdir-dtc" >> $config_host_mak 5889fi 5890 5891if test "$numa" = "yes"; then 5892 echo "CONFIG_NUMA=y" >> $config_host_mak 5893fi 5894 5895if test "$ccache_cpp2" = "yes"; then 5896 echo "export CCACHE_CPP2=y" >> $config_host_mak 5897fi 5898 5899# build tree in object directory in case the source is not in the current directory 5900DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests" 5901DIRS="$DIRS fsdev" 5902DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 5903DIRS="$DIRS roms/seabios roms/vgabios" 5904DIRS="$DIRS qapi-generated" 5905FILES="Makefile tests/tcg/Makefile qdict-test-data.txt" 5906FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 5907FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 5908FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps" 5909FILES="$FILES pc-bios/spapr-rtas/Makefile" 5910FILES="$FILES pc-bios/s390-ccw/Makefile" 5911FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile" 5912FILES="$FILES pc-bios/qemu-icon.bmp" 5913for bios_file in \ 5914 $source_path/pc-bios/*.bin \ 5915 $source_path/pc-bios/*.aml \ 5916 $source_path/pc-bios/*.rom \ 5917 $source_path/pc-bios/*.dtb \ 5918 $source_path/pc-bios/*.img \ 5919 $source_path/pc-bios/openbios-* \ 5920 $source_path/pc-bios/u-boot.* \ 5921 $source_path/pc-bios/palcode-* 5922do 5923 FILES="$FILES pc-bios/`basename $bios_file`" 5924done 5925for test_file in `find $source_path/tests/acpi-test-data -type f` 5926do 5927 FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`" 5928done 5929mkdir -p $DIRS 5930for f in $FILES ; do 5931 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 5932 symlink "$source_path/$f" "$f" 5933 fi 5934done 5935 5936# temporary config to build submodules 5937for rom in seabios vgabios ; do 5938 config_mak=roms/$rom/config.mak 5939 echo "# Automatically generated by configure - do not modify" > $config_mak 5940 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 5941 echo "AS=$as" >> $config_mak 5942 echo "CC=$cc" >> $config_mak 5943 echo "BCC=bcc" >> $config_mak 5944 echo "CPP=$cpp" >> $config_mak 5945 echo "OBJCOPY=objcopy" >> $config_mak 5946 echo "IASL=$iasl" >> $config_mak 5947 echo "LD=$ld" >> $config_mak 5948done 5949 5950# set up qemu-iotests in this build directory 5951iotests_common_env="tests/qemu-iotests/common.env" 5952iotests_check="tests/qemu-iotests/check" 5953 5954echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 5955echo >> "$iotests_common_env" 5956echo "export PYTHON='$python'" >> "$iotests_common_env" 5957 5958if [ ! -e "$iotests_check" ]; then 5959 symlink "$source_path/$iotests_check" "$iotests_check" 5960fi 5961 5962# Save the configure command line for later reuse. 5963cat <<EOD >config.status 5964#!/bin/sh 5965# Generated by configure. 5966# Run this file to recreate the current configuration. 5967# Compiler output produced by configure, useful for debugging 5968# configure, is in config.log if it exists. 5969EOD 5970printf "exec" >>config.status 5971printf " '%s'" "$0" "$@" >>config.status 5972echo ' "$@"' >>config.status 5973chmod +x config.status 5974 5975rm -r "$TMPDIR1" 5976