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