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 1843# Check whether the compiler matches our minimum requirements: 1844cat > $TMPC << EOF 1845#if defined(__clang_major__) && defined(__clang_minor__) 1846# ifdef __apple_build_version__ 1847# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1) 1848# error You need at least XCode Clang v5.1 to compile QEMU 1849# endif 1850# else 1851# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4) 1852# error You need at least Clang v3.4 to compile QEMU 1853# endif 1854# endif 1855#elif defined(__GNUC__) && defined(__GNUC_MINOR__) 1856# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) 1857# error You need at least GCC v4.8 to compile QEMU 1858# endif 1859#else 1860# error You either need GCC or Clang to compiler QEMU 1861#endif 1862int main (void) { return 0; } 1863EOF 1864if ! compile_prog "" "" ; then 1865 error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)" 1866fi 1867 1868gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits" 1869gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags" 1870gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags" 1871gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags" 1872gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags" 1873gcc_flags="-Wno-string-plus-int $gcc_flags" 1874gcc_flags="-Wno-error=address-of-packed-member $gcc_flags" 1875# Note that we do not add -Werror to gcc_flags here, because that would 1876# enable it for all configure tests. If a configure test failed due 1877# to -Werror this would just silently disable some features, 1878# so it's too error prone. 1879 1880cc_has_warning_flag() { 1881 write_c_skeleton; 1882 1883 # Use the positive sense of the flag when testing for -Wno-wombat 1884 # support (gcc will happily accept the -Wno- form of unknown 1885 # warning options). 1886 optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" 1887 compile_prog "-Werror $optflag" "" 1888} 1889 1890for flag in $gcc_flags; do 1891 if cc_has_warning_flag $flag ; then 1892 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1893 fi 1894done 1895 1896if test "$stack_protector" != "no"; then 1897 cat > $TMPC << EOF 1898int main(int argc, char *argv[]) 1899{ 1900 char arr[64], *p = arr, *c = argv[0]; 1901 while (*c) { 1902 *p++ = *c++; 1903 } 1904 return 0; 1905} 1906EOF 1907 gcc_flags="-fstack-protector-strong -fstack-protector-all" 1908 sp_on=0 1909 for flag in $gcc_flags; do 1910 # We need to check both a compile and a link, since some compiler 1911 # setups fail only on a .c->.o compile and some only at link time 1912 if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC && 1913 compile_prog "-Werror $flag" ""; then 1914 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 1915 sp_on=1 1916 break 1917 fi 1918 done 1919 if test "$stack_protector" = yes; then 1920 if test $sp_on = 0; then 1921 error_exit "Stack protector not supported" 1922 fi 1923 fi 1924fi 1925 1926# Disable -Wmissing-braces on older compilers that warn even for 1927# the "universal" C zero initializer {0}. 1928cat > $TMPC << EOF 1929struct { 1930 int a[2]; 1931} x = {0}; 1932EOF 1933if compile_object "-Werror" "" ; then 1934 : 1935else 1936 QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" 1937fi 1938 1939# Static linking is not possible with modules or PIE 1940if test "$static" = "yes" ; then 1941 if test "$modules" = "yes" ; then 1942 error_exit "static and modules are mutually incompatible" 1943 fi 1944 if test "$pie" = "yes" ; then 1945 error_exit "static and pie are mutually incompatible" 1946 else 1947 pie="no" 1948 fi 1949fi 1950 1951# Unconditional check for compiler __thread support 1952 cat > $TMPC << EOF 1953static __thread int tls_var; 1954int main(void) { return tls_var; } 1955EOF 1956 1957if ! compile_prog "-Werror" "" ; then 1958 error_exit "Your compiler does not support the __thread specifier for " \ 1959 "Thread-Local Storage (TLS). Please upgrade to a version that does." 1960fi 1961 1962if test "$pie" = ""; then 1963 case "$cpu-$targetos" in 1964 i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD) 1965 ;; 1966 *) 1967 pie="no" 1968 ;; 1969 esac 1970fi 1971 1972if test "$pie" != "no" ; then 1973 cat > $TMPC << EOF 1974 1975#ifdef __linux__ 1976# define THREAD __thread 1977#else 1978# define THREAD 1979#endif 1980 1981static THREAD int tls_var; 1982 1983int main(void) { return tls_var; } 1984 1985EOF 1986 if compile_prog "-fPIE -DPIE" "-pie"; then 1987 QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS" 1988 LDFLAGS="-pie $LDFLAGS" 1989 pie="yes" 1990 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then 1991 LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS" 1992 fi 1993 else 1994 if test "$pie" = "yes"; then 1995 error_exit "PIE not available due to missing toolchain support" 1996 else 1997 echo "Disabling PIE due to missing toolchain support" 1998 pie="no" 1999 fi 2000 fi 2001 2002 if compile_prog "-Werror -fno-pie" "-nopie"; then 2003 CFLAGS_NOPIE="-fno-pie" 2004 LDFLAGS_NOPIE="-nopie" 2005 fi 2006fi 2007 2008########################################## 2009# __sync_fetch_and_and requires at least -march=i486. Many toolchains 2010# use i686 as default anyway, but for those that don't, an explicit 2011# specification is necessary 2012 2013if test "$cpu" = "i386"; then 2014 cat > $TMPC << EOF 2015static int sfaa(int *ptr) 2016{ 2017 return __sync_fetch_and_and(ptr, 0); 2018} 2019 2020int main(void) 2021{ 2022 int val = 42; 2023 val = __sync_val_compare_and_swap(&val, 0, 1); 2024 sfaa(&val); 2025 return val; 2026} 2027EOF 2028 if ! compile_prog "" "" ; then 2029 QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" 2030 fi 2031fi 2032 2033######################################### 2034# Solaris specific configure tool chain decisions 2035 2036if test "$solaris" = "yes" ; then 2037 if has $install; then 2038 : 2039 else 2040 error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \ 2041 "install fileutils from www.blastwave.org using pkg-get -i fileutils" \ 2042 "to get ginstall which is used by default (which lives in /opt/csw/bin)" 2043 fi 2044 if test "$(path_of $install)" = "/usr/sbin/install" ; then 2045 error_exit "Solaris /usr/sbin/install is not an appropriate install program." \ 2046 "try ginstall from the GNU fileutils available from www.blastwave.org" \ 2047 "using pkg-get -i fileutils, or use --install=/usr/ucb/install" 2048 fi 2049 if has ar; then 2050 : 2051 else 2052 if test -f /usr/ccs/bin/ar ; then 2053 error_exit "No path includes ar" \ 2054 "Add /usr/ccs/bin to your path and rerun configure" 2055 fi 2056 error_exit "No path includes ar" 2057 fi 2058fi 2059 2060if test -z "${target_list+xxx}" ; then 2061 for target in $default_target_list; do 2062 supported_target $target 2>/dev/null && \ 2063 target_list="$target_list $target" 2064 done 2065 target_list="${target_list# }" 2066else 2067 target_list=$(echo "$target_list" | sed -e 's/,/ /g') 2068 for target in $target_list; do 2069 # Check that we recognised the target name; this allows a more 2070 # friendly error message than if we let it fall through. 2071 case " $default_target_list " in 2072 *" $target "*) 2073 ;; 2074 *) 2075 error_exit "Unknown target name '$target'" 2076 ;; 2077 esac 2078 supported_target $target || exit 1 2079 done 2080fi 2081 2082# see if system emulation was really requested 2083case " $target_list " in 2084 *"-softmmu "*) softmmu=yes 2085 ;; 2086 *) softmmu=no 2087 ;; 2088esac 2089 2090feature_not_found() { 2091 feature=$1 2092 remedy=$2 2093 2094 error_exit "User requested feature $feature" \ 2095 "configure was not able to find it." \ 2096 "$remedy" 2097} 2098 2099# --- 2100# big/little endian test 2101cat > $TMPC << EOF 2102short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; 2103short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; 2104extern int foo(short *, short *); 2105int main(int argc, char *argv[]) { 2106 return foo(big_endian, little_endian); 2107} 2108EOF 2109 2110if compile_object ; then 2111 if strings -a $TMPO | grep -q BiGeNdIaN ; then 2112 bigendian="yes" 2113 elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then 2114 bigendian="no" 2115 else 2116 echo big/little test failed 2117 fi 2118else 2119 echo big/little test failed 2120fi 2121 2122########################################## 2123# cocoa implies not SDL or GTK 2124# (the cocoa UI code currently assumes it is always the active UI 2125# and doesn't interact well with other UI frontend code) 2126if test "$cocoa" = "yes"; then 2127 if test "$sdl" = "yes"; then 2128 error_exit "Cocoa and SDL UIs cannot both be enabled at once" 2129 fi 2130 if test "$gtk" = "yes"; then 2131 error_exit "Cocoa and GTK UIs cannot both be enabled at once" 2132 fi 2133 gtk=no 2134 sdl=no 2135fi 2136 2137# Some versions of Mac OS X incorrectly define SIZE_MAX 2138cat > $TMPC << EOF 2139#include <stdint.h> 2140#include <stdio.h> 2141int main(int argc, char *argv[]) { 2142 return printf("%zu", SIZE_MAX); 2143} 2144EOF 2145have_broken_size_max=no 2146if ! compile_object -Werror ; then 2147 have_broken_size_max=yes 2148fi 2149 2150########################################## 2151# L2TPV3 probe 2152 2153cat > $TMPC <<EOF 2154#include <sys/socket.h> 2155#include <linux/ip.h> 2156int main(void) { return sizeof(struct mmsghdr); } 2157EOF 2158if compile_prog "" "" ; then 2159 l2tpv3=yes 2160else 2161 l2tpv3=no 2162fi 2163 2164########################################## 2165# MinGW / Mingw-w64 localtime_r/gmtime_r check 2166 2167if test "$mingw32" = "yes"; then 2168 # Some versions of MinGW / Mingw-w64 lack localtime_r 2169 # and gmtime_r entirely. 2170 # 2171 # Some versions of Mingw-w64 define a macro for 2172 # localtime_r/gmtime_r. 2173 # 2174 # Some versions of Mingw-w64 will define functions 2175 # for localtime_r/gmtime_r, but only if you have 2176 # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun 2177 # though, unistd.h and pthread.h both define 2178 # that for you. 2179 # 2180 # So this #undef localtime_r and #include <unistd.h> 2181 # are not in fact redundant. 2182cat > $TMPC << EOF 2183#include <unistd.h> 2184#include <time.h> 2185#undef localtime_r 2186int main(void) { localtime_r(NULL, NULL); return 0; } 2187EOF 2188 if compile_prog "" "" ; then 2189 localtime_r="yes" 2190 else 2191 localtime_r="no" 2192 fi 2193fi 2194 2195########################################## 2196# pkg-config probe 2197 2198if ! has "$pkg_config_exe"; then 2199 error_exit "pkg-config binary '$pkg_config_exe' not found" 2200fi 2201 2202########################################## 2203# NPTL probe 2204 2205if test "$linux_user" = "yes"; then 2206 cat > $TMPC <<EOF 2207#include <sched.h> 2208#include <linux/futex.h> 2209int main(void) { 2210#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) 2211#error bork 2212#endif 2213 return 0; 2214} 2215EOF 2216 if ! compile_object ; then 2217 feature_not_found "nptl" "Install glibc and linux kernel headers." 2218 fi 2219fi 2220 2221########################################## 2222# lzo check 2223 2224if test "$lzo" != "no" ; then 2225 cat > $TMPC << EOF 2226#include <lzo/lzo1x.h> 2227int main(void) { lzo_version(); return 0; } 2228EOF 2229 if compile_prog "" "-llzo2" ; then 2230 libs_softmmu="$libs_softmmu -llzo2" 2231 lzo="yes" 2232 else 2233 if test "$lzo" = "yes"; then 2234 feature_not_found "liblzo2" "Install liblzo2 devel" 2235 fi 2236 lzo="no" 2237 fi 2238fi 2239 2240########################################## 2241# snappy check 2242 2243if test "$snappy" != "no" ; then 2244 cat > $TMPC << EOF 2245#include <snappy-c.h> 2246int main(void) { snappy_max_compressed_length(4096); return 0; } 2247EOF 2248 if compile_prog "" "-lsnappy" ; then 2249 libs_softmmu="$libs_softmmu -lsnappy" 2250 snappy="yes" 2251 else 2252 if test "$snappy" = "yes"; then 2253 feature_not_found "libsnappy" "Install libsnappy devel" 2254 fi 2255 snappy="no" 2256 fi 2257fi 2258 2259########################################## 2260# bzip2 check 2261 2262if test "$bzip2" != "no" ; then 2263 cat > $TMPC << EOF 2264#include <bzlib.h> 2265int main(void) { BZ2_bzlibVersion(); return 0; } 2266EOF 2267 if compile_prog "" "-lbz2" ; then 2268 bzip2="yes" 2269 else 2270 if test "$bzip2" = "yes"; then 2271 feature_not_found "libbzip2" "Install libbzip2 devel" 2272 fi 2273 bzip2="no" 2274 fi 2275fi 2276 2277########################################## 2278# libseccomp check 2279 2280libseccomp_minver="2.2.0" 2281if test "$seccomp" != "no" ; then 2282 case "$cpu" in 2283 i386|x86_64|mips) 2284 ;; 2285 arm|aarch64) 2286 libseccomp_minver="2.2.3" 2287 ;; 2288 ppc|ppc64|s390x) 2289 libseccomp_minver="2.3.0" 2290 ;; 2291 *) 2292 libseccomp_minver="" 2293 ;; 2294 esac 2295 2296 if test "$libseccomp_minver" != "" && 2297 $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then 2298 seccomp_cflags="$($pkg_config --cflags libseccomp)" 2299 seccomp_libs="$($pkg_config --libs libseccomp)" 2300 seccomp="yes" 2301 else 2302 if test "$seccomp" = "yes" ; then 2303 if test "$libseccomp_minver" != "" ; then 2304 feature_not_found "libseccomp" \ 2305 "Install libseccomp devel >= $libseccomp_minver" 2306 else 2307 feature_not_found "libseccomp" \ 2308 "libseccomp is not supported for host cpu $cpu" 2309 fi 2310 fi 2311 seccomp="no" 2312 fi 2313fi 2314########################################## 2315# xen probe 2316 2317if test "$xen" != "no" ; then 2318 # Check whether Xen library path is specified via --extra-ldflags to avoid 2319 # overriding this setting with pkg-config output. If not, try pkg-config 2320 # to obtain all needed flags. 2321 2322 if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ 2323 $pkg_config --exists xencontrol ; then 2324 xen_ctrl_version="$(printf '%d%02d%02d' \ 2325 $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" 2326 xen=yes 2327 xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab" 2328 xen_pc="$xen_pc xenevtchn xendevicemodel" 2329 if $pkg_config --exists xentoolcore; then 2330 xen_pc="$xen_pc xentoolcore" 2331 fi 2332 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)" 2333 libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu" 2334 LDFLAGS="$($pkg_config --libs $xen_pc) $LDFLAGS" 2335 else 2336 2337 xen_libs="-lxenstore -lxenctrl -lxenguest" 2338 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2339 2340 # First we test whether Xen headers and libraries are available. 2341 # If no, we are done and there is no Xen support. 2342 # If yes, more tests are run to detect the Xen version. 2343 2344 # Xen (any) 2345 cat > $TMPC <<EOF 2346#include <xenctrl.h> 2347int main(void) { 2348 return 0; 2349} 2350EOF 2351 if ! compile_prog "" "$xen_libs" ; then 2352 # Xen not found 2353 if test "$xen" = "yes" ; then 2354 feature_not_found "xen" "Install xen devel" 2355 fi 2356 xen=no 2357 2358 # Xen unstable 2359 elif 2360 cat > $TMPC <<EOF && 2361#undef XC_WANT_COMPAT_DEVICEMODEL_API 2362#define __XEN_TOOLS__ 2363#include <xendevicemodel.h> 2364#include <xenforeignmemory.h> 2365int main(void) { 2366 xendevicemodel_handle *xd; 2367 xenforeignmemory_handle *xfmem; 2368 2369 xd = xendevicemodel_open(0, 0); 2370 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 2371 2372 xfmem = xenforeignmemory_open(0, 0); 2373 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2374 2375 return 0; 2376} 2377EOF 2378 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2379 then 2380 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2381 xen_ctrl_version=41100 2382 xen=yes 2383 elif 2384 cat > $TMPC <<EOF && 2385#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2386#include <xenforeignmemory.h> 2387#include <xentoolcore.h> 2388int main(void) { 2389 xenforeignmemory_handle *xfmem; 2390 2391 xfmem = xenforeignmemory_open(0, 0); 2392 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 2393 xentoolcore_restrict_all(0); 2394 2395 return 0; 2396} 2397EOF 2398 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2399 then 2400 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2401 xen_ctrl_version=41000 2402 xen=yes 2403 elif 2404 cat > $TMPC <<EOF && 2405#undef XC_WANT_COMPAT_DEVICEMODEL_API 2406#define __XEN_TOOLS__ 2407#include <xendevicemodel.h> 2408int main(void) { 2409 xendevicemodel_handle *xd; 2410 2411 xd = xendevicemodel_open(0, 0); 2412 xendevicemodel_close(xd); 2413 2414 return 0; 2415} 2416EOF 2417 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2418 then 2419 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2420 xen_ctrl_version=40900 2421 xen=yes 2422 elif 2423 cat > $TMPC <<EOF && 2424/* 2425 * If we have stable libs the we don't want the libxc compat 2426 * layers, regardless of what CFLAGS we may have been given. 2427 * 2428 * Also, check if xengnttab_grant_copy_segment_t is defined and 2429 * grant copy operation is implemented. 2430 */ 2431#undef XC_WANT_COMPAT_EVTCHN_API 2432#undef XC_WANT_COMPAT_GNTTAB_API 2433#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2434#include <xenctrl.h> 2435#include <xenstore.h> 2436#include <xenevtchn.h> 2437#include <xengnttab.h> 2438#include <xenforeignmemory.h> 2439#include <stdint.h> 2440#include <xen/hvm/hvm_info_table.h> 2441#if !defined(HVM_MAX_VCPUS) 2442# error HVM_MAX_VCPUS not defined 2443#endif 2444int main(void) { 2445 xc_interface *xc = NULL; 2446 xenforeignmemory_handle *xfmem; 2447 xenevtchn_handle *xe; 2448 xengnttab_handle *xg; 2449 xen_domain_handle_t handle; 2450 xengnttab_grant_copy_segment_t* seg = NULL; 2451 2452 xs_daemon_open(); 2453 2454 xc = xc_interface_open(0, 0, 0); 2455 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2456 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2457 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2458 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2459 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2460 2461 xfmem = xenforeignmemory_open(0, 0); 2462 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2463 2464 xe = xenevtchn_open(0, 0); 2465 xenevtchn_fd(xe); 2466 2467 xg = xengnttab_open(0, 0); 2468 xengnttab_grant_copy(xg, 0, seg); 2469 2470 return 0; 2471} 2472EOF 2473 compile_prog "" "$xen_libs $xen_stable_libs" 2474 then 2475 xen_ctrl_version=40800 2476 xen=yes 2477 elif 2478 cat > $TMPC <<EOF && 2479/* 2480 * If we have stable libs the we don't want the libxc compat 2481 * layers, regardless of what CFLAGS we may have been given. 2482 */ 2483#undef XC_WANT_COMPAT_EVTCHN_API 2484#undef XC_WANT_COMPAT_GNTTAB_API 2485#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2486#include <xenctrl.h> 2487#include <xenstore.h> 2488#include <xenevtchn.h> 2489#include <xengnttab.h> 2490#include <xenforeignmemory.h> 2491#include <stdint.h> 2492#include <xen/hvm/hvm_info_table.h> 2493#if !defined(HVM_MAX_VCPUS) 2494# error HVM_MAX_VCPUS not defined 2495#endif 2496int main(void) { 2497 xc_interface *xc = NULL; 2498 xenforeignmemory_handle *xfmem; 2499 xenevtchn_handle *xe; 2500 xengnttab_handle *xg; 2501 xen_domain_handle_t handle; 2502 2503 xs_daemon_open(); 2504 2505 xc = xc_interface_open(0, 0, 0); 2506 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2507 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2508 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2509 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2510 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2511 2512 xfmem = xenforeignmemory_open(0, 0); 2513 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2514 2515 xe = xenevtchn_open(0, 0); 2516 xenevtchn_fd(xe); 2517 2518 xg = xengnttab_open(0, 0); 2519 xengnttab_map_grant_ref(xg, 0, 0, 0); 2520 2521 return 0; 2522} 2523EOF 2524 compile_prog "" "$xen_libs $xen_stable_libs" 2525 then 2526 xen_ctrl_version=40701 2527 xen=yes 2528 elif 2529 cat > $TMPC <<EOF && 2530#include <xenctrl.h> 2531#include <stdint.h> 2532int main(void) { 2533 xc_interface *xc = NULL; 2534 xen_domain_handle_t handle; 2535 xc_domain_create(xc, 0, handle, 0, NULL, NULL); 2536 return 0; 2537} 2538EOF 2539 compile_prog "" "$xen_libs" 2540 then 2541 xen_ctrl_version=40700 2542 xen=yes 2543 2544 # Xen 4.6 2545 elif 2546 cat > $TMPC <<EOF && 2547#include <xenctrl.h> 2548#include <xenstore.h> 2549#include <stdint.h> 2550#include <xen/hvm/hvm_info_table.h> 2551#if !defined(HVM_MAX_VCPUS) 2552# error HVM_MAX_VCPUS not defined 2553#endif 2554int main(void) { 2555 xc_interface *xc; 2556 xs_daemon_open(); 2557 xc = xc_interface_open(0, 0, 0); 2558 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2559 xc_gnttab_open(NULL, 0); 2560 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2561 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2562 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2563 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2564 return 0; 2565} 2566EOF 2567 compile_prog "" "$xen_libs" 2568 then 2569 xen_ctrl_version=40600 2570 xen=yes 2571 2572 # Xen 4.5 2573 elif 2574 cat > $TMPC <<EOF && 2575#include <xenctrl.h> 2576#include <xenstore.h> 2577#include <stdint.h> 2578#include <xen/hvm/hvm_info_table.h> 2579#if !defined(HVM_MAX_VCPUS) 2580# error HVM_MAX_VCPUS not defined 2581#endif 2582int main(void) { 2583 xc_interface *xc; 2584 xs_daemon_open(); 2585 xc = xc_interface_open(0, 0, 0); 2586 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2587 xc_gnttab_open(NULL, 0); 2588 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2589 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2590 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2591 return 0; 2592} 2593EOF 2594 compile_prog "" "$xen_libs" 2595 then 2596 xen_ctrl_version=40500 2597 xen=yes 2598 2599 elif 2600 cat > $TMPC <<EOF && 2601#include <xenctrl.h> 2602#include <xenstore.h> 2603#include <stdint.h> 2604#include <xen/hvm/hvm_info_table.h> 2605#if !defined(HVM_MAX_VCPUS) 2606# error HVM_MAX_VCPUS not defined 2607#endif 2608int main(void) { 2609 xc_interface *xc; 2610 xs_daemon_open(); 2611 xc = xc_interface_open(0, 0, 0); 2612 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2613 xc_gnttab_open(NULL, 0); 2614 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2615 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2616 return 0; 2617} 2618EOF 2619 compile_prog "" "$xen_libs" 2620 then 2621 xen_ctrl_version=40200 2622 xen=yes 2623 2624 else 2625 if test "$xen" = "yes" ; then 2626 feature_not_found "xen (unsupported version)" \ 2627 "Install a supported xen (xen 4.2 or newer)" 2628 fi 2629 xen=no 2630 fi 2631 2632 if test "$xen" = yes; then 2633 if test $xen_ctrl_version -ge 40701 ; then 2634 libs_softmmu="$xen_stable_libs $libs_softmmu" 2635 fi 2636 libs_softmmu="$xen_libs $libs_softmmu" 2637 fi 2638 fi 2639fi 2640 2641if test "$xen_pci_passthrough" != "no"; then 2642 if test "$xen" = "yes" && test "$linux" = "yes"; then 2643 xen_pci_passthrough=yes 2644 else 2645 if test "$xen_pci_passthrough" = "yes"; then 2646 error_exit "User requested feature Xen PCI Passthrough" \ 2647 " but this feature requires /sys from Linux" 2648 fi 2649 xen_pci_passthrough=no 2650 fi 2651fi 2652 2653if test "$xen_pv_domain_build" = "yes" && 2654 test "$xen" != "yes"; then 2655 error_exit "User requested Xen PV domain builder support" \ 2656 "which requires Xen support." 2657fi 2658 2659########################################## 2660# Windows Hypervisor Platform accelerator (WHPX) check 2661if test "$whpx" != "no" ; then 2662 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then 2663 whpx="yes" 2664 else 2665 if test "$whpx" = "yes"; then 2666 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed" 2667 fi 2668 whpx="no" 2669 fi 2670fi 2671 2672########################################## 2673# Sparse probe 2674if test "$sparse" != "no" ; then 2675 if has cgcc; then 2676 sparse=yes 2677 else 2678 if test "$sparse" = "yes" ; then 2679 feature_not_found "sparse" "Install sparse binary" 2680 fi 2681 sparse=no 2682 fi 2683fi 2684 2685########################################## 2686# X11 probe 2687if $pkg_config --exists "x11"; then 2688 have_x11=yes 2689 x11_cflags=$($pkg_config --cflags x11) 2690 x11_libs=$($pkg_config --libs x11) 2691fi 2692 2693########################################## 2694# GTK probe 2695 2696if test "$gtk" != "no"; then 2697 gtkpackage="gtk+-3.0" 2698 gtkx11package="gtk+-x11-3.0" 2699 gtkversion="3.14.0" 2700 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then 2701 gtk_cflags=$($pkg_config --cflags $gtkpackage) 2702 gtk_libs=$($pkg_config --libs $gtkpackage) 2703 gtk_version=$($pkg_config --modversion $gtkpackage) 2704 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then 2705 need_x11=yes 2706 gtk_cflags="$gtk_cflags $x11_cflags" 2707 gtk_libs="$gtk_libs $x11_libs" 2708 fi 2709 gtk="yes" 2710 elif test "$gtk" = "yes"; then 2711 feature_not_found "gtk" "Install gtk3-devel" 2712 else 2713 gtk="no" 2714 fi 2715fi 2716 2717 2718########################################## 2719# GNUTLS probe 2720 2721if test "$gnutls" != "no"; then 2722 if $pkg_config --exists "gnutls >= 3.1.18"; then 2723 gnutls_cflags=$($pkg_config --cflags gnutls) 2724 gnutls_libs=$($pkg_config --libs gnutls) 2725 libs_softmmu="$gnutls_libs $libs_softmmu" 2726 libs_tools="$gnutls_libs $libs_tools" 2727 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags" 2728 gnutls="yes" 2729 elif test "$gnutls" = "yes"; then 2730 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18" 2731 else 2732 gnutls="no" 2733 fi 2734fi 2735 2736 2737# If user didn't give a --disable/enable-gcrypt flag, 2738# then mark as disabled if user requested nettle 2739# explicitly 2740if test -z "$gcrypt" 2741then 2742 if test "$nettle" = "yes" 2743 then 2744 gcrypt="no" 2745 fi 2746fi 2747 2748# If user didn't give a --disable/enable-nettle flag, 2749# then mark as disabled if user requested gcrypt 2750# explicitly 2751if test -z "$nettle" 2752then 2753 if test "$gcrypt" = "yes" 2754 then 2755 nettle="no" 2756 fi 2757fi 2758 2759has_libgcrypt() { 2760 if ! has "libgcrypt-config" 2761 then 2762 return 1 2763 fi 2764 2765 if test -n "$cross_prefix" 2766 then 2767 host=$(libgcrypt-config --host) 2768 if test "$host-" != $cross_prefix 2769 then 2770 return 1 2771 fi 2772 fi 2773 2774 maj=`libgcrypt-config --version | awk -F . '{print $1}'` 2775 min=`libgcrypt-config --version | awk -F . '{print $2}'` 2776 2777 if test $maj != 1 || test $min -lt 5 2778 then 2779 return 1 2780 fi 2781 2782 return 0 2783} 2784 2785 2786if test "$nettle" != "no"; then 2787 if $pkg_config --exists "nettle >= 2.7.1"; then 2788 nettle_cflags=$($pkg_config --cflags nettle) 2789 nettle_libs=$($pkg_config --libs nettle) 2790 nettle_version=$($pkg_config --modversion nettle) 2791 libs_softmmu="$nettle_libs $libs_softmmu" 2792 libs_tools="$nettle_libs $libs_tools" 2793 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags" 2794 nettle="yes" 2795 2796 if test -z "$gcrypt"; then 2797 gcrypt="no" 2798 fi 2799 else 2800 if test "$nettle" = "yes"; then 2801 feature_not_found "nettle" "Install nettle devel >= 2.7.1" 2802 else 2803 nettle="no" 2804 fi 2805 fi 2806fi 2807 2808if test "$gcrypt" != "no"; then 2809 if has_libgcrypt; then 2810 gcrypt_cflags=$(libgcrypt-config --cflags) 2811 gcrypt_libs=$(libgcrypt-config --libs) 2812 # Debian has remove -lgpg-error from libgcrypt-config 2813 # as it "spreads unnecessary dependencies" which in 2814 # turn breaks static builds... 2815 if test "$static" = "yes" 2816 then 2817 gcrypt_libs="$gcrypt_libs -lgpg-error" 2818 fi 2819 libs_softmmu="$gcrypt_libs $libs_softmmu" 2820 libs_tools="$gcrypt_libs $libs_tools" 2821 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags" 2822 gcrypt="yes" 2823 2824 cat > $TMPC << EOF 2825#include <gcrypt.h> 2826int main(void) { 2827 gcry_mac_hd_t handle; 2828 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, 2829 GCRY_MAC_FLAG_SECURE, NULL); 2830 return 0; 2831} 2832EOF 2833 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 2834 gcrypt_hmac=yes 2835 fi 2836 else 2837 if test "$gcrypt" = "yes"; then 2838 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0" 2839 else 2840 gcrypt="no" 2841 fi 2842 fi 2843fi 2844 2845 2846if test "$gcrypt" = "yes" && test "$nettle" = "yes" 2847then 2848 error_exit "Only one of gcrypt & nettle can be enabled" 2849fi 2850 2851########################################## 2852# libtasn1 - only for the TLS creds/session test suite 2853 2854tasn1=yes 2855tasn1_cflags="" 2856tasn1_libs="" 2857if $pkg_config --exists "libtasn1"; then 2858 tasn1_cflags=$($pkg_config --cflags libtasn1) 2859 tasn1_libs=$($pkg_config --libs libtasn1) 2860else 2861 tasn1=no 2862fi 2863 2864 2865########################################## 2866# getifaddrs (for tests/test-io-channel-socket ) 2867 2868have_ifaddrs_h=yes 2869if ! check_include "ifaddrs.h" ; then 2870 have_ifaddrs_h=no 2871fi 2872 2873########################################## 2874# VTE probe 2875 2876if test "$vte" != "no"; then 2877 vteminversion="0.32.0" 2878 if $pkg_config --exists "vte-2.91"; then 2879 vtepackage="vte-2.91" 2880 else 2881 vtepackage="vte-2.90" 2882 fi 2883 if $pkg_config --exists "$vtepackage >= $vteminversion"; then 2884 vte_cflags=$($pkg_config --cflags $vtepackage) 2885 vte_libs=$($pkg_config --libs $vtepackage) 2886 vteversion=$($pkg_config --modversion $vtepackage) 2887 vte="yes" 2888 elif test "$vte" = "yes"; then 2889 feature_not_found "vte" "Install libvte-2.90/2.91 devel" 2890 else 2891 vte="no" 2892 fi 2893fi 2894 2895########################################## 2896# SDL probe 2897 2898# Look for sdl configuration program (pkg-config or sdl-config). Try 2899# sdl-config even without cross prefix, and favour pkg-config over sdl-config. 2900 2901sdl_probe () 2902{ 2903 sdl_too_old=no 2904 if test "$sdlabi" = ""; then 2905 if $pkg_config --exists "sdl2"; then 2906 sdlabi=2.0 2907 elif $pkg_config --exists "sdl"; then 2908 sdlabi=1.2 2909 else 2910 sdlabi=2.0 2911 fi 2912 fi 2913 2914 if test $sdlabi = "2.0"; then 2915 sdl_config=$sdl2_config 2916 sdlname=sdl2 2917 sdlconfigname=sdl2_config 2918 elif test $sdlabi = "1.2"; then 2919 sdlname=sdl 2920 sdlconfigname=sdl_config 2921 else 2922 error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0" 2923 fi 2924 2925 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then 2926 sdl_config=$sdlconfigname 2927 fi 2928 2929 if $pkg_config $sdlname --exists; then 2930 sdlconfig="$pkg_config $sdlname" 2931 sdlversion=$($sdlconfig --modversion 2>/dev/null) 2932 elif has ${sdl_config}; then 2933 sdlconfig="$sdl_config" 2934 sdlversion=$($sdlconfig --version) 2935 else 2936 if test "$sdl" = "yes" ; then 2937 feature_not_found "sdl" "Install SDL2-devel" 2938 fi 2939 sdl=no 2940 # no need to do the rest 2941 return 2942 fi 2943 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then 2944 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2 2945 fi 2946 2947 cat > $TMPC << EOF 2948#include <SDL.h> 2949#undef main /* We don't want SDL to override our main() */ 2950int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } 2951EOF 2952 sdl_cflags=$($sdlconfig --cflags 2>/dev/null) 2953 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug 2954 if test "$static" = "yes" ; then 2955 if $pkg_config $sdlname --exists; then 2956 sdl_libs=$($pkg_config $sdlname --static --libs 2>/dev/null) 2957 else 2958 sdl_libs=$($sdlconfig --static-libs 2>/dev/null) 2959 fi 2960 else 2961 sdl_libs=$($sdlconfig --libs 2>/dev/null) 2962 fi 2963 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 2964 if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then 2965 sdl_too_old=yes 2966 else 2967 sdl=yes 2968 fi 2969 2970 # static link with sdl ? (note: sdl.pc's --static --libs is broken) 2971 if test "$sdl" = "yes" -a "$static" = "yes" ; then 2972 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then 2973 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)" 2974 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)" 2975 fi 2976 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 2977 : 2978 else 2979 sdl=no 2980 fi 2981 fi # static link 2982 else # sdl not found 2983 if test "$sdl" = "yes" ; then 2984 feature_not_found "sdl" "Install SDL devel" 2985 fi 2986 sdl=no 2987 fi # sdl compile test 2988} 2989 2990if test "$sdl" != "no" ; then 2991 sdl_probe 2992fi 2993 2994if test "$sdl" = "yes" ; then 2995 cat > $TMPC <<EOF 2996#include <SDL.h> 2997#if defined(SDL_VIDEO_DRIVER_X11) 2998#include <X11/XKBlib.h> 2999#else 3000#error No x11 support 3001#endif 3002int main(void) { return 0; } 3003EOF 3004 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then 3005 need_x11=yes 3006 sdl_cflags="$sdl_cflags $x11_cflags" 3007 sdl_libs="$sdl_libs $x11_libs" 3008 fi 3009fi 3010 3011########################################## 3012# RDMA needs OpenFabrics libraries 3013if test "$rdma" != "no" ; then 3014 cat > $TMPC <<EOF 3015#include <rdma/rdma_cma.h> 3016int main(void) { return 0; } 3017EOF 3018 rdma_libs="-lrdmacm -libverbs -libumad" 3019 if compile_prog "" "$rdma_libs" ; then 3020 rdma="yes" 3021 libs_softmmu="$libs_softmmu $rdma_libs" 3022 else 3023 if test "$rdma" = "yes" ; then 3024 error_exit \ 3025 " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 3026 " Your options:" \ 3027 " (1) Fast: Install infiniband packages (devel) from your distro." \ 3028 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 3029 " (3) Also: Install softiwarp if you don't have RDMA hardware" 3030 fi 3031 rdma="no" 3032 fi 3033fi 3034 3035########################################## 3036# PVRDMA detection 3037 3038cat > $TMPC <<EOF && 3039#include <sys/mman.h> 3040 3041int 3042main(void) 3043{ 3044 char buf = 0; 3045 void *addr = &buf; 3046 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 3047 3048 return 0; 3049} 3050EOF 3051 3052if test "$rdma" = "yes" ; then 3053 case "$pvrdma" in 3054 "") 3055 if compile_prog "" ""; then 3056 pvrdma="yes" 3057 else 3058 pvrdma="no" 3059 fi 3060 ;; 3061 "yes") 3062 if ! compile_prog "" ""; then 3063 error_exit "PVRDMA is not supported since mremap is not implemented" 3064 fi 3065 pvrdma="yes" 3066 ;; 3067 "no") 3068 pvrdma="no" 3069 ;; 3070 esac 3071else 3072 if test "$pvrdma" = "yes" ; then 3073 error_exit "PVRDMA requires rdma suppport" 3074 fi 3075 pvrdma="no" 3076fi 3077 3078########################################## 3079# VNC SASL detection 3080if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then 3081 cat > $TMPC <<EOF 3082#include <sasl/sasl.h> 3083#include <stdio.h> 3084int main(void) { sasl_server_init(NULL, "qemu"); return 0; } 3085EOF 3086 # Assuming Cyrus-SASL installed in /usr prefix 3087 vnc_sasl_cflags="" 3088 vnc_sasl_libs="-lsasl2" 3089 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then 3090 vnc_sasl=yes 3091 libs_softmmu="$vnc_sasl_libs $libs_softmmu" 3092 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags" 3093 else 3094 if test "$vnc_sasl" = "yes" ; then 3095 feature_not_found "vnc-sasl" "Install Cyrus SASL devel" 3096 fi 3097 vnc_sasl=no 3098 fi 3099fi 3100 3101########################################## 3102# VNC JPEG detection 3103if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then 3104cat > $TMPC <<EOF 3105#include <stdio.h> 3106#include <jpeglib.h> 3107int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; } 3108EOF 3109 vnc_jpeg_cflags="" 3110 vnc_jpeg_libs="-ljpeg" 3111 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then 3112 vnc_jpeg=yes 3113 libs_softmmu="$vnc_jpeg_libs $libs_softmmu" 3114 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags" 3115 else 3116 if test "$vnc_jpeg" = "yes" ; then 3117 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel" 3118 fi 3119 vnc_jpeg=no 3120 fi 3121fi 3122 3123########################################## 3124# VNC PNG detection 3125if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then 3126cat > $TMPC <<EOF 3127//#include <stdio.h> 3128#include <png.h> 3129#include <stddef.h> 3130int main(void) { 3131 png_structp png_ptr; 3132 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 3133 return png_ptr != 0; 3134} 3135EOF 3136 if $pkg_config libpng --exists; then 3137 vnc_png_cflags=$($pkg_config libpng --cflags) 3138 vnc_png_libs=$($pkg_config libpng --libs) 3139 else 3140 vnc_png_cflags="" 3141 vnc_png_libs="-lpng" 3142 fi 3143 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then 3144 vnc_png=yes 3145 libs_softmmu="$vnc_png_libs $libs_softmmu" 3146 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags" 3147 else 3148 if test "$vnc_png" = "yes" ; then 3149 feature_not_found "vnc-png" "Install libpng devel" 3150 fi 3151 vnc_png=no 3152 fi 3153fi 3154 3155########################################## 3156# xkbcommon probe 3157if test "$xkbcommon" != "no" ; then 3158 if $pkg_config xkbcommon --exists; then 3159 xkbcommon_cflags=$($pkg_config xkbcommon --cflags) 3160 xkbcommon_libs=$($pkg_config xkbcommon --libs) 3161 xkbcommon=yes 3162 else 3163 if test "$xkbcommon" = "yes" ; then 3164 feature_not_found "xkbcommon" "Install libxkbcommon-devel" 3165 fi 3166 xkbcommon=no 3167 fi 3168fi 3169 3170########################################## 3171# fnmatch() probe, used for ACL routines 3172fnmatch="no" 3173cat > $TMPC << EOF 3174#include <fnmatch.h> 3175int main(void) 3176{ 3177 fnmatch("foo", "foo", 0); 3178 return 0; 3179} 3180EOF 3181if compile_prog "" "" ; then 3182 fnmatch="yes" 3183fi 3184 3185########################################## 3186# xfsctl() probe, used for file-posix.c 3187if test "$xfs" != "no" ; then 3188 cat > $TMPC << EOF 3189#include <stddef.h> /* NULL */ 3190#include <xfs/xfs.h> 3191int main(void) 3192{ 3193 xfsctl(NULL, 0, 0, NULL); 3194 return 0; 3195} 3196EOF 3197 if compile_prog "" "" ; then 3198 xfs="yes" 3199 else 3200 if test "$xfs" = "yes" ; then 3201 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel" 3202 fi 3203 xfs=no 3204 fi 3205fi 3206 3207########################################## 3208# vde libraries probe 3209if test "$vde" != "no" ; then 3210 vde_libs="-lvdeplug" 3211 cat > $TMPC << EOF 3212#include <libvdeplug.h> 3213int main(void) 3214{ 3215 struct vde_open_args a = {0, 0, 0}; 3216 char s[] = ""; 3217 vde_open(s, s, &a); 3218 return 0; 3219} 3220EOF 3221 if compile_prog "" "$vde_libs" ; then 3222 vde=yes 3223 else 3224 if test "$vde" = "yes" ; then 3225 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" 3226 fi 3227 vde=no 3228 fi 3229fi 3230 3231########################################## 3232# netmap support probe 3233# Apart from looking for netmap headers, we make sure that the host API version 3234# supports the netmap backend (>=11). The upper bound (15) is meant to simulate 3235# a minor/major version number. Minor new features will be marked with values up 3236# to 15, and if something happens that requires a change to the backend we will 3237# move above 15, submit the backend fixes and modify this two bounds. 3238if test "$netmap" != "no" ; then 3239 cat > $TMPC << EOF 3240#include <inttypes.h> 3241#include <net/if.h> 3242#include <net/netmap.h> 3243#include <net/netmap_user.h> 3244#if (NETMAP_API < 11) || (NETMAP_API > 15) 3245#error 3246#endif 3247int main(void) { return 0; } 3248EOF 3249 if compile_prog "" "" ; then 3250 netmap=yes 3251 else 3252 if test "$netmap" = "yes" ; then 3253 feature_not_found "netmap" 3254 fi 3255 netmap=no 3256 fi 3257fi 3258 3259########################################## 3260# libcap-ng library probe 3261if test "$cap_ng" != "no" ; then 3262 cap_libs="-lcap-ng" 3263 cat > $TMPC << EOF 3264#include <cap-ng.h> 3265int main(void) 3266{ 3267 capng_capability_to_name(CAPNG_EFFECTIVE); 3268 return 0; 3269} 3270EOF 3271 if compile_prog "" "$cap_libs" ; then 3272 cap_ng=yes 3273 libs_tools="$cap_libs $libs_tools" 3274 else 3275 if test "$cap_ng" = "yes" ; then 3276 feature_not_found "cap_ng" "Install libcap-ng devel" 3277 fi 3278 cap_ng=no 3279 fi 3280fi 3281 3282########################################## 3283# Sound support libraries probe 3284 3285audio_drv_probe() 3286{ 3287 drv=$1 3288 hdr=$2 3289 lib=$3 3290 exp=$4 3291 cfl=$5 3292 cat > $TMPC << EOF 3293#include <$hdr> 3294int main(void) { $exp } 3295EOF 3296 if compile_prog "$cfl" "$lib" ; then 3297 : 3298 else 3299 error_exit "$drv check failed" \ 3300 "Make sure to have the $drv libs and headers installed." 3301 fi 3302} 3303 3304audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') 3305for drv in $audio_drv_list; do 3306 case $drv in 3307 alsa) 3308 audio_drv_probe $drv alsa/asoundlib.h -lasound \ 3309 "return snd_pcm_close((snd_pcm_t *)0);" 3310 alsa_libs="-lasound" 3311 ;; 3312 3313 pa) 3314 audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \ 3315 "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;" 3316 pulse_libs="-lpulse" 3317 audio_pt_int="yes" 3318 ;; 3319 3320 sdl) 3321 if test "$sdl" = "no"; then 3322 error_exit "sdl not found or disabled, can not use sdl audio driver" 3323 fi 3324 ;; 3325 3326 coreaudio) 3327 coreaudio_libs="-framework CoreAudio" 3328 ;; 3329 3330 dsound) 3331 dsound_libs="-lole32 -ldxguid" 3332 audio_win_int="yes" 3333 ;; 3334 3335 oss) 3336 oss_libs="$oss_lib" 3337 ;; 3338 3339 wav) 3340 # XXX: Probes for CoreAudio, DirectSound 3341 ;; 3342 3343 *) 3344 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { 3345 error_exit "Unknown driver '$drv' selected" \ 3346 "Possible drivers are: $audio_possible_drivers" 3347 } 3348 ;; 3349 esac 3350done 3351 3352########################################## 3353# BrlAPI probe 3354 3355if test "$brlapi" != "no" ; then 3356 brlapi_libs="-lbrlapi" 3357 cat > $TMPC << EOF 3358#include <brlapi.h> 3359#include <stddef.h> 3360int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } 3361EOF 3362 if compile_prog "" "$brlapi_libs" ; then 3363 brlapi=yes 3364 else 3365 if test "$brlapi" = "yes" ; then 3366 feature_not_found "brlapi" "Install brlapi devel" 3367 fi 3368 brlapi=no 3369 fi 3370fi 3371 3372########################################## 3373# curses probe 3374if test "$curses" != "no" ; then 3375 if test "$mingw32" = "yes" ; then 3376 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):" 3377 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses" 3378 else 3379 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:" 3380 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw" 3381 fi 3382 curses_found=no 3383 cat > $TMPC << EOF 3384#include <locale.h> 3385#include <curses.h> 3386#include <wchar.h> 3387int main(void) { 3388 wchar_t wch = L'w'; 3389 setlocale(LC_ALL, ""); 3390 resize_term(0, 0); 3391 addwstr(L"wide chars\n"); 3392 addnwstr(&wch, 1); 3393 add_wch(WACS_DEGREE); 3394 return 0; 3395} 3396EOF 3397 IFS=: 3398 for curses_inc in $curses_inc_list; do 3399 # Make sure we get the wide character prototypes 3400 curses_inc="-DNCURSES_WIDECHAR $curses_inc" 3401 IFS=: 3402 for curses_lib in $curses_lib_list; do 3403 unset IFS 3404 if compile_prog "$curses_inc" "$curses_lib" ; then 3405 curses_found=yes 3406 break 3407 fi 3408 done 3409 if test "$curses_found" = yes ; then 3410 break 3411 fi 3412 done 3413 unset IFS 3414 if test "$curses_found" = "yes" ; then 3415 curses=yes 3416 else 3417 if test "$curses" = "yes" ; then 3418 feature_not_found "curses" "Install ncurses devel" 3419 fi 3420 curses=no 3421 fi 3422fi 3423 3424########################################## 3425# curl probe 3426if test "$curl" != "no" ; then 3427 if $pkg_config libcurl --exists; then 3428 curlconfig="$pkg_config libcurl" 3429 else 3430 curlconfig=curl-config 3431 fi 3432 cat > $TMPC << EOF 3433#include <curl/curl.h> 3434int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } 3435EOF 3436 curl_cflags=$($curlconfig --cflags 2>/dev/null) 3437 curl_libs=$($curlconfig --libs 2>/dev/null) 3438 if compile_prog "$curl_cflags" "$curl_libs" ; then 3439 curl=yes 3440 else 3441 if test "$curl" = "yes" ; then 3442 feature_not_found "curl" "Install libcurl devel" 3443 fi 3444 curl=no 3445 fi 3446fi # test "$curl" 3447 3448########################################## 3449# bluez support probe 3450if test "$bluez" != "no" ; then 3451 cat > $TMPC << EOF 3452#include <bluetooth/bluetooth.h> 3453int main(void) { return bt_error(0); } 3454EOF 3455 bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null) 3456 bluez_libs=$($pkg_config --libs bluez 2>/dev/null) 3457 if compile_prog "$bluez_cflags" "$bluez_libs" ; then 3458 bluez=yes 3459 libs_softmmu="$bluez_libs $libs_softmmu" 3460 else 3461 if test "$bluez" = "yes" ; then 3462 feature_not_found "bluez" "Install bluez-libs/libbluetooth devel" 3463 fi 3464 bluez="no" 3465 fi 3466fi 3467 3468########################################## 3469# glib support probe 3470 3471glib_req_ver=2.40 3472glib_modules=gthread-2.0 3473if test "$modules" = yes; then 3474 glib_modules="$glib_modules gmodule-export-2.0" 3475fi 3476 3477# This workaround is required due to a bug in pkg-config file for glib as it 3478# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3479 3480if test "$static" = yes -a "$mingw32" = yes; then 3481 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS" 3482fi 3483 3484for i in $glib_modules; do 3485 if $pkg_config --atleast-version=$glib_req_ver $i; then 3486 glib_cflags=$($pkg_config --cflags $i) 3487 glib_libs=$($pkg_config --libs $i) 3488 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS" 3489 LIBS="$glib_libs $LIBS" 3490 libs_qga="$glib_libs $libs_qga" 3491 else 3492 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3493 fi 3494done 3495 3496# Sanity check that the current size_t matches the 3497# size that glib thinks it should be. This catches 3498# problems on multi-arch where people try to build 3499# 32-bit QEMU while pointing at 64-bit glib headers 3500cat > $TMPC <<EOF 3501#include <glib.h> 3502#include <unistd.h> 3503 3504#define QEMU_BUILD_BUG_ON(x) \ 3505 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3506 3507int main(void) { 3508 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3509 return 0; 3510} 3511EOF 3512 3513if ! compile_prog "$CFLAGS" "$LIBS" ; then 3514 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3515 "You probably need to set PKG_CONFIG_LIBDIR"\ 3516 "to point to the right pkg-config files for your"\ 3517 "build target" 3518fi 3519 3520# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3521cat > $TMPC << EOF 3522#include <glib.h> 3523int main(void) { return 0; } 3524EOF 3525if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3526 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3527 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3528 CFLAGS="-Wno-unknown-attributes $CFLAGS" 3529 fi 3530fi 3531 3532######################################### 3533# zlib check 3534 3535if test "$zlib" != "no" ; then 3536 if $pkg_config --exists zlib; then 3537 zlib_cflags=$($pkg_config --cflags zlib) 3538 zlib_libs=$($pkg_config --libs zlib) 3539 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS" 3540 LIBS="$zlib_libs $LIBS" 3541 else 3542 cat > $TMPC << EOF 3543#include <zlib.h> 3544int main(void) { zlibVersion(); return 0; } 3545EOF 3546 if compile_prog "" "-lz" ; then 3547 LIBS="$LIBS -lz" 3548 else 3549 error_exit "zlib check failed" \ 3550 "Make sure to have the zlib libs and headers installed." 3551 fi 3552 fi 3553fi 3554 3555########################################## 3556# SHA command probe for modules 3557if test "$modules" = yes; then 3558 shacmd_probe="sha1sum sha1 shasum" 3559 for c in $shacmd_probe; do 3560 if has $c; then 3561 shacmd="$c" 3562 break 3563 fi 3564 done 3565 if test "$shacmd" = ""; then 3566 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3567 fi 3568fi 3569 3570########################################## 3571# pixman support probe 3572 3573if test "$want_tools" = "no" -a "$softmmu" = "no"; then 3574 pixman_cflags= 3575 pixman_libs= 3576elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then 3577 pixman_cflags=$($pkg_config --cflags pixman-1) 3578 pixman_libs=$($pkg_config --libs pixman-1) 3579else 3580 error_exit "pixman >= 0.21.8 not present." \ 3581 "Please install the pixman devel package." 3582fi 3583 3584########################################## 3585# libmpathpersist probe 3586 3587if test "$mpath" != "no" ; then 3588 # probe for the new API 3589 cat > $TMPC <<EOF 3590#include <libudev.h> 3591#include <mpath_persist.h> 3592unsigned mpath_mx_alloc_len = 1024; 3593int logsink; 3594static struct config *multipath_conf; 3595extern struct udev *udev; 3596extern struct config *get_multipath_config(void); 3597extern void put_multipath_config(struct config *conf); 3598struct udev *udev; 3599struct config *get_multipath_config(void) { return multipath_conf; } 3600void put_multipath_config(struct config *conf) { } 3601 3602int main(void) { 3603 udev = udev_new(); 3604 multipath_conf = mpath_lib_init(); 3605 return 0; 3606} 3607EOF 3608 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3609 mpathpersist=yes 3610 mpathpersist_new_api=yes 3611 else 3612 # probe for the old API 3613 cat > $TMPC <<EOF 3614#include <libudev.h> 3615#include <mpath_persist.h> 3616unsigned mpath_mx_alloc_len = 1024; 3617int logsink; 3618int main(void) { 3619 struct udev *udev = udev_new(); 3620 mpath_lib_init(udev); 3621 return 0; 3622} 3623EOF 3624 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3625 mpathpersist=yes 3626 mpathpersist_new_api=no 3627 else 3628 mpathpersist=no 3629 fi 3630 fi 3631else 3632 mpathpersist=no 3633fi 3634 3635########################################## 3636# libcap probe 3637 3638if test "$cap" != "no" ; then 3639 cat > $TMPC <<EOF 3640#include <stdio.h> 3641#include <sys/capability.h> 3642int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; } 3643EOF 3644 if compile_prog "" "-lcap" ; then 3645 cap=yes 3646 else 3647 cap=no 3648 fi 3649fi 3650 3651########################################## 3652# pthread probe 3653PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3654 3655pthread=no 3656cat > $TMPC << EOF 3657#include <pthread.h> 3658static void *f(void *p) { return NULL; } 3659int main(void) { 3660 pthread_t thread; 3661 pthread_create(&thread, 0, f, 0); 3662 return 0; 3663} 3664EOF 3665if compile_prog "" "" ; then 3666 pthread=yes 3667else 3668 for pthread_lib in $PTHREADLIBS_LIST; do 3669 if compile_prog "" "$pthread_lib" ; then 3670 pthread=yes 3671 found=no 3672 for lib_entry in $LIBS; do 3673 if test "$lib_entry" = "$pthread_lib"; then 3674 found=yes 3675 break 3676 fi 3677 done 3678 if test "$found" = "no"; then 3679 LIBS="$pthread_lib $LIBS" 3680 libs_qga="$pthread_lib $libs_qga" 3681 fi 3682 PTHREAD_LIB="$pthread_lib" 3683 break 3684 fi 3685 done 3686fi 3687 3688if test "$mingw32" != yes -a "$pthread" = no; then 3689 error_exit "pthread check failed" \ 3690 "Make sure to have the pthread libs and headers installed." 3691fi 3692 3693# check for pthread_setname_np 3694pthread_setname_np=no 3695cat > $TMPC << EOF 3696#include <pthread.h> 3697 3698static void *f(void *p) { return NULL; } 3699int main(void) 3700{ 3701 pthread_t thread; 3702 pthread_create(&thread, 0, f, 0); 3703 pthread_setname_np(thread, "QEMU"); 3704 return 0; 3705} 3706EOF 3707if compile_prog "" "$pthread_lib" ; then 3708 pthread_setname_np=yes 3709fi 3710 3711########################################## 3712# rbd probe 3713if test "$rbd" != "no" ; then 3714 cat > $TMPC <<EOF 3715#include <stdio.h> 3716#include <rbd/librbd.h> 3717int main(void) { 3718 rados_t cluster; 3719 rados_create(&cluster, NULL); 3720 return 0; 3721} 3722EOF 3723 rbd_libs="-lrbd -lrados" 3724 if compile_prog "" "$rbd_libs" ; then 3725 rbd=yes 3726 else 3727 if test "$rbd" = "yes" ; then 3728 feature_not_found "rados block device" "Install librbd/ceph devel" 3729 fi 3730 rbd=no 3731 fi 3732fi 3733 3734########################################## 3735# libssh2 probe 3736min_libssh2_version=1.2.8 3737if test "$libssh2" != "no" ; then 3738 if $pkg_config --atleast-version=$min_libssh2_version libssh2; then 3739 libssh2_cflags=$($pkg_config libssh2 --cflags) 3740 libssh2_libs=$($pkg_config libssh2 --libs) 3741 libssh2=yes 3742 else 3743 if test "$libssh2" = "yes" ; then 3744 error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2" 3745 fi 3746 libssh2=no 3747 fi 3748fi 3749 3750########################################## 3751# libssh2_sftp_fsync probe 3752 3753if test "$libssh2" = "yes"; then 3754 cat > $TMPC <<EOF 3755#include <stdio.h> 3756#include <libssh2.h> 3757#include <libssh2_sftp.h> 3758int main(void) { 3759 LIBSSH2_SESSION *session; 3760 LIBSSH2_SFTP *sftp; 3761 LIBSSH2_SFTP_HANDLE *sftp_handle; 3762 session = libssh2_session_init (); 3763 sftp = libssh2_sftp_init (session); 3764 sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0); 3765 libssh2_sftp_fsync (sftp_handle); 3766 return 0; 3767} 3768EOF 3769 # libssh2_cflags/libssh2_libs defined in previous test. 3770 if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then 3771 QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS" 3772 fi 3773fi 3774 3775########################################## 3776# linux-aio probe 3777 3778if test "$linux_aio" != "no" ; then 3779 cat > $TMPC <<EOF 3780#include <libaio.h> 3781#include <sys/eventfd.h> 3782#include <stddef.h> 3783int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 3784EOF 3785 if compile_prog "" "-laio" ; then 3786 linux_aio=yes 3787 else 3788 if test "$linux_aio" = "yes" ; then 3789 feature_not_found "linux AIO" "Install libaio devel" 3790 fi 3791 linux_aio=no 3792 fi 3793fi 3794 3795########################################## 3796# TPM passthrough is only on x86 Linux 3797 3798if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then 3799 tpm_passthrough=$tpm 3800else 3801 tpm_passthrough=no 3802fi 3803 3804# TPM emulator is for all posix systems 3805if test "$mingw32" != "yes"; then 3806 tpm_emulator=$tpm 3807else 3808 tpm_emulator=no 3809fi 3810########################################## 3811# attr probe 3812 3813if test "$attr" != "no" ; then 3814 cat > $TMPC <<EOF 3815#include <stdio.h> 3816#include <sys/types.h> 3817#ifdef CONFIG_LIBATTR 3818#include <attr/xattr.h> 3819#else 3820#include <sys/xattr.h> 3821#endif 3822int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 3823EOF 3824 if compile_prog "" "" ; then 3825 attr=yes 3826 # Older distros have <attr/xattr.h>, and need -lattr: 3827 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 3828 attr=yes 3829 LIBS="-lattr $LIBS" 3830 libattr=yes 3831 else 3832 if test "$attr" = "yes" ; then 3833 feature_not_found "ATTR" "Install libc6 or libattr devel" 3834 fi 3835 attr=no 3836 fi 3837fi 3838 3839########################################## 3840# iovec probe 3841cat > $TMPC <<EOF 3842#include <sys/types.h> 3843#include <sys/uio.h> 3844#include <unistd.h> 3845int main(void) { return sizeof(struct iovec); } 3846EOF 3847iovec=no 3848if compile_prog "" "" ; then 3849 iovec=yes 3850fi 3851 3852########################################## 3853# preadv probe 3854cat > $TMPC <<EOF 3855#include <sys/types.h> 3856#include <sys/uio.h> 3857#include <unistd.h> 3858int main(void) { return preadv(0, 0, 0, 0); } 3859EOF 3860preadv=no 3861if compile_prog "" "" ; then 3862 preadv=yes 3863fi 3864 3865########################################## 3866# fdt probe 3867# fdt support is mandatory for at least some target architectures, 3868# so insist on it if we're building those system emulators. 3869fdt_required=no 3870for target in $target_list; do 3871 case $target in 3872 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu) 3873 fdt_required=yes 3874 ;; 3875 esac 3876done 3877 3878if test "$fdt_required" = "yes"; then 3879 if test "$fdt" = "no"; then 3880 error_exit "fdt disabled but some requested targets require it." \ 3881 "You can turn off fdt only if you also disable all the system emulation" \ 3882 "targets which need it (by specifying a cut down --target-list)." 3883 fi 3884 fdt=yes 3885fi 3886 3887if test "$fdt" != "no" ; then 3888 fdt_libs="-lfdt" 3889 # explicitly check for libfdt_env.h as it is missing in some stable installs 3890 # and test for required functions to make sure we are on a version >= 1.4.2 3891 cat > $TMPC << EOF 3892#include <libfdt.h> 3893#include <libfdt_env.h> 3894int main(void) { fdt_first_subnode(0, 0); return 0; } 3895EOF 3896 if compile_prog "" "$fdt_libs" ; then 3897 # system DTC is good - use it 3898 fdt=system 3899 else 3900 # have GIT checkout, so activate dtc submodule 3901 if test -e "${source_path}/.git" ; then 3902 git_submodules="${git_submodules} dtc" 3903 fi 3904 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then 3905 fdt=git 3906 mkdir -p dtc 3907 if [ "$pwd_is_source_path" != "y" ] ; then 3908 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 3909 symlink "$source_path/dtc/scripts" "dtc/scripts" 3910 fi 3911 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt" 3912 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt" 3913 fdt_libs="$fdt_libs" 3914 elif test "$fdt" = "yes" ; then 3915 # Not a git build & no libfdt found, prompt for system install 3916 error_exit "DTC (libfdt) version >= 1.4.2 not present." \ 3917 "Please install the DTC (libfdt) devel package" 3918 else 3919 # don't have and don't want 3920 fdt_libs= 3921 fdt=no 3922 fi 3923 fi 3924fi 3925 3926libs_softmmu="$libs_softmmu $fdt_libs" 3927 3928########################################## 3929# opengl probe (for sdl2, gtk, milkymist-tmu2) 3930 3931if test "$opengl" != "no" ; then 3932 opengl_pkgs="epoxy gbm" 3933 if $pkg_config $opengl_pkgs; then 3934 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 3935 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 3936 opengl=yes 3937 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 3938 gtk_gl="yes" 3939 fi 3940 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 3941 else 3942 if test "$opengl" = "yes" ; then 3943 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 3944 fi 3945 opengl_cflags="" 3946 opengl_libs="" 3947 opengl=no 3948 fi 3949fi 3950 3951if test "$opengl" = "yes"; then 3952 cat > $TMPC << EOF 3953#include <epoxy/egl.h> 3954#ifndef EGL_MESA_image_dma_buf_export 3955# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 3956#endif 3957int main(void) { return 0; } 3958EOF 3959 if compile_prog "" "" ; then 3960 opengl_dmabuf=yes 3961 fi 3962fi 3963 3964########################################## 3965# libxml2 probe 3966if test "$libxml2" != "no" ; then 3967 if $pkg_config --exists libxml-2.0; then 3968 libxml2="yes" 3969 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 3970 libxml2_libs=$($pkg_config --libs libxml-2.0) 3971 else 3972 if test "$libxml2" = "yes"; then 3973 feature_not_found "libxml2" "Install libxml2 devel" 3974 fi 3975 libxml2="no" 3976 fi 3977fi 3978 3979########################################## 3980# glusterfs probe 3981if test "$glusterfs" != "no" ; then 3982 if $pkg_config --atleast-version=3 glusterfs-api; then 3983 glusterfs="yes" 3984 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 3985 glusterfs_libs=$($pkg_config --libs glusterfs-api) 3986 if $pkg_config --atleast-version=4 glusterfs-api; then 3987 glusterfs_xlator_opt="yes" 3988 fi 3989 if $pkg_config --atleast-version=5 glusterfs-api; then 3990 glusterfs_discard="yes" 3991 fi 3992 if $pkg_config --atleast-version=6 glusterfs-api; then 3993 glusterfs_fallocate="yes" 3994 glusterfs_zerofill="yes" 3995 fi 3996 else 3997 if test "$glusterfs" = "yes" ; then 3998 feature_not_found "GlusterFS backend support" \ 3999 "Install glusterfs-api devel >= 3" 4000 fi 4001 glusterfs="no" 4002 fi 4003fi 4004 4005# Check for inotify functions when we are building linux-user 4006# emulator. This is done because older glibc versions don't 4007# have syscall stubs for these implemented. In that case we 4008# don't provide them even if kernel supports them. 4009# 4010inotify=no 4011cat > $TMPC << EOF 4012#include <sys/inotify.h> 4013 4014int 4015main(void) 4016{ 4017 /* try to start inotify */ 4018 return inotify_init(); 4019} 4020EOF 4021if compile_prog "" "" ; then 4022 inotify=yes 4023fi 4024 4025inotify1=no 4026cat > $TMPC << EOF 4027#include <sys/inotify.h> 4028 4029int 4030main(void) 4031{ 4032 /* try to start inotify */ 4033 return inotify_init1(0); 4034} 4035EOF 4036if compile_prog "" "" ; then 4037 inotify1=yes 4038fi 4039 4040# check if pipe2 is there 4041pipe2=no 4042cat > $TMPC << EOF 4043#include <unistd.h> 4044#include <fcntl.h> 4045 4046int main(void) 4047{ 4048 int pipefd[2]; 4049 return pipe2(pipefd, O_CLOEXEC); 4050} 4051EOF 4052if compile_prog "" "" ; then 4053 pipe2=yes 4054fi 4055 4056# check if accept4 is there 4057accept4=no 4058cat > $TMPC << EOF 4059#include <sys/socket.h> 4060#include <stddef.h> 4061 4062int main(void) 4063{ 4064 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4065 return 0; 4066} 4067EOF 4068if compile_prog "" "" ; then 4069 accept4=yes 4070fi 4071 4072# check if tee/splice is there. vmsplice was added same time. 4073splice=no 4074cat > $TMPC << EOF 4075#include <unistd.h> 4076#include <fcntl.h> 4077#include <limits.h> 4078 4079int main(void) 4080{ 4081 int len, fd = 0; 4082 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4083 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4084 return 0; 4085} 4086EOF 4087if compile_prog "" "" ; then 4088 splice=yes 4089fi 4090 4091########################################## 4092# libnuma probe 4093 4094if test "$numa" != "no" ; then 4095 cat > $TMPC << EOF 4096#include <numa.h> 4097int main(void) { return numa_available(); } 4098EOF 4099 4100 if compile_prog "" "-lnuma" ; then 4101 numa=yes 4102 libs_softmmu="-lnuma $libs_softmmu" 4103 else 4104 if test "$numa" = "yes" ; then 4105 feature_not_found "numa" "install numactl devel" 4106 fi 4107 numa=no 4108 fi 4109fi 4110 4111if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4112 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4113 exit 1 4114fi 4115 4116# Even if malloc_trim() is available, these non-libc memory allocators 4117# do not support it. 4118if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then 4119 if test "$malloc_trim" = "yes" ; then 4120 echo "Disabling malloc_trim with non-libc memory allocator" 4121 fi 4122 malloc_trim="no" 4123fi 4124 4125####################################### 4126# malloc_trim 4127 4128if test "$malloc_trim" != "no" ; then 4129 cat > $TMPC << EOF 4130#include <malloc.h> 4131int main(void) { malloc_trim(0); return 0; } 4132EOF 4133 if compile_prog "" "" ; then 4134 malloc_trim="yes" 4135 else 4136 malloc_trim="no" 4137 fi 4138fi 4139 4140########################################## 4141# tcmalloc probe 4142 4143if test "$tcmalloc" = "yes" ; then 4144 cat > $TMPC << EOF 4145#include <stdlib.h> 4146int main(void) { malloc(1); return 0; } 4147EOF 4148 4149 if compile_prog "" "-ltcmalloc" ; then 4150 LIBS="-ltcmalloc $LIBS" 4151 else 4152 feature_not_found "tcmalloc" "install gperftools devel" 4153 fi 4154fi 4155 4156########################################## 4157# jemalloc probe 4158 4159if test "$jemalloc" = "yes" ; then 4160 cat > $TMPC << EOF 4161#include <stdlib.h> 4162int main(void) { malloc(1); return 0; } 4163EOF 4164 4165 if compile_prog "" "-ljemalloc" ; then 4166 LIBS="-ljemalloc $LIBS" 4167 else 4168 feature_not_found "jemalloc" "install jemalloc devel" 4169 fi 4170fi 4171 4172########################################## 4173# signalfd probe 4174signalfd="no" 4175cat > $TMPC << EOF 4176#include <unistd.h> 4177#include <sys/syscall.h> 4178#include <signal.h> 4179int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4180EOF 4181 4182if compile_prog "" "" ; then 4183 signalfd=yes 4184fi 4185 4186# check if eventfd is supported 4187eventfd=no 4188cat > $TMPC << EOF 4189#include <sys/eventfd.h> 4190 4191int main(void) 4192{ 4193 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4194} 4195EOF 4196if compile_prog "" "" ; then 4197 eventfd=yes 4198fi 4199 4200# check if memfd is supported 4201memfd=no 4202cat > $TMPC << EOF 4203#include <sys/mman.h> 4204 4205int main(void) 4206{ 4207 return memfd_create("foo", MFD_ALLOW_SEALING); 4208} 4209EOF 4210if compile_prog "" "" ; then 4211 memfd=yes 4212fi 4213 4214# check for usbfs 4215have_usbfs=no 4216if test "$linux_user" = "yes"; then 4217 if check_include linux/usbdevice_fs.h; then 4218 have_usbfs=yes 4219 fi 4220 have_usbfs=yes 4221fi 4222 4223# check for fallocate 4224fallocate=no 4225cat > $TMPC << EOF 4226#include <fcntl.h> 4227 4228int main(void) 4229{ 4230 fallocate(0, 0, 0, 0); 4231 return 0; 4232} 4233EOF 4234if compile_prog "" "" ; then 4235 fallocate=yes 4236fi 4237 4238# check for fallocate hole punching 4239fallocate_punch_hole=no 4240cat > $TMPC << EOF 4241#include <fcntl.h> 4242#include <linux/falloc.h> 4243 4244int main(void) 4245{ 4246 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4247 return 0; 4248} 4249EOF 4250if compile_prog "" "" ; then 4251 fallocate_punch_hole=yes 4252fi 4253 4254# check that fallocate supports range zeroing inside the file 4255fallocate_zero_range=no 4256cat > $TMPC << EOF 4257#include <fcntl.h> 4258#include <linux/falloc.h> 4259 4260int main(void) 4261{ 4262 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4263 return 0; 4264} 4265EOF 4266if compile_prog "" "" ; then 4267 fallocate_zero_range=yes 4268fi 4269 4270# check for posix_fallocate 4271posix_fallocate=no 4272cat > $TMPC << EOF 4273#include <fcntl.h> 4274 4275int main(void) 4276{ 4277 posix_fallocate(0, 0, 0); 4278 return 0; 4279} 4280EOF 4281if compile_prog "" "" ; then 4282 posix_fallocate=yes 4283fi 4284 4285# check for sync_file_range 4286sync_file_range=no 4287cat > $TMPC << EOF 4288#include <fcntl.h> 4289 4290int main(void) 4291{ 4292 sync_file_range(0, 0, 0, 0); 4293 return 0; 4294} 4295EOF 4296if compile_prog "" "" ; then 4297 sync_file_range=yes 4298fi 4299 4300# check for linux/fiemap.h and FS_IOC_FIEMAP 4301fiemap=no 4302cat > $TMPC << EOF 4303#include <sys/ioctl.h> 4304#include <linux/fs.h> 4305#include <linux/fiemap.h> 4306 4307int main(void) 4308{ 4309 ioctl(0, FS_IOC_FIEMAP, 0); 4310 return 0; 4311} 4312EOF 4313if compile_prog "" "" ; then 4314 fiemap=yes 4315fi 4316 4317# check for dup3 4318dup3=no 4319cat > $TMPC << EOF 4320#include <unistd.h> 4321 4322int main(void) 4323{ 4324 dup3(0, 0, 0); 4325 return 0; 4326} 4327EOF 4328if compile_prog "" "" ; then 4329 dup3=yes 4330fi 4331 4332# check for ppoll support 4333ppoll=no 4334cat > $TMPC << EOF 4335#include <poll.h> 4336 4337int main(void) 4338{ 4339 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4340 ppoll(&pfd, 1, 0, 0); 4341 return 0; 4342} 4343EOF 4344if compile_prog "" "" ; then 4345 ppoll=yes 4346fi 4347 4348# check for prctl(PR_SET_TIMERSLACK , ... ) support 4349prctl_pr_set_timerslack=no 4350cat > $TMPC << EOF 4351#include <sys/prctl.h> 4352 4353int main(void) 4354{ 4355 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4356 return 0; 4357} 4358EOF 4359if compile_prog "" "" ; then 4360 prctl_pr_set_timerslack=yes 4361fi 4362 4363# check for epoll support 4364epoll=no 4365cat > $TMPC << EOF 4366#include <sys/epoll.h> 4367 4368int main(void) 4369{ 4370 epoll_create(0); 4371 return 0; 4372} 4373EOF 4374if compile_prog "" "" ; then 4375 epoll=yes 4376fi 4377 4378# epoll_create1 is a later addition 4379# so we must check separately for its presence 4380epoll_create1=no 4381cat > $TMPC << EOF 4382#include <sys/epoll.h> 4383 4384int main(void) 4385{ 4386 /* Note that we use epoll_create1 as a value, not as 4387 * a function being called. This is necessary so that on 4388 * old SPARC glibc versions where the function was present in 4389 * the library but not declared in the header file we will 4390 * fail the configure check. (Otherwise we will get a compiler 4391 * warning but not an error, and will proceed to fail the 4392 * qemu compile where we compile with -Werror.) 4393 */ 4394 return (int)(uintptr_t)&epoll_create1; 4395} 4396EOF 4397if compile_prog "" "" ; then 4398 epoll_create1=yes 4399fi 4400 4401# check for sendfile support 4402sendfile=no 4403cat > $TMPC << EOF 4404#include <sys/sendfile.h> 4405 4406int main(void) 4407{ 4408 return sendfile(0, 0, 0, 0); 4409} 4410EOF 4411if compile_prog "" "" ; then 4412 sendfile=yes 4413fi 4414 4415# check for timerfd support (glibc 2.8 and newer) 4416timerfd=no 4417cat > $TMPC << EOF 4418#include <sys/timerfd.h> 4419 4420int main(void) 4421{ 4422 return(timerfd_create(CLOCK_REALTIME, 0)); 4423} 4424EOF 4425if compile_prog "" "" ; then 4426 timerfd=yes 4427fi 4428 4429# check for setns and unshare support 4430setns=no 4431cat > $TMPC << EOF 4432#include <sched.h> 4433 4434int main(void) 4435{ 4436 int ret; 4437 ret = setns(0, 0); 4438 ret = unshare(0); 4439 return ret; 4440} 4441EOF 4442if compile_prog "" "" ; then 4443 setns=yes 4444fi 4445 4446# clock_adjtime probe 4447clock_adjtime=no 4448cat > $TMPC <<EOF 4449#include <time.h> 4450 4451int main(void) 4452{ 4453 return clock_adjtime(0, 0); 4454} 4455EOF 4456clock_adjtime=no 4457if compile_prog "" "" ; then 4458 clock_adjtime=yes 4459fi 4460 4461# syncfs probe 4462syncfs=no 4463cat > $TMPC <<EOF 4464#include <unistd.h> 4465 4466int main(void) 4467{ 4468 return syncfs(0); 4469} 4470EOF 4471syncfs=no 4472if compile_prog "" "" ; then 4473 syncfs=yes 4474fi 4475 4476# Check if tools are available to build documentation. 4477if test "$docs" != "no" ; then 4478 if has makeinfo && has pod2man; then 4479 docs=yes 4480 else 4481 if test "$docs" = "yes" ; then 4482 feature_not_found "docs" "Install texinfo and Perl/perl-podlators" 4483 fi 4484 docs=no 4485 fi 4486fi 4487 4488# Search for bswap_32 function 4489byteswap_h=no 4490cat > $TMPC << EOF 4491#include <byteswap.h> 4492int main(void) { return bswap_32(0); } 4493EOF 4494if compile_prog "" "" ; then 4495 byteswap_h=yes 4496fi 4497 4498# Search for bswap32 function 4499bswap_h=no 4500cat > $TMPC << EOF 4501#include <sys/endian.h> 4502#include <sys/types.h> 4503#include <machine/bswap.h> 4504int main(void) { return bswap32(0); } 4505EOF 4506if compile_prog "" "" ; then 4507 bswap_h=yes 4508fi 4509 4510########################################## 4511# Do we have libiscsi >= 1.9.0 4512if test "$libiscsi" != "no" ; then 4513 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4514 libiscsi="yes" 4515 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4516 libiscsi_libs=$($pkg_config --libs libiscsi) 4517 else 4518 if test "$libiscsi" = "yes" ; then 4519 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4520 fi 4521 libiscsi="no" 4522 fi 4523fi 4524 4525########################################## 4526# Do we need libm 4527cat > $TMPC << EOF 4528#include <math.h> 4529int main(int argc, char **argv) { return isnan(sin((double)argc)); } 4530EOF 4531if compile_prog "" "" ; then 4532 : 4533elif compile_prog "" "-lm" ; then 4534 LIBS="-lm $LIBS" 4535 libs_qga="-lm $libs_qga" 4536else 4537 error_exit "libm check failed" 4538fi 4539 4540########################################## 4541# Do we need librt 4542# uClibc provides 2 versions of clock_gettime(), one with realtime 4543# support and one without. This means that the clock_gettime() don't 4544# need -lrt. We still need it for timer_create() so we check for this 4545# function in addition. 4546cat > $TMPC <<EOF 4547#include <signal.h> 4548#include <time.h> 4549int main(void) { 4550 timer_create(CLOCK_REALTIME, NULL, NULL); 4551 return clock_gettime(CLOCK_REALTIME, NULL); 4552} 4553EOF 4554 4555if compile_prog "" "" ; then 4556 : 4557# we need pthread for static linking. use previous pthread test result 4558elif compile_prog "" "$pthread_lib -lrt" ; then 4559 LIBS="$LIBS -lrt" 4560 libs_qga="$libs_qga -lrt" 4561fi 4562 4563if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ 4564 "$haiku" != "yes" ; then 4565 libs_softmmu="-lutil $libs_softmmu" 4566fi 4567 4568########################################## 4569# spice probe 4570if test "$spice" != "no" ; then 4571 cat > $TMPC << EOF 4572#include <spice.h> 4573int main(void) { spice_server_new(); return 0; } 4574EOF 4575 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 4576 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 4577 if $pkg_config --atleast-version=0.12.0 spice-server && \ 4578 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 4579 compile_prog "$spice_cflags" "$spice_libs" ; then 4580 spice="yes" 4581 libs_softmmu="$libs_softmmu $spice_libs" 4582 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 4583 spice_protocol_version=$($pkg_config --modversion spice-protocol) 4584 spice_server_version=$($pkg_config --modversion spice-server) 4585 else 4586 if test "$spice" = "yes" ; then 4587 feature_not_found "spice" \ 4588 "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel" 4589 fi 4590 spice="no" 4591 fi 4592fi 4593 4594# check for smartcard support 4595if test "$smartcard" != "no"; then 4596 if $pkg_config --atleast-version=2.5.1 libcacard; then 4597 libcacard_cflags=$($pkg_config --cflags libcacard) 4598 libcacard_libs=$($pkg_config --libs libcacard) 4599 smartcard="yes" 4600 else 4601 if test "$smartcard" = "yes"; then 4602 feature_not_found "smartcard" "Install libcacard devel" 4603 fi 4604 smartcard="no" 4605 fi 4606fi 4607 4608# check for libusb 4609if test "$libusb" != "no" ; then 4610 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 4611 libusb="yes" 4612 libusb_cflags=$($pkg_config --cflags libusb-1.0) 4613 libusb_libs=$($pkg_config --libs libusb-1.0) 4614 else 4615 if test "$libusb" = "yes"; then 4616 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 4617 fi 4618 libusb="no" 4619 fi 4620fi 4621 4622# check for usbredirparser for usb network redirection support 4623if test "$usb_redir" != "no" ; then 4624 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 4625 usb_redir="yes" 4626 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 4627 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 4628 else 4629 if test "$usb_redir" = "yes"; then 4630 feature_not_found "usb-redir" "Install usbredir devel" 4631 fi 4632 usb_redir="no" 4633 fi 4634fi 4635 4636########################################## 4637# check if we have VSS SDK headers for win 4638 4639if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then 4640 case "$vss_win32_sdk" in 4641 "") vss_win32_include="-isystem $source_path" ;; 4642 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 4643 # handle path with spaces. So we symlink the headers into ".sdk/vss". 4644 vss_win32_include="-isystem $source_path/.sdk/vss" 4645 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 4646 ;; 4647 *) vss_win32_include="-isystem $vss_win32_sdk" 4648 esac 4649 cat > $TMPC << EOF 4650#define __MIDL_user_allocate_free_DEFINED__ 4651#include <inc/win2003/vss.h> 4652int main(void) { return VSS_CTX_BACKUP; } 4653EOF 4654 if compile_prog "$vss_win32_include" "" ; then 4655 guest_agent_with_vss="yes" 4656 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 4657 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 4658 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 4659 else 4660 if test "$vss_win32_sdk" != "" ; then 4661 echo "ERROR: Please download and install Microsoft VSS SDK:" 4662 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 4663 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 4664 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 4665 echo "ERROR: The headers are extracted in the directory \`inc'." 4666 feature_not_found "VSS support" 4667 fi 4668 guest_agent_with_vss="no" 4669 fi 4670fi 4671 4672########################################## 4673# lookup Windows platform SDK (if not specified) 4674# The SDK is needed only to build .tlb (type library) file of guest agent 4675# VSS provider from the source. It is usually unnecessary because the 4676# pre-compiled .tlb file is included. 4677 4678if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then 4679 if test -z "$win_sdk"; then 4680 programfiles="$PROGRAMFILES" 4681 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 4682 if test -n "$programfiles"; then 4683 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 4684 else 4685 feature_not_found "Windows SDK" 4686 fi 4687 elif test "$win_sdk" = "no"; then 4688 win_sdk="" 4689 fi 4690fi 4691 4692########################################## 4693# check if mingw environment provides a recent ntddscsi.h 4694if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then 4695 cat > $TMPC << EOF 4696#include <windows.h> 4697#include <ntddscsi.h> 4698int main(void) { 4699#if !defined(IOCTL_SCSI_GET_ADDRESS) 4700#error Missing required ioctl definitions 4701#endif 4702 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 4703 return addr.Lun; 4704} 4705EOF 4706 if compile_prog "" "" ; then 4707 guest_agent_ntddscsi=yes 4708 libs_qga="-lsetupapi $libs_qga" 4709 fi 4710fi 4711 4712########################################## 4713# virgl renderer probe 4714 4715if test "$virglrenderer" != "no" ; then 4716 cat > $TMPC << EOF 4717#include <virglrenderer.h> 4718int main(void) { virgl_renderer_poll(); return 0; } 4719EOF 4720 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 4721 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 4722 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 4723 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 4724 compile_prog "$virgl_cflags" "$virgl_libs" ; then 4725 virglrenderer="yes" 4726 else 4727 if test "$virglrenderer" = "yes" ; then 4728 feature_not_found "virglrenderer" 4729 fi 4730 virglrenderer="no" 4731 fi 4732fi 4733 4734########################################## 4735# capstone 4736 4737case "$capstone" in 4738 "" | yes) 4739 if $pkg_config capstone; then 4740 capstone=system 4741 elif test -e "${source_path}/.git" -a $git_update = 'yes' ; then 4742 capstone=git 4743 elif test -e "${source_path}/capstone/Makefile" ; then 4744 capstone=internal 4745 elif test -z "$capstone" ; then 4746 capstone=no 4747 else 4748 feature_not_found "capstone" "Install capstone devel or git submodule" 4749 fi 4750 ;; 4751 4752 system) 4753 if ! $pkg_config capstone; then 4754 feature_not_found "capstone" "Install capstone devel" 4755 fi 4756 ;; 4757esac 4758 4759case "$capstone" in 4760 git | internal) 4761 if test "$capstone" = git; then 4762 git_submodules="${git_submodules} capstone" 4763 fi 4764 mkdir -p capstone 4765 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include" 4766 if test "$mingw32" = "yes"; then 4767 LIBCAPSTONE=capstone.lib 4768 else 4769 LIBCAPSTONE=libcapstone.a 4770 fi 4771 LIBS="-L\$(BUILD_DIR)/capstone -lcapstone $LIBS" 4772 ;; 4773 4774 system) 4775 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 4776 LIBS="$($pkg_config --libs capstone) $LIBS" 4777 ;; 4778 4779 no) 4780 ;; 4781 *) 4782 error_exit "Unknown state for capstone: $capstone" 4783 ;; 4784esac 4785 4786########################################## 4787# check if we have fdatasync 4788 4789fdatasync=no 4790cat > $TMPC << EOF 4791#include <unistd.h> 4792int main(void) { 4793#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 4794return fdatasync(0); 4795#else 4796#error Not supported 4797#endif 4798} 4799EOF 4800if compile_prog "" "" ; then 4801 fdatasync=yes 4802fi 4803 4804########################################## 4805# check if we have madvise 4806 4807madvise=no 4808cat > $TMPC << EOF 4809#include <sys/types.h> 4810#include <sys/mman.h> 4811#include <stddef.h> 4812int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 4813EOF 4814if compile_prog "" "" ; then 4815 madvise=yes 4816fi 4817 4818########################################## 4819# check if we have posix_madvise 4820 4821posix_madvise=no 4822cat > $TMPC << EOF 4823#include <sys/mman.h> 4824#include <stddef.h> 4825int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 4826EOF 4827if compile_prog "" "" ; then 4828 posix_madvise=yes 4829fi 4830 4831########################################## 4832# check if we have posix_memalign() 4833 4834posix_memalign=no 4835cat > $TMPC << EOF 4836#include <stdlib.h> 4837int main(void) { 4838 void *p; 4839 return posix_memalign(&p, 8, 8); 4840} 4841EOF 4842if compile_prog "" "" ; then 4843 posix_memalign=yes 4844fi 4845 4846########################################## 4847# check if we have posix_syslog 4848 4849posix_syslog=no 4850cat > $TMPC << EOF 4851#include <syslog.h> 4852int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 4853EOF 4854if compile_prog "" "" ; then 4855 posix_syslog=yes 4856fi 4857 4858########################################## 4859# check if we have sem_timedwait 4860 4861sem_timedwait=no 4862cat > $TMPC << EOF 4863#include <semaphore.h> 4864int main(void) { return sem_timedwait(0, 0); } 4865EOF 4866if compile_prog "" "" ; then 4867 sem_timedwait=yes 4868fi 4869 4870########################################## 4871# check if we have strchrnul 4872 4873strchrnul=no 4874cat > $TMPC << EOF 4875#include <string.h> 4876int main(void); 4877// Use a haystack that the compiler shouldn't be able to constant fold 4878char *haystack = (char*)&main; 4879int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 4880EOF 4881if compile_prog "" "" ; then 4882 strchrnul=yes 4883fi 4884 4885########################################## 4886# check if trace backend exists 4887 4888$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 4889if test "$?" -ne 0 ; then 4890 error_exit "invalid trace backends" \ 4891 "Please choose supported trace backends." 4892fi 4893 4894########################################## 4895# For 'ust' backend, test if ust headers are present 4896if have_backend "ust"; then 4897 cat > $TMPC << EOF 4898#include <lttng/tracepoint.h> 4899int main(void) { return 0; } 4900EOF 4901 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 4902 if $pkg_config lttng-ust --exists; then 4903 lttng_ust_libs=$($pkg_config --libs lttng-ust) 4904 else 4905 lttng_ust_libs="-llttng-ust -ldl" 4906 fi 4907 if $pkg_config liburcu-bp --exists; then 4908 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 4909 else 4910 urcu_bp_libs="-lurcu-bp" 4911 fi 4912 4913 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 4914 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 4915 else 4916 error_exit "Trace backend 'ust' missing lttng-ust header files" 4917 fi 4918fi 4919 4920########################################## 4921# For 'dtrace' backend, test if 'dtrace' command is present 4922if have_backend "dtrace"; then 4923 if ! has 'dtrace' ; then 4924 error_exit "dtrace command is not found in PATH $PATH" 4925 fi 4926 trace_backend_stap="no" 4927 if has 'stap' ; then 4928 trace_backend_stap="yes" 4929 fi 4930fi 4931 4932########################################## 4933# check and set a backend for coroutine 4934 4935# We prefer ucontext, but it's not always possible. The fallback 4936# is sigcontext. On Windows the only valid backend is the Windows 4937# specific one. 4938 4939ucontext_works=no 4940if test "$darwin" != "yes"; then 4941 cat > $TMPC << EOF 4942#include <ucontext.h> 4943#ifdef __stub_makecontext 4944#error Ignoring glibc stub makecontext which will always fail 4945#endif 4946int main(void) { makecontext(0, 0, 0); return 0; } 4947EOF 4948 if compile_prog "" "" ; then 4949 ucontext_works=yes 4950 fi 4951fi 4952 4953if test "$coroutine" = ""; then 4954 if test "$mingw32" = "yes"; then 4955 coroutine=win32 4956 elif test "$ucontext_works" = "yes"; then 4957 coroutine=ucontext 4958 else 4959 coroutine=sigaltstack 4960 fi 4961else 4962 case $coroutine in 4963 windows) 4964 if test "$mingw32" != "yes"; then 4965 error_exit "'windows' coroutine backend only valid for Windows" 4966 fi 4967 # Unfortunately the user visible backend name doesn't match the 4968 # coroutine-*.c filename for this case, so we have to adjust it here. 4969 coroutine=win32 4970 ;; 4971 ucontext) 4972 if test "$ucontext_works" != "yes"; then 4973 feature_not_found "ucontext" 4974 fi 4975 ;; 4976 sigaltstack) 4977 if test "$mingw32" = "yes"; then 4978 error_exit "only the 'windows' coroutine backend is valid for Windows" 4979 fi 4980 ;; 4981 *) 4982 error_exit "unknown coroutine backend $coroutine" 4983 ;; 4984 esac 4985fi 4986 4987if test "$coroutine_pool" = ""; then 4988 coroutine_pool=yes 4989fi 4990 4991if test "$debug_stack_usage" = "yes"; then 4992 if test "$coroutine_pool" = "yes"; then 4993 echo "WARN: disabling coroutine pool for stack usage debugging" 4994 coroutine_pool=no 4995 fi 4996fi 4997 4998 4999########################################## 5000# check if we have open_by_handle_at 5001 5002open_by_handle_at=no 5003cat > $TMPC << EOF 5004#include <fcntl.h> 5005#if !defined(AT_EMPTY_PATH) 5006# error missing definition 5007#else 5008int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5009#endif 5010EOF 5011if compile_prog "" "" ; then 5012 open_by_handle_at=yes 5013fi 5014 5015######################################## 5016# check if we have linux/magic.h 5017 5018linux_magic_h=no 5019cat > $TMPC << EOF 5020#include <linux/magic.h> 5021int main(void) { 5022 return 0; 5023} 5024EOF 5025if compile_prog "" "" ; then 5026 linux_magic_h=yes 5027fi 5028 5029######################################## 5030# check whether we can disable warning option with a pragma (this is needed 5031# to silence warnings in the headers of some versions of external libraries). 5032# This test has to be compiled with -Werror as otherwise an unknown pragma is 5033# only a warning. 5034# 5035# If we can't selectively disable warning in the code, disable -Werror so that 5036# the build doesn't fail anyway. 5037 5038pragma_disable_unused_but_set=no 5039cat > $TMPC << EOF 5040#pragma GCC diagnostic push 5041#pragma GCC diagnostic ignored "-Wstrict-prototypes" 5042#pragma GCC diagnostic pop 5043 5044int main(void) { 5045 return 0; 5046} 5047EOF 5048if compile_prog "-Werror" "" ; then 5049 pragma_diagnostic_available=yes 5050else 5051 werror=no 5052fi 5053 5054######################################## 5055# check if we have valgrind/valgrind.h 5056 5057valgrind_h=no 5058cat > $TMPC << EOF 5059#include <valgrind/valgrind.h> 5060int main(void) { 5061 return 0; 5062} 5063EOF 5064if compile_prog "" "" ; then 5065 valgrind_h=yes 5066fi 5067 5068######################################## 5069# check if environ is declared 5070 5071has_environ=no 5072cat > $TMPC << EOF 5073#include <unistd.h> 5074int main(void) { 5075 environ = 0; 5076 return 0; 5077} 5078EOF 5079if compile_prog "" "" ; then 5080 has_environ=yes 5081fi 5082 5083######################################## 5084# check if cpuid.h is usable. 5085 5086cat > $TMPC << EOF 5087#include <cpuid.h> 5088int main(void) { 5089 unsigned a, b, c, d; 5090 int max = __get_cpuid_max(0, 0); 5091 5092 if (max >= 1) { 5093 __cpuid(1, a, b, c, d); 5094 } 5095 5096 if (max >= 7) { 5097 __cpuid_count(7, 0, a, b, c, d); 5098 } 5099 5100 return 0; 5101} 5102EOF 5103if compile_prog "" "" ; then 5104 cpuid_h=yes 5105fi 5106 5107########################################## 5108# avx2 optimization requirement check 5109# 5110# There is no point enabling this if cpuid.h is not usable, 5111# since we won't be able to select the new routines. 5112 5113if test "$cpuid_h" = "yes" -a "$avx2_opt" != "no"; then 5114 cat > $TMPC << EOF 5115#pragma GCC push_options 5116#pragma GCC target("avx2") 5117#include <cpuid.h> 5118#include <immintrin.h> 5119static int bar(void *a) { 5120 __m256i x = *(__m256i *)a; 5121 return _mm256_testz_si256(x, x); 5122} 5123int main(int argc, char *argv[]) { return bar(argv[0]); } 5124EOF 5125 if compile_object "" ; then 5126 avx2_opt="yes" 5127 else 5128 avx2_opt="no" 5129 fi 5130fi 5131 5132######################################## 5133# check if __[u]int128_t is usable. 5134 5135int128=no 5136cat > $TMPC << EOF 5137__int128_t a; 5138__uint128_t b; 5139int main (void) { 5140 a = a + b; 5141 b = a * b; 5142 a = a * a; 5143 return 0; 5144} 5145EOF 5146if compile_prog "" "" ; then 5147 int128=yes 5148fi 5149 5150######################################### 5151# See if 128-bit atomic operations are supported. 5152 5153atomic128=no 5154if test "$int128" = "yes"; then 5155 cat > $TMPC << EOF 5156int main(void) 5157{ 5158 unsigned __int128 x = 0, y = 0; 5159 y = __atomic_load_16(&x, 0); 5160 __atomic_store_16(&x, y, 0); 5161 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5162 return 0; 5163} 5164EOF 5165 if compile_prog "" "" ; then 5166 atomic128=yes 5167 fi 5168fi 5169 5170cmpxchg128=no 5171if test "$int128" = yes -a "$atomic128" = no; then 5172 cat > $TMPC << EOF 5173int main(void) 5174{ 5175 unsigned __int128 x = 0, y = 0; 5176 __sync_val_compare_and_swap_16(&x, y, x); 5177 return 0; 5178} 5179EOF 5180 if compile_prog "" "" ; then 5181 cmpxchg128=yes 5182 fi 5183fi 5184 5185######################################### 5186# See if 64-bit atomic operations are supported. 5187# Note that without __atomic builtins, we can only 5188# assume atomic loads/stores max at pointer size. 5189 5190cat > $TMPC << EOF 5191#include <stdint.h> 5192int main(void) 5193{ 5194 uint64_t x = 0, y = 0; 5195#ifdef __ATOMIC_RELAXED 5196 y = __atomic_load_8(&x, 0); 5197 __atomic_store_8(&x, y, 0); 5198 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5199 __atomic_exchange_8(&x, y, 0); 5200 __atomic_fetch_add_8(&x, y, 0); 5201#else 5202 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5203 __sync_lock_test_and_set(&x, y); 5204 __sync_val_compare_and_swap(&x, y, 0); 5205 __sync_fetch_and_add(&x, y); 5206#endif 5207 return 0; 5208} 5209EOF 5210if compile_prog "" "" ; then 5211 atomic64=yes 5212fi 5213 5214######################################## 5215# See if 16-byte vector operations are supported. 5216# Even without a vector unit the compiler may expand these. 5217# There is a bug in old GCC for PPC that crashes here. 5218# Unfortunately it's the system compiler for Centos 7. 5219 5220cat > $TMPC << EOF 5221typedef unsigned char U1 __attribute__((vector_size(16))); 5222typedef unsigned short U2 __attribute__((vector_size(16))); 5223typedef unsigned int U4 __attribute__((vector_size(16))); 5224typedef unsigned long long U8 __attribute__((vector_size(16))); 5225typedef signed char S1 __attribute__((vector_size(16))); 5226typedef signed short S2 __attribute__((vector_size(16))); 5227typedef signed int S4 __attribute__((vector_size(16))); 5228typedef signed long long S8 __attribute__((vector_size(16))); 5229static U1 a1, b1; 5230static U2 a2, b2; 5231static U4 a4, b4; 5232static U8 a8, b8; 5233static S1 c1; 5234static S2 c2; 5235static S4 c4; 5236static S8 c8; 5237static int i; 5238void helper(void *d, void *a, int shift, int i); 5239void helper(void *d, void *a, int shift, int i) 5240{ 5241 *(U1 *)(d + i) = *(U1 *)(a + i) << shift; 5242 *(U2 *)(d + i) = *(U2 *)(a + i) << shift; 5243 *(U4 *)(d + i) = *(U4 *)(a + i) << shift; 5244 *(U8 *)(d + i) = *(U8 *)(a + i) << shift; 5245} 5246int main(void) 5247{ 5248 a1 += b1; a2 += b2; a4 += b4; a8 += b8; 5249 a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8; 5250 a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8; 5251 a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8; 5252 a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8; 5253 a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8; 5254 a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i; 5255 a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i; 5256 c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i; 5257 return 0; 5258} 5259EOF 5260 5261vector16=no 5262if compile_prog "" "" ; then 5263 vector16=yes 5264fi 5265 5266######################################## 5267# check if getauxval is available. 5268 5269getauxval=no 5270cat > $TMPC << EOF 5271#include <sys/auxv.h> 5272int main(void) { 5273 return getauxval(AT_HWCAP) == 0; 5274} 5275EOF 5276if compile_prog "" "" ; then 5277 getauxval=yes 5278fi 5279 5280######################################## 5281# check if ccache is interfering with 5282# semantic analysis of macros 5283 5284unset CCACHE_CPP2 5285ccache_cpp2=no 5286cat > $TMPC << EOF 5287static const int Z = 1; 5288#define fn() ({ Z; }) 5289#define TAUT(X) ((X) == Z) 5290#define PAREN(X, Y) (X == Y) 5291#define ID(X) (X) 5292int main(int argc, char *argv[]) 5293{ 5294 int x = 0, y = 0; 5295 x = ID(x); 5296 x = fn(); 5297 fn(); 5298 if (PAREN(x, y)) return 0; 5299 if (TAUT(Z)) return 0; 5300 return 0; 5301} 5302EOF 5303 5304if ! compile_object "-Werror"; then 5305 ccache_cpp2=yes 5306fi 5307 5308################################################# 5309# clang does not support glibc + FORTIFY_SOURCE. 5310 5311if test "$fortify_source" != "no"; then 5312 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5313 fortify_source="no"; 5314 elif test -n "$cxx" && has $cxx && 5315 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5316 fortify_source="no"; 5317 else 5318 fortify_source="yes" 5319 fi 5320fi 5321 5322############################################### 5323# Check if copy_file_range is provided by glibc 5324have_copy_file_range=no 5325cat > $TMPC << EOF 5326#include <unistd.h> 5327int main(void) { 5328 copy_file_range(0, NULL, 0, NULL, 0, 0); 5329 return 0; 5330} 5331EOF 5332if compile_prog "" "" ; then 5333 have_copy_file_range=yes 5334fi 5335 5336########################################## 5337# check if struct fsxattr is available via linux/fs.h 5338 5339have_fsxattr=no 5340cat > $TMPC << EOF 5341#include <linux/fs.h> 5342struct fsxattr foo; 5343int main(void) { 5344 return 0; 5345} 5346EOF 5347if compile_prog "" "" ; then 5348 have_fsxattr=yes 5349fi 5350 5351########################################## 5352# check for usable membarrier system call 5353if test "$membarrier" = "yes"; then 5354 have_membarrier=no 5355 if test "$mingw32" = "yes" ; then 5356 have_membarrier=yes 5357 elif test "$linux" = "yes" ; then 5358 cat > $TMPC << EOF 5359 #include <linux/membarrier.h> 5360 #include <sys/syscall.h> 5361 #include <unistd.h> 5362 #include <stdlib.h> 5363 int main(void) { 5364 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5365 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5366 exit(0); 5367 } 5368EOF 5369 if compile_prog "" "" ; then 5370 have_membarrier=yes 5371 fi 5372 fi 5373 if test "$have_membarrier" = "no"; then 5374 feature_not_found "membarrier" "membarrier system call not available" 5375 fi 5376else 5377 # Do not enable it by default even for Mingw32, because it doesn't 5378 # work on Wine. 5379 membarrier=no 5380fi 5381 5382########################################## 5383# check if rtnetlink.h exists and is useful 5384have_rtnetlink=no 5385cat > $TMPC << EOF 5386#include <linux/rtnetlink.h> 5387int main(void) { 5388 return IFLA_PROTO_DOWN; 5389} 5390EOF 5391if compile_prog "" "" ; then 5392 have_rtnetlink=yes 5393fi 5394 5395########################################## 5396# check for usable AF_VSOCK environment 5397have_af_vsock=no 5398cat > $TMPC << EOF 5399#include <errno.h> 5400#include <sys/types.h> 5401#include <sys/socket.h> 5402#if !defined(AF_VSOCK) 5403# error missing AF_VSOCK flag 5404#endif 5405#include <linux/vm_sockets.h> 5406int main(void) { 5407 int sock, ret; 5408 struct sockaddr_vm svm; 5409 socklen_t len = sizeof(svm); 5410 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5411 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5412 if ((ret == -1) && (errno == ENOTCONN)) { 5413 return 0; 5414 } 5415 return -1; 5416} 5417EOF 5418if compile_prog "" "" ; then 5419 have_af_vsock=yes 5420fi 5421 5422########################################## 5423# check for usable AF_ALG environment 5424hava_afalg=no 5425cat > $TMPC << EOF 5426#include <errno.h> 5427#include <sys/types.h> 5428#include <sys/socket.h> 5429#include <linux/if_alg.h> 5430int main(void) { 5431 int sock; 5432 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5433 return sock; 5434} 5435EOF 5436if compile_prog "" "" ; then 5437 have_afalg=yes 5438fi 5439if test "$crypto_afalg" = "yes" 5440then 5441 if test "$have_afalg" != "yes" 5442 then 5443 error_exit "AF_ALG requested but could not be detected" 5444 fi 5445fi 5446 5447 5448################################################# 5449# Check to see if we have the Hypervisor framework 5450if [ "$darwin" = "yes" ] ; then 5451 cat > $TMPC << EOF 5452#include <Hypervisor/hv.h> 5453int main() { return 0;} 5454EOF 5455 if ! compile_object ""; then 5456 hvf='no' 5457 else 5458 hvf='yes' 5459 LDFLAGS="-framework Hypervisor $LDFLAGS" 5460 fi 5461fi 5462 5463################################################# 5464# Sparc implicitly links with --relax, which is 5465# incompatible with -r, so --no-relax should be 5466# given. It does no harm to give it on other 5467# platforms too. 5468 5469# Note: the prototype is needed since QEMU_CFLAGS 5470# contains -Wmissing-prototypes 5471cat > $TMPC << EOF 5472extern int foo(void); 5473int foo(void) { return 0; } 5474EOF 5475if ! compile_object ""; then 5476 error_exit "Failed to compile object file for LD_REL_FLAGS test" 5477fi 5478for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 5479 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 5480 LD_REL_FLAGS=$i 5481 break 5482 fi 5483done 5484if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 5485 feature_not_found "modules" "Cannot find how to build relocatable objects" 5486fi 5487 5488########################################## 5489# check for sysmacros.h 5490 5491have_sysmacros=no 5492cat > $TMPC << EOF 5493#include <sys/sysmacros.h> 5494int main(void) { 5495 return makedev(0, 0); 5496} 5497EOF 5498if compile_prog "" "" ; then 5499 have_sysmacros=yes 5500fi 5501 5502########################################## 5503# Veritas HyperScale block driver VxHS 5504# Check if libvxhs is installed 5505 5506if test "$vxhs" != "no" ; then 5507 cat > $TMPC <<EOF 5508#include <stdint.h> 5509#include <qnio/qnio_api.h> 5510 5511void *vxhs_callback; 5512 5513int main(void) { 5514 iio_init(QNIO_VERSION, vxhs_callback); 5515 return 0; 5516} 5517EOF 5518 vxhs_libs="-lvxhs -lssl" 5519 if compile_prog "" "$vxhs_libs" ; then 5520 vxhs=yes 5521 else 5522 if test "$vxhs" = "yes" ; then 5523 feature_not_found "vxhs block device" "Install libvxhs See github" 5524 fi 5525 vxhs=no 5526 fi 5527fi 5528 5529########################################## 5530# check for _Static_assert() 5531 5532have_static_assert=no 5533cat > $TMPC << EOF 5534_Static_assert(1, "success"); 5535int main(void) { 5536 return 0; 5537} 5538EOF 5539if compile_prog "" "" ; then 5540 have_static_assert=yes 5541fi 5542 5543########################################## 5544# check for utmpx.h, it is missing e.g. on OpenBSD 5545 5546have_utmpx=no 5547cat > $TMPC << EOF 5548#include <utmpx.h> 5549struct utmpx user_info; 5550int main(void) { 5551 return 0; 5552} 5553EOF 5554if compile_prog "" "" ; then 5555 have_utmpx=yes 5556fi 5557 5558########################################## 5559# checks for sanitizers 5560 5561have_asan=no 5562have_ubsan=no 5563have_asan_iface_h=no 5564have_asan_iface_fiber=no 5565 5566if test "$sanitizers" = "yes" ; then 5567 write_c_skeleton 5568 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 5569 have_asan=yes 5570 fi 5571 5572 # we could use a simple skeleton for flags checks, but this also 5573 # detect the static linking issue of ubsan, see also: 5574 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 5575 cat > $TMPC << EOF 5576#include <stdlib.h> 5577int main(void) { 5578 void *tmp = malloc(10); 5579 return *(int *)(tmp + 2); 5580} 5581EOF 5582 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 5583 have_ubsan=yes 5584 fi 5585 5586 if check_include "sanitizer/asan_interface.h" ; then 5587 have_asan_iface_h=yes 5588 fi 5589 5590 cat > $TMPC << EOF 5591#include <sanitizer/asan_interface.h> 5592int main(void) { 5593 __sanitizer_start_switch_fiber(0, 0, 0); 5594 return 0; 5595} 5596EOF 5597 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 5598 have_asan_iface_fiber=yes 5599 fi 5600fi 5601 5602########################################## 5603# Docker and cross-compiler support 5604# 5605# This is specifically for building test 5606# cases for foreign architectures, not 5607# cross-compiling QEMU itself. 5608 5609if has "docker"; then 5610 docker=$($python $source_path/tests/docker/docker.py probe) 5611fi 5612 5613########################################## 5614# check for libpmem 5615 5616if test "$libpmem" != "no"; then 5617 if $pkg_config --exists "libpmem"; then 5618 libpmem="yes" 5619 libpmem_libs=$($pkg_config --libs libpmem) 5620 libpmem_cflags=$($pkg_config --cflags libpmem) 5621 libs_softmmu="$libs_softmmu $libpmem_libs" 5622 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 5623 else 5624 if test "$libpmem" = "yes" ; then 5625 feature_not_found "libpmem" "Install nvml or pmdk" 5626 fi 5627 libpmem="no" 5628 fi 5629fi 5630 5631########################################## 5632# End of CC checks 5633# After here, no more $cc or $ld runs 5634 5635write_c_skeleton 5636 5637if test "$gcov" = "yes" ; then 5638 CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS" 5639 LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS" 5640elif test "$fortify_source" = "yes" ; then 5641 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 5642elif test "$debug" = "no"; then 5643 CFLAGS="-O2 $CFLAGS" 5644fi 5645 5646if test "$have_asan" = "yes"; then 5647 CFLAGS="-fsanitize=address $CFLAGS" 5648 if test "$have_asan_iface_h" = "no" ; then 5649 echo "ASAN build enabled, but ASAN header missing." \ 5650 "Without code annotation, the report may be inferior." 5651 elif test "$have_asan_iface_fiber" = "no" ; then 5652 echo "ASAN build enabled, but ASAN header is too old." \ 5653 "Without code annotation, the report may be inferior." 5654 fi 5655fi 5656if test "$have_ubsan" = "yes"; then 5657 CFLAGS="-fsanitize=undefined $CFLAGS" 5658fi 5659 5660########################################## 5661# Do we have libnfs 5662if test "$libnfs" != "no" ; then 5663 if $pkg_config --atleast-version=1.9.3 libnfs; then 5664 libnfs="yes" 5665 libnfs_libs=$($pkg_config --libs libnfs) 5666 else 5667 if test "$libnfs" = "yes" ; then 5668 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 5669 fi 5670 libnfs="no" 5671 fi 5672fi 5673 5674########################################## 5675# Do we have libudev 5676if test "$libudev" != "no" ; then 5677 if $pkg_config libudev && test "$static" != "yes"; then 5678 libudev="yes" 5679 libudev_libs=$($pkg_config --libs libudev) 5680 else 5681 libudev="no" 5682 fi 5683fi 5684 5685# Now we've finished running tests it's OK to add -Werror to the compiler flags 5686if test "$werror" = "yes"; then 5687 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 5688fi 5689 5690if test "$solaris" = "no" ; then 5691 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 5692 LDFLAGS="-Wl,--warn-common $LDFLAGS" 5693 fi 5694fi 5695 5696# test if pod2man has --utf8 option 5697if pod2man --help | grep -q utf8; then 5698 POD2MAN="pod2man --utf8" 5699else 5700 POD2MAN="pod2man" 5701fi 5702 5703# Use ASLR, no-SEH and DEP if available 5704if test "$mingw32" = "yes" ; then 5705 for flag in --dynamicbase --no-seh --nxcompat; do 5706 if ld_has $flag ; then 5707 LDFLAGS="-Wl,$flag $LDFLAGS" 5708 fi 5709 done 5710fi 5711 5712qemu_confdir=$sysconfdir$confsuffix 5713qemu_moddir=$libdir$confsuffix 5714qemu_datadir=$datadir$confsuffix 5715qemu_localedir="$datadir/locale" 5716 5717# We can only support ivshmem if we have eventfd 5718if [ "$eventfd" = "yes" ]; then 5719 ivshmem=yes 5720fi 5721 5722tools="" 5723if test "$want_tools" = "yes" ; then 5724 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools" 5725 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 5726 tools="qemu-nbd\$(EXESUF) $tools" 5727 fi 5728 if [ "$ivshmem" = "yes" ]; then 5729 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 5730 fi 5731 if [ "$posix" = "yes" ] && [ "$curl" = "yes" ]; then 5732 tools="elf2dmp $tools" 5733 fi 5734fi 5735if test "$softmmu" = yes ; then 5736 if test "$linux" = yes; then 5737 if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then 5738 virtfs=yes 5739 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 5740 else 5741 if test "$virtfs" = yes; then 5742 error_exit "VirtFS requires libcap devel and libattr devel" 5743 fi 5744 virtfs=no 5745 fi 5746 if test "$mpath" != no && test "$mpathpersist" = yes ; then 5747 mpath=yes 5748 else 5749 if test "$mpath" = yes; then 5750 error_exit "Multipath requires libmpathpersist devel" 5751 fi 5752 mpath=no 5753 fi 5754 tools="$tools scsi/qemu-pr-helper\$(EXESUF)" 5755 else 5756 if test "$virtfs" = yes; then 5757 error_exit "VirtFS is supported only on Linux" 5758 fi 5759 virtfs=no 5760 if test "$mpath" = yes; then 5761 error_exit "Multipath is supported only on Linux" 5762 fi 5763 mpath=no 5764 fi 5765 if test "$xkbcommon" = "yes"; then 5766 tools="qemu-keymap\$(EXESUF) $tools" 5767 fi 5768fi 5769 5770# Probe for guest agent support/options 5771 5772if [ "$guest_agent" != "no" ]; then 5773 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 5774 tools="qemu-ga $tools" 5775 guest_agent=yes 5776 elif [ "$guest_agent" != yes ]; then 5777 guest_agent=no 5778 else 5779 error_exit "Guest agent is not supported on this platform" 5780 fi 5781fi 5782 5783# Guest agent Window MSI package 5784 5785if test "$guest_agent" != yes; then 5786 if test "$guest_agent_msi" = yes; then 5787 error_exit "MSI guest agent package requires guest agent enabled" 5788 fi 5789 guest_agent_msi=no 5790elif test "$mingw32" != "yes"; then 5791 if test "$guest_agent_msi" = "yes"; then 5792 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 5793 fi 5794 guest_agent_msi=no 5795elif ! has wixl; then 5796 if test "$guest_agent_msi" = "yes"; then 5797 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 5798 fi 5799 guest_agent_msi=no 5800else 5801 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 5802 # disabled explicitly 5803 if test "$guest_agent_msi" != "no"; then 5804 guest_agent_msi=yes 5805 fi 5806fi 5807 5808if test "$guest_agent_msi" = "yes"; then 5809 if test "$guest_agent_with_vss" = "yes"; then 5810 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 5811 fi 5812 5813 if test "$QEMU_GA_MANUFACTURER" = ""; then 5814 QEMU_GA_MANUFACTURER=QEMU 5815 fi 5816 5817 if test "$QEMU_GA_DISTRO" = ""; then 5818 QEMU_GA_DISTRO=Linux 5819 fi 5820 5821 if test "$QEMU_GA_VERSION" = ""; then 5822 QEMU_GA_VERSION=$(cat $source_path/VERSION) 5823 fi 5824 5825 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 5826 5827 case "$cpu" in 5828 x86_64) 5829 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 5830 ;; 5831 i386) 5832 QEMU_GA_MSI_ARCH="-D Arch=32" 5833 ;; 5834 *) 5835 error_exit "CPU $cpu not supported for building installation package" 5836 ;; 5837 esac 5838fi 5839 5840# Mac OS X ships with a broken assembler 5841roms= 5842if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \ 5843 "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \ 5844 "$softmmu" = yes ; then 5845 # Different host OS linkers have different ideas about the name of the ELF 5846 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 5847 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 5848 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 5849 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 5850 ld_i386_emulation="$emu" 5851 roms="optionrom" 5852 break 5853 fi 5854 done 5855fi 5856if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then 5857 roms="$roms spapr-rtas" 5858fi 5859 5860if test "$cpu" = "s390x" ; then 5861 roms="$roms s390-ccw" 5862fi 5863 5864# Probe for the need for relocating the user-only binary. 5865if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 5866 textseg_addr= 5867 case "$cpu" in 5868 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 5869 # ??? Rationale for choosing this address 5870 textseg_addr=0x60000000 5871 ;; 5872 mips) 5873 # A 256M aligned address, high in the address space, with enough 5874 # room for the code_gen_buffer above it before the stack. 5875 textseg_addr=0x60000000 5876 ;; 5877 esac 5878 if [ -n "$textseg_addr" ]; then 5879 cat > $TMPC <<EOF 5880 int main(void) { return 0; } 5881EOF 5882 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 5883 if ! compile_prog "" "$textseg_ldflags"; then 5884 # In case ld does not support -Ttext-segment, edit the default linker 5885 # script via sed to set the .text start addr. This is needed on FreeBSD 5886 # at least. 5887 if ! $ld --verbose >/dev/null 2>&1; then 5888 error_exit \ 5889 "We need to link the QEMU user mode binaries at a" \ 5890 "specific text address. Unfortunately your linker" \ 5891 "doesn't support either the -Ttext-segment option or" \ 5892 "printing the default linker script with --verbose." \ 5893 "If you don't want the user mode binaries, pass the" \ 5894 "--disable-user option to configure." 5895 fi 5896 5897 $ld --verbose | sed \ 5898 -e '1,/==================================================/d' \ 5899 -e '/==================================================/,$d' \ 5900 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 5901 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 5902 textseg_ldflags="-Wl,-T../config-host.ld" 5903 fi 5904 fi 5905fi 5906 5907# Check that the C++ compiler exists and works with the C compiler. 5908# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 5909if has $cxx; then 5910 cat > $TMPC <<EOF 5911int c_function(void); 5912int main(void) { return c_function(); } 5913EOF 5914 5915 compile_object 5916 5917 cat > $TMPCXX <<EOF 5918extern "C" { 5919 int c_function(void); 5920} 5921int c_function(void) { return 42; } 5922EOF 5923 5924 update_cxxflags 5925 5926 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then 5927 # C++ compiler $cxx works ok with C compiler $cc 5928 : 5929 else 5930 echo "C++ compiler $cxx does not work with C compiler $cc" 5931 echo "Disabling C++ specific optional code" 5932 cxx= 5933 fi 5934else 5935 echo "No C++ compiler available; disabling C++ specific optional code" 5936 cxx= 5937fi 5938 5939echo_version() { 5940 if test "$1" = "yes" ; then 5941 echo "($2)" 5942 fi 5943} 5944 5945# prepend pixman and ftd flags after all config tests are done 5946QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 5947QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 5948libs_softmmu="$pixman_libs $libs_softmmu" 5949 5950echo "Install prefix $prefix" 5951echo "BIOS directory $(eval echo $qemu_datadir)" 5952echo "firmware path $(eval echo $firmwarepath)" 5953echo "binary directory $(eval echo $bindir)" 5954echo "library directory $(eval echo $libdir)" 5955echo "module directory $(eval echo $qemu_moddir)" 5956echo "libexec directory $(eval echo $libexecdir)" 5957echo "include directory $(eval echo $includedir)" 5958echo "config directory $(eval echo $sysconfdir)" 5959if test "$mingw32" = "no" ; then 5960echo "local state directory $(eval echo $local_statedir)" 5961echo "Manual directory $(eval echo $mandir)" 5962echo "ELF interp prefix $interp_prefix" 5963else 5964echo "local state directory queried at runtime" 5965echo "Windows SDK $win_sdk" 5966fi 5967echo "Source path $source_path" 5968echo "GIT binary $git" 5969echo "GIT submodules $git_submodules" 5970echo "C compiler $cc" 5971echo "Host C compiler $host_cc" 5972echo "C++ compiler $cxx" 5973echo "Objective-C compiler $objcc" 5974echo "ARFLAGS $ARFLAGS" 5975echo "CFLAGS $CFLAGS" 5976echo "QEMU_CFLAGS $QEMU_CFLAGS" 5977echo "LDFLAGS $LDFLAGS" 5978echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 5979echo "make $make" 5980echo "install $install" 5981echo "python $python" 5982if test "$slirp" = "yes" ; then 5983 echo "smbd $smbd" 5984fi 5985echo "module support $modules" 5986echo "host CPU $cpu" 5987echo "host big endian $bigendian" 5988echo "target list $target_list" 5989echo "gprof enabled $gprof" 5990echo "sparse enabled $sparse" 5991echo "strip binaries $strip_opt" 5992echo "profiler $profiler" 5993echo "static build $static" 5994if test "$darwin" = "yes" ; then 5995 echo "Cocoa support $cocoa" 5996fi 5997echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 5998echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 5999echo "GTK GL support $gtk_gl" 6000echo "VTE support $vte $(echo_version $vte $vteversion)" 6001echo "TLS priority $tls_priority" 6002echo "GNUTLS support $gnutls" 6003echo "libgcrypt $gcrypt" 6004echo "nettle $nettle $(echo_version $nettle $nettle_version)" 6005echo "libtasn1 $tasn1" 6006echo "curses support $curses" 6007echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 6008echo "curl support $curl" 6009echo "mingw32 support $mingw32" 6010echo "Audio drivers $audio_drv_list" 6011echo "Block whitelist (rw) $block_drv_rw_whitelist" 6012echo "Block whitelist (ro) $block_drv_ro_whitelist" 6013echo "VirtFS support $virtfs" 6014echo "Multipath support $mpath" 6015echo "VNC support $vnc" 6016if test "$vnc" = "yes" ; then 6017 echo "VNC SASL support $vnc_sasl" 6018 echo "VNC JPEG support $vnc_jpeg" 6019 echo "VNC PNG support $vnc_png" 6020fi 6021if test -n "$sparc_cpu"; then 6022 echo "Target Sparc Arch $sparc_cpu" 6023fi 6024echo "xen support $xen" 6025if test "$xen" = "yes" ; then 6026 echo "xen ctrl version $xen_ctrl_version" 6027 echo "pv dom build $xen_pv_domain_build" 6028fi 6029echo "brlapi support $brlapi" 6030echo "bluez support $bluez" 6031echo "Documentation $docs" 6032echo "PIE $pie" 6033echo "vde support $vde" 6034echo "netmap support $netmap" 6035echo "Linux AIO support $linux_aio" 6036echo "ATTR/XATTR support $attr" 6037echo "Install blobs $blobs" 6038echo "KVM support $kvm" 6039echo "HAX support $hax" 6040echo "HVF support $hvf" 6041echo "WHPX support $whpx" 6042echo "TCG support $tcg" 6043if test "$tcg" = "yes" ; then 6044 echo "TCG debug enabled $debug_tcg" 6045 echo "TCG interpreter $tcg_interpreter" 6046fi 6047echo "malloc trim support $malloc_trim" 6048echo "RDMA support $rdma" 6049echo "PVRDMA support $pvrdma" 6050echo "fdt support $fdt" 6051echo "membarrier $membarrier" 6052echo "preadv support $preadv" 6053echo "fdatasync $fdatasync" 6054echo "madvise $madvise" 6055echo "posix_madvise $posix_madvise" 6056echo "posix_memalign $posix_memalign" 6057echo "libcap-ng support $cap_ng" 6058echo "vhost-net support $vhost_net" 6059echo "vhost-crypto support $vhost_crypto" 6060echo "vhost-scsi support $vhost_scsi" 6061echo "vhost-vsock support $vhost_vsock" 6062echo "vhost-user support $vhost_user" 6063echo "Trace backends $trace_backends" 6064if have_backend "simple"; then 6065echo "Trace output file $trace_file-<pid>" 6066fi 6067echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6068echo "rbd support $rbd" 6069echo "xfsctl support $xfs" 6070echo "smartcard support $smartcard" 6071echo "libusb $libusb" 6072echo "usb net redir $usb_redir" 6073echo "OpenGL support $opengl" 6074echo "OpenGL dmabufs $opengl_dmabuf" 6075echo "libiscsi support $libiscsi" 6076echo "libnfs support $libnfs" 6077echo "build guest agent $guest_agent" 6078echo "QGA VSS support $guest_agent_with_vss" 6079echo "QGA w32 disk info $guest_agent_ntddscsi" 6080echo "QGA MSI support $guest_agent_msi" 6081echo "seccomp support $seccomp" 6082echo "coroutine backend $coroutine" 6083echo "coroutine pool $coroutine_pool" 6084echo "debug stack usage $debug_stack_usage" 6085echo "mutex debugging $debug_mutex" 6086echo "crypto afalg $crypto_afalg" 6087echo "GlusterFS support $glusterfs" 6088echo "gcov $gcov_tool" 6089echo "gcov enabled $gcov" 6090echo "TPM support $tpm" 6091echo "libssh2 support $libssh2" 6092echo "TPM passthrough $tpm_passthrough" 6093echo "TPM emulator $tpm_emulator" 6094echo "QOM debugging $qom_cast_debug" 6095echo "Live block migration $live_block_migration" 6096echo "lzo support $lzo" 6097echo "snappy support $snappy" 6098echo "bzip2 support $bzip2" 6099echo "NUMA host support $numa" 6100echo "libxml2 $libxml2" 6101echo "tcmalloc support $tcmalloc" 6102echo "jemalloc support $jemalloc" 6103echo "avx2 optimization $avx2_opt" 6104echo "replication support $replication" 6105echo "VxHS block device $vxhs" 6106echo "bochs support $bochs" 6107echo "cloop support $cloop" 6108echo "dmg support $dmg" 6109echo "qcow v1 support $qcow1" 6110echo "vdi support $vdi" 6111echo "vvfat support $vvfat" 6112echo "qed support $qed" 6113echo "parallels support $parallels" 6114echo "sheepdog support $sheepdog" 6115echo "capstone $capstone" 6116echo "docker $docker" 6117echo "libpmem support $libpmem" 6118echo "libudev $libudev" 6119 6120if test "$sdl_too_old" = "yes"; then 6121echo "-> Your SDL version is too old - please upgrade to have SDL support" 6122fi 6123 6124if test "$sdlabi" = "1.2"; then 6125 echo 6126 echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in" 6127 echo "WARNING: future releases. Please switch to using SDL 2.0" 6128fi 6129 6130if test "$supported_cpu" = "no"; then 6131 echo 6132 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 6133 echo 6134 echo "CPU host architecture $cpu support is not currently maintained." 6135 echo "The QEMU project intends to remove support for this host CPU in" 6136 echo "a future release if nobody volunteers to maintain it and to" 6137 echo "provide a build host for our continuous integration setup." 6138 echo "configure has succeeded and you can continue to build, but" 6139 echo "if you care about QEMU on this platform you should contact" 6140 echo "us upstream at qemu-devel@nongnu.org." 6141fi 6142 6143if test "$supported_os" = "no"; then 6144 echo 6145 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 6146 echo 6147 echo "Host OS $targetos support is not currently maintained." 6148 echo "The QEMU project intends to remove support for this host OS in" 6149 echo "a future release if nobody volunteers to maintain it and to" 6150 echo "provide a build host for our continuous integration setup." 6151 echo "configure has succeeded and you can continue to build, but" 6152 echo "if you care about QEMU on this platform you should contact" 6153 echo "us upstream at qemu-devel@nongnu.org." 6154fi 6155 6156config_host_mak="config-host.mak" 6157 6158echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6159 6160echo "# Automatically generated by configure - do not modify" > $config_host_mak 6161echo >> $config_host_mak 6162 6163echo all: >> $config_host_mak 6164echo "prefix=$prefix" >> $config_host_mak 6165echo "bindir=$bindir" >> $config_host_mak 6166echo "libdir=$libdir" >> $config_host_mak 6167echo "libexecdir=$libexecdir" >> $config_host_mak 6168echo "includedir=$includedir" >> $config_host_mak 6169echo "mandir=$mandir" >> $config_host_mak 6170echo "sysconfdir=$sysconfdir" >> $config_host_mak 6171echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6172echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6173echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6174echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 6175echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6176if test "$mingw32" = "no" ; then 6177 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6178fi 6179echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6180echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6181echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 6182echo "GIT=$git" >> $config_host_mak 6183echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6184echo "GIT_UPDATE=$git_update" >> $config_host_mak 6185 6186echo "ARCH=$ARCH" >> $config_host_mak 6187 6188if test "$debug_tcg" = "yes" ; then 6189 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6190fi 6191if test "$strip_opt" = "yes" ; then 6192 echo "STRIP=${strip}" >> $config_host_mak 6193fi 6194if test "$bigendian" = "yes" ; then 6195 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6196fi 6197if test "$mingw32" = "yes" ; then 6198 echo "CONFIG_WIN32=y" >> $config_host_mak 6199 rc_version=$(cat $source_path/VERSION) 6200 version_major=${rc_version%%.*} 6201 rc_version=${rc_version#*.} 6202 version_minor=${rc_version%%.*} 6203 rc_version=${rc_version#*.} 6204 version_subminor=${rc_version%%.*} 6205 version_micro=0 6206 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6207 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6208 if test "$guest_agent_with_vss" = "yes" ; then 6209 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6210 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6211 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6212 fi 6213 if test "$guest_agent_ntddscsi" = "yes" ; then 6214 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 6215 fi 6216 if test "$guest_agent_msi" = "yes"; then 6217 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6218 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6219 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6220 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6221 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6222 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6223 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6224 fi 6225else 6226 echo "CONFIG_POSIX=y" >> $config_host_mak 6227fi 6228 6229if test "$linux" = "yes" ; then 6230 echo "CONFIG_LINUX=y" >> $config_host_mak 6231fi 6232 6233if test "$darwin" = "yes" ; then 6234 echo "CONFIG_DARWIN=y" >> $config_host_mak 6235fi 6236 6237if test "$solaris" = "yes" ; then 6238 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6239fi 6240if test "$haiku" = "yes" ; then 6241 echo "CONFIG_HAIKU=y" >> $config_host_mak 6242fi 6243if test "$static" = "yes" ; then 6244 echo "CONFIG_STATIC=y" >> $config_host_mak 6245fi 6246if test "$profiler" = "yes" ; then 6247 echo "CONFIG_PROFILER=y" >> $config_host_mak 6248fi 6249if test "$slirp" = "yes" ; then 6250 echo "CONFIG_SLIRP=y" >> $config_host_mak 6251 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6252fi 6253if test "$vde" = "yes" ; then 6254 echo "CONFIG_VDE=y" >> $config_host_mak 6255 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6256fi 6257if test "$netmap" = "yes" ; then 6258 echo "CONFIG_NETMAP=y" >> $config_host_mak 6259fi 6260if test "$l2tpv3" = "yes" ; then 6261 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6262fi 6263if test "$cap_ng" = "yes" ; then 6264 echo "CONFIG_LIBCAP=y" >> $config_host_mak 6265fi 6266echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6267for drv in $audio_drv_list; do 6268 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6269 case "$drv" in 6270 alsa | oss | pa | sdl) 6271 echo "$def=m" >> $config_host_mak ;; 6272 *) 6273 echo "$def=y" >> $config_host_mak ;; 6274 esac 6275done 6276echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6277echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6278echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6279echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6280echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6281if test "$audio_pt_int" = "yes" ; then 6282 echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak 6283fi 6284if test "$audio_win_int" = "yes" ; then 6285 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6286fi 6287echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6288echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6289if test "$vnc" = "yes" ; then 6290 echo "CONFIG_VNC=y" >> $config_host_mak 6291fi 6292if test "$vnc_sasl" = "yes" ; then 6293 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 6294fi 6295if test "$vnc_jpeg" = "yes" ; then 6296 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 6297fi 6298if test "$vnc_png" = "yes" ; then 6299 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 6300fi 6301if test "$xkbcommon" = "yes" ; then 6302 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 6303 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 6304fi 6305if test "$fnmatch" = "yes" ; then 6306 echo "CONFIG_FNMATCH=y" >> $config_host_mak 6307fi 6308if test "$xfs" = "yes" ; then 6309 echo "CONFIG_XFS=y" >> $config_host_mak 6310fi 6311qemu_version=$(head $source_path/VERSION) 6312echo "VERSION=$qemu_version" >>$config_host_mak 6313echo "PKGVERSION=$pkgversion" >>$config_host_mak 6314echo "SRC_PATH=$source_path" >> $config_host_mak 6315echo "TARGET_DIRS=$target_list" >> $config_host_mak 6316if [ "$docs" = "yes" ] ; then 6317 echo "BUILD_DOCS=yes" >> $config_host_mak 6318fi 6319if test "$modules" = "yes"; then 6320 # $shacmd can generate a hash started with digit, which the compiler doesn't 6321 # like as an symbol. So prefix it with an underscore 6322 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6323 echo "CONFIG_MODULES=y" >> $config_host_mak 6324fi 6325if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then 6326 echo "CONFIG_X11=y" >> $config_host_mak 6327 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6328 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6329fi 6330if test "$sdl" = "yes" ; then 6331 echo "CONFIG_SDL=m" >> $config_host_mak 6332 echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak 6333 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 6334 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 6335fi 6336if test "$cocoa" = "yes" ; then 6337 echo "CONFIG_COCOA=y" >> $config_host_mak 6338fi 6339if test "$curses" = "yes" ; then 6340 echo "CONFIG_CURSES=m" >> $config_host_mak 6341 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6342 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6343fi 6344if test "$pipe2" = "yes" ; then 6345 echo "CONFIG_PIPE2=y" >> $config_host_mak 6346fi 6347if test "$accept4" = "yes" ; then 6348 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 6349fi 6350if test "$splice" = "yes" ; then 6351 echo "CONFIG_SPLICE=y" >> $config_host_mak 6352fi 6353if test "$eventfd" = "yes" ; then 6354 echo "CONFIG_EVENTFD=y" >> $config_host_mak 6355fi 6356if test "$memfd" = "yes" ; then 6357 echo "CONFIG_MEMFD=y" >> $config_host_mak 6358fi 6359if test "$have_usbfs" = "yes" ; then 6360 echo "CONFIG_USBFS=y" >> $config_host_mak 6361fi 6362if test "$fallocate" = "yes" ; then 6363 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 6364fi 6365if test "$fallocate_punch_hole" = "yes" ; then 6366 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 6367fi 6368if test "$fallocate_zero_range" = "yes" ; then 6369 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 6370fi 6371if test "$posix_fallocate" = "yes" ; then 6372 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 6373fi 6374if test "$sync_file_range" = "yes" ; then 6375 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 6376fi 6377if test "$fiemap" = "yes" ; then 6378 echo "CONFIG_FIEMAP=y" >> $config_host_mak 6379fi 6380if test "$dup3" = "yes" ; then 6381 echo "CONFIG_DUP3=y" >> $config_host_mak 6382fi 6383if test "$ppoll" = "yes" ; then 6384 echo "CONFIG_PPOLL=y" >> $config_host_mak 6385fi 6386if test "$prctl_pr_set_timerslack" = "yes" ; then 6387 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 6388fi 6389if test "$epoll" = "yes" ; then 6390 echo "CONFIG_EPOLL=y" >> $config_host_mak 6391fi 6392if test "$epoll_create1" = "yes" ; then 6393 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 6394fi 6395if test "$sendfile" = "yes" ; then 6396 echo "CONFIG_SENDFILE=y" >> $config_host_mak 6397fi 6398if test "$timerfd" = "yes" ; then 6399 echo "CONFIG_TIMERFD=y" >> $config_host_mak 6400fi 6401if test "$setns" = "yes" ; then 6402 echo "CONFIG_SETNS=y" >> $config_host_mak 6403fi 6404if test "$clock_adjtime" = "yes" ; then 6405 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 6406fi 6407if test "$syncfs" = "yes" ; then 6408 echo "CONFIG_SYNCFS=y" >> $config_host_mak 6409fi 6410if test "$inotify" = "yes" ; then 6411 echo "CONFIG_INOTIFY=y" >> $config_host_mak 6412fi 6413if test "$inotify1" = "yes" ; then 6414 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 6415fi 6416if test "$sem_timedwait" = "yes" ; then 6417 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 6418fi 6419if test "$strchrnul" = "yes" ; then 6420 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 6421fi 6422if test "$byteswap_h" = "yes" ; then 6423 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 6424fi 6425if test "$bswap_h" = "yes" ; then 6426 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 6427fi 6428if test "$curl" = "yes" ; then 6429 echo "CONFIG_CURL=m" >> $config_host_mak 6430 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 6431 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 6432fi 6433if test "$brlapi" = "yes" ; then 6434 echo "CONFIG_BRLAPI=y" >> $config_host_mak 6435 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 6436fi 6437if test "$bluez" = "yes" ; then 6438 echo "CONFIG_BLUEZ=y" >> $config_host_mak 6439 echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak 6440fi 6441if test "$gtk" = "yes" ; then 6442 echo "CONFIG_GTK=m" >> $config_host_mak 6443 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 6444 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 6445 if test "$gtk_gl" = "yes" ; then 6446 echo "CONFIG_GTK_GL=y" >> $config_host_mak 6447 fi 6448fi 6449echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 6450if test "$gnutls" = "yes" ; then 6451 echo "CONFIG_GNUTLS=y" >> $config_host_mak 6452fi 6453if test "$gcrypt" = "yes" ; then 6454 echo "CONFIG_GCRYPT=y" >> $config_host_mak 6455 if test "$gcrypt_hmac" = "yes" ; then 6456 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 6457 fi 6458fi 6459if test "$nettle" = "yes" ; then 6460 echo "CONFIG_NETTLE=y" >> $config_host_mak 6461 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 6462fi 6463if test "$tasn1" = "yes" ; then 6464 echo "CONFIG_TASN1=y" >> $config_host_mak 6465fi 6466if test "$have_ifaddrs_h" = "yes" ; then 6467 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 6468fi 6469if test "$have_broken_size_max" = "yes" ; then 6470 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 6471fi 6472 6473# Work around a system header bug with some kernel/XFS header 6474# versions where they both try to define 'struct fsxattr': 6475# xfs headers will not try to redefine structs from linux headers 6476# if this macro is set. 6477if test "$have_fsxattr" = "yes" ; then 6478 echo "HAVE_FSXATTR=y" >> $config_host_mak 6479fi 6480if test "$have_copy_file_range" = "yes" ; then 6481 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 6482fi 6483if test "$vte" = "yes" ; then 6484 echo "CONFIG_VTE=y" >> $config_host_mak 6485 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 6486 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 6487fi 6488if test "$virglrenderer" = "yes" ; then 6489 echo "CONFIG_VIRGL=y" >> $config_host_mak 6490 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 6491 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 6492fi 6493if test "$xen" = "yes" ; then 6494 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 6495 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 6496 if test "$xen_pv_domain_build" = "yes" ; then 6497 echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak 6498 fi 6499fi 6500if test "$linux_aio" = "yes" ; then 6501 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 6502fi 6503if test "$attr" = "yes" ; then 6504 echo "CONFIG_ATTR=y" >> $config_host_mak 6505fi 6506if test "$libattr" = "yes" ; then 6507 echo "CONFIG_LIBATTR=y" >> $config_host_mak 6508fi 6509if test "$virtfs" = "yes" ; then 6510 echo "CONFIG_VIRTFS=y" >> $config_host_mak 6511fi 6512if test "$mpath" = "yes" ; then 6513 echo "CONFIG_MPATH=y" >> $config_host_mak 6514 if test "$mpathpersist_new_api" = "yes"; then 6515 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 6516 fi 6517fi 6518if test "$vhost_scsi" = "yes" ; then 6519 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 6520fi 6521if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then 6522 echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak 6523fi 6524if test "$vhost_crypto" = "yes" ; then 6525 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 6526fi 6527if test "$vhost_vsock" = "yes" ; then 6528 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 6529fi 6530if test "$vhost_user" = "yes" ; then 6531 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 6532fi 6533if test "$blobs" = "yes" ; then 6534 echo "INSTALL_BLOBS=yes" >> $config_host_mak 6535fi 6536if test "$iovec" = "yes" ; then 6537 echo "CONFIG_IOVEC=y" >> $config_host_mak 6538fi 6539if test "$preadv" = "yes" ; then 6540 echo "CONFIG_PREADV=y" >> $config_host_mak 6541fi 6542if test "$fdt" != "no" ; then 6543 echo "CONFIG_FDT=y" >> $config_host_mak 6544fi 6545if test "$membarrier" = "yes" ; then 6546 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 6547fi 6548if test "$signalfd" = "yes" ; then 6549 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 6550fi 6551if test "$tcg" = "yes"; then 6552 echo "CONFIG_TCG=y" >> $config_host_mak 6553 if test "$tcg_interpreter" = "yes" ; then 6554 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 6555 fi 6556fi 6557if test "$fdatasync" = "yes" ; then 6558 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 6559fi 6560if test "$madvise" = "yes" ; then 6561 echo "CONFIG_MADVISE=y" >> $config_host_mak 6562fi 6563if test "$posix_madvise" = "yes" ; then 6564 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 6565fi 6566if test "$posix_memalign" = "yes" ; then 6567 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 6568fi 6569 6570if test "$spice" = "yes" ; then 6571 echo "CONFIG_SPICE=y" >> $config_host_mak 6572fi 6573 6574if test "$smartcard" = "yes" ; then 6575 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 6576 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 6577 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 6578fi 6579 6580if test "$libusb" = "yes" ; then 6581 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 6582 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 6583 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 6584fi 6585 6586if test "$usb_redir" = "yes" ; then 6587 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 6588 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 6589 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 6590fi 6591 6592if test "$opengl" = "yes" ; then 6593 echo "CONFIG_OPENGL=y" >> $config_host_mak 6594 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 6595 if test "$opengl_dmabuf" = "yes" ; then 6596 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 6597 fi 6598fi 6599 6600if test "$malloc_trim" = "yes" ; then 6601 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 6602fi 6603 6604if test "$avx2_opt" = "yes" ; then 6605 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 6606fi 6607 6608if test "$lzo" = "yes" ; then 6609 echo "CONFIG_LZO=y" >> $config_host_mak 6610fi 6611 6612if test "$snappy" = "yes" ; then 6613 echo "CONFIG_SNAPPY=y" >> $config_host_mak 6614fi 6615 6616if test "$bzip2" = "yes" ; then 6617 echo "CONFIG_BZIP2=y" >> $config_host_mak 6618 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 6619fi 6620 6621if test "$libiscsi" = "yes" ; then 6622 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 6623 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 6624 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 6625fi 6626 6627if test "$libnfs" = "yes" ; then 6628 echo "CONFIG_LIBNFS=m" >> $config_host_mak 6629 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 6630fi 6631 6632if test "$seccomp" = "yes"; then 6633 echo "CONFIG_SECCOMP=y" >> $config_host_mak 6634 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 6635 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 6636fi 6637 6638# XXX: suppress that 6639if [ "$bsd" = "yes" ] ; then 6640 echo "CONFIG_BSD=y" >> $config_host_mak 6641fi 6642 6643if test "$localtime_r" = "yes" ; then 6644 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 6645fi 6646if test "$qom_cast_debug" = "yes" ; then 6647 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 6648fi 6649if test "$rbd" = "yes" ; then 6650 echo "CONFIG_RBD=m" >> $config_host_mak 6651 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 6652 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 6653fi 6654 6655echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 6656if test "$coroutine_pool" = "yes" ; then 6657 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 6658else 6659 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 6660fi 6661 6662if test "$debug_stack_usage" = "yes" ; then 6663 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 6664fi 6665 6666if test "$crypto_afalg" = "yes" ; then 6667 echo "CONFIG_AF_ALG=y" >> $config_host_mak 6668fi 6669 6670if test "$open_by_handle_at" = "yes" ; then 6671 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 6672fi 6673 6674if test "$linux_magic_h" = "yes" ; then 6675 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 6676fi 6677 6678if test "$pragma_diagnostic_available" = "yes" ; then 6679 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 6680fi 6681 6682if test "$valgrind_h" = "yes" ; then 6683 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 6684fi 6685 6686if test "$have_asan_iface_fiber" = "yes" ; then 6687 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 6688fi 6689 6690if test "$has_environ" = "yes" ; then 6691 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 6692fi 6693 6694if test "$cpuid_h" = "yes" ; then 6695 echo "CONFIG_CPUID_H=y" >> $config_host_mak 6696fi 6697 6698if test "$int128" = "yes" ; then 6699 echo "CONFIG_INT128=y" >> $config_host_mak 6700fi 6701 6702if test "$atomic128" = "yes" ; then 6703 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 6704fi 6705 6706if test "$cmpxchg128" = "yes" ; then 6707 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 6708fi 6709 6710if test "$atomic64" = "yes" ; then 6711 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 6712fi 6713 6714if test "$vector16" = "yes" ; then 6715 echo "CONFIG_VECTOR16=y" >> $config_host_mak 6716fi 6717 6718if test "$getauxval" = "yes" ; then 6719 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 6720fi 6721 6722if test "$glusterfs" = "yes" ; then 6723 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 6724 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 6725 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 6726fi 6727 6728if test "$glusterfs_xlator_opt" = "yes" ; then 6729 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 6730fi 6731 6732if test "$glusterfs_discard" = "yes" ; then 6733 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 6734fi 6735 6736if test "$glusterfs_fallocate" = "yes" ; then 6737 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 6738fi 6739 6740if test "$glusterfs_zerofill" = "yes" ; then 6741 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 6742fi 6743 6744if test "$libssh2" = "yes" ; then 6745 echo "CONFIG_LIBSSH2=m" >> $config_host_mak 6746 echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak 6747 echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak 6748fi 6749 6750if test "$live_block_migration" = "yes" ; then 6751 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 6752fi 6753 6754if test "$tpm" = "yes"; then 6755 echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak 6756 # TPM passthrough support? 6757 if test "$tpm_passthrough" = "yes"; then 6758 echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak 6759 fi 6760 # TPM emulator support? 6761 if test "$tpm_emulator" = "yes"; then 6762 echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak 6763 fi 6764fi 6765 6766echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 6767if have_backend "nop"; then 6768 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 6769fi 6770if have_backend "simple"; then 6771 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 6772 # Set the appropriate trace file. 6773 trace_file="\"$trace_file-\" FMT_pid" 6774fi 6775if have_backend "log"; then 6776 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 6777fi 6778if have_backend "ust"; then 6779 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 6780fi 6781if have_backend "dtrace"; then 6782 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 6783 if test "$trace_backend_stap" = "yes" ; then 6784 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 6785 fi 6786fi 6787if have_backend "ftrace"; then 6788 if test "$linux" = "yes" ; then 6789 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 6790 else 6791 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 6792 fi 6793fi 6794if have_backend "syslog"; then 6795 if test "$posix_syslog" = "yes" ; then 6796 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 6797 else 6798 feature_not_found "syslog(trace backend)" "syslog not available" 6799 fi 6800fi 6801echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 6802 6803if test "$rdma" = "yes" ; then 6804 echo "CONFIG_RDMA=y" >> $config_host_mak 6805 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 6806fi 6807 6808if test "$pvrdma" = "yes" ; then 6809 echo "CONFIG_PVRDMA=y" >> $config_host_mak 6810fi 6811 6812if test "$have_rtnetlink" = "yes" ; then 6813 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 6814fi 6815 6816if test "$libxml2" = "yes" ; then 6817 echo "CONFIG_LIBXML2=y" >> $config_host_mak 6818 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 6819 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 6820fi 6821 6822if test "$replication" = "yes" ; then 6823 echo "CONFIG_REPLICATION=y" >> $config_host_mak 6824fi 6825 6826if test "$have_af_vsock" = "yes" ; then 6827 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 6828fi 6829 6830if test "$have_sysmacros" = "yes" ; then 6831 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 6832fi 6833 6834if test "$have_static_assert" = "yes" ; then 6835 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 6836fi 6837 6838if test "$have_utmpx" = "yes" ; then 6839 echo "HAVE_UTMPX=y" >> $config_host_mak 6840fi 6841 6842if test "$ivshmem" = "yes" ; then 6843 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 6844fi 6845if test "$capstone" != "no" ; then 6846 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 6847fi 6848if test "$debug_mutex" = "yes" ; then 6849 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 6850fi 6851 6852# Hold two types of flag: 6853# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 6854# a thread we have a handle to 6855# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular 6856# platform 6857if test "$pthread_setname_np" = "yes" ; then 6858 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 6859 echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak 6860fi 6861 6862if test "$vxhs" = "yes" ; then 6863 echo "CONFIG_VXHS=y" >> $config_host_mak 6864 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 6865fi 6866 6867if test "$libpmem" = "yes" ; then 6868 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 6869fi 6870 6871if test "$bochs" = "yes" ; then 6872 echo "CONFIG_BOCHS=y" >> $config_host_mak 6873fi 6874if test "$cloop" = "yes" ; then 6875 echo "CONFIG_CLOOP=y" >> $config_host_mak 6876fi 6877if test "$dmg" = "yes" ; then 6878 echo "CONFIG_DMG=y" >> $config_host_mak 6879fi 6880if test "$qcow1" = "yes" ; then 6881 echo "CONFIG_QCOW1=y" >> $config_host_mak 6882fi 6883if test "$vdi" = "yes" ; then 6884 echo "CONFIG_VDI=y" >> $config_host_mak 6885fi 6886if test "$vvfat" = "yes" ; then 6887 echo "CONFIG_VVFAT=y" >> $config_host_mak 6888fi 6889if test "$qed" = "yes" ; then 6890 echo "CONFIG_QED=y" >> $config_host_mak 6891fi 6892if test "$parallels" = "yes" ; then 6893 echo "CONFIG_PARALLELS=y" >> $config_host_mak 6894fi 6895if test "$sheepdog" = "yes" ; then 6896 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 6897fi 6898 6899if test "$tcg_interpreter" = "yes"; then 6900 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 6901elif test "$ARCH" = "sparc64" ; then 6902 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 6903elif test "$ARCH" = "s390x" ; then 6904 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 6905elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then 6906 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 6907elif test "$ARCH" = "ppc64" ; then 6908 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 6909else 6910 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 6911fi 6912QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES" 6913 6914echo "TOOLS=$tools" >> $config_host_mak 6915echo "ROMS=$roms" >> $config_host_mak 6916echo "MAKE=$make" >> $config_host_mak 6917echo "INSTALL=$install" >> $config_host_mak 6918echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 6919echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 6920echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 6921echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 6922echo "PYTHON=$python" >> $config_host_mak 6923echo "CC=$cc" >> $config_host_mak 6924if $iasl -h > /dev/null 2>&1; then 6925 echo "IASL=$iasl" >> $config_host_mak 6926fi 6927echo "HOST_CC=$host_cc" >> $config_host_mak 6928echo "CXX=$cxx" >> $config_host_mak 6929echo "OBJCC=$objcc" >> $config_host_mak 6930echo "AR=$ar" >> $config_host_mak 6931echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 6932echo "AS=$as" >> $config_host_mak 6933echo "CCAS=$ccas" >> $config_host_mak 6934echo "CPP=$cpp" >> $config_host_mak 6935echo "OBJCOPY=$objcopy" >> $config_host_mak 6936echo "LD=$ld" >> $config_host_mak 6937echo "RANLIB=$ranlib" >> $config_host_mak 6938echo "NM=$nm" >> $config_host_mak 6939echo "WINDRES=$windres" >> $config_host_mak 6940echo "CFLAGS=$CFLAGS" >> $config_host_mak 6941echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 6942echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 6943echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 6944echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 6945if test "$sparse" = "yes" ; then 6946 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 6947 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 6948 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 6949 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 6950 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 6951fi 6952if test "$cross_prefix" != ""; then 6953 echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak 6954else 6955 echo "AUTOCONF_HOST := " >> $config_host_mak 6956fi 6957echo "LDFLAGS=$LDFLAGS" >> $config_host_mak 6958echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 6959echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 6960echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 6961echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 6962echo "LIBS+=$LIBS" >> $config_host_mak 6963echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 6964echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 6965echo "EXESUF=$EXESUF" >> $config_host_mak 6966echo "DSOSUF=$DSOSUF" >> $config_host_mak 6967echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 6968echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 6969echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 6970echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 6971echo "POD2MAN=$POD2MAN" >> $config_host_mak 6972if test "$gcov" = "yes" ; then 6973 echo "CONFIG_GCOV=y" >> $config_host_mak 6974 echo "GCOV=$gcov_tool" >> $config_host_mak 6975fi 6976 6977if test "$docker" != "no"; then 6978 echo "HAVE_USER_DOCKER=y" >> $config_host_mak 6979fi 6980 6981if test "$libudev" != "no"; then 6982 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 6983 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 6984fi 6985 6986# use included Linux headers 6987if test "$linux" = "yes" ; then 6988 mkdir -p linux-headers 6989 case "$cpu" in 6990 i386|x86_64|x32) 6991 linux_arch=x86 6992 ;; 6993 ppc|ppc64) 6994 linux_arch=powerpc 6995 ;; 6996 s390x) 6997 linux_arch=s390 6998 ;; 6999 aarch64) 7000 linux_arch=arm64 7001 ;; 7002 mips64) 7003 linux_arch=mips 7004 ;; 7005 *) 7006 # For most CPUs the kernel architecture name and QEMU CPU name match. 7007 linux_arch="$cpu" 7008 ;; 7009 esac 7010 # For non-KVM architectures we will not have asm headers 7011 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 7012 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 7013 fi 7014fi 7015 7016for target in $target_list; do 7017target_dir="$target" 7018config_target_mak=$target_dir/config-target.mak 7019target_name=$(echo $target | cut -d '-' -f 1) 7020target_bigendian="no" 7021 7022case "$target_name" in 7023 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 7024 target_bigendian=yes 7025 ;; 7026esac 7027target_softmmu="no" 7028target_user_only="no" 7029target_linux_user="no" 7030target_bsd_user="no" 7031case "$target" in 7032 ${target_name}-softmmu) 7033 target_softmmu="yes" 7034 ;; 7035 ${target_name}-linux-user) 7036 target_user_only="yes" 7037 target_linux_user="yes" 7038 ;; 7039 ${target_name}-bsd-user) 7040 target_user_only="yes" 7041 target_bsd_user="yes" 7042 ;; 7043 *) 7044 error_exit "Target '$target' not recognised" 7045 exit 1 7046 ;; 7047esac 7048 7049target_compiler="" 7050target_compiler_static="" 7051target_compiler_cflags="" 7052 7053mkdir -p $target_dir 7054echo "# Automatically generated by configure - do not modify" > $config_target_mak 7055 7056bflt="no" 7057mttcg="no" 7058interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7059gdb_xml_files="" 7060 7061TARGET_ARCH="$target_name" 7062TARGET_BASE_ARCH="" 7063TARGET_ABI_DIR="" 7064 7065case "$target_name" in 7066 i386) 7067 mttcg="yes" 7068 gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml" 7069 target_compiler=$cross_cc_i386 7070 target_compiler_cflags=$cross_cc_ccflags_i386 7071 ;; 7072 x86_64) 7073 TARGET_BASE_ARCH=i386 7074 mttcg="yes" 7075 gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml" 7076 target_compiler=$cross_cc_x86_64 7077 ;; 7078 alpha) 7079 mttcg="yes" 7080 target_compiler=$cross_cc_alpha 7081 ;; 7082 arm|armeb) 7083 TARGET_ARCH=arm 7084 bflt="yes" 7085 mttcg="yes" 7086 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7087 target_compiler=$cross_cc_arm 7088 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7089 ;; 7090 aarch64|aarch64_be) 7091 TARGET_ARCH=aarch64 7092 TARGET_BASE_ARCH=arm 7093 bflt="yes" 7094 mttcg="yes" 7095 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7096 target_compiler=$cross_cc_aarch64 7097 eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}" 7098 ;; 7099 cris) 7100 target_compiler=$cross_cc_cris 7101 ;; 7102 hppa) 7103 mttcg="yes" 7104 target_compiler=$cross_cc_hppa 7105 ;; 7106 lm32) 7107 target_compiler=$cross_cc_lm32 7108 ;; 7109 m68k) 7110 bflt="yes" 7111 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" 7112 target_compiler=$cross_cc_m68k 7113 ;; 7114 microblaze|microblazeel) 7115 TARGET_ARCH=microblaze 7116 bflt="yes" 7117 echo "TARGET_ABI32=y" >> $config_target_mak 7118 target_compiler=$cross_cc_microblaze 7119 ;; 7120 mips|mipsel) 7121 TARGET_ARCH=mips 7122 target_compiler=$cross_cc_mips 7123 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7124 ;; 7125 mipsn32|mipsn32el) 7126 TARGET_ARCH=mips64 7127 TARGET_BASE_ARCH=mips 7128 target_compiler=$cross_cc_mipsn32 7129 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7130 echo "TARGET_ABI32=y" >> $config_target_mak 7131 ;; 7132 mips64|mips64el) 7133 TARGET_ARCH=mips64 7134 TARGET_BASE_ARCH=mips 7135 target_compiler=$cross_cc_mips64 7136 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7137 ;; 7138 moxie) 7139 target_compiler=$cross_cc_moxie 7140 ;; 7141 nios2) 7142 target_compiler=$cross_cc_nios2 7143 ;; 7144 or1k) 7145 target_compiler=$cross_cc_or1k 7146 TARGET_ARCH=openrisc 7147 TARGET_BASE_ARCH=openrisc 7148 ;; 7149 ppc) 7150 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7151 target_compiler=$cross_cc_powerpc 7152 ;; 7153 ppc64) 7154 TARGET_BASE_ARCH=ppc 7155 TARGET_ABI_DIR=ppc 7156 mttcg=yes 7157 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7158 target_compiler=$cross_cc_ppc64 7159 ;; 7160 ppc64le) 7161 TARGET_ARCH=ppc64 7162 TARGET_BASE_ARCH=ppc 7163 TARGET_ABI_DIR=ppc 7164 mttcg=yes 7165 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7166 target_compiler=$cross_cc_ppc64le 7167 ;; 7168 ppc64abi32) 7169 TARGET_ARCH=ppc64 7170 TARGET_BASE_ARCH=ppc 7171 TARGET_ABI_DIR=ppc 7172 echo "TARGET_ABI32=y" >> $config_target_mak 7173 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7174 target_compiler=$cross_cc_ppc64abi32 7175 ;; 7176 riscv32) 7177 TARGET_BASE_ARCH=riscv 7178 TARGET_ABI_DIR=riscv 7179 mttcg=yes 7180 target_compiler=$cross_cc_riscv32 7181 ;; 7182 riscv64) 7183 TARGET_BASE_ARCH=riscv 7184 TARGET_ABI_DIR=riscv 7185 mttcg=yes 7186 target_compiler=$cross_cc_riscv64 7187 ;; 7188 sh4|sh4eb) 7189 TARGET_ARCH=sh4 7190 bflt="yes" 7191 target_compiler=$cross_cc_sh4 7192 ;; 7193 sparc) 7194 target_compiler=$cross_cc_sparc 7195 ;; 7196 sparc64) 7197 TARGET_BASE_ARCH=sparc 7198 target_compiler=$cross_cc_sparc64 7199 ;; 7200 sparc32plus) 7201 TARGET_ARCH=sparc64 7202 TARGET_BASE_ARCH=sparc 7203 TARGET_ABI_DIR=sparc 7204 target_compiler=$cross_cc_sparc32plus 7205 echo "TARGET_ABI32=y" >> $config_target_mak 7206 ;; 7207 s390x) 7208 mttcg=yes 7209 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7210 target_compiler=$cross_cc_s390x 7211 ;; 7212 tilegx) 7213 target_compiler=$cross_cc_tilegx 7214 ;; 7215 tricore) 7216 target_compiler=$cross_cc_tricore 7217 ;; 7218 unicore32) 7219 target_compiler=$cross_cc_unicore32 7220 ;; 7221 xtensa|xtensaeb) 7222 TARGET_ARCH=xtensa 7223 bflt="yes" 7224 mttcg="yes" 7225 target_compiler=$cross_cc_xtensa 7226 ;; 7227 *) 7228 error_exit "Unsupported target CPU" 7229 ;; 7230esac 7231# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7232if [ "$TARGET_BASE_ARCH" = "" ]; then 7233 TARGET_BASE_ARCH=$TARGET_ARCH 7234fi 7235 7236# Do we have a cross compiler for this target? 7237if has $target_compiler; then 7238 7239 write_c_skeleton 7240 7241 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then 7242 # For host systems we might get away with building without -static 7243 if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then 7244 target_compiler="" 7245 else 7246 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7247 target_compiler_static="n" 7248 fi 7249 else 7250 enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'" 7251 target_compiler_static="y" 7252 fi 7253else 7254 target_compiler="" 7255fi 7256 7257symlink "$source_path/Makefile.target" "$target_dir/Makefile" 7258 7259upper() { 7260 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7261} 7262 7263target_arch_name="$(upper $TARGET_ARCH)" 7264echo "TARGET_$target_arch_name=y" >> $config_target_mak 7265echo "TARGET_NAME=$target_name" >> $config_target_mak 7266echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 7267if [ "$TARGET_ABI_DIR" = "" ]; then 7268 TARGET_ABI_DIR=$TARGET_ARCH 7269fi 7270echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 7271if [ "$HOST_VARIANT_DIR" != "" ]; then 7272 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 7273fi 7274 7275if supported_xen_target $target; then 7276 echo "CONFIG_XEN=y" >> $config_target_mak 7277 if test "$xen_pci_passthrough" = yes; then 7278 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 7279 fi 7280fi 7281if supported_kvm_target $target; then 7282 echo "CONFIG_KVM=y" >> $config_target_mak 7283 if test "$vhost_net" = "yes" ; then 7284 echo "CONFIG_VHOST_NET=y" >> $config_target_mak 7285 if test "$vhost_user" = "yes" ; then 7286 echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak 7287 fi 7288 fi 7289fi 7290if supported_hax_target $target; then 7291 echo "CONFIG_HAX=y" >> $config_target_mak 7292fi 7293if supported_hvf_target $target; then 7294 echo "CONFIG_HVF=y" >> $config_target_mak 7295fi 7296if supported_whpx_target $target; then 7297 echo "CONFIG_WHPX=y" >> $config_target_mak 7298fi 7299if test "$target_bigendian" = "yes" ; then 7300 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 7301fi 7302if test "$target_softmmu" = "yes" ; then 7303 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 7304 if test "$mttcg" = "yes" ; then 7305 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 7306 fi 7307fi 7308if test "$target_user_only" = "yes" ; then 7309 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 7310 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 7311fi 7312if test "$target_linux_user" = "yes" ; then 7313 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 7314fi 7315list="" 7316if test ! -z "$gdb_xml_files" ; then 7317 for x in $gdb_xml_files; do 7318 list="$list $source_path/gdb-xml/$x" 7319 done 7320 echo "TARGET_XML_FILES=$list" >> $config_target_mak 7321fi 7322 7323if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then 7324 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 7325fi 7326if test "$target_bsd_user" = "yes" ; then 7327 echo "CONFIG_BSD_USER=y" >> $config_target_mak 7328fi 7329 7330if test -n "$target_compiler"; then 7331 echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak 7332 7333 if test -n "$target_compiler_static"; then 7334 echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak 7335 fi 7336 7337 if test -n "$target_compiler_cflags"; then 7338 echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak 7339 fi 7340fi 7341 7342 7343# generate QEMU_CFLAGS/LDFLAGS for targets 7344 7345cflags="" 7346ldflags="" 7347 7348disas_config() { 7349 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 7350 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 7351} 7352 7353for i in $ARCH $TARGET_BASE_ARCH ; do 7354 case "$i" in 7355 alpha) 7356 disas_config "ALPHA" 7357 ;; 7358 aarch64) 7359 if test -n "${cxx}"; then 7360 disas_config "ARM_A64" 7361 fi 7362 ;; 7363 arm) 7364 disas_config "ARM" 7365 if test -n "${cxx}"; then 7366 disas_config "ARM_A64" 7367 fi 7368 ;; 7369 cris) 7370 disas_config "CRIS" 7371 ;; 7372 hppa) 7373 disas_config "HPPA" 7374 ;; 7375 i386|x86_64|x32) 7376 disas_config "I386" 7377 ;; 7378 lm32) 7379 disas_config "LM32" 7380 ;; 7381 m68k) 7382 disas_config "M68K" 7383 ;; 7384 microblaze*) 7385 disas_config "MICROBLAZE" 7386 ;; 7387 mips*) 7388 disas_config "MIPS" 7389 if test -n "${cxx}"; then 7390 disas_config "NANOMIPS" 7391 fi 7392 ;; 7393 moxie*) 7394 disas_config "MOXIE" 7395 ;; 7396 nios2) 7397 disas_config "NIOS2" 7398 ;; 7399 or1k) 7400 disas_config "OPENRISC" 7401 ;; 7402 ppc*) 7403 disas_config "PPC" 7404 ;; 7405 riscv) 7406 disas_config "RISCV" 7407 ;; 7408 s390*) 7409 disas_config "S390" 7410 ;; 7411 sh4) 7412 disas_config "SH4" 7413 ;; 7414 sparc*) 7415 disas_config "SPARC" 7416 ;; 7417 xtensa*) 7418 disas_config "XTENSA" 7419 ;; 7420 esac 7421done 7422if test "$tcg_interpreter" = "yes" ; then 7423 disas_config "TCI" 7424fi 7425 7426case "$ARCH" in 7427alpha) 7428 # Ensure there's only a single GP 7429 cflags="-msmall-data $cflags" 7430;; 7431esac 7432 7433if test "$gprof" = "yes" ; then 7434 echo "TARGET_GPROF=yes" >> $config_target_mak 7435 if test "$target_linux_user" = "yes" ; then 7436 cflags="-p $cflags" 7437 ldflags="-p $ldflags" 7438 fi 7439 if test "$target_softmmu" = "yes" ; then 7440 ldflags="-p $ldflags" 7441 echo "GPROF_CFLAGS=-p" >> $config_target_mak 7442 fi 7443fi 7444 7445if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then 7446 ldflags="$ldflags $textseg_ldflags" 7447fi 7448 7449# Newer kernels on s390 check for an S390_PGSTE program header and 7450# enable the pgste page table extensions in that case. This makes 7451# the vm.allocate_pgste sysctl unnecessary. We enable this program 7452# header if 7453# - we build on s390x 7454# - we build the system emulation for s390x (qemu-system-s390x) 7455# - KVM is enabled 7456# - the linker supports --s390-pgste 7457if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes" -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then 7458 if ld_has --s390-pgste ; then 7459 ldflags="-Wl,--s390-pgste $ldflags" 7460 fi 7461fi 7462 7463echo "LDFLAGS+=$ldflags" >> $config_target_mak 7464echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 7465 7466done # for target in $targets 7467 7468if test -n "$enabled_cross_compilers"; then 7469 echo 7470 echo "NOTE: cross-compilers enabled: $enabled_cross_compilers" 7471fi 7472 7473if [ "$fdt" = "git" ]; then 7474 echo "config-host.h: subdir-dtc" >> $config_host_mak 7475fi 7476if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 7477 echo "config-host.h: subdir-capstone" >> $config_host_mak 7478fi 7479if test -n "$LIBCAPSTONE"; then 7480 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 7481fi 7482 7483if test "$numa" = "yes"; then 7484 echo "CONFIG_NUMA=y" >> $config_host_mak 7485fi 7486 7487if test "$ccache_cpp2" = "yes"; then 7488 echo "export CCACHE_CPP2=y" >> $config_host_mak 7489fi 7490 7491# If we're using a separate build tree, set it up now. 7492# DIRS are directories which we simply mkdir in the build tree; 7493# LINKS are things to symlink back into the source tree 7494# (these can be both files and directories). 7495# Caution: do not add files or directories here using wildcards. This 7496# will result in problems later if a new file matching the wildcard is 7497# added to the source tree -- nothing will cause configure to be rerun 7498# so the build tree will be missing the link back to the new file, and 7499# tests might fail. Prefer to keep the relevant files in their own 7500# directory and symlink the directory instead. 7501DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm" 7502DIRS="$DIRS tests/fp" 7503DIRS="$DIRS docs docs/interop fsdev scsi" 7504DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw" 7505DIRS="$DIRS roms/seabios roms/vgabios" 7506LINKS="Makefile tests/tcg/Makefile qdict-test-data.txt" 7507LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit" 7508LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile" 7509LINKS="$LINKS tests/fp/Makefile" 7510LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps" 7511LINKS="$LINKS pc-bios/spapr-rtas/Makefile" 7512LINKS="$LINKS pc-bios/s390-ccw/Makefile" 7513LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile" 7514LINKS="$LINKS pc-bios/qemu-icon.bmp" 7515LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 7516LINKS="$LINKS tests/acceptance tests/data" 7517LINKS="$LINKS tests/qemu-iotests/check" 7518for bios_file in \ 7519 $source_path/pc-bios/*.bin \ 7520 $source_path/pc-bios/*.lid \ 7521 $source_path/pc-bios/*.aml \ 7522 $source_path/pc-bios/*.rom \ 7523 $source_path/pc-bios/*.dtb \ 7524 $source_path/pc-bios/*.img \ 7525 $source_path/pc-bios/openbios-* \ 7526 $source_path/pc-bios/u-boot.* \ 7527 $source_path/pc-bios/palcode-* 7528do 7529 LINKS="$LINKS pc-bios/$(basename $bios_file)" 7530done 7531mkdir -p $DIRS 7532for f in $LINKS ; do 7533 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 7534 symlink "$source_path/$f" "$f" 7535 fi 7536done 7537 7538# temporary config to build submodules 7539for rom in seabios vgabios ; do 7540 config_mak=roms/$rom/config.mak 7541 echo "# Automatically generated by configure - do not modify" > $config_mak 7542 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 7543 echo "AS=$as" >> $config_mak 7544 echo "CCAS=$ccas" >> $config_mak 7545 echo "CC=$cc" >> $config_mak 7546 echo "BCC=bcc" >> $config_mak 7547 echo "CPP=$cpp" >> $config_mak 7548 echo "OBJCOPY=objcopy" >> $config_mak 7549 echo "IASL=$iasl" >> $config_mak 7550 echo "LD=$ld" >> $config_mak 7551 echo "RANLIB=$ranlib" >> $config_mak 7552done 7553 7554# set up qemu-iotests in this build directory 7555iotests_common_env="tests/qemu-iotests/common.env" 7556 7557echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 7558echo >> "$iotests_common_env" 7559echo "export PYTHON='$python'" >> "$iotests_common_env" 7560 7561# Save the configure command line for later reuse. 7562cat <<EOD >config.status 7563#!/bin/sh 7564# Generated by configure. 7565# Run this file to recreate the current configuration. 7566# Compiler output produced by configure, useful for debugging 7567# configure, is in config.log if it exists. 7568EOD 7569 7570preserve_env() { 7571 envname=$1 7572 7573 eval envval=\$$envname 7574 7575 if test -n "$envval" 7576 then 7577 echo "$envname='$envval'" >> config.status 7578 echo "export $envname" >> config.status 7579 else 7580 echo "unset $envname" >> config.status 7581 fi 7582} 7583 7584# Preserve various env variables that influence what 7585# features/build target configure will detect 7586preserve_env AR 7587preserve_env AS 7588preserve_env CC 7589preserve_env CPP 7590preserve_env CXX 7591preserve_env INSTALL 7592preserve_env LD 7593preserve_env LD_LIBRARY_PATH 7594preserve_env LIBTOOL 7595preserve_env MAKE 7596preserve_env NM 7597preserve_env OBJCOPY 7598preserve_env PATH 7599preserve_env PKG_CONFIG 7600preserve_env PKG_CONFIG_LIBDIR 7601preserve_env PKG_CONFIG_PATH 7602preserve_env PYTHON 7603preserve_env SDL_CONFIG 7604preserve_env SDL2_CONFIG 7605preserve_env SMBD 7606preserve_env STRIP 7607preserve_env WINDRES 7608 7609printf "exec" >>config.status 7610printf " '%s'" "$0" "$@" >>config.status 7611echo ' "$@"' >>config.status 7612chmod +x config.status 7613 7614rm -r "$TMPDIR1" 7615