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