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