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