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