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