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