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