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# libdrm check 3199have_drm_h=no 3200if check_include "libdrm/drm.h" ; then 3201 have_drm_h=yes 3202fi 3203 3204########################################## 3205# VTE probe 3206 3207if test "$vte" != "no"; then 3208 vteminversion="0.32.0" 3209 if $pkg_config --exists "vte-2.91"; then 3210 vtepackage="vte-2.91" 3211 else 3212 vtepackage="vte-2.90" 3213 fi 3214 if $pkg_config --exists "$vtepackage >= $vteminversion"; then 3215 vte_cflags=$($pkg_config --cflags $vtepackage) 3216 vte_libs=$($pkg_config --libs $vtepackage) 3217 vteversion=$($pkg_config --modversion $vtepackage) 3218 vte="yes" 3219 elif test "$vte" = "yes"; then 3220 feature_not_found "vte" "Install libvte-2.90/2.91 devel" 3221 else 3222 vte="no" 3223 fi 3224fi 3225 3226########################################## 3227# SDL probe 3228 3229# Look for sdl configuration program (pkg-config or sdl2-config). Try 3230# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config. 3231 3232sdl_probe () 3233{ 3234 if $pkg_config sdl2 --exists; then 3235 sdlconfig="$pkg_config sdl2" 3236 sdlversion=$($sdlconfig --modversion 2>/dev/null) 3237 elif has "$sdl2_config"; then 3238 sdlconfig="$sdl2_config" 3239 sdlversion=$($sdlconfig --version) 3240 else 3241 if test "$sdl" = "yes" ; then 3242 feature_not_found "sdl" "Install SDL2-devel" 3243 fi 3244 sdl=no 3245 # no need to do the rest 3246 return 3247 fi 3248 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then 3249 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2 3250 fi 3251 3252 cat > $TMPC << EOF 3253#include <SDL.h> 3254#undef main /* We don't want SDL to override our main() */ 3255int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } 3256EOF 3257 sdl_cflags=$($sdlconfig --cflags 2>/dev/null) 3258 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug 3259 if test "$static" = "yes" ; then 3260 if $pkg_config sdl2 --exists; then 3261 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null) 3262 else 3263 sdl_libs=$($sdlconfig --static-libs 2>/dev/null) 3264 fi 3265 else 3266 sdl_libs=$($sdlconfig --libs 2>/dev/null) 3267 fi 3268 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 3269 sdl=yes 3270 3271 # static link with sdl ? (note: sdl.pc's --static --libs is broken) 3272 if test "$sdl" = "yes" && test "$static" = "yes" ; then 3273 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then 3274 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)" 3275 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)" 3276 fi 3277 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 3278 : 3279 else 3280 sdl=no 3281 fi 3282 fi # static link 3283 else # sdl not found 3284 if test "$sdl" = "yes" ; then 3285 feature_not_found "sdl" "Install SDL2 devel" 3286 fi 3287 sdl=no 3288 fi # sdl compile test 3289} 3290 3291sdl_image_probe () 3292{ 3293 if test "$sdl_image" != "no" ; then 3294 if $pkg_config SDL2_image --exists; then 3295 if test "$static" = "yes"; then 3296 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null) 3297 else 3298 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null) 3299 fi 3300 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null) 3301 sdl_image=yes 3302 3303 sdl_cflags="$sdl_cflags $sdl_image_cflags" 3304 sdl_libs="$sdl_libs $sdl_image_libs" 3305 else 3306 if test "$sdl_image" = "yes" ; then 3307 feature_not_found "sdl_image" "Install SDL Image devel" 3308 else 3309 sdl_image=no 3310 fi 3311 fi 3312 fi 3313} 3314 3315if test "$sdl" != "no" ; then 3316 sdl_probe 3317fi 3318 3319if test "$sdl" = "yes" ; then 3320 sdl_image_probe 3321else 3322 if test "$sdl_image" = "yes"; then 3323 echo "warning: SDL Image requested, but SDL is not available, disabling" 3324 fi 3325 sdl_image=no 3326fi 3327 3328if test "$sdl" = "yes" ; then 3329 cat > $TMPC <<EOF 3330#include <SDL.h> 3331#if defined(SDL_VIDEO_DRIVER_X11) 3332#include <X11/XKBlib.h> 3333#else 3334#error No x11 support 3335#endif 3336int main(void) { return 0; } 3337EOF 3338 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then 3339 need_x11=yes 3340 sdl_cflags="$sdl_cflags $x11_cflags" 3341 sdl_libs="$sdl_libs $x11_libs" 3342 fi 3343fi 3344 3345########################################## 3346# RDMA needs OpenFabrics libraries 3347if test "$rdma" != "no" ; then 3348 cat > $TMPC <<EOF 3349#include <rdma/rdma_cma.h> 3350int main(void) { return 0; } 3351EOF 3352 rdma_libs="-lrdmacm -libverbs -libumad" 3353 if compile_prog "" "$rdma_libs" ; then 3354 rdma="yes" 3355 libs_softmmu="$libs_softmmu $rdma_libs" 3356 else 3357 if test "$rdma" = "yes" ; then 3358 error_exit \ 3359 " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 3360 " Your options:" \ 3361 " (1) Fast: Install infiniband packages (devel) from your distro." \ 3362 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 3363 " (3) Also: Install softiwarp if you don't have RDMA hardware" 3364 fi 3365 rdma="no" 3366 fi 3367fi 3368 3369########################################## 3370# PVRDMA detection 3371 3372cat > $TMPC <<EOF && 3373#include <sys/mman.h> 3374 3375int 3376main(void) 3377{ 3378 char buf = 0; 3379 void *addr = &buf; 3380 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 3381 3382 return 0; 3383} 3384EOF 3385 3386if test "$rdma" = "yes" ; then 3387 case "$pvrdma" in 3388 "") 3389 if compile_prog "" ""; then 3390 pvrdma="yes" 3391 else 3392 pvrdma="no" 3393 fi 3394 ;; 3395 "yes") 3396 if ! compile_prog "" ""; then 3397 error_exit "PVRDMA is not supported since mremap is not implemented" 3398 fi 3399 pvrdma="yes" 3400 ;; 3401 "no") 3402 pvrdma="no" 3403 ;; 3404 esac 3405else 3406 if test "$pvrdma" = "yes" ; then 3407 error_exit "PVRDMA requires rdma suppport" 3408 fi 3409 pvrdma="no" 3410fi 3411 3412# Let's see if enhanced reg_mr is supported 3413if test "$pvrdma" = "yes" ; then 3414 3415cat > $TMPC <<EOF && 3416#include <infiniband/verbs.h> 3417 3418int 3419main(void) 3420{ 3421 struct ibv_mr *mr; 3422 struct ibv_pd *pd = NULL; 3423 size_t length = 10; 3424 uint64_t iova = 0; 3425 int access = 0; 3426 void *addr = NULL; 3427 3428 mr = ibv_reg_mr_iova(pd, addr, length, iova, access); 3429 3430 ibv_dereg_mr(mr); 3431 3432 return 0; 3433} 3434EOF 3435 if ! compile_prog "" "-libverbs"; then 3436 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" 3437 fi 3438fi 3439 3440########################################## 3441# VNC SASL detection 3442if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then 3443 cat > $TMPC <<EOF 3444#include <sasl/sasl.h> 3445#include <stdio.h> 3446int main(void) { sasl_server_init(NULL, "qemu"); return 0; } 3447EOF 3448 # Assuming Cyrus-SASL installed in /usr prefix 3449 # QEMU defines struct iovec in "qemu/osdep.h", 3450 # we don't want libsasl to redefine it in <sasl/sasl.h>. 3451 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED" 3452 vnc_sasl_libs="-lsasl2" 3453 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then 3454 vnc_sasl=yes 3455 libs_softmmu="$vnc_sasl_libs $libs_softmmu" 3456 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags" 3457 else 3458 if test "$vnc_sasl" = "yes" ; then 3459 feature_not_found "vnc-sasl" "Install Cyrus SASL devel" 3460 fi 3461 vnc_sasl=no 3462 fi 3463fi 3464 3465########################################## 3466# VNC JPEG detection 3467if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then 3468cat > $TMPC <<EOF 3469#include <stdio.h> 3470#include <jpeglib.h> 3471int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; } 3472EOF 3473 vnc_jpeg_cflags="" 3474 vnc_jpeg_libs="-ljpeg" 3475 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then 3476 vnc_jpeg=yes 3477 libs_softmmu="$vnc_jpeg_libs $libs_softmmu" 3478 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags" 3479 else 3480 if test "$vnc_jpeg" = "yes" ; then 3481 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel" 3482 fi 3483 vnc_jpeg=no 3484 fi 3485fi 3486 3487########################################## 3488# VNC PNG detection 3489if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then 3490cat > $TMPC <<EOF 3491//#include <stdio.h> 3492#include <png.h> 3493#include <stddef.h> 3494int main(void) { 3495 png_structp png_ptr; 3496 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 3497 return png_ptr != 0; 3498} 3499EOF 3500 if $pkg_config libpng --exists; then 3501 vnc_png_cflags=$($pkg_config libpng --cflags) 3502 vnc_png_libs=$($pkg_config libpng --libs) 3503 else 3504 vnc_png_cflags="" 3505 vnc_png_libs="-lpng" 3506 fi 3507 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then 3508 vnc_png=yes 3509 libs_softmmu="$vnc_png_libs $libs_softmmu" 3510 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags" 3511 else 3512 if test "$vnc_png" = "yes" ; then 3513 feature_not_found "vnc-png" "Install libpng devel" 3514 fi 3515 vnc_png=no 3516 fi 3517fi 3518 3519########################################## 3520# xkbcommon probe 3521if test "$xkbcommon" != "no" ; then 3522 if $pkg_config xkbcommon --exists; then 3523 xkbcommon_cflags=$($pkg_config xkbcommon --cflags) 3524 xkbcommon_libs=$($pkg_config xkbcommon --libs) 3525 xkbcommon=yes 3526 else 3527 if test "$xkbcommon" = "yes" ; then 3528 feature_not_found "xkbcommon" "Install libxkbcommon-devel" 3529 fi 3530 xkbcommon=no 3531 fi 3532fi 3533 3534 3535########################################## 3536# xfsctl() probe, used for file-posix.c 3537if test "$xfs" != "no" ; then 3538 cat > $TMPC << EOF 3539#include <stddef.h> /* NULL */ 3540#include <xfs/xfs.h> 3541int main(void) 3542{ 3543 xfsctl(NULL, 0, 0, NULL); 3544 return 0; 3545} 3546EOF 3547 if compile_prog "" "" ; then 3548 xfs="yes" 3549 else 3550 if test "$xfs" = "yes" ; then 3551 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel" 3552 fi 3553 xfs=no 3554 fi 3555fi 3556 3557########################################## 3558# vde libraries probe 3559if test "$vde" != "no" ; then 3560 vde_libs="-lvdeplug" 3561 cat > $TMPC << EOF 3562#include <libvdeplug.h> 3563int main(void) 3564{ 3565 struct vde_open_args a = {0, 0, 0}; 3566 char s[] = ""; 3567 vde_open(s, s, &a); 3568 return 0; 3569} 3570EOF 3571 if compile_prog "" "$vde_libs" ; then 3572 vde=yes 3573 else 3574 if test "$vde" = "yes" ; then 3575 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" 3576 fi 3577 vde=no 3578 fi 3579fi 3580 3581########################################## 3582# netmap support probe 3583# Apart from looking for netmap headers, we make sure that the host API version 3584# supports the netmap backend (>=11). The upper bound (15) is meant to simulate 3585# a minor/major version number. Minor new features will be marked with values up 3586# to 15, and if something happens that requires a change to the backend we will 3587# move above 15, submit the backend fixes and modify this two bounds. 3588if test "$netmap" != "no" ; then 3589 cat > $TMPC << EOF 3590#include <inttypes.h> 3591#include <net/if.h> 3592#include <net/netmap.h> 3593#include <net/netmap_user.h> 3594#if (NETMAP_API < 11) || (NETMAP_API > 15) 3595#error 3596#endif 3597int main(void) { return 0; } 3598EOF 3599 if compile_prog "" "" ; then 3600 netmap=yes 3601 else 3602 if test "$netmap" = "yes" ; then 3603 feature_not_found "netmap" 3604 fi 3605 netmap=no 3606 fi 3607fi 3608 3609########################################## 3610# libcap-ng library probe 3611if test "$cap_ng" != "no" ; then 3612 cap_libs="-lcap-ng" 3613 cat > $TMPC << EOF 3614#include <cap-ng.h> 3615int main(void) 3616{ 3617 capng_capability_to_name(CAPNG_EFFECTIVE); 3618 return 0; 3619} 3620EOF 3621 if compile_prog "" "$cap_libs" ; then 3622 cap_ng=yes 3623 libs_tools="$cap_libs $libs_tools" 3624 else 3625 if test "$cap_ng" = "yes" ; then 3626 feature_not_found "cap_ng" "Install libcap-ng devel" 3627 fi 3628 cap_ng=no 3629 fi 3630fi 3631 3632########################################## 3633# Sound support libraries probe 3634 3635audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') 3636for drv in $audio_drv_list; do 3637 case $drv in 3638 alsa | try-alsa) 3639 if $pkg_config alsa --exists; then 3640 alsa_libs=$($pkg_config alsa --libs) 3641 if test "$drv" = "try-alsa"; then 3642 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/') 3643 fi 3644 else 3645 if test "$drv" = "try-alsa"; then 3646 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//') 3647 else 3648 error_exit "$drv check failed" \ 3649 "Make sure to have the $drv libs and headers installed." 3650 fi 3651 fi 3652 ;; 3653 3654 pa | try-pa) 3655 if $pkg_config libpulse --exists; then 3656 pulse_libs=$($pkg_config libpulse --libs) 3657 if test "$drv" = "try-pa"; then 3658 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/') 3659 fi 3660 else 3661 if test "$drv" = "try-pa"; then 3662 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//') 3663 else 3664 error_exit "$drv check failed" \ 3665 "Make sure to have the $drv libs and headers installed." 3666 fi 3667 fi 3668 ;; 3669 3670 sdl) 3671 if test "$sdl" = "no"; then 3672 error_exit "sdl not found or disabled, can not use sdl audio driver" 3673 fi 3674 ;; 3675 3676 try-sdl) 3677 if test "$sdl" = "no"; then 3678 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//') 3679 else 3680 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/') 3681 fi 3682 ;; 3683 3684 coreaudio) 3685 coreaudio_libs="-framework CoreAudio" 3686 ;; 3687 3688 dsound) 3689 dsound_libs="-lole32 -ldxguid" 3690 audio_win_int="yes" 3691 ;; 3692 3693 oss) 3694 oss_libs="$oss_lib" 3695 ;; 3696 3697 jack | try-jack) 3698 if $pkg_config jack --exists; then 3699 jack_libs=$($pkg_config jack --libs) 3700 if test "$drv" = "try-jack"; then 3701 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/') 3702 fi 3703 else 3704 if test "$drv" = "try-jack"; then 3705 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//') 3706 else 3707 error_exit "$drv check failed" \ 3708 "Make sure to have the $drv libs and headers installed." 3709 fi 3710 fi 3711 ;; 3712 3713 *) 3714 echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { 3715 error_exit "Unknown driver '$drv' selected" \ 3716 "Possible drivers are: $audio_possible_drivers" 3717 } 3718 ;; 3719 esac 3720done 3721 3722########################################## 3723# BrlAPI probe 3724 3725if test "$brlapi" != "no" ; then 3726 brlapi_libs="-lbrlapi" 3727 cat > $TMPC << EOF 3728#include <brlapi.h> 3729#include <stddef.h> 3730int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } 3731EOF 3732 if compile_prog "" "$brlapi_libs" ; then 3733 brlapi=yes 3734 else 3735 if test "$brlapi" = "yes" ; then 3736 feature_not_found "brlapi" "Install brlapi devel" 3737 fi 3738 brlapi=no 3739 fi 3740fi 3741 3742########################################## 3743# iconv probe 3744if test "$iconv" != "no" ; then 3745 cat > $TMPC << EOF 3746#include <iconv.h> 3747int main(void) { 3748 iconv_t conv = iconv_open("WCHAR_T", "UCS-2"); 3749 return conv != (iconv_t) -1; 3750} 3751EOF 3752 iconv_prefix_list="/usr/local:/usr" 3753 iconv_lib_list=":-liconv" 3754 IFS=: 3755 for iconv_prefix in $iconv_prefix_list; do 3756 IFS=: 3757 iconv_cflags="-I$iconv_prefix/include" 3758 iconv_ldflags="-L$iconv_prefix/lib" 3759 for iconv_link in $iconv_lib_list; do 3760 unset IFS 3761 iconv_lib="$iconv_ldflags $iconv_link" 3762 echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log 3763 if compile_prog "$iconv_cflags" "$iconv_lib" ; then 3764 iconv_found=yes 3765 break 3766 fi 3767 done 3768 if test "$iconv_found" = yes ; then 3769 break 3770 fi 3771 done 3772 if test "$iconv_found" = "yes" ; then 3773 iconv=yes 3774 else 3775 if test "$iconv" = "yes" ; then 3776 feature_not_found "iconv" "Install iconv devel" 3777 fi 3778 iconv=no 3779 fi 3780fi 3781 3782########################################## 3783# curses probe 3784if test "$iconv" = "no" ; then 3785 # curses will need iconv 3786 curses=no 3787fi 3788if test "$curses" != "no" ; then 3789 if test "$mingw32" = "yes" ; then 3790 curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):" 3791 curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses" 3792 else 3793 curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:" 3794 curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw" 3795 fi 3796 curses_found=no 3797 cat > $TMPC << EOF 3798#include <locale.h> 3799#include <curses.h> 3800#include <wchar.h> 3801#include <langinfo.h> 3802int main(void) { 3803 const char *codeset; 3804 wchar_t wch = L'w'; 3805 setlocale(LC_ALL, ""); 3806 resize_term(0, 0); 3807 addwstr(L"wide chars\n"); 3808 addnwstr(&wch, 1); 3809 add_wch(WACS_DEGREE); 3810 codeset = nl_langinfo(CODESET); 3811 return codeset != 0; 3812} 3813EOF 3814 IFS=: 3815 for curses_inc in $curses_inc_list; do 3816 # Make sure we get the wide character prototypes 3817 curses_inc="-DNCURSES_WIDECHAR $curses_inc" 3818 IFS=: 3819 for curses_lib in $curses_lib_list; do 3820 unset IFS 3821 if compile_prog "$curses_inc" "$curses_lib" ; then 3822 curses_found=yes 3823 break 3824 fi 3825 done 3826 if test "$curses_found" = yes ; then 3827 break 3828 fi 3829 done 3830 unset IFS 3831 if test "$curses_found" = "yes" ; then 3832 curses=yes 3833 else 3834 if test "$curses" = "yes" ; then 3835 feature_not_found "curses" "Install ncurses devel" 3836 fi 3837 curses=no 3838 fi 3839fi 3840 3841########################################## 3842# curl probe 3843if test "$curl" != "no" ; then 3844 if $pkg_config libcurl --exists; then 3845 curlconfig="$pkg_config libcurl" 3846 else 3847 curlconfig=curl-config 3848 fi 3849 cat > $TMPC << EOF 3850#include <curl/curl.h> 3851int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } 3852EOF 3853 curl_cflags=$($curlconfig --cflags 2>/dev/null) 3854 curl_libs=$($curlconfig --libs 2>/dev/null) 3855 if compile_prog "$curl_cflags" "$curl_libs" ; then 3856 curl=yes 3857 else 3858 if test "$curl" = "yes" ; then 3859 feature_not_found "curl" "Install libcurl devel" 3860 fi 3861 curl=no 3862 fi 3863fi # test "$curl" 3864 3865########################################## 3866# glib support probe 3867 3868glib_req_ver=2.48 3869glib_modules=gthread-2.0 3870if test "$modules" = yes; then 3871 glib_modules="$glib_modules gmodule-export-2.0" 3872fi 3873if test "$plugins" = yes; then 3874 glib_modules="$glib_modules gmodule-2.0" 3875fi 3876 3877# This workaround is required due to a bug in pkg-config file for glib as it 3878# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static 3879 3880if test "$static" = yes && test "$mingw32" = yes; then 3881 QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS" 3882fi 3883 3884for i in $glib_modules; do 3885 if $pkg_config --atleast-version=$glib_req_ver $i; then 3886 glib_cflags=$($pkg_config --cflags $i) 3887 glib_libs=$($pkg_config --libs $i) 3888 QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS" 3889 LIBS="$glib_libs $LIBS" 3890 libs_qga="$glib_libs $libs_qga" 3891 else 3892 error_exit "glib-$glib_req_ver $i is required to compile QEMU" 3893 fi 3894done 3895 3896if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then 3897 gio=yes 3898 gio_cflags=$($pkg_config --cflags gio-2.0) 3899 gio_libs=$($pkg_config --libs gio-2.0) 3900 gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) 3901 if [ ! -x "$gdbus_codegen" ]; then 3902 gdbus_codegen= 3903 fi 3904else 3905 gio=no 3906fi 3907 3908if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then 3909 gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" 3910 gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" 3911fi 3912 3913# Sanity check that the current size_t matches the 3914# size that glib thinks it should be. This catches 3915# problems on multi-arch where people try to build 3916# 32-bit QEMU while pointing at 64-bit glib headers 3917cat > $TMPC <<EOF 3918#include <glib.h> 3919#include <unistd.h> 3920 3921#define QEMU_BUILD_BUG_ON(x) \ 3922 typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); 3923 3924int main(void) { 3925 QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); 3926 return 0; 3927} 3928EOF 3929 3930if ! compile_prog "$CFLAGS" "$LIBS" ; then 3931 error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ 3932 "You probably need to set PKG_CONFIG_LIBDIR"\ 3933 "to point to the right pkg-config files for your"\ 3934 "build target" 3935fi 3936 3937# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage 3938cat > $TMPC << EOF 3939#include <glib.h> 3940int main(void) { return 0; } 3941EOF 3942if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3943 if cc_has_warning_flag "-Wno-unknown-attributes"; then 3944 glib_cflags="-Wno-unknown-attributes $glib_cflags" 3945 CFLAGS="-Wno-unknown-attributes $CFLAGS" 3946 fi 3947fi 3948 3949# Silence clang warnings triggered by glib < 2.57.2 3950cat > $TMPC << EOF 3951#include <glib.h> 3952typedef struct Foo { 3953 int i; 3954} Foo; 3955static void foo_free(Foo *f) 3956{ 3957 g_free(f); 3958} 3959G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); 3960int main(void) { return 0; } 3961EOF 3962if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3963 if cc_has_warning_flag "-Wno-unused-function"; then 3964 glib_cflags="$glib_cflags -Wno-unused-function" 3965 CFLAGS="$CFLAGS -Wno-unused-function" 3966 fi 3967fi 3968 3969######################################### 3970# zlib check 3971 3972if test "$zlib" != "no" ; then 3973 if $pkg_config --exists zlib; then 3974 zlib_cflags=$($pkg_config --cflags zlib) 3975 zlib_libs=$($pkg_config --libs zlib) 3976 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS" 3977 LIBS="$zlib_libs $LIBS" 3978 else 3979 cat > $TMPC << EOF 3980#include <zlib.h> 3981int main(void) { zlibVersion(); return 0; } 3982EOF 3983 if compile_prog "" "-lz" ; then 3984 LIBS="$LIBS -lz" 3985 else 3986 error_exit "zlib check failed" \ 3987 "Make sure to have the zlib libs and headers installed." 3988 fi 3989 fi 3990fi 3991 3992########################################## 3993# SHA command probe for modules 3994if test "$modules" = yes; then 3995 shacmd_probe="sha1sum sha1 shasum" 3996 for c in $shacmd_probe; do 3997 if has $c; then 3998 shacmd="$c" 3999 break 4000 fi 4001 done 4002 if test "$shacmd" = ""; then 4003 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 4004 fi 4005fi 4006 4007########################################## 4008# pixman support probe 4009 4010if test "$want_tools" = "no" && test "$softmmu" = "no"; then 4011 pixman_cflags= 4012 pixman_libs= 4013elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then 4014 pixman_cflags=$($pkg_config --cflags pixman-1) 4015 pixman_libs=$($pkg_config --libs pixman-1) 4016else 4017 error_exit "pixman >= 0.21.8 not present." \ 4018 "Please install the pixman devel package." 4019fi 4020 4021########################################## 4022# libmpathpersist probe 4023 4024if test "$mpath" != "no" ; then 4025 # probe for the new API 4026 cat > $TMPC <<EOF 4027#include <libudev.h> 4028#include <mpath_persist.h> 4029unsigned mpath_mx_alloc_len = 1024; 4030int logsink; 4031static struct config *multipath_conf; 4032extern struct udev *udev; 4033extern struct config *get_multipath_config(void); 4034extern void put_multipath_config(struct config *conf); 4035struct udev *udev; 4036struct config *get_multipath_config(void) { return multipath_conf; } 4037void put_multipath_config(struct config *conf) { } 4038 4039int main(void) { 4040 udev = udev_new(); 4041 multipath_conf = mpath_lib_init(); 4042 return 0; 4043} 4044EOF 4045 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 4046 mpathpersist=yes 4047 mpathpersist_new_api=yes 4048 else 4049 # probe for the old API 4050 cat > $TMPC <<EOF 4051#include <libudev.h> 4052#include <mpath_persist.h> 4053unsigned mpath_mx_alloc_len = 1024; 4054int logsink; 4055int main(void) { 4056 struct udev *udev = udev_new(); 4057 mpath_lib_init(udev); 4058 return 0; 4059} 4060EOF 4061 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 4062 mpathpersist=yes 4063 mpathpersist_new_api=no 4064 else 4065 mpathpersist=no 4066 fi 4067 fi 4068else 4069 mpathpersist=no 4070fi 4071 4072########################################## 4073# pthread probe 4074PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 4075 4076pthread=no 4077cat > $TMPC << EOF 4078#include <pthread.h> 4079static void *f(void *p) { return NULL; } 4080int main(void) { 4081 pthread_t thread; 4082 pthread_create(&thread, 0, f, 0); 4083 return 0; 4084} 4085EOF 4086if compile_prog "" "" ; then 4087 pthread=yes 4088else 4089 for pthread_lib in $PTHREADLIBS_LIST; do 4090 if compile_prog "" "$pthread_lib" ; then 4091 pthread=yes 4092 found=no 4093 for lib_entry in $LIBS; do 4094 if test "$lib_entry" = "$pthread_lib"; then 4095 found=yes 4096 break 4097 fi 4098 done 4099 if test "$found" = "no"; then 4100 LIBS="$pthread_lib $LIBS" 4101 libs_qga="$pthread_lib $libs_qga" 4102 fi 4103 PTHREAD_LIB="$pthread_lib" 4104 break 4105 fi 4106 done 4107fi 4108 4109if test "$mingw32" != yes && test "$pthread" = no; then 4110 error_exit "pthread check failed" \ 4111 "Make sure to have the pthread libs and headers installed." 4112fi 4113 4114# check for pthread_setname_np with thread id 4115pthread_setname_np_w_tid=no 4116cat > $TMPC << EOF 4117#include <pthread.h> 4118 4119static void *f(void *p) { return NULL; } 4120int main(void) 4121{ 4122 pthread_t thread; 4123 pthread_create(&thread, 0, f, 0); 4124 pthread_setname_np(thread, "QEMU"); 4125 return 0; 4126} 4127EOF 4128if compile_prog "" "$pthread_lib" ; then 4129 pthread_setname_np_w_tid=yes 4130fi 4131 4132# check for pthread_setname_np without thread id 4133pthread_setname_np_wo_tid=no 4134cat > $TMPC << EOF 4135#include <pthread.h> 4136 4137static void *f(void *p) { pthread_setname_np("QEMU"); } 4138int main(void) 4139{ 4140 pthread_t thread; 4141 pthread_create(&thread, 0, f, 0); 4142 return 0; 4143} 4144EOF 4145if compile_prog "" "$pthread_lib" ; then 4146 pthread_setname_np_wo_tid=yes 4147fi 4148 4149########################################## 4150# rbd probe 4151if test "$rbd" != "no" ; then 4152 cat > $TMPC <<EOF 4153#include <stdio.h> 4154#include <rbd/librbd.h> 4155int main(void) { 4156 rados_t cluster; 4157 rados_create(&cluster, NULL); 4158 return 0; 4159} 4160EOF 4161 rbd_libs="-lrbd -lrados" 4162 if compile_prog "" "$rbd_libs" ; then 4163 rbd=yes 4164 else 4165 if test "$rbd" = "yes" ; then 4166 feature_not_found "rados block device" "Install librbd/ceph devel" 4167 fi 4168 rbd=no 4169 fi 4170fi 4171 4172########################################## 4173# libssh probe 4174if test "$libssh" != "no" ; then 4175 if $pkg_config --exists libssh; then 4176 libssh_cflags=$($pkg_config libssh --cflags) 4177 libssh_libs=$($pkg_config libssh --libs) 4178 libssh=yes 4179 else 4180 if test "$libssh" = "yes" ; then 4181 error_exit "libssh required for --enable-libssh" 4182 fi 4183 libssh=no 4184 fi 4185fi 4186 4187########################################## 4188# Check for libssh 0.8 4189# This is done like this instead of using the LIBSSH_VERSION_* and 4190# SSH_VERSION_* macros because some distributions in the past shipped 4191# snapshots of the future 0.8 from Git, and those snapshots did not 4192# have updated version numbers (still referring to 0.7.0). 4193 4194if test "$libssh" = "yes"; then 4195 cat > $TMPC <<EOF 4196#include <libssh/libssh.h> 4197int main(void) { return ssh_get_server_publickey(NULL, NULL); } 4198EOF 4199 if compile_prog "$libssh_cflags" "$libssh_libs"; then 4200 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" 4201 fi 4202fi 4203 4204########################################## 4205# linux-aio probe 4206 4207if test "$linux_aio" != "no" ; then 4208 cat > $TMPC <<EOF 4209#include <libaio.h> 4210#include <sys/eventfd.h> 4211#include <stddef.h> 4212int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 4213EOF 4214 if compile_prog "" "-laio" ; then 4215 linux_aio=yes 4216 else 4217 if test "$linux_aio" = "yes" ; then 4218 feature_not_found "linux AIO" "Install libaio devel" 4219 fi 4220 linux_aio=no 4221 fi 4222fi 4223########################################## 4224# linux-io-uring probe 4225 4226if test "$linux_io_uring" != "no" ; then 4227 if $pkg_config liburing; then 4228 linux_io_uring_cflags=$($pkg_config --cflags liburing) 4229 linux_io_uring_libs=$($pkg_config --libs liburing) 4230 linux_io_uring=yes 4231 4232 # io_uring is used in libqemuutil.a where per-file -libs variables are not 4233 # seen by programs linking the archive. It's not ideal, but just add the 4234 # library dependency globally. 4235 LIBS="$linux_io_uring_libs $LIBS" 4236 else 4237 if test "$linux_io_uring" = "yes" ; then 4238 feature_not_found "linux io_uring" "Install liburing devel" 4239 fi 4240 linux_io_uring=no 4241 fi 4242fi 4243 4244########################################## 4245# TPM emulation is only on POSIX 4246 4247if test "$tpm" = ""; then 4248 if test "$mingw32" = "yes"; then 4249 tpm=no 4250 else 4251 tpm=yes 4252 fi 4253elif test "$tpm" = "yes"; then 4254 if test "$mingw32" = "yes" ; then 4255 error_exit "TPM emulation only available on POSIX systems" 4256 fi 4257fi 4258 4259########################################## 4260# attr probe 4261 4262if test "$attr" != "no" ; then 4263 cat > $TMPC <<EOF 4264#include <stdio.h> 4265#include <sys/types.h> 4266#ifdef CONFIG_LIBATTR 4267#include <attr/xattr.h> 4268#else 4269#include <sys/xattr.h> 4270#endif 4271int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 4272EOF 4273 if compile_prog "" "" ; then 4274 attr=yes 4275 # Older distros have <attr/xattr.h>, and need -lattr: 4276 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 4277 attr=yes 4278 LIBS="-lattr $LIBS" 4279 libattr=yes 4280 else 4281 if test "$attr" = "yes" ; then 4282 feature_not_found "ATTR" "Install libc6 or libattr devel" 4283 fi 4284 attr=no 4285 fi 4286fi 4287 4288########################################## 4289# iovec probe 4290cat > $TMPC <<EOF 4291#include <sys/types.h> 4292#include <sys/uio.h> 4293#include <unistd.h> 4294int main(void) { return sizeof(struct iovec); } 4295EOF 4296iovec=no 4297if compile_prog "" "" ; then 4298 iovec=yes 4299fi 4300 4301########################################## 4302# preadv probe 4303cat > $TMPC <<EOF 4304#include <sys/types.h> 4305#include <sys/uio.h> 4306#include <unistd.h> 4307int main(void) { return preadv(0, 0, 0, 0); } 4308EOF 4309preadv=no 4310if compile_prog "" "" ; then 4311 preadv=yes 4312fi 4313 4314########################################## 4315# fdt probe 4316# fdt support is mandatory for at least some target architectures, 4317# so insist on it if we're building those system emulators. 4318fdt_required=no 4319for target in $target_list; do 4320 case $target in 4321 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu) 4322 fdt_required=yes 4323 ;; 4324 esac 4325done 4326 4327if test "$fdt_required" = "yes"; then 4328 if test "$fdt" = "no"; then 4329 error_exit "fdt disabled but some requested targets require it." \ 4330 "You can turn off fdt only if you also disable all the system emulation" \ 4331 "targets which need it (by specifying a cut down --target-list)." 4332 fi 4333 fdt=yes 4334elif test "$fdt" != "yes" ; then 4335 fdt=no 4336fi 4337 4338# fdt is only required when building softmmu targets 4339if test -z "$fdt" -a "$softmmu" != "yes" ; then 4340 fdt="no" 4341fi 4342 4343if test "$fdt" != "no" ; then 4344 fdt_libs="-lfdt" 4345 # explicitly check for libfdt_env.h as it is missing in some stable installs 4346 # and test for required functions to make sure we are on a version >= 1.4.2 4347 cat > $TMPC << EOF 4348#include <libfdt.h> 4349#include <libfdt_env.h> 4350int main(void) { fdt_check_full(NULL, 0); return 0; } 4351EOF 4352 if compile_prog "" "$fdt_libs" ; then 4353 # system DTC is good - use it 4354 fdt=system 4355 else 4356 # have GIT checkout, so activate dtc submodule 4357 if test -e "${source_path}/.git" ; then 4358 git_submodules="${git_submodules} dtc" 4359 fi 4360 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then 4361 fdt=git 4362 mkdir -p dtc 4363 if [ "$pwd_is_source_path" != "y" ] ; then 4364 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 4365 fi 4366 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt" 4367 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt" 4368 fdt_libs="$fdt_libs" 4369 elif test "$fdt" = "yes" ; then 4370 # Not a git build & no libfdt found, prompt for system install 4371 error_exit "DTC (libfdt) version >= 1.4.2 not present." \ 4372 "Please install the DTC (libfdt) devel package" 4373 else 4374 # don't have and don't want 4375 fdt_libs= 4376 fdt=no 4377 fi 4378 fi 4379fi 4380 4381libs_softmmu="$libs_softmmu $fdt_libs" 4382 4383########################################## 4384# opengl probe (for sdl2, gtk, milkymist-tmu2) 4385 4386gbm="no" 4387if $pkg_config gbm; then 4388 gbm_cflags="$($pkg_config --cflags gbm)" 4389 gbm_libs="$($pkg_config --libs gbm)" 4390 gbm="yes" 4391fi 4392 4393if test "$opengl" != "no" ; then 4394 opengl_pkgs="epoxy gbm" 4395 if $pkg_config $opengl_pkgs; then 4396 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 4397 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 4398 opengl=yes 4399 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 4400 gtk_gl="yes" 4401 fi 4402 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 4403 else 4404 if test "$opengl" = "yes" ; then 4405 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 4406 fi 4407 opengl_cflags="" 4408 opengl_libs="" 4409 opengl=no 4410 fi 4411fi 4412 4413if test "$opengl" = "yes"; then 4414 cat > $TMPC << EOF 4415#include <epoxy/egl.h> 4416#ifndef EGL_MESA_image_dma_buf_export 4417# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 4418#endif 4419int main(void) { return 0; } 4420EOF 4421 if compile_prog "" "" ; then 4422 opengl_dmabuf=yes 4423 fi 4424fi 4425 4426if test "$opengl" = "yes" && test "$have_x11" = "yes"; then 4427 for target in $target_list; do 4428 case $target in 4429 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL 4430 need_x11=yes 4431 ;; 4432 esac 4433 done 4434fi 4435 4436########################################## 4437# libxml2 probe 4438if test "$libxml2" != "no" ; then 4439 if $pkg_config --exists libxml-2.0; then 4440 libxml2="yes" 4441 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 4442 libxml2_libs=$($pkg_config --libs libxml-2.0) 4443 else 4444 if test "$libxml2" = "yes"; then 4445 feature_not_found "libxml2" "Install libxml2 devel" 4446 fi 4447 libxml2="no" 4448 fi 4449fi 4450 4451########################################## 4452# glusterfs probe 4453if test "$glusterfs" != "no" ; then 4454 if $pkg_config --atleast-version=3 glusterfs-api; then 4455 glusterfs="yes" 4456 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 4457 glusterfs_libs=$($pkg_config --libs glusterfs-api) 4458 if $pkg_config --atleast-version=4 glusterfs-api; then 4459 glusterfs_xlator_opt="yes" 4460 fi 4461 if $pkg_config --atleast-version=5 glusterfs-api; then 4462 glusterfs_discard="yes" 4463 fi 4464 if $pkg_config --atleast-version=6 glusterfs-api; then 4465 glusterfs_fallocate="yes" 4466 glusterfs_zerofill="yes" 4467 fi 4468 cat > $TMPC << EOF 4469#include <glusterfs/api/glfs.h> 4470 4471int 4472main(void) 4473{ 4474 /* new glfs_ftruncate() passes two additional args */ 4475 return glfs_ftruncate(NULL, 0, NULL, NULL); 4476} 4477EOF 4478 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4479 glusterfs_ftruncate_has_stat="yes" 4480 fi 4481 cat > $TMPC << EOF 4482#include <glusterfs/api/glfs.h> 4483 4484/* new glfs_io_cbk() passes two additional glfs_stat structs */ 4485static void 4486glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) 4487{} 4488 4489int 4490main(void) 4491{ 4492 glfs_io_cbk iocb = &glusterfs_iocb; 4493 iocb(NULL, 0 , NULL, NULL, NULL); 4494 return 0; 4495} 4496EOF 4497 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4498 glusterfs_iocb_has_stat="yes" 4499 fi 4500 else 4501 if test "$glusterfs" = "yes" ; then 4502 feature_not_found "GlusterFS backend support" \ 4503 "Install glusterfs-api devel >= 3" 4504 fi 4505 glusterfs="no" 4506 fi 4507fi 4508 4509# Check for inotify functions when we are building linux-user 4510# emulator. This is done because older glibc versions don't 4511# have syscall stubs for these implemented. In that case we 4512# don't provide them even if kernel supports them. 4513# 4514inotify=no 4515cat > $TMPC << EOF 4516#include <sys/inotify.h> 4517 4518int 4519main(void) 4520{ 4521 /* try to start inotify */ 4522 return inotify_init(); 4523} 4524EOF 4525if compile_prog "" "" ; then 4526 inotify=yes 4527fi 4528 4529inotify1=no 4530cat > $TMPC << EOF 4531#include <sys/inotify.h> 4532 4533int 4534main(void) 4535{ 4536 /* try to start inotify */ 4537 return inotify_init1(0); 4538} 4539EOF 4540if compile_prog "" "" ; then 4541 inotify1=yes 4542fi 4543 4544# check if pipe2 is there 4545pipe2=no 4546cat > $TMPC << EOF 4547#include <unistd.h> 4548#include <fcntl.h> 4549 4550int main(void) 4551{ 4552 int pipefd[2]; 4553 return pipe2(pipefd, O_CLOEXEC); 4554} 4555EOF 4556if compile_prog "" "" ; then 4557 pipe2=yes 4558fi 4559 4560# check if accept4 is there 4561accept4=no 4562cat > $TMPC << EOF 4563#include <sys/socket.h> 4564#include <stddef.h> 4565 4566int main(void) 4567{ 4568 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4569 return 0; 4570} 4571EOF 4572if compile_prog "" "" ; then 4573 accept4=yes 4574fi 4575 4576# check if tee/splice is there. vmsplice was added same time. 4577splice=no 4578cat > $TMPC << EOF 4579#include <unistd.h> 4580#include <fcntl.h> 4581#include <limits.h> 4582 4583int main(void) 4584{ 4585 int len, fd = 0; 4586 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4587 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4588 return 0; 4589} 4590EOF 4591if compile_prog "" "" ; then 4592 splice=yes 4593fi 4594 4595########################################## 4596# libnuma probe 4597 4598if test "$numa" != "no" ; then 4599 cat > $TMPC << EOF 4600#include <numa.h> 4601int main(void) { return numa_available(); } 4602EOF 4603 4604 if compile_prog "" "-lnuma" ; then 4605 numa=yes 4606 libs_softmmu="-lnuma $libs_softmmu" 4607 else 4608 if test "$numa" = "yes" ; then 4609 feature_not_found "numa" "install numactl devel" 4610 fi 4611 numa=no 4612 fi 4613fi 4614 4615if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4616 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4617 exit 1 4618fi 4619 4620# Even if malloc_trim() is available, these non-libc memory allocators 4621# do not support it. 4622if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then 4623 if test "$malloc_trim" = "yes" ; then 4624 echo "Disabling malloc_trim with non-libc memory allocator" 4625 fi 4626 malloc_trim="no" 4627fi 4628 4629####################################### 4630# malloc_trim 4631 4632if test "$malloc_trim" != "no" ; then 4633 cat > $TMPC << EOF 4634#include <malloc.h> 4635int main(void) { malloc_trim(0); return 0; } 4636EOF 4637 if compile_prog "" "" ; then 4638 malloc_trim="yes" 4639 else 4640 malloc_trim="no" 4641 fi 4642fi 4643 4644########################################## 4645# tcmalloc probe 4646 4647if test "$tcmalloc" = "yes" ; then 4648 cat > $TMPC << EOF 4649#include <stdlib.h> 4650int main(void) { 4651 void *tmp = malloc(1); 4652 if (tmp != NULL) { 4653 return 0; 4654 } 4655 return 1; 4656} 4657EOF 4658 4659 if compile_prog "" "-ltcmalloc" ; then 4660 LIBS="-ltcmalloc $LIBS" 4661 else 4662 feature_not_found "tcmalloc" "install gperftools devel" 4663 fi 4664fi 4665 4666########################################## 4667# jemalloc probe 4668 4669if test "$jemalloc" = "yes" ; then 4670 cat > $TMPC << EOF 4671#include <stdlib.h> 4672int main(void) { 4673 void *tmp = malloc(1); 4674 if (tmp != NULL) { 4675 return 0; 4676 } 4677 return 1; 4678} 4679EOF 4680 4681 if compile_prog "" "-ljemalloc" ; then 4682 LIBS="-ljemalloc $LIBS" 4683 else 4684 feature_not_found "jemalloc" "install jemalloc devel" 4685 fi 4686fi 4687 4688########################################## 4689# signalfd probe 4690signalfd="no" 4691cat > $TMPC << EOF 4692#include <unistd.h> 4693#include <sys/syscall.h> 4694#include <signal.h> 4695int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4696EOF 4697 4698if compile_prog "" "" ; then 4699 signalfd=yes 4700fi 4701 4702# check if optreset global is declared by <getopt.h> 4703optreset="no" 4704cat > $TMPC << EOF 4705#include <getopt.h> 4706int main(void) { return optreset; } 4707EOF 4708 4709if compile_prog "" "" ; then 4710 optreset=yes 4711fi 4712 4713# check if eventfd is supported 4714eventfd=no 4715cat > $TMPC << EOF 4716#include <sys/eventfd.h> 4717 4718int main(void) 4719{ 4720 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4721} 4722EOF 4723if compile_prog "" "" ; then 4724 eventfd=yes 4725fi 4726 4727# check if memfd is supported 4728memfd=no 4729cat > $TMPC << EOF 4730#include <sys/mman.h> 4731 4732int main(void) 4733{ 4734 return memfd_create("foo", MFD_ALLOW_SEALING); 4735} 4736EOF 4737if compile_prog "" "" ; then 4738 memfd=yes 4739fi 4740 4741# check for usbfs 4742have_usbfs=no 4743if test "$linux_user" = "yes"; then 4744 cat > $TMPC << EOF 4745#include <linux/usbdevice_fs.h> 4746 4747#ifndef USBDEVFS_GET_CAPABILITIES 4748#error "USBDEVFS_GET_CAPABILITIES undefined" 4749#endif 4750 4751#ifndef USBDEVFS_DISCONNECT_CLAIM 4752#error "USBDEVFS_DISCONNECT_CLAIM undefined" 4753#endif 4754 4755int main(void) 4756{ 4757 return 0; 4758} 4759EOF 4760 if compile_prog "" ""; then 4761 have_usbfs=yes 4762 fi 4763fi 4764 4765# check for fallocate 4766fallocate=no 4767cat > $TMPC << EOF 4768#include <fcntl.h> 4769 4770int main(void) 4771{ 4772 fallocate(0, 0, 0, 0); 4773 return 0; 4774} 4775EOF 4776if compile_prog "" "" ; then 4777 fallocate=yes 4778fi 4779 4780# check for fallocate hole punching 4781fallocate_punch_hole=no 4782cat > $TMPC << EOF 4783#include <fcntl.h> 4784#include <linux/falloc.h> 4785 4786int main(void) 4787{ 4788 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4789 return 0; 4790} 4791EOF 4792if compile_prog "" "" ; then 4793 fallocate_punch_hole=yes 4794fi 4795 4796# check that fallocate supports range zeroing inside the file 4797fallocate_zero_range=no 4798cat > $TMPC << EOF 4799#include <fcntl.h> 4800#include <linux/falloc.h> 4801 4802int main(void) 4803{ 4804 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4805 return 0; 4806} 4807EOF 4808if compile_prog "" "" ; then 4809 fallocate_zero_range=yes 4810fi 4811 4812# check for posix_fallocate 4813posix_fallocate=no 4814cat > $TMPC << EOF 4815#include <fcntl.h> 4816 4817int main(void) 4818{ 4819 posix_fallocate(0, 0, 0); 4820 return 0; 4821} 4822EOF 4823if compile_prog "" "" ; then 4824 posix_fallocate=yes 4825fi 4826 4827# check for sync_file_range 4828sync_file_range=no 4829cat > $TMPC << EOF 4830#include <fcntl.h> 4831 4832int main(void) 4833{ 4834 sync_file_range(0, 0, 0, 0); 4835 return 0; 4836} 4837EOF 4838if compile_prog "" "" ; then 4839 sync_file_range=yes 4840fi 4841 4842# check for linux/fiemap.h and FS_IOC_FIEMAP 4843fiemap=no 4844cat > $TMPC << EOF 4845#include <sys/ioctl.h> 4846#include <linux/fs.h> 4847#include <linux/fiemap.h> 4848 4849int main(void) 4850{ 4851 ioctl(0, FS_IOC_FIEMAP, 0); 4852 return 0; 4853} 4854EOF 4855if compile_prog "" "" ; then 4856 fiemap=yes 4857fi 4858 4859# check for dup3 4860dup3=no 4861cat > $TMPC << EOF 4862#include <unistd.h> 4863 4864int main(void) 4865{ 4866 dup3(0, 0, 0); 4867 return 0; 4868} 4869EOF 4870if compile_prog "" "" ; then 4871 dup3=yes 4872fi 4873 4874# check for ppoll support 4875ppoll=no 4876cat > $TMPC << EOF 4877#include <poll.h> 4878 4879int main(void) 4880{ 4881 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4882 ppoll(&pfd, 1, 0, 0); 4883 return 0; 4884} 4885EOF 4886if compile_prog "" "" ; then 4887 ppoll=yes 4888fi 4889 4890# check for prctl(PR_SET_TIMERSLACK , ... ) support 4891prctl_pr_set_timerslack=no 4892cat > $TMPC << EOF 4893#include <sys/prctl.h> 4894 4895int main(void) 4896{ 4897 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4898 return 0; 4899} 4900EOF 4901if compile_prog "" "" ; then 4902 prctl_pr_set_timerslack=yes 4903fi 4904 4905# check for epoll support 4906epoll=no 4907cat > $TMPC << EOF 4908#include <sys/epoll.h> 4909 4910int main(void) 4911{ 4912 epoll_create(0); 4913 return 0; 4914} 4915EOF 4916if compile_prog "" "" ; then 4917 epoll=yes 4918fi 4919 4920# epoll_create1 is a later addition 4921# so we must check separately for its presence 4922epoll_create1=no 4923cat > $TMPC << EOF 4924#include <sys/epoll.h> 4925 4926int main(void) 4927{ 4928 /* Note that we use epoll_create1 as a value, not as 4929 * a function being called. This is necessary so that on 4930 * old SPARC glibc versions where the function was present in 4931 * the library but not declared in the header file we will 4932 * fail the configure check. (Otherwise we will get a compiler 4933 * warning but not an error, and will proceed to fail the 4934 * qemu compile where we compile with -Werror.) 4935 */ 4936 return (int)(uintptr_t)&epoll_create1; 4937} 4938EOF 4939if compile_prog "" "" ; then 4940 epoll_create1=yes 4941fi 4942 4943# check for sendfile support 4944sendfile=no 4945cat > $TMPC << EOF 4946#include <sys/sendfile.h> 4947 4948int main(void) 4949{ 4950 return sendfile(0, 0, 0, 0); 4951} 4952EOF 4953if compile_prog "" "" ; then 4954 sendfile=yes 4955fi 4956 4957# check for timerfd support (glibc 2.8 and newer) 4958timerfd=no 4959cat > $TMPC << EOF 4960#include <sys/timerfd.h> 4961 4962int main(void) 4963{ 4964 return(timerfd_create(CLOCK_REALTIME, 0)); 4965} 4966EOF 4967if compile_prog "" "" ; then 4968 timerfd=yes 4969fi 4970 4971# check for setns and unshare support 4972setns=no 4973cat > $TMPC << EOF 4974#include <sched.h> 4975 4976int main(void) 4977{ 4978 int ret; 4979 ret = setns(0, 0); 4980 ret = unshare(0); 4981 return ret; 4982} 4983EOF 4984if compile_prog "" "" ; then 4985 setns=yes 4986fi 4987 4988# clock_adjtime probe 4989clock_adjtime=no 4990cat > $TMPC <<EOF 4991#include <time.h> 4992 4993int main(void) 4994{ 4995 return clock_adjtime(0, 0); 4996} 4997EOF 4998clock_adjtime=no 4999if compile_prog "" "" ; then 5000 clock_adjtime=yes 5001fi 5002 5003# syncfs probe 5004syncfs=no 5005cat > $TMPC <<EOF 5006#include <unistd.h> 5007 5008int main(void) 5009{ 5010 return syncfs(0); 5011} 5012EOF 5013syncfs=no 5014if compile_prog "" "" ; then 5015 syncfs=yes 5016fi 5017 5018# check for kcov support (kernel must be 4.4+, compiled with certain options) 5019kcov=no 5020if check_include sys/kcov.h ; then 5021 kcov=yes 5022fi 5023 5024# If we're making warnings fatal, apply this to Sphinx runs as well 5025sphinx_werror="" 5026if test "$werror" = "yes"; then 5027 sphinx_werror="-W" 5028fi 5029 5030# Check we have a new enough version of sphinx-build 5031has_sphinx_build() { 5032 # This is a bit awkward but works: create a trivial document and 5033 # try to run it with our configuration file (which enforces a 5034 # version requirement). This will fail if either 5035 # sphinx-build doesn't exist at all or if it is too old. 5036 mkdir -p "$TMPDIR1/sphinx" 5037 touch "$TMPDIR1/sphinx/index.rst" 5038 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \ 5039 -b html "$TMPDIR1/sphinx" \ 5040 "$TMPDIR1/sphinx/out" >> config.log 2>&1 5041} 5042 5043# Check if tools are available to build documentation. 5044if test "$docs" != "no" ; then 5045 if has_sphinx_build; then 5046 sphinx_ok=yes 5047 else 5048 sphinx_ok=no 5049 fi 5050 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then 5051 docs=yes 5052 else 5053 if test "$docs" = "yes" ; then 5054 if has $sphinx_build && test "$sphinx_ok" != "yes"; then 5055 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2 5056 fi 5057 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx" 5058 fi 5059 docs=no 5060 fi 5061fi 5062 5063# Search for bswap_32 function 5064byteswap_h=no 5065cat > $TMPC << EOF 5066#include <byteswap.h> 5067int main(void) { return bswap_32(0); } 5068EOF 5069if compile_prog "" "" ; then 5070 byteswap_h=yes 5071fi 5072 5073# Search for bswap32 function 5074bswap_h=no 5075cat > $TMPC << EOF 5076#include <sys/endian.h> 5077#include <sys/types.h> 5078#include <machine/bswap.h> 5079int main(void) { return bswap32(0); } 5080EOF 5081if compile_prog "" "" ; then 5082 bswap_h=yes 5083fi 5084 5085########################################## 5086# Do we have libiscsi >= 1.9.0 5087if test "$libiscsi" != "no" ; then 5088 if $pkg_config --atleast-version=1.9.0 libiscsi; then 5089 libiscsi="yes" 5090 libiscsi_cflags=$($pkg_config --cflags libiscsi) 5091 libiscsi_libs=$($pkg_config --libs libiscsi) 5092 else 5093 if test "$libiscsi" = "yes" ; then 5094 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 5095 fi 5096 libiscsi="no" 5097 fi 5098fi 5099 5100########################################## 5101# Do we need libm 5102cat > $TMPC << EOF 5103#include <math.h> 5104int main(int argc, char **argv) { return isnan(sin((double)argc)); } 5105EOF 5106if compile_prog "" "" ; then 5107 : 5108elif compile_prog "" "-lm" ; then 5109 LIBS="-lm $LIBS" 5110 libs_qga="-lm $libs_qga" 5111else 5112 error_exit "libm check failed" 5113fi 5114 5115########################################## 5116# Do we need librt 5117# uClibc provides 2 versions of clock_gettime(), one with realtime 5118# support and one without. This means that the clock_gettime() don't 5119# need -lrt. We still need it for timer_create() so we check for this 5120# function in addition. 5121cat > $TMPC <<EOF 5122#include <signal.h> 5123#include <time.h> 5124int main(void) { 5125 timer_create(CLOCK_REALTIME, NULL, NULL); 5126 return clock_gettime(CLOCK_REALTIME, NULL); 5127} 5128EOF 5129 5130if compile_prog "" "" ; then 5131 : 5132# we need pthread for static linking. use previous pthread test result 5133elif compile_prog "" "$pthread_lib -lrt" ; then 5134 LIBS="$LIBS -lrt" 5135 libs_qga="$libs_qga -lrt" 5136fi 5137 5138# Check whether we need to link libutil for openpty() 5139cat > $TMPC << EOF 5140extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 5141int main(void) { return openpty(0, 0, 0, 0, 0); } 5142EOF 5143 5144if ! compile_prog "" "" ; then 5145 if compile_prog "" "-lutil" ; then 5146 libs_softmmu="-lutil $libs_softmmu" 5147 libs_tools="-lutil $libs_tools" 5148 fi 5149fi 5150 5151########################################## 5152# spice probe 5153if test "$spice" != "no" ; then 5154 cat > $TMPC << EOF 5155#include <spice.h> 5156int main(void) { spice_server_new(); return 0; } 5157EOF 5158 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 5159 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 5160 if $pkg_config --atleast-version=0.12.5 spice-server && \ 5161 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 5162 compile_prog "$spice_cflags" "$spice_libs" ; then 5163 spice="yes" 5164 libs_softmmu="$libs_softmmu $spice_libs" 5165 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 5166 spice_protocol_version=$($pkg_config --modversion spice-protocol) 5167 spice_server_version=$($pkg_config --modversion spice-server) 5168 else 5169 if test "$spice" = "yes" ; then 5170 feature_not_found "spice" \ 5171 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 5172 fi 5173 spice="no" 5174 fi 5175fi 5176 5177# check for smartcard support 5178if test "$smartcard" != "no"; then 5179 if $pkg_config --atleast-version=2.5.1 libcacard; then 5180 libcacard_cflags=$($pkg_config --cflags libcacard) 5181 libcacard_libs=$($pkg_config --libs libcacard) 5182 smartcard="yes" 5183 else 5184 if test "$smartcard" = "yes"; then 5185 feature_not_found "smartcard" "Install libcacard devel" 5186 fi 5187 smartcard="no" 5188 fi 5189fi 5190 5191# check for libusb 5192if test "$libusb" != "no" ; then 5193 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 5194 libusb="yes" 5195 libusb_cflags=$($pkg_config --cflags libusb-1.0) 5196 libusb_libs=$($pkg_config --libs libusb-1.0) 5197 else 5198 if test "$libusb" = "yes"; then 5199 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 5200 fi 5201 libusb="no" 5202 fi 5203fi 5204 5205# check for usbredirparser for usb network redirection support 5206if test "$usb_redir" != "no" ; then 5207 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 5208 usb_redir="yes" 5209 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 5210 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 5211 else 5212 if test "$usb_redir" = "yes"; then 5213 feature_not_found "usb-redir" "Install usbredir devel" 5214 fi 5215 usb_redir="no" 5216 fi 5217fi 5218 5219########################################## 5220# check if we have VSS SDK headers for win 5221 5222if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5223 test "$vss_win32_sdk" != "no" ; then 5224 case "$vss_win32_sdk" in 5225 "") vss_win32_include="-isystem $source_path" ;; 5226 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 5227 # handle path with spaces. So we symlink the headers into ".sdk/vss". 5228 vss_win32_include="-isystem $source_path/.sdk/vss" 5229 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 5230 ;; 5231 *) vss_win32_include="-isystem $vss_win32_sdk" 5232 esac 5233 cat > $TMPC << EOF 5234#define __MIDL_user_allocate_free_DEFINED__ 5235#include <inc/win2003/vss.h> 5236int main(void) { return VSS_CTX_BACKUP; } 5237EOF 5238 if compile_prog "$vss_win32_include" "" ; then 5239 guest_agent_with_vss="yes" 5240 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 5241 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 5242 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 5243 else 5244 if test "$vss_win32_sdk" != "" ; then 5245 echo "ERROR: Please download and install Microsoft VSS SDK:" 5246 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 5247 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 5248 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 5249 echo "ERROR: The headers are extracted in the directory \`inc'." 5250 feature_not_found "VSS support" 5251 fi 5252 guest_agent_with_vss="no" 5253 fi 5254fi 5255 5256########################################## 5257# lookup Windows platform SDK (if not specified) 5258# The SDK is needed only to build .tlb (type library) file of guest agent 5259# VSS provider from the source. It is usually unnecessary because the 5260# pre-compiled .tlb file is included. 5261 5262if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5263 test "$guest_agent_with_vss" = "yes" ; then 5264 if test -z "$win_sdk"; then 5265 programfiles="$PROGRAMFILES" 5266 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 5267 if test -n "$programfiles"; then 5268 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 5269 else 5270 feature_not_found "Windows SDK" 5271 fi 5272 elif test "$win_sdk" = "no"; then 5273 win_sdk="" 5274 fi 5275fi 5276 5277########################################## 5278# check if mingw environment provides a recent ntddscsi.h 5279if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 5280 cat > $TMPC << EOF 5281#include <windows.h> 5282#include <ntddscsi.h> 5283int main(void) { 5284#if !defined(IOCTL_SCSI_GET_ADDRESS) 5285#error Missing required ioctl definitions 5286#endif 5287 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 5288 return addr.Lun; 5289} 5290EOF 5291 if compile_prog "" "" ; then 5292 guest_agent_ntddscsi=yes 5293 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 5294 fi 5295fi 5296 5297########################################## 5298# virgl renderer probe 5299 5300if test "$virglrenderer" != "no" ; then 5301 cat > $TMPC << EOF 5302#include <virglrenderer.h> 5303int main(void) { virgl_renderer_poll(); return 0; } 5304EOF 5305 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 5306 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 5307 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 5308 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 5309 compile_prog "$virgl_cflags" "$virgl_libs" ; then 5310 virglrenderer="yes" 5311 else 5312 if test "$virglrenderer" = "yes" ; then 5313 feature_not_found "virglrenderer" 5314 fi 5315 virglrenderer="no" 5316 fi 5317fi 5318 5319########################################## 5320# capstone 5321 5322case "$capstone" in 5323 "" | yes) 5324 if $pkg_config capstone; then 5325 capstone=system 5326 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5327 capstone=git 5328 elif test -e "${source_path}/capstone/Makefile" ; then 5329 capstone=internal 5330 elif test -z "$capstone" ; then 5331 capstone=no 5332 else 5333 feature_not_found "capstone" "Install capstone devel or git submodule" 5334 fi 5335 ;; 5336 5337 system) 5338 if ! $pkg_config capstone; then 5339 feature_not_found "capstone" "Install capstone devel" 5340 fi 5341 ;; 5342esac 5343 5344case "$capstone" in 5345 git | internal) 5346 if test "$capstone" = git; then 5347 git_submodules="${git_submodules} capstone" 5348 fi 5349 mkdir -p capstone 5350 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include" 5351 if test "$mingw32" = "yes"; then 5352 LIBCAPSTONE=capstone.lib 5353 else 5354 LIBCAPSTONE=libcapstone.a 5355 fi 5356 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu" 5357 ;; 5358 5359 system) 5360 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 5361 libs_cpu="$($pkg_config --libs capstone) $libs_cpu" 5362 ;; 5363 5364 no) 5365 ;; 5366 *) 5367 error_exit "Unknown state for capstone: $capstone" 5368 ;; 5369esac 5370 5371########################################## 5372# check if we have fdatasync 5373 5374fdatasync=no 5375cat > $TMPC << EOF 5376#include <unistd.h> 5377int main(void) { 5378#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 5379return fdatasync(0); 5380#else 5381#error Not supported 5382#endif 5383} 5384EOF 5385if compile_prog "" "" ; then 5386 fdatasync=yes 5387fi 5388 5389########################################## 5390# check if we have madvise 5391 5392madvise=no 5393cat > $TMPC << EOF 5394#include <sys/types.h> 5395#include <sys/mman.h> 5396#include <stddef.h> 5397int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 5398EOF 5399if compile_prog "" "" ; then 5400 madvise=yes 5401fi 5402 5403########################################## 5404# check if we have posix_madvise 5405 5406posix_madvise=no 5407cat > $TMPC << EOF 5408#include <sys/mman.h> 5409#include <stddef.h> 5410int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 5411EOF 5412if compile_prog "" "" ; then 5413 posix_madvise=yes 5414fi 5415 5416########################################## 5417# check if we have posix_memalign() 5418 5419posix_memalign=no 5420cat > $TMPC << EOF 5421#include <stdlib.h> 5422int main(void) { 5423 void *p; 5424 return posix_memalign(&p, 8, 8); 5425} 5426EOF 5427if compile_prog "" "" ; then 5428 posix_memalign=yes 5429fi 5430 5431########################################## 5432# check if we have posix_syslog 5433 5434posix_syslog=no 5435cat > $TMPC << EOF 5436#include <syslog.h> 5437int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 5438EOF 5439if compile_prog "" "" ; then 5440 posix_syslog=yes 5441fi 5442 5443########################################## 5444# check if we have sem_timedwait 5445 5446sem_timedwait=no 5447cat > $TMPC << EOF 5448#include <semaphore.h> 5449int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 5450EOF 5451if compile_prog "" "" ; then 5452 sem_timedwait=yes 5453fi 5454 5455########################################## 5456# check if we have strchrnul 5457 5458strchrnul=no 5459cat > $TMPC << EOF 5460#include <string.h> 5461int main(void); 5462// Use a haystack that the compiler shouldn't be able to constant fold 5463char *haystack = (char*)&main; 5464int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 5465EOF 5466if compile_prog "" "" ; then 5467 strchrnul=yes 5468fi 5469 5470######################################### 5471# check if we have st_atim 5472 5473st_atim=no 5474cat > $TMPC << EOF 5475#include <sys/stat.h> 5476#include <stddef.h> 5477int main(void) { return offsetof(struct stat, st_atim); } 5478EOF 5479if compile_prog "" "" ; then 5480 st_atim=yes 5481fi 5482 5483########################################## 5484# check if trace backend exists 5485 5486$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 5487if test "$?" -ne 0 ; then 5488 error_exit "invalid trace backends" \ 5489 "Please choose supported trace backends." 5490fi 5491 5492########################################## 5493# For 'ust' backend, test if ust headers are present 5494if have_backend "ust"; then 5495 cat > $TMPC << EOF 5496#include <lttng/tracepoint.h> 5497int main(void) { return 0; } 5498EOF 5499 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 5500 if $pkg_config lttng-ust --exists; then 5501 lttng_ust_libs=$($pkg_config --libs lttng-ust) 5502 else 5503 lttng_ust_libs="-llttng-ust -ldl" 5504 fi 5505 if $pkg_config liburcu-bp --exists; then 5506 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 5507 else 5508 urcu_bp_libs="-lurcu-bp" 5509 fi 5510 5511 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 5512 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 5513 else 5514 error_exit "Trace backend 'ust' missing lttng-ust header files" 5515 fi 5516fi 5517 5518########################################## 5519# For 'dtrace' backend, test if 'dtrace' command is present 5520if have_backend "dtrace"; then 5521 if ! has 'dtrace' ; then 5522 error_exit "dtrace command is not found in PATH $PATH" 5523 fi 5524 trace_backend_stap="no" 5525 if has 'stap' ; then 5526 trace_backend_stap="yes" 5527 fi 5528fi 5529 5530########################################## 5531# check and set a backend for coroutine 5532 5533# We prefer ucontext, but it's not always possible. The fallback 5534# is sigcontext. On Windows the only valid backend is the Windows 5535# specific one. 5536 5537ucontext_works=no 5538if test "$darwin" != "yes"; then 5539 cat > $TMPC << EOF 5540#include <ucontext.h> 5541#ifdef __stub_makecontext 5542#error Ignoring glibc stub makecontext which will always fail 5543#endif 5544int main(void) { makecontext(0, 0, 0); return 0; } 5545EOF 5546 if compile_prog "" "" ; then 5547 ucontext_works=yes 5548 fi 5549fi 5550 5551if test "$coroutine" = ""; then 5552 if test "$mingw32" = "yes"; then 5553 coroutine=win32 5554 elif test "$ucontext_works" = "yes"; then 5555 coroutine=ucontext 5556 else 5557 coroutine=sigaltstack 5558 fi 5559else 5560 case $coroutine in 5561 windows) 5562 if test "$mingw32" != "yes"; then 5563 error_exit "'windows' coroutine backend only valid for Windows" 5564 fi 5565 # Unfortunately the user visible backend name doesn't match the 5566 # coroutine-*.c filename for this case, so we have to adjust it here. 5567 coroutine=win32 5568 ;; 5569 ucontext) 5570 if test "$ucontext_works" != "yes"; then 5571 feature_not_found "ucontext" 5572 fi 5573 ;; 5574 sigaltstack) 5575 if test "$mingw32" = "yes"; then 5576 error_exit "only the 'windows' coroutine backend is valid for Windows" 5577 fi 5578 ;; 5579 *) 5580 error_exit "unknown coroutine backend $coroutine" 5581 ;; 5582 esac 5583fi 5584 5585if test "$coroutine_pool" = ""; then 5586 coroutine_pool=yes 5587fi 5588 5589if test "$debug_stack_usage" = "yes"; then 5590 if test "$coroutine_pool" = "yes"; then 5591 echo "WARN: disabling coroutine pool for stack usage debugging" 5592 coroutine_pool=no 5593 fi 5594fi 5595 5596################################################## 5597# SafeStack 5598 5599 5600if test "$safe_stack" = "yes"; then 5601cat > $TMPC << EOF 5602int main(int argc, char *argv[]) 5603{ 5604#if ! __has_feature(safe_stack) 5605#error SafeStack Disabled 5606#endif 5607 return 0; 5608} 5609EOF 5610 flag="-fsanitize=safe-stack" 5611 # Check that safe-stack is supported and enabled. 5612 if compile_prog "-Werror $flag" "$flag"; then 5613 # Flag needed both at compilation and at linking 5614 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5615 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5616 else 5617 error_exit "SafeStack not supported by your compiler" 5618 fi 5619 if test "$coroutine" != "ucontext"; then 5620 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5621 fi 5622else 5623cat > $TMPC << EOF 5624int main(int argc, char *argv[]) 5625{ 5626#if defined(__has_feature) 5627#if __has_feature(safe_stack) 5628#error SafeStack Enabled 5629#endif 5630#endif 5631 return 0; 5632} 5633EOF 5634if test "$safe_stack" = "no"; then 5635 # Make sure that safe-stack is disabled 5636 if ! compile_prog "-Werror" ""; then 5637 # SafeStack was already enabled, try to explicitly remove the feature 5638 flag="-fno-sanitize=safe-stack" 5639 if ! compile_prog "-Werror $flag" "$flag"; then 5640 error_exit "Configure cannot disable SafeStack" 5641 fi 5642 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5643 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5644 fi 5645else # "$safe_stack" = "" 5646 # Set safe_stack to yes or no based on pre-existing flags 5647 if compile_prog "-Werror" ""; then 5648 safe_stack="no" 5649 else 5650 safe_stack="yes" 5651 if test "$coroutine" != "ucontext"; then 5652 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5653 fi 5654 fi 5655fi 5656fi 5657 5658########################################## 5659# check if we have open_by_handle_at 5660 5661open_by_handle_at=no 5662cat > $TMPC << EOF 5663#include <fcntl.h> 5664#if !defined(AT_EMPTY_PATH) 5665# error missing definition 5666#else 5667int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5668#endif 5669EOF 5670if compile_prog "" "" ; then 5671 open_by_handle_at=yes 5672fi 5673 5674######################################## 5675# check if we have linux/magic.h 5676 5677linux_magic_h=no 5678cat > $TMPC << EOF 5679#include <linux/magic.h> 5680int main(void) { 5681 return 0; 5682} 5683EOF 5684if compile_prog "" "" ; then 5685 linux_magic_h=yes 5686fi 5687 5688######################################## 5689# check whether we can disable warning option with a pragma (this is needed 5690# to silence warnings in the headers of some versions of external libraries). 5691# This test has to be compiled with -Werror as otherwise an unknown pragma is 5692# only a warning. 5693# 5694# If we can't selectively disable warning in the code, disable -Werror so that 5695# the build doesn't fail anyway. 5696 5697pragma_disable_unused_but_set=no 5698cat > $TMPC << EOF 5699#pragma GCC diagnostic push 5700#pragma GCC diagnostic ignored "-Wstrict-prototypes" 5701#pragma GCC diagnostic pop 5702 5703int main(void) { 5704 return 0; 5705} 5706EOF 5707if compile_prog "-Werror" "" ; then 5708 pragma_diagnostic_available=yes 5709else 5710 werror=no 5711fi 5712 5713######################################## 5714# check if we have valgrind/valgrind.h 5715 5716valgrind_h=no 5717cat > $TMPC << EOF 5718#include <valgrind/valgrind.h> 5719int main(void) { 5720 return 0; 5721} 5722EOF 5723if compile_prog "" "" ; then 5724 valgrind_h=yes 5725fi 5726 5727######################################## 5728# check if environ is declared 5729 5730has_environ=no 5731cat > $TMPC << EOF 5732#include <unistd.h> 5733int main(void) { 5734 environ = 0; 5735 return 0; 5736} 5737EOF 5738if compile_prog "" "" ; then 5739 has_environ=yes 5740fi 5741 5742######################################## 5743# check if cpuid.h is usable. 5744 5745cat > $TMPC << EOF 5746#include <cpuid.h> 5747int main(void) { 5748 unsigned a, b, c, d; 5749 int max = __get_cpuid_max(0, 0); 5750 5751 if (max >= 1) { 5752 __cpuid(1, a, b, c, d); 5753 } 5754 5755 if (max >= 7) { 5756 __cpuid_count(7, 0, a, b, c, d); 5757 } 5758 5759 return 0; 5760} 5761EOF 5762if compile_prog "" "" ; then 5763 cpuid_h=yes 5764fi 5765 5766########################################## 5767# avx2 optimization requirement check 5768# 5769# There is no point enabling this if cpuid.h is not usable, 5770# since we won't be able to select the new routines. 5771 5772if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 5773 cat > $TMPC << EOF 5774#pragma GCC push_options 5775#pragma GCC target("avx2") 5776#include <cpuid.h> 5777#include <immintrin.h> 5778static int bar(void *a) { 5779 __m256i x = *(__m256i *)a; 5780 return _mm256_testz_si256(x, x); 5781} 5782int main(int argc, char *argv[]) { return bar(argv[0]); } 5783EOF 5784 if compile_object "" ; then 5785 avx2_opt="yes" 5786 else 5787 avx2_opt="no" 5788 fi 5789fi 5790 5791########################################## 5792# avx512f optimization requirement check 5793# 5794# There is no point enabling this if cpuid.h is not usable, 5795# since we won't be able to select the new routines. 5796# by default, it is turned off. 5797# if user explicitly want to enable it, check environment 5798 5799if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 5800 cat > $TMPC << EOF 5801#pragma GCC push_options 5802#pragma GCC target("avx512f") 5803#include <cpuid.h> 5804#include <immintrin.h> 5805static int bar(void *a) { 5806 __m512i x = *(__m512i *)a; 5807 return _mm512_test_epi64_mask(x, x); 5808} 5809int main(int argc, char *argv[]) 5810{ 5811 return bar(argv[0]); 5812} 5813EOF 5814 if ! compile_object "" ; then 5815 avx512f_opt="no" 5816 fi 5817else 5818 avx512f_opt="no" 5819fi 5820 5821######################################## 5822# check if __[u]int128_t is usable. 5823 5824int128=no 5825cat > $TMPC << EOF 5826__int128_t a; 5827__uint128_t b; 5828int main (void) { 5829 a = a + b; 5830 b = a * b; 5831 a = a * a; 5832 return 0; 5833} 5834EOF 5835if compile_prog "" "" ; then 5836 int128=yes 5837fi 5838 5839######################################### 5840# See if 128-bit atomic operations are supported. 5841 5842atomic128=no 5843if test "$int128" = "yes"; then 5844 cat > $TMPC << EOF 5845int main(void) 5846{ 5847 unsigned __int128 x = 0, y = 0; 5848 y = __atomic_load_16(&x, 0); 5849 __atomic_store_16(&x, y, 0); 5850 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5851 return 0; 5852} 5853EOF 5854 if compile_prog "" "" ; then 5855 atomic128=yes 5856 fi 5857fi 5858 5859cmpxchg128=no 5860if test "$int128" = yes && test "$atomic128" = no; then 5861 cat > $TMPC << EOF 5862int main(void) 5863{ 5864 unsigned __int128 x = 0, y = 0; 5865 __sync_val_compare_and_swap_16(&x, y, x); 5866 return 0; 5867} 5868EOF 5869 if compile_prog "" "" ; then 5870 cmpxchg128=yes 5871 fi 5872fi 5873 5874######################################### 5875# See if 64-bit atomic operations are supported. 5876# Note that without __atomic builtins, we can only 5877# assume atomic loads/stores max at pointer size. 5878 5879cat > $TMPC << EOF 5880#include <stdint.h> 5881int main(void) 5882{ 5883 uint64_t x = 0, y = 0; 5884#ifdef __ATOMIC_RELAXED 5885 y = __atomic_load_8(&x, 0); 5886 __atomic_store_8(&x, y, 0); 5887 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5888 __atomic_exchange_8(&x, y, 0); 5889 __atomic_fetch_add_8(&x, y, 0); 5890#else 5891 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5892 __sync_lock_test_and_set(&x, y); 5893 __sync_val_compare_and_swap(&x, y, 0); 5894 __sync_fetch_and_add(&x, y); 5895#endif 5896 return 0; 5897} 5898EOF 5899if compile_prog "" "" ; then 5900 atomic64=yes 5901fi 5902 5903######################################### 5904# See if --dynamic-list is supported by the linker 5905ld_dynamic_list="no" 5906if test "$static" = "no" ; then 5907 cat > $TMPTXT <<EOF 5908{ 5909 foo; 5910}; 5911EOF 5912 5913 cat > $TMPC <<EOF 5914#include <stdio.h> 5915void foo(void); 5916 5917void foo(void) 5918{ 5919 printf("foo\n"); 5920} 5921 5922int main(void) 5923{ 5924 foo(); 5925 return 0; 5926} 5927EOF 5928 5929 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 5930 ld_dynamic_list="yes" 5931 fi 5932fi 5933 5934######################################### 5935# See if -exported_symbols_list is supported by the linker 5936 5937ld_exported_symbols_list="no" 5938if test "$static" = "no" ; then 5939 cat > $TMPTXT <<EOF 5940 _foo 5941EOF 5942 5943 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 5944 ld_exported_symbols_list="yes" 5945 fi 5946fi 5947 5948if test "$plugins" = "yes" && 5949 test "$ld_dynamic_list" = "no" && 5950 test "$ld_exported_symbols_list" = "no" ; then 5951 error_exit \ 5952 "Plugin support requires dynamic linking and specifying a set of symbols " \ 5953 "that are exported to plugins. Unfortunately your linker doesn't " \ 5954 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 5955 "for this purpose. You can't build with --static." 5956fi 5957 5958######################################## 5959# See if __attribute__((alias)) is supported. 5960# This false for Xcode 9, but has been remedied for Xcode 10. 5961# Unfortunately, travis uses Xcode 9 by default. 5962 5963attralias=no 5964cat > $TMPC << EOF 5965int x = 1; 5966extern const int y __attribute__((alias("x"))); 5967int main(void) { return 0; } 5968EOF 5969if compile_prog "" "" ; then 5970 attralias=yes 5971fi 5972 5973######################################## 5974# check if getauxval is available. 5975 5976getauxval=no 5977cat > $TMPC << EOF 5978#include <sys/auxv.h> 5979int main(void) { 5980 return getauxval(AT_HWCAP) == 0; 5981} 5982EOF 5983if compile_prog "" "" ; then 5984 getauxval=yes 5985fi 5986 5987######################################## 5988# check if ccache is interfering with 5989# semantic analysis of macros 5990 5991unset CCACHE_CPP2 5992ccache_cpp2=no 5993cat > $TMPC << EOF 5994static const int Z = 1; 5995#define fn() ({ Z; }) 5996#define TAUT(X) ((X) == Z) 5997#define PAREN(X, Y) (X == Y) 5998#define ID(X) (X) 5999int main(int argc, char *argv[]) 6000{ 6001 int x = 0, y = 0; 6002 x = ID(x); 6003 x = fn(); 6004 fn(); 6005 if (PAREN(x, y)) return 0; 6006 if (TAUT(Z)) return 0; 6007 return 0; 6008} 6009EOF 6010 6011if ! compile_object "-Werror"; then 6012 ccache_cpp2=yes 6013fi 6014 6015################################################# 6016# clang does not support glibc + FORTIFY_SOURCE. 6017 6018if test "$fortify_source" != "no"; then 6019 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 6020 fortify_source="no"; 6021 elif test -n "$cxx" && has $cxx && 6022 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 6023 fortify_source="no"; 6024 else 6025 fortify_source="yes" 6026 fi 6027fi 6028 6029############################################### 6030# Check if copy_file_range is provided by glibc 6031have_copy_file_range=no 6032cat > $TMPC << EOF 6033#include <unistd.h> 6034int main(void) { 6035 copy_file_range(0, NULL, 0, NULL, 0, 0); 6036 return 0; 6037} 6038EOF 6039if compile_prog "" "" ; then 6040 have_copy_file_range=yes 6041fi 6042 6043########################################## 6044# check if struct fsxattr is available via linux/fs.h 6045 6046have_fsxattr=no 6047cat > $TMPC << EOF 6048#include <linux/fs.h> 6049struct fsxattr foo; 6050int main(void) { 6051 return 0; 6052} 6053EOF 6054if compile_prog "" "" ; then 6055 have_fsxattr=yes 6056fi 6057 6058########################################## 6059# check for usable membarrier system call 6060if test "$membarrier" = "yes"; then 6061 have_membarrier=no 6062 if test "$mingw32" = "yes" ; then 6063 have_membarrier=yes 6064 elif test "$linux" = "yes" ; then 6065 cat > $TMPC << EOF 6066 #include <linux/membarrier.h> 6067 #include <sys/syscall.h> 6068 #include <unistd.h> 6069 #include <stdlib.h> 6070 int main(void) { 6071 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 6072 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 6073 exit(0); 6074 } 6075EOF 6076 if compile_prog "" "" ; then 6077 have_membarrier=yes 6078 fi 6079 fi 6080 if test "$have_membarrier" = "no"; then 6081 feature_not_found "membarrier" "membarrier system call not available" 6082 fi 6083else 6084 # Do not enable it by default even for Mingw32, because it doesn't 6085 # work on Wine. 6086 membarrier=no 6087fi 6088 6089########################################## 6090# check if rtnetlink.h exists and is useful 6091have_rtnetlink=no 6092cat > $TMPC << EOF 6093#include <linux/rtnetlink.h> 6094int main(void) { 6095 return IFLA_PROTO_DOWN; 6096} 6097EOF 6098if compile_prog "" "" ; then 6099 have_rtnetlink=yes 6100fi 6101 6102########################################## 6103# check for usable AF_VSOCK environment 6104have_af_vsock=no 6105cat > $TMPC << EOF 6106#include <errno.h> 6107#include <sys/types.h> 6108#include <sys/socket.h> 6109#if !defined(AF_VSOCK) 6110# error missing AF_VSOCK flag 6111#endif 6112#include <linux/vm_sockets.h> 6113int main(void) { 6114 int sock, ret; 6115 struct sockaddr_vm svm; 6116 socklen_t len = sizeof(svm); 6117 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 6118 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 6119 if ((ret == -1) && (errno == ENOTCONN)) { 6120 return 0; 6121 } 6122 return -1; 6123} 6124EOF 6125if compile_prog "" "" ; then 6126 have_af_vsock=yes 6127fi 6128 6129########################################## 6130# check for usable AF_ALG environment 6131have_afalg=no 6132cat > $TMPC << EOF 6133#include <errno.h> 6134#include <sys/types.h> 6135#include <sys/socket.h> 6136#include <linux/if_alg.h> 6137int main(void) { 6138 int sock; 6139 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 6140 return sock; 6141} 6142EOF 6143if compile_prog "" "" ; then 6144 have_afalg=yes 6145fi 6146if test "$crypto_afalg" = "yes" 6147then 6148 if test "$have_afalg" != "yes" 6149 then 6150 error_exit "AF_ALG requested but could not be detected" 6151 fi 6152fi 6153 6154 6155################################################# 6156# Check to see if we have the Hypervisor framework 6157if [ "$darwin" = "yes" ] ; then 6158 cat > $TMPC << EOF 6159#include <Hypervisor/hv.h> 6160int main() { return 0;} 6161EOF 6162 if ! compile_object ""; then 6163 hvf='no' 6164 else 6165 hvf='yes' 6166 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS" 6167 fi 6168fi 6169 6170################################################# 6171# Sparc implicitly links with --relax, which is 6172# incompatible with -r, so --no-relax should be 6173# given. It does no harm to give it on other 6174# platforms too. 6175 6176# Note: the prototype is needed since QEMU_CFLAGS 6177# contains -Wmissing-prototypes 6178cat > $TMPC << EOF 6179extern int foo(void); 6180int foo(void) { return 0; } 6181EOF 6182if ! compile_object ""; then 6183 error_exit "Failed to compile object file for LD_REL_FLAGS test" 6184fi 6185for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 6186 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 6187 LD_REL_FLAGS=$i 6188 break 6189 fi 6190done 6191if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 6192 feature_not_found "modules" "Cannot find how to build relocatable objects" 6193fi 6194 6195########################################## 6196# check for sysmacros.h 6197 6198have_sysmacros=no 6199cat > $TMPC << EOF 6200#include <sys/sysmacros.h> 6201int main(void) { 6202 return makedev(0, 0); 6203} 6204EOF 6205if compile_prog "" "" ; then 6206 have_sysmacros=yes 6207fi 6208 6209########################################## 6210# Veritas HyperScale block driver VxHS 6211# Check if libvxhs is installed 6212 6213if test "$vxhs" != "no" ; then 6214 cat > $TMPC <<EOF 6215#include <stdint.h> 6216#include <qnio/qnio_api.h> 6217 6218void *vxhs_callback; 6219 6220int main(void) { 6221 iio_init(QNIO_VERSION, vxhs_callback); 6222 return 0; 6223} 6224EOF 6225 vxhs_libs="-lvxhs -lssl" 6226 if compile_prog "" "$vxhs_libs" ; then 6227 vxhs=yes 6228 else 6229 if test "$vxhs" = "yes" ; then 6230 feature_not_found "vxhs block device" "Install libvxhs See github" 6231 fi 6232 vxhs=no 6233 fi 6234fi 6235 6236########################################## 6237# check for _Static_assert() 6238 6239have_static_assert=no 6240cat > $TMPC << EOF 6241_Static_assert(1, "success"); 6242int main(void) { 6243 return 0; 6244} 6245EOF 6246if compile_prog "" "" ; then 6247 have_static_assert=yes 6248fi 6249 6250########################################## 6251# check for utmpx.h, it is missing e.g. on OpenBSD 6252 6253have_utmpx=no 6254cat > $TMPC << EOF 6255#include <utmpx.h> 6256struct utmpx user_info; 6257int main(void) { 6258 return 0; 6259} 6260EOF 6261if compile_prog "" "" ; then 6262 have_utmpx=yes 6263fi 6264 6265########################################## 6266# check for getrandom() 6267 6268have_getrandom=no 6269cat > $TMPC << EOF 6270#include <sys/random.h> 6271int main(void) { 6272 return getrandom(0, 0, GRND_NONBLOCK); 6273} 6274EOF 6275if compile_prog "" "" ; then 6276 have_getrandom=yes 6277fi 6278 6279########################################## 6280# checks for sanitizers 6281 6282have_asan=no 6283have_ubsan=no 6284have_asan_iface_h=no 6285have_asan_iface_fiber=no 6286 6287if test "$sanitizers" = "yes" ; then 6288 write_c_skeleton 6289 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 6290 have_asan=yes 6291 fi 6292 6293 # we could use a simple skeleton for flags checks, but this also 6294 # detect the static linking issue of ubsan, see also: 6295 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 6296 cat > $TMPC << EOF 6297#include <stdlib.h> 6298int main(void) { 6299 void *tmp = malloc(10); 6300 if (tmp != NULL) { 6301 return *(int *)(tmp + 2); 6302 } 6303} 6304EOF 6305 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 6306 have_ubsan=yes 6307 fi 6308 6309 if check_include "sanitizer/asan_interface.h" ; then 6310 have_asan_iface_h=yes 6311 fi 6312 6313 cat > $TMPC << EOF 6314#include <sanitizer/asan_interface.h> 6315int main(void) { 6316 __sanitizer_start_switch_fiber(0, 0, 0); 6317 return 0; 6318} 6319EOF 6320 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 6321 have_asan_iface_fiber=yes 6322 fi 6323fi 6324 6325########################################## 6326# checks for fuzzer 6327if test "$fuzzing" = "yes" ; then 6328 write_c_fuzzer_skeleton 6329 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then 6330 have_fuzzer=yes 6331 fi 6332fi 6333 6334# Thread sanitizer is, for now, much noisier than the other sanitizers; 6335# keep it separate until that is not the case. 6336if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 6337 error_exit "TSAN is not supported with other sanitiziers." 6338fi 6339have_tsan=no 6340have_tsan_iface_fiber=no 6341if test "$tsan" = "yes" ; then 6342 write_c_skeleton 6343 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6344 have_tsan=yes 6345 fi 6346 cat > $TMPC << EOF 6347#include <sanitizer/tsan_interface.h> 6348int main(void) { 6349 __tsan_create_fiber(0); 6350 return 0; 6351} 6352EOF 6353 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6354 have_tsan_iface_fiber=yes 6355 fi 6356fi 6357 6358########################################## 6359# check for libpmem 6360 6361if test "$libpmem" != "no"; then 6362 if $pkg_config --exists "libpmem"; then 6363 libpmem="yes" 6364 libpmem_libs=$($pkg_config --libs libpmem) 6365 libpmem_cflags=$($pkg_config --cflags libpmem) 6366 libs_softmmu="$libs_softmmu $libpmem_libs" 6367 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 6368 else 6369 if test "$libpmem" = "yes" ; then 6370 feature_not_found "libpmem" "Install nvml or pmdk" 6371 fi 6372 libpmem="no" 6373 fi 6374fi 6375 6376########################################## 6377# check for libdaxctl 6378 6379if test "$libdaxctl" != "no"; then 6380 if $pkg_config --atleast-version=57 "libdaxctl"; then 6381 libdaxctl="yes" 6382 libdaxctl_libs=$($pkg_config --libs libdaxctl) 6383 libdaxctl_cflags=$($pkg_config --cflags libdaxctl) 6384 libs_softmmu="$libs_softmmu $libdaxctl_libs" 6385 QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags" 6386 else 6387 if test "$libdaxctl" = "yes" ; then 6388 feature_not_found "libdaxctl" "Install libdaxctl" 6389 fi 6390 libdaxctl="no" 6391 fi 6392fi 6393 6394########################################## 6395# check for slirp 6396 6397# slirp is only required when building softmmu targets 6398if test -z "$slirp" -a "$softmmu" != "yes" ; then 6399 slirp="no" 6400fi 6401 6402case "$slirp" in 6403 "" | yes) 6404 if $pkg_config slirp; then 6405 slirp=system 6406 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 6407 slirp=git 6408 elif test -e "${source_path}/slirp/Makefile" ; then 6409 slirp=internal 6410 elif test -z "$slirp" ; then 6411 slirp=no 6412 else 6413 feature_not_found "slirp" "Install slirp devel or git submodule" 6414 fi 6415 ;; 6416 6417 system) 6418 if ! $pkg_config slirp; then 6419 feature_not_found "slirp" "Install slirp devel" 6420 fi 6421 ;; 6422esac 6423 6424case "$slirp" in 6425 git | internal) 6426 if test "$slirp" = git; then 6427 git_submodules="${git_submodules} slirp" 6428 fi 6429 mkdir -p slirp 6430 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src" 6431 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp" 6432 if test "$mingw32" = "yes" ; then 6433 slirp_libs="$slirp_libs -lws2_32 -liphlpapi" 6434 fi 6435 ;; 6436 6437 system) 6438 slirp_version=$($pkg_config --modversion slirp 2>/dev/null) 6439 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) 6440 slirp_libs=$($pkg_config --libs slirp 2>/dev/null) 6441 ;; 6442 6443 no) 6444 ;; 6445 *) 6446 error_exit "Unknown state for slirp: $slirp" 6447 ;; 6448esac 6449 6450########################################## 6451# check for usable __NR_keyctl syscall 6452 6453if test "$linux" = "yes" ; then 6454 6455 have_keyring=no 6456 cat > $TMPC << EOF 6457#include <errno.h> 6458#include <asm/unistd.h> 6459#include <linux/keyctl.h> 6460#include <unistd.h> 6461int main(void) { 6462 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 6463} 6464EOF 6465 if compile_prog "" "" ; then 6466 have_keyring=yes 6467 fi 6468fi 6469if test "$secret_keyring" != "no" 6470then 6471 if test "$have_keyring" == "yes" 6472 then 6473 secret_keyring=yes 6474 else 6475 if test "$secret_keyring" = "yes" 6476 then 6477 error_exit "syscall __NR_keyctl requested, \ 6478but not implemented on your system" 6479 else 6480 secret_keyring=no 6481 fi 6482 fi 6483fi 6484 6485########################################## 6486# check for usable keyutils.h 6487 6488if test "$linux" = "yes" ; then 6489 6490 have_keyutils=no 6491 cat > $TMPC << EOF 6492#include <errno.h> 6493#include <asm/unistd.h> 6494#include <unistd.h> 6495#include <sys/types.h> 6496#include <keyutils.h> 6497int main(void) { 6498 return request_key("user", NULL, NULL, 0); 6499} 6500EOF 6501 if compile_prog "" "-lkeyutils"; then 6502 have_keyutils=yes 6503 fi 6504fi 6505 6506 6507########################################## 6508# End of CC checks 6509# After here, no more $cc or $ld runs 6510 6511write_c_skeleton 6512 6513if test "$gcov" = "yes" ; then 6514 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS" 6515 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS" 6516elif test "$fortify_source" = "yes" ; then 6517 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 6518elif test "$debug" = "no"; then 6519 CFLAGS="-O2 $CFLAGS" 6520fi 6521 6522if test "$have_asan" = "yes"; then 6523 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 6524 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 6525 if test "$have_asan_iface_h" = "no" ; then 6526 echo "ASAN build enabled, but ASAN header missing." \ 6527 "Without code annotation, the report may be inferior." 6528 elif test "$have_asan_iface_fiber" = "no" ; then 6529 echo "ASAN build enabled, but ASAN header is too old." \ 6530 "Without code annotation, the report may be inferior." 6531 fi 6532fi 6533if test "$have_tsan" = "yes" ; then 6534 if test "$have_tsan_iface_fiber" = "yes" ; then 6535 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 6536 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 6537 else 6538 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 6539 fi 6540elif test "$tsan" = "yes" ; then 6541 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 6542fi 6543if test "$have_ubsan" = "yes"; then 6544 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 6545 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 6546fi 6547 6548########################################## 6549# Do we have libnfs 6550if test "$libnfs" != "no" ; then 6551 if $pkg_config --atleast-version=1.9.3 libnfs; then 6552 libnfs="yes" 6553 libnfs_libs=$($pkg_config --libs libnfs) 6554 else 6555 if test "$libnfs" = "yes" ; then 6556 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 6557 fi 6558 libnfs="no" 6559 fi 6560fi 6561 6562########################################## 6563# Do we have libudev 6564if test "$libudev" != "no" ; then 6565 if $pkg_config libudev && test "$static" != "yes"; then 6566 libudev="yes" 6567 libudev_libs=$($pkg_config --libs libudev) 6568 else 6569 libudev="no" 6570 fi 6571fi 6572 6573# Now we've finished running tests it's OK to add -Werror to the compiler flags 6574if test "$werror" = "yes"; then 6575 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 6576fi 6577 6578# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 6579if test "$solaris" = "no" && test "$tsan" = "no"; then 6580 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 6581 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 6582 fi 6583fi 6584 6585# test if pod2man has --utf8 option 6586if pod2man --help | grep -q utf8; then 6587 POD2MAN="pod2man --utf8" 6588else 6589 POD2MAN="pod2man" 6590fi 6591 6592# Use ASLR, no-SEH and DEP if available 6593if test "$mingw32" = "yes" ; then 6594 for flag in --dynamicbase --no-seh --nxcompat; do 6595 if ld_has $flag ; then 6596 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 6597 fi 6598 done 6599fi 6600 6601# Disable OpenBSD W^X if available 6602if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then 6603 cat > $TMPC <<EOF 6604 int main(void) { return 0; } 6605EOF 6606 wx_ldflags="-Wl,-z,wxneeded" 6607 if compile_prog "" "$wx_ldflags"; then 6608 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags" 6609 fi 6610fi 6611 6612qemu_confdir=$sysconfdir$confsuffix 6613qemu_moddir=$libdir$confsuffix 6614qemu_datadir=$datadir$confsuffix 6615qemu_localedir="$datadir/locale" 6616qemu_icondir="$datadir/icons" 6617qemu_desktopdir="$datadir/applications" 6618 6619# We can only support ivshmem if we have eventfd 6620if [ "$eventfd" = "yes" ]; then 6621 ivshmem=yes 6622fi 6623 6624tools="" 6625if test "$want_tools" = "yes" ; then 6626 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools" 6627 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 6628 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools" 6629 fi 6630 if [ "$ivshmem" = "yes" ]; then 6631 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 6632 fi 6633 if [ "$curl" = "yes" ]; then 6634 tools="elf2dmp\$(EXESUF) $tools" 6635 fi 6636fi 6637if test "$softmmu" = yes ; then 6638 if test "$linux" = yes; then 6639 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then 6640 virtfs=yes 6641 helpers="$helpers fsdev/virtfs-proxy-helper\$(EXESUF)" 6642 else 6643 if test "$virtfs" = yes; then 6644 error_exit "VirtFS requires libcap-ng devel and libattr devel" 6645 fi 6646 virtfs=no 6647 fi 6648 if test "$mpath" != no && test "$mpathpersist" = yes ; then 6649 mpath=yes 6650 else 6651 if test "$mpath" = yes; then 6652 error_exit "Multipath requires libmpathpersist devel" 6653 fi 6654 mpath=no 6655 fi 6656 helpers="$helpers scsi/qemu-pr-helper\$(EXESUF)" 6657 else 6658 if test "$virtfs" = yes; then 6659 error_exit "VirtFS is supported only on Linux" 6660 fi 6661 virtfs=no 6662 if test "$mpath" = yes; then 6663 error_exit "Multipath is supported only on Linux" 6664 fi 6665 mpath=no 6666 fi 6667 if test "$xkbcommon" = "yes"; then 6668 tools="qemu-keymap\$(EXESUF) $tools" 6669 fi 6670fi 6671 6672# Probe for guest agent support/options 6673 6674if [ "$guest_agent" != "no" ]; then 6675 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 6676 guest_agent=no 6677 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 6678 tools="qemu-ga\$(EXESUF) $tools" 6679 guest_agent=yes 6680 elif [ "$guest_agent" != yes ]; then 6681 guest_agent=no 6682 else 6683 error_exit "Guest agent is not supported on this platform" 6684 fi 6685fi 6686 6687# Guest agent Window MSI package 6688 6689if test "$guest_agent" != yes; then 6690 if test "$guest_agent_msi" = yes; then 6691 error_exit "MSI guest agent package requires guest agent enabled" 6692 fi 6693 guest_agent_msi=no 6694elif test "$mingw32" != "yes"; then 6695 if test "$guest_agent_msi" = "yes"; then 6696 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 6697 fi 6698 guest_agent_msi=no 6699elif ! has wixl; then 6700 if test "$guest_agent_msi" = "yes"; then 6701 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 6702 fi 6703 guest_agent_msi=no 6704else 6705 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 6706 # disabled explicitly 6707 if test "$guest_agent_msi" != "no"; then 6708 guest_agent_msi=yes 6709 fi 6710fi 6711 6712if test "$guest_agent_msi" = "yes"; then 6713 if test "$guest_agent_with_vss" = "yes"; then 6714 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 6715 fi 6716 6717 if test "$QEMU_GA_MANUFACTURER" = ""; then 6718 QEMU_GA_MANUFACTURER=QEMU 6719 fi 6720 6721 if test "$QEMU_GA_DISTRO" = ""; then 6722 QEMU_GA_DISTRO=Linux 6723 fi 6724 6725 if test "$QEMU_GA_VERSION" = ""; then 6726 QEMU_GA_VERSION=$(cat $source_path/VERSION) 6727 fi 6728 6729 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 6730 6731 case "$cpu" in 6732 x86_64) 6733 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 6734 ;; 6735 i386) 6736 QEMU_GA_MSI_ARCH="-D Arch=32" 6737 ;; 6738 *) 6739 error_exit "CPU $cpu not supported for building installation package" 6740 ;; 6741 esac 6742fi 6743 6744# Mac OS X ships with a broken assembler 6745roms= 6746if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 6747 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 6748 test "$softmmu" = yes ; then 6749 # Different host OS linkers have different ideas about the name of the ELF 6750 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 6751 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 6752 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 6753 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 6754 ld_i386_emulation="$emu" 6755 roms="optionrom" 6756 break 6757 fi 6758 done 6759fi 6760 6761# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 6762if test "$cpu" = "s390x" ; then 6763 write_c_skeleton 6764 if compile_prog "-march=z900" ""; then 6765 roms="$roms s390-ccw" 6766 # SLOF is required for building the s390-ccw firmware on s390x, 6767 # since it is using the libnet code from SLOF for network booting. 6768 if test -e "${source_path}/.git" ; then 6769 git_submodules="${git_submodules} roms/SLOF" 6770 fi 6771 fi 6772fi 6773 6774# Check that the C++ compiler exists and works with the C compiler. 6775# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 6776if has $cxx; then 6777 cat > $TMPC <<EOF 6778int c_function(void); 6779int main(void) { return c_function(); } 6780EOF 6781 6782 compile_object 6783 6784 cat > $TMPCXX <<EOF 6785extern "C" { 6786 int c_function(void); 6787} 6788int c_function(void) { return 42; } 6789EOF 6790 6791 update_cxxflags 6792 6793 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 6794 # C++ compiler $cxx works ok with C compiler $cc 6795 : 6796 else 6797 echo "C++ compiler $cxx does not work with C compiler $cc" 6798 echo "Disabling C++ specific optional code" 6799 cxx= 6800 fi 6801else 6802 echo "No C++ compiler available; disabling C++ specific optional code" 6803 cxx= 6804fi 6805 6806echo_version() { 6807 if test "$1" = "yes" ; then 6808 echo "($2)" 6809 fi 6810} 6811 6812# prepend pixman and ftd flags after all config tests are done 6813QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 6814QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 6815libs_softmmu="$pixman_libs $libs_softmmu" 6816 6817echo "Install prefix $prefix" 6818echo "BIOS directory $(eval echo $qemu_datadir)" 6819echo "firmware path $(eval echo $firmwarepath)" 6820echo "binary directory $(eval echo $bindir)" 6821echo "library directory $(eval echo $libdir)" 6822echo "module directory $(eval echo $qemu_moddir)" 6823echo "libexec directory $(eval echo $libexecdir)" 6824echo "include directory $(eval echo $includedir)" 6825echo "config directory $(eval echo $sysconfdir)" 6826if test "$mingw32" = "no" ; then 6827echo "local state directory $(eval echo $local_statedir)" 6828echo "Manual directory $(eval echo $mandir)" 6829echo "ELF interp prefix $interp_prefix" 6830else 6831echo "local state directory queried at runtime" 6832echo "Windows SDK $win_sdk" 6833fi 6834echo "Build directory $(pwd)" 6835echo "Source path $source_path" 6836echo "GIT binary $git" 6837echo "GIT submodules $git_submodules" 6838echo "C compiler $cc" 6839echo "Host C compiler $host_cc" 6840echo "C++ compiler $cxx" 6841echo "Objective-C compiler $objcc" 6842echo "ARFLAGS $ARFLAGS" 6843echo "CFLAGS $CFLAGS" 6844echo "QEMU_CFLAGS $QEMU_CFLAGS" 6845echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 6846echo "make $make" 6847echo "install $install" 6848echo "python $python ($python_version)" 6849if test "$docs" != "no"; then 6850 echo "sphinx-build $sphinx_build" 6851fi 6852echo "genisoimage $genisoimage" 6853echo "slirp support $slirp $(echo_version $slirp $slirp_version)" 6854if test "$slirp" != "no" ; then 6855 echo "smbd $smbd" 6856fi 6857echo "module support $modules" 6858echo "alt path mod load $module_upgrades" 6859echo "host CPU $cpu" 6860echo "host big endian $bigendian" 6861echo "target list $target_list" 6862echo "gprof enabled $gprof" 6863echo "sparse enabled $sparse" 6864echo "strip binaries $strip_opt" 6865echo "profiler $profiler" 6866echo "static build $static" 6867echo "safe stack $safe_stack" 6868if test "$darwin" = "yes" ; then 6869 echo "Cocoa support $cocoa" 6870fi 6871echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 6872echo "SDL image support $sdl_image" 6873echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 6874echo "GTK GL support $gtk_gl" 6875echo "VTE support $vte $(echo_version $vte $vteversion)" 6876echo "TLS priority $tls_priority" 6877echo "GNUTLS support $gnutls" 6878echo "libgcrypt $gcrypt" 6879if test "$gcrypt" = "yes" 6880then 6881 echo " hmac $gcrypt_hmac" 6882 echo " XTS $gcrypt_xts" 6883fi 6884echo "nettle $nettle $(echo_version $nettle $nettle_version)" 6885if test "$nettle" = "yes" 6886then 6887 echo " XTS $nettle_xts" 6888fi 6889echo "libtasn1 $tasn1" 6890echo "PAM $auth_pam" 6891echo "iconv support $iconv" 6892echo "curses support $curses" 6893echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 6894echo "curl support $curl" 6895echo "mingw32 support $mingw32" 6896echo "Audio drivers $audio_drv_list" 6897echo "Block whitelist (rw) $block_drv_rw_whitelist" 6898echo "Block whitelist (ro) $block_drv_ro_whitelist" 6899echo "VirtFS support $virtfs" 6900echo "Multipath support $mpath" 6901echo "VNC support $vnc" 6902if test "$vnc" = "yes" ; then 6903 echo "VNC SASL support $vnc_sasl" 6904 echo "VNC JPEG support $vnc_jpeg" 6905 echo "VNC PNG support $vnc_png" 6906fi 6907echo "xen support $xen" 6908if test "$xen" = "yes" ; then 6909 echo "xen ctrl version $xen_ctrl_version" 6910fi 6911echo "brlapi support $brlapi" 6912echo "Documentation $docs" 6913echo "PIE $pie" 6914echo "vde support $vde" 6915echo "netmap support $netmap" 6916echo "Linux AIO support $linux_aio" 6917echo "Linux io_uring support $linux_io_uring" 6918echo "ATTR/XATTR support $attr" 6919echo "Install blobs $blobs" 6920echo "KVM support $kvm" 6921echo "HAX support $hax" 6922echo "HVF support $hvf" 6923echo "WHPX support $whpx" 6924echo "TCG support $tcg" 6925if test "$tcg" = "yes" ; then 6926 echo "TCG debug enabled $debug_tcg" 6927 echo "TCG interpreter $tcg_interpreter" 6928fi 6929echo "malloc trim support $malloc_trim" 6930echo "RDMA support $rdma" 6931echo "PVRDMA support $pvrdma" 6932echo "fdt support $fdt" 6933echo "membarrier $membarrier" 6934echo "preadv support $preadv" 6935echo "fdatasync $fdatasync" 6936echo "madvise $madvise" 6937echo "posix_madvise $posix_madvise" 6938echo "posix_memalign $posix_memalign" 6939echo "libcap-ng support $cap_ng" 6940echo "vhost-net support $vhost_net" 6941echo "vhost-crypto support $vhost_crypto" 6942echo "vhost-scsi support $vhost_scsi" 6943echo "vhost-vsock support $vhost_vsock" 6944echo "vhost-user support $vhost_user" 6945echo "vhost-user-fs support $vhost_user_fs" 6946echo "Trace backends $trace_backends" 6947if have_backend "simple"; then 6948echo "Trace output file $trace_file-<pid>" 6949fi 6950echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6951echo "rbd support $rbd" 6952echo "xfsctl support $xfs" 6953echo "smartcard support $smartcard" 6954echo "libusb $libusb" 6955echo "usb net redir $usb_redir" 6956echo "OpenGL support $opengl" 6957echo "OpenGL dmabufs $opengl_dmabuf" 6958echo "libiscsi support $libiscsi" 6959echo "libnfs support $libnfs" 6960echo "build guest agent $guest_agent" 6961echo "QGA VSS support $guest_agent_with_vss" 6962echo "QGA w32 disk info $guest_agent_ntddscsi" 6963echo "QGA MSI support $guest_agent_msi" 6964echo "seccomp support $seccomp" 6965echo "coroutine backend $coroutine" 6966echo "coroutine pool $coroutine_pool" 6967echo "debug stack usage $debug_stack_usage" 6968echo "mutex debugging $debug_mutex" 6969echo "crypto afalg $crypto_afalg" 6970echo "GlusterFS support $glusterfs" 6971echo "gcov $gcov_tool" 6972echo "gcov enabled $gcov" 6973echo "TPM support $tpm" 6974echo "libssh support $libssh" 6975echo "QOM debugging $qom_cast_debug" 6976echo "Live block migration $live_block_migration" 6977echo "lzo support $lzo" 6978echo "snappy support $snappy" 6979echo "bzip2 support $bzip2" 6980echo "lzfse support $lzfse" 6981echo "zstd support $zstd" 6982echo "NUMA host support $numa" 6983echo "libxml2 $libxml2" 6984echo "tcmalloc support $tcmalloc" 6985echo "jemalloc support $jemalloc" 6986echo "avx2 optimization $avx2_opt" 6987echo "avx512f optimization $avx512f_opt" 6988echo "replication support $replication" 6989echo "VxHS block device $vxhs" 6990echo "bochs support $bochs" 6991echo "cloop support $cloop" 6992echo "dmg support $dmg" 6993echo "qcow v1 support $qcow1" 6994echo "vdi support $vdi" 6995echo "vvfat support $vvfat" 6996echo "qed support $qed" 6997echo "parallels support $parallels" 6998echo "sheepdog support $sheepdog" 6999echo "capstone $capstone" 7000echo "libpmem support $libpmem" 7001echo "libdaxctl support $libdaxctl" 7002echo "libudev $libudev" 7003echo "default devices $default_devices" 7004echo "plugin support $plugins" 7005echo "fuzzing support $fuzzing" 7006echo "gdb $gdb_bin" 7007echo "rng-none $rng_none" 7008echo "Linux keyring $secret_keyring" 7009 7010if test "$supported_cpu" = "no"; then 7011 echo 7012 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 7013 echo 7014 echo "CPU host architecture $cpu support is not currently maintained." 7015 echo "The QEMU project intends to remove support for this host CPU in" 7016 echo "a future release if nobody volunteers to maintain it and to" 7017 echo "provide a build host for our continuous integration setup." 7018 echo "configure has succeeded and you can continue to build, but" 7019 echo "if you care about QEMU on this platform you should contact" 7020 echo "us upstream at qemu-devel@nongnu.org." 7021fi 7022 7023if test "$supported_os" = "no"; then 7024 echo 7025 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 7026 echo 7027 echo "Host OS $targetos support is not currently maintained." 7028 echo "The QEMU project intends to remove support for this host OS in" 7029 echo "a future release if nobody volunteers to maintain it and to" 7030 echo "provide a build host for our continuous integration setup." 7031 echo "configure has succeeded and you can continue to build, but" 7032 echo "if you care about QEMU on this platform you should contact" 7033 echo "us upstream at qemu-devel@nongnu.org." 7034fi 7035 7036config_host_mak="config-host.mak" 7037 7038echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 7039 7040echo "# Automatically generated by configure - do not modify" > $config_host_mak 7041echo >> $config_host_mak 7042 7043echo all: >> $config_host_mak 7044echo "prefix=$prefix" >> $config_host_mak 7045echo "bindir=$bindir" >> $config_host_mak 7046echo "libdir=$libdir" >> $config_host_mak 7047echo "libexecdir=$libexecdir" >> $config_host_mak 7048echo "includedir=$includedir" >> $config_host_mak 7049echo "mandir=$mandir" >> $config_host_mak 7050echo "sysconfdir=$sysconfdir" >> $config_host_mak 7051echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 7052echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 7053echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 7054echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 7055echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 7056if test "$mingw32" = "no" ; then 7057 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 7058fi 7059echo "qemu_helperdir=$libexecdir" >> $config_host_mak 7060echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 7061echo "qemu_icondir=$qemu_icondir" >> $config_host_mak 7062echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak 7063echo "libs_cpu=$libs_cpu" >> $config_host_mak 7064echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 7065echo "GIT=$git" >> $config_host_mak 7066echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 7067echo "GIT_UPDATE=$git_update" >> $config_host_mak 7068 7069echo "ARCH=$ARCH" >> $config_host_mak 7070 7071if test "$default_devices" = "yes" ; then 7072 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 7073else 7074 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 7075fi 7076if test "$debug_tcg" = "yes" ; then 7077 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 7078fi 7079if test "$strip_opt" = "yes" ; then 7080 echo "STRIP=${strip}" >> $config_host_mak 7081fi 7082if test "$bigendian" = "yes" ; then 7083 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 7084fi 7085if test "$mingw32" = "yes" ; then 7086 echo "CONFIG_WIN32=y" >> $config_host_mak 7087 rc_version=$(cat $source_path/VERSION) 7088 version_major=${rc_version%%.*} 7089 rc_version=${rc_version#*.} 7090 version_minor=${rc_version%%.*} 7091 rc_version=${rc_version#*.} 7092 version_subminor=${rc_version%%.*} 7093 version_micro=0 7094 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 7095 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 7096 if test "$guest_agent_with_vss" = "yes" ; then 7097 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 7098 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 7099 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 7100 fi 7101 if test "$guest_agent_ntddscsi" = "yes" ; then 7102 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 7103 fi 7104 if test "$guest_agent_msi" = "yes"; then 7105 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 7106 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 7107 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 7108 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 7109 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 7110 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 7111 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 7112 fi 7113else 7114 echo "CONFIG_POSIX=y" >> $config_host_mak 7115fi 7116 7117if test "$linux" = "yes" ; then 7118 echo "CONFIG_LINUX=y" >> $config_host_mak 7119fi 7120 7121if test "$darwin" = "yes" ; then 7122 echo "CONFIG_DARWIN=y" >> $config_host_mak 7123fi 7124 7125if test "$solaris" = "yes" ; then 7126 echo "CONFIG_SOLARIS=y" >> $config_host_mak 7127fi 7128if test "$haiku" = "yes" ; then 7129 echo "CONFIG_HAIKU=y" >> $config_host_mak 7130fi 7131if test "$static" = "yes" ; then 7132 echo "CONFIG_STATIC=y" >> $config_host_mak 7133fi 7134if test "$profiler" = "yes" ; then 7135 echo "CONFIG_PROFILER=y" >> $config_host_mak 7136fi 7137if test "$want_tools" = "yes" ; then 7138 echo "CONFIG_TOOLS=y" >> $config_host_mak 7139fi 7140if test "$slirp" != "no"; then 7141 echo "CONFIG_SLIRP=y" >> $config_host_mak 7142 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 7143 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak 7144 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak 7145fi 7146if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then 7147 echo "config-host.h: slirp/all" >> $config_host_mak 7148fi 7149if test "$vde" = "yes" ; then 7150 echo "CONFIG_VDE=y" >> $config_host_mak 7151 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 7152fi 7153if test "$netmap" = "yes" ; then 7154 echo "CONFIG_NETMAP=y" >> $config_host_mak 7155fi 7156if test "$l2tpv3" = "yes" ; then 7157 echo "CONFIG_L2TPV3=y" >> $config_host_mak 7158fi 7159if test "$gprof" = "yes" ; then 7160 echo "CONFIG_GPROF=y" >> $config_host_mak 7161fi 7162if test "$cap_ng" = "yes" ; then 7163 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak 7164fi 7165echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 7166for drv in $audio_drv_list; do 7167 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 7168 case "$drv" in 7169 alsa | oss | pa | sdl) 7170 echo "$def=m" >> $config_host_mak ;; 7171 *) 7172 echo "$def=y" >> $config_host_mak ;; 7173 esac 7174done 7175echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 7176echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 7177echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 7178echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 7179echo "OSS_LIBS=$oss_libs" >> $config_host_mak 7180echo "JACK_LIBS=$jack_libs" >> $config_host_mak 7181if test "$audio_win_int" = "yes" ; then 7182 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 7183fi 7184echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 7185echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 7186if test "$vnc" = "yes" ; then 7187 echo "CONFIG_VNC=y" >> $config_host_mak 7188fi 7189if test "$vnc_sasl" = "yes" ; then 7190 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 7191fi 7192if test "$vnc_jpeg" = "yes" ; then 7193 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 7194fi 7195if test "$vnc_png" = "yes" ; then 7196 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 7197fi 7198if test "$xkbcommon" = "yes" ; then 7199 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 7200 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 7201fi 7202if test "$xfs" = "yes" ; then 7203 echo "CONFIG_XFS=y" >> $config_host_mak 7204fi 7205qemu_version=$(head $source_path/VERSION) 7206echo "VERSION=$qemu_version" >>$config_host_mak 7207echo "PKGVERSION=$pkgversion" >>$config_host_mak 7208echo "SRC_PATH=$source_path" >> $config_host_mak 7209echo "TARGET_DIRS=$target_list" >> $config_host_mak 7210if [ "$docs" = "yes" ] ; then 7211 echo "BUILD_DOCS=yes" >> $config_host_mak 7212fi 7213if test "$modules" = "yes"; then 7214 # $shacmd can generate a hash started with digit, which the compiler doesn't 7215 # like as an symbol. So prefix it with an underscore 7216 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 7217 echo "CONFIG_MODULES=y" >> $config_host_mak 7218fi 7219if test "$module_upgrades" = "yes"; then 7220 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 7221fi 7222if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 7223 echo "CONFIG_X11=y" >> $config_host_mak 7224 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 7225 echo "X11_LIBS=$x11_libs" >> $config_host_mak 7226fi 7227if test "$sdl" = "yes" ; then 7228 echo "CONFIG_SDL=m" >> $config_host_mak 7229 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 7230 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 7231 if test "$sdl_image" = "yes" ; then 7232 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak 7233 fi 7234fi 7235if test "$cocoa" = "yes" ; then 7236 echo "CONFIG_COCOA=y" >> $config_host_mak 7237fi 7238if test "$iconv" = "yes" ; then 7239 echo "CONFIG_ICONV=y" >> $config_host_mak 7240 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak 7241 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak 7242fi 7243if test "$curses" = "yes" ; then 7244 echo "CONFIG_CURSES=m" >> $config_host_mak 7245 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 7246 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 7247fi 7248if test "$pipe2" = "yes" ; then 7249 echo "CONFIG_PIPE2=y" >> $config_host_mak 7250fi 7251if test "$accept4" = "yes" ; then 7252 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 7253fi 7254if test "$splice" = "yes" ; then 7255 echo "CONFIG_SPLICE=y" >> $config_host_mak 7256fi 7257if test "$eventfd" = "yes" ; then 7258 echo "CONFIG_EVENTFD=y" >> $config_host_mak 7259fi 7260if test "$memfd" = "yes" ; then 7261 echo "CONFIG_MEMFD=y" >> $config_host_mak 7262fi 7263if test "$have_usbfs" = "yes" ; then 7264 echo "CONFIG_USBFS=y" >> $config_host_mak 7265fi 7266if test "$fallocate" = "yes" ; then 7267 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 7268fi 7269if test "$fallocate_punch_hole" = "yes" ; then 7270 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 7271fi 7272if test "$fallocate_zero_range" = "yes" ; then 7273 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 7274fi 7275if test "$posix_fallocate" = "yes" ; then 7276 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 7277fi 7278if test "$sync_file_range" = "yes" ; then 7279 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 7280fi 7281if test "$fiemap" = "yes" ; then 7282 echo "CONFIG_FIEMAP=y" >> $config_host_mak 7283fi 7284if test "$dup3" = "yes" ; then 7285 echo "CONFIG_DUP3=y" >> $config_host_mak 7286fi 7287if test "$ppoll" = "yes" ; then 7288 echo "CONFIG_PPOLL=y" >> $config_host_mak 7289fi 7290if test "$prctl_pr_set_timerslack" = "yes" ; then 7291 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 7292fi 7293if test "$epoll" = "yes" ; then 7294 echo "CONFIG_EPOLL=y" >> $config_host_mak 7295fi 7296if test "$epoll_create1" = "yes" ; then 7297 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 7298fi 7299if test "$sendfile" = "yes" ; then 7300 echo "CONFIG_SENDFILE=y" >> $config_host_mak 7301fi 7302if test "$timerfd" = "yes" ; then 7303 echo "CONFIG_TIMERFD=y" >> $config_host_mak 7304fi 7305if test "$setns" = "yes" ; then 7306 echo "CONFIG_SETNS=y" >> $config_host_mak 7307fi 7308if test "$clock_adjtime" = "yes" ; then 7309 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 7310fi 7311if test "$syncfs" = "yes" ; then 7312 echo "CONFIG_SYNCFS=y" >> $config_host_mak 7313fi 7314if test "$kcov" = "yes" ; then 7315 echo "CONFIG_KCOV=y" >> $config_host_mak 7316fi 7317if test "$inotify" = "yes" ; then 7318 echo "CONFIG_INOTIFY=y" >> $config_host_mak 7319fi 7320if test "$inotify1" = "yes" ; then 7321 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 7322fi 7323if test "$sem_timedwait" = "yes" ; then 7324 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 7325fi 7326if test "$strchrnul" = "yes" ; then 7327 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 7328fi 7329if test "$st_atim" = "yes" ; then 7330 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 7331fi 7332if test "$byteswap_h" = "yes" ; then 7333 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 7334fi 7335if test "$bswap_h" = "yes" ; then 7336 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 7337fi 7338if test "$curl" = "yes" ; then 7339 echo "CONFIG_CURL=m" >> $config_host_mak 7340 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 7341 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 7342fi 7343if test "$brlapi" = "yes" ; then 7344 echo "CONFIG_BRLAPI=y" >> $config_host_mak 7345 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 7346fi 7347if test "$gtk" = "yes" ; then 7348 echo "CONFIG_GTK=m" >> $config_host_mak 7349 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 7350 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 7351 if test "$gtk_gl" = "yes" ; then 7352 echo "CONFIG_GTK_GL=y" >> $config_host_mak 7353 fi 7354fi 7355if test "$gio" = "yes" ; then 7356 echo "CONFIG_GIO=y" >> $config_host_mak 7357 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 7358 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 7359 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 7360fi 7361echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 7362if test "$gnutls" = "yes" ; then 7363 echo "CONFIG_GNUTLS=y" >> $config_host_mak 7364fi 7365if test "$gcrypt" = "yes" ; then 7366 echo "CONFIG_GCRYPT=y" >> $config_host_mak 7367 if test "$gcrypt_hmac" = "yes" ; then 7368 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 7369 fi 7370fi 7371if test "$nettle" = "yes" ; then 7372 echo "CONFIG_NETTLE=y" >> $config_host_mak 7373 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 7374fi 7375if test "$qemu_private_xts" = "yes" ; then 7376 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 7377fi 7378if test "$tasn1" = "yes" ; then 7379 echo "CONFIG_TASN1=y" >> $config_host_mak 7380fi 7381if test "$auth_pam" = "yes" ; then 7382 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 7383fi 7384if test "$have_ifaddrs_h" = "yes" ; then 7385 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 7386fi 7387if test "$have_drm_h" = "yes" ; then 7388 echo "HAVE_DRM_H=y" >> $config_host_mak 7389fi 7390if test "$have_broken_size_max" = "yes" ; then 7391 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 7392fi 7393 7394# Work around a system header bug with some kernel/XFS header 7395# versions where they both try to define 'struct fsxattr': 7396# xfs headers will not try to redefine structs from linux headers 7397# if this macro is set. 7398if test "$have_fsxattr" = "yes" ; then 7399 echo "HAVE_FSXATTR=y" >> $config_host_mak 7400fi 7401if test "$have_copy_file_range" = "yes" ; then 7402 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 7403fi 7404if test "$vte" = "yes" ; then 7405 echo "CONFIG_VTE=y" >> $config_host_mak 7406 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 7407 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 7408fi 7409if test "$virglrenderer" = "yes" ; then 7410 echo "CONFIG_VIRGL=y" >> $config_host_mak 7411 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 7412 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 7413fi 7414if test "$xen" = "yes" ; then 7415 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 7416 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 7417fi 7418if test "$linux_aio" = "yes" ; then 7419 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 7420fi 7421if test "$linux_io_uring" = "yes" ; then 7422 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 7423 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 7424 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 7425fi 7426if test "$attr" = "yes" ; then 7427 echo "CONFIG_ATTR=y" >> $config_host_mak 7428fi 7429if test "$libattr" = "yes" ; then 7430 echo "CONFIG_LIBATTR=y" >> $config_host_mak 7431fi 7432if test "$virtfs" = "yes" ; then 7433 echo "CONFIG_VIRTFS=y" >> $config_host_mak 7434fi 7435if test "$mpath" = "yes" ; then 7436 echo "CONFIG_MPATH=y" >> $config_host_mak 7437 if test "$mpathpersist_new_api" = "yes"; then 7438 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 7439 fi 7440fi 7441if test "$vhost_scsi" = "yes" ; then 7442 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 7443fi 7444if test "$vhost_net" = "yes" ; then 7445 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 7446fi 7447if test "$vhost_net_user" = "yes" ; then 7448 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 7449fi 7450if test "$vhost_crypto" = "yes" ; then 7451 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 7452fi 7453if test "$vhost_vsock" = "yes" ; then 7454 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 7455 if test "$vhost_user" = "yes" ; then 7456 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 7457 fi 7458fi 7459if test "$vhost_kernel" = "yes" ; then 7460 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 7461fi 7462if test "$vhost_user" = "yes" ; then 7463 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 7464fi 7465if test "$vhost_user_fs" = "yes" ; then 7466 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 7467fi 7468if test "$blobs" = "yes" ; then 7469 echo "INSTALL_BLOBS=yes" >> $config_host_mak 7470fi 7471if test "$iovec" = "yes" ; then 7472 echo "CONFIG_IOVEC=y" >> $config_host_mak 7473fi 7474if test "$preadv" = "yes" ; then 7475 echo "CONFIG_PREADV=y" >> $config_host_mak 7476fi 7477if test "$fdt" != "no" ; then 7478 echo "CONFIG_FDT=y" >> $config_host_mak 7479fi 7480if test "$membarrier" = "yes" ; then 7481 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 7482fi 7483if test "$signalfd" = "yes" ; then 7484 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 7485fi 7486if test "$optreset" = "yes" ; then 7487 echo "HAVE_OPTRESET=y" >> $config_host_mak 7488fi 7489if test "$tcg" = "yes"; then 7490 echo "CONFIG_TCG=y" >> $config_host_mak 7491 if test "$tcg_interpreter" = "yes" ; then 7492 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 7493 fi 7494fi 7495if test "$fdatasync" = "yes" ; then 7496 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 7497fi 7498if test "$madvise" = "yes" ; then 7499 echo "CONFIG_MADVISE=y" >> $config_host_mak 7500fi 7501if test "$posix_madvise" = "yes" ; then 7502 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 7503fi 7504if test "$posix_memalign" = "yes" ; then 7505 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 7506fi 7507 7508if test "$spice" = "yes" ; then 7509 echo "CONFIG_SPICE=y" >> $config_host_mak 7510fi 7511 7512if test "$smartcard" = "yes" ; then 7513 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 7514 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 7515 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 7516fi 7517 7518if test "$libusb" = "yes" ; then 7519 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 7520 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 7521 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 7522fi 7523 7524if test "$usb_redir" = "yes" ; then 7525 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 7526 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 7527 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 7528fi 7529 7530if test "$opengl" = "yes" ; then 7531 echo "CONFIG_OPENGL=y" >> $config_host_mak 7532 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 7533 if test "$opengl_dmabuf" = "yes" ; then 7534 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 7535 fi 7536fi 7537 7538if test "$gbm" = "yes" ; then 7539 echo "CONFIG_GBM=y" >> $config_host_mak 7540 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 7541 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 7542fi 7543 7544 7545if test "$malloc_trim" = "yes" ; then 7546 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 7547fi 7548 7549if test "$avx2_opt" = "yes" ; then 7550 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 7551fi 7552 7553if test "$avx512f_opt" = "yes" ; then 7554 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 7555fi 7556 7557if test "$lzo" = "yes" ; then 7558 echo "CONFIG_LZO=y" >> $config_host_mak 7559fi 7560 7561if test "$snappy" = "yes" ; then 7562 echo "CONFIG_SNAPPY=y" >> $config_host_mak 7563fi 7564 7565if test "$bzip2" = "yes" ; then 7566 echo "CONFIG_BZIP2=y" >> $config_host_mak 7567 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 7568fi 7569 7570if test "$lzfse" = "yes" ; then 7571 echo "CONFIG_LZFSE=y" >> $config_host_mak 7572 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 7573fi 7574 7575if test "$zstd" = "yes" ; then 7576 echo "CONFIG_ZSTD=y" >> $config_host_mak 7577fi 7578 7579if test "$libiscsi" = "yes" ; then 7580 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 7581 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 7582 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 7583fi 7584 7585if test "$libnfs" = "yes" ; then 7586 echo "CONFIG_LIBNFS=m" >> $config_host_mak 7587 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 7588fi 7589 7590if test "$seccomp" = "yes"; then 7591 echo "CONFIG_SECCOMP=y" >> $config_host_mak 7592 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 7593 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 7594fi 7595 7596# XXX: suppress that 7597if [ "$bsd" = "yes" ] ; then 7598 echo "CONFIG_BSD=y" >> $config_host_mak 7599fi 7600 7601if test "$localtime_r" = "yes" ; then 7602 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 7603fi 7604if test "$qom_cast_debug" = "yes" ; then 7605 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 7606fi 7607if test "$rbd" = "yes" ; then 7608 echo "CONFIG_RBD=m" >> $config_host_mak 7609 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 7610 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 7611fi 7612 7613echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 7614if test "$coroutine_pool" = "yes" ; then 7615 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 7616else 7617 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 7618fi 7619 7620if test "$debug_stack_usage" = "yes" ; then 7621 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 7622fi 7623 7624if test "$crypto_afalg" = "yes" ; then 7625 echo "CONFIG_AF_ALG=y" >> $config_host_mak 7626fi 7627 7628if test "$open_by_handle_at" = "yes" ; then 7629 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 7630fi 7631 7632if test "$linux_magic_h" = "yes" ; then 7633 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 7634fi 7635 7636if test "$pragma_diagnostic_available" = "yes" ; then 7637 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 7638fi 7639 7640if test "$valgrind_h" = "yes" ; then 7641 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 7642fi 7643 7644if test "$have_asan_iface_fiber" = "yes" ; then 7645 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 7646fi 7647 7648if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 7649 echo "CONFIG_TSAN=y" >> $config_host_mak 7650fi 7651 7652if test "$has_environ" = "yes" ; then 7653 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 7654fi 7655 7656if test "$cpuid_h" = "yes" ; then 7657 echo "CONFIG_CPUID_H=y" >> $config_host_mak 7658fi 7659 7660if test "$int128" = "yes" ; then 7661 echo "CONFIG_INT128=y" >> $config_host_mak 7662fi 7663 7664if test "$atomic128" = "yes" ; then 7665 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 7666fi 7667 7668if test "$cmpxchg128" = "yes" ; then 7669 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 7670fi 7671 7672if test "$atomic64" = "yes" ; then 7673 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 7674fi 7675 7676if test "$attralias" = "yes" ; then 7677 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak 7678fi 7679 7680if test "$getauxval" = "yes" ; then 7681 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 7682fi 7683 7684if test "$glusterfs" = "yes" ; then 7685 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 7686 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 7687 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 7688fi 7689 7690if test "$glusterfs_xlator_opt" = "yes" ; then 7691 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 7692fi 7693 7694if test "$glusterfs_discard" = "yes" ; then 7695 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 7696fi 7697 7698if test "$glusterfs_fallocate" = "yes" ; then 7699 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 7700fi 7701 7702if test "$glusterfs_zerofill" = "yes" ; then 7703 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 7704fi 7705 7706if test "$glusterfs_ftruncate_has_stat" = "yes" ; then 7707 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 7708fi 7709 7710if test "$glusterfs_iocb_has_stat" = "yes" ; then 7711 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 7712fi 7713 7714if test "$libssh" = "yes" ; then 7715 echo "CONFIG_LIBSSH=m" >> $config_host_mak 7716 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 7717 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 7718fi 7719 7720if test "$live_block_migration" = "yes" ; then 7721 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 7722fi 7723 7724if test "$tpm" = "yes"; then 7725 echo 'CONFIG_TPM=y' >> $config_host_mak 7726fi 7727 7728echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 7729if have_backend "nop"; then 7730 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 7731fi 7732if have_backend "simple"; then 7733 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 7734 # Set the appropriate trace file. 7735 trace_file="\"$trace_file-\" FMT_pid" 7736fi 7737if have_backend "log"; then 7738 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 7739fi 7740if have_backend "ust"; then 7741 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 7742fi 7743if have_backend "dtrace"; then 7744 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 7745 if test "$trace_backend_stap" = "yes" ; then 7746 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 7747 fi 7748fi 7749if have_backend "ftrace"; then 7750 if test "$linux" = "yes" ; then 7751 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 7752 else 7753 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 7754 fi 7755fi 7756if have_backend "syslog"; then 7757 if test "$posix_syslog" = "yes" ; then 7758 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 7759 else 7760 feature_not_found "syslog(trace backend)" "syslog not available" 7761 fi 7762fi 7763echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 7764 7765if test "$rdma" = "yes" ; then 7766 echo "CONFIG_RDMA=y" >> $config_host_mak 7767 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 7768fi 7769 7770if test "$pvrdma" = "yes" ; then 7771 echo "CONFIG_PVRDMA=y" >> $config_host_mak 7772fi 7773 7774if test "$have_rtnetlink" = "yes" ; then 7775 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 7776fi 7777 7778if test "$libxml2" = "yes" ; then 7779 echo "CONFIG_LIBXML2=y" >> $config_host_mak 7780 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 7781 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 7782fi 7783 7784if test "$replication" = "yes" ; then 7785 echo "CONFIG_REPLICATION=y" >> $config_host_mak 7786fi 7787 7788if test "$have_af_vsock" = "yes" ; then 7789 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 7790fi 7791 7792if test "$have_sysmacros" = "yes" ; then 7793 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 7794fi 7795 7796if test "$have_static_assert" = "yes" ; then 7797 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 7798fi 7799 7800if test "$have_utmpx" = "yes" ; then 7801 echo "HAVE_UTMPX=y" >> $config_host_mak 7802fi 7803if test "$have_getrandom" = "yes" ; then 7804 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 7805fi 7806if test "$ivshmem" = "yes" ; then 7807 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 7808fi 7809if test "$capstone" != "no" ; then 7810 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 7811fi 7812if test "$debug_mutex" = "yes" ; then 7813 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 7814fi 7815 7816# Hold two types of flag: 7817# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 7818# a thread we have a handle to 7819# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 7820# platform 7821if test "$pthread_setname_np_w_tid" = "yes" ; then 7822 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7823 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 7824elif test "$pthread_setname_np_wo_tid" = "yes" ; then 7825 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7826 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 7827fi 7828 7829if test "$vxhs" = "yes" ; then 7830 echo "CONFIG_VXHS=y" >> $config_host_mak 7831 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 7832fi 7833 7834if test "$libpmem" = "yes" ; then 7835 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 7836fi 7837 7838if test "$libdaxctl" = "yes" ; then 7839 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak 7840fi 7841 7842if test "$bochs" = "yes" ; then 7843 echo "CONFIG_BOCHS=y" >> $config_host_mak 7844fi 7845if test "$cloop" = "yes" ; then 7846 echo "CONFIG_CLOOP=y" >> $config_host_mak 7847fi 7848if test "$dmg" = "yes" ; then 7849 echo "CONFIG_DMG=y" >> $config_host_mak 7850fi 7851if test "$qcow1" = "yes" ; then 7852 echo "CONFIG_QCOW1=y" >> $config_host_mak 7853fi 7854if test "$vdi" = "yes" ; then 7855 echo "CONFIG_VDI=y" >> $config_host_mak 7856fi 7857if test "$vvfat" = "yes" ; then 7858 echo "CONFIG_VVFAT=y" >> $config_host_mak 7859fi 7860if test "$qed" = "yes" ; then 7861 echo "CONFIG_QED=y" >> $config_host_mak 7862fi 7863if test "$parallels" = "yes" ; then 7864 echo "CONFIG_PARALLELS=y" >> $config_host_mak 7865fi 7866if test "$sheepdog" = "yes" ; then 7867 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 7868fi 7869if test "$fuzzing" = "yes" ; then 7870 if test "$have_fuzzer" = "yes"; then 7871 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer" 7872 FUZZ_CFLAGS=" -fsanitize=address,fuzzer" 7873 CFLAGS=" -fsanitize=address,fuzzer-no-link" 7874 else 7875 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer" 7876 exit 1 7877 fi 7878fi 7879 7880if test "$plugins" = "yes" ; then 7881 echo "CONFIG_PLUGIN=y" >> $config_host_mak 7882 LIBS="-ldl $LIBS" 7883 # Copy the export object list to the build dir 7884 if test "$ld_dynamic_list" = "yes" ; then 7885 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 7886 ld_symbols=qemu-plugins-ld.symbols 7887 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 7888 elif test "$ld_exported_symbols_list" = "yes" ; then 7889 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 7890 ld64_symbols=qemu-plugins-ld64.symbols 7891 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 7892 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 7893 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 7894 else 7895 error_exit \ 7896 "If \$plugins=yes, either \$ld_dynamic_list or " \ 7897 "\$ld_exported_symbols_list should have been set to 'yes'." 7898 fi 7899fi 7900 7901if test -n "$gdb_bin" ; then 7902 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 7903fi 7904 7905if test "$secret_keyring" = "yes" ; then 7906 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 7907 if test "$have_keyutils" = "yes" ; then 7908 echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak 7909 fi 7910fi 7911 7912if test "$tcg_interpreter" = "yes"; then 7913 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 7914elif test "$ARCH" = "sparc64" ; then 7915 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 7916elif test "$ARCH" = "s390x" ; then 7917 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 7918elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then 7919 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 7920elif test "$ARCH" = "ppc64" ; then 7921 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 7922elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then 7923 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES" 7924else 7925 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 7926fi 7927 7928echo "HELPERS=$helpers" >> $config_host_mak 7929echo "TOOLS=$tools" >> $config_host_mak 7930echo "ROMS=$roms" >> $config_host_mak 7931echo "MAKE=$make" >> $config_host_mak 7932echo "INSTALL=$install" >> $config_host_mak 7933echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 7934echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 7935echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 7936echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 7937echo "PYTHON=$python" >> $config_host_mak 7938echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak 7939echo "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak 7940echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 7941echo "CC=$cc" >> $config_host_mak 7942if $iasl -h > /dev/null 2>&1; then 7943 echo "IASL=$iasl" >> $config_host_mak 7944fi 7945echo "HOST_CC=$host_cc" >> $config_host_mak 7946echo "CXX=$cxx" >> $config_host_mak 7947echo "OBJCC=$objcc" >> $config_host_mak 7948echo "AR=$ar" >> $config_host_mak 7949echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 7950echo "AS=$as" >> $config_host_mak 7951echo "CCAS=$ccas" >> $config_host_mak 7952echo "CPP=$cpp" >> $config_host_mak 7953echo "OBJCOPY=$objcopy" >> $config_host_mak 7954echo "LD=$ld" >> $config_host_mak 7955echo "RANLIB=$ranlib" >> $config_host_mak 7956echo "NM=$nm" >> $config_host_mak 7957echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 7958echo "WINDRES=$windres" >> $config_host_mak 7959echo "CFLAGS=$CFLAGS" >> $config_host_mak 7960echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 7961echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 7962echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 7963echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 7964if test "$sparse" = "yes" ; then 7965 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 7966 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 7967 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 7968 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 7969 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 7970fi 7971echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 7972echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 7973echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 7974echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 7975echo "LIBS+=$LIBS" >> $config_host_mak 7976echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 7977echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 7978echo "EXESUF=$EXESUF" >> $config_host_mak 7979echo "DSOSUF=$DSOSUF" >> $config_host_mak 7980echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 7981echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 7982echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 7983echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 7984echo "POD2MAN=$POD2MAN" >> $config_host_mak 7985if test "$gcov" = "yes" ; then 7986 echo "CONFIG_GCOV=y" >> $config_host_mak 7987 echo "GCOV=$gcov_tool" >> $config_host_mak 7988fi 7989 7990if test "$libudev" != "no"; then 7991 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 7992 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 7993fi 7994if test "$fuzzing" != "no"; then 7995 echo "CONFIG_FUZZ=y" >> $config_host_mak 7996 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak 7997 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak 7998fi 7999 8000if test "$edk2_blobs" = "yes" ; then 8001 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak 8002fi 8003 8004if test "$rng_none" = "yes"; then 8005 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 8006fi 8007 8008# use included Linux headers 8009if test "$linux" = "yes" ; then 8010 mkdir -p linux-headers 8011 case "$cpu" in 8012 i386|x86_64|x32) 8013 linux_arch=x86 8014 ;; 8015 ppc|ppc64|ppc64le) 8016 linux_arch=powerpc 8017 ;; 8018 s390x) 8019 linux_arch=s390 8020 ;; 8021 aarch64) 8022 linux_arch=arm64 8023 ;; 8024 mips64) 8025 linux_arch=mips 8026 ;; 8027 *) 8028 # For most CPUs the kernel architecture name and QEMU CPU name match. 8029 linux_arch="$cpu" 8030 ;; 8031 esac 8032 # For non-KVM architectures we will not have asm headers 8033 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 8034 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 8035 fi 8036fi 8037 8038for target in $target_list; do 8039target_dir="$target" 8040config_target_mak=$target_dir/config-target.mak 8041target_name=$(echo $target | cut -d '-' -f 1) 8042target_aligned_only="no" 8043case "$target_name" in 8044 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb) 8045 target_aligned_only="yes" 8046 ;; 8047esac 8048target_bigendian="no" 8049case "$target_name" in 8050 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 8051 target_bigendian="yes" 8052 ;; 8053esac 8054target_softmmu="no" 8055target_user_only="no" 8056target_linux_user="no" 8057target_bsd_user="no" 8058case "$target" in 8059 ${target_name}-softmmu) 8060 target_softmmu="yes" 8061 ;; 8062 ${target_name}-linux-user) 8063 target_user_only="yes" 8064 target_linux_user="yes" 8065 ;; 8066 ${target_name}-bsd-user) 8067 target_user_only="yes" 8068 target_bsd_user="yes" 8069 ;; 8070 *) 8071 error_exit "Target '$target' not recognised" 8072 exit 1 8073 ;; 8074esac 8075 8076mkdir -p $target_dir 8077echo "# Automatically generated by configure - do not modify" > $config_target_mak 8078 8079bflt="no" 8080mttcg="no" 8081interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 8082gdb_xml_files="" 8083 8084TARGET_ARCH="$target_name" 8085TARGET_BASE_ARCH="" 8086TARGET_ABI_DIR="" 8087 8088case "$target_name" in 8089 i386) 8090 mttcg="yes" 8091 gdb_xml_files="i386-32bit.xml" 8092 TARGET_SYSTBL_ABI=i386 8093 ;; 8094 x86_64) 8095 TARGET_BASE_ARCH=i386 8096 TARGET_SYSTBL_ABI=common,64 8097 mttcg="yes" 8098 gdb_xml_files="i386-64bit.xml" 8099 ;; 8100 alpha) 8101 mttcg="yes" 8102 TARGET_SYSTBL_ABI=common 8103 ;; 8104 arm|armeb) 8105 TARGET_ARCH=arm 8106 TARGET_SYSTBL_ABI=common,oabi 8107 bflt="yes" 8108 mttcg="yes" 8109 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml" 8110 ;; 8111 aarch64|aarch64_be) 8112 TARGET_ARCH=aarch64 8113 TARGET_BASE_ARCH=arm 8114 bflt="yes" 8115 mttcg="yes" 8116 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" 8117 ;; 8118 cris) 8119 ;; 8120 hppa) 8121 mttcg="yes" 8122 TARGET_SYSTBL_ABI=common,32 8123 ;; 8124 lm32) 8125 ;; 8126 m68k) 8127 bflt="yes" 8128 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml" 8129 TARGET_SYSTBL_ABI=common 8130 ;; 8131 microblaze|microblazeel) 8132 TARGET_ARCH=microblaze 8133 TARGET_SYSTBL_ABI=common 8134 bflt="yes" 8135 echo "TARGET_ABI32=y" >> $config_target_mak 8136 ;; 8137 mips|mipsel) 8138 mttcg="yes" 8139 TARGET_ARCH=mips 8140 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 8141 TARGET_SYSTBL_ABI=o32 8142 ;; 8143 mipsn32|mipsn32el) 8144 mttcg="yes" 8145 TARGET_ARCH=mips64 8146 TARGET_BASE_ARCH=mips 8147 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 8148 echo "TARGET_ABI32=y" >> $config_target_mak 8149 TARGET_SYSTBL_ABI=n32 8150 ;; 8151 mips64|mips64el) 8152 mttcg="no" 8153 TARGET_ARCH=mips64 8154 TARGET_BASE_ARCH=mips 8155 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 8156 TARGET_SYSTBL_ABI=n64 8157 ;; 8158 moxie) 8159 ;; 8160 nios2) 8161 ;; 8162 or1k) 8163 TARGET_ARCH=openrisc 8164 TARGET_BASE_ARCH=openrisc 8165 ;; 8166 ppc) 8167 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 8168 TARGET_SYSTBL_ABI=common,nospu,32 8169 ;; 8170 ppc64) 8171 TARGET_BASE_ARCH=ppc 8172 TARGET_ABI_DIR=ppc 8173 TARGET_SYSTBL_ABI=common,nospu,64 8174 mttcg=yes 8175 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 8176 ;; 8177 ppc64le) 8178 TARGET_ARCH=ppc64 8179 TARGET_BASE_ARCH=ppc 8180 TARGET_ABI_DIR=ppc 8181 TARGET_SYSTBL_ABI=common,nospu,64 8182 mttcg=yes 8183 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 8184 ;; 8185 ppc64abi32) 8186 TARGET_ARCH=ppc64 8187 TARGET_BASE_ARCH=ppc 8188 TARGET_ABI_DIR=ppc 8189 TARGET_SYSTBL_ABI=common,nospu,32 8190 echo "TARGET_ABI32=y" >> $config_target_mak 8191 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 8192 ;; 8193 riscv32) 8194 TARGET_BASE_ARCH=riscv 8195 TARGET_ABI_DIR=riscv 8196 mttcg=yes 8197 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml" 8198 ;; 8199 riscv64) 8200 TARGET_BASE_ARCH=riscv 8201 TARGET_ABI_DIR=riscv 8202 mttcg=yes 8203 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml" 8204 ;; 8205 rx) 8206 TARGET_ARCH=rx 8207 bflt="yes" 8208 target_compiler=$cross_cc_rx 8209 gdb_xml_files="rx-core.xml" 8210 ;; 8211 sh4|sh4eb) 8212 TARGET_ARCH=sh4 8213 TARGET_SYSTBL_ABI=common 8214 bflt="yes" 8215 ;; 8216 sparc) 8217 TARGET_SYSTBL_ABI=common,32 8218 ;; 8219 sparc64) 8220 TARGET_BASE_ARCH=sparc 8221 TARGET_SYSTBL_ABI=common,64 8222 ;; 8223 sparc32plus) 8224 TARGET_ARCH=sparc64 8225 TARGET_BASE_ARCH=sparc 8226 TARGET_ABI_DIR=sparc 8227 TARGET_SYSTBL_ABI=common,32 8228 echo "TARGET_ABI32=y" >> $config_target_mak 8229 ;; 8230 s390x) 8231 TARGET_SYSTBL_ABI=common,64 8232 mttcg=yes 8233 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 8234 ;; 8235 tilegx) 8236 ;; 8237 tricore) 8238 ;; 8239 unicore32) 8240 ;; 8241 xtensa|xtensaeb) 8242 TARGET_ARCH=xtensa 8243 TARGET_SYSTBL_ABI=common 8244 bflt="yes" 8245 mttcg="yes" 8246 ;; 8247 *) 8248 error_exit "Unsupported target CPU" 8249 ;; 8250esac 8251# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 8252if [ "$TARGET_BASE_ARCH" = "" ]; then 8253 TARGET_BASE_ARCH=$TARGET_ARCH 8254fi 8255 8256symlink "$source_path/Makefile.target" "$target_dir/Makefile" 8257 8258upper() { 8259 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 8260} 8261 8262target_arch_name="$(upper $TARGET_ARCH)" 8263echo "TARGET_$target_arch_name=y" >> $config_target_mak 8264echo "TARGET_NAME=$target_name" >> $config_target_mak 8265echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 8266if [ "$TARGET_ABI_DIR" = "" ]; then 8267 TARGET_ABI_DIR=$TARGET_ARCH 8268fi 8269echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 8270if [ "$HOST_VARIANT_DIR" != "" ]; then 8271 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 8272fi 8273if [ "$TARGET_SYSTBL_ABI" != "" ]; then 8274 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak 8275fi 8276 8277if supported_xen_target $target; then 8278 echo "CONFIG_XEN=y" >> $config_target_mak 8279 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak 8280 if test "$xen_pci_passthrough" = yes; then 8281 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 8282 fi 8283else 8284 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak 8285fi 8286if supported_kvm_target $target; then 8287 echo "CONFIG_KVM=y" >> $config_target_mak 8288 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak 8289else 8290 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak 8291fi 8292if supported_hax_target $target; then 8293 echo "CONFIG_HAX=y" >> $config_target_mak 8294fi 8295if supported_hvf_target $target; then 8296 echo "CONFIG_HVF=y" >> $config_target_mak 8297fi 8298if supported_whpx_target $target; then 8299 echo "CONFIG_WHPX=y" >> $config_target_mak 8300fi 8301if test "$target_aligned_only" = "yes" ; then 8302 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak 8303fi 8304if test "$target_bigendian" = "yes" ; then 8305 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 8306fi 8307if test "$target_softmmu" = "yes" ; then 8308 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 8309 if test "$mttcg" = "yes" ; then 8310 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 8311 fi 8312fi 8313if test "$target_user_only" = "yes" ; then 8314 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 8315 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 8316fi 8317if test "$target_linux_user" = "yes" ; then 8318 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 8319fi 8320list="" 8321if test ! -z "$gdb_xml_files" ; then 8322 for x in $gdb_xml_files; do 8323 list="$list $source_path/gdb-xml/$x" 8324 done 8325 echo "TARGET_XML_FILES=$list" >> $config_target_mak 8326fi 8327 8328if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then 8329 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 8330fi 8331if test "$target_bsd_user" = "yes" ; then 8332 echo "CONFIG_BSD_USER=y" >> $config_target_mak 8333fi 8334 8335 8336# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets 8337 8338cflags="" 8339ldflags="" 8340 8341disas_config() { 8342 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 8343 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 8344} 8345 8346for i in $ARCH $TARGET_BASE_ARCH ; do 8347 case "$i" in 8348 alpha) 8349 disas_config "ALPHA" 8350 ;; 8351 aarch64) 8352 if test -n "${cxx}"; then 8353 disas_config "ARM_A64" 8354 fi 8355 ;; 8356 arm) 8357 disas_config "ARM" 8358 if test -n "${cxx}"; then 8359 disas_config "ARM_A64" 8360 fi 8361 ;; 8362 cris) 8363 disas_config "CRIS" 8364 ;; 8365 hppa) 8366 disas_config "HPPA" 8367 ;; 8368 i386|x86_64|x32) 8369 disas_config "I386" 8370 ;; 8371 lm32) 8372 disas_config "LM32" 8373 ;; 8374 m68k) 8375 disas_config "M68K" 8376 ;; 8377 microblaze*) 8378 disas_config "MICROBLAZE" 8379 ;; 8380 mips*) 8381 disas_config "MIPS" 8382 if test -n "${cxx}"; then 8383 disas_config "NANOMIPS" 8384 fi 8385 ;; 8386 moxie*) 8387 disas_config "MOXIE" 8388 ;; 8389 nios2) 8390 disas_config "NIOS2" 8391 ;; 8392 or1k) 8393 disas_config "OPENRISC" 8394 ;; 8395 ppc*) 8396 disas_config "PPC" 8397 ;; 8398 riscv*) 8399 disas_config "RISCV" 8400 ;; 8401 rx) 8402 disas_config "RX" 8403 ;; 8404 s390*) 8405 disas_config "S390" 8406 ;; 8407 sh4) 8408 disas_config "SH4" 8409 ;; 8410 sparc*) 8411 disas_config "SPARC" 8412 ;; 8413 xtensa*) 8414 disas_config "XTENSA" 8415 ;; 8416 esac 8417done 8418if test "$tcg_interpreter" = "yes" ; then 8419 disas_config "TCI" 8420fi 8421 8422case "$ARCH" in 8423alpha) 8424 # Ensure there's only a single GP 8425 cflags="-msmall-data $cflags" 8426;; 8427esac 8428 8429if test "$gprof" = "yes" ; then 8430 if test "$target_linux_user" = "yes" ; then 8431 cflags="-p $cflags" 8432 ldflags="-p $ldflags" 8433 fi 8434 if test "$target_softmmu" = "yes" ; then 8435 ldflags="-p $ldflags" 8436 echo "GPROF_CFLAGS=-p" >> $config_target_mak 8437 fi 8438fi 8439 8440# Newer kernels on s390 check for an S390_PGSTE program header and 8441# enable the pgste page table extensions in that case. This makes 8442# the vm.allocate_pgste sysctl unnecessary. We enable this program 8443# header if 8444# - we build on s390x 8445# - we build the system emulation for s390x (qemu-system-s390x) 8446# - KVM is enabled 8447# - the linker supports --s390-pgste 8448if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \ 8449 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then 8450 if ld_has --s390-pgste ; then 8451 ldflags="-Wl,--s390-pgste $ldflags" 8452 fi 8453fi 8454 8455echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak 8456echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 8457 8458done # for target in $targets 8459 8460echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak 8461echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak 8462 8463if [ "$fdt" = "git" ]; then 8464 echo "config-host.h: dtc/all" >> $config_host_mak 8465fi 8466if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 8467 echo "config-host.h: capstone/all" >> $config_host_mak 8468fi 8469if test -n "$LIBCAPSTONE"; then 8470 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 8471fi 8472 8473if test "$numa" = "yes"; then 8474 echo "CONFIG_NUMA=y" >> $config_host_mak 8475fi 8476 8477if test "$ccache_cpp2" = "yes"; then 8478 echo "export CCACHE_CPP2=y" >> $config_host_mak 8479fi 8480 8481if test "$safe_stack" = "yes"; then 8482 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 8483fi 8484 8485# If we're using a separate build tree, set it up now. 8486# DIRS are directories which we simply mkdir in the build tree; 8487# LINKS are things to symlink back into the source tree 8488# (these can be both files and directories). 8489# Caution: do not add files or directories here using wildcards. This 8490# will result in problems later if a new file matching the wildcard is 8491# added to the source tree -- nothing will cause configure to be rerun 8492# so the build tree will be missing the link back to the new file, and 8493# tests might fail. Prefer to keep the relevant files in their own 8494# directory and symlink the directory instead. 8495DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 8496DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 8497DIRS="$DIRS docs docs/interop fsdev scsi" 8498DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 8499DIRS="$DIRS roms/seabios roms/vgabios" 8500LINKS="Makefile" 8501LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile" 8502LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile" 8503LINKS="$LINKS tests/plugin/Makefile" 8504LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps" 8505LINKS="$LINKS pc-bios/s390-ccw/Makefile" 8506LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile" 8507LINKS="$LINKS pc-bios/qemu-icon.bmp" 8508LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 8509LINKS="$LINKS tests/acceptance tests/data" 8510LINKS="$LINKS tests/qemu-iotests/check" 8511LINKS="$LINKS python" 8512for bios_file in \ 8513 $source_path/pc-bios/*.bin \ 8514 $source_path/pc-bios/*.lid \ 8515 $source_path/pc-bios/*.rom \ 8516 $source_path/pc-bios/*.dtb \ 8517 $source_path/pc-bios/*.img \ 8518 $source_path/pc-bios/openbios-* \ 8519 $source_path/pc-bios/u-boot.* \ 8520 $source_path/pc-bios/edk2-*.fd.bz2 \ 8521 $source_path/pc-bios/palcode-* 8522do 8523 LINKS="$LINKS pc-bios/$(basename $bios_file)" 8524done 8525mkdir -p $DIRS 8526for f in $LINKS ; do 8527 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 8528 symlink "$source_path/$f" "$f" 8529 fi 8530done 8531 8532(for i in $cross_cc_vars; do 8533 export $i 8534done 8535export target_list source_path use_containers 8536$source_path/tests/tcg/configure.sh) 8537 8538# temporary config to build submodules 8539for rom in seabios vgabios ; do 8540 config_mak=roms/$rom/config.mak 8541 echo "# Automatically generated by configure - do not modify" > $config_mak 8542 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 8543 echo "AS=$as" >> $config_mak 8544 echo "CCAS=$ccas" >> $config_mak 8545 echo "CC=$cc" >> $config_mak 8546 echo "BCC=bcc" >> $config_mak 8547 echo "CPP=$cpp" >> $config_mak 8548 echo "OBJCOPY=objcopy" >> $config_mak 8549 echo "IASL=$iasl" >> $config_mak 8550 echo "LD=$ld" >> $config_mak 8551 echo "RANLIB=$ranlib" >> $config_mak 8552done 8553 8554# set up qemu-iotests in this build directory 8555iotests_common_env="tests/qemu-iotests/common.env" 8556 8557echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 8558echo >> "$iotests_common_env" 8559echo "export PYTHON='$python'" >> "$iotests_common_env" 8560 8561# Save the configure command line for later reuse. 8562cat <<EOD >config.status 8563#!/bin/sh 8564# Generated by configure. 8565# Run this file to recreate the current configuration. 8566# Compiler output produced by configure, useful for debugging 8567# configure, is in config.log if it exists. 8568EOD 8569 8570preserve_env() { 8571 envname=$1 8572 8573 eval envval=\$$envname 8574 8575 if test -n "$envval" 8576 then 8577 echo "$envname='$envval'" >> config.status 8578 echo "export $envname" >> config.status 8579 else 8580 echo "unset $envname" >> config.status 8581 fi 8582} 8583 8584# Preserve various env variables that influence what 8585# features/build target configure will detect 8586preserve_env AR 8587preserve_env AS 8588preserve_env CC 8589preserve_env CPP 8590preserve_env CXX 8591preserve_env INSTALL 8592preserve_env LD 8593preserve_env LD_LIBRARY_PATH 8594preserve_env LIBTOOL 8595preserve_env MAKE 8596preserve_env NM 8597preserve_env OBJCOPY 8598preserve_env PATH 8599preserve_env PKG_CONFIG 8600preserve_env PKG_CONFIG_LIBDIR 8601preserve_env PKG_CONFIG_PATH 8602preserve_env PYTHON 8603preserve_env SDL2_CONFIG 8604preserve_env SMBD 8605preserve_env STRIP 8606preserve_env WINDRES 8607 8608printf "exec" >>config.status 8609printf " '%s'" "$0" "$@" >>config.status 8610echo ' "$@"' >>config.status 8611chmod +x config.status 8612 8613rm -r "$TMPDIR1" 8614