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