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