1#!/bin/sh 2# 3# qemu configure script (c) 2003 Fabrice Bellard 4# 5 6# Unset some variables known to interfere with behavior of common tools, 7# just as autoconf does. 8CLICOLOR_FORCE= GREP_OPTIONS= 9unset CLICOLOR_FORCE GREP_OPTIONS 10 11# Don't allow CCACHE, if present, to use cached results of compile tests! 12export CCACHE_RECACHE=yes 13 14# Temporary directory used for files created while 15# configure runs. Since it is in the build directory 16# we can safely blow away any previous version of it 17# (and we need not jump through hoops to try to delete 18# it when configure exits.) 19TMPDIR1="config-temp" 20rm -rf "${TMPDIR1}" 21mkdir -p "${TMPDIR1}" 22if [ $? -ne 0 ]; then 23 echo "ERROR: failed to create temporary directory" 24 exit 1 25fi 26 27TMPB="qemu-conf" 28TMPC="${TMPDIR1}/${TMPB}.c" 29TMPO="${TMPDIR1}/${TMPB}.o" 30TMPCXX="${TMPDIR1}/${TMPB}.cxx" 31TMPE="${TMPDIR1}/${TMPB}.exe" 32TMPMO="${TMPDIR1}/${TMPB}.mo" 33 34rm -f config.log 35 36# Print a helpful header at the top of config.log 37echo "# QEMU configure log $(date)" >> config.log 38printf "# Configured with:" >> config.log 39printf " '%s'" "$0" "$@" >> config.log 40echo >> config.log 41echo "#" >> config.log 42 43print_error() { 44 (echo 45 echo "ERROR: $1" 46 while test -n "$2"; do 47 echo " $2" 48 shift 49 done 50 echo) >&2 51} 52 53error_exit() { 54 print_error "$@" 55 exit 1 56} 57 58do_compiler() { 59 # Run the compiler, capturing its output to the log. First argument 60 # is compiler binary to execute. 61 local compiler="$1" 62 shift 63 if test -n "$BASH_VERSION"; then eval ' 64 echo >>config.log " 65funcs: ${FUNCNAME[*]} 66lines: ${BASH_LINENO[*]}" 67 '; fi 68 echo $compiler "$@" >> config.log 69 $compiler "$@" >> config.log 2>&1 || return $? 70 # Test passed. If this is an --enable-werror build, rerun 71 # the test with -Werror and bail out if it fails. This 72 # makes warning-generating-errors in configure test code 73 # obvious to developers. 74 if test "$werror" != "yes"; then 75 return 0 76 fi 77 # Don't bother rerunning the compile if we were already using -Werror 78 case "$*" in 79 *-Werror*) 80 return 0 81 ;; 82 esac 83 echo $compiler -Werror "$@" >> config.log 84 $compiler -Werror "$@" >> config.log 2>&1 && return $? 85 error_exit "configure test passed without -Werror but failed with -Werror." \ 86 "This is probably a bug in the configure script. The failing command" \ 87 "will be at the bottom of config.log." \ 88 "You can run configure with --disable-werror to bypass this check." 89} 90 91do_cc() { 92 do_compiler "$cc" "$@" 93} 94 95do_cxx() { 96 do_compiler "$cxx" "$@" 97} 98 99update_cxxflags() { 100 # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those 101 # options which some versions of GCC's C++ compiler complain about 102 # because they only make sense for C programs. 103 QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS" 104 105 for arg in $QEMU_CFLAGS; do 106 case $arg in 107 -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ 108 -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls) 109 ;; 110 *) 111 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg 112 ;; 113 esac 114 done 115} 116 117compile_object() { 118 local_cflags="$1" 119 do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC 120} 121 122compile_prog() { 123 local_cflags="$1" 124 local_ldflags="$2" 125 do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags 126} 127 128# symbolically link $1 to $2. Portable version of "ln -sf". 129symlink() { 130 rm -rf "$2" 131 mkdir -p "$(dirname "$2")" 132 ln -s "$1" "$2" 133} 134 135# check whether a command is available to this shell (may be either an 136# executable or a builtin) 137has() { 138 type "$1" >/dev/null 2>&1 139} 140 141# search for an executable in PATH 142path_of() { 143 local_command="$1" 144 local_ifs="$IFS" 145 local_dir="" 146 147 # pathname has a dir component? 148 if [ "${local_command#*/}" != "$local_command" ]; then 149 if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then 150 echo "$local_command" 151 return 0 152 fi 153 fi 154 if [ -z "$local_command" ]; then 155 return 1 156 fi 157 158 IFS=: 159 for local_dir in $PATH; do 160 if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then 161 echo "$local_dir/$local_command" 162 IFS="${local_ifs:-$(printf ' \t\n')}" 163 return 0 164 fi 165 done 166 # not found 167 IFS="${local_ifs:-$(printf ' \t\n')}" 168 return 1 169} 170 171have_backend () { 172 echo "$trace_backends" | grep "$1" >/dev/null 173} 174 175glob() { 176 eval test -z '"${1#'"$2"'}"' 177} 178 179supported_hax_target() { 180 test "$hax" = "yes" || return 1 181 glob "$1" "*-softmmu" || return 1 182 case "${1%-softmmu}" in 183 i386|x86_64) 184 return 0 185 ;; 186 esac 187 return 1 188} 189 190supported_kvm_target() { 191 test "$kvm" = "yes" || return 1 192 glob "$1" "*-softmmu" || return 1 193 case "${1%-softmmu}:$cpu" in 194 arm:arm | aarch64:aarch64 | \ 195 i386:i386 | i386:x86_64 | i386:x32 | \ 196 x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \ 197 mips:mips | mipsel:mips | \ 198 ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | \ 199 s390x:s390x) 200 return 0 201 ;; 202 esac 203 return 1 204} 205 206supported_xen_target() { 207 test "$xen" = "yes" || return 1 208 glob "$1" "*-softmmu" || return 1 209 # Only i386 and x86_64 provide the xenpv machine. 210 case "${1%-softmmu}" in 211 i386|x86_64) 212 return 0 213 ;; 214 esac 215 return 1 216} 217 218supported_hvf_target() { 219 test "$hvf" = "yes" || return 1 220 glob "$1" "*-softmmu" || return 1 221 case "${1%-softmmu}" in 222 x86_64) 223 return 0 224 ;; 225 esac 226 return 1 227} 228 229supported_whpx_target() { 230 test "$whpx" = "yes" || return 1 231 glob "$1" "*-softmmu" || return 1 232 case "${1%-softmmu}" in 233 i386|x86_64) 234 return 0 235 ;; 236 esac 237 return 1 238} 239 240supported_target() { 241 case "$1" in 242 *-softmmu) 243 ;; 244 *-linux-user) 245 if test "$linux" != "yes"; then 246 print_error "Target '$target' is only available on a Linux host" 247 return 1 248 fi 249 ;; 250 *-bsd-user) 251 if test "$bsd" != "yes"; then 252 print_error "Target '$target' is only available on a BSD host" 253 return 1 254 fi 255 ;; 256 *) 257 print_error "Invalid target name '$target'" 258 return 1 259 ;; 260 esac 261 test "$tcg" = "yes" && return 0 262 supported_kvm_target "$1" && return 0 263 supported_xen_target "$1" && return 0 264 supported_hax_target "$1" && return 0 265 supported_hvf_target "$1" && return 0 266 supported_whpx_target "$1" && return 0 267 print_error "TCG disabled, but hardware accelerator not available for '$target'" 268 return 1 269} 270 271 272ld_has() { 273 $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1 274} 275 276# default parameters 277source_path=$(dirname "$0") 278cpu="" 279iasl="iasl" 280interp_prefix="/usr/gnemul/qemu-%M" 281static="no" 282cross_prefix="" 283audio_drv_list="" 284block_drv_rw_whitelist="" 285block_drv_ro_whitelist="" 286host_cc="cc" 287libs_softmmu="" 288libs_tools="" 289audio_pt_int="" 290audio_win_int="" 291libs_qga="" 292debug_info="yes" 293stack_protector="" 294 295if test -e "$source_path/.git" 296then 297 git_update=yes 298 git_submodules="ui/keycodemapdb" 299 git_submodules="$git_submodules tests/fp/berkeley-testfloat-3" 300 git_submodules="$git_submodules tests/fp/berkeley-softfloat-3" 301else 302 git_update=no 303 git_submodules="" 304 305 if ! test -f "$source_path/ui/keycodemapdb/README" 306 then 307 echo 308 echo "ERROR: missing file $source_path/ui/keycodemapdb/README" 309 echo 310 echo "This is not a GIT checkout but module content appears to" 311 echo "be missing. Do not use 'git archive' or GitHub download links" 312 echo "to acquire QEMU source archives. Non-GIT builds are only" 313 echo "supported with source archives linked from:" 314 echo 315 echo " https://www.qemu.org/download/" 316 echo 317 echo "Developers working with GIT can use scripts/archive-source.sh" 318 echo "if they need to create valid source archives." 319 echo 320 exit 1 321 fi 322fi 323git="git" 324 325# Don't accept a target_list environment variable. 326unset target_list 327 328# Default value for a variable defining feature "foo". 329# * foo="no" feature will only be used if --enable-foo arg is given 330# * foo="" feature will be searched for, and if found, will be used 331# unless --disable-foo is given 332# * foo="yes" this value will only be set by --enable-foo flag. 333# feature will searched for, 334# if not found, configure exits with error 335# 336# Always add --enable-foo and --disable-foo command line args. 337# Distributions want to ensure that several features are compiled in, and it 338# is impossible without a --enable-foo that exits if a feature is not found. 339 340bluez="" 341brlapi="" 342curl="" 343curses="" 344docs="" 345fdt="" 346netmap="no" 347sdl="" 348sdlabi="" 349virtfs="" 350mpath="" 351vnc="yes" 352sparse="no" 353vde="" 354vnc_sasl="" 355vnc_jpeg="" 356vnc_png="" 357xkbcommon="" 358xen="" 359xen_ctrl_version="" 360xen_pv_domain_build="no" 361xen_pci_passthrough="" 362linux_aio="" 363cap_ng="" 364attr="" 365libattr="" 366xfs="" 367tcg="yes" 368membarrier="" 369vhost_net="no" 370vhost_crypto="no" 371vhost_scsi="no" 372vhost_vsock="no" 373vhost_user="" 374kvm="no" 375hax="no" 376hvf="no" 377whpx="no" 378rdma="" 379pvrdma="" 380gprof="no" 381debug_tcg="no" 382debug="no" 383sanitizers="no" 384fortify_source="" 385strip_opt="yes" 386tcg_interpreter="no" 387bigendian="no" 388mingw32="no" 389gcov="no" 390gcov_tool="gcov" 391EXESUF="" 392DSOSUF=".so" 393LDFLAGS_SHARED="-shared" 394modules="no" 395prefix="/usr/local" 396mandir="\${prefix}/share/man" 397datadir="\${prefix}/share" 398firmwarepath="\${prefix}/share/qemu-firmware" 399qemu_docdir="\${prefix}/share/doc/qemu" 400bindir="\${prefix}/bin" 401libdir="\${prefix}/lib" 402libexecdir="\${prefix}/libexec" 403includedir="\${prefix}/include" 404sysconfdir="\${prefix}/etc" 405local_statedir="\${prefix}/var" 406confsuffix="/qemu" 407slirp="yes" 408oss_lib="" 409bsd="no" 410linux="no" 411solaris="no" 412profiler="no" 413cocoa="no" 414softmmu="yes" 415linux_user="no" 416bsd_user="no" 417blobs="yes" 418pkgversion="" 419pie="" 420qom_cast_debug="yes" 421trace_backends="log" 422trace_file="trace" 423spice="" 424rbd="" 425smartcard="" 426libusb="" 427usb_redir="" 428opengl="" 429opengl_dmabuf="no" 430cpuid_h="no" 431avx2_opt="" 432zlib="yes" 433capstone="" 434lzo="" 435snappy="" 436bzip2="" 437guest_agent="" 438guest_agent_with_vss="no" 439guest_agent_ntddscsi="no" 440guest_agent_msi="" 441vss_win32_sdk="" 442win_sdk="no" 443want_tools="yes" 444libiscsi="" 445libnfs="" 446coroutine="" 447coroutine_pool="" 448debug_stack_usage="no" 449crypto_afalg="no" 450seccomp="" 451glusterfs="" 452glusterfs_xlator_opt="no" 453glusterfs_discard="no" 454glusterfs_fallocate="no" 455glusterfs_zerofill="no" 456gtk="" 457gtk_gl="no" 458tls_priority="NORMAL" 459gnutls="" 460nettle="" 461gcrypt="" 462gcrypt_hmac="no" 463vte="" 464virglrenderer="" 465tpm="yes" 466libssh2="" 467live_block_migration="yes" 468numa="" 469tcmalloc="no" 470jemalloc="no" 471replication="yes" 472vxhs="" 473bochs="yes" 474cloop="yes" 475dmg="yes" 476qcow1="yes" 477vdi="yes" 478vvfat="yes" 479qed="yes" 480parallels="yes" 481sheepdog="yes" 482libxml2="" 483docker="no" 484debug_mutex="no" 485libpmem="" 486libudev="no" 487 488# cross compilers defaults, can be overridden with --cross-cc-ARCH 489cross_cc_aarch64="aarch64-linux-gnu-gcc" 490cross_cc_aarch64_be="$cross_cc_aarch64" 491cross_cc_cflags_aarch64_be="-mbig-endian" 492cross_cc_arm="arm-linux-gnueabihf-gcc" 493cross_cc_cflags_armeb="-mbig-endian" 494cross_cc_i386="i386-pc-linux-gnu-gcc" 495cross_cc_cflags_i386="" 496cross_cc_powerpc="powerpc-linux-gnu-gcc" 497cross_cc_powerpc="powerpc-linux-gnu-gcc" 498 499enabled_cross_compilers="" 500 501supported_cpu="no" 502supported_os="no" 503bogus_os="no" 504malloc_trim="" 505 506# parse CC options first 507for opt do 508 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 509 case "$opt" in 510 --cross-prefix=*) cross_prefix="$optarg" 511 ;; 512 --cc=*) CC="$optarg" 513 ;; 514 --cxx=*) CXX="$optarg" 515 ;; 516 --source-path=*) source_path="$optarg" 517 ;; 518 --cpu=*) cpu="$optarg" 519 ;; 520 --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg" 521 ;; 522 --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg" 523 ;; 524 --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg" 525 EXTRA_LDFLAGS="$optarg" 526 ;; 527 --enable-debug-info) debug_info="yes" 528 ;; 529 --disable-debug-info) debug_info="no" 530 ;; 531 --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" 532 ;; 533 --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*} 534 eval "cross_cc_cflags_${cc_arch}=\$optarg" 535 ;; 536 --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} 537 eval "cross_cc_${cc_arch}=\$optarg" 538 ;; 539 esac 540done 541# OS specific 542# Using uname is really, really broken. Once we have the right set of checks 543# we can eliminate its usage altogether. 544 545# Preferred compiler: 546# ${CC} (if set) 547# ${cross_prefix}gcc (if cross-prefix specified) 548# system compiler 549if test -z "${CC}${cross_prefix}"; then 550 cc="$host_cc" 551else 552 cc="${CC-${cross_prefix}gcc}" 553fi 554 555if test -z "${CXX}${cross_prefix}"; then 556 cxx="c++" 557else 558 cxx="${CXX-${cross_prefix}g++}" 559fi 560 561ar="${AR-${cross_prefix}ar}" 562as="${AS-${cross_prefix}as}" 563ccas="${CCAS-$cc}" 564cpp="${CPP-$cc -E}" 565objcopy="${OBJCOPY-${cross_prefix}objcopy}" 566ld="${LD-${cross_prefix}ld}" 567ranlib="${RANLIB-${cross_prefix}ranlib}" 568nm="${NM-${cross_prefix}nm}" 569strip="${STRIP-${cross_prefix}strip}" 570windres="${WINDRES-${cross_prefix}windres}" 571pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" 572query_pkg_config() { 573 "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" 574} 575pkg_config=query_pkg_config 576sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}" 577sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}" 578 579# If the user hasn't specified ARFLAGS, default to 'rv', just as make does. 580ARFLAGS="${ARFLAGS-rv}" 581 582# default flags for all hosts 583# We use -fwrapv to tell the compiler that we require a C dialect where 584# left shift of signed integers is well defined and has the expected 585# 2s-complement style results. (Both clang and gcc agree that it 586# provides these semantics.) 587QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS" 588QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" 589QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" 590QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" 591QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include" 592if test "$debug_info" = "yes"; then 593 CFLAGS="-g $CFLAGS" 594 LDFLAGS="-g $LDFLAGS" 595fi 596 597# make source path absolute 598source_path=$(cd "$source_path"; pwd) 599 600# running configure in the source tree? 601# we know that's the case if configure is there. 602if test -f "./configure"; then 603 pwd_is_source_path="y" 604else 605 pwd_is_source_path="n" 606fi 607 608check_define() { 609cat > $TMPC <<EOF 610#if !defined($1) 611#error $1 not defined 612#endif 613int main(void) { return 0; } 614EOF 615 compile_object 616} 617 618check_include() { 619cat > $TMPC <<EOF 620#include <$1> 621int main(void) { return 0; } 622EOF 623 compile_object 624} 625 626write_c_skeleton() { 627 cat > $TMPC <<EOF 628int main(void) { return 0; } 629EOF 630} 631 632if check_define __linux__ ; then 633 targetos="Linux" 634elif check_define _WIN32 ; then 635 targetos='MINGW32' 636elif check_define __OpenBSD__ ; then 637 targetos='OpenBSD' 638elif check_define __sun__ ; then 639 targetos='SunOS' 640elif check_define __HAIKU__ ; then 641 targetos='Haiku' 642elif check_define __FreeBSD__ ; then 643 targetos='FreeBSD' 644elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then 645 targetos='GNU/kFreeBSD' 646elif check_define __DragonFly__ ; then 647 targetos='DragonFly' 648elif check_define __NetBSD__; then 649 targetos='NetBSD' 650elif check_define __APPLE__; then 651 targetos='Darwin' 652else 653 # This is a fatal error, but don't report it yet, because we 654 # might be going to just print the --help text, or it might 655 # be the result of a missing compiler. 656 targetos='bogus' 657 bogus_os='yes' 658fi 659 660# Some host OSes need non-standard checks for which CPU to use. 661# Note that these checks are broken for cross-compilation: if you're 662# cross-compiling to one of these OSes then you'll need to specify 663# the correct CPU with the --cpu option. 664case $targetos in 665Darwin) 666 # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can 667 # run 64-bit userspace code. 668 # If the user didn't specify a CPU explicitly and the kernel says this is 669 # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code. 670 if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then 671 cpu="x86_64" 672 fi 673 ;; 674SunOS) 675 # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo 676 if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then 677 cpu="x86_64" 678 fi 679esac 680 681if test ! -z "$cpu" ; then 682 # command line argument 683 : 684elif check_define __i386__ ; then 685 cpu="i386" 686elif check_define __x86_64__ ; then 687 if check_define __ILP32__ ; then 688 cpu="x32" 689 else 690 cpu="x86_64" 691 fi 692elif check_define __sparc__ ; then 693 if check_define __arch64__ ; then 694 cpu="sparc64" 695 else 696 cpu="sparc" 697 fi 698elif check_define _ARCH_PPC ; then 699 if check_define _ARCH_PPC64 ; then 700 cpu="ppc64" 701 else 702 cpu="ppc" 703 fi 704elif check_define __mips__ ; then 705 cpu="mips" 706elif check_define __s390__ ; then 707 if check_define __s390x__ ; then 708 cpu="s390x" 709 else 710 cpu="s390" 711 fi 712elif check_define __arm__ ; then 713 cpu="arm" 714elif check_define __aarch64__ ; then 715 cpu="aarch64" 716else 717 cpu=$(uname -m) 718fi 719 720ARCH= 721# Normalise host CPU name and set ARCH. 722# Note that this case should only have supported host CPUs, not guests. 723case "$cpu" in 724 ppc|ppc64|s390|s390x|sparc64|x32) 725 cpu="$cpu" 726 supported_cpu="yes" 727 eval "cross_cc_${cpu}=\$host_cc" 728 ;; 729 i386|i486|i586|i686|i86pc|BePC) 730 cpu="i386" 731 supported_cpu="yes" 732 cross_cc_i386=$host_cc 733 ;; 734 x86_64|amd64) 735 cpu="x86_64" 736 supported_cpu="yes" 737 cross_cc_x86_64=$host_cc 738 ;; 739 armv*b|armv*l|arm) 740 cpu="arm" 741 supported_cpu="yes" 742 cross_cc_arm=$host_cc 743 ;; 744 aarch64) 745 cpu="aarch64" 746 supported_cpu="yes" 747 cross_cc_aarch64=$host_cc 748 ;; 749 mips*) 750 cpu="mips" 751 supported_cpu="yes" 752 cross_cc_mips=$host_cc 753 ;; 754 sparc|sun4[cdmuv]) 755 cpu="sparc" 756 supported_cpu="yes" 757 cross_cc_sparc=$host_cc 758 ;; 759 *) 760 # This will result in either an error or falling back to TCI later 761 ARCH=unknown 762 ;; 763esac 764if test -z "$ARCH"; then 765 ARCH="$cpu" 766fi 767 768# OS specific 769 770# host *BSD for user mode 771HOST_VARIANT_DIR="" 772 773case $targetos in 774MINGW32*) 775 mingw32="yes" 776 hax="yes" 777 audio_possible_drivers="dsound sdl" 778 if check_include dsound.h; then 779 audio_drv_list="dsound" 780 else 781 audio_drv_list="" 782 fi 783 supported_os="yes" 784;; 785GNU/kFreeBSD) 786 bsd="yes" 787 audio_drv_list="oss" 788 audio_possible_drivers="oss sdl pa" 789;; 790FreeBSD) 791 bsd="yes" 792 make="${MAKE-gmake}" 793 audio_drv_list="oss" 794 audio_possible_drivers="oss sdl pa" 795 # needed for kinfo_getvmmap(3) in libutil.h 796 LIBS="-lutil $LIBS" 797 # needed for kinfo_getproc 798 libs_qga="-lutil $libs_qga" 799 netmap="" # enable netmap autodetect 800 HOST_VARIANT_DIR="freebsd" 801 supported_os="yes" 802;; 803DragonFly) 804 bsd="yes" 805 make="${MAKE-gmake}" 806 audio_drv_list="oss" 807 audio_possible_drivers="oss sdl pa" 808 HOST_VARIANT_DIR="dragonfly" 809;; 810NetBSD) 811 bsd="yes" 812 make="${MAKE-gmake}" 813 audio_drv_list="oss" 814 audio_possible_drivers="oss sdl" 815 oss_lib="-lossaudio" 816 HOST_VARIANT_DIR="netbsd" 817 supported_os="yes" 818;; 819OpenBSD) 820 bsd="yes" 821 make="${MAKE-gmake}" 822 audio_drv_list="sdl" 823 audio_possible_drivers="sdl" 824 HOST_VARIANT_DIR="openbsd" 825 supported_os="yes" 826;; 827Darwin) 828 bsd="yes" 829 darwin="yes" 830 hax="yes" 831 hvf="yes" 832 LDFLAGS_SHARED="-bundle -undefined dynamic_lookup" 833 if [ "$cpu" = "x86_64" ] ; then 834 QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS" 835 LDFLAGS="-arch x86_64 $LDFLAGS" 836 fi 837 cocoa="yes" 838 audio_drv_list="coreaudio" 839 audio_possible_drivers="coreaudio sdl" 840 LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS" 841 libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu" 842 # Disable attempts to use ObjectiveC features in os/object.h since they 843 # won't work when we're compiling with gcc as a C compiler. 844 QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS" 845 HOST_VARIANT_DIR="darwin" 846 supported_os="yes" 847;; 848SunOS) 849 solaris="yes" 850 make="${MAKE-gmake}" 851 install="${INSTALL-ginstall}" 852 smbd="${SMBD-/usr/sfw/sbin/smbd}" 853 if test -f /usr/include/sys/soundcard.h ; then 854 audio_drv_list="oss" 855 fi 856 audio_possible_drivers="oss sdl" 857# needed for CMSG_ macros in sys/socket.h 858 QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS" 859# needed for TIOCWIN* defines in termios.h 860 QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS" 861 QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS" 862 solarisnetlibs="-lsocket -lnsl -lresolv" 863 LIBS="$solarisnetlibs $LIBS" 864 libs_qga="$solarisnetlibs $libs_qga" 865;; 866Haiku) 867 haiku="yes" 868 QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS" 869 LIBS="-lposix_error_mapper -lnetwork $LIBS" 870;; 871Linux) 872 audio_drv_list="oss" 873 audio_possible_drivers="oss alsa sdl pa" 874 linux="yes" 875 linux_user="yes" 876 kvm="yes" 877 vhost_net="yes" 878 vhost_crypto="yes" 879 vhost_scsi="yes" 880 vhost_vsock="yes" 881 QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES" 882 supported_os="yes" 883 libudev="yes" 884;; 885esac 886 887if [ "$bsd" = "yes" ] ; then 888 if [ "$darwin" != "yes" ] ; then 889 bsd_user="yes" 890 fi 891fi 892 893: ${make=${MAKE-make}} 894: ${install=${INSTALL-install}} 895: ${python=${PYTHON-python}} 896: ${smbd=${SMBD-/usr/sbin/smbd}} 897 898# Default objcc to clang if available, otherwise use CC 899if has clang; then 900 objcc=clang 901else 902 objcc="$cc" 903fi 904 905if test "$mingw32" = "yes" ; then 906 EXESUF=".exe" 907 DSOSUF=".dll" 908 QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS" 909 # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later) 910 QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS" 911 # MinGW needs -mthreads for TLS and macro _MT. 912 QEMU_CFLAGS="-mthreads $QEMU_CFLAGS" 913 LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS" 914 write_c_skeleton; 915 if compile_prog "" "-liberty" ; then 916 LIBS="-liberty $LIBS" 917 fi 918 prefix="c:/Program Files/QEMU" 919 mandir="\${prefix}" 920 datadir="\${prefix}" 921 qemu_docdir="\${prefix}" 922 bindir="\${prefix}" 923 sysconfdir="\${prefix}" 924 local_statedir= 925 confsuffix="" 926 libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga" 927fi 928 929werror="" 930 931for opt do 932 optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') 933 case "$opt" in 934 --help|-h) show_help=yes 935 ;; 936 --version|-V) exec cat $source_path/VERSION 937 ;; 938 --prefix=*) prefix="$optarg" 939 ;; 940 --interp-prefix=*) interp_prefix="$optarg" 941 ;; 942 --source-path=*) 943 ;; 944 --cross-prefix=*) 945 ;; 946 --cc=*) 947 ;; 948 --host-cc=*) host_cc="$optarg" 949 ;; 950 --cxx=*) 951 ;; 952 --iasl=*) iasl="$optarg" 953 ;; 954 --objcc=*) objcc="$optarg" 955 ;; 956 --make=*) make="$optarg" 957 ;; 958 --install=*) install="$optarg" 959 ;; 960 --python=*) python="$optarg" 961 ;; 962 --gcov=*) gcov_tool="$optarg" 963 ;; 964 --smbd=*) smbd="$optarg" 965 ;; 966 --extra-cflags=*) 967 ;; 968 --extra-cxxflags=*) 969 ;; 970 --extra-ldflags=*) 971 ;; 972 --enable-debug-info) 973 ;; 974 --disable-debug-info) 975 ;; 976 --cross-cc-*) 977 ;; 978 --enable-modules) 979 modules="yes" 980 ;; 981 --disable-modules) 982 modules="no" 983 ;; 984 --cpu=*) 985 ;; 986 --target-list=*) target_list="$optarg" 987 ;; 988 --enable-trace-backends=*) trace_backends="$optarg" 989 ;; 990 # XXX: backwards compatibility 991 --enable-trace-backend=*) trace_backends="$optarg" 992 ;; 993 --with-trace-file=*) trace_file="$optarg" 994 ;; 995 --enable-gprof) gprof="yes" 996 ;; 997 --enable-gcov) gcov="yes" 998 ;; 999 --static) 1000 static="yes" 1001 LDFLAGS="-static $LDFLAGS" 1002 QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS" 1003 ;; 1004 --mandir=*) mandir="$optarg" 1005 ;; 1006 --bindir=*) bindir="$optarg" 1007 ;; 1008 --libdir=*) libdir="$optarg" 1009 ;; 1010 --libexecdir=*) libexecdir="$optarg" 1011 ;; 1012 --includedir=*) includedir="$optarg" 1013 ;; 1014 --datadir=*) datadir="$optarg" 1015 ;; 1016 --with-confsuffix=*) confsuffix="$optarg" 1017 ;; 1018 --docdir=*) qemu_docdir="$optarg" 1019 ;; 1020 --sysconfdir=*) sysconfdir="$optarg" 1021 ;; 1022 --localstatedir=*) local_statedir="$optarg" 1023 ;; 1024 --firmwarepath=*) firmwarepath="$optarg" 1025 ;; 1026 --host=*|--build=*|\ 1027 --disable-dependency-tracking|\ 1028 --sbindir=*|--sharedstatedir=*|\ 1029 --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\ 1030 --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*) 1031 # These switches are silently ignored, for compatibility with 1032 # autoconf-generated configure scripts. This allows QEMU's 1033 # configure to be used by RPM and similar macros that set 1034 # lots of directory switches by default. 1035 ;; 1036 --disable-sdl) sdl="no" 1037 ;; 1038 --enable-sdl) sdl="yes" 1039 ;; 1040 --with-sdlabi=*) sdlabi="$optarg" 1041 ;; 1042 --disable-qom-cast-debug) qom_cast_debug="no" 1043 ;; 1044 --enable-qom-cast-debug) qom_cast_debug="yes" 1045 ;; 1046 --disable-virtfs) virtfs="no" 1047 ;; 1048 --enable-virtfs) virtfs="yes" 1049 ;; 1050 --disable-mpath) mpath="no" 1051 ;; 1052 --enable-mpath) mpath="yes" 1053 ;; 1054 --disable-vnc) vnc="no" 1055 ;; 1056 --enable-vnc) vnc="yes" 1057 ;; 1058 --oss-lib=*) oss_lib="$optarg" 1059 ;; 1060 --audio-drv-list=*) audio_drv_list="$optarg" 1061 ;; 1062 --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 1063 ;; 1064 --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') 1065 ;; 1066 --enable-debug-tcg) debug_tcg="yes" 1067 ;; 1068 --disable-debug-tcg) debug_tcg="no" 1069 ;; 1070 --enable-debug) 1071 # Enable debugging options that aren't excessively noisy 1072 debug_tcg="yes" 1073 debug_mutex="yes" 1074 debug="yes" 1075 strip_opt="no" 1076 fortify_source="no" 1077 ;; 1078 --enable-sanitizers) sanitizers="yes" 1079 ;; 1080 --disable-sanitizers) sanitizers="no" 1081 ;; 1082 --enable-sparse) sparse="yes" 1083 ;; 1084 --disable-sparse) sparse="no" 1085 ;; 1086 --disable-strip) strip_opt="no" 1087 ;; 1088 --disable-vnc-sasl) vnc_sasl="no" 1089 ;; 1090 --enable-vnc-sasl) vnc_sasl="yes" 1091 ;; 1092 --disable-vnc-jpeg) vnc_jpeg="no" 1093 ;; 1094 --enable-vnc-jpeg) vnc_jpeg="yes" 1095 ;; 1096 --disable-vnc-png) vnc_png="no" 1097 ;; 1098 --enable-vnc-png) vnc_png="yes" 1099 ;; 1100 --disable-slirp) slirp="no" 1101 ;; 1102 --disable-vde) vde="no" 1103 ;; 1104 --enable-vde) vde="yes" 1105 ;; 1106 --disable-netmap) netmap="no" 1107 ;; 1108 --enable-netmap) netmap="yes" 1109 ;; 1110 --disable-xen) xen="no" 1111 ;; 1112 --enable-xen) xen="yes" 1113 ;; 1114 --disable-xen-pci-passthrough) xen_pci_passthrough="no" 1115 ;; 1116 --enable-xen-pci-passthrough) xen_pci_passthrough="yes" 1117 ;; 1118 --disable-xen-pv-domain-build) xen_pv_domain_build="no" 1119 ;; 1120 --enable-xen-pv-domain-build) xen_pv_domain_build="yes" 1121 ;; 1122 --disable-brlapi) brlapi="no" 1123 ;; 1124 --enable-brlapi) brlapi="yes" 1125 ;; 1126 --disable-bluez) bluez="no" 1127 ;; 1128 --enable-bluez) bluez="yes" 1129 ;; 1130 --disable-kvm) kvm="no" 1131 ;; 1132 --enable-kvm) kvm="yes" 1133 ;; 1134 --disable-hax) hax="no" 1135 ;; 1136 --enable-hax) hax="yes" 1137 ;; 1138 --disable-hvf) hvf="no" 1139 ;; 1140 --enable-hvf) hvf="yes" 1141 ;; 1142 --disable-whpx) whpx="no" 1143 ;; 1144 --enable-whpx) whpx="yes" 1145 ;; 1146 --disable-tcg-interpreter) tcg_interpreter="no" 1147 ;; 1148 --enable-tcg-interpreter) tcg_interpreter="yes" 1149 ;; 1150 --disable-cap-ng) cap_ng="no" 1151 ;; 1152 --enable-cap-ng) cap_ng="yes" 1153 ;; 1154 --disable-tcg) tcg="no" 1155 ;; 1156 --enable-tcg) tcg="yes" 1157 ;; 1158 --disable-malloc-trim) malloc_trim="no" 1159 ;; 1160 --enable-malloc-trim) malloc_trim="yes" 1161 ;; 1162 --disable-spice) spice="no" 1163 ;; 1164 --enable-spice) spice="yes" 1165 ;; 1166 --disable-libiscsi) libiscsi="no" 1167 ;; 1168 --enable-libiscsi) libiscsi="yes" 1169 ;; 1170 --disable-libnfs) libnfs="no" 1171 ;; 1172 --enable-libnfs) libnfs="yes" 1173 ;; 1174 --enable-profiler) profiler="yes" 1175 ;; 1176 --disable-cocoa) cocoa="no" 1177 ;; 1178 --enable-cocoa) 1179 cocoa="yes" ; 1180 audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)" 1181 ;; 1182 --disable-system) softmmu="no" 1183 ;; 1184 --enable-system) softmmu="yes" 1185 ;; 1186 --disable-user) 1187 linux_user="no" ; 1188 bsd_user="no" ; 1189 ;; 1190 --enable-user) ;; 1191 --disable-linux-user) linux_user="no" 1192 ;; 1193 --enable-linux-user) linux_user="yes" 1194 ;; 1195 --disable-bsd-user) bsd_user="no" 1196 ;; 1197 --enable-bsd-user) bsd_user="yes" 1198 ;; 1199 --enable-pie) pie="yes" 1200 ;; 1201 --disable-pie) pie="no" 1202 ;; 1203 --enable-werror) werror="yes" 1204 ;; 1205 --disable-werror) werror="no" 1206 ;; 1207 --enable-stack-protector) stack_protector="yes" 1208 ;; 1209 --disable-stack-protector) stack_protector="no" 1210 ;; 1211 --disable-curses) curses="no" 1212 ;; 1213 --enable-curses) curses="yes" 1214 ;; 1215 --disable-curl) curl="no" 1216 ;; 1217 --enable-curl) curl="yes" 1218 ;; 1219 --disable-fdt) fdt="no" 1220 ;; 1221 --enable-fdt) fdt="yes" 1222 ;; 1223 --disable-linux-aio) linux_aio="no" 1224 ;; 1225 --enable-linux-aio) linux_aio="yes" 1226 ;; 1227 --disable-attr) attr="no" 1228 ;; 1229 --enable-attr) attr="yes" 1230 ;; 1231 --disable-membarrier) membarrier="no" 1232 ;; 1233 --enable-membarrier) membarrier="yes" 1234 ;; 1235 --disable-blobs) blobs="no" 1236 ;; 1237 --with-pkgversion=*) pkgversion="$optarg" 1238 ;; 1239 --with-coroutine=*) coroutine="$optarg" 1240 ;; 1241 --disable-coroutine-pool) coroutine_pool="no" 1242 ;; 1243 --enable-coroutine-pool) coroutine_pool="yes" 1244 ;; 1245 --enable-debug-stack-usage) debug_stack_usage="yes" 1246 ;; 1247 --enable-crypto-afalg) crypto_afalg="yes" 1248 ;; 1249 --disable-crypto-afalg) crypto_afalg="no" 1250 ;; 1251 --disable-docs) docs="no" 1252 ;; 1253 --enable-docs) docs="yes" 1254 ;; 1255 --disable-vhost-net) vhost_net="no" 1256 ;; 1257 --enable-vhost-net) vhost_net="yes" 1258 ;; 1259 --disable-vhost-crypto) vhost_crypto="no" 1260 ;; 1261 --enable-vhost-crypto) 1262 vhost_crypto="yes" 1263 if test "$mingw32" = "yes"; then 1264 error_exit "vhost-crypto isn't available on win32" 1265 fi 1266 ;; 1267 --disable-vhost-scsi) vhost_scsi="no" 1268 ;; 1269 --enable-vhost-scsi) vhost_scsi="yes" 1270 ;; 1271 --disable-vhost-vsock) vhost_vsock="no" 1272 ;; 1273 --enable-vhost-vsock) vhost_vsock="yes" 1274 ;; 1275 --disable-opengl) opengl="no" 1276 ;; 1277 --enable-opengl) opengl="yes" 1278 ;; 1279 --disable-rbd) rbd="no" 1280 ;; 1281 --enable-rbd) rbd="yes" 1282 ;; 1283 --disable-xfsctl) xfs="no" 1284 ;; 1285 --enable-xfsctl) xfs="yes" 1286 ;; 1287 --disable-smartcard) smartcard="no" 1288 ;; 1289 --enable-smartcard) smartcard="yes" 1290 ;; 1291 --disable-libusb) libusb="no" 1292 ;; 1293 --enable-libusb) libusb="yes" 1294 ;; 1295 --disable-usb-redir) usb_redir="no" 1296 ;; 1297 --enable-usb-redir) usb_redir="yes" 1298 ;; 1299 --disable-zlib-test) zlib="no" 1300 ;; 1301 --disable-lzo) lzo="no" 1302 ;; 1303 --enable-lzo) lzo="yes" 1304 ;; 1305 --disable-snappy) snappy="no" 1306 ;; 1307 --enable-snappy) snappy="yes" 1308 ;; 1309 --disable-bzip2) bzip2="no" 1310 ;; 1311 --enable-bzip2) bzip2="yes" 1312 ;; 1313 --enable-guest-agent) guest_agent="yes" 1314 ;; 1315 --disable-guest-agent) guest_agent="no" 1316 ;; 1317 --enable-guest-agent-msi) guest_agent_msi="yes" 1318 ;; 1319 --disable-guest-agent-msi) guest_agent_msi="no" 1320 ;; 1321 --with-vss-sdk) vss_win32_sdk="" 1322 ;; 1323 --with-vss-sdk=*) vss_win32_sdk="$optarg" 1324 ;; 1325 --without-vss-sdk) vss_win32_sdk="no" 1326 ;; 1327 --with-win-sdk) win_sdk="" 1328 ;; 1329 --with-win-sdk=*) win_sdk="$optarg" 1330 ;; 1331 --without-win-sdk) win_sdk="no" 1332 ;; 1333 --enable-tools) want_tools="yes" 1334 ;; 1335 --disable-tools) want_tools="no" 1336 ;; 1337 --enable-seccomp) seccomp="yes" 1338 ;; 1339 --disable-seccomp) seccomp="no" 1340 ;; 1341 --disable-glusterfs) glusterfs="no" 1342 ;; 1343 --disable-avx2) avx2_opt="no" 1344 ;; 1345 --enable-avx2) avx2_opt="yes" 1346 ;; 1347 --enable-glusterfs) glusterfs="yes" 1348 ;; 1349 --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane) 1350 echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2 1351 ;; 1352 --enable-vhdx|--disable-vhdx) 1353 echo "$0: $opt is obsolete, VHDX driver is always built" >&2 1354 ;; 1355 --enable-uuid|--disable-uuid) 1356 echo "$0: $opt is obsolete, UUID support is always built" >&2 1357 ;; 1358 --disable-gtk) gtk="no" 1359 ;; 1360 --enable-gtk) gtk="yes" 1361 ;; 1362 --tls-priority=*) tls_priority="$optarg" 1363 ;; 1364 --disable-gnutls) gnutls="no" 1365 ;; 1366 --enable-gnutls) gnutls="yes" 1367 ;; 1368 --disable-nettle) nettle="no" 1369 ;; 1370 --enable-nettle) nettle="yes" 1371 ;; 1372 --disable-gcrypt) gcrypt="no" 1373 ;; 1374 --enable-gcrypt) gcrypt="yes" 1375 ;; 1376 --enable-rdma) rdma="yes" 1377 ;; 1378 --disable-rdma) rdma="no" 1379 ;; 1380 --enable-pvrdma) pvrdma="yes" 1381 ;; 1382 --disable-pvrdma) pvrdma="no" 1383 ;; 1384 --disable-vte) vte="no" 1385 ;; 1386 --enable-vte) vte="yes" 1387 ;; 1388 --disable-virglrenderer) virglrenderer="no" 1389 ;; 1390 --enable-virglrenderer) virglrenderer="yes" 1391 ;; 1392 --disable-tpm) tpm="no" 1393 ;; 1394 --enable-tpm) tpm="yes" 1395 ;; 1396 --disable-libssh2) libssh2="no" 1397 ;; 1398 --enable-libssh2) libssh2="yes" 1399 ;; 1400 --disable-live-block-migration) live_block_migration="no" 1401 ;; 1402 --enable-live-block-migration) live_block_migration="yes" 1403 ;; 1404 --disable-numa) numa="no" 1405 ;; 1406 --enable-numa) numa="yes" 1407 ;; 1408 --disable-libxml2) libxml2="no" 1409 ;; 1410 --enable-libxml2) libxml2="yes" 1411 ;; 1412 --disable-tcmalloc) tcmalloc="no" 1413 ;; 1414 --enable-tcmalloc) tcmalloc="yes" 1415 ;; 1416 --disable-jemalloc) jemalloc="no" 1417 ;; 1418 --enable-jemalloc) jemalloc="yes" 1419 ;; 1420 --disable-replication) replication="no" 1421 ;; 1422 --enable-replication) replication="yes" 1423 ;; 1424 --disable-vxhs) vxhs="no" 1425 ;; 1426 --enable-vxhs) vxhs="yes" 1427 ;; 1428 --disable-bochs) bochs="no" 1429 ;; 1430 --enable-bochs) bochs="yes" 1431 ;; 1432 --disable-cloop) cloop="no" 1433 ;; 1434 --enable-cloop) cloop="yes" 1435 ;; 1436 --disable-dmg) dmg="no" 1437 ;; 1438 --enable-dmg) dmg="yes" 1439 ;; 1440 --disable-qcow1) qcow1="no" 1441 ;; 1442 --enable-qcow1) qcow1="yes" 1443 ;; 1444 --disable-vdi) vdi="no" 1445 ;; 1446 --enable-vdi) vdi="yes" 1447 ;; 1448 --disable-vvfat) vvfat="no" 1449 ;; 1450 --enable-vvfat) vvfat="yes" 1451 ;; 1452 --disable-qed) qed="no" 1453 ;; 1454 --enable-qed) qed="yes" 1455 ;; 1456 --disable-parallels) parallels="no" 1457 ;; 1458 --enable-parallels) parallels="yes" 1459 ;; 1460 --disable-sheepdog) sheepdog="no" 1461 ;; 1462 --enable-sheepdog) sheepdog="yes" 1463 ;; 1464 --disable-vhost-user) vhost_user="no" 1465 ;; 1466 --enable-vhost-user) 1467 vhost_user="yes" 1468 if test "$mingw32" = "yes"; then 1469 error_exit "vhost-user isn't available on win32" 1470 fi 1471 ;; 1472 --disable-capstone) capstone="no" 1473 ;; 1474 --enable-capstone) capstone="yes" 1475 ;; 1476 --enable-capstone=git) capstone="git" 1477 ;; 1478 --enable-capstone=system) capstone="system" 1479 ;; 1480 --with-git=*) git="$optarg" 1481 ;; 1482 --enable-git-update) git_update=yes 1483 ;; 1484 --disable-git-update) git_update=no 1485 ;; 1486 --enable-debug-mutex) debug_mutex=yes 1487 ;; 1488 --disable-debug-mutex) debug_mutex=no 1489 ;; 1490 --enable-libpmem) libpmem=yes 1491 ;; 1492 --disable-libpmem) libpmem=no 1493 ;; 1494 *) 1495 echo "ERROR: unknown option $opt" 1496 echo "Try '$0 --help' for more information" 1497 exit 1 1498 ;; 1499 esac 1500done 1501 1502if test "$vhost_user" = ""; then 1503 if test "$mingw32" = "yes"; then 1504 vhost_user="no" 1505 else 1506 vhost_user="yes" 1507 fi 1508fi 1509 1510case "$cpu" in 1511 ppc) 1512 CPU_CFLAGS="-m32" 1513 LDFLAGS="-m32 $LDFLAGS" 1514 cross_cc_powerpc=$cc 1515 cross_cc_cflags_powerpc=$CPU_CFLAGS 1516 ;; 1517 ppc64) 1518 CPU_CFLAGS="-m64" 1519 LDFLAGS="-m64 $LDFLAGS" 1520 cross_cc_ppc64=$cc 1521 cross_cc_cflags_ppc64=$CPU_CFLAGS 1522 ;; 1523 sparc) 1524 CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" 1525 LDFLAGS="-m32 -mv8plus $LDFLAGS" 1526 cross_cc_sparc=$cc 1527 cross_cc_cflags_sparc=$CPU_CFLAGS 1528 ;; 1529 sparc64) 1530 CPU_CFLAGS="-m64 -mcpu=ultrasparc" 1531 LDFLAGS="-m64 $LDFLAGS" 1532 cross_cc_sparc64=$cc 1533 cross_cc_cflags_sparc64=$CPU_CFLAGS 1534 ;; 1535 s390) 1536 CPU_CFLAGS="-m31" 1537 LDFLAGS="-m31 $LDFLAGS" 1538 cross_cc_s390=$cc 1539 cross_cc_cflags_s390=$CPU_CFLAGS 1540 ;; 1541 s390x) 1542 CPU_CFLAGS="-m64" 1543 LDFLAGS="-m64 $LDFLAGS" 1544 cross_cc_s390x=$cc 1545 cross_cc_cflags_s390x=$CPU_CFLAGS 1546 ;; 1547 i386) 1548 CPU_CFLAGS="-m32" 1549 LDFLAGS="-m32 $LDFLAGS" 1550 cross_cc_i386=$cc 1551 cross_cc_cflags_i386=$CPU_CFLAGS 1552 ;; 1553 x86_64) 1554 # ??? Only extremely old AMD cpus do not have cmpxchg16b. 1555 # If we truly care, we should simply detect this case at 1556 # runtime and generate the fallback to serial emulation. 1557 CPU_CFLAGS="-m64 -mcx16" 1558 LDFLAGS="-m64 $LDFLAGS" 1559 cross_cc_x86_64=$cc 1560 cross_cc_cflags_x86_64=$CPU_CFLAGS 1561 ;; 1562 x32) 1563 CPU_CFLAGS="-mx32" 1564 LDFLAGS="-mx32 $LDFLAGS" 1565 cross_cc_i386=$cc 1566 cross_cc_cflags_i386=$CPU_CFLAGS 1567 ;; 1568 # No special flags required for other host CPUs 1569esac 1570 1571QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS" 1572 1573# For user-mode emulation the host arch has to be one we explicitly 1574# support, even if we're using TCI. 1575if [ "$ARCH" = "unknown" ]; then 1576 bsd_user="no" 1577 linux_user="no" 1578fi 1579 1580default_target_list="" 1581 1582mak_wilds="" 1583 1584if [ "$softmmu" = "yes" ]; then 1585 mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak" 1586fi 1587if [ "$linux_user" = "yes" ]; then 1588 mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak" 1589fi 1590if [ "$bsd_user" = "yes" ]; then 1591 mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak" 1592fi 1593 1594for config in $mak_wilds; do 1595 default_target_list="${default_target_list} $(basename "$config" .mak)" 1596done 1597 1598# Enumerate public trace backends for --help output 1599trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/')) 1600 1601if test x"$show_help" = x"yes" ; then 1602cat << EOF 1603 1604Usage: configure [options] 1605Options: [defaults in brackets after descriptions] 1606 1607Standard options: 1608 --help print this message 1609 --prefix=PREFIX install in PREFIX [$prefix] 1610 --interp-prefix=PREFIX where to find shared libraries, etc. 1611 use %M for cpu name [$interp_prefix] 1612 --target-list=LIST set target list (default: build everything) 1613$(echo Available targets: $default_target_list | \ 1614 fold -s -w 53 | sed -e 's/^/ /') 1615 1616Advanced options (experts only): 1617 --source-path=PATH path of source code [$source_path] 1618 --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix] 1619 --cc=CC use C compiler CC [$cc] 1620 --iasl=IASL use ACPI compiler IASL [$iasl] 1621 --host-cc=CC use C compiler CC [$host_cc] for code run at 1622 build time 1623 --cxx=CXX use C++ compiler CXX [$cxx] 1624 --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] 1625 --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS 1626 --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS 1627 --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS 1628 --cross-cc-ARCH=CC use compiler when building ARCH guest test cases 1629 --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests 1630 --make=MAKE use specified make [$make] 1631 --install=INSTALL use specified install [$install] 1632 --python=PYTHON use specified python [$python] 1633 --smbd=SMBD use specified smbd [$smbd] 1634 --with-git=GIT use specified git [$git] 1635 --static enable static build [$static] 1636 --mandir=PATH install man pages in PATH 1637 --datadir=PATH install firmware in PATH$confsuffix 1638 --docdir=PATH install documentation in PATH$confsuffix 1639 --bindir=PATH install binaries in PATH 1640 --libdir=PATH install libraries in PATH 1641 --libexecdir=PATH install helper binaries in PATH 1642 --sysconfdir=PATH install config in PATH$confsuffix 1643 --localstatedir=PATH install local state in PATH (set at runtime on win32) 1644 --firmwarepath=PATH search PATH for firmware files 1645 --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix] 1646 --with-pkgversion=VERS use specified string as sub-version of the package 1647 --enable-debug enable common debug build options 1648 --enable-sanitizers enable default sanitizers 1649 --disable-strip disable stripping binaries 1650 --disable-werror disable compilation abort on warning 1651 --disable-stack-protector disable compiler-provided stack protection 1652 --audio-drv-list=LIST set audio drivers list: 1653 Available drivers: $audio_possible_drivers 1654 --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L 1655 --block-drv-rw-whitelist=L 1656 set block driver read-write whitelist 1657 (affects only QEMU, not qemu-img) 1658 --block-drv-ro-whitelist=L 1659 set block driver read-only whitelist 1660 (affects only QEMU, not qemu-img) 1661 --enable-trace-backends=B Set trace backend 1662 Available backends: $trace_backend_list 1663 --with-trace-file=NAME Full PATH,NAME of file to store traces 1664 Default:trace-<pid> 1665 --disable-slirp disable SLIRP userspace network connectivity 1666 --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI) 1667 --enable-malloc-trim enable libc malloc_trim() for memory optimization 1668 --oss-lib path to OSS library 1669 --cpu=CPU Build for host CPU [$cpu] 1670 --with-coroutine=BACKEND coroutine backend. Supported options: 1671 ucontext, sigaltstack, windows 1672 --enable-gcov enable test coverage analysis with gcov 1673 --gcov=GCOV use specified gcov [$gcov_tool] 1674 --disable-blobs disable installing provided firmware blobs 1675 --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent 1676 --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb) 1677 --tls-priority default TLS protocol/cipher priority string 1678 --enable-gprof QEMU profiling with gprof 1679 --enable-profiler profiler support 1680 --enable-xen-pv-domain-build 1681 xen pv domain builder 1682 --enable-debug-stack-usage 1683 track the maximum stack usage of stacks created by qemu_alloc_stack 1684 1685Optional features, enabled with --enable-FEATURE and 1686disabled with --disable-FEATURE, default is enabled if available: 1687 1688 system all system emulation targets 1689 user supported user emulation targets 1690 linux-user all linux usermode emulation targets 1691 bsd-user all BSD usermode emulation targets 1692 docs build documentation 1693 guest-agent build the QEMU Guest Agent 1694 guest-agent-msi build guest agent Windows MSI installation package 1695 pie Position Independent Executables 1696 modules modules support 1697 debug-tcg TCG debugging (default is disabled) 1698 debug-info debugging information 1699 sparse sparse checker 1700 1701 gnutls GNUTLS cryptography support 1702 nettle nettle cryptography support 1703 gcrypt libgcrypt cryptography support 1704 sdl SDL UI 1705 --with-sdlabi select preferred SDL ABI 1.2 or 2.0 1706 gtk gtk UI 1707 vte vte support for the gtk UI 1708 curses curses UI 1709 vnc VNC UI support 1710 vnc-sasl SASL encryption for VNC server 1711 vnc-jpeg JPEG lossy compression for VNC server 1712 vnc-png PNG compression for VNC server 1713 cocoa Cocoa UI (Mac OS X only) 1714 virtfs VirtFS 1715 mpath Multipath persistent reservation passthrough 1716 xen xen backend driver support 1717 xen-pci-passthrough PCI passthrough support for Xen 1718 brlapi BrlAPI (Braile) 1719 curl curl connectivity 1720 membarrier membarrier system call (for Linux 4.14+ or Windows) 1721 fdt fdt device tree 1722 bluez bluez stack connectivity 1723 kvm KVM acceleration support 1724 hax HAX acceleration support 1725 hvf Hypervisor.framework acceleration support 1726 whpx Windows Hypervisor Platform acceleration support 1727 rdma Enable RDMA-based migration 1728 pvrdma Enable PVRDMA support 1729 vde support for vde network 1730 netmap support for netmap network 1731 linux-aio Linux AIO support 1732 cap-ng libcap-ng support 1733 attr attr and xattr support 1734 vhost-net vhost-net acceleration support 1735 vhost-crypto vhost-crypto acceleration support 1736 spice spice 1737 rbd rados block device (rbd) 1738 libiscsi iscsi support 1739 libnfs nfs support 1740 smartcard smartcard support (libcacard) 1741 libusb libusb (for usb passthrough) 1742 live-block-migration Block migration in the main migration stream 1743 usb-redir usb network redirection support 1744 lzo support of lzo compression library 1745 snappy support of snappy compression library 1746 bzip2 support of bzip2 compression library 1747 (for reading bzip2-compressed dmg images) 1748 seccomp seccomp support 1749 coroutine-pool coroutine freelist (better performance) 1750 glusterfs GlusterFS backend 1751 tpm TPM support 1752 libssh2 ssh block device support 1753 numa libnuma support 1754 libxml2 for Parallels image format 1755 tcmalloc tcmalloc support 1756 jemalloc jemalloc support 1757 avx2 AVX2 optimization support 1758 replication replication support 1759 vhost-vsock virtio sockets device support 1760 opengl opengl support 1761 virglrenderer virgl rendering support 1762 xfsctl xfsctl support 1763 qom-cast-debug cast debugging support 1764 tools build qemu-io, qemu-nbd and qemu-image tools 1765 vxhs Veritas HyperScale vDisk backend support 1766 bochs bochs image format support 1767 cloop cloop image format support 1768 dmg dmg image format support 1769 qcow1 qcow v1 image format support 1770 vdi vdi image format support 1771 vvfat vvfat image format support 1772 qed qed image format support 1773 parallels parallels image format support 1774 sheepdog sheepdog block driver support 1775 crypto-afalg Linux AF_ALG crypto backend driver 1776 vhost-user vhost-user support 1777 capstone capstone disassembler support 1778 debug-mutex mutex debugging support 1779 libpmem libpmem support 1780 1781NOTE: The object files are built at the place where configure is launched 1782EOF 1783exit 0 1784fi 1785 1786if ! has $python; then 1787 error_exit "Python not found. Use --python=/path/to/python" 1788fi 1789 1790# Note that if the Python conditional here evaluates True we will exit 1791# with status 1 which is a shell 'false' value. 1792if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then 1793 error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \ 1794 "Use --python=/path/to/python to specify a supported Python." 1795fi 1796 1797# Suppress writing compiled files 1798python="$python -B" 1799 1800# Check that the C compiler works. Doing this here before testing 1801# the host CPU ensures that we had a valid CC to autodetect the 1802# $cpu var (and we should bail right here if that's not the case). 1803# It also allows the help message to be printed without a CC. 1804write_c_skeleton; 1805if compile_object ; then 1806 : C compiler works ok 1807else 1808 error_exit "\"$cc\" either does not exist or does not work" 1809fi 1810if ! compile_prog ; then 1811 error_exit "\"$cc\" cannot build an executable (is your linker broken?)" 1812fi 1813 1814# Now we have handled --enable-tcg-interpreter and know we're not just 1815# printing the help message, bail out if the host CPU isn't supported. 1816if test "$ARCH" = "unknown"; then 1817 if test "$tcg_interpreter" = "yes" ; then 1818 echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)" 1819 else 1820 error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter" 1821 fi 1822fi 1823 1824# Consult white-list to determine whether to enable werror 1825# by default. Only enable by default for git builds 1826if test -z "$werror" ; then 1827 if test -d "$source_path/.git" -a \ 1828 \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then 1829 werror="yes" 1830 else 1831 werror="no" 1832 fi 1833fi 1834 1835if test "$bogus_os" = "yes"; then 1836 # Now that we know that we're not printing the help and that 1837 # the compiler works (so the results of the check_defines we used 1838 # to identify the OS are reliable), if we didn't recognize the 1839 # host OS we should stop now. 1840 error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" 1841fi 1842 1843gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits" 1844gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags" 1845gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags" 1846gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags" 1847gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags" 1848gcc_flags="-Wno-string-plus-int $gcc_flags" 1849gcc_flags="-Wno-error=address-of-packed-member $gcc_flags" 1850# Note that we do not add -Werror to gcc_flags here, because that would 1851# enable it for all configure tests. If a configure test failed due 1852# to -Werror this would just silently disable some features, 1853# so it's too error prone. 1854 1855cc_has_warning_flag() { 1856 write_c_skeleton; 1857 1858 # Use the positive sense of the flag when testing for -Wno-wombat 1859 # support (gcc will happily accept the -Wno- form of unknown 1860 # warning options). 1861 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" 1862 compile_prog "-Werror $optflag" "" 1863} 1864 1865for flag in $gcc_flags; do 1866 if cc_has_warning_flag $flag ; then 1867 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1868 fi 1869done 1870 1871if test "$stack_protector" != "no"; then 1872 cat > $TMPC << EOF 1873int main(int argc, char *argv[]) 1874{ 1875 char arr[64], *p = arr, *c = argv[0]; 1876 while (*c) { 1877 *p++ = *c++; 1878 } 1879 return 0; 1880} 1881EOF 1882 gcc_flags="-fstack-protector-strong -fstack-protector-all" 1883 sp_on=0 1884 for flag in $gcc_flags; do 1885 # We need to check both a compile and a link, since some compiler 1886 # setups fail only on a .c->.o compile and some only at link time 1887 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC && 1888 compile_prog "-Werror $flag" ""; then 1889 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1890 sp_on=1 1891 break 1892 fi 1893 done 1894 if test "$stack_protector" = yes; then 1895 if test $sp_on = 0; then 1896 error_exit "Stack protector not supported" 1897 fi 1898 fi 1899fi 1900 1901# Disable -Wmissing-braces on older compilers that warn even for 1902# the "universal" C zero initializer {0}. 1903cat > $TMPC << EOF 1904struct { 1905 int a[2]; 1906} x = {0}; 1907EOF 1908if compile_object "-Werror" "" ; then 1909 : 1910else 1911 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" 1912fi 1913 1914# Workaround for http://gcc.gnu.org/PR55489. Happens with -fPIE/-fPIC and 1915# large functions that use global variables. The bug is in all releases of 1916# GCC, but it became particularly acute in 4.6.x and 4.7.x. It is fixed in 1917# 4.7.3 and 4.8.0. We should be able to delete this at the end of 2013. 1918cat > $TMPC << EOF 1919#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2)) 1920int main(void) { return 0; } 1921#else 1922#error No bug in this compiler. 1923#endif 1924EOF 1925if compile_prog "-Werror -fno-gcse" "" ; then 1926 TRANSLATE_OPT_CFLAGS=-fno-gcse 1927fi 1928 1929if test "$static" = "yes" ; then 1930 if test "$modules" = "yes" ; then 1931 error_exit "static and modules are mutually incompatible" 1932 fi 1933 if test "$pie" = "yes" ; then 1934 error_exit "static and pie are mutually incompatible" 1935 else 1936 pie="no" 1937 fi 1938fi 1939 1940# Unconditional check for compiler __thread support 1941 cat > $TMPC << EOF 1942static __thread int tls_var; 1943int main(void) { return tls_var; } 1944EOF 1945 1946if ! compile_prog "-Werror" "" ; then 1947 error_exit "Your compiler does not support the __thread specifier for " \ 1948 "Thread-Local Storage (TLS). Please upgrade to a version that does." 1949fi 1950 1951if test "$pie" = ""; then 1952 case "$cpu-$targetos" in 1953 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD) 1954 ;; 1955 *) 1956 pie="no" 1957 ;; 1958 esac 1959fi 1960 1961if test "$pie" != "no" ; then 1962 cat > $TMPC << EOF 1963 1964#ifdef __linux__ 1965# define THREAD __thread 1966#else 1967# define THREAD 1968#endif 1969 1970static THREAD int tls_var; 1971 1972int main(void) { return tls_var; } 1973 1974EOF 1975 if compile_prog "-fPIE -DPIE" "-pie"; then 1976 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS" 1977 LDFLAGS="-pie $LDFLAGS" 1978 pie="yes" 1979 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then 1980 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS" 1981 fi 1982 else 1983 if test "$pie" = "yes"; then 1984 error_exit "PIE not available due to missing toolchain support" 1985 else 1986 echo "Disabling PIE due to missing toolchain support" 1987 pie="no" 1988 fi 1989 fi 1990 1991 if compile_prog "-Werror -fno-pie" "-nopie"; then 1992 CFLAGS_NOPIE="-fno-pie" 1993 LDFLAGS_NOPIE="-nopie" 1994 fi 1995fi 1996 1997########################################## 1998# __sync_fetch_and_and requires at least -march=i486. Many toolchains 1999# use i686 as default anyway, but for those that don't, an explicit 2000# specification is necessary 2001 2002if test "$cpu" = "i386"; then 2003 cat > $TMPC << EOF 2004static int sfaa(int *ptr) 2005{ 2006 return __sync_fetch_and_and(ptr, 0); 2007} 2008 2009int main(void) 2010{ 2011 int val = 42; 2012 val = __sync_val_compare_and_swap(&val, 0, 1); 2013 sfaa(&val); 2014 return val; 2015} 2016EOF 2017 if ! compile_prog "" "" ; then 2018 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" 2019 fi 2020fi 2021 2022######################################### 2023# Solaris specific configure tool chain decisions 2024 2025if test "$solaris" = "yes" ; then 2026 if has $install; then 2027 : 2028 else 2029 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \ 2030 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \ 2031 "to get ginstall which is used by default (which lives in /opt/csw/bin)" 2032 fi 2033 if test "$(path_of $install)" = "/usr/sbin/install" ; then 2034 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \ 2035 "try ginstall from the GNU fileutils available from www.blastwave.org" \ 2036 "using pkg-get -i fileutils, or use --install=/usr/ucb/install" 2037 fi 2038 if has ar; then 2039 : 2040 else 2041 if test -f /usr/ccs/bin/ar ; then 2042 error_exit "No path includes ar" \ 2043 "Add /usr/ccs/bin to your path and rerun configure" 2044 fi 2045 error_exit "No path includes ar" 2046 fi 2047fi 2048 2049if test -z "${target_list+xxx}" ; then 2050 for target in $default_target_list; do 2051 supported_target $target 2>/dev/null && \ 2052 target_list="$target_list $target" 2053 done 2054 target_list="${target_list# }" 2055else 2056 target_list=$(echo "$target_list" | sed -e 's/,/ /g') 2057 for target in $target_list; do 2058 # Check that we recognised the target name; this allows a more 2059 # friendly error message than if we let it fall through. 2060 case " $default_target_list " in 2061 *" $target "*) 2062 ;; 2063 *) 2064 error_exit "Unknown target name '$target'" 2065 ;; 2066 esac 2067 supported_target $target || exit 1 2068 done 2069fi 2070 2071# see if system emulation was really requested 2072case " $target_list " in 2073 *"-softmmu "*) softmmu=yes 2074 ;; 2075 *) softmmu=no 2076 ;; 2077esac 2078 2079feature_not_found() { 2080 feature=$1 2081 remedy=$2 2082 2083 error_exit "User requested feature $feature" \ 2084 "configure was not able to find it." \ 2085 "$remedy" 2086} 2087 2088# --- 2089# big/little endian test 2090cat > $TMPC << EOF 2091short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; 2092short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; 2093extern int foo(short *, short *); 2094int main(int argc, char *argv[]) { 2095 return foo(big_endian, little_endian); 2096} 2097EOF 2098 2099if compile_object ; then 2100 if strings -a $TMPO | grep -q BiGeNdIaN ; then 2101 bigendian="yes" 2102 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then 2103 bigendian="no" 2104 else 2105 echo big/little test failed 2106 fi 2107else 2108 echo big/little test failed 2109fi 2110 2111########################################## 2112# cocoa implies not SDL or GTK 2113# (the cocoa UI code currently assumes it is always the active UI 2114# and doesn't interact well with other UI frontend code) 2115if test "$cocoa" = "yes"; then 2116 if test "$sdl" = "yes"; then 2117 error_exit "Cocoa and SDL UIs cannot both be enabled at once" 2118 fi 2119 if test "$gtk" = "yes"; then 2120 error_exit "Cocoa and GTK UIs cannot both be enabled at once" 2121 fi 2122 gtk=no 2123 sdl=no 2124fi 2125 2126# Some versions of Mac OS X incorrectly define SIZE_MAX 2127cat > $TMPC << EOF 2128#include <stdint.h> 2129#include <stdio.h> 2130int main(int argc, char *argv[]) { 2131 return printf("%zu", SIZE_MAX); 2132} 2133EOF 2134have_broken_size_max=no 2135if ! compile_object -Werror ; then 2136 have_broken_size_max=yes 2137fi 2138 2139########################################## 2140# L2TPV3 probe 2141 2142cat > $TMPC <<EOF 2143#include <sys/socket.h> 2144#include <linux/ip.h> 2145int main(void) { return sizeof(struct mmsghdr); } 2146EOF 2147if compile_prog "" "" ; then 2148 l2tpv3=yes 2149else 2150 l2tpv3=no 2151fi 2152 2153########################################## 2154# MinGW / Mingw-w64 localtime_r/gmtime_r check 2155 2156if test "$mingw32" = "yes"; then 2157 # Some versions of MinGW / Mingw-w64 lack localtime_r 2158 # and gmtime_r entirely. 2159 # 2160 # Some versions of Mingw-w64 define a macro for 2161 # localtime_r/gmtime_r. 2162 # 2163 # Some versions of Mingw-w64 will define functions 2164 # for localtime_r/gmtime_r, but only if you have 2165 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun 2166 # though, unistd.h and pthread.h both define 2167 # that for you. 2168 # 2169 # So this #undef localtime_r and #include <unistd.h> 2170 # are not in fact redundant. 2171cat > $TMPC << EOF 2172#include <unistd.h> 2173#include <time.h> 2174#undef localtime_r 2175int main(void) { localtime_r(NULL, NULL); return 0; } 2176EOF 2177 if compile_prog "" "" ; then 2178 localtime_r="yes" 2179 else 2180 localtime_r="no" 2181 fi 2182fi 2183 2184########################################## 2185# pkg-config probe 2186 2187if ! has "$pkg_config_exe"; then 2188 error_exit "pkg-config binary '$pkg_config_exe' not found" 2189fi 2190 2191########################################## 2192# NPTL probe 2193 2194if test "$linux_user" = "yes"; then 2195 cat > $TMPC <<EOF 2196#include <sched.h> 2197#include <linux/futex.h> 2198int main(void) { 2199#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) 2200#error bork 2201#endif 2202 return 0; 2203} 2204EOF 2205 if ! compile_object ; then 2206 feature_not_found "nptl" "Install glibc and linux kernel headers." 2207 fi 2208fi 2209 2210########################################## 2211# lzo check 2212 2213if test "$lzo" != "no" ; then 2214 cat > $TMPC << EOF 2215#include <lzo/lzo1x.h> 2216int main(void) { lzo_version(); return 0; } 2217EOF 2218 if compile_prog "" "-llzo2" ; then 2219 libs_softmmu="$libs_softmmu -llzo2" 2220 lzo="yes" 2221 else 2222 if test "$lzo" = "yes"; then 2223 feature_not_found "liblzo2" "Install liblzo2 devel" 2224 fi 2225 lzo="no" 2226 fi 2227fi 2228 2229########################################## 2230# snappy check 2231 2232if test "$snappy" != "no" ; then 2233 cat > $TMPC << EOF 2234#include <snappy-c.h> 2235int main(void) { snappy_max_compressed_length(4096); return 0; } 2236EOF 2237 if compile_prog "" "-lsnappy" ; then 2238 libs_softmmu="$libs_softmmu -lsnappy" 2239 snappy="yes" 2240 else 2241 if test "$snappy" = "yes"; then 2242 feature_not_found "libsnappy" "Install libsnappy devel" 2243 fi 2244 snappy="no" 2245 fi 2246fi 2247 2248########################################## 2249# bzip2 check 2250 2251if test "$bzip2" != "no" ; then 2252 cat > $TMPC << EOF 2253#include <bzlib.h> 2254int main(void) { BZ2_bzlibVersion(); return 0; } 2255EOF 2256 if compile_prog "" "-lbz2" ; then 2257 bzip2="yes" 2258 else 2259 if test "$bzip2" = "yes"; then 2260 feature_not_found "libbzip2" "Install libbzip2 devel" 2261 fi 2262 bzip2="no" 2263 fi 2264fi 2265 2266########################################## 2267# libseccomp check 2268 2269libseccomp_minver="2.2.0" 2270if test "$seccomp" != "no" ; then 2271 case "$cpu" in 2272 i386|x86_64|mips) 2273 ;; 2274 arm|aarch64) 2275 libseccomp_minver="2.2.3" 2276 ;; 2277 ppc|ppc64|s390x) 2278 libseccomp_minver="2.3.0" 2279 ;; 2280 *) 2281 libseccomp_minver="" 2282 ;; 2283 esac 2284 2285 if test "$libseccomp_minver" != "" && 2286 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then 2287 seccomp_cflags="$($pkg_config --cflags libseccomp)" 2288 seccomp_libs="$($pkg_config --libs libseccomp)" 2289 seccomp="yes" 2290 else 2291 if test "$seccomp" = "yes" ; then 2292 if test "$libseccomp_minver" != "" ; then 2293 feature_not_found "libseccomp" \ 2294 "Install libseccomp devel >= $libseccomp_minver" 2295 else 2296 feature_not_found "libseccomp" \ 2297 "libseccomp is not supported for host cpu $cpu" 2298 fi 2299 fi 2300 seccomp="no" 2301 fi 2302fi 2303########################################## 2304# xen probe 2305 2306if test "$xen" != "no" ; then 2307 # Check whether Xen library path is specified via --extra-ldflags to avoid 2308 # overriding this setting with pkg-config output. If not, try pkg-config 2309 # to obtain all needed flags. 2310 2311 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2312 $pkg_config --exists xencontrol ; then 2313 xen_ctrl_version="$(printf '%d%02d%02d' \ 2314 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 2315 xen=yes 2316 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab" 2317 xen_pc="$xen_pc xenevtchn xendevicemodel" 2318 if $pkg_config --exists xentoolcore; then 2319 xen_pc="$xen_pc xentoolcore" 2320 fi 2321 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)" 2322 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu" 2323 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS" 2324 else 2325 2326 xen_libs="-lxenstore -lxenctrl -lxenguest" 2327 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2328 2329 # First we test whether Xen headers and libraries are available. 2330 # If no, we are done and there is no Xen support. 2331 # If yes, more tests are run to detect the Xen version. 2332 2333 # Xen (any) 2334 cat > $TMPC <<EOF 2335#include <xenctrl.h> 2336int main(void) { 2337 return 0; 2338} 2339EOF 2340 if ! compile_prog "" "$xen_libs" ; then 2341 # Xen not found 2342 if test "$xen" = "yes" ; then 2343 feature_not_found "xen" "Install xen devel" 2344 fi 2345 xen=no 2346 2347 # Xen unstable 2348 elif 2349 cat > $TMPC <<EOF && 2350#undef XC_WANT_COMPAT_DEVICEMODEL_API 2351#define __XEN_TOOLS__ 2352#include <xendevicemodel.h> 2353#include <xenforeignmemory.h> 2354int main(void) { 2355 xendevicemodel_handle *xd; 2356 xenforeignmemory_handle *xfmem; 2357 2358 xd = xendevicemodel_open(0, 0); 2359 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 2360 2361 xfmem = xenforeignmemory_open(0, 0); 2362 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2363 2364 return 0; 2365} 2366EOF 2367 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2368 then 2369 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2370 xen_ctrl_version=41100 2371 xen=yes 2372 elif 2373 cat > $TMPC <<EOF && 2374#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2375#include <xenforeignmemory.h> 2376#include <xentoolcore.h> 2377int main(void) { 2378 xenforeignmemory_handle *xfmem; 2379 2380 xfmem = xenforeignmemory_open(0, 0); 2381 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 2382 xentoolcore_restrict_all(0); 2383 2384 return 0; 2385} 2386EOF 2387 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2388 then 2389 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2390 xen_ctrl_version=41000 2391 xen=yes 2392 elif 2393 cat > $TMPC <<EOF && 2394#undef XC_WANT_COMPAT_DEVICEMODEL_API 2395#define __XEN_TOOLS__ 2396#include <xendevicemodel.h> 2397int main(void) { 2398 xendevicemodel_handle *xd; 2399 2400 xd = xendevicemodel_open(0, 0); 2401 xendevicemodel_close(xd); 2402 2403 return 0; 2404} 2405EOF 2406 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2407 then 2408 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2409 xen_ctrl_version=40900 2410 xen=yes 2411 elif 2412 cat > $TMPC <<EOF && 2413/* 2414 * If we have stable libs the we don't want the libxc compat 2415 * layers, regardless of what CFLAGS we may have been given. 2416 * 2417 * Also, check if xengnttab_grant_copy_segment_t is defined and 2418 * grant copy operation is implemented. 2419 */ 2420#undef XC_WANT_COMPAT_EVTCHN_API 2421#undef XC_WANT_COMPAT_GNTTAB_API 2422#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2423#include <xenctrl.h> 2424#include <xenstore.h> 2425#include <xenevtchn.h> 2426#include <xengnttab.h> 2427#include <xenforeignmemory.h> 2428#include <stdint.h> 2429#include <xen/hvm/hvm_info_table.h> 2430#if !defined(HVM_MAX_VCPUS) 2431# error HVM_MAX_VCPUS not defined 2432#endif 2433int main(void) { 2434 xc_interface *xc = NULL; 2435 xenforeignmemory_handle *xfmem; 2436 xenevtchn_handle *xe; 2437 xengnttab_handle *xg; 2438 xen_domain_handle_t handle; 2439 xengnttab_grant_copy_segment_t* seg = NULL; 2440 2441 xs_daemon_open(); 2442 2443 xc = xc_interface_open(0, 0, 0); 2444 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2445 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2446 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2447 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2448 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2449 2450 xfmem = xenforeignmemory_open(0, 0); 2451 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2452 2453 xe = xenevtchn_open(0, 0); 2454 xenevtchn_fd(xe); 2455 2456 xg = xengnttab_open(0, 0); 2457 xengnttab_grant_copy(xg, 0, seg); 2458 2459 return 0; 2460} 2461EOF 2462 compile_prog "" "$xen_libs $xen_stable_libs" 2463 then 2464 xen_ctrl_version=40800 2465 xen=yes 2466 elif 2467 cat > $TMPC <<EOF && 2468/* 2469 * If we have stable libs the we don't want the libxc compat 2470 * layers, regardless of what CFLAGS we may have been given. 2471 */ 2472#undef XC_WANT_COMPAT_EVTCHN_API 2473#undef XC_WANT_COMPAT_GNTTAB_API 2474#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2475#include <xenctrl.h> 2476#include <xenstore.h> 2477#include <xenevtchn.h> 2478#include <xengnttab.h> 2479#include <xenforeignmemory.h> 2480#include <stdint.h> 2481#include <xen/hvm/hvm_info_table.h> 2482#if !defined(HVM_MAX_VCPUS) 2483# error HVM_MAX_VCPUS not defined 2484#endif 2485int main(void) { 2486 xc_interface *xc = NULL; 2487 xenforeignmemory_handle *xfmem; 2488 xenevtchn_handle *xe; 2489 xengnttab_handle *xg; 2490 xen_domain_handle_t handle; 2491 2492 xs_daemon_open(); 2493 2494 xc = xc_interface_open(0, 0, 0); 2495 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2496 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2497 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2498 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2499 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2500 2501 xfmem = xenforeignmemory_open(0, 0); 2502 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2503 2504 xe = xenevtchn_open(0, 0); 2505 xenevtchn_fd(xe); 2506 2507 xg = xengnttab_open(0, 0); 2508 xengnttab_map_grant_ref(xg, 0, 0, 0); 2509 2510 return 0; 2511} 2512EOF 2513 compile_prog "" "$xen_libs $xen_stable_libs" 2514 then 2515 xen_ctrl_version=40701 2516 xen=yes 2517 elif 2518 cat > $TMPC <<EOF && 2519#include <xenctrl.h> 2520#include <stdint.h> 2521int main(void) { 2522 xc_interface *xc = NULL; 2523 xen_domain_handle_t handle; 2524 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2525 return 0; 2526} 2527EOF 2528 compile_prog "" "$xen_libs" 2529 then 2530 xen_ctrl_version=40700 2531 xen=yes 2532 2533 # Xen 4.6 2534 elif 2535 cat > $TMPC <<EOF && 2536#include <xenctrl.h> 2537#include <xenstore.h> 2538#include <stdint.h> 2539#include <xen/hvm/hvm_info_table.h> 2540#if !defined(HVM_MAX_VCPUS) 2541# error HVM_MAX_VCPUS not defined 2542#endif 2543int main(void) { 2544 xc_interface *xc; 2545 xs_daemon_open(); 2546 xc = xc_interface_open(0, 0, 0); 2547 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2548 xc_gnttab_open(NULL, 0); 2549 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2550 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2551 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2552 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2553 return 0; 2554} 2555EOF 2556 compile_prog "" "$xen_libs" 2557 then 2558 xen_ctrl_version=40600 2559 xen=yes 2560 2561 # Xen 4.5 2562 elif 2563 cat > $TMPC <<EOF && 2564#include <xenctrl.h> 2565#include <xenstore.h> 2566#include <stdint.h> 2567#include <xen/hvm/hvm_info_table.h> 2568#if !defined(HVM_MAX_VCPUS) 2569# error HVM_MAX_VCPUS not defined 2570#endif 2571int main(void) { 2572 xc_interface *xc; 2573 xs_daemon_open(); 2574 xc = xc_interface_open(0, 0, 0); 2575 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2576 xc_gnttab_open(NULL, 0); 2577 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2578 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2579 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2580 return 0; 2581} 2582EOF 2583 compile_prog "" "$xen_libs" 2584 then 2585 xen_ctrl_version=40500 2586 xen=yes 2587 2588 elif 2589 cat > $TMPC <<EOF && 2590#include <xenctrl.h> 2591#include <xenstore.h> 2592#include <stdint.h> 2593#include <xen/hvm/hvm_info_table.h> 2594#if !defined(HVM_MAX_VCPUS) 2595# error HVM_MAX_VCPUS not defined 2596#endif 2597int main(void) { 2598 xc_interface *xc; 2599 xs_daemon_open(); 2600 xc = xc_interface_open(0, 0, 0); 2601 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2602 xc_gnttab_open(NULL, 0); 2603 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2604 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2605 return 0; 2606} 2607EOF 2608 compile_prog "" "$xen_libs" 2609 then 2610 xen_ctrl_version=40200 2611 xen=yes 2612 2613 else 2614 if test "$xen" = "yes" ; then 2615 feature_not_found "xen (unsupported version)" \ 2616 "Install a supported xen (xen 4.2 or newer)" 2617 fi 2618 xen=no 2619 fi 2620 2621 if test "$xen" = yes; then 2622 if test $xen_ctrl_version -ge 40701 ; then 2623 libs_softmmu="$xen_stable_libs $libs_softmmu" 2624 fi 2625 libs_softmmu="$xen_libs $libs_softmmu" 2626 fi 2627 fi 2628fi 2629 2630if test "$xen_pci_passthrough" != "no"; then 2631 if test "$xen" = "yes" && test "$linux" = "yes"; then 2632 xen_pci_passthrough=yes 2633 else 2634 if test "$xen_pci_passthrough" = "yes"; then 2635 error_exit "User requested feature Xen PCI Passthrough" \ 2636 " but this feature requires /sys from Linux" 2637 fi 2638 xen_pci_passthrough=no 2639 fi 2640fi 2641 2642if test "$xen_pv_domain_build" = "yes" && 2643 test "$xen" != "yes"; then 2644 error_exit "User requested Xen PV domain builder support" \ 2645 "which requires Xen support." 2646fi 2647 2648########################################## 2649# Windows Hypervisor Platform accelerator (WHPX) check 2650if test "$whpx" != "no" ; then 2651 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then 2652 whpx="yes" 2653 else 2654 if test "$whpx" = "yes"; then 2655 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed" 2656 fi 2657 whpx="no" 2658 fi 2659fi 2660 2661########################################## 2662# Sparse probe 2663if test "$sparse" != "no" ; then 2664 if has cgcc; then 2665 sparse=yes 2666 else 2667 if test "$sparse" = "yes" ; then 2668 feature_not_found "sparse" "Install sparse binary" 2669 fi 2670 sparse=no 2671 fi 2672fi 2673 2674########################################## 2675# X11 probe 2676if $pkg_config --exists "x11"; then 2677 have_x11=yes 2678 x11_cflags=$($pkg_config --cflags x11) 2679 x11_libs=$($pkg_config --libs x11) 2680fi 2681 2682########################################## 2683# GTK probe 2684 2685if test "$gtk" != "no"; then 2686 gtkpackage="gtk+-3.0" 2687 gtkx11package="gtk+-x11-3.0" 2688 gtkversion="3.14.0" 2689 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then 2690 gtk_cflags=$($pkg_config --cflags $gtkpackage) 2691 gtk_libs=$($pkg_config --libs $gtkpackage) 2692 gtk_version=$($pkg_config --modversion $gtkpackage) 2693 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then 2694 need_x11=yes 2695 gtk_cflags="$gtk_cflags $x11_cflags" 2696 gtk_libs="$gtk_libs $x11_libs" 2697 fi 2698 gtk="yes" 2699 elif test "$gtk" = "yes"; then 2700 feature_not_found "gtk" "Install gtk3-devel" 2701 else 2702 gtk="no" 2703 fi 2704fi 2705 2706 2707########################################## 2708# GNUTLS probe 2709 2710if test "$gnutls" != "no"; then 2711 if $pkg_config --exists "gnutls >= 3.1.18"; then 2712 gnutls_cflags=$($pkg_config --cflags gnutls) 2713 gnutls_libs=$($pkg_config --libs gnutls) 2714 libs_softmmu="$gnutls_libs $libs_softmmu" 2715 libs_tools="$gnutls_libs $libs_tools" 2716 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags" 2717 gnutls="yes" 2718 elif test "$gnutls" = "yes"; then 2719 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18" 2720 else 2721 gnutls="no" 2722 fi 2723fi 2724 2725 2726# If user didn't give a --disable/enable-gcrypt flag, 2727# then mark as disabled if user requested nettle 2728# explicitly 2729if test -z "$gcrypt" 2730then 2731 if test "$nettle" = "yes" 2732 then 2733 gcrypt="no" 2734 fi 2735fi 2736 2737# If user didn't give a --disable/enable-nettle flag, 2738# then mark as disabled if user requested gcrypt 2739# explicitly 2740if test -z "$nettle" 2741then 2742 if test "$gcrypt" = "yes" 2743 then 2744 nettle="no" 2745 fi 2746fi 2747 2748has_libgcrypt() { 2749 if ! has "libgcrypt-config" 2750 then 2751 return 1 2752 fi 2753 2754 if test -n "$cross_prefix" 2755 then 2756 host=$(libgcrypt-config --host) 2757 if test "$host-" != $cross_prefix 2758 then 2759 return 1 2760 fi 2761 fi 2762 2763 maj=`libgcrypt-config --version | awk -F . '{print $1}'` 2764 min=`libgcrypt-config --version | awk -F . '{print $2}'` 2765 2766 if test $maj != 1 || test $min -lt 5 2767 then 2768 return 1 2769 fi 2770 2771 return 0 2772} 2773 2774 2775if test "$nettle" != "no"; then 2776 if $pkg_config --exists "nettle >= 2.7.1"; then 2777 nettle_cflags=$($pkg_config --cflags nettle) 2778 nettle_libs=$($pkg_config --libs nettle) 2779 nettle_version=$($pkg_config --modversion nettle) 2780 libs_softmmu="$nettle_libs $libs_softmmu" 2781 libs_tools="$nettle_libs $libs_tools" 2782 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags" 2783 nettle="yes" 2784 2785 if test -z "$gcrypt"; then 2786 gcrypt="no" 2787 fi 2788 else 2789 if test "$nettle" = "yes"; then 2790 feature_not_found "nettle" "Install nettle devel >= 2.7.1" 2791 else 2792 nettle="no" 2793 fi 2794 fi 2795fi 2796 2797if test "$gcrypt" != "no"; then 2798 if has_libgcrypt; then 2799 gcrypt_cflags=$(libgcrypt-config --cflags) 2800 gcrypt_libs=$(libgcrypt-config --libs) 2801 # Debian has remove -lgpg-error from libgcrypt-config 2802 # as it "spreads unnecessary dependencies" which in 2803 # turn breaks static builds... 2804 if test "$static" = "yes" 2805 then 2806 gcrypt_libs="$gcrypt_libs -lgpg-error" 2807 fi 2808 libs_softmmu="$gcrypt_libs $libs_softmmu" 2809 libs_tools="$gcrypt_libs $libs_tools" 2810 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags" 2811 gcrypt="yes" 2812 2813 cat > $TMPC << EOF 2814#include <gcrypt.h> 2815int main(void) { 2816 gcry_mac_hd_t handle; 2817 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, 2818 GCRY_MAC_FLAG_SECURE, NULL); 2819 return 0; 2820} 2821EOF 2822 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 2823 gcrypt_hmac=yes 2824 fi 2825 else 2826 if test "$gcrypt" = "yes"; then 2827 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0" 2828 else 2829 gcrypt="no" 2830 fi 2831 fi 2832fi 2833 2834 2835if test "$gcrypt" = "yes" && test "$nettle" = "yes" 2836then 2837 error_exit "Only one of gcrypt & nettle can be enabled" 2838fi 2839 2840########################################## 2841# libtasn1 - only for the TLS creds/session test suite 2842 2843tasn1=yes 2844tasn1_cflags="" 2845tasn1_libs="" 2846if $pkg_config --exists "libtasn1"; then 2847 tasn1_cflags=$($pkg_config --cflags libtasn1) 2848 tasn1_libs=$($pkg_config --libs libtasn1) 2849else 2850 tasn1=no 2851fi 2852 2853 2854########################################## 2855# getifaddrs (for tests/test-io-channel-socket ) 2856 2857have_ifaddrs_h=yes 2858if ! check_include "ifaddrs.h" ; then 2859 have_ifaddrs_h=no 2860fi 2861 2862########################################## 2863# VTE probe 2864 2865if test "$vte" != "no"; then 2866 vteminversion="0.32.0" 2867 if $pkg_config --exists "vte-2.91"; then 2868 vtepackage="vte-2.91" 2869 else 2870 vtepackage="vte-2.90" 2871 fi 2872 if $pkg_config --exists "$vtepackage >= $vteminversion"; then 2873 vte_cflags=$($pkg_config --cflags $vtepackage) 2874 vte_libs=$($pkg_config --libs $vtepackage) 2875 vteversion=$($pkg_config --modversion $vtepackage) 2876 vte="yes" 2877 elif test "$vte" = "yes"; then 2878 feature_not_found "vte" "Install libvte-2.90/2.91 devel" 2879 else 2880 vte="no" 2881 fi 2882fi 2883 2884########################################## 2885# SDL probe 2886 2887# Look for sdl configuration program (pkg-config or sdl-config). Try 2888# sdl-config even without cross prefix, and favour pkg-config over sdl-config. 2889 2890sdl_probe () 2891{ 2892 sdl_too_old=no 2893 if test "$sdlabi" = ""; then 2894 if $pkg_config --exists "sdl2"; then 2895 sdlabi=2.0 2896 elif $pkg_config --exists "sdl"; then 2897 sdlabi=1.2 2898 else 2899 sdlabi=2.0 2900 fi 2901 fi 2902 2903 if test $sdlabi = "2.0"; then 2904 sdl_config=$sdl2_config 2905 sdlname=sdl2 2906 sdlconfigname=sdl2_config 2907 elif test $sdlabi = "1.2"; then 2908 sdlname=sdl 2909 sdlconfigname=sdl_config 2910 else 2911 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0" 2912 fi 2913 2914 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then 2915 sdl_config=$sdlconfigname 2916 fi 2917 2918 if $pkg_config $sdlname --exists; then 2919 sdlconfig="$pkg_config $sdlname" 2920 sdlversion=$($sdlconfig --modversion 2>/dev/null) 2921 elif has ${sdl_config}; then 2922 sdlconfig="$sdl_config" 2923 sdlversion=$($sdlconfig --version) 2924 else 2925 if test "$sdl" = "yes" ; then 2926 feature_not_found "sdl" "Install SDL2-devel" 2927 fi 2928 sdl=no 2929 # no need to do the rest 2930 return 2931 fi 2932 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then 2933 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2 2934 fi 2935 2936 cat > $TMPC << EOF 2937#include <SDL.h> 2938#undef main /* We don't want SDL to override our main() */ 2939int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } 2940EOF 2941 sdl_cflags=$($sdlconfig --cflags 2>/dev/null) 2942 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug 2943 if test "$static" = "yes" ; then 2944 if $pkg_config $sdlname --exists; then 2945 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null) 2946 else 2947 sdl_libs=$($sdlconfig --static-libs 2>/dev/null) 2948 fi 2949 else 2950 sdl_libs=$($sdlconfig --libs 2>/dev/null) 2951 fi 2952 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 2953 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then 2954 sdl_too_old=yes 2955 else 2956 sdl=yes 2957 fi 2958 2959 # static link with sdl ? (note: sdl.pc's --static --libs is broken) 2960 if test "$sdl" = "yes" -a "$static" = "yes" ; then 2961 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then 2962 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)" 2963 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)" 2964 fi 2965 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 2966 : 2967 else 2968 sdl=no 2969 fi 2970 fi # static link 2971 else # sdl not found 2972 if test "$sdl" = "yes" ; then 2973 feature_not_found "sdl" "Install SDL devel" 2974 fi 2975 sdl=no 2976 fi # sdl compile test 2977} 2978 2979if test "$sdl" != "no" ; then 2980 sdl_probe 2981fi 2982 2983if test "$sdl" = "yes" ; then 2984 cat > $TMPC <<EOF 2985#include <SDL.h> 2986#if defined(SDL_VIDEO_DRIVER_X11) 2987#include <X11/XKBlib.h> 2988#else 2989#error No x11 support 2990#endif 2991int main(void) { return 0; } 2992EOF 2993 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then 2994 need_x11=yes 2995 sdl_cflags="$sdl_cflags $x11_cflags" 2996 sdl_libs="$sdl_libs $x11_libs" 2997 fi 2998fi 2999 3000########################################## 3001# RDMA needs OpenFabrics libraries 3002if test "$rdma" != "no" ; then 3003 cat > $TMPC <<EOF 3004#include <rdma/rdma_cma.h> 3005int main(void) { return 0; } 3006EOF 3007 rdma_libs="-lrdmacm -libverbs -libumad" 3008 if compile_prog "" "$rdma_libs" ; then 3009 rdma="yes" 3010 libs_softmmu="$libs_softmmu $rdma_libs" 3011 else 3012 if test "$rdma" = "yes" ; then 3013 error_exit \ 3014 " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 3015 " Your options:" \ 3016 " (1) Fast: Install infiniband packages (devel) from your distro." \ 3017 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 3018 " (3) Also: Install softiwarp if you don't have RDMA hardware" 3019 fi 3020 rdma="no" 3021 fi 3022fi 3023 3024########################################## 3025# PVRDMA detection 3026 3027cat > $TMPC <<EOF && 3028#include <sys/mman.h> 3029 3030int 3031main(void) 3032{ 3033 char buf = 0; 3034 void *addr = &buf; 3035 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 3036 3037 return 0; 3038} 3039EOF 3040 3041if test "$rdma" = "yes" ; then 3042 case "$pvrdma" in 3043 "") 3044 if compile_prog "" ""; then 3045 pvrdma="yes" 3046 else 3047 pvrdma="no" 3048 fi 3049 ;; 3050 "yes") 3051 if ! compile_prog "" ""; then 3052 error_exit "PVRDMA is not supported since mremap is not implemented" 3053 fi 3054 pvrdma="yes" 3055 ;; 3056 "no") 3057 pvrdma="no" 3058 ;; 3059 esac 3060else 3061 if test "$pvrdma" = "yes" ; then 3062 error_exit "PVRDMA requires rdma suppport" 3063 fi 3064 pvrdma="no" 3065fi 3066 3067########################################## 3068# VNC SASL detection 3069if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then 3070 cat > $TMPC <<EOF 3071#include <sasl/sasl.h> 3072#include <stdio.h> 3073int main(void) { sasl_server_init(NULL, "qemu"); return 0; } 3074EOF 3075 # Assuming Cyrus-SASL installed in /usr prefix 3076 vnc_sasl_cflags="" 3077 vnc_sasl_libs="-lsasl2" 3078 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then 3079 vnc_sasl=yes 3080 libs_softmmu="$vnc_sasl_libs $libs_softmmu" 3081 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags" 3082 else 3083 if test "$vnc_sasl" = "yes" ; then 3084 feature_not_found "vnc-sasl" "Install Cyrus SASL devel" 3085 fi 3086 vnc_sasl=no 3087 fi 3088fi 3089 3090########################################## 3091# VNC JPEG detection 3092if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then 3093cat > $TMPC <<EOF 3094#include <stdio.h> 3095#include <jpeglib.h> 3096int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; } 3097EOF 3098 vnc_jpeg_cflags="" 3099 vnc_jpeg_libs="-ljpeg" 3100 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then 3101 vnc_jpeg=yes 3102 libs_softmmu="$vnc_jpeg_libs $libs_softmmu" 3103 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags" 3104 else 3105 if test "$vnc_jpeg" = "yes" ; then 3106 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel" 3107 fi 3108 vnc_jpeg=no 3109 fi 3110fi 3111 3112########################################## 3113# VNC PNG detection 3114if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then 3115cat > $TMPC <<EOF 3116//#include <stdio.h> 3117#include <png.h> 3118#include <stddef.h> 3119int main(void) { 3120 png_structp png_ptr; 3121 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 3122 return png_ptr != 0; 3123} 3124EOF 3125 if $pkg_config libpng --exists; then 3126 vnc_png_cflags=$($pkg_config libpng --cflags) 3127 vnc_png_libs=$($pkg_config libpng --libs) 3128 else 3129 vnc_png_cflags="" 3130 vnc_png_libs="-lpng" 3131 fi 3132 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then 3133 vnc_png=yes 3134 libs_softmmu="$vnc_png_libs $libs_softmmu" 3135 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags" 3136 else 3137 if test "$vnc_png" = "yes" ; then 3138 feature_not_found "vnc-png" "Install libpng devel" 3139 fi 3140 vnc_png=no 3141 fi 3142fi 3143 3144########################################## 3145# xkbcommon probe 3146if test "$xkbcommon" != "no" ; then 3147 if $pkg_config xkbcommon --exists; then 3148 xkbcommon_cflags=$($pkg_config xkbcommon --cflags) 3149 xkbcommon_libs=$($pkg_config xkbcommon --libs) 3150 xkbcommon=yes 3151 else 3152 if test "$xkbcommon" = "yes" ; then 3153 feature_not_found "xkbcommon" "Install libxkbcommon-devel" 3154 fi 3155 xkbcommon=no 3156 fi 3157fi 3158 3159########################################## 3160# fnmatch() probe, used for ACL routines 3161fnmatch="no" 3162cat > $TMPC << EOF 3163#include <fnmatch.h> 3164int main(void) 3165{ 3166 fnmatch("foo", "foo", 0); 3167 return 0; 3168} 3169EOF 3170if compile_prog "" "" ; then 3171 fnmatch="yes" 3172fi 3173 3174########################################## 3175# xfsctl() probe, used for file-posix.c 3176if test "$xfs" != "no" ; then 3177 cat > $TMPC << EOF 3178#include <stddef.h> /* NULL */ 3179#include <xfs/xfs.h> 3180int main(void) 3181{ 3182 xfsctl(NULL, 0, 0, NULL); 3183 return 0; 3184} 3185EOF 3186 if compile_prog "" "" ; then 3187 xfs="yes" 3188 else 3189 if test "$xfs" = "yes" ; then 3190 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel" 3191 fi 3192 xfs=no 3193 fi 3194fi 3195 3196########################################## 3197# vde libraries probe 3198if test "$vde" != "no" ; then 3199 vde_libs="-lvdeplug" 3200 cat > $TMPC << EOF 3201#include <libvdeplug.h> 3202int main(void) 3203{ 3204 struct vde_open_args a = {0, 0, 0}; 3205 char s[] = ""; 3206 vde_open(s, s, &a); 3207 return 0; 3208} 3209EOF 3210 if compile_prog "" "$vde_libs" ; then 3211 vde=yes 3212 else 3213 if test "$vde" = "yes" ; then 3214 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" 3215 fi 3216 vde=no 3217 fi 3218fi 3219 3220########################################## 3221# netmap support probe 3222# Apart from looking for netmap headers, we make sure that the host API version 3223# supports the netmap backend (>=11). The upper bound (15) is meant to simulate 3224# a minor/major version number. Minor new features will be marked with values up 3225# to 15, and if something happens that requires a change to the backend we will 3226# move above 15, submit the backend fixes and modify this two bounds. 3227if test "$netmap" != "no" ; then 3228 cat > $TMPC << EOF 3229#include <inttypes.h> 3230#include <net/if.h> 3231#include <net/netmap.h> 3232#include <net/netmap_user.h> 3233#if (NETMAP_API < 11) || (NETMAP_API > 15) 3234#error 3235#endif 3236int main(void) { return 0; } 3237EOF 3238 if compile_prog "" "" ; then 3239 netmap=yes 3240 else 3241 if test "$netmap" = "yes" ; then 3242 feature_not_found "netmap" 3243 fi 3244 netmap=no 3245 fi 3246fi 3247 3248########################################## 3249# libcap-ng library probe 3250if test "$cap_ng" != "no" ; then 3251 cap_libs="-lcap-ng" 3252 cat > $TMPC << EOF 3253#include <cap-ng.h> 3254int main(void) 3255{ 3256 capng_capability_to_name(CAPNG_EFFECTIVE); 3257 return 0; 3258} 3259EOF 3260 if compile_prog "" "$cap_libs" ; then 3261 cap_ng=yes 3262 libs_tools="$cap_libs $libs_tools" 3263 else 3264 if test "$cap_ng" = "yes" ; then 3265 feature_not_found "cap_ng" "Install libcap-ng devel" 3266 fi 3267 cap_ng=no 3268 fi 3269fi 3270 3271########################################## 3272# Sound support libraries probe 3273 3274audio_drv_probe() 3275{ 3276 drv=$1 3277 hdr=$2 3278 lib=$3 3279 exp=$4 3280 cfl=$5 3281 cat > $TMPC << EOF 3282#include <$hdr> 3283int main(void) { $exp } 3284EOF 3285 if compile_prog "$cfl" "$lib" ; then 3286 : 3287 else 3288 error_exit "$drv check failed" \ 3289 "Make sure to have the $drv libs and headers installed." 3290 fi 3291} 3292 3293audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') 3294for drv in $audio_drv_list; do 3295 case $drv in 3296 alsa) 3297 audio_drv_probe $drv alsa/asoundlib.h -lasound \ 3298 "return snd_pcm_close((snd_pcm_t *)0);" 3299 alsa_libs="-lasound" 3300 ;; 3301 3302 pa) 3303 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \ 3304 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;" 3305 pulse_libs="-lpulse" 3306 audio_pt_int="yes" 3307 ;; 3308 3309 sdl) 3310 if test "$sdl" = "no"; then 3311 error_exit "sdl not found or disabled, can not use sdl audio driver" 3312 fi 3313 ;; 3314 3315 coreaudio) 3316 coreaudio_libs="-framework CoreAudio" 3317 ;; 3318 3319 dsound) 3320 dsound_libs="-lole32 -ldxguid" 3321 audio_win_int="yes" 3322 ;; 3323 3324 oss) 3325 oss_libs="$oss_lib" 3326 ;; 3327 3328 wav) 3329 # XXX: Probes for CoreAudio, DirectSound 3330 ;; 3331 3332 *) 3333 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { 3334 error_exit "Unknown driver '$drv' selected" \ 3335 "Possible drivers are: $audio_possible_drivers" 3336 } 3337 ;; 3338 esac 3339done 3340 3341########################################## 3342# BrlAPI probe 3343 3344if test "$brlapi" != "no" ; then 3345 brlapi_libs="-lbrlapi" 3346 cat > $TMPC << EOF 3347#include <brlapi.h> 3348#include <stddef.h> 3349int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } 3350EOF 3351 if compile_prog "" "$brlapi_libs" ; then 3352 brlapi=yes 3353 else 3354 if test "$brlapi" = "yes" ; then 3355 feature_not_found "brlapi" "Install brlapi devel" 3356 fi 3357 brlapi=no 3358 fi 3359fi 3360 3361########################################## 3362# curses probe 3363if test "$curses" != "no" ; then 3364 if test "$mingw32" = "yes" ; then 3365 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):" 3366 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses" 3367 else 3368 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:" 3369 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw" 3370 fi 3371 curses_found=no 3372 cat > $TMPC << EOF 3373#include <locale.h> 3374#include <curses.h> 3375#include <wchar.h> 3376int main(void) { 3377 wchar_t wch = L'w'; 3378 setlocale(LC_ALL, ""); 3379 resize_term(0, 0); 3380 addwstr(L"wide chars\n"); 3381 addnwstr(&wch, 1); 3382 add_wch(WACS_DEGREE); 3383 return 0; 3384} 3385EOF 3386 IFS=: 3387 for curses_inc in $curses_inc_list; do 3388 # Make sure we get the wide character prototypes 3389 curses_inc="-DNCURSES_WIDECHAR $curses_inc" 3390 IFS=: 3391 for curses_lib in $curses_lib_list; do 3392 unset IFS 3393 if compile_prog "$curses_inc" "$curses_lib" ; then 3394 curses_found=yes 3395 break 3396 fi 3397 done 3398 if test "$curses_found" = yes ; then 3399 break 3400 fi 3401 done 3402 unset IFS 3403 if test "$curses_found" = "yes" ; then 3404 curses=yes 3405 else 3406 if test "$curses" = "yes" ; then 3407 feature_not_found "curses" "Install ncurses devel" 3408 fi 3409 curses=no 3410 fi 3411fi 3412 3413########################################## 3414# curl probe 3415if test "$curl" != "no" ; then 3416 if $pkg_config libcurl --exists; then 3417 curlconfig="$pkg_config libcurl" 3418 else 3419 curlconfig=curl-config 3420 fi 3421 cat > $TMPC << EOF 3422#include <curl/curl.h> 3423int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } 3424EOF 3425 curl_cflags=$($curlconfig --cflags 2>/dev/null) 3426 curl_libs=$($curlconfig --libs 2>/dev/null) 3427 if compile_prog "$curl_cflags" "$curl_libs" ; then 3428 curl=yes 3429 else 3430 if test "$curl" = "yes" ; then 3431 feature_not_found "curl" "Install libcurl devel" 3432 fi 3433 curl=no 3434 fi 3435fi # test "$curl" 3436 3437########################################## 3438# bluez support probe 3439if test "$bluez" != "no" ; then 3440 cat > $TMPC << EOF 3441#include <bluetooth/bluetooth.h> 3442int main(void) { return bt_error(0); } 3443EOF 3444 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null) 3445 bluez_libs=$($pkg_config --libs bluez 2>/dev/null) 3446 if compile_prog "$bluez_cflags" "$bluez_libs" ; then 3447 bluez=yes 3448 libs_softmmu="$bluez_libs $libs_softmmu" 3449 else 3450 if test "$bluez" = "yes" ; then 3451 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel" 3452 fi 3453 bluez="no" 3454 fi 3455fi 3456 3457########################################## 3458# glib support probe 3459 3460glib_req_ver=2.40 3461glib_modules=gthread-2.0 3462if test "$modules" = yes; then 3463 glib_modules="$glib_modules gmodule-export-2.0" 3464fi 3465 3466# This workaround is required due to a bug in pkg-config file for glib as it 3467# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3468 3469if test "$static" = yes -a "$mingw32" = yes; then 3470 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS" 3471fi 3472 3473for i in $glib_modules; do 3474 if $pkg_config --atleast-version=$glib_req_ver $i; then 3475 glib_cflags=$($pkg_config --cflags $i) 3476 glib_libs=$($pkg_config --libs $i) 3477 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS" 3478 LIBS="$glib_libs $LIBS" 3479 libs_qga="$glib_libs $libs_qga" 3480 else 3481 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3482 fi 3483done 3484 3485# Sanity check that the current size_t matches the 3486# size that glib thinks it should be. This catches 3487# problems on multi-arch where people try to build 3488# 32-bit QEMU while pointing at 64-bit glib headers 3489cat > $TMPC <<EOF 3490#include <glib.h> 3491#include <unistd.h> 3492 3493#define QEMU_BUILD_BUG_ON(x) \ 3494 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3495 3496int main(void) { 3497 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3498 return 0; 3499} 3500EOF 3501 3502if ! compile_prog "$CFLAGS" "$LIBS" ; then 3503 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3504 "You probably need to set PKG_CONFIG_LIBDIR"\ 3505 "to point to the right pkg-config files for your"\ 3506 "build target" 3507fi 3508 3509# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3510cat > $TMPC << EOF 3511#include <glib.h> 3512int main(void) { return 0; } 3513EOF 3514if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3515 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3516 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3517 CFLAGS="-Wno-unknown-attributes $CFLAGS" 3518 fi 3519fi 3520 3521######################################### 3522# zlib check 3523 3524if test "$zlib" != "no" ; then 3525 if $pkg_config --exists zlib; then 3526 zlib_cflags=$($pkg_config --cflags zlib) 3527 zlib_libs=$($pkg_config --libs zlib) 3528 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS" 3529 LIBS="$zlib_libs $LIBS" 3530 else 3531 cat > $TMPC << EOF 3532#include <zlib.h> 3533int main(void) { zlibVersion(); return 0; } 3534EOF 3535 if compile_prog "" "-lz" ; then 3536 LIBS="$LIBS -lz" 3537 else 3538 error_exit "zlib check failed" \ 3539 "Make sure to have the zlib libs and headers installed." 3540 fi 3541 fi 3542fi 3543 3544########################################## 3545# SHA command probe for modules 3546if test "$modules" = yes; then 3547 shacmd_probe="sha1sum sha1 shasum" 3548 for c in $shacmd_probe; do 3549 if has $c; then 3550 shacmd="$c" 3551 break 3552 fi 3553 done 3554 if test "$shacmd" = ""; then 3555 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3556 fi 3557fi 3558 3559########################################## 3560# pixman support probe 3561 3562if test "$want_tools" = "no" -a "$softmmu" = "no"; then 3563 pixman_cflags= 3564 pixman_libs= 3565elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then 3566 pixman_cflags=$($pkg_config --cflags pixman-1) 3567 pixman_libs=$($pkg_config --libs pixman-1) 3568else 3569 error_exit "pixman >= 0.21.8 not present." \ 3570 "Please install the pixman devel package." 3571fi 3572 3573########################################## 3574# libmpathpersist probe 3575 3576if test "$mpath" != "no" ; then 3577 # probe for the new API 3578 cat > $TMPC <<EOF 3579#include <libudev.h> 3580#include <mpath_persist.h> 3581unsigned mpath_mx_alloc_len = 1024; 3582int logsink; 3583static struct config *multipath_conf; 3584extern struct udev *udev; 3585extern struct config *get_multipath_config(void); 3586extern void put_multipath_config(struct config *conf); 3587struct udev *udev; 3588struct config *get_multipath_config(void) { return multipath_conf; } 3589void put_multipath_config(struct config *conf) { } 3590 3591int main(void) { 3592 udev = udev_new(); 3593 multipath_conf = mpath_lib_init(); 3594 return 0; 3595} 3596EOF 3597 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3598 mpathpersist=yes 3599 mpathpersist_new_api=yes 3600 else 3601 # probe for the old API 3602 cat > $TMPC <<EOF 3603#include <libudev.h> 3604#include <mpath_persist.h> 3605unsigned mpath_mx_alloc_len = 1024; 3606int logsink; 3607int main(void) { 3608 struct udev *udev = udev_new(); 3609 mpath_lib_init(udev); 3610 return 0; 3611} 3612EOF 3613 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3614 mpathpersist=yes 3615 mpathpersist_new_api=no 3616 else 3617 mpathpersist=no 3618 fi 3619 fi 3620else 3621 mpathpersist=no 3622fi 3623 3624########################################## 3625# libcap probe 3626 3627if test "$cap" != "no" ; then 3628 cat > $TMPC <<EOF 3629#include <stdio.h> 3630#include <sys/capability.h> 3631int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; } 3632EOF 3633 if compile_prog "" "-lcap" ; then 3634 cap=yes 3635 else 3636 cap=no 3637 fi 3638fi 3639 3640########################################## 3641# pthread probe 3642PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3643 3644pthread=no 3645cat > $TMPC << EOF 3646#include <pthread.h> 3647static void *f(void *p) { return NULL; } 3648int main(void) { 3649 pthread_t thread; 3650 pthread_create(&thread, 0, f, 0); 3651 return 0; 3652} 3653EOF 3654if compile_prog "" "" ; then 3655 pthread=yes 3656else 3657 for pthread_lib in $PTHREADLIBS_LIST; do 3658 if compile_prog "" "$pthread_lib" ; then 3659 pthread=yes 3660 found=no 3661 for lib_entry in $LIBS; do 3662 if test "$lib_entry" = "$pthread_lib"; then 3663 found=yes 3664 break 3665 fi 3666 done 3667 if test "$found" = "no"; then 3668 LIBS="$pthread_lib $LIBS" 3669 libs_qga="$pthread_lib $libs_qga" 3670 fi 3671 PTHREAD_LIB="$pthread_lib" 3672 break 3673 fi 3674 done 3675fi 3676 3677if test "$mingw32" != yes -a "$pthread" = no; then 3678 error_exit "pthread check failed" \ 3679 "Make sure to have the pthread libs and headers installed." 3680fi 3681 3682# check for pthread_setname_np 3683pthread_setname_np=no 3684cat > $TMPC << EOF 3685#include <pthread.h> 3686 3687static void *f(void *p) { return NULL; } 3688int main(void) 3689{ 3690 pthread_t thread; 3691 pthread_create(&thread, 0, f, 0); 3692 pthread_setname_np(thread, "QEMU"); 3693 return 0; 3694} 3695EOF 3696if compile_prog "" "$pthread_lib" ; then 3697 pthread_setname_np=yes 3698fi 3699 3700########################################## 3701# rbd probe 3702if test "$rbd" != "no" ; then 3703 cat > $TMPC <<EOF 3704#include <stdio.h> 3705#include <rbd/librbd.h> 3706int main(void) { 3707 rados_t cluster; 3708 rados_create(&cluster, NULL); 3709 return 0; 3710} 3711EOF 3712 rbd_libs="-lrbd -lrados" 3713 if compile_prog "" "$rbd_libs" ; then 3714 rbd=yes 3715 else 3716 if test "$rbd" = "yes" ; then 3717 feature_not_found "rados block device" "Install librbd/ceph devel" 3718 fi 3719 rbd=no 3720 fi 3721fi 3722 3723########################################## 3724# libssh2 probe 3725min_libssh2_version=1.2.8 3726if test "$libssh2" != "no" ; then 3727 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then 3728 libssh2_cflags=$($pkg_config libssh2 --cflags) 3729 libssh2_libs=$($pkg_config libssh2 --libs) 3730 libssh2=yes 3731 else 3732 if test "$libssh2" = "yes" ; then 3733 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2" 3734 fi 3735 libssh2=no 3736 fi 3737fi 3738 3739########################################## 3740# libssh2_sftp_fsync probe 3741 3742if test "$libssh2" = "yes"; then 3743 cat > $TMPC <<EOF 3744#include <stdio.h> 3745#include <libssh2.h> 3746#include <libssh2_sftp.h> 3747int main(void) { 3748 LIBSSH2_SESSION *session; 3749 LIBSSH2_SFTP *sftp; 3750 LIBSSH2_SFTP_HANDLE *sftp_handle; 3751 session = libssh2_session_init (); 3752 sftp = libssh2_sftp_init (session); 3753 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0); 3754 libssh2_sftp_fsync (sftp_handle); 3755 return 0; 3756} 3757EOF 3758 # libssh2_cflags/libssh2_libs defined in previous test. 3759 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then 3760 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS" 3761 fi 3762fi 3763 3764########################################## 3765# linux-aio probe 3766 3767if test "$linux_aio" != "no" ; then 3768 cat > $TMPC <<EOF 3769#include <libaio.h> 3770#include <sys/eventfd.h> 3771#include <stddef.h> 3772int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 3773EOF 3774 if compile_prog "" "-laio" ; then 3775 linux_aio=yes 3776 else 3777 if test "$linux_aio" = "yes" ; then 3778 feature_not_found "linux AIO" "Install libaio devel" 3779 fi 3780 linux_aio=no 3781 fi 3782fi 3783 3784########################################## 3785# TPM passthrough is only on x86 Linux 3786 3787if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then 3788 tpm_passthrough=$tpm 3789else 3790 tpm_passthrough=no 3791fi 3792 3793# TPM emulator is for all posix systems 3794if test "$mingw32" != "yes"; then 3795 tpm_emulator=$tpm 3796else 3797 tpm_emulator=no 3798fi 3799########################################## 3800# attr probe 3801 3802if test "$attr" != "no" ; then 3803 cat > $TMPC <<EOF 3804#include <stdio.h> 3805#include <sys/types.h> 3806#ifdef CONFIG_LIBATTR 3807#include <attr/xattr.h> 3808#else 3809#include <sys/xattr.h> 3810#endif 3811int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 3812EOF 3813 if compile_prog "" "" ; then 3814 attr=yes 3815 # Older distros have <attr/xattr.h>, and need -lattr: 3816 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 3817 attr=yes 3818 LIBS="-lattr $LIBS" 3819 libattr=yes 3820 else 3821 if test "$attr" = "yes" ; then 3822 feature_not_found "ATTR" "Install libc6 or libattr devel" 3823 fi 3824 attr=no 3825 fi 3826fi 3827 3828########################################## 3829# iovec probe 3830cat > $TMPC <<EOF 3831#include <sys/types.h> 3832#include <sys/uio.h> 3833#include <unistd.h> 3834int main(void) { return sizeof(struct iovec); } 3835EOF 3836iovec=no 3837if compile_prog "" "" ; then 3838 iovec=yes 3839fi 3840 3841########################################## 3842# preadv probe 3843cat > $TMPC <<EOF 3844#include <sys/types.h> 3845#include <sys/uio.h> 3846#include <unistd.h> 3847int main(void) { return preadv(0, 0, 0, 0); } 3848EOF 3849preadv=no 3850if compile_prog "" "" ; then 3851 preadv=yes 3852fi 3853 3854########################################## 3855# fdt probe 3856# fdt support is mandatory for at least some target architectures, 3857# so insist on it if we're building those system emulators. 3858fdt_required=no 3859for target in $target_list; do 3860 case $target in 3861 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu) 3862 fdt_required=yes 3863 ;; 3864 esac 3865done 3866 3867if test "$fdt_required" = "yes"; then 3868 if test "$fdt" = "no"; then 3869 error_exit "fdt disabled but some requested targets require it." \ 3870 "You can turn off fdt only if you also disable all the system emulation" \ 3871 "targets which need it (by specifying a cut down --target-list)." 3872 fi 3873 fdt=yes 3874fi 3875 3876if test "$fdt" != "no" ; then 3877 fdt_libs="-lfdt" 3878 # explicitly check for libfdt_env.h as it is missing in some stable installs 3879 # and test for required functions to make sure we are on a version >= 1.4.2 3880 cat > $TMPC << EOF 3881#include <libfdt.h> 3882#include <libfdt_env.h> 3883int main(void) { fdt_first_subnode(0, 0); return 0; } 3884EOF 3885 if compile_prog "" "$fdt_libs" ; then 3886 # system DTC is good - use it 3887 fdt=system 3888 else 3889 # have GIT checkout, so activate dtc submodule 3890 if test -e "${source_path}/.git" ; then 3891 git_submodules="${git_submodules} dtc" 3892 fi 3893 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then 3894 fdt=git 3895 mkdir -p dtc 3896 if [ "$pwd_is_source_path" != "y" ] ; then 3897 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 3898 symlink "$source_path/dtc/scripts" "dtc/scripts" 3899 fi 3900 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt" 3901 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt" 3902 fdt_libs="$fdt_libs" 3903 elif test "$fdt" = "yes" ; then 3904 # Not a git build & no libfdt found, prompt for system install 3905 error_exit "DTC (libfdt) version >= 1.4.2 not present." \ 3906 "Please install the DTC (libfdt) devel package" 3907 else 3908 # don't have and don't want 3909 fdt_libs= 3910 fdt=no 3911 fi 3912 fi 3913fi 3914 3915libs_softmmu="$libs_softmmu $fdt_libs" 3916 3917########################################## 3918# opengl probe (for sdl2, gtk, milkymist-tmu2) 3919 3920if test "$opengl" != "no" ; then 3921 opengl_pkgs="epoxy gbm" 3922 if $pkg_config $opengl_pkgs; then 3923 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 3924 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 3925 opengl=yes 3926 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 3927 gtk_gl="yes" 3928 fi 3929 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 3930 else 3931 if test "$opengl" = "yes" ; then 3932 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 3933 fi 3934 opengl_cflags="" 3935 opengl_libs="" 3936 opengl=no 3937 fi 3938fi 3939 3940if test "$opengl" = "yes"; then 3941 cat > $TMPC << EOF 3942#include <epoxy/egl.h> 3943#ifndef EGL_MESA_image_dma_buf_export 3944# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 3945#endif 3946int main(void) { return 0; } 3947EOF 3948 if compile_prog "" "" ; then 3949 opengl_dmabuf=yes 3950 fi 3951fi 3952 3953########################################## 3954# libxml2 probe 3955if test "$libxml2" != "no" ; then 3956 if $pkg_config --exists libxml-2.0; then 3957 libxml2="yes" 3958 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 3959 libxml2_libs=$($pkg_config --libs libxml-2.0) 3960 else 3961 if test "$libxml2" = "yes"; then 3962 feature_not_found "libxml2" "Install libxml2 devel" 3963 fi 3964 libxml2="no" 3965 fi 3966fi 3967 3968########################################## 3969# glusterfs probe 3970if test "$glusterfs" != "no" ; then 3971 if $pkg_config --atleast-version=3 glusterfs-api; then 3972 glusterfs="yes" 3973 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 3974 glusterfs_libs=$($pkg_config --libs glusterfs-api) 3975 if $pkg_config --atleast-version=4 glusterfs-api; then 3976 glusterfs_xlator_opt="yes" 3977 fi 3978 if $pkg_config --atleast-version=5 glusterfs-api; then 3979 glusterfs_discard="yes" 3980 fi 3981 if $pkg_config --atleast-version=6 glusterfs-api; then 3982 glusterfs_fallocate="yes" 3983 glusterfs_zerofill="yes" 3984 fi 3985 else 3986 if test "$glusterfs" = "yes" ; then 3987 feature_not_found "GlusterFS backend support" \ 3988 "Install glusterfs-api devel >= 3" 3989 fi 3990 glusterfs="no" 3991 fi 3992fi 3993 3994# Check for inotify functions when we are building linux-user 3995# emulator. This is done because older glibc versions don't 3996# have syscall stubs for these implemented. In that case we 3997# don't provide them even if kernel supports them. 3998# 3999inotify=no 4000cat > $TMPC << EOF 4001#include <sys/inotify.h> 4002 4003int 4004main(void) 4005{ 4006 /* try to start inotify */ 4007 return inotify_init(); 4008} 4009EOF 4010if compile_prog "" "" ; then 4011 inotify=yes 4012fi 4013 4014inotify1=no 4015cat > $TMPC << EOF 4016#include <sys/inotify.h> 4017 4018int 4019main(void) 4020{ 4021 /* try to start inotify */ 4022 return inotify_init1(0); 4023} 4024EOF 4025if compile_prog "" "" ; then 4026 inotify1=yes 4027fi 4028 4029# check if pipe2 is there 4030pipe2=no 4031cat > $TMPC << EOF 4032#include <unistd.h> 4033#include <fcntl.h> 4034 4035int main(void) 4036{ 4037 int pipefd[2]; 4038 return pipe2(pipefd, O_CLOEXEC); 4039} 4040EOF 4041if compile_prog "" "" ; then 4042 pipe2=yes 4043fi 4044 4045# check if accept4 is there 4046accept4=no 4047cat > $TMPC << EOF 4048#include <sys/socket.h> 4049#include <stddef.h> 4050 4051int main(void) 4052{ 4053 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4054 return 0; 4055} 4056EOF 4057if compile_prog "" "" ; then 4058 accept4=yes 4059fi 4060 4061# check if tee/splice is there. vmsplice was added same time. 4062splice=no 4063cat > $TMPC << EOF 4064#include <unistd.h> 4065#include <fcntl.h> 4066#include <limits.h> 4067 4068int main(void) 4069{ 4070 int len, fd = 0; 4071 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4072 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4073 return 0; 4074} 4075EOF 4076if compile_prog "" "" ; then 4077 splice=yes 4078fi 4079 4080########################################## 4081# libnuma probe 4082 4083if test "$numa" != "no" ; then 4084 cat > $TMPC << EOF 4085#include <numa.h> 4086int main(void) { return numa_available(); } 4087EOF 4088 4089 if compile_prog "" "-lnuma" ; then 4090 numa=yes 4091 libs_softmmu="-lnuma $libs_softmmu" 4092 else 4093 if test "$numa" = "yes" ; then 4094 feature_not_found "numa" "install numactl devel" 4095 fi 4096 numa=no 4097 fi 4098fi 4099 4100if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4101 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4102 exit 1 4103fi 4104 4105# Even if malloc_trim() is available, these non-libc memory allocators 4106# do not support it. 4107if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then 4108 if test "$malloc_trim" = "yes" ; then 4109 echo "Disabling malloc_trim with non-libc memory allocator" 4110 fi 4111 malloc_trim="no" 4112fi 4113 4114####################################### 4115# malloc_trim 4116 4117if test "$malloc_trim" != "no" ; then 4118 cat > $TMPC << EOF 4119#include <malloc.h> 4120int main(void) { malloc_trim(0); return 0; } 4121EOF 4122 if compile_prog "" "" ; then 4123 malloc_trim="yes" 4124 else 4125 malloc_trim="no" 4126 fi 4127fi 4128 4129########################################## 4130# tcmalloc probe 4131 4132if test "$tcmalloc" = "yes" ; then 4133 cat > $TMPC << EOF 4134#include <stdlib.h> 4135int main(void) { malloc(1); return 0; } 4136EOF 4137 4138 if compile_prog "" "-ltcmalloc" ; then 4139 LIBS="-ltcmalloc $LIBS" 4140 else 4141 feature_not_found "tcmalloc" "install gperftools devel" 4142 fi 4143fi 4144 4145########################################## 4146# jemalloc probe 4147 4148if test "$jemalloc" = "yes" ; then 4149 cat > $TMPC << EOF 4150#include <stdlib.h> 4151int main(void) { malloc(1); return 0; } 4152EOF 4153 4154 if compile_prog "" "-ljemalloc" ; then 4155 LIBS="-ljemalloc $LIBS" 4156 else 4157 feature_not_found "jemalloc" "install jemalloc devel" 4158 fi 4159fi 4160 4161########################################## 4162# signalfd probe 4163signalfd="no" 4164cat > $TMPC << EOF 4165#include <unistd.h> 4166#include <sys/syscall.h> 4167#include <signal.h> 4168int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4169EOF 4170 4171if compile_prog "" "" ; then 4172 signalfd=yes 4173fi 4174 4175# check if eventfd is supported 4176eventfd=no 4177cat > $TMPC << EOF 4178#include <sys/eventfd.h> 4179 4180int main(void) 4181{ 4182 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4183} 4184EOF 4185if compile_prog "" "" ; then 4186 eventfd=yes 4187fi 4188 4189# check if memfd is supported 4190memfd=no 4191cat > $TMPC << EOF 4192#include <sys/mman.h> 4193 4194int main(void) 4195{ 4196 return memfd_create("foo", MFD_ALLOW_SEALING); 4197} 4198EOF 4199if compile_prog "" "" ; then 4200 memfd=yes 4201fi 4202 4203# check for usbfs 4204have_usbfs=no 4205if test "$linux_user" = "yes"; then 4206 if check_include linux/usbdevice_fs.h; then 4207 have_usbfs=yes 4208 fi 4209 have_usbfs=yes 4210fi 4211 4212# check for fallocate 4213fallocate=no 4214cat > $TMPC << EOF 4215#include <fcntl.h> 4216 4217int main(void) 4218{ 4219 fallocate(0, 0, 0, 0); 4220 return 0; 4221} 4222EOF 4223if compile_prog "" "" ; then 4224 fallocate=yes 4225fi 4226 4227# check for fallocate hole punching 4228fallocate_punch_hole=no 4229cat > $TMPC << EOF 4230#include <fcntl.h> 4231#include <linux/falloc.h> 4232 4233int main(void) 4234{ 4235 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4236 return 0; 4237} 4238EOF 4239if compile_prog "" "" ; then 4240 fallocate_punch_hole=yes 4241fi 4242 4243# check that fallocate supports range zeroing inside the file 4244fallocate_zero_range=no 4245cat > $TMPC << EOF 4246#include <fcntl.h> 4247#include <linux/falloc.h> 4248 4249int main(void) 4250{ 4251 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4252 return 0; 4253} 4254EOF 4255if compile_prog "" "" ; then 4256 fallocate_zero_range=yes 4257fi 4258 4259# check for posix_fallocate 4260posix_fallocate=no 4261cat > $TMPC << EOF 4262#include <fcntl.h> 4263 4264int main(void) 4265{ 4266 posix_fallocate(0, 0, 0); 4267 return 0; 4268} 4269EOF 4270if compile_prog "" "" ; then 4271 posix_fallocate=yes 4272fi 4273 4274# check for sync_file_range 4275sync_file_range=no 4276cat > $TMPC << EOF 4277#include <fcntl.h> 4278 4279int main(void) 4280{ 4281 sync_file_range(0, 0, 0, 0); 4282 return 0; 4283} 4284EOF 4285if compile_prog "" "" ; then 4286 sync_file_range=yes 4287fi 4288 4289# check for linux/fiemap.h and FS_IOC_FIEMAP 4290fiemap=no 4291cat > $TMPC << EOF 4292#include <sys/ioctl.h> 4293#include <linux/fs.h> 4294#include <linux/fiemap.h> 4295 4296int main(void) 4297{ 4298 ioctl(0, FS_IOC_FIEMAP, 0); 4299 return 0; 4300} 4301EOF 4302if compile_prog "" "" ; then 4303 fiemap=yes 4304fi 4305 4306# check for dup3 4307dup3=no 4308cat > $TMPC << EOF 4309#include <unistd.h> 4310 4311int main(void) 4312{ 4313 dup3(0, 0, 0); 4314 return 0; 4315} 4316EOF 4317if compile_prog "" "" ; then 4318 dup3=yes 4319fi 4320 4321# check for ppoll support 4322ppoll=no 4323cat > $TMPC << EOF 4324#include <poll.h> 4325 4326int main(void) 4327{ 4328 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4329 ppoll(&pfd, 1, 0, 0); 4330 return 0; 4331} 4332EOF 4333if compile_prog "" "" ; then 4334 ppoll=yes 4335fi 4336 4337# check for prctl(PR_SET_TIMERSLACK , ... ) support 4338prctl_pr_set_timerslack=no 4339cat > $TMPC << EOF 4340#include <sys/prctl.h> 4341 4342int main(void) 4343{ 4344 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4345 return 0; 4346} 4347EOF 4348if compile_prog "" "" ; then 4349 prctl_pr_set_timerslack=yes 4350fi 4351 4352# check for epoll support 4353epoll=no 4354cat > $TMPC << EOF 4355#include <sys/epoll.h> 4356 4357int main(void) 4358{ 4359 epoll_create(0); 4360 return 0; 4361} 4362EOF 4363if compile_prog "" "" ; then 4364 epoll=yes 4365fi 4366 4367# epoll_create1 is a later addition 4368# so we must check separately for its presence 4369epoll_create1=no 4370cat > $TMPC << EOF 4371#include <sys/epoll.h> 4372 4373int main(void) 4374{ 4375 /* Note that we use epoll_create1 as a value, not as 4376 * a function being called. This is necessary so that on 4377 * old SPARC glibc versions where the function was present in 4378 * the library but not declared in the header file we will 4379 * fail the configure check. (Otherwise we will get a compiler 4380 * warning but not an error, and will proceed to fail the 4381 * qemu compile where we compile with -Werror.) 4382 */ 4383 return (int)(uintptr_t)&epoll_create1; 4384} 4385EOF 4386if compile_prog "" "" ; then 4387 epoll_create1=yes 4388fi 4389 4390# check for sendfile support 4391sendfile=no 4392cat > $TMPC << EOF 4393#include <sys/sendfile.h> 4394 4395int main(void) 4396{ 4397 return sendfile(0, 0, 0, 0); 4398} 4399EOF 4400if compile_prog "" "" ; then 4401 sendfile=yes 4402fi 4403 4404# check for timerfd support (glibc 2.8 and newer) 4405timerfd=no 4406cat > $TMPC << EOF 4407#include <sys/timerfd.h> 4408 4409int main(void) 4410{ 4411 return(timerfd_create(CLOCK_REALTIME, 0)); 4412} 4413EOF 4414if compile_prog "" "" ; then 4415 timerfd=yes 4416fi 4417 4418# check for setns and unshare support 4419setns=no 4420cat > $TMPC << EOF 4421#include <sched.h> 4422 4423int main(void) 4424{ 4425 int ret; 4426 ret = setns(0, 0); 4427 ret = unshare(0); 4428 return ret; 4429} 4430EOF 4431if compile_prog "" "" ; then 4432 setns=yes 4433fi 4434 4435# clock_adjtime probe 4436clock_adjtime=no 4437cat > $TMPC <<EOF 4438#include <time.h> 4439 4440int main(void) 4441{ 4442 return clock_adjtime(0, 0); 4443} 4444EOF 4445clock_adjtime=no 4446if compile_prog "" "" ; then 4447 clock_adjtime=yes 4448fi 4449 4450# syncfs probe 4451syncfs=no 4452cat > $TMPC <<EOF 4453#include <unistd.h> 4454 4455int main(void) 4456{ 4457 return syncfs(0); 4458} 4459EOF 4460syncfs=no 4461if compile_prog "" "" ; then 4462 syncfs=yes 4463fi 4464 4465# Check if tools are available to build documentation. 4466if test "$docs" != "no" ; then 4467 if has makeinfo && has pod2man; then 4468 docs=yes 4469 else 4470 if test "$docs" = "yes" ; then 4471 feature_not_found "docs" "Install texinfo and Perl/perl-podlators" 4472 fi 4473 docs=no 4474 fi 4475fi 4476 4477# Search for bswap_32 function 4478byteswap_h=no 4479cat > $TMPC << EOF 4480#include <byteswap.h> 4481int main(void) { return bswap_32(0); } 4482EOF 4483if compile_prog "" "" ; then 4484 byteswap_h=yes 4485fi 4486 4487# Search for bswap32 function 4488bswap_h=no 4489cat > $TMPC << EOF 4490#include <sys/endian.h> 4491#include <sys/types.h> 4492#include <machine/bswap.h> 4493int main(void) { return bswap32(0); } 4494EOF 4495if compile_prog "" "" ; then 4496 bswap_h=yes 4497fi 4498 4499########################################## 4500# Do we have libiscsi >= 1.9.0 4501if test "$libiscsi" != "no" ; then 4502 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4503 libiscsi="yes" 4504 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4505 libiscsi_libs=$($pkg_config --libs libiscsi) 4506 else 4507 if test "$libiscsi" = "yes" ; then 4508 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4509 fi 4510 libiscsi="no" 4511 fi 4512fi 4513 4514########################################## 4515# Do we need libm 4516cat > $TMPC << EOF 4517#include <math.h> 4518int main(int argc, char **argv) { return isnan(sin((double)argc)); } 4519EOF 4520if compile_prog "" "" ; then 4521 : 4522elif compile_prog "" "-lm" ; then 4523 LIBS="-lm $LIBS" 4524 libs_qga="-lm $libs_qga" 4525else 4526 error_exit "libm check failed" 4527fi 4528 4529########################################## 4530# Do we need librt 4531# uClibc provides 2 versions of clock_gettime(), one with realtime 4532# support and one without. This means that the clock_gettime() don't 4533# need -lrt. We still need it for timer_create() so we check for this 4534# function in addition. 4535cat > $TMPC <<EOF 4536#include <signal.h> 4537#include <time.h> 4538int main(void) { 4539 timer_create(CLOCK_REALTIME, NULL, NULL); 4540 return clock_gettime(CLOCK_REALTIME, NULL); 4541} 4542EOF 4543 4544if compile_prog "" "" ; then 4545 : 4546# we need pthread for static linking. use previous pthread test result 4547elif compile_prog "" "$pthread_lib -lrt" ; then 4548 LIBS="$LIBS -lrt" 4549 libs_qga="$libs_qga -lrt" 4550fi 4551 4552if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ 4553 "$haiku" != "yes" ; then 4554 libs_softmmu="-lutil $libs_softmmu" 4555fi 4556 4557########################################## 4558# spice probe 4559if test "$spice" != "no" ; then 4560 cat > $TMPC << EOF 4561#include <spice.h> 4562int main(void) { spice_server_new(); return 0; } 4563EOF 4564 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4565 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4566 if $pkg_config --atleast-version=0.12.0 spice-server && \ 4567 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4568 compile_prog "$spice_cflags" "$spice_libs" ; then 4569 spice="yes" 4570 libs_softmmu="$libs_softmmu $spice_libs" 4571 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 4572 spice_protocol_version=$($pkg_config --modversion spice-protocol) 4573 spice_server_version=$($pkg_config --modversion spice-server) 4574 else 4575 if test "$spice" = "yes" ; then 4576 feature_not_found "spice" \ 4577 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel" 4578 fi 4579 spice="no" 4580 fi 4581fi 4582 4583# check for smartcard support 4584if test "$smartcard" != "no"; then 4585 if $pkg_config --atleast-version=2.5.1 libcacard; then 4586 libcacard_cflags=$($pkg_config --cflags libcacard) 4587 libcacard_libs=$($pkg_config --libs libcacard) 4588 smartcard="yes" 4589 else 4590 if test "$smartcard" = "yes"; then 4591 feature_not_found "smartcard" "Install libcacard devel" 4592 fi 4593 smartcard="no" 4594 fi 4595fi 4596 4597# check for libusb 4598if test "$libusb" != "no" ; then 4599 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4600 libusb="yes" 4601 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4602 libusb_libs=$($pkg_config --libs libusb-1.0) 4603 else 4604 if test "$libusb" = "yes"; then 4605 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4606 fi 4607 libusb="no" 4608 fi 4609fi 4610 4611# check for usbredirparser for usb network redirection support 4612if test "$usb_redir" != "no" ; then 4613 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4614 usb_redir="yes" 4615 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4616 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4617 else 4618 if test "$usb_redir" = "yes"; then 4619 feature_not_found "usb-redir" "Install usbredir devel" 4620 fi 4621 usb_redir="no" 4622 fi 4623fi 4624 4625########################################## 4626# check if we have VSS SDK headers for win 4627 4628if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then 4629 case "$vss_win32_sdk" in 4630 "") vss_win32_include="-isystem $source_path" ;; 4631 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4632 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4633 vss_win32_include="-isystem $source_path/.sdk/vss" 4634 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4635 ;; 4636 *) vss_win32_include="-isystem $vss_win32_sdk" 4637 esac 4638 cat > $TMPC << EOF 4639#define __MIDL_user_allocate_free_DEFINED__ 4640#include <inc/win2003/vss.h> 4641int main(void) { return VSS_CTX_BACKUP; } 4642EOF 4643 if compile_prog "$vss_win32_include" "" ; then 4644 guest_agent_with_vss="yes" 4645 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4646 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4647 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4648 else 4649 if test "$vss_win32_sdk" != "" ; then 4650 echo "ERROR: Please download and install Microsoft VSS SDK:" 4651 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4652 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4653 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4654 echo "ERROR: The headers are extracted in the directory \`inc'." 4655 feature_not_found "VSS support" 4656 fi 4657 guest_agent_with_vss="no" 4658 fi 4659fi 4660 4661########################################## 4662# lookup Windows platform SDK (if not specified) 4663# The SDK is needed only to build .tlb (type library) file of guest agent 4664# VSS provider from the source. It is usually unnecessary because the 4665# pre-compiled .tlb file is included. 4666 4667if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then 4668 if test -z "$win_sdk"; then 4669 programfiles="$PROGRAMFILES" 4670 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4671 if test -n "$programfiles"; then 4672 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4673 else 4674 feature_not_found "Windows SDK" 4675 fi 4676 elif test "$win_sdk" = "no"; then 4677 win_sdk="" 4678 fi 4679fi 4680 4681########################################## 4682# check if mingw environment provides a recent ntddscsi.h 4683if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then 4684 cat > $TMPC << EOF 4685#include <windows.h> 4686#include <ntddscsi.h> 4687int main(void) { 4688#if !defined(IOCTL_SCSI_GET_ADDRESS) 4689#error Missing required ioctl definitions 4690#endif 4691 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4692 return addr.Lun; 4693} 4694EOF 4695 if compile_prog "" "" ; then 4696 guest_agent_ntddscsi=yes 4697 libs_qga="-lsetupapi $libs_qga" 4698 fi 4699fi 4700 4701########################################## 4702# virgl renderer probe 4703 4704if test "$virglrenderer" != "no" ; then 4705 cat > $TMPC << EOF 4706#include <virglrenderer.h> 4707int main(void) { virgl_renderer_poll(); return 0; } 4708EOF 4709 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4710 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4711 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 4712 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4713 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4714 virglrenderer="yes" 4715 else 4716 if test "$virglrenderer" = "yes" ; then 4717 feature_not_found "virglrenderer" 4718 fi 4719 virglrenderer="no" 4720 fi 4721fi 4722 4723########################################## 4724# capstone 4725 4726case "$capstone" in 4727 "" | yes) 4728 if $pkg_config capstone; then 4729 capstone=system 4730 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then 4731 capstone=git 4732 elif test -e "${source_path}/capstone/Makefile" ; then 4733 capstone=internal 4734 elif test -z "$capstone" ; then 4735 capstone=no 4736 else 4737 feature_not_found "capstone" "Install capstone devel or git submodule" 4738 fi 4739 ;; 4740 4741 system) 4742 if ! $pkg_config capstone; then 4743 feature_not_found "capstone" "Install capstone devel" 4744 fi 4745 ;; 4746esac 4747 4748case "$capstone" in 4749 git | internal) 4750 if test "$capstone" = git; then 4751 git_submodules="${git_submodules} capstone" 4752 fi 4753 mkdir -p capstone 4754 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include" 4755 if test "$mingw32" = "yes"; then 4756 LIBCAPSTONE=capstone.lib 4757 else 4758 LIBCAPSTONE=libcapstone.a 4759 fi 4760 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS" 4761 ;; 4762 4763 system) 4764 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 4765 LIBS="$($pkg_config --libs capstone) $LIBS" 4766 ;; 4767 4768 no) 4769 ;; 4770 *) 4771 error_exit "Unknown state for capstone: $capstone" 4772 ;; 4773esac 4774 4775########################################## 4776# check if we have fdatasync 4777 4778fdatasync=no 4779cat > $TMPC << EOF 4780#include <unistd.h> 4781int main(void) { 4782#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4783return fdatasync(0); 4784#else 4785#error Not supported 4786#endif 4787} 4788EOF 4789if compile_prog "" "" ; then 4790 fdatasync=yes 4791fi 4792 4793########################################## 4794# check if we have madvise 4795 4796madvise=no 4797cat > $TMPC << EOF 4798#include <sys/types.h> 4799#include <sys/mman.h> 4800#include <stddef.h> 4801int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4802EOF 4803if compile_prog "" "" ; then 4804 madvise=yes 4805fi 4806 4807########################################## 4808# check if we have posix_madvise 4809 4810posix_madvise=no 4811cat > $TMPC << EOF 4812#include <sys/mman.h> 4813#include <stddef.h> 4814int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4815EOF 4816if compile_prog "" "" ; then 4817 posix_madvise=yes 4818fi 4819 4820########################################## 4821# check if we have posix_memalign() 4822 4823posix_memalign=no 4824cat > $TMPC << EOF 4825#include <stdlib.h> 4826int main(void) { 4827 void *p; 4828 return posix_memalign(&p, 8, 8); 4829} 4830EOF 4831if compile_prog "" "" ; then 4832 posix_memalign=yes 4833fi 4834 4835########################################## 4836# check if we have posix_syslog 4837 4838posix_syslog=no 4839cat > $TMPC << EOF 4840#include <syslog.h> 4841int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4842EOF 4843if compile_prog "" "" ; then 4844 posix_syslog=yes 4845fi 4846 4847########################################## 4848# check if we have sem_timedwait 4849 4850sem_timedwait=no 4851cat > $TMPC << EOF 4852#include <semaphore.h> 4853int main(void) { return sem_timedwait(0, 0); } 4854EOF 4855if compile_prog "" "" ; then 4856 sem_timedwait=yes 4857fi 4858 4859########################################## 4860# check if we have strchrnul 4861 4862strchrnul=no 4863cat > $TMPC << EOF 4864#include <string.h> 4865int main(void); 4866// Use a haystack that the compiler shouldn't be able to constant fold 4867char *haystack = (char*)&main; 4868int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 4869EOF 4870if compile_prog "" "" ; then 4871 strchrnul=yes 4872fi 4873 4874########################################## 4875# check if trace backend exists 4876 4877$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4878if test "$?" -ne 0 ; then 4879 error_exit "invalid trace backends" \ 4880 "Please choose supported trace backends." 4881fi 4882 4883########################################## 4884# For 'ust' backend, test if ust headers are present 4885if have_backend "ust"; then 4886 cat > $TMPC << EOF 4887#include <lttng/tracepoint.h> 4888int main(void) { return 0; } 4889EOF 4890 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4891 if $pkg_config lttng-ust --exists; then 4892 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4893 else 4894 lttng_ust_libs="-llttng-ust -ldl" 4895 fi 4896 if $pkg_config liburcu-bp --exists; then 4897 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4898 else 4899 urcu_bp_libs="-lurcu-bp" 4900 fi 4901 4902 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 4903 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 4904 else 4905 error_exit "Trace backend 'ust' missing lttng-ust header files" 4906 fi 4907fi 4908 4909########################################## 4910# For 'dtrace' backend, test if 'dtrace' command is present 4911if have_backend "dtrace"; then 4912 if ! has 'dtrace' ; then 4913 error_exit "dtrace command is not found in PATH $PATH" 4914 fi 4915 trace_backend_stap="no" 4916 if has 'stap' ; then 4917 trace_backend_stap="yes" 4918 fi 4919fi 4920 4921########################################## 4922# check and set a backend for coroutine 4923 4924# We prefer ucontext, but it's not always possible. The fallback 4925# is sigcontext. On Windows the only valid backend is the Windows 4926# specific one. 4927 4928ucontext_works=no 4929if test "$darwin" != "yes"; then 4930 cat > $TMPC << EOF 4931#include <ucontext.h> 4932#ifdef __stub_makecontext 4933#error Ignoring glibc stub makecontext which will always fail 4934#endif 4935int main(void) { makecontext(0, 0, 0); return 0; } 4936EOF 4937 if compile_prog "" "" ; then 4938 ucontext_works=yes 4939 fi 4940fi 4941 4942if test "$coroutine" = ""; then 4943 if test "$mingw32" = "yes"; then 4944 coroutine=win32 4945 elif test "$ucontext_works" = "yes"; then 4946 coroutine=ucontext 4947 else 4948 coroutine=sigaltstack 4949 fi 4950else 4951 case $coroutine in 4952 windows) 4953 if test "$mingw32" != "yes"; then 4954 error_exit "'windows' coroutine backend only valid for Windows" 4955 fi 4956 # Unfortunately the user visible backend name doesn't match the 4957 # coroutine-*.c filename for this case, so we have to adjust it here. 4958 coroutine=win32 4959 ;; 4960 ucontext) 4961 if test "$ucontext_works" != "yes"; then 4962 feature_not_found "ucontext" 4963 fi 4964 ;; 4965 sigaltstack) 4966 if test "$mingw32" = "yes"; then 4967 error_exit "only the 'windows' coroutine backend is valid for Windows" 4968 fi 4969 ;; 4970 *) 4971 error_exit "unknown coroutine backend $coroutine" 4972 ;; 4973 esac 4974fi 4975 4976if test "$coroutine_pool" = ""; then 4977 coroutine_pool=yes 4978fi 4979 4980if test "$debug_stack_usage" = "yes"; then 4981 if test "$coroutine_pool" = "yes"; then 4982 echo "WARN: disabling coroutine pool for stack usage debugging" 4983 coroutine_pool=no 4984 fi 4985fi 4986 4987 4988########################################## 4989# check if we have open_by_handle_at 4990 4991open_by_handle_at=no 4992cat > $TMPC << EOF 4993#include <fcntl.h> 4994#if !defined(AT_EMPTY_PATH) 4995# error missing definition 4996#else 4997int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 4998#endif 4999EOF 5000if compile_prog "" "" ; then 5001 open_by_handle_at=yes 5002fi 5003 5004######################################## 5005# check if we have linux/magic.h 5006 5007linux_magic_h=no 5008cat > $TMPC << EOF 5009#include <linux/magic.h> 5010int main(void) { 5011 return 0; 5012} 5013EOF 5014if compile_prog "" "" ; then 5015 linux_magic_h=yes 5016fi 5017 5018######################################## 5019# check whether we can disable warning option with a pragma (this is needed 5020# to silence warnings in the headers of some versions of external libraries). 5021# This test has to be compiled with -Werror as otherwise an unknown pragma is 5022# only a warning. 5023# 5024# If we can't selectively disable warning in the code, disable -Werror so that 5025# the build doesn't fail anyway. 5026 5027pragma_disable_unused_but_set=no 5028cat > $TMPC << EOF 5029#pragma GCC diagnostic push 5030#pragma GCC diagnostic ignored "-Wstrict-prototypes" 5031#pragma GCC diagnostic pop 5032 5033int main(void) { 5034 return 0; 5035} 5036EOF 5037if compile_prog "-Werror" "" ; then 5038 pragma_diagnostic_available=yes 5039else 5040 werror=no 5041fi 5042 5043######################################## 5044# check if we have valgrind/valgrind.h 5045 5046valgrind_h=no 5047cat > $TMPC << EOF 5048#include <valgrind/valgrind.h> 5049int main(void) { 5050 return 0; 5051} 5052EOF 5053if compile_prog "" "" ; then 5054 valgrind_h=yes 5055fi 5056 5057######################################## 5058# check if environ is declared 5059 5060has_environ=no 5061cat > $TMPC << EOF 5062#include <unistd.h> 5063int main(void) { 5064 environ = 0; 5065 return 0; 5066} 5067EOF 5068if compile_prog "" "" ; then 5069 has_environ=yes 5070fi 5071 5072######################################## 5073# check if cpuid.h is usable. 5074 5075cat > $TMPC << EOF 5076#include <cpuid.h> 5077int main(void) { 5078 unsigned a, b, c, d; 5079 int max = __get_cpuid_max(0, 0); 5080 5081 if (max >= 1) { 5082 __cpuid(1, a, b, c, d); 5083 } 5084 5085 if (max >= 7) { 5086 __cpuid_count(7, 0, a, b, c, d); 5087 } 5088 5089 return 0; 5090} 5091EOF 5092if compile_prog "" "" ; then 5093 cpuid_h=yes 5094fi 5095 5096########################################## 5097# avx2 optimization requirement check 5098# 5099# There is no point enabling this if cpuid.h is not usable, 5100# since we won't be able to select the new routines. 5101 5102if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then 5103 cat > $TMPC << EOF 5104#pragma GCC push_options 5105#pragma GCC target("avx2") 5106#include <cpuid.h> 5107#include <immintrin.h> 5108static int bar(void *a) { 5109 __m256i x = *(__m256i *)a; 5110 return _mm256_testz_si256(x, x); 5111} 5112int main(int argc, char *argv[]) { return bar(argv[0]); } 5113EOF 5114 if compile_object "" ; then 5115 avx2_opt="yes" 5116 else 5117 avx2_opt="no" 5118 fi 5119fi 5120 5121######################################## 5122# check if __[u]int128_t is usable. 5123 5124int128=no 5125cat > $TMPC << EOF 5126#if defined(__clang_major__) && defined(__clang_minor__) 5127# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2)) 5128# error __int128_t does not work in CLANG before 3.2 5129# endif 5130#endif 5131__int128_t a; 5132__uint128_t b; 5133int main (void) { 5134 a = a + b; 5135 b = a * b; 5136 a = a * a; 5137 return 0; 5138} 5139EOF 5140if compile_prog "" "" ; then 5141 int128=yes 5142fi 5143 5144######################################### 5145# See if 128-bit atomic operations are supported. 5146 5147atomic128=no 5148if test "$int128" = "yes"; then 5149 cat > $TMPC << EOF 5150int main(void) 5151{ 5152 unsigned __int128 x = 0, y = 0; 5153 y = __atomic_load_16(&x, 0); 5154 __atomic_store_16(&x, y, 0); 5155 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5156 return 0; 5157} 5158EOF 5159 if compile_prog "" "" ; then 5160 atomic128=yes 5161 fi 5162fi 5163 5164cmpxchg128=no 5165if test "$int128" = yes -a "$atomic128" = no; then 5166 cat > $TMPC << EOF 5167int main(void) 5168{ 5169 unsigned __int128 x = 0, y = 0; 5170 __sync_val_compare_and_swap_16(&x, y, x); 5171 return 0; 5172} 5173EOF 5174 if compile_prog "" "" ; then 5175 cmpxchg128=yes 5176 fi 5177fi 5178 5179######################################### 5180# See if 64-bit atomic operations are supported. 5181# Note that without __atomic builtins, we can only 5182# assume atomic loads/stores max at pointer size. 5183 5184cat > $TMPC << EOF 5185#include <stdint.h> 5186int main(void) 5187{ 5188 uint64_t x = 0, y = 0; 5189#ifdef __ATOMIC_RELAXED 5190 y = __atomic_load_8(&x, 0); 5191 __atomic_store_8(&x, y, 0); 5192 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5193 __atomic_exchange_8(&x, y, 0); 5194 __atomic_fetch_add_8(&x, y, 0); 5195#else 5196 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5197 __sync_lock_test_and_set(&x, y); 5198 __sync_val_compare_and_swap(&x, y, 0); 5199 __sync_fetch_and_add(&x, y); 5200#endif 5201 return 0; 5202} 5203EOF 5204if compile_prog "" "" ; then 5205 atomic64=yes 5206fi 5207 5208######################################## 5209# See if 16-byte vector operations are supported. 5210# Even without a vector unit the compiler may expand these. 5211# There is a bug in old GCC for PPC that crashes here. 5212# Unfortunately it's the system compiler for Centos 7. 5213 5214cat > $TMPC << EOF 5215typedef unsigned char U1 __attribute__((vector_size(16))); 5216typedef unsigned short U2 __attribute__((vector_size(16))); 5217typedef unsigned int U4 __attribute__((vector_size(16))); 5218typedef unsigned long long U8 __attribute__((vector_size(16))); 5219typedef signed char S1 __attribute__((vector_size(16))); 5220typedef signed short S2 __attribute__((vector_size(16))); 5221typedef signed int S4 __attribute__((vector_size(16))); 5222typedef signed long long S8 __attribute__((vector_size(16))); 5223static U1 a1, b1; 5224static U2 a2, b2; 5225static U4 a4, b4; 5226static U8 a8, b8; 5227static S1 c1; 5228static S2 c2; 5229static S4 c4; 5230static S8 c8; 5231static int i; 5232void helper(void *d, void *a, int shift, int i); 5233void helper(void *d, void *a, int shift, int i) 5234{ 5235 *(U1 *)(d + i) = *(U1 *)(a + i) << shift; 5236 *(U2 *)(d + i) = *(U2 *)(a + i) << shift; 5237 *(U4 *)(d + i) = *(U4 *)(a + i) << shift; 5238 *(U8 *)(d + i) = *(U8 *)(a + i) << shift; 5239} 5240int main(void) 5241{ 5242 a1 += b1; a2 += b2; a4 += b4; a8 += b8; 5243 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8; 5244 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8; 5245 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8; 5246 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8; 5247 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8; 5248 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i; 5249 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i; 5250 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i; 5251 return 0; 5252} 5253EOF 5254 5255vector16=no 5256if compile_prog "" "" ; then 5257 vector16=yes 5258fi 5259 5260######################################## 5261# check if getauxval is available. 5262 5263getauxval=no 5264cat > $TMPC << EOF 5265#include <sys/auxv.h> 5266int main(void) { 5267 return getauxval(AT_HWCAP) == 0; 5268} 5269EOF 5270if compile_prog "" "" ; then 5271 getauxval=yes 5272fi 5273 5274######################################## 5275# check if ccache is interfering with 5276# semantic analysis of macros 5277 5278unset CCACHE_CPP2 5279ccache_cpp2=no 5280cat > $TMPC << EOF 5281static const int Z = 1; 5282#define fn() ({ Z; }) 5283#define TAUT(X) ((X) == Z) 5284#define PAREN(X, Y) (X == Y) 5285#define ID(X) (X) 5286int main(int argc, char *argv[]) 5287{ 5288 int x = 0, y = 0; 5289 x = ID(x); 5290 x = fn(); 5291 fn(); 5292 if (PAREN(x, y)) return 0; 5293 if (TAUT(Z)) return 0; 5294 return 0; 5295} 5296EOF 5297 5298if ! compile_object "-Werror"; then 5299 ccache_cpp2=yes 5300fi 5301 5302################################################# 5303# clang does not support glibc + FORTIFY_SOURCE. 5304 5305if test "$fortify_source" != "no"; then 5306 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5307 fortify_source="no"; 5308 elif test -n "$cxx" && has $cxx && 5309 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5310 fortify_source="no"; 5311 else 5312 fortify_source="yes" 5313 fi 5314fi 5315 5316############################################### 5317# Check if copy_file_range is provided by glibc 5318have_copy_file_range=no 5319cat > $TMPC << EOF 5320#include <unistd.h> 5321int main(void) { 5322 copy_file_range(0, NULL, 0, NULL, 0, 0); 5323 return 0; 5324} 5325EOF 5326if compile_prog "" "" ; then 5327 have_copy_file_range=yes 5328fi 5329 5330########################################## 5331# check if struct fsxattr is available via linux/fs.h 5332 5333have_fsxattr=no 5334cat > $TMPC << EOF 5335#include <linux/fs.h> 5336struct fsxattr foo; 5337int main(void) { 5338 return 0; 5339} 5340EOF 5341if compile_prog "" "" ; then 5342 have_fsxattr=yes 5343fi 5344 5345########################################## 5346# check for usable membarrier system call 5347if test "$membarrier" = "yes"; then 5348 have_membarrier=no 5349 if test "$mingw32" = "yes" ; then 5350 have_membarrier=yes 5351 elif test "$linux" = "yes" ; then 5352 cat > $TMPC << EOF 5353 #include <linux/membarrier.h> 5354 #include <sys/syscall.h> 5355 #include <unistd.h> 5356 #include <stdlib.h> 5357 int main(void) { 5358 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5359 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5360 exit(0); 5361 } 5362EOF 5363 if compile_prog "" "" ; then 5364 have_membarrier=yes 5365 fi 5366 fi 5367 if test "$have_membarrier" = "no"; then 5368 feature_not_found "membarrier" "membarrier system call not available" 5369 fi 5370else 5371 # Do not enable it by default even for Mingw32, because it doesn't 5372 # work on Wine. 5373 membarrier=no 5374fi 5375 5376########################################## 5377# check if rtnetlink.h exists and is useful 5378have_rtnetlink=no 5379cat > $TMPC << EOF 5380#include <linux/rtnetlink.h> 5381int main(void) { 5382 return IFLA_PROTO_DOWN; 5383} 5384EOF 5385if compile_prog "" "" ; then 5386 have_rtnetlink=yes 5387fi 5388 5389########################################## 5390# check for usable AF_VSOCK environment 5391have_af_vsock=no 5392cat > $TMPC << EOF 5393#include <errno.h> 5394#include <sys/types.h> 5395#include <sys/socket.h> 5396#if !defined(AF_VSOCK) 5397# error missing AF_VSOCK flag 5398#endif 5399#include <linux/vm_sockets.h> 5400int main(void) { 5401 int sock, ret; 5402 struct sockaddr_vm svm; 5403 socklen_t len = sizeof(svm); 5404 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5405 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5406 if ((ret == -1) && (errno == ENOTCONN)) { 5407 return 0; 5408 } 5409 return -1; 5410} 5411EOF 5412if compile_prog "" "" ; then 5413 have_af_vsock=yes 5414fi 5415 5416########################################## 5417# check for usable AF_ALG environment 5418hava_afalg=no 5419cat > $TMPC << EOF 5420#include <errno.h> 5421#include <sys/types.h> 5422#include <sys/socket.h> 5423#include <linux/if_alg.h> 5424int main(void) { 5425 int sock; 5426 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5427 return sock; 5428} 5429EOF 5430if compile_prog "" "" ; then 5431 have_afalg=yes 5432fi 5433if test "$crypto_afalg" = "yes" 5434then 5435 if test "$have_afalg" != "yes" 5436 then 5437 error_exit "AF_ALG requested but could not be detected" 5438 fi 5439fi 5440 5441 5442################################################# 5443# Check to see if we have the Hypervisor framework 5444if [ "$darwin" = "yes" ] ; then 5445 cat > $TMPC << EOF 5446#include <Hypervisor/hv.h> 5447int main() { return 0;} 5448EOF 5449 if ! compile_object ""; then 5450 hvf='no' 5451 else 5452 hvf='yes' 5453 LDFLAGS="-framework Hypervisor $LDFLAGS" 5454 fi 5455fi 5456 5457################################################# 5458# Sparc implicitly links with --relax, which is 5459# incompatible with -r, so --no-relax should be 5460# given. It does no harm to give it on other 5461# platforms too. 5462 5463# Note: the prototype is needed since QEMU_CFLAGS 5464# contains -Wmissing-prototypes 5465cat > $TMPC << EOF 5466extern int foo(void); 5467int foo(void) { return 0; } 5468EOF 5469if ! compile_object ""; then 5470 error_exit "Failed to compile object file for LD_REL_FLAGS test" 5471fi 5472for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 5473 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 5474 LD_REL_FLAGS=$i 5475 break 5476 fi 5477done 5478if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 5479 feature_not_found "modules" "Cannot find how to build relocatable objects" 5480fi 5481 5482########################################## 5483# check for sysmacros.h 5484 5485have_sysmacros=no 5486cat > $TMPC << EOF 5487#include <sys/sysmacros.h> 5488int main(void) { 5489 return makedev(0, 0); 5490} 5491EOF 5492if compile_prog "" "" ; then 5493 have_sysmacros=yes 5494fi 5495 5496########################################## 5497# Veritas HyperScale block driver VxHS 5498# Check if libvxhs is installed 5499 5500if test "$vxhs" != "no" ; then 5501 cat > $TMPC <<EOF 5502#include <stdint.h> 5503#include <qnio/qnio_api.h> 5504 5505void *vxhs_callback; 5506 5507int main(void) { 5508 iio_init(QNIO_VERSION, vxhs_callback); 5509 return 0; 5510} 5511EOF 5512 vxhs_libs="-lvxhs -lssl" 5513 if compile_prog "" "$vxhs_libs" ; then 5514 vxhs=yes 5515 else 5516 if test "$vxhs" = "yes" ; then 5517 feature_not_found "vxhs block device" "Install libvxhs See github" 5518 fi 5519 vxhs=no 5520 fi 5521fi 5522 5523########################################## 5524# check for _Static_assert() 5525 5526have_static_assert=no 5527cat > $TMPC << EOF 5528_Static_assert(1, "success"); 5529int main(void) { 5530 return 0; 5531} 5532EOF 5533if compile_prog "" "" ; then 5534 have_static_assert=yes 5535fi 5536 5537########################################## 5538# check for utmpx.h, it is missing e.g. on OpenBSD 5539 5540have_utmpx=no 5541cat > $TMPC << EOF 5542#include <utmpx.h> 5543struct utmpx user_info; 5544int main(void) { 5545 return 0; 5546} 5547EOF 5548if compile_prog "" "" ; then 5549 have_utmpx=yes 5550fi 5551 5552########################################## 5553# checks for sanitizers 5554 5555have_asan=no 5556have_ubsan=no 5557have_asan_iface_h=no 5558have_asan_iface_fiber=no 5559 5560if test "$sanitizers" = "yes" ; then 5561 write_c_skeleton 5562 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 5563 have_asan=yes 5564 fi 5565 5566 # we could use a simple skeleton for flags checks, but this also 5567 # detect the static linking issue of ubsan, see also: 5568 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 5569 cat > $TMPC << EOF 5570#include <stdlib.h> 5571int main(void) { 5572 void *tmp = malloc(10); 5573 return *(int *)(tmp + 2); 5574} 5575EOF 5576 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 5577 have_ubsan=yes 5578 fi 5579 5580 if check_include "sanitizer/asan_interface.h" ; then 5581 have_asan_iface_h=yes 5582 fi 5583 5584 cat > $TMPC << EOF 5585#include <sanitizer/asan_interface.h> 5586int main(void) { 5587 __sanitizer_start_switch_fiber(0, 0, 0); 5588 return 0; 5589} 5590EOF 5591 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 5592 have_asan_iface_fiber=yes 5593 fi 5594fi 5595 5596########################################## 5597# Docker and cross-compiler support 5598# 5599# This is specifically for building test 5600# cases for foreign architectures, not 5601# cross-compiling QEMU itself. 5602 5603if has "docker"; then 5604 docker=$($python $source_path/tests/docker/docker.py probe) 5605fi 5606 5607########################################## 5608# check for libpmem 5609 5610if test "$libpmem" != "no"; then 5611 if $pkg_config --exists "libpmem"; then 5612 libpmem="yes" 5613 libpmem_libs=$($pkg_config --libs libpmem) 5614 libpmem_cflags=$($pkg_config --cflags libpmem) 5615 libs_softmmu="$libs_softmmu $libpmem_libs" 5616 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 5617 else 5618 if test "$libpmem" = "yes" ; then 5619 feature_not_found "libpmem" "Install nvml or pmdk" 5620 fi 5621 libpmem="no" 5622 fi 5623fi 5624 5625########################################## 5626# End of CC checks 5627# After here, no more $cc or $ld runs 5628 5629write_c_skeleton 5630 5631if test "$gcov" = "yes" ; then 5632 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 5633 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 5634elif test "$fortify_source" = "yes" ; then 5635 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 5636elif test "$debug" = "no"; then 5637 CFLAGS="-O2 $CFLAGS" 5638fi 5639 5640if test "$have_asan" = "yes"; then 5641 CFLAGS="-fsanitize=address $CFLAGS" 5642 if test "$have_asan_iface_h" = "no" ; then 5643 echo "ASAN build enabled, but ASAN header missing." \ 5644 "Without code annotation, the report may be inferior." 5645 elif test "$have_asan_iface_fiber" = "no" ; then 5646 echo "ASAN build enabled, but ASAN header is too old." \ 5647 "Without code annotation, the report may be inferior." 5648 fi 5649fi 5650if test "$have_ubsan" = "yes"; then 5651 CFLAGS="-fsanitize=undefined $CFLAGS" 5652fi 5653 5654########################################## 5655# Do we have libnfs 5656if test "$libnfs" != "no" ; then 5657 if $pkg_config --atleast-version=1.9.3 libnfs; then 5658 libnfs="yes" 5659 libnfs_libs=$($pkg_config --libs libnfs) 5660 else 5661 if test "$libnfs" = "yes" ; then 5662 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 5663 fi 5664 libnfs="no" 5665 fi 5666fi 5667 5668########################################## 5669# Do we have libudev 5670if test "$libudev" != "no" ; then 5671 if $pkg_config libudev && test "$static" != "yes"; then 5672 libudev="yes" 5673 libudev_libs=$($pkg_config --libs libudev) 5674 else 5675 libudev="no" 5676 fi 5677fi 5678 5679# Now we've finished running tests it's OK to add -Werror to the compiler flags 5680if test "$werror" = "yes"; then 5681 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 5682fi 5683 5684if test "$solaris" = "no" ; then 5685 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 5686 LDFLAGS="-Wl,--warn-common $LDFLAGS" 5687 fi 5688fi 5689 5690# test if pod2man has --utf8 option 5691if pod2man --help | grep -q utf8; then 5692 POD2MAN="pod2man --utf8" 5693else 5694 POD2MAN="pod2man" 5695fi 5696 5697# Use ASLR, no-SEH and DEP if available 5698if test "$mingw32" = "yes" ; then 5699 for flag in --dynamicbase --no-seh --nxcompat; do 5700 if ld_has $flag ; then 5701 LDFLAGS="-Wl,$flag $LDFLAGS" 5702 fi 5703 done 5704fi 5705 5706qemu_confdir=$sysconfdir$confsuffix 5707qemu_moddir=$libdir$confsuffix 5708qemu_datadir=$datadir$confsuffix 5709qemu_localedir="$datadir/locale" 5710 5711# We can only support ivshmem if we have eventfd 5712if [ "$eventfd" = "yes" ]; then 5713 ivshmem=yes 5714fi 5715 5716tools="" 5717if test "$want_tools" = "yes" ; then 5718 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools" 5719 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 5720 tools="qemu-nbd\$(EXESUF) $tools" 5721 fi 5722 if [ "$ivshmem" = "yes" ]; then 5723 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 5724 fi 5725 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then 5726 tools="elf2dmp $tools" 5727 fi 5728fi 5729if test "$softmmu" = yes ; then 5730 if test "$linux" = yes; then 5731 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then 5732 virtfs=yes 5733 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 5734 else 5735 if test "$virtfs" = yes; then 5736 error_exit "VirtFS requires libcap devel and libattr devel" 5737 fi 5738 virtfs=no 5739 fi 5740 if test "$mpath" != no && test "$mpathpersist" = yes ; then 5741 mpath=yes 5742 else 5743 if test "$mpath" = yes; then 5744 error_exit "Multipath requires libmpathpersist devel" 5745 fi 5746 mpath=no 5747 fi 5748 tools="$tools scsi/qemu-pr-helper\$(EXESUF)" 5749 else 5750 if test "$virtfs" = yes; then 5751 error_exit "VirtFS is supported only on Linux" 5752 fi 5753 virtfs=no 5754 if test "$mpath" = yes; then 5755 error_exit "Multipath is supported only on Linux" 5756 fi 5757 mpath=no 5758 fi 5759 if test "$xkbcommon" = "yes"; then 5760 tools="qemu-keymap\$(EXESUF) $tools" 5761 fi 5762fi 5763 5764# Probe for guest agent support/options 5765 5766if [ "$guest_agent" != "no" ]; then 5767 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 5768 tools="qemu-ga $tools" 5769 guest_agent=yes 5770 elif [ "$guest_agent" != yes ]; then 5771 guest_agent=no 5772 else 5773 error_exit "Guest agent is not supported on this platform" 5774 fi 5775fi 5776 5777# Guest agent Window MSI package 5778 5779if test "$guest_agent" != yes; then 5780 if test "$guest_agent_msi" = yes; then 5781 error_exit "MSI guest agent package requires guest agent enabled" 5782 fi 5783 guest_agent_msi=no 5784elif test "$mingw32" != "yes"; then 5785 if test "$guest_agent_msi" = "yes"; then 5786 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 5787 fi 5788 guest_agent_msi=no 5789elif ! has wixl; then 5790 if test "$guest_agent_msi" = "yes"; then 5791 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 5792 fi 5793 guest_agent_msi=no 5794else 5795 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 5796 # disabled explicitly 5797 if test "$guest_agent_msi" != "no"; then 5798 guest_agent_msi=yes 5799 fi 5800fi 5801 5802if test "$guest_agent_msi" = "yes"; then 5803 if test "$guest_agent_with_vss" = "yes"; then 5804 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 5805 fi 5806 5807 if test "$QEMU_GA_MANUFACTURER" = ""; then 5808 QEMU_GA_MANUFACTURER=QEMU 5809 fi 5810 5811 if test "$QEMU_GA_DISTRO" = ""; then 5812 QEMU_GA_DISTRO=Linux 5813 fi 5814 5815 if test "$QEMU_GA_VERSION" = ""; then 5816 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5817 fi 5818 5819 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 5820 5821 case "$cpu" in 5822 x86_64) 5823 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 5824 ;; 5825 i386) 5826 QEMU_GA_MSI_ARCH="-D Arch=32" 5827 ;; 5828 *) 5829 error_exit "CPU $cpu not supported for building installation package" 5830 ;; 5831 esac 5832fi 5833 5834# Mac OS X ships with a broken assembler 5835roms= 5836if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 5837 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 5838 "$softmmu" = yes ; then 5839 # Different host OS linkers have different ideas about the name of the ELF 5840 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 5841 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 5842 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 5843 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5844 ld_i386_emulation="$emu" 5845 roms="optionrom" 5846 break 5847 fi 5848 done 5849fi 5850if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 5851 roms="$roms spapr-rtas" 5852fi 5853 5854if test "$cpu" = "s390x" ; then 5855 roms="$roms s390-ccw" 5856fi 5857 5858# Probe for the need for relocating the user-only binary. 5859if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 5860 textseg_addr= 5861 case "$cpu" in 5862 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 5863 # ??? Rationale for choosing this address 5864 textseg_addr=0x60000000 5865 ;; 5866 mips) 5867 # A 256M aligned address, high in the address space, with enough 5868 # room for the code_gen_buffer above it before the stack. 5869 textseg_addr=0x60000000 5870 ;; 5871 esac 5872 if [ -n "$textseg_addr" ]; then 5873 cat > $TMPC <<EOF 5874 int main(void) { return 0; } 5875EOF 5876 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 5877 if ! compile_prog "" "$textseg_ldflags"; then 5878 # In case ld does not support -Ttext-segment, edit the default linker 5879 # script via sed to set the .text start addr. This is needed on FreeBSD 5880 # at least. 5881 if ! $ld --verbose >/dev/null 2>&1; then 5882 error_exit \ 5883 "We need to link the QEMU user mode binaries at a" \ 5884 "specific text address. Unfortunately your linker" \ 5885 "doesn't support either the -Ttext-segment option or" \ 5886 "printing the default linker script with --verbose." \ 5887 "If you don't want the user mode binaries, pass the" \ 5888 "--disable-user option to configure." 5889 fi 5890 5891 $ld --verbose | sed \ 5892 -e '1,/==================================================/d' \ 5893 -e '/==================================================/,$d' \ 5894 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 5895 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 5896 textseg_ldflags="-Wl,-T../config-host.ld" 5897 fi 5898 fi 5899fi 5900 5901# Check that the C++ compiler exists and works with the C compiler. 5902# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 5903if has $cxx; then 5904 cat > $TMPC <<EOF 5905int c_function(void); 5906int main(void) { return c_function(); } 5907EOF 5908 5909 compile_object 5910 5911 cat > $TMPCXX <<EOF 5912extern "C" { 5913 int c_function(void); 5914} 5915int c_function(void) { return 42; } 5916EOF 5917 5918 update_cxxflags 5919 5920 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then 5921 # C++ compiler $cxx works ok with C compiler $cc 5922 : 5923 else 5924 echo "C++ compiler $cxx does not work with C compiler $cc" 5925 echo "Disabling C++ specific optional code" 5926 cxx= 5927 fi 5928else 5929 echo "No C++ compiler available; disabling C++ specific optional code" 5930 cxx= 5931fi 5932 5933echo_version() { 5934 if test "$1" = "yes" ; then 5935 echo "($2)" 5936 fi 5937} 5938 5939# prepend pixman and ftd flags after all config tests are done 5940QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 5941QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 5942libs_softmmu="$pixman_libs $libs_softmmu" 5943 5944echo "Install prefix $prefix" 5945echo "BIOS directory $(eval echo $qemu_datadir)" 5946echo "firmware path $(eval echo $firmwarepath)" 5947echo "binary directory $(eval echo $bindir)" 5948echo "library directory $(eval echo $libdir)" 5949echo "module directory $(eval echo $qemu_moddir)" 5950echo "libexec directory $(eval echo $libexecdir)" 5951echo "include directory $(eval echo $includedir)" 5952echo "config directory $(eval echo $sysconfdir)" 5953if test "$mingw32" = "no" ; then 5954echo "local state directory $(eval echo $local_statedir)" 5955echo "Manual directory $(eval echo $mandir)" 5956echo "ELF interp prefix $interp_prefix" 5957else 5958echo "local state directory queried at runtime" 5959echo "Windows SDK $win_sdk" 5960fi 5961echo "Source path $source_path" 5962echo "GIT binary $git" 5963echo "GIT submodules $git_submodules" 5964echo "C compiler $cc" 5965echo "Host C compiler $host_cc" 5966echo "C++ compiler $cxx" 5967echo "Objective-C compiler $objcc" 5968echo "ARFLAGS $ARFLAGS" 5969echo "CFLAGS $CFLAGS" 5970echo "QEMU_CFLAGS $QEMU_CFLAGS" 5971echo "LDFLAGS $LDFLAGS" 5972echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 5973echo "make $make" 5974echo "install $install" 5975echo "python $python" 5976if test "$slirp" = "yes" ; then 5977 echo "smbd $smbd" 5978fi 5979echo "module support $modules" 5980echo "host CPU $cpu" 5981echo "host big endian $bigendian" 5982echo "target list $target_list" 5983echo "gprof enabled $gprof" 5984echo "sparse enabled $sparse" 5985echo "strip binaries $strip_opt" 5986echo "profiler $profiler" 5987echo "static build $static" 5988if test "$darwin" = "yes" ; then 5989 echo "Cocoa support $cocoa" 5990fi 5991echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 5992echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 5993echo "GTK GL support $gtk_gl" 5994echo "VTE support $vte $(echo_version $vte $vteversion)" 5995echo "TLS priority $tls_priority" 5996echo "GNUTLS support $gnutls" 5997echo "libgcrypt $gcrypt" 5998echo "nettle $nettle $(echo_version $nettle $nettle_version)" 5999echo "libtasn1 $tasn1" 6000echo "curses support $curses" 6001echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 6002echo "curl support $curl" 6003echo "mingw32 support $mingw32" 6004echo "Audio drivers $audio_drv_list" 6005echo "Block whitelist (rw) $block_drv_rw_whitelist" 6006echo "Block whitelist (ro) $block_drv_ro_whitelist" 6007echo "VirtFS support $virtfs" 6008echo "Multipath support $mpath" 6009echo "VNC support $vnc" 6010if test "$vnc" = "yes" ; then 6011 echo "VNC SASL support $vnc_sasl" 6012 echo "VNC JPEG support $vnc_jpeg" 6013 echo "VNC PNG support $vnc_png" 6014fi 6015if test -n "$sparc_cpu"; then 6016 echo "Target Sparc Arch $sparc_cpu" 6017fi 6018echo "xen support $xen" 6019if test "$xen" = "yes" ; then 6020 echo "xen ctrl version $xen_ctrl_version" 6021 echo "pv dom build $xen_pv_domain_build" 6022fi 6023echo "brlapi support $brlapi" 6024echo "bluez support $bluez" 6025echo "Documentation $docs" 6026echo "PIE $pie" 6027echo "vde support $vde" 6028echo "netmap support $netmap" 6029echo "Linux AIO support $linux_aio" 6030echo "ATTR/XATTR support $attr" 6031echo "Install blobs $blobs" 6032echo "KVM support $kvm" 6033echo "HAX support $hax" 6034echo "HVF support $hvf" 6035echo "WHPX support $whpx" 6036echo "TCG support $tcg" 6037if test "$tcg" = "yes" ; then 6038 echo "TCG debug enabled $debug_tcg" 6039 echo "TCG interpreter $tcg_interpreter" 6040fi 6041echo "malloc trim support $malloc_trim" 6042echo "RDMA support $rdma" 6043echo "PVRDMA support $pvrdma" 6044echo "fdt support $fdt" 6045echo "membarrier $membarrier" 6046echo "preadv support $preadv" 6047echo "fdatasync $fdatasync" 6048echo "madvise $madvise" 6049echo "posix_madvise $posix_madvise" 6050echo "posix_memalign $posix_memalign" 6051echo "libcap-ng support $cap_ng" 6052echo "vhost-net support $vhost_net" 6053echo "vhost-crypto support $vhost_crypto" 6054echo "vhost-scsi support $vhost_scsi" 6055echo "vhost-vsock support $vhost_vsock" 6056echo "vhost-user support $vhost_user" 6057echo "Trace backends $trace_backends" 6058if have_backend "simple"; then 6059echo "Trace output file $trace_file-<pid>" 6060fi 6061echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6062echo "rbd support $rbd" 6063echo "xfsctl support $xfs" 6064echo "smartcard support $smartcard" 6065echo "libusb $libusb" 6066echo "usb net redir $usb_redir" 6067echo "OpenGL support $opengl" 6068echo "OpenGL dmabufs $opengl_dmabuf" 6069echo "libiscsi support $libiscsi" 6070echo "libnfs support $libnfs" 6071echo "build guest agent $guest_agent" 6072echo "QGA VSS support $guest_agent_with_vss" 6073echo "QGA w32 disk info $guest_agent_ntddscsi" 6074echo "QGA MSI support $guest_agent_msi" 6075echo "seccomp support $seccomp" 6076echo "coroutine backend $coroutine" 6077echo "coroutine pool $coroutine_pool" 6078echo "debug stack usage $debug_stack_usage" 6079echo "mutex debugging $debug_mutex" 6080echo "crypto afalg $crypto_afalg" 6081echo "GlusterFS support $glusterfs" 6082echo "gcov $gcov_tool" 6083echo "gcov enabled $gcov" 6084echo "TPM support $tpm" 6085echo "libssh2 support $libssh2" 6086echo "TPM passthrough $tpm_passthrough" 6087echo "TPM emulator $tpm_emulator" 6088echo "QOM debugging $qom_cast_debug" 6089echo "Live block migration $live_block_migration" 6090echo "lzo support $lzo" 6091echo "snappy support $snappy" 6092echo "bzip2 support $bzip2" 6093echo "NUMA host support $numa" 6094echo "libxml2 $libxml2" 6095echo "tcmalloc support $tcmalloc" 6096echo "jemalloc support $jemalloc" 6097echo "avx2 optimization $avx2_opt" 6098echo "replication support $replication" 6099echo "VxHS block device $vxhs" 6100echo "bochs support $bochs" 6101echo "cloop support $cloop" 6102echo "dmg support $dmg" 6103echo "qcow v1 support $qcow1" 6104echo "vdi support $vdi" 6105echo "vvfat support $vvfat" 6106echo "qed support $qed" 6107echo "parallels support $parallels" 6108echo "sheepdog support $sheepdog" 6109echo "capstone $capstone" 6110echo "docker $docker" 6111echo "libpmem support $libpmem" 6112echo "libudev $libudev" 6113 6114if test "$sdl_too_old" = "yes"; then 6115echo "-> Your SDL version is too old - please upgrade to have SDL support" 6116fi 6117 6118if test "$sdlabi" = "1.2"; then 6119 echo 6120 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in" 6121 echo "WARNING: future releases. Please switch to using SDL 2.0" 6122fi 6123 6124if test "$supported_cpu" = "no"; then 6125 echo 6126 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 6127 echo 6128 echo "CPU host architecture $cpu support is not currently maintained." 6129 echo "The QEMU project intends to remove support for this host CPU in" 6130 echo "a future release if nobody volunteers to maintain it and to" 6131 echo "provide a build host for our continuous integration setup." 6132 echo "configure has succeeded and you can continue to build, but" 6133 echo "if you care about QEMU on this platform you should contact" 6134 echo "us upstream at qemu-devel@nongnu.org." 6135fi 6136 6137if test "$supported_os" = "no"; then 6138 echo 6139 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 6140 echo 6141 echo "Host OS $targetos support is not currently maintained." 6142 echo "The QEMU project intends to remove support for this host OS in" 6143 echo "a future release if nobody volunteers to maintain it and to" 6144 echo "provide a build host for our continuous integration setup." 6145 echo "configure has succeeded and you can continue to build, but" 6146 echo "if you care about QEMU on this platform you should contact" 6147 echo "us upstream at qemu-devel@nongnu.org." 6148fi 6149 6150config_host_mak="config-host.mak" 6151 6152echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6153 6154echo "# Automatically generated by configure - do not modify" > $config_host_mak 6155echo >> $config_host_mak 6156 6157echo all: >> $config_host_mak 6158echo "prefix=$prefix" >> $config_host_mak 6159echo "bindir=$bindir" >> $config_host_mak 6160echo "libdir=$libdir" >> $config_host_mak 6161echo "libexecdir=$libexecdir" >> $config_host_mak 6162echo "includedir=$includedir" >> $config_host_mak 6163echo "mandir=$mandir" >> $config_host_mak 6164echo "sysconfdir=$sysconfdir" >> $config_host_mak 6165echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6166echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6167echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6168echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 6169echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6170if test "$mingw32" = "no" ; then 6171 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6172fi 6173echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6174echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6175echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 6176echo "GIT=$git" >> $config_host_mak 6177echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6178echo "GIT_UPDATE=$git_update" >> $config_host_mak 6179 6180echo "ARCH=$ARCH" >> $config_host_mak 6181 6182if test "$debug_tcg" = "yes" ; then 6183 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6184fi 6185if test "$strip_opt" = "yes" ; then 6186 echo "STRIP=${strip}" >> $config_host_mak 6187fi 6188if test "$bigendian" = "yes" ; then 6189 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6190fi 6191if test "$mingw32" = "yes" ; then 6192 echo "CONFIG_WIN32=y" >> $config_host_mak 6193 rc_version=$(cat $source_path/VERSION) 6194 version_major=${rc_version%%.*} 6195 rc_version=${rc_version#*.} 6196 version_minor=${rc_version%%.*} 6197 rc_version=${rc_version#*.} 6198 version_subminor=${rc_version%%.*} 6199 version_micro=0 6200 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6201 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6202 if test "$guest_agent_with_vss" = "yes" ; then 6203 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6204 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6205 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6206 fi 6207 if test "$guest_agent_ntddscsi" = "yes" ; then 6208 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 6209 fi 6210 if test "$guest_agent_msi" = "yes"; then 6211 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6212 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6213 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6214 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6215 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6216 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6217 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6218 fi 6219else 6220 echo "CONFIG_POSIX=y" >> $config_host_mak 6221fi 6222 6223if test "$linux" = "yes" ; then 6224 echo "CONFIG_LINUX=y" >> $config_host_mak 6225fi 6226 6227if test "$darwin" = "yes" ; then 6228 echo "CONFIG_DARWIN=y" >> $config_host_mak 6229fi 6230 6231if test "$solaris" = "yes" ; then 6232 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6233fi 6234if test "$haiku" = "yes" ; then 6235 echo "CONFIG_HAIKU=y" >> $config_host_mak 6236fi 6237if test "$static" = "yes" ; then 6238 echo "CONFIG_STATIC=y" >> $config_host_mak 6239fi 6240if test "$profiler" = "yes" ; then 6241 echo "CONFIG_PROFILER=y" >> $config_host_mak 6242fi 6243if test "$slirp" = "yes" ; then 6244 echo "CONFIG_SLIRP=y" >> $config_host_mak 6245 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6246fi 6247if test "$vde" = "yes" ; then 6248 echo "CONFIG_VDE=y" >> $config_host_mak 6249 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6250fi 6251if test "$netmap" = "yes" ; then 6252 echo "CONFIG_NETMAP=y" >> $config_host_mak 6253fi 6254if test "$l2tpv3" = "yes" ; then 6255 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6256fi 6257if test "$cap_ng" = "yes" ; then 6258 echo "CONFIG_LIBCAP=y" >> $config_host_mak 6259fi 6260echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6261for drv in $audio_drv_list; do 6262 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6263 case "$drv" in 6264 alsa | oss | pa | sdl) 6265 echo "$def=m" >> $config_host_mak ;; 6266 *) 6267 echo "$def=y" >> $config_host_mak ;; 6268 esac 6269done 6270echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6271echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6272echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6273echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6274echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6275if test "$audio_pt_int" = "yes" ; then 6276 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 6277fi 6278if test "$audio_win_int" = "yes" ; then 6279 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6280fi 6281echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6282echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6283if test "$vnc" = "yes" ; then 6284 echo "CONFIG_VNC=y" >> $config_host_mak 6285fi 6286if test "$vnc_sasl" = "yes" ; then 6287 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 6288fi 6289if test "$vnc_jpeg" = "yes" ; then 6290 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 6291fi 6292if test "$vnc_png" = "yes" ; then 6293 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 6294fi 6295if test "$xkbcommon" = "yes" ; then 6296 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 6297 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 6298fi 6299if test "$fnmatch" = "yes" ; then 6300 echo "CONFIG_FNMATCH=y" >> $config_host_mak 6301fi 6302if test "$xfs" = "yes" ; then 6303 echo "CONFIG_XFS=y" >> $config_host_mak 6304fi 6305qemu_version=$(head $source_path/VERSION) 6306echo "VERSION=$qemu_version" >>$config_host_mak 6307echo "PKGVERSION=$pkgversion" >>$config_host_mak 6308echo "SRC_PATH=$source_path" >> $config_host_mak 6309echo "TARGET_DIRS=$target_list" >> $config_host_mak 6310if [ "$docs" = "yes" ] ; then 6311 echo "BUILD_DOCS=yes" >> $config_host_mak 6312fi 6313if test "$modules" = "yes"; then 6314 # $shacmd can generate a hash started with digit, which the compiler doesn't 6315 # like as an symbol. So prefix it with an underscore 6316 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6317 echo "CONFIG_MODULES=y" >> $config_host_mak 6318fi 6319if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then 6320 echo "CONFIG_X11=y" >> $config_host_mak 6321 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6322 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6323fi 6324if test "$sdl" = "yes" ; then 6325 echo "CONFIG_SDL=m" >> $config_host_mak 6326 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 6327 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 6328 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 6329fi 6330if test "$cocoa" = "yes" ; then 6331 echo "CONFIG_COCOA=y" >> $config_host_mak 6332fi 6333if test "$curses" = "yes" ; then 6334 echo "CONFIG_CURSES=m" >> $config_host_mak 6335 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6336 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6337fi 6338if test "$pipe2" = "yes" ; then 6339 echo "CONFIG_PIPE2=y" >> $config_host_mak 6340fi 6341if test "$accept4" = "yes" ; then 6342 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6343fi 6344if test "$splice" = "yes" ; then 6345 echo "CONFIG_SPLICE=y" >> $config_host_mak 6346fi 6347if test "$eventfd" = "yes" ; then 6348 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6349fi 6350if test "$memfd" = "yes" ; then 6351 echo "CONFIG_MEMFD=y" >> $config_host_mak 6352fi 6353if test "$have_usbfs" = "yes" ; then 6354 echo "CONFIG_USBFS=y" >> $config_host_mak 6355fi 6356if test "$fallocate" = "yes" ; then 6357 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6358fi 6359if test "$fallocate_punch_hole" = "yes" ; then 6360 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6361fi 6362if test "$fallocate_zero_range" = "yes" ; then 6363 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6364fi 6365if test "$posix_fallocate" = "yes" ; then 6366 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6367fi 6368if test "$sync_file_range" = "yes" ; then 6369 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6370fi 6371if test "$fiemap" = "yes" ; then 6372 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6373fi 6374if test "$dup3" = "yes" ; then 6375 echo "CONFIG_DUP3=y" >> $config_host_mak 6376fi 6377if test "$ppoll" = "yes" ; then 6378 echo "CONFIG_PPOLL=y" >> $config_host_mak 6379fi 6380if test "$prctl_pr_set_timerslack" = "yes" ; then 6381 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6382fi 6383if test "$epoll" = "yes" ; then 6384 echo "CONFIG_EPOLL=y" >> $config_host_mak 6385fi 6386if test "$epoll_create1" = "yes" ; then 6387 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6388fi 6389if test "$sendfile" = "yes" ; then 6390 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6391fi 6392if test "$timerfd" = "yes" ; then 6393 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6394fi 6395if test "$setns" = "yes" ; then 6396 echo "CONFIG_SETNS=y" >> $config_host_mak 6397fi 6398if test "$clock_adjtime" = "yes" ; then 6399 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6400fi 6401if test "$syncfs" = "yes" ; then 6402 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6403fi 6404if test "$inotify" = "yes" ; then 6405 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6406fi 6407if test "$inotify1" = "yes" ; then 6408 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6409fi 6410if test "$sem_timedwait" = "yes" ; then 6411 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6412fi 6413if test "$strchrnul" = "yes" ; then 6414 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6415fi 6416if test "$byteswap_h" = "yes" ; then 6417 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6418fi 6419if test "$bswap_h" = "yes" ; then 6420 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6421fi 6422if test "$curl" = "yes" ; then 6423 echo "CONFIG_CURL=m" >> $config_host_mak 6424 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6425 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6426fi 6427if test "$brlapi" = "yes" ; then 6428 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6429 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6430fi 6431if test "$bluez" = "yes" ; then 6432 echo "CONFIG_BLUEZ=y" >> $config_host_mak 6433 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 6434fi 6435if test "$gtk" = "yes" ; then 6436 echo "CONFIG_GTK=m" >> $config_host_mak 6437 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6438 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6439 if test "$gtk_gl" = "yes" ; then 6440 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6441 fi 6442fi 6443echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6444if test "$gnutls" = "yes" ; then 6445 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6446fi 6447if test "$gcrypt" = "yes" ; then 6448 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6449 if test "$gcrypt_hmac" = "yes" ; then 6450 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6451 fi 6452fi 6453if test "$nettle" = "yes" ; then 6454 echo "CONFIG_NETTLE=y" >> $config_host_mak 6455 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6456fi 6457if test "$tasn1" = "yes" ; then 6458 echo "CONFIG_TASN1=y" >> $config_host_mak 6459fi 6460if test "$have_ifaddrs_h" = "yes" ; then 6461 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6462fi 6463if test "$have_broken_size_max" = "yes" ; then 6464 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6465fi 6466 6467# Work around a system header bug with some kernel/XFS header 6468# versions where they both try to define 'struct fsxattr': 6469# xfs headers will not try to redefine structs from linux headers 6470# if this macro is set. 6471if test "$have_fsxattr" = "yes" ; then 6472 echo "HAVE_FSXATTR=y" >> $config_host_mak 6473fi 6474if test "$have_copy_file_range" = "yes" ; then 6475 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6476fi 6477if test "$vte" = "yes" ; then 6478 echo "CONFIG_VTE=y" >> $config_host_mak 6479 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6480 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6481fi 6482if test "$virglrenderer" = "yes" ; then 6483 echo "CONFIG_VIRGL=y" >> $config_host_mak 6484 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 6485 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 6486fi 6487if test "$xen" = "yes" ; then 6488 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6489 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6490 if test "$xen_pv_domain_build" = "yes" ; then 6491 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak 6492 fi 6493fi 6494if test "$linux_aio" = "yes" ; then 6495 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 6496fi 6497if test "$attr" = "yes" ; then 6498 echo "CONFIG_ATTR=y" >> $config_host_mak 6499fi 6500if test "$libattr" = "yes" ; then 6501 echo "CONFIG_LIBATTR=y" >> $config_host_mak 6502fi 6503if test "$virtfs" = "yes" ; then 6504 echo "CONFIG_VIRTFS=y" >> $config_host_mak 6505fi 6506if test "$mpath" = "yes" ; then 6507 echo "CONFIG_MPATH=y" >> $config_host_mak 6508 if test "$mpathpersist_new_api" = "yes"; then 6509 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 6510 fi 6511fi 6512if test "$vhost_scsi" = "yes" ; then 6513 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 6514fi 6515if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then 6516 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 6517fi 6518if test "$vhost_crypto" = "yes" ; then 6519 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6520fi 6521if test "$vhost_vsock" = "yes" ; then 6522 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 6523fi 6524if test "$vhost_user" = "yes" ; then 6525 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6526fi 6527if test "$blobs" = "yes" ; then 6528 echo "INSTALL_BLOBS=yes" >> $config_host_mak 6529fi 6530if test "$iovec" = "yes" ; then 6531 echo "CONFIG_IOVEC=y" >> $config_host_mak 6532fi 6533if test "$preadv" = "yes" ; then 6534 echo "CONFIG_PREADV=y" >> $config_host_mak 6535fi 6536if test "$fdt" != "no" ; then 6537 echo "CONFIG_FDT=y" >> $config_host_mak 6538fi 6539if test "$membarrier" = "yes" ; then 6540 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6541fi 6542if test "$signalfd" = "yes" ; then 6543 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6544fi 6545if test "$tcg" = "yes"; then 6546 echo "CONFIG_TCG=y" >> $config_host_mak 6547 if test "$tcg_interpreter" = "yes" ; then 6548 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 6549 fi 6550fi 6551if test "$fdatasync" = "yes" ; then 6552 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 6553fi 6554if test "$madvise" = "yes" ; then 6555 echo "CONFIG_MADVISE=y" >> $config_host_mak 6556fi 6557if test "$posix_madvise" = "yes" ; then 6558 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6559fi 6560if test "$posix_memalign" = "yes" ; then 6561 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 6562fi 6563 6564if test "$spice" = "yes" ; then 6565 echo "CONFIG_SPICE=y" >> $config_host_mak 6566fi 6567 6568if test "$smartcard" = "yes" ; then 6569 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 6570 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 6571 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 6572fi 6573 6574if test "$libusb" = "yes" ; then 6575 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 6576 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 6577 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 6578fi 6579 6580if test "$usb_redir" = "yes" ; then 6581 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 6582 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 6583 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 6584fi 6585 6586if test "$opengl" = "yes" ; then 6587 echo "CONFIG_OPENGL=y" >> $config_host_mak 6588 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 6589 if test "$opengl_dmabuf" = "yes" ; then 6590 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 6591 fi 6592fi 6593 6594if test "$malloc_trim" = "yes" ; then 6595 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 6596fi 6597 6598if test "$avx2_opt" = "yes" ; then 6599 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 6600fi 6601 6602if test "$lzo" = "yes" ; then 6603 echo "CONFIG_LZO=y" >> $config_host_mak 6604fi 6605 6606if test "$snappy" = "yes" ; then 6607 echo "CONFIG_SNAPPY=y" >> $config_host_mak 6608fi 6609 6610if test "$bzip2" = "yes" ; then 6611 echo "CONFIG_BZIP2=y" >> $config_host_mak 6612 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 6613fi 6614 6615if test "$libiscsi" = "yes" ; then 6616 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 6617 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 6618 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 6619fi 6620 6621if test "$libnfs" = "yes" ; then 6622 echo "CONFIG_LIBNFS=m" >> $config_host_mak 6623 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 6624fi 6625 6626if test "$seccomp" = "yes"; then 6627 echo "CONFIG_SECCOMP=y" >> $config_host_mak 6628 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 6629 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 6630fi 6631 6632# XXX: suppress that 6633if [ "$bsd" = "yes" ] ; then 6634 echo "CONFIG_BSD=y" >> $config_host_mak 6635fi 6636 6637if test "$localtime_r" = "yes" ; then 6638 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 6639fi 6640if test "$qom_cast_debug" = "yes" ; then 6641 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 6642fi 6643if test "$rbd" = "yes" ; then 6644 echo "CONFIG_RBD=m" >> $config_host_mak 6645 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 6646 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 6647fi 6648 6649echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 6650if test "$coroutine_pool" = "yes" ; then 6651 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 6652else 6653 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 6654fi 6655 6656if test "$debug_stack_usage" = "yes" ; then 6657 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 6658fi 6659 6660if test "$crypto_afalg" = "yes" ; then 6661 echo "CONFIG_AF_ALG=y" >> $config_host_mak 6662fi 6663 6664if test "$open_by_handle_at" = "yes" ; then 6665 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 6666fi 6667 6668if test "$linux_magic_h" = "yes" ; then 6669 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 6670fi 6671 6672if test "$pragma_diagnostic_available" = "yes" ; then 6673 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 6674fi 6675 6676if test "$valgrind_h" = "yes" ; then 6677 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 6678fi 6679 6680if test "$have_asan_iface_fiber" = "yes" ; then 6681 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 6682fi 6683 6684if test "$has_environ" = "yes" ; then 6685 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 6686fi 6687 6688if test "$cpuid_h" = "yes" ; then 6689 echo "CONFIG_CPUID_H=y" >> $config_host_mak 6690fi 6691 6692if test "$int128" = "yes" ; then 6693 echo "CONFIG_INT128=y" >> $config_host_mak 6694fi 6695 6696if test "$atomic128" = "yes" ; then 6697 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 6698fi 6699 6700if test "$cmpxchg128" = "yes" ; then 6701 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 6702fi 6703 6704if test "$atomic64" = "yes" ; then 6705 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 6706fi 6707 6708if test "$vector16" = "yes" ; then 6709 echo "CONFIG_VECTOR16=y" >> $config_host_mak 6710fi 6711 6712if test "$getauxval" = "yes" ; then 6713 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 6714fi 6715 6716if test "$glusterfs" = "yes" ; then 6717 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 6718 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 6719 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 6720fi 6721 6722if test "$glusterfs_xlator_opt" = "yes" ; then 6723 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 6724fi 6725 6726if test "$glusterfs_discard" = "yes" ; then 6727 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 6728fi 6729 6730if test "$glusterfs_fallocate" = "yes" ; then 6731 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 6732fi 6733 6734if test "$glusterfs_zerofill" = "yes" ; then 6735 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 6736fi 6737 6738if test "$libssh2" = "yes" ; then 6739 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 6740 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 6741 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 6742fi 6743 6744if test "$live_block_migration" = "yes" ; then 6745 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 6746fi 6747 6748if test "$tpm" = "yes"; then 6749 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 6750 # TPM passthrough support? 6751 if test "$tpm_passthrough" = "yes"; then 6752 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 6753 fi 6754 # TPM emulator support? 6755 if test "$tpm_emulator" = "yes"; then 6756 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak 6757 fi 6758fi 6759 6760echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 6761if have_backend "nop"; then 6762 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 6763fi 6764if have_backend "simple"; then 6765 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 6766 # Set the appropriate trace file. 6767 trace_file="\"$trace_file-\" FMT_pid" 6768fi 6769if have_backend "log"; then 6770 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 6771fi 6772if have_backend "ust"; then 6773 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 6774fi 6775if have_backend "dtrace"; then 6776 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 6777 if test "$trace_backend_stap" = "yes" ; then 6778 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 6779 fi 6780fi 6781if have_backend "ftrace"; then 6782 if test "$linux" = "yes" ; then 6783 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 6784 else 6785 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 6786 fi 6787fi 6788if have_backend "syslog"; then 6789 if test "$posix_syslog" = "yes" ; then 6790 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 6791 else 6792 feature_not_found "syslog(trace backend)" "syslog not available" 6793 fi 6794fi 6795echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 6796 6797if test "$rdma" = "yes" ; then 6798 echo "CONFIG_RDMA=y" >> $config_host_mak 6799 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 6800fi 6801 6802if test "$pvrdma" = "yes" ; then 6803 echo "CONFIG_PVRDMA=y" >> $config_host_mak 6804fi 6805 6806if test "$have_rtnetlink" = "yes" ; then 6807 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 6808fi 6809 6810if test "$libxml2" = "yes" ; then 6811 echo "CONFIG_LIBXML2=y" >> $config_host_mak 6812 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 6813 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 6814fi 6815 6816if test "$replication" = "yes" ; then 6817 echo "CONFIG_REPLICATION=y" >> $config_host_mak 6818fi 6819 6820if test "$have_af_vsock" = "yes" ; then 6821 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 6822fi 6823 6824if test "$have_sysmacros" = "yes" ; then 6825 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 6826fi 6827 6828if test "$have_static_assert" = "yes" ; then 6829 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 6830fi 6831 6832if test "$have_utmpx" = "yes" ; then 6833 echo "HAVE_UTMPX=y" >> $config_host_mak 6834fi 6835 6836if test "$ivshmem" = "yes" ; then 6837 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 6838fi 6839if test "$capstone" != "no" ; then 6840 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 6841fi 6842if test "$debug_mutex" = "yes" ; then 6843 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 6844fi 6845 6846# Hold two types of flag: 6847# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 6848# a thread we have a handle to 6849# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 6850# platform 6851if test "$pthread_setname_np" = "yes" ; then 6852 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6853 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 6854fi 6855 6856if test "$vxhs" = "yes" ; then 6857 echo "CONFIG_VXHS=y" >> $config_host_mak 6858 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 6859fi 6860 6861if test "$libpmem" = "yes" ; then 6862 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 6863fi 6864 6865if test "$bochs" = "yes" ; then 6866 echo "CONFIG_BOCHS=y" >> $config_host_mak 6867fi 6868if test "$cloop" = "yes" ; then 6869 echo "CONFIG_CLOOP=y" >> $config_host_mak 6870fi 6871if test "$dmg" = "yes" ; then 6872 echo "CONFIG_DMG=y" >> $config_host_mak 6873fi 6874if test "$qcow1" = "yes" ; then 6875 echo "CONFIG_QCOW1=y" >> $config_host_mak 6876fi 6877if test "$vdi" = "yes" ; then 6878 echo "CONFIG_VDI=y" >> $config_host_mak 6879fi 6880if test "$vvfat" = "yes" ; then 6881 echo "CONFIG_VVFAT=y" >> $config_host_mak 6882fi 6883if test "$qed" = "yes" ; then 6884 echo "CONFIG_QED=y" >> $config_host_mak 6885fi 6886if test "$parallels" = "yes" ; then 6887 echo "CONFIG_PARALLELS=y" >> $config_host_mak 6888fi 6889if test "$sheepdog" = "yes" ; then 6890 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 6891fi 6892 6893if test "$tcg_interpreter" = "yes"; then 6894 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 6895elif test "$ARCH" = "sparc64" ; then 6896 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 6897elif test "$ARCH" = "s390x" ; then 6898 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 6899elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 6900 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 6901elif test "$ARCH" = "ppc64" ; then 6902 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 6903else 6904 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 6905fi 6906QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES" 6907 6908echo "TOOLS=$tools" >> $config_host_mak 6909echo "ROMS=$roms" >> $config_host_mak 6910echo "MAKE=$make" >> $config_host_mak 6911echo "INSTALL=$install" >> $config_host_mak 6912echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 6913echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 6914echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 6915echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 6916echo "PYTHON=$python" >> $config_host_mak 6917echo "CC=$cc" >> $config_host_mak 6918if $iasl -h > /dev/null 2>&1; then 6919 echo "IASL=$iasl" >> $config_host_mak 6920fi 6921echo "HOST_CC=$host_cc" >> $config_host_mak 6922echo "CXX=$cxx" >> $config_host_mak 6923echo "OBJCC=$objcc" >> $config_host_mak 6924echo "AR=$ar" >> $config_host_mak 6925echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 6926echo "AS=$as" >> $config_host_mak 6927echo "CCAS=$ccas" >> $config_host_mak 6928echo "CPP=$cpp" >> $config_host_mak 6929echo "OBJCOPY=$objcopy" >> $config_host_mak 6930echo "LD=$ld" >> $config_host_mak 6931echo "RANLIB=$ranlib" >> $config_host_mak 6932echo "NM=$nm" >> $config_host_mak 6933echo "WINDRES=$windres" >> $config_host_mak 6934echo "CFLAGS=$CFLAGS" >> $config_host_mak 6935echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 6936echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 6937echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 6938echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 6939if test "$sparse" = "yes" ; then 6940 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 6941 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 6942 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 6943 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 6944 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 6945fi 6946if test "$cross_prefix" != ""; then 6947 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 6948else 6949 echo "AUTOCONF_HOST := " >> $config_host_mak 6950fi 6951echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 6952echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 6953echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 6954echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 6955echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 6956echo "LIBS+=$LIBS" >> $config_host_mak 6957echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 6958echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 6959echo "EXESUF=$EXESUF" >> $config_host_mak 6960echo "DSOSUF=$DSOSUF" >> $config_host_mak 6961echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 6962echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 6963echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 6964echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 6965echo "POD2MAN=$POD2MAN" >> $config_host_mak 6966echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak 6967if test "$gcov" = "yes" ; then 6968 echo "CONFIG_GCOV=y" >> $config_host_mak 6969 echo "GCOV=$gcov_tool" >> $config_host_mak 6970fi 6971 6972if test "$docker" != "no"; then 6973 echo "HAVE_USER_DOCKER=y" >> $config_host_mak 6974fi 6975 6976if test "$libudev" != "no"; then 6977 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 6978 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 6979fi 6980 6981# use included Linux headers 6982if test "$linux" = "yes" ; then 6983 mkdir -p linux-headers 6984 case "$cpu" in 6985 i386|x86_64|x32) 6986 linux_arch=x86 6987 ;; 6988 ppc|ppc64) 6989 linux_arch=powerpc 6990 ;; 6991 s390x) 6992 linux_arch=s390 6993 ;; 6994 aarch64) 6995 linux_arch=arm64 6996 ;; 6997 mips64) 6998 linux_arch=mips 6999 ;; 7000 *) 7001 # For most CPUs the kernel architecture name and QEMU CPU name match. 7002 linux_arch="$cpu" 7003 ;; 7004 esac 7005 # For non-KVM architectures we will not have asm headers 7006 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 7007 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 7008 fi 7009fi 7010 7011for target in $target_list; do 7012target_dir="$target" 7013config_target_mak=$target_dir/config-target.mak 7014target_name=$(echo $target | cut -d '-' -f 1) 7015target_bigendian="no" 7016 7017case "$target_name" in 7018 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 7019 target_bigendian=yes 7020 ;; 7021esac 7022target_softmmu="no" 7023target_user_only="no" 7024target_linux_user="no" 7025target_bsd_user="no" 7026case "$target" in 7027 ${target_name}-softmmu) 7028 target_softmmu="yes" 7029 ;; 7030 ${target_name}-linux-user) 7031 target_user_only="yes" 7032 target_linux_user="yes" 7033 ;; 7034 ${target_name}-bsd-user) 7035 target_user_only="yes" 7036 target_bsd_user="yes" 7037 ;; 7038 *) 7039 error_exit "Target '$target' not recognised" 7040 exit 1 7041 ;; 7042esac 7043 7044target_compiler="" 7045target_compiler_static="" 7046target_compiler_cflags="" 7047 7048mkdir -p $target_dir 7049echo "# Automatically generated by configure - do not modify" > $config_target_mak 7050 7051bflt="no" 7052mttcg="no" 7053interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7054gdb_xml_files="" 7055 7056TARGET_ARCH="$target_name" 7057TARGET_BASE_ARCH="" 7058TARGET_ABI_DIR="" 7059 7060case "$target_name" in 7061 i386) 7062 mttcg="yes" 7063 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml" 7064 target_compiler=$cross_cc_i386 7065 target_compiler_cflags=$cross_cc_ccflags_i386 7066 ;; 7067 x86_64) 7068 TARGET_BASE_ARCH=i386 7069 mttcg="yes" 7070 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml" 7071 target_compiler=$cross_cc_x86_64 7072 ;; 7073 alpha) 7074 mttcg="yes" 7075 target_compiler=$cross_cc_alpha 7076 ;; 7077 arm|armeb) 7078 TARGET_ARCH=arm 7079 bflt="yes" 7080 mttcg="yes" 7081 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7082 target_compiler=$cross_cc_arm 7083 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7084 ;; 7085 aarch64|aarch64_be) 7086 TARGET_ARCH=aarch64 7087 TARGET_BASE_ARCH=arm 7088 bflt="yes" 7089 mttcg="yes" 7090 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7091 target_compiler=$cross_cc_aarch64 7092 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7093 ;; 7094 cris) 7095 target_compiler=$cross_cc_cris 7096 ;; 7097 hppa) 7098 mttcg="yes" 7099 target_compiler=$cross_cc_hppa 7100 ;; 7101 lm32) 7102 target_compiler=$cross_cc_lm32 7103 ;; 7104 m68k) 7105 bflt="yes" 7106 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" 7107 target_compiler=$cross_cc_m68k 7108 ;; 7109 microblaze|microblazeel) 7110 TARGET_ARCH=microblaze 7111 bflt="yes" 7112 echo "TARGET_ABI32=y" >> $config_target_mak 7113 target_compiler=$cross_cc_microblaze 7114 ;; 7115 mips|mipsel) 7116 TARGET_ARCH=mips 7117 target_compiler=$cross_cc_mips 7118 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7119 ;; 7120 mipsn32|mipsn32el) 7121 TARGET_ARCH=mips64 7122 TARGET_BASE_ARCH=mips 7123 target_compiler=$cross_cc_mipsn32 7124 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7125 echo "TARGET_ABI32=y" >> $config_target_mak 7126 ;; 7127 mips64|mips64el) 7128 TARGET_ARCH=mips64 7129 TARGET_BASE_ARCH=mips 7130 target_compiler=$cross_cc_mips64 7131 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7132 ;; 7133 moxie) 7134 target_compiler=$cross_cc_moxie 7135 ;; 7136 nios2) 7137 target_compiler=$cross_cc_nios2 7138 ;; 7139 or1k) 7140 target_compiler=$cross_cc_or1k 7141 TARGET_ARCH=openrisc 7142 TARGET_BASE_ARCH=openrisc 7143 ;; 7144 ppc) 7145 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7146 target_compiler=$cross_cc_powerpc 7147 ;; 7148 ppc64) 7149 TARGET_BASE_ARCH=ppc 7150 TARGET_ABI_DIR=ppc 7151 mttcg=yes 7152 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7153 target_compiler=$cross_cc_ppc64 7154 ;; 7155 ppc64le) 7156 TARGET_ARCH=ppc64 7157 TARGET_BASE_ARCH=ppc 7158 TARGET_ABI_DIR=ppc 7159 mttcg=yes 7160 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7161 target_compiler=$cross_cc_ppc64le 7162 ;; 7163 ppc64abi32) 7164 TARGET_ARCH=ppc64 7165 TARGET_BASE_ARCH=ppc 7166 TARGET_ABI_DIR=ppc 7167 echo "TARGET_ABI32=y" >> $config_target_mak 7168 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7169 target_compiler=$cross_cc_ppc64abi32 7170 ;; 7171 riscv32) 7172 TARGET_BASE_ARCH=riscv 7173 TARGET_ABI_DIR=riscv 7174 mttcg=yes 7175 target_compiler=$cross_cc_riscv32 7176 ;; 7177 riscv64) 7178 TARGET_BASE_ARCH=riscv 7179 TARGET_ABI_DIR=riscv 7180 mttcg=yes 7181 target_compiler=$cross_cc_riscv64 7182 ;; 7183 sh4|sh4eb) 7184 TARGET_ARCH=sh4 7185 bflt="yes" 7186 target_compiler=$cross_cc_sh4 7187 ;; 7188 sparc) 7189 target_compiler=$cross_cc_sparc 7190 ;; 7191 sparc64) 7192 TARGET_BASE_ARCH=sparc 7193 target_compiler=$cross_cc_sparc64 7194 ;; 7195 sparc32plus) 7196 TARGET_ARCH=sparc64 7197 TARGET_BASE_ARCH=sparc 7198 TARGET_ABI_DIR=sparc 7199 target_compiler=$cross_cc_sparc32plus 7200 echo "TARGET_ABI32=y" >> $config_target_mak 7201 ;; 7202 s390x) 7203 mttcg=yes 7204 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7205 target_compiler=$cross_cc_s390x 7206 ;; 7207 tilegx) 7208 target_compiler=$cross_cc_tilegx 7209 ;; 7210 tricore) 7211 target_compiler=$cross_cc_tricore 7212 ;; 7213 unicore32) 7214 target_compiler=$cross_cc_unicore32 7215 ;; 7216 xtensa|xtensaeb) 7217 TARGET_ARCH=xtensa 7218 bflt="yes" 7219 mttcg="yes" 7220 target_compiler=$cross_cc_xtensa 7221 ;; 7222 *) 7223 error_exit "Unsupported target CPU" 7224 ;; 7225esac 7226# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7227if [ "$TARGET_BASE_ARCH" = "" ]; then 7228 TARGET_BASE_ARCH=$TARGET_ARCH 7229fi 7230 7231# Do we have a cross compiler for this target? 7232if has $target_compiler; then 7233 7234 write_c_skeleton 7235 7236 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then 7237 # For host systems we might get away with building without -static 7238 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then 7239 target_compiler="" 7240 else 7241 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7242 target_compiler_static="n" 7243 fi 7244 else 7245 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7246 target_compiler_static="y" 7247 fi 7248else 7249 target_compiler="" 7250fi 7251 7252symlink "$source_path/Makefile.target" "$target_dir/Makefile" 7253 7254upper() { 7255 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7256} 7257 7258target_arch_name="$(upper $TARGET_ARCH)" 7259echo "TARGET_$target_arch_name=y" >> $config_target_mak 7260echo "TARGET_NAME=$target_name" >> $config_target_mak 7261echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 7262if [ "$TARGET_ABI_DIR" = "" ]; then 7263 TARGET_ABI_DIR=$TARGET_ARCH 7264fi 7265echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 7266if [ "$HOST_VARIANT_DIR" != "" ]; then 7267 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 7268fi 7269 7270if supported_xen_target $target; then 7271 echo "CONFIG_XEN=y" >> $config_target_mak 7272 if test "$xen_pci_passthrough" = yes; then 7273 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 7274 fi 7275fi 7276if supported_kvm_target $target; then 7277 echo "CONFIG_KVM=y" >> $config_target_mak 7278 if test "$vhost_net" = "yes" ; then 7279 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 7280 if test "$vhost_user" = "yes" ; then 7281 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak 7282 fi 7283 fi 7284fi 7285if supported_hax_target $target; then 7286 echo "CONFIG_HAX=y" >> $config_target_mak 7287fi 7288if supported_hvf_target $target; then 7289 echo "CONFIG_HVF=y" >> $config_target_mak 7290fi 7291if supported_whpx_target $target; then 7292 echo "CONFIG_WHPX=y" >> $config_target_mak 7293fi 7294if test "$target_bigendian" = "yes" ; then 7295 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 7296fi 7297if test "$target_softmmu" = "yes" ; then 7298 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 7299 if test "$mttcg" = "yes" ; then 7300 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 7301 fi 7302fi 7303if test "$target_user_only" = "yes" ; then 7304 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 7305 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 7306fi 7307if test "$target_linux_user" = "yes" ; then 7308 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 7309fi 7310list="" 7311if test ! -z "$gdb_xml_files" ; then 7312 for x in $gdb_xml_files; do 7313 list="$list $source_path/gdb-xml/$x" 7314 done 7315 echo "TARGET_XML_FILES=$list" >> $config_target_mak 7316fi 7317 7318if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 7319 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 7320fi 7321if test "$target_bsd_user" = "yes" ; then 7322 echo "CONFIG_BSD_USER=y" >> $config_target_mak 7323fi 7324 7325if test -n "$target_compiler"; then 7326 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak 7327 7328 if test -n "$target_compiler_static"; then 7329 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak 7330 fi 7331 7332 if test -n "$target_compiler_cflags"; then 7333 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak 7334 fi 7335fi 7336 7337 7338# generate QEMU_CFLAGS/LDFLAGS for targets 7339 7340cflags="" 7341ldflags="" 7342 7343disas_config() { 7344 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 7345 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 7346} 7347 7348for i in $ARCH $TARGET_BASE_ARCH ; do 7349 case "$i" in 7350 alpha) 7351 disas_config "ALPHA" 7352 ;; 7353 aarch64) 7354 if test -n "${cxx}"; then 7355 disas_config "ARM_A64" 7356 fi 7357 ;; 7358 arm) 7359 disas_config "ARM" 7360 if test -n "${cxx}"; then 7361 disas_config "ARM_A64" 7362 fi 7363 ;; 7364 cris) 7365 disas_config "CRIS" 7366 ;; 7367 hppa) 7368 disas_config "HPPA" 7369 ;; 7370 i386|x86_64|x32) 7371 disas_config "I386" 7372 ;; 7373 lm32) 7374 disas_config "LM32" 7375 ;; 7376 m68k) 7377 disas_config "M68K" 7378 ;; 7379 microblaze*) 7380 disas_config "MICROBLAZE" 7381 ;; 7382 mips*) 7383 disas_config "MIPS" 7384 if test -n "${cxx}"; then 7385 disas_config "NANOMIPS" 7386 fi 7387 ;; 7388 moxie*) 7389 disas_config "MOXIE" 7390 ;; 7391 nios2) 7392 disas_config "NIOS2" 7393 ;; 7394 or1k) 7395 disas_config "OPENRISC" 7396 ;; 7397 ppc*) 7398 disas_config "PPC" 7399 ;; 7400 riscv) 7401 disas_config "RISCV" 7402 ;; 7403 s390*) 7404 disas_config "S390" 7405 ;; 7406 sh4) 7407 disas_config "SH4" 7408 ;; 7409 sparc*) 7410 disas_config "SPARC" 7411 ;; 7412 xtensa*) 7413 disas_config "XTENSA" 7414 ;; 7415 esac 7416done 7417if test "$tcg_interpreter" = "yes" ; then 7418 disas_config "TCI" 7419fi 7420 7421case "$ARCH" in 7422alpha) 7423 # Ensure there's only a single GP 7424 cflags="-msmall-data $cflags" 7425;; 7426esac 7427 7428if test "$gprof" = "yes" ; then 7429 echo "TARGET_GPROF=yes" >> $config_target_mak 7430 if test "$target_linux_user" = "yes" ; then 7431 cflags="-p $cflags" 7432 ldflags="-p $ldflags" 7433 fi 7434 if test "$target_softmmu" = "yes" ; then 7435 ldflags="-p $ldflags" 7436 echo "GPROF_CFLAGS=-p" >> $config_target_mak 7437 fi 7438fi 7439 7440if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 7441 ldflags="$ldflags $textseg_ldflags" 7442fi 7443 7444# Newer kernels on s390 check for an S390_PGSTE program header and 7445# enable the pgste page table extensions in that case. This makes 7446# the vm.allocate_pgste sysctl unnecessary. We enable this program 7447# header if 7448# - we build on s390x 7449# - we build the system emulation for s390x (qemu-system-s390x) 7450# - KVM is enabled 7451# - the linker supports --s390-pgste 7452if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then 7453 if ld_has --s390-pgste ; then 7454 ldflags="-Wl,--s390-pgste $ldflags" 7455 fi 7456fi 7457 7458echo "LDFLAGS+=$ldflags" >> $config_target_mak 7459echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 7460 7461done # for target in $targets 7462 7463if test -n "$enabled_cross_compilers"; then 7464 echo 7465 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers" 7466fi 7467 7468if [ "$fdt" = "git" ]; then 7469 echo "config-host.h: subdir-dtc" >> $config_host_mak 7470fi 7471if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 7472 echo "config-host.h: subdir-capstone" >> $config_host_mak 7473fi 7474if test -n "$LIBCAPSTONE"; then 7475 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 7476fi 7477 7478if test "$numa" = "yes"; then 7479 echo "CONFIG_NUMA=y" >> $config_host_mak 7480fi 7481 7482if test "$ccache_cpp2" = "yes"; then 7483 echo "export CCACHE_CPP2=y" >> $config_host_mak 7484fi 7485 7486# If we're using a separate build tree, set it up now. 7487# DIRS are directories which we simply mkdir in the build tree; 7488# LINKS are things to symlink back into the source tree 7489# (these can be both files and directories). 7490# Caution: do not add files or directories here using wildcards. This 7491# will result in problems later if a new file matching the wildcard is 7492# added to the source tree -- nothing will cause configure to be rerun 7493# so the build tree will be missing the link back to the new file, and 7494# tests might fail. Prefer to keep the relevant files in their own 7495# directory and symlink the directory instead. 7496DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm" 7497DIRS="$DIRS tests/fp" 7498DIRS="$DIRS docs docs/interop fsdev scsi" 7499DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 7500DIRS="$DIRS roms/seabios roms/vgabios" 7501LINKS="Makefile tests/tcg/Makefile qdict-test-data.txt" 7502LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 7503LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 7504LINKS="$LINKS tests/fp/Makefile" 7505LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps" 7506LINKS="$LINKS pc-bios/spapr-rtas/Makefile" 7507LINKS="$LINKS pc-bios/s390-ccw/Makefile" 7508LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile" 7509LINKS="$LINKS pc-bios/qemu-icon.bmp" 7510LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 7511LINKS="$LINKS tests/acceptance tests/data" 7512LINKS="$LINKS tests/qemu-iotests/check" 7513for bios_file in \ 7514 $source_path/pc-bios/*.bin \ 7515 $source_path/pc-bios/*.lid \ 7516 $source_path/pc-bios/*.aml \ 7517 $source_path/pc-bios/*.rom \ 7518 $source_path/pc-bios/*.dtb \ 7519 $source_path/pc-bios/*.img \ 7520 $source_path/pc-bios/openbios-* \ 7521 $source_path/pc-bios/u-boot.* \ 7522 $source_path/pc-bios/palcode-* 7523do 7524 LINKS="$LINKS pc-bios/$(basename $bios_file)" 7525done 7526mkdir -p $DIRS 7527for f in $LINKS ; do 7528 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 7529 symlink "$source_path/$f" "$f" 7530 fi 7531done 7532 7533# temporary config to build submodules 7534for rom in seabios vgabios ; do 7535 config_mak=roms/$rom/config.mak 7536 echo "# Automatically generated by configure - do not modify" > $config_mak 7537 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 7538 echo "AS=$as" >> $config_mak 7539 echo "CCAS=$ccas" >> $config_mak 7540 echo "CC=$cc" >> $config_mak 7541 echo "BCC=bcc" >> $config_mak 7542 echo "CPP=$cpp" >> $config_mak 7543 echo "OBJCOPY=objcopy" >> $config_mak 7544 echo "IASL=$iasl" >> $config_mak 7545 echo "LD=$ld" >> $config_mak 7546 echo "RANLIB=$ranlib" >> $config_mak 7547done 7548 7549# set up qemu-iotests in this build directory 7550iotests_common_env="tests/qemu-iotests/common.env" 7551 7552echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 7553echo >> "$iotests_common_env" 7554echo "export PYTHON='$python'" >> "$iotests_common_env" 7555 7556# Save the configure command line for later reuse. 7557cat <<EOD >config.status 7558#!/bin/sh 7559# Generated by configure. 7560# Run this file to recreate the current configuration. 7561# Compiler output produced by configure, useful for debugging 7562# configure, is in config.log if it exists. 7563EOD 7564 7565preserve_env() { 7566 envname=$1 7567 7568 eval envval=\$$envname 7569 7570 if test -n "$envval" 7571 then 7572 echo "$envname='$envval'" >> config.status 7573 echo "export $envname" >> config.status 7574 else 7575 echo "unset $envname" >> config.status 7576 fi 7577} 7578 7579# Preserve various env variables that influence what 7580# features/build target configure will detect 7581preserve_env AR 7582preserve_env AS 7583preserve_env CC 7584preserve_env CPP 7585preserve_env CXX 7586preserve_env INSTALL 7587preserve_env LD 7588preserve_env LD_LIBRARY_PATH 7589preserve_env LIBTOOL 7590preserve_env MAKE 7591preserve_env NM 7592preserve_env OBJCOPY 7593preserve_env PATH 7594preserve_env PKG_CONFIG 7595preserve_env PKG_CONFIG_LIBDIR 7596preserve_env PKG_CONFIG_PATH 7597preserve_env PYTHON 7598preserve_env SDL_CONFIG 7599preserve_env SDL2_CONFIG 7600preserve_env SMBD 7601preserve_env STRIP 7602preserve_env WINDRES 7603 7604printf "exec" >>config.status 7605printf " '%s'" "$0" "$@" >>config.status 7606echo ' "$@"' >>config.status 7607chmod +x config.status 7608 7609rm -r "$TMPDIR1" 7610