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