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