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