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 | mips64:mips | mips64el: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 mkisofs 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) { 4591 void *tmp = malloc(1); 4592 if (tmp != NULL) { 4593 return 0; 4594 } 4595 return 1; 4596} 4597EOF 4598 4599 if compile_prog "" "-ltcmalloc" ; then 4600 LIBS="-ltcmalloc $LIBS" 4601 else 4602 feature_not_found "tcmalloc" "install gperftools devel" 4603 fi 4604fi 4605 4606########################################## 4607# jemalloc probe 4608 4609if test "$jemalloc" = "yes" ; then 4610 cat > $TMPC << EOF 4611#include <stdlib.h> 4612int main(void) { 4613 void *tmp = malloc(1); 4614 if (tmp != NULL) { 4615 return 0; 4616 } 4617 return 1; 4618} 4619EOF 4620 4621 if compile_prog "" "-ljemalloc" ; then 4622 LIBS="-ljemalloc $LIBS" 4623 else 4624 feature_not_found "jemalloc" "install jemalloc devel" 4625 fi 4626fi 4627 4628########################################## 4629# signalfd probe 4630signalfd="no" 4631cat > $TMPC << EOF 4632#include <unistd.h> 4633#include <sys/syscall.h> 4634#include <signal.h> 4635int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4636EOF 4637 4638if compile_prog "" "" ; then 4639 signalfd=yes 4640fi 4641 4642# check if optreset global is declared by <getopt.h> 4643optreset="no" 4644cat > $TMPC << EOF 4645#include <getopt.h> 4646int main(void) { return optreset; } 4647EOF 4648 4649if compile_prog "" "" ; then 4650 optreset=yes 4651fi 4652 4653# check if eventfd is supported 4654eventfd=no 4655cat > $TMPC << EOF 4656#include <sys/eventfd.h> 4657 4658int main(void) 4659{ 4660 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4661} 4662EOF 4663if compile_prog "" "" ; then 4664 eventfd=yes 4665fi 4666 4667# check if memfd is supported 4668memfd=no 4669cat > $TMPC << EOF 4670#include <sys/mman.h> 4671 4672int main(void) 4673{ 4674 return memfd_create("foo", MFD_ALLOW_SEALING); 4675} 4676EOF 4677if compile_prog "" "" ; then 4678 memfd=yes 4679fi 4680 4681# check for usbfs 4682have_usbfs=no 4683if test "$linux_user" = "yes"; then 4684 cat > $TMPC << EOF 4685#include <linux/usbdevice_fs.h> 4686 4687#ifndef USBDEVFS_GET_CAPABILITIES 4688#error "USBDEVFS_GET_CAPABILITIES undefined" 4689#endif 4690 4691#ifndef USBDEVFS_DISCONNECT_CLAIM 4692#error "USBDEVFS_DISCONNECT_CLAIM undefined" 4693#endif 4694 4695int main(void) 4696{ 4697 return 0; 4698} 4699EOF 4700 if compile_prog "" ""; then 4701 have_usbfs=yes 4702 fi 4703fi 4704 4705# check for fallocate 4706fallocate=no 4707cat > $TMPC << EOF 4708#include <fcntl.h> 4709 4710int main(void) 4711{ 4712 fallocate(0, 0, 0, 0); 4713 return 0; 4714} 4715EOF 4716if compile_prog "" "" ; then 4717 fallocate=yes 4718fi 4719 4720# check for fallocate hole punching 4721fallocate_punch_hole=no 4722cat > $TMPC << EOF 4723#include <fcntl.h> 4724#include <linux/falloc.h> 4725 4726int main(void) 4727{ 4728 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4729 return 0; 4730} 4731EOF 4732if compile_prog "" "" ; then 4733 fallocate_punch_hole=yes 4734fi 4735 4736# check that fallocate supports range zeroing inside the file 4737fallocate_zero_range=no 4738cat > $TMPC << EOF 4739#include <fcntl.h> 4740#include <linux/falloc.h> 4741 4742int main(void) 4743{ 4744 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4745 return 0; 4746} 4747EOF 4748if compile_prog "" "" ; then 4749 fallocate_zero_range=yes 4750fi 4751 4752# check for posix_fallocate 4753posix_fallocate=no 4754cat > $TMPC << EOF 4755#include <fcntl.h> 4756 4757int main(void) 4758{ 4759 posix_fallocate(0, 0, 0); 4760 return 0; 4761} 4762EOF 4763if compile_prog "" "" ; then 4764 posix_fallocate=yes 4765fi 4766 4767# check for sync_file_range 4768sync_file_range=no 4769cat > $TMPC << EOF 4770#include <fcntl.h> 4771 4772int main(void) 4773{ 4774 sync_file_range(0, 0, 0, 0); 4775 return 0; 4776} 4777EOF 4778if compile_prog "" "" ; then 4779 sync_file_range=yes 4780fi 4781 4782# check for linux/fiemap.h and FS_IOC_FIEMAP 4783fiemap=no 4784cat > $TMPC << EOF 4785#include <sys/ioctl.h> 4786#include <linux/fs.h> 4787#include <linux/fiemap.h> 4788 4789int main(void) 4790{ 4791 ioctl(0, FS_IOC_FIEMAP, 0); 4792 return 0; 4793} 4794EOF 4795if compile_prog "" "" ; then 4796 fiemap=yes 4797fi 4798 4799# check for dup3 4800dup3=no 4801cat > $TMPC << EOF 4802#include <unistd.h> 4803 4804int main(void) 4805{ 4806 dup3(0, 0, 0); 4807 return 0; 4808} 4809EOF 4810if compile_prog "" "" ; then 4811 dup3=yes 4812fi 4813 4814# check for ppoll support 4815ppoll=no 4816cat > $TMPC << EOF 4817#include <poll.h> 4818 4819int main(void) 4820{ 4821 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4822 ppoll(&pfd, 1, 0, 0); 4823 return 0; 4824} 4825EOF 4826if compile_prog "" "" ; then 4827 ppoll=yes 4828fi 4829 4830# check for prctl(PR_SET_TIMERSLACK , ... ) support 4831prctl_pr_set_timerslack=no 4832cat > $TMPC << EOF 4833#include <sys/prctl.h> 4834 4835int main(void) 4836{ 4837 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4838 return 0; 4839} 4840EOF 4841if compile_prog "" "" ; then 4842 prctl_pr_set_timerslack=yes 4843fi 4844 4845# check for epoll support 4846epoll=no 4847cat > $TMPC << EOF 4848#include <sys/epoll.h> 4849 4850int main(void) 4851{ 4852 epoll_create(0); 4853 return 0; 4854} 4855EOF 4856if compile_prog "" "" ; then 4857 epoll=yes 4858fi 4859 4860# epoll_create1 is a later addition 4861# so we must check separately for its presence 4862epoll_create1=no 4863cat > $TMPC << EOF 4864#include <sys/epoll.h> 4865 4866int main(void) 4867{ 4868 /* Note that we use epoll_create1 as a value, not as 4869 * a function being called. This is necessary so that on 4870 * old SPARC glibc versions where the function was present in 4871 * the library but not declared in the header file we will 4872 * fail the configure check. (Otherwise we will get a compiler 4873 * warning but not an error, and will proceed to fail the 4874 * qemu compile where we compile with -Werror.) 4875 */ 4876 return (int)(uintptr_t)&epoll_create1; 4877} 4878EOF 4879if compile_prog "" "" ; then 4880 epoll_create1=yes 4881fi 4882 4883# check for sendfile support 4884sendfile=no 4885cat > $TMPC << EOF 4886#include <sys/sendfile.h> 4887 4888int main(void) 4889{ 4890 return sendfile(0, 0, 0, 0); 4891} 4892EOF 4893if compile_prog "" "" ; then 4894 sendfile=yes 4895fi 4896 4897# check for timerfd support (glibc 2.8 and newer) 4898timerfd=no 4899cat > $TMPC << EOF 4900#include <sys/timerfd.h> 4901 4902int main(void) 4903{ 4904 return(timerfd_create(CLOCK_REALTIME, 0)); 4905} 4906EOF 4907if compile_prog "" "" ; then 4908 timerfd=yes 4909fi 4910 4911# check for setns and unshare support 4912setns=no 4913cat > $TMPC << EOF 4914#include <sched.h> 4915 4916int main(void) 4917{ 4918 int ret; 4919 ret = setns(0, 0); 4920 ret = unshare(0); 4921 return ret; 4922} 4923EOF 4924if compile_prog "" "" ; then 4925 setns=yes 4926fi 4927 4928# clock_adjtime probe 4929clock_adjtime=no 4930cat > $TMPC <<EOF 4931#include <time.h> 4932 4933int main(void) 4934{ 4935 return clock_adjtime(0, 0); 4936} 4937EOF 4938clock_adjtime=no 4939if compile_prog "" "" ; then 4940 clock_adjtime=yes 4941fi 4942 4943# syncfs probe 4944syncfs=no 4945cat > $TMPC <<EOF 4946#include <unistd.h> 4947 4948int main(void) 4949{ 4950 return syncfs(0); 4951} 4952EOF 4953syncfs=no 4954if compile_prog "" "" ; then 4955 syncfs=yes 4956fi 4957 4958# check for kcov support (kernel must be 4.4+, compiled with certain options) 4959kcov=no 4960if check_include sys/kcov.h ; then 4961 kcov=yes 4962fi 4963 4964# If we're making warnings fatal, apply this to Sphinx runs as well 4965sphinx_werror="" 4966if test "$werror" = "yes"; then 4967 sphinx_werror="-W" 4968fi 4969 4970# Check we have a new enough version of sphinx-build 4971has_sphinx_build() { 4972 # This is a bit awkward but works: create a trivial document and 4973 # try to run it with our configuration file (which enforces a 4974 # version requirement). This will fail if either 4975 # sphinx-build doesn't exist at all or if it is too old. 4976 mkdir -p "$TMPDIR1/sphinx" 4977 touch "$TMPDIR1/sphinx/index.rst" 4978 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \ 4979 -b html "$TMPDIR1/sphinx" \ 4980 "$TMPDIR1/sphinx/out" >> config.log 2>&1 4981} 4982 4983# Check if tools are available to build documentation. 4984if test "$docs" != "no" ; then 4985 if has_sphinx_build; then 4986 sphinx_ok=yes 4987 else 4988 sphinx_ok=no 4989 fi 4990 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then 4991 docs=yes 4992 else 4993 if test "$docs" = "yes" ; then 4994 if has $sphinx_build && test "$sphinx_ok" != "yes"; then 4995 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2 4996 fi 4997 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx" 4998 fi 4999 docs=no 5000 fi 5001fi 5002 5003# Search for bswap_32 function 5004byteswap_h=no 5005cat > $TMPC << EOF 5006#include <byteswap.h> 5007int main(void) { return bswap_32(0); } 5008EOF 5009if compile_prog "" "" ; then 5010 byteswap_h=yes 5011fi 5012 5013# Search for bswap32 function 5014bswap_h=no 5015cat > $TMPC << EOF 5016#include <sys/endian.h> 5017#include <sys/types.h> 5018#include <machine/bswap.h> 5019int main(void) { return bswap32(0); } 5020EOF 5021if compile_prog "" "" ; then 5022 bswap_h=yes 5023fi 5024 5025########################################## 5026# Do we have libiscsi >= 1.9.0 5027if test "$libiscsi" != "no" ; then 5028 if $pkg_config --atleast-version=1.9.0 libiscsi; then 5029 libiscsi="yes" 5030 libiscsi_cflags=$($pkg_config --cflags libiscsi) 5031 libiscsi_libs=$($pkg_config --libs libiscsi) 5032 else 5033 if test "$libiscsi" = "yes" ; then 5034 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 5035 fi 5036 libiscsi="no" 5037 fi 5038fi 5039 5040########################################## 5041# Do we need libm 5042cat > $TMPC << EOF 5043#include <math.h> 5044int main(int argc, char **argv) { return isnan(sin((double)argc)); } 5045EOF 5046if compile_prog "" "" ; then 5047 : 5048elif compile_prog "" "-lm" ; then 5049 LIBS="-lm $LIBS" 5050 libs_qga="-lm $libs_qga" 5051else 5052 error_exit "libm check failed" 5053fi 5054 5055########################################## 5056# Do we need librt 5057# uClibc provides 2 versions of clock_gettime(), one with realtime 5058# support and one without. This means that the clock_gettime() don't 5059# need -lrt. We still need it for timer_create() so we check for this 5060# function in addition. 5061cat > $TMPC <<EOF 5062#include <signal.h> 5063#include <time.h> 5064int main(void) { 5065 timer_create(CLOCK_REALTIME, NULL, NULL); 5066 return clock_gettime(CLOCK_REALTIME, NULL); 5067} 5068EOF 5069 5070if compile_prog "" "" ; then 5071 : 5072# we need pthread for static linking. use previous pthread test result 5073elif compile_prog "" "$pthread_lib -lrt" ; then 5074 LIBS="$LIBS -lrt" 5075 libs_qga="$libs_qga -lrt" 5076fi 5077 5078# Check whether we need to link libutil for openpty() 5079cat > $TMPC << EOF 5080extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 5081int main(void) { return openpty(0, 0, 0, 0, 0); } 5082EOF 5083 5084if ! compile_prog "" "" ; then 5085 if compile_prog "" "-lutil" ; then 5086 libs_softmmu="-lutil $libs_softmmu" 5087 libs_tools="-lutil $libs_tools" 5088 fi 5089fi 5090 5091########################################## 5092# spice probe 5093if test "$spice" != "no" ; then 5094 cat > $TMPC << EOF 5095#include <spice.h> 5096int main(void) { spice_server_new(); return 0; } 5097EOF 5098 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 5099 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 5100 if $pkg_config --atleast-version=0.12.5 spice-server && \ 5101 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 5102 compile_prog "$spice_cflags" "$spice_libs" ; then 5103 spice="yes" 5104 libs_softmmu="$libs_softmmu $spice_libs" 5105 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 5106 spice_protocol_version=$($pkg_config --modversion spice-protocol) 5107 spice_server_version=$($pkg_config --modversion spice-server) 5108 else 5109 if test "$spice" = "yes" ; then 5110 feature_not_found "spice" \ 5111 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 5112 fi 5113 spice="no" 5114 fi 5115fi 5116 5117# check for smartcard support 5118if test "$smartcard" != "no"; then 5119 if $pkg_config --atleast-version=2.5.1 libcacard; then 5120 libcacard_cflags=$($pkg_config --cflags libcacard) 5121 libcacard_libs=$($pkg_config --libs libcacard) 5122 smartcard="yes" 5123 else 5124 if test "$smartcard" = "yes"; then 5125 feature_not_found "smartcard" "Install libcacard devel" 5126 fi 5127 smartcard="no" 5128 fi 5129fi 5130 5131# check for libusb 5132if test "$libusb" != "no" ; then 5133 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 5134 libusb="yes" 5135 libusb_cflags=$($pkg_config --cflags libusb-1.0) 5136 libusb_libs=$($pkg_config --libs libusb-1.0) 5137 else 5138 if test "$libusb" = "yes"; then 5139 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 5140 fi 5141 libusb="no" 5142 fi 5143fi 5144 5145# check for usbredirparser for usb network redirection support 5146if test "$usb_redir" != "no" ; then 5147 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 5148 usb_redir="yes" 5149 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 5150 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 5151 else 5152 if test "$usb_redir" = "yes"; then 5153 feature_not_found "usb-redir" "Install usbredir devel" 5154 fi 5155 usb_redir="no" 5156 fi 5157fi 5158 5159########################################## 5160# check if we have VSS SDK headers for win 5161 5162if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5163 test "$vss_win32_sdk" != "no" ; then 5164 case "$vss_win32_sdk" in 5165 "") vss_win32_include="-isystem $source_path" ;; 5166 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 5167 # handle path with spaces. So we symlink the headers into ".sdk/vss". 5168 vss_win32_include="-isystem $source_path/.sdk/vss" 5169 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 5170 ;; 5171 *) vss_win32_include="-isystem $vss_win32_sdk" 5172 esac 5173 cat > $TMPC << EOF 5174#define __MIDL_user_allocate_free_DEFINED__ 5175#include <inc/win2003/vss.h> 5176int main(void) { return VSS_CTX_BACKUP; } 5177EOF 5178 if compile_prog "$vss_win32_include" "" ; then 5179 guest_agent_with_vss="yes" 5180 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 5181 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 5182 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 5183 else 5184 if test "$vss_win32_sdk" != "" ; then 5185 echo "ERROR: Please download and install Microsoft VSS SDK:" 5186 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 5187 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 5188 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 5189 echo "ERROR: The headers are extracted in the directory \`inc'." 5190 feature_not_found "VSS support" 5191 fi 5192 guest_agent_with_vss="no" 5193 fi 5194fi 5195 5196########################################## 5197# lookup Windows platform SDK (if not specified) 5198# The SDK is needed only to build .tlb (type library) file of guest agent 5199# VSS provider from the source. It is usually unnecessary because the 5200# pre-compiled .tlb file is included. 5201 5202if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5203 test "$guest_agent_with_vss" = "yes" ; then 5204 if test -z "$win_sdk"; then 5205 programfiles="$PROGRAMFILES" 5206 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 5207 if test -n "$programfiles"; then 5208 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 5209 else 5210 feature_not_found "Windows SDK" 5211 fi 5212 elif test "$win_sdk" = "no"; then 5213 win_sdk="" 5214 fi 5215fi 5216 5217########################################## 5218# check if mingw environment provides a recent ntddscsi.h 5219if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 5220 cat > $TMPC << EOF 5221#include <windows.h> 5222#include <ntddscsi.h> 5223int main(void) { 5224#if !defined(IOCTL_SCSI_GET_ADDRESS) 5225#error Missing required ioctl definitions 5226#endif 5227 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 5228 return addr.Lun; 5229} 5230EOF 5231 if compile_prog "" "" ; then 5232 guest_agent_ntddscsi=yes 5233 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 5234 fi 5235fi 5236 5237########################################## 5238# virgl renderer probe 5239 5240if test "$virglrenderer" != "no" ; then 5241 cat > $TMPC << EOF 5242#include <virglrenderer.h> 5243int main(void) { virgl_renderer_poll(); return 0; } 5244EOF 5245 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 5246 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 5247 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 5248 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 5249 compile_prog "$virgl_cflags" "$virgl_libs" ; then 5250 virglrenderer="yes" 5251 else 5252 if test "$virglrenderer" = "yes" ; then 5253 feature_not_found "virglrenderer" 5254 fi 5255 virglrenderer="no" 5256 fi 5257fi 5258 5259########################################## 5260# capstone 5261 5262case "$capstone" in 5263 "" | yes) 5264 if $pkg_config capstone; then 5265 capstone=system 5266 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5267 capstone=git 5268 elif test -e "${source_path}/capstone/Makefile" ; then 5269 capstone=internal 5270 elif test -z "$capstone" ; then 5271 capstone=no 5272 else 5273 feature_not_found "capstone" "Install capstone devel or git submodule" 5274 fi 5275 ;; 5276 5277 system) 5278 if ! $pkg_config capstone; then 5279 feature_not_found "capstone" "Install capstone devel" 5280 fi 5281 ;; 5282esac 5283 5284case "$capstone" in 5285 git | internal) 5286 if test "$capstone" = git; then 5287 git_submodules="${git_submodules} capstone" 5288 fi 5289 mkdir -p capstone 5290 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include" 5291 if test "$mingw32" = "yes"; then 5292 LIBCAPSTONE=capstone.lib 5293 else 5294 LIBCAPSTONE=libcapstone.a 5295 fi 5296 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu" 5297 ;; 5298 5299 system) 5300 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 5301 libs_cpu="$($pkg_config --libs capstone) $libs_cpu" 5302 ;; 5303 5304 no) 5305 ;; 5306 *) 5307 error_exit "Unknown state for capstone: $capstone" 5308 ;; 5309esac 5310 5311########################################## 5312# check if we have fdatasync 5313 5314fdatasync=no 5315cat > $TMPC << EOF 5316#include <unistd.h> 5317int main(void) { 5318#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 5319return fdatasync(0); 5320#else 5321#error Not supported 5322#endif 5323} 5324EOF 5325if compile_prog "" "" ; then 5326 fdatasync=yes 5327fi 5328 5329########################################## 5330# check if we have madvise 5331 5332madvise=no 5333cat > $TMPC << EOF 5334#include <sys/types.h> 5335#include <sys/mman.h> 5336#include <stddef.h> 5337int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 5338EOF 5339if compile_prog "" "" ; then 5340 madvise=yes 5341fi 5342 5343########################################## 5344# check if we have posix_madvise 5345 5346posix_madvise=no 5347cat > $TMPC << EOF 5348#include <sys/mman.h> 5349#include <stddef.h> 5350int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 5351EOF 5352if compile_prog "" "" ; then 5353 posix_madvise=yes 5354fi 5355 5356########################################## 5357# check if we have posix_memalign() 5358 5359posix_memalign=no 5360cat > $TMPC << EOF 5361#include <stdlib.h> 5362int main(void) { 5363 void *p; 5364 return posix_memalign(&p, 8, 8); 5365} 5366EOF 5367if compile_prog "" "" ; then 5368 posix_memalign=yes 5369fi 5370 5371########################################## 5372# check if we have posix_syslog 5373 5374posix_syslog=no 5375cat > $TMPC << EOF 5376#include <syslog.h> 5377int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 5378EOF 5379if compile_prog "" "" ; then 5380 posix_syslog=yes 5381fi 5382 5383########################################## 5384# check if we have sem_timedwait 5385 5386sem_timedwait=no 5387cat > $TMPC << EOF 5388#include <semaphore.h> 5389int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 5390EOF 5391if compile_prog "" "" ; then 5392 sem_timedwait=yes 5393fi 5394 5395########################################## 5396# check if we have strchrnul 5397 5398strchrnul=no 5399cat > $TMPC << EOF 5400#include <string.h> 5401int main(void); 5402// Use a haystack that the compiler shouldn't be able to constant fold 5403char *haystack = (char*)&main; 5404int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 5405EOF 5406if compile_prog "" "" ; then 5407 strchrnul=yes 5408fi 5409 5410######################################### 5411# check if we have st_atim 5412 5413st_atim=no 5414cat > $TMPC << EOF 5415#include <sys/stat.h> 5416#include <stddef.h> 5417int main(void) { return offsetof(struct stat, st_atim); } 5418EOF 5419if compile_prog "" "" ; then 5420 st_atim=yes 5421fi 5422 5423########################################## 5424# check if trace backend exists 5425 5426$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 5427if test "$?" -ne 0 ; then 5428 error_exit "invalid trace backends" \ 5429 "Please choose supported trace backends." 5430fi 5431 5432########################################## 5433# For 'ust' backend, test if ust headers are present 5434if have_backend "ust"; then 5435 cat > $TMPC << EOF 5436#include <lttng/tracepoint.h> 5437int main(void) { return 0; } 5438EOF 5439 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 5440 if $pkg_config lttng-ust --exists; then 5441 lttng_ust_libs=$($pkg_config --libs lttng-ust) 5442 else 5443 lttng_ust_libs="-llttng-ust -ldl" 5444 fi 5445 if $pkg_config liburcu-bp --exists; then 5446 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 5447 else 5448 urcu_bp_libs="-lurcu-bp" 5449 fi 5450 5451 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 5452 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 5453 else 5454 error_exit "Trace backend 'ust' missing lttng-ust header files" 5455 fi 5456fi 5457 5458########################################## 5459# For 'dtrace' backend, test if 'dtrace' command is present 5460if have_backend "dtrace"; then 5461 if ! has 'dtrace' ; then 5462 error_exit "dtrace command is not found in PATH $PATH" 5463 fi 5464 trace_backend_stap="no" 5465 if has 'stap' ; then 5466 trace_backend_stap="yes" 5467 fi 5468fi 5469 5470########################################## 5471# check and set a backend for coroutine 5472 5473# We prefer ucontext, but it's not always possible. The fallback 5474# is sigcontext. On Windows the only valid backend is the Windows 5475# specific one. 5476 5477ucontext_works=no 5478if test "$darwin" != "yes"; then 5479 cat > $TMPC << EOF 5480#include <ucontext.h> 5481#ifdef __stub_makecontext 5482#error Ignoring glibc stub makecontext which will always fail 5483#endif 5484int main(void) { makecontext(0, 0, 0); return 0; } 5485EOF 5486 if compile_prog "" "" ; then 5487 ucontext_works=yes 5488 fi 5489fi 5490 5491if test "$coroutine" = ""; then 5492 if test "$mingw32" = "yes"; then 5493 coroutine=win32 5494 elif test "$ucontext_works" = "yes"; then 5495 coroutine=ucontext 5496 else 5497 coroutine=sigaltstack 5498 fi 5499else 5500 case $coroutine in 5501 windows) 5502 if test "$mingw32" != "yes"; then 5503 error_exit "'windows' coroutine backend only valid for Windows" 5504 fi 5505 # Unfortunately the user visible backend name doesn't match the 5506 # coroutine-*.c filename for this case, so we have to adjust it here. 5507 coroutine=win32 5508 ;; 5509 ucontext) 5510 if test "$ucontext_works" != "yes"; then 5511 feature_not_found "ucontext" 5512 fi 5513 ;; 5514 sigaltstack) 5515 if test "$mingw32" = "yes"; then 5516 error_exit "only the 'windows' coroutine backend is valid for Windows" 5517 fi 5518 ;; 5519 *) 5520 error_exit "unknown coroutine backend $coroutine" 5521 ;; 5522 esac 5523fi 5524 5525if test "$coroutine_pool" = ""; then 5526 coroutine_pool=yes 5527fi 5528 5529if test "$debug_stack_usage" = "yes"; then 5530 if test "$coroutine_pool" = "yes"; then 5531 echo "WARN: disabling coroutine pool for stack usage debugging" 5532 coroutine_pool=no 5533 fi 5534fi 5535 5536 5537########################################## 5538# check if we have open_by_handle_at 5539 5540open_by_handle_at=no 5541cat > $TMPC << EOF 5542#include <fcntl.h> 5543#if !defined(AT_EMPTY_PATH) 5544# error missing definition 5545#else 5546int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5547#endif 5548EOF 5549if compile_prog "" "" ; then 5550 open_by_handle_at=yes 5551fi 5552 5553######################################## 5554# check if we have linux/magic.h 5555 5556linux_magic_h=no 5557cat > $TMPC << EOF 5558#include <linux/magic.h> 5559int main(void) { 5560 return 0; 5561} 5562EOF 5563if compile_prog "" "" ; then 5564 linux_magic_h=yes 5565fi 5566 5567######################################## 5568# check whether we can disable warning option with a pragma (this is needed 5569# to silence warnings in the headers of some versions of external libraries). 5570# This test has to be compiled with -Werror as otherwise an unknown pragma is 5571# only a warning. 5572# 5573# If we can't selectively disable warning in the code, disable -Werror so that 5574# the build doesn't fail anyway. 5575 5576pragma_disable_unused_but_set=no 5577cat > $TMPC << EOF 5578#pragma GCC diagnostic push 5579#pragma GCC diagnostic ignored "-Wstrict-prototypes" 5580#pragma GCC diagnostic pop 5581 5582int main(void) { 5583 return 0; 5584} 5585EOF 5586if compile_prog "-Werror" "" ; then 5587 pragma_diagnostic_available=yes 5588else 5589 werror=no 5590fi 5591 5592######################################## 5593# check if we have valgrind/valgrind.h 5594 5595valgrind_h=no 5596cat > $TMPC << EOF 5597#include <valgrind/valgrind.h> 5598int main(void) { 5599 return 0; 5600} 5601EOF 5602if compile_prog "" "" ; then 5603 valgrind_h=yes 5604fi 5605 5606######################################## 5607# check if environ is declared 5608 5609has_environ=no 5610cat > $TMPC << EOF 5611#include <unistd.h> 5612int main(void) { 5613 environ = 0; 5614 return 0; 5615} 5616EOF 5617if compile_prog "" "" ; then 5618 has_environ=yes 5619fi 5620 5621######################################## 5622# check if cpuid.h is usable. 5623 5624cat > $TMPC << EOF 5625#include <cpuid.h> 5626int main(void) { 5627 unsigned a, b, c, d; 5628 int max = __get_cpuid_max(0, 0); 5629 5630 if (max >= 1) { 5631 __cpuid(1, a, b, c, d); 5632 } 5633 5634 if (max >= 7) { 5635 __cpuid_count(7, 0, a, b, c, d); 5636 } 5637 5638 return 0; 5639} 5640EOF 5641if compile_prog "" "" ; then 5642 cpuid_h=yes 5643fi 5644 5645########################################## 5646# avx2 optimization requirement check 5647# 5648# There is no point enabling this if cpuid.h is not usable, 5649# since we won't be able to select the new routines. 5650 5651if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 5652 cat > $TMPC << EOF 5653#pragma GCC push_options 5654#pragma GCC target("avx2") 5655#include <cpuid.h> 5656#include <immintrin.h> 5657static int bar(void *a) { 5658 __m256i x = *(__m256i *)a; 5659 return _mm256_testz_si256(x, x); 5660} 5661int main(int argc, char *argv[]) { return bar(argv[0]); } 5662EOF 5663 if compile_object "" ; then 5664 avx2_opt="yes" 5665 else 5666 avx2_opt="no" 5667 fi 5668fi 5669 5670########################################## 5671# avx512f optimization requirement check 5672# 5673# There is no point enabling this if cpuid.h is not usable, 5674# since we won't be able to select the new routines. 5675# by default, it is turned off. 5676# if user explicitly want to enable it, check environment 5677 5678if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 5679 cat > $TMPC << EOF 5680#pragma GCC push_options 5681#pragma GCC target("avx512f") 5682#include <cpuid.h> 5683#include <immintrin.h> 5684static int bar(void *a) { 5685 __m512i x = *(__m512i *)a; 5686 return _mm512_test_epi64_mask(x, x); 5687} 5688int main(int argc, char *argv[]) 5689{ 5690 return bar(argv[0]); 5691} 5692EOF 5693 if ! compile_object "" ; then 5694 avx512f_opt="no" 5695 fi 5696else 5697 avx512f_opt="no" 5698fi 5699 5700######################################## 5701# check if __[u]int128_t is usable. 5702 5703int128=no 5704cat > $TMPC << EOF 5705__int128_t a; 5706__uint128_t b; 5707int main (void) { 5708 a = a + b; 5709 b = a * b; 5710 a = a * a; 5711 return 0; 5712} 5713EOF 5714if compile_prog "" "" ; then 5715 int128=yes 5716fi 5717 5718######################################### 5719# See if 128-bit atomic operations are supported. 5720 5721atomic128=no 5722if test "$int128" = "yes"; then 5723 cat > $TMPC << EOF 5724int main(void) 5725{ 5726 unsigned __int128 x = 0, y = 0; 5727 y = __atomic_load_16(&x, 0); 5728 __atomic_store_16(&x, y, 0); 5729 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5730 return 0; 5731} 5732EOF 5733 if compile_prog "" "" ; then 5734 atomic128=yes 5735 fi 5736fi 5737 5738cmpxchg128=no 5739if test "$int128" = yes && test "$atomic128" = no; then 5740 cat > $TMPC << EOF 5741int main(void) 5742{ 5743 unsigned __int128 x = 0, y = 0; 5744 __sync_val_compare_and_swap_16(&x, y, x); 5745 return 0; 5746} 5747EOF 5748 if compile_prog "" "" ; then 5749 cmpxchg128=yes 5750 fi 5751fi 5752 5753######################################### 5754# See if 64-bit atomic operations are supported. 5755# Note that without __atomic builtins, we can only 5756# assume atomic loads/stores max at pointer size. 5757 5758cat > $TMPC << EOF 5759#include <stdint.h> 5760int main(void) 5761{ 5762 uint64_t x = 0, y = 0; 5763#ifdef __ATOMIC_RELAXED 5764 y = __atomic_load_8(&x, 0); 5765 __atomic_store_8(&x, y, 0); 5766 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5767 __atomic_exchange_8(&x, y, 0); 5768 __atomic_fetch_add_8(&x, y, 0); 5769#else 5770 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5771 __sync_lock_test_and_set(&x, y); 5772 __sync_val_compare_and_swap(&x, y, 0); 5773 __sync_fetch_and_add(&x, y); 5774#endif 5775 return 0; 5776} 5777EOF 5778if compile_prog "" "" ; then 5779 atomic64=yes 5780fi 5781 5782######################################### 5783# See if --dynamic-list is supported by the linker 5784ld_dynamic_list="no" 5785if test "$static" = "no" ; then 5786 cat > $TMPTXT <<EOF 5787{ 5788 foo; 5789}; 5790EOF 5791 5792 cat > $TMPC <<EOF 5793#include <stdio.h> 5794void foo(void); 5795 5796void foo(void) 5797{ 5798 printf("foo\n"); 5799} 5800 5801int main(void) 5802{ 5803 foo(); 5804 return 0; 5805} 5806EOF 5807 5808 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 5809 ld_dynamic_list="yes" 5810 fi 5811fi 5812 5813######################################### 5814# See if -exported_symbols_list is supported by the linker 5815 5816ld_exported_symbols_list="no" 5817if test "$static" = "no" ; then 5818 cat > $TMPTXT <<EOF 5819 _foo 5820EOF 5821 5822 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 5823 ld_exported_symbols_list="yes" 5824 fi 5825fi 5826 5827if test "$plugins" = "yes" && 5828 test "$ld_dynamic_list" = "no" && 5829 test "$ld_exported_symbols_list" = "no" ; then 5830 error_exit \ 5831 "Plugin support requires dynamic linking and specifying a set of symbols " \ 5832 "that are exported to plugins. Unfortunately your linker doesn't " \ 5833 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 5834 "for this purpose. You can't build with --static." 5835fi 5836 5837######################################## 5838# See if __attribute__((alias)) is supported. 5839# This false for Xcode 9, but has been remedied for Xcode 10. 5840# Unfortunately, travis uses Xcode 9 by default. 5841 5842attralias=no 5843cat > $TMPC << EOF 5844int x = 1; 5845extern const int y __attribute__((alias("x"))); 5846int main(void) { return 0; } 5847EOF 5848if compile_prog "" "" ; then 5849 attralias=yes 5850fi 5851 5852######################################## 5853# check if getauxval is available. 5854 5855getauxval=no 5856cat > $TMPC << EOF 5857#include <sys/auxv.h> 5858int main(void) { 5859 return getauxval(AT_HWCAP) == 0; 5860} 5861EOF 5862if compile_prog "" "" ; then 5863 getauxval=yes 5864fi 5865 5866######################################## 5867# check if ccache is interfering with 5868# semantic analysis of macros 5869 5870unset CCACHE_CPP2 5871ccache_cpp2=no 5872cat > $TMPC << EOF 5873static const int Z = 1; 5874#define fn() ({ Z; }) 5875#define TAUT(X) ((X) == Z) 5876#define PAREN(X, Y) (X == Y) 5877#define ID(X) (X) 5878int main(int argc, char *argv[]) 5879{ 5880 int x = 0, y = 0; 5881 x = ID(x); 5882 x = fn(); 5883 fn(); 5884 if (PAREN(x, y)) return 0; 5885 if (TAUT(Z)) return 0; 5886 return 0; 5887} 5888EOF 5889 5890if ! compile_object "-Werror"; then 5891 ccache_cpp2=yes 5892fi 5893 5894################################################# 5895# clang does not support glibc + FORTIFY_SOURCE. 5896 5897if test "$fortify_source" != "no"; then 5898 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5899 fortify_source="no"; 5900 elif test -n "$cxx" && has $cxx && 5901 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5902 fortify_source="no"; 5903 else 5904 fortify_source="yes" 5905 fi 5906fi 5907 5908############################################### 5909# Check if copy_file_range is provided by glibc 5910have_copy_file_range=no 5911cat > $TMPC << EOF 5912#include <unistd.h> 5913int main(void) { 5914 copy_file_range(0, NULL, 0, NULL, 0, 0); 5915 return 0; 5916} 5917EOF 5918if compile_prog "" "" ; then 5919 have_copy_file_range=yes 5920fi 5921 5922########################################## 5923# check if struct fsxattr is available via linux/fs.h 5924 5925have_fsxattr=no 5926cat > $TMPC << EOF 5927#include <linux/fs.h> 5928struct fsxattr foo; 5929int main(void) { 5930 return 0; 5931} 5932EOF 5933if compile_prog "" "" ; then 5934 have_fsxattr=yes 5935fi 5936 5937########################################## 5938# check for usable membarrier system call 5939if test "$membarrier" = "yes"; then 5940 have_membarrier=no 5941 if test "$mingw32" = "yes" ; then 5942 have_membarrier=yes 5943 elif test "$linux" = "yes" ; then 5944 cat > $TMPC << EOF 5945 #include <linux/membarrier.h> 5946 #include <sys/syscall.h> 5947 #include <unistd.h> 5948 #include <stdlib.h> 5949 int main(void) { 5950 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5951 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5952 exit(0); 5953 } 5954EOF 5955 if compile_prog "" "" ; then 5956 have_membarrier=yes 5957 fi 5958 fi 5959 if test "$have_membarrier" = "no"; then 5960 feature_not_found "membarrier" "membarrier system call not available" 5961 fi 5962else 5963 # Do not enable it by default even for Mingw32, because it doesn't 5964 # work on Wine. 5965 membarrier=no 5966fi 5967 5968########################################## 5969# check if rtnetlink.h exists and is useful 5970have_rtnetlink=no 5971cat > $TMPC << EOF 5972#include <linux/rtnetlink.h> 5973int main(void) { 5974 return IFLA_PROTO_DOWN; 5975} 5976EOF 5977if compile_prog "" "" ; then 5978 have_rtnetlink=yes 5979fi 5980 5981########################################## 5982# check for usable AF_VSOCK environment 5983have_af_vsock=no 5984cat > $TMPC << EOF 5985#include <errno.h> 5986#include <sys/types.h> 5987#include <sys/socket.h> 5988#if !defined(AF_VSOCK) 5989# error missing AF_VSOCK flag 5990#endif 5991#include <linux/vm_sockets.h> 5992int main(void) { 5993 int sock, ret; 5994 struct sockaddr_vm svm; 5995 socklen_t len = sizeof(svm); 5996 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5997 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5998 if ((ret == -1) && (errno == ENOTCONN)) { 5999 return 0; 6000 } 6001 return -1; 6002} 6003EOF 6004if compile_prog "" "" ; then 6005 have_af_vsock=yes 6006fi 6007 6008########################################## 6009# check for usable AF_ALG environment 6010have_afalg=no 6011cat > $TMPC << EOF 6012#include <errno.h> 6013#include <sys/types.h> 6014#include <sys/socket.h> 6015#include <linux/if_alg.h> 6016int main(void) { 6017 int sock; 6018 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 6019 return sock; 6020} 6021EOF 6022if compile_prog "" "" ; then 6023 have_afalg=yes 6024fi 6025if test "$crypto_afalg" = "yes" 6026then 6027 if test "$have_afalg" != "yes" 6028 then 6029 error_exit "AF_ALG requested but could not be detected" 6030 fi 6031fi 6032 6033 6034################################################# 6035# Check to see if we have the Hypervisor framework 6036if [ "$darwin" = "yes" ] ; then 6037 cat > $TMPC << EOF 6038#include <Hypervisor/hv.h> 6039int main() { return 0;} 6040EOF 6041 if ! compile_object ""; then 6042 hvf='no' 6043 else 6044 hvf='yes' 6045 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS" 6046 fi 6047fi 6048 6049################################################# 6050# Sparc implicitly links with --relax, which is 6051# incompatible with -r, so --no-relax should be 6052# given. It does no harm to give it on other 6053# platforms too. 6054 6055# Note: the prototype is needed since QEMU_CFLAGS 6056# contains -Wmissing-prototypes 6057cat > $TMPC << EOF 6058extern int foo(void); 6059int foo(void) { return 0; } 6060EOF 6061if ! compile_object ""; then 6062 error_exit "Failed to compile object file for LD_REL_FLAGS test" 6063fi 6064for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 6065 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 6066 LD_REL_FLAGS=$i 6067 break 6068 fi 6069done 6070if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 6071 feature_not_found "modules" "Cannot find how to build relocatable objects" 6072fi 6073 6074########################################## 6075# check for sysmacros.h 6076 6077have_sysmacros=no 6078cat > $TMPC << EOF 6079#include <sys/sysmacros.h> 6080int main(void) { 6081 return makedev(0, 0); 6082} 6083EOF 6084if compile_prog "" "" ; then 6085 have_sysmacros=yes 6086fi 6087 6088########################################## 6089# Veritas HyperScale block driver VxHS 6090# Check if libvxhs is installed 6091 6092if test "$vxhs" != "no" ; then 6093 cat > $TMPC <<EOF 6094#include <stdint.h> 6095#include <qnio/qnio_api.h> 6096 6097void *vxhs_callback; 6098 6099int main(void) { 6100 iio_init(QNIO_VERSION, vxhs_callback); 6101 return 0; 6102} 6103EOF 6104 vxhs_libs="-lvxhs -lssl" 6105 if compile_prog "" "$vxhs_libs" ; then 6106 vxhs=yes 6107 else 6108 if test "$vxhs" = "yes" ; then 6109 feature_not_found "vxhs block device" "Install libvxhs See github" 6110 fi 6111 vxhs=no 6112 fi 6113fi 6114 6115########################################## 6116# check for _Static_assert() 6117 6118have_static_assert=no 6119cat > $TMPC << EOF 6120_Static_assert(1, "success"); 6121int main(void) { 6122 return 0; 6123} 6124EOF 6125if compile_prog "" "" ; then 6126 have_static_assert=yes 6127fi 6128 6129########################################## 6130# check for utmpx.h, it is missing e.g. on OpenBSD 6131 6132have_utmpx=no 6133cat > $TMPC << EOF 6134#include <utmpx.h> 6135struct utmpx user_info; 6136int main(void) { 6137 return 0; 6138} 6139EOF 6140if compile_prog "" "" ; then 6141 have_utmpx=yes 6142fi 6143 6144########################################## 6145# check for getrandom() 6146 6147have_getrandom=no 6148cat > $TMPC << EOF 6149#include <sys/random.h> 6150int main(void) { 6151 return getrandom(0, 0, GRND_NONBLOCK); 6152} 6153EOF 6154if compile_prog "" "" ; then 6155 have_getrandom=yes 6156fi 6157 6158########################################## 6159# checks for sanitizers 6160 6161have_asan=no 6162have_ubsan=no 6163have_asan_iface_h=no 6164have_asan_iface_fiber=no 6165 6166if test "$sanitizers" = "yes" ; then 6167 write_c_skeleton 6168 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 6169 have_asan=yes 6170 fi 6171 6172 # we could use a simple skeleton for flags checks, but this also 6173 # detect the static linking issue of ubsan, see also: 6174 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 6175 cat > $TMPC << EOF 6176#include <stdlib.h> 6177int main(void) { 6178 void *tmp = malloc(10); 6179 if (tmp != NULL) { 6180 return *(int *)(tmp + 2); 6181 } 6182} 6183EOF 6184 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 6185 have_ubsan=yes 6186 fi 6187 6188 if check_include "sanitizer/asan_interface.h" ; then 6189 have_asan_iface_h=yes 6190 fi 6191 6192 cat > $TMPC << EOF 6193#include <sanitizer/asan_interface.h> 6194int main(void) { 6195 __sanitizer_start_switch_fiber(0, 0, 0); 6196 return 0; 6197} 6198EOF 6199 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 6200 have_asan_iface_fiber=yes 6201 fi 6202fi 6203 6204########################################## 6205# checks for fuzzer 6206if test "$fuzzing" = "yes" ; then 6207 write_c_fuzzer_skeleton 6208 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then 6209 have_fuzzer=yes 6210 fi 6211fi 6212 6213########################################## 6214# check for libpmem 6215 6216if test "$libpmem" != "no"; then 6217 if $pkg_config --exists "libpmem"; then 6218 libpmem="yes" 6219 libpmem_libs=$($pkg_config --libs libpmem) 6220 libpmem_cflags=$($pkg_config --cflags libpmem) 6221 libs_softmmu="$libs_softmmu $libpmem_libs" 6222 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 6223 else 6224 if test "$libpmem" = "yes" ; then 6225 feature_not_found "libpmem" "Install nvml or pmdk" 6226 fi 6227 libpmem="no" 6228 fi 6229fi 6230 6231########################################## 6232# check for slirp 6233 6234# slirp is only required when building softmmu targets 6235if test -z "$slirp" -a "$softmmu" != "yes" ; then 6236 slirp="no" 6237fi 6238 6239case "$slirp" in 6240 "" | yes) 6241 if $pkg_config slirp; then 6242 slirp=system 6243 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 6244 slirp=git 6245 elif test -e "${source_path}/slirp/Makefile" ; then 6246 slirp=internal 6247 elif test -z "$slirp" ; then 6248 slirp=no 6249 else 6250 feature_not_found "slirp" "Install slirp devel or git submodule" 6251 fi 6252 ;; 6253 6254 system) 6255 if ! $pkg_config slirp; then 6256 feature_not_found "slirp" "Install slirp devel" 6257 fi 6258 ;; 6259esac 6260 6261case "$slirp" in 6262 git | internal) 6263 if test "$slirp" = git; then 6264 git_submodules="${git_submodules} slirp" 6265 fi 6266 mkdir -p slirp 6267 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src" 6268 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp" 6269 if test "$mingw32" = "yes" ; then 6270 slirp_libs="$slirp_libs -lws2_32 -liphlpapi" 6271 fi 6272 ;; 6273 6274 system) 6275 slirp_version=$($pkg_config --modversion slirp 2>/dev/null) 6276 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) 6277 slirp_libs=$($pkg_config --libs slirp 2>/dev/null) 6278 ;; 6279 6280 no) 6281 ;; 6282 *) 6283 error_exit "Unknown state for slirp: $slirp" 6284 ;; 6285esac 6286 6287 6288########################################## 6289# End of CC checks 6290# After here, no more $cc or $ld runs 6291 6292write_c_skeleton 6293 6294if test "$gcov" = "yes" ; then 6295 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS" 6296 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS" 6297elif test "$fortify_source" = "yes" ; then 6298 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 6299elif test "$debug" = "no"; then 6300 CFLAGS="-O2 $CFLAGS" 6301fi 6302 6303if test "$have_asan" = "yes"; then 6304 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 6305 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 6306 if test "$have_asan_iface_h" = "no" ; then 6307 echo "ASAN build enabled, but ASAN header missing." \ 6308 "Without code annotation, the report may be inferior." 6309 elif test "$have_asan_iface_fiber" = "no" ; then 6310 echo "ASAN build enabled, but ASAN header is too old." \ 6311 "Without code annotation, the report may be inferior." 6312 fi 6313fi 6314if test "$have_ubsan" = "yes"; then 6315 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 6316 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 6317fi 6318 6319########################################## 6320# Do we have libnfs 6321if test "$libnfs" != "no" ; then 6322 if $pkg_config --atleast-version=1.9.3 libnfs; then 6323 libnfs="yes" 6324 libnfs_libs=$($pkg_config --libs libnfs) 6325 else 6326 if test "$libnfs" = "yes" ; then 6327 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 6328 fi 6329 libnfs="no" 6330 fi 6331fi 6332 6333########################################## 6334# Do we have libudev 6335if test "$libudev" != "no" ; then 6336 if $pkg_config libudev && test "$static" != "yes"; then 6337 libudev="yes" 6338 libudev_libs=$($pkg_config --libs libudev) 6339 else 6340 libudev="no" 6341 fi 6342fi 6343 6344# Now we've finished running tests it's OK to add -Werror to the compiler flags 6345if test "$werror" = "yes"; then 6346 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 6347fi 6348 6349if test "$solaris" = "no" ; then 6350 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 6351 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 6352 fi 6353fi 6354 6355# test if pod2man has --utf8 option 6356if pod2man --help | grep -q utf8; then 6357 POD2MAN="pod2man --utf8" 6358else 6359 POD2MAN="pod2man" 6360fi 6361 6362# Use ASLR, no-SEH and DEP if available 6363if test "$mingw32" = "yes" ; then 6364 for flag in --dynamicbase --no-seh --nxcompat; do 6365 if ld_has $flag ; then 6366 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 6367 fi 6368 done 6369fi 6370 6371# Disable OpenBSD W^X if available 6372if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then 6373 cat > $TMPC <<EOF 6374 int main(void) { return 0; } 6375EOF 6376 wx_ldflags="-Wl,-z,wxneeded" 6377 if compile_prog "" "$wx_ldflags"; then 6378 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags" 6379 fi 6380fi 6381 6382qemu_confdir=$sysconfdir$confsuffix 6383qemu_moddir=$libdir$confsuffix 6384qemu_datadir=$datadir$confsuffix 6385qemu_localedir="$datadir/locale" 6386qemu_icondir="$datadir/icons" 6387qemu_desktopdir="$datadir/applications" 6388 6389# We can only support ivshmem if we have eventfd 6390if [ "$eventfd" = "yes" ]; then 6391 ivshmem=yes 6392fi 6393 6394tools="" 6395if test "$want_tools" = "yes" ; then 6396 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools" 6397 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 6398 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools" 6399 fi 6400 if [ "$ivshmem" = "yes" ]; then 6401 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 6402 fi 6403 if [ "$curl" = "yes" ]; then 6404 tools="elf2dmp\$(EXESUF) $tools" 6405 fi 6406fi 6407if test "$softmmu" = yes ; then 6408 if test "$linux" = yes; then 6409 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then 6410 virtfs=yes 6411 helpers="$helpers fsdev/virtfs-proxy-helper\$(EXESUF)" 6412 else 6413 if test "$virtfs" = yes; then 6414 error_exit "VirtFS requires libcap-ng devel and libattr devel" 6415 fi 6416 virtfs=no 6417 fi 6418 if test "$mpath" != no && test "$mpathpersist" = yes ; then 6419 mpath=yes 6420 else 6421 if test "$mpath" = yes; then 6422 error_exit "Multipath requires libmpathpersist devel" 6423 fi 6424 mpath=no 6425 fi 6426 helpers="$helpers scsi/qemu-pr-helper\$(EXESUF)" 6427 else 6428 if test "$virtfs" = yes; then 6429 error_exit "VirtFS is supported only on Linux" 6430 fi 6431 virtfs=no 6432 if test "$mpath" = yes; then 6433 error_exit "Multipath is supported only on Linux" 6434 fi 6435 mpath=no 6436 fi 6437 if test "$xkbcommon" = "yes"; then 6438 tools="qemu-keymap\$(EXESUF) $tools" 6439 fi 6440fi 6441 6442# Probe for guest agent support/options 6443 6444if [ "$guest_agent" != "no" ]; then 6445 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 6446 guest_agent=no 6447 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 6448 tools="qemu-ga\$(EXESUF) $tools" 6449 guest_agent=yes 6450 elif [ "$guest_agent" != yes ]; then 6451 guest_agent=no 6452 else 6453 error_exit "Guest agent is not supported on this platform" 6454 fi 6455fi 6456 6457# Guest agent Window MSI package 6458 6459if test "$guest_agent" != yes; then 6460 if test "$guest_agent_msi" = yes; then 6461 error_exit "MSI guest agent package requires guest agent enabled" 6462 fi 6463 guest_agent_msi=no 6464elif test "$mingw32" != "yes"; then 6465 if test "$guest_agent_msi" = "yes"; then 6466 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 6467 fi 6468 guest_agent_msi=no 6469elif ! has wixl; then 6470 if test "$guest_agent_msi" = "yes"; then 6471 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 6472 fi 6473 guest_agent_msi=no 6474else 6475 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 6476 # disabled explicitly 6477 if test "$guest_agent_msi" != "no"; then 6478 guest_agent_msi=yes 6479 fi 6480fi 6481 6482if test "$guest_agent_msi" = "yes"; then 6483 if test "$guest_agent_with_vss" = "yes"; then 6484 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 6485 fi 6486 6487 if test "$QEMU_GA_MANUFACTURER" = ""; then 6488 QEMU_GA_MANUFACTURER=QEMU 6489 fi 6490 6491 if test "$QEMU_GA_DISTRO" = ""; then 6492 QEMU_GA_DISTRO=Linux 6493 fi 6494 6495 if test "$QEMU_GA_VERSION" = ""; then 6496 QEMU_GA_VERSION=$(cat $source_path/VERSION) 6497 fi 6498 6499 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 6500 6501 case "$cpu" in 6502 x86_64) 6503 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 6504 ;; 6505 i386) 6506 QEMU_GA_MSI_ARCH="-D Arch=32" 6507 ;; 6508 *) 6509 error_exit "CPU $cpu not supported for building installation package" 6510 ;; 6511 esac 6512fi 6513 6514# Mac OS X ships with a broken assembler 6515roms= 6516if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 6517 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 6518 test "$softmmu" = yes ; then 6519 # Different host OS linkers have different ideas about the name of the ELF 6520 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 6521 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 6522 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 6523 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 6524 ld_i386_emulation="$emu" 6525 roms="optionrom" 6526 break 6527 fi 6528 done 6529fi 6530 6531# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 6532if test "$cpu" = "s390x" ; then 6533 write_c_skeleton 6534 if compile_prog "-march=z900" ""; then 6535 roms="$roms s390-ccw" 6536 fi 6537fi 6538 6539# Check that the C++ compiler exists and works with the C compiler. 6540# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 6541if has $cxx; then 6542 cat > $TMPC <<EOF 6543int c_function(void); 6544int main(void) { return c_function(); } 6545EOF 6546 6547 compile_object 6548 6549 cat > $TMPCXX <<EOF 6550extern "C" { 6551 int c_function(void); 6552} 6553int c_function(void) { return 42; } 6554EOF 6555 6556 update_cxxflags 6557 6558 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 6559 # C++ compiler $cxx works ok with C compiler $cc 6560 : 6561 else 6562 echo "C++ compiler $cxx does not work with C compiler $cc" 6563 echo "Disabling C++ specific optional code" 6564 cxx= 6565 fi 6566else 6567 echo "No C++ compiler available; disabling C++ specific optional code" 6568 cxx= 6569fi 6570 6571echo_version() { 6572 if test "$1" = "yes" ; then 6573 echo "($2)" 6574 fi 6575} 6576 6577# prepend pixman and ftd flags after all config tests are done 6578QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 6579QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 6580libs_softmmu="$pixman_libs $libs_softmmu" 6581 6582echo "Install prefix $prefix" 6583echo "BIOS directory $(eval echo $qemu_datadir)" 6584echo "firmware path $(eval echo $firmwarepath)" 6585echo "binary directory $(eval echo $bindir)" 6586echo "library directory $(eval echo $libdir)" 6587echo "module directory $(eval echo $qemu_moddir)" 6588echo "libexec directory $(eval echo $libexecdir)" 6589echo "include directory $(eval echo $includedir)" 6590echo "config directory $(eval echo $sysconfdir)" 6591if test "$mingw32" = "no" ; then 6592echo "local state directory $(eval echo $local_statedir)" 6593echo "Manual directory $(eval echo $mandir)" 6594echo "ELF interp prefix $interp_prefix" 6595else 6596echo "local state directory queried at runtime" 6597echo "Windows SDK $win_sdk" 6598fi 6599echo "Build directory $(pwd)" 6600echo "Source path $source_path" 6601echo "GIT binary $git" 6602echo "GIT submodules $git_submodules" 6603echo "C compiler $cc" 6604echo "Host C compiler $host_cc" 6605echo "C++ compiler $cxx" 6606echo "Objective-C compiler $objcc" 6607echo "ARFLAGS $ARFLAGS" 6608echo "CFLAGS $CFLAGS" 6609echo "QEMU_CFLAGS $QEMU_CFLAGS" 6610echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 6611echo "make $make" 6612echo "install $install" 6613echo "python $python ($python_version)" 6614if test "$docs" != "no"; then 6615 echo "sphinx-build $sphinx_build" 6616fi 6617echo "genisoimage $genisoimage" 6618echo "slirp support $slirp $(echo_version $slirp $slirp_version)" 6619if test "$slirp" != "no" ; then 6620 echo "smbd $smbd" 6621fi 6622echo "module support $modules" 6623echo "alt path mod load $module_upgrades" 6624echo "host CPU $cpu" 6625echo "host big endian $bigendian" 6626echo "target list $target_list" 6627echo "gprof enabled $gprof" 6628echo "sparse enabled $sparse" 6629echo "strip binaries $strip_opt" 6630echo "profiler $profiler" 6631echo "static build $static" 6632if test "$darwin" = "yes" ; then 6633 echo "Cocoa support $cocoa" 6634fi 6635echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 6636echo "SDL image support $sdl_image" 6637echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 6638echo "GTK GL support $gtk_gl" 6639echo "VTE support $vte $(echo_version $vte $vteversion)" 6640echo "TLS priority $tls_priority" 6641echo "GNUTLS support $gnutls" 6642echo "libgcrypt $gcrypt" 6643if test "$gcrypt" = "yes" 6644then 6645 echo " hmac $gcrypt_hmac" 6646 echo " XTS $gcrypt_xts" 6647fi 6648echo "nettle $nettle $(echo_version $nettle $nettle_version)" 6649if test "$nettle" = "yes" 6650then 6651 echo " XTS $nettle_xts" 6652fi 6653echo "libtasn1 $tasn1" 6654echo "PAM $auth_pam" 6655echo "iconv support $iconv" 6656echo "curses support $curses" 6657echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 6658echo "curl support $curl" 6659echo "mingw32 support $mingw32" 6660echo "Audio drivers $audio_drv_list" 6661echo "Block whitelist (rw) $block_drv_rw_whitelist" 6662echo "Block whitelist (ro) $block_drv_ro_whitelist" 6663echo "VirtFS support $virtfs" 6664echo "Multipath support $mpath" 6665echo "VNC support $vnc" 6666if test "$vnc" = "yes" ; then 6667 echo "VNC SASL support $vnc_sasl" 6668 echo "VNC JPEG support $vnc_jpeg" 6669 echo "VNC PNG support $vnc_png" 6670fi 6671echo "xen support $xen" 6672if test "$xen" = "yes" ; then 6673 echo "xen ctrl version $xen_ctrl_version" 6674fi 6675echo "brlapi support $brlapi" 6676echo "Documentation $docs" 6677echo "PIE $pie" 6678echo "vde support $vde" 6679echo "netmap support $netmap" 6680echo "Linux AIO support $linux_aio" 6681echo "Linux io_uring support $linux_io_uring" 6682echo "ATTR/XATTR support $attr" 6683echo "Install blobs $blobs" 6684echo "KVM support $kvm" 6685echo "HAX support $hax" 6686echo "HVF support $hvf" 6687echo "WHPX support $whpx" 6688echo "TCG support $tcg" 6689if test "$tcg" = "yes" ; then 6690 echo "TCG debug enabled $debug_tcg" 6691 echo "TCG interpreter $tcg_interpreter" 6692fi 6693echo "malloc trim support $malloc_trim" 6694echo "RDMA support $rdma" 6695echo "PVRDMA support $pvrdma" 6696echo "fdt support $fdt" 6697echo "membarrier $membarrier" 6698echo "preadv support $preadv" 6699echo "fdatasync $fdatasync" 6700echo "madvise $madvise" 6701echo "posix_madvise $posix_madvise" 6702echo "posix_memalign $posix_memalign" 6703echo "libcap-ng support $cap_ng" 6704echo "vhost-net support $vhost_net" 6705echo "vhost-crypto support $vhost_crypto" 6706echo "vhost-scsi support $vhost_scsi" 6707echo "vhost-vsock support $vhost_vsock" 6708echo "vhost-user support $vhost_user" 6709echo "vhost-user-fs support $vhost_user_fs" 6710echo "Trace backends $trace_backends" 6711if have_backend "simple"; then 6712echo "Trace output file $trace_file-<pid>" 6713fi 6714echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6715echo "rbd support $rbd" 6716echo "xfsctl support $xfs" 6717echo "smartcard support $smartcard" 6718echo "libusb $libusb" 6719echo "usb net redir $usb_redir" 6720echo "OpenGL support $opengl" 6721echo "OpenGL dmabufs $opengl_dmabuf" 6722echo "libiscsi support $libiscsi" 6723echo "libnfs support $libnfs" 6724echo "build guest agent $guest_agent" 6725echo "QGA VSS support $guest_agent_with_vss" 6726echo "QGA w32 disk info $guest_agent_ntddscsi" 6727echo "QGA MSI support $guest_agent_msi" 6728echo "seccomp support $seccomp" 6729echo "coroutine backend $coroutine" 6730echo "coroutine pool $coroutine_pool" 6731echo "debug stack usage $debug_stack_usage" 6732echo "mutex debugging $debug_mutex" 6733echo "crypto afalg $crypto_afalg" 6734echo "GlusterFS support $glusterfs" 6735echo "gcov $gcov_tool" 6736echo "gcov enabled $gcov" 6737echo "TPM support $tpm" 6738echo "libssh support $libssh" 6739echo "QOM debugging $qom_cast_debug" 6740echo "Live block migration $live_block_migration" 6741echo "lzo support $lzo" 6742echo "snappy support $snappy" 6743echo "bzip2 support $bzip2" 6744echo "lzfse support $lzfse" 6745echo "zstd support $zstd" 6746echo "NUMA host support $numa" 6747echo "libxml2 $libxml2" 6748echo "tcmalloc support $tcmalloc" 6749echo "jemalloc support $jemalloc" 6750echo "avx2 optimization $avx2_opt" 6751echo "avx512f optimization $avx512f_opt" 6752echo "replication support $replication" 6753echo "VxHS block device $vxhs" 6754echo "bochs support $bochs" 6755echo "cloop support $cloop" 6756echo "dmg support $dmg" 6757echo "qcow v1 support $qcow1" 6758echo "vdi support $vdi" 6759echo "vvfat support $vvfat" 6760echo "qed support $qed" 6761echo "parallels support $parallels" 6762echo "sheepdog support $sheepdog" 6763echo "capstone $capstone" 6764echo "libpmem support $libpmem" 6765echo "libudev $libudev" 6766echo "default devices $default_devices" 6767echo "plugin support $plugins" 6768echo "fuzzing support $fuzzing" 6769echo "gdb $gdb_bin" 6770 6771if test "$supported_cpu" = "no"; then 6772 echo 6773 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 6774 echo 6775 echo "CPU host architecture $cpu support is not currently maintained." 6776 echo "The QEMU project intends to remove support for this host CPU in" 6777 echo "a future release if nobody volunteers to maintain it and to" 6778 echo "provide a build host for our continuous integration setup." 6779 echo "configure has succeeded and you can continue to build, but" 6780 echo "if you care about QEMU on this platform you should contact" 6781 echo "us upstream at qemu-devel@nongnu.org." 6782fi 6783 6784if test "$supported_os" = "no"; then 6785 echo 6786 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 6787 echo 6788 echo "Host OS $targetos support is not currently maintained." 6789 echo "The QEMU project intends to remove support for this host OS in" 6790 echo "a future release if nobody volunteers to maintain it and to" 6791 echo "provide a build host for our continuous integration setup." 6792 echo "configure has succeeded and you can continue to build, but" 6793 echo "if you care about QEMU on this platform you should contact" 6794 echo "us upstream at qemu-devel@nongnu.org." 6795fi 6796 6797config_host_mak="config-host.mak" 6798 6799echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6800 6801echo "# Automatically generated by configure - do not modify" > $config_host_mak 6802echo >> $config_host_mak 6803 6804echo all: >> $config_host_mak 6805echo "prefix=$prefix" >> $config_host_mak 6806echo "bindir=$bindir" >> $config_host_mak 6807echo "libdir=$libdir" >> $config_host_mak 6808echo "libexecdir=$libexecdir" >> $config_host_mak 6809echo "includedir=$includedir" >> $config_host_mak 6810echo "mandir=$mandir" >> $config_host_mak 6811echo "sysconfdir=$sysconfdir" >> $config_host_mak 6812echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6813echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6814echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6815echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 6816echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6817if test "$mingw32" = "no" ; then 6818 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6819fi 6820echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6821echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6822echo "qemu_icondir=$qemu_icondir" >> $config_host_mak 6823echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak 6824echo "libs_cpu=$libs_cpu" >> $config_host_mak 6825echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 6826echo "GIT=$git" >> $config_host_mak 6827echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6828echo "GIT_UPDATE=$git_update" >> $config_host_mak 6829 6830echo "ARCH=$ARCH" >> $config_host_mak 6831 6832if test "$default_devices" = "yes" ; then 6833 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 6834else 6835 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 6836fi 6837if test "$debug_tcg" = "yes" ; then 6838 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6839fi 6840if test "$strip_opt" = "yes" ; then 6841 echo "STRIP=${strip}" >> $config_host_mak 6842fi 6843if test "$bigendian" = "yes" ; then 6844 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6845fi 6846if test "$mingw32" = "yes" ; then 6847 echo "CONFIG_WIN32=y" >> $config_host_mak 6848 rc_version=$(cat $source_path/VERSION) 6849 version_major=${rc_version%%.*} 6850 rc_version=${rc_version#*.} 6851 version_minor=${rc_version%%.*} 6852 rc_version=${rc_version#*.} 6853 version_subminor=${rc_version%%.*} 6854 version_micro=0 6855 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6856 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6857 if test "$guest_agent_with_vss" = "yes" ; then 6858 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6859 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6860 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6861 fi 6862 if test "$guest_agent_ntddscsi" = "yes" ; then 6863 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 6864 fi 6865 if test "$guest_agent_msi" = "yes"; then 6866 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6867 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6868 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6869 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6870 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6871 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6872 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6873 fi 6874else 6875 echo "CONFIG_POSIX=y" >> $config_host_mak 6876fi 6877 6878if test "$linux" = "yes" ; then 6879 echo "CONFIG_LINUX=y" >> $config_host_mak 6880fi 6881 6882if test "$darwin" = "yes" ; then 6883 echo "CONFIG_DARWIN=y" >> $config_host_mak 6884fi 6885 6886if test "$solaris" = "yes" ; then 6887 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6888fi 6889if test "$haiku" = "yes" ; then 6890 echo "CONFIG_HAIKU=y" >> $config_host_mak 6891fi 6892if test "$static" = "yes" ; then 6893 echo "CONFIG_STATIC=y" >> $config_host_mak 6894fi 6895if test "$profiler" = "yes" ; then 6896 echo "CONFIG_PROFILER=y" >> $config_host_mak 6897fi 6898if test "$want_tools" = "yes" ; then 6899 echo "CONFIG_TOOLS=y" >> $config_host_mak 6900fi 6901if test "$slirp" != "no"; then 6902 echo "CONFIG_SLIRP=y" >> $config_host_mak 6903 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6904 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak 6905 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak 6906fi 6907if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then 6908 echo "config-host.h: slirp/all" >> $config_host_mak 6909fi 6910if test "$vde" = "yes" ; then 6911 echo "CONFIG_VDE=y" >> $config_host_mak 6912 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6913fi 6914if test "$netmap" = "yes" ; then 6915 echo "CONFIG_NETMAP=y" >> $config_host_mak 6916fi 6917if test "$l2tpv3" = "yes" ; then 6918 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6919fi 6920if test "$gprof" = "yes" ; then 6921 echo "CONFIG_GPROF=y" >> $config_host_mak 6922fi 6923if test "$cap_ng" = "yes" ; then 6924 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak 6925fi 6926echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6927for drv in $audio_drv_list; do 6928 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6929 case "$drv" in 6930 alsa | oss | pa | sdl) 6931 echo "$def=m" >> $config_host_mak ;; 6932 *) 6933 echo "$def=y" >> $config_host_mak ;; 6934 esac 6935done 6936echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6937echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6938echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6939echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6940echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6941echo "JACK_LIBS=$jack_libs" >> $config_host_mak 6942if test "$audio_win_int" = "yes" ; then 6943 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6944fi 6945echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6946echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6947if test "$vnc" = "yes" ; then 6948 echo "CONFIG_VNC=y" >> $config_host_mak 6949fi 6950if test "$vnc_sasl" = "yes" ; then 6951 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 6952fi 6953if test "$vnc_jpeg" = "yes" ; then 6954 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 6955fi 6956if test "$vnc_png" = "yes" ; then 6957 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 6958fi 6959if test "$xkbcommon" = "yes" ; then 6960 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 6961 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 6962fi 6963if test "$xfs" = "yes" ; then 6964 echo "CONFIG_XFS=y" >> $config_host_mak 6965fi 6966qemu_version=$(head $source_path/VERSION) 6967echo "VERSION=$qemu_version" >>$config_host_mak 6968echo "PKGVERSION=$pkgversion" >>$config_host_mak 6969echo "SRC_PATH=$source_path" >> $config_host_mak 6970echo "TARGET_DIRS=$target_list" >> $config_host_mak 6971if [ "$docs" = "yes" ] ; then 6972 echo "BUILD_DOCS=yes" >> $config_host_mak 6973fi 6974if test "$modules" = "yes"; then 6975 # $shacmd can generate a hash started with digit, which the compiler doesn't 6976 # like as an symbol. So prefix it with an underscore 6977 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6978 echo "CONFIG_MODULES=y" >> $config_host_mak 6979fi 6980if test "$module_upgrades" = "yes"; then 6981 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 6982fi 6983if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 6984 echo "CONFIG_X11=y" >> $config_host_mak 6985 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6986 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6987fi 6988if test "$sdl" = "yes" ; then 6989 echo "CONFIG_SDL=m" >> $config_host_mak 6990 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 6991 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 6992 if test "$sdl_image" = "yes" ; then 6993 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak 6994 fi 6995fi 6996if test "$cocoa" = "yes" ; then 6997 echo "CONFIG_COCOA=y" >> $config_host_mak 6998fi 6999if test "$iconv" = "yes" ; then 7000 echo "CONFIG_ICONV=y" >> $config_host_mak 7001 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak 7002 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak 7003fi 7004if test "$curses" = "yes" ; then 7005 echo "CONFIG_CURSES=m" >> $config_host_mak 7006 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 7007 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 7008fi 7009if test "$pipe2" = "yes" ; then 7010 echo "CONFIG_PIPE2=y" >> $config_host_mak 7011fi 7012if test "$accept4" = "yes" ; then 7013 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 7014fi 7015if test "$splice" = "yes" ; then 7016 echo "CONFIG_SPLICE=y" >> $config_host_mak 7017fi 7018if test "$eventfd" = "yes" ; then 7019 echo "CONFIG_EVENTFD=y" >> $config_host_mak 7020fi 7021if test "$memfd" = "yes" ; then 7022 echo "CONFIG_MEMFD=y" >> $config_host_mak 7023fi 7024if test "$have_usbfs" = "yes" ; then 7025 echo "CONFIG_USBFS=y" >> $config_host_mak 7026fi 7027if test "$fallocate" = "yes" ; then 7028 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 7029fi 7030if test "$fallocate_punch_hole" = "yes" ; then 7031 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 7032fi 7033if test "$fallocate_zero_range" = "yes" ; then 7034 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 7035fi 7036if test "$posix_fallocate" = "yes" ; then 7037 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 7038fi 7039if test "$sync_file_range" = "yes" ; then 7040 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 7041fi 7042if test "$fiemap" = "yes" ; then 7043 echo "CONFIG_FIEMAP=y" >> $config_host_mak 7044fi 7045if test "$dup3" = "yes" ; then 7046 echo "CONFIG_DUP3=y" >> $config_host_mak 7047fi 7048if test "$ppoll" = "yes" ; then 7049 echo "CONFIG_PPOLL=y" >> $config_host_mak 7050fi 7051if test "$prctl_pr_set_timerslack" = "yes" ; then 7052 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 7053fi 7054if test "$epoll" = "yes" ; then 7055 echo "CONFIG_EPOLL=y" >> $config_host_mak 7056fi 7057if test "$epoll_create1" = "yes" ; then 7058 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 7059fi 7060if test "$sendfile" = "yes" ; then 7061 echo "CONFIG_SENDFILE=y" >> $config_host_mak 7062fi 7063if test "$timerfd" = "yes" ; then 7064 echo "CONFIG_TIMERFD=y" >> $config_host_mak 7065fi 7066if test "$setns" = "yes" ; then 7067 echo "CONFIG_SETNS=y" >> $config_host_mak 7068fi 7069if test "$clock_adjtime" = "yes" ; then 7070 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 7071fi 7072if test "$syncfs" = "yes" ; then 7073 echo "CONFIG_SYNCFS=y" >> $config_host_mak 7074fi 7075if test "$kcov" = "yes" ; then 7076 echo "CONFIG_KCOV=y" >> $config_host_mak 7077fi 7078if test "$inotify" = "yes" ; then 7079 echo "CONFIG_INOTIFY=y" >> $config_host_mak 7080fi 7081if test "$inotify1" = "yes" ; then 7082 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 7083fi 7084if test "$sem_timedwait" = "yes" ; then 7085 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 7086fi 7087if test "$strchrnul" = "yes" ; then 7088 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 7089fi 7090if test "$st_atim" = "yes" ; then 7091 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 7092fi 7093if test "$byteswap_h" = "yes" ; then 7094 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 7095fi 7096if test "$bswap_h" = "yes" ; then 7097 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 7098fi 7099if test "$curl" = "yes" ; then 7100 echo "CONFIG_CURL=m" >> $config_host_mak 7101 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 7102 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 7103fi 7104if test "$brlapi" = "yes" ; then 7105 echo "CONFIG_BRLAPI=y" >> $config_host_mak 7106 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 7107fi 7108if test "$gtk" = "yes" ; then 7109 echo "CONFIG_GTK=m" >> $config_host_mak 7110 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 7111 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 7112 if test "$gtk_gl" = "yes" ; then 7113 echo "CONFIG_GTK_GL=y" >> $config_host_mak 7114 fi 7115fi 7116if test "$gio" = "yes" ; then 7117 echo "CONFIG_GIO=y" >> $config_host_mak 7118 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 7119 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 7120 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 7121fi 7122echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 7123if test "$gnutls" = "yes" ; then 7124 echo "CONFIG_GNUTLS=y" >> $config_host_mak 7125fi 7126if test "$gcrypt" = "yes" ; then 7127 echo "CONFIG_GCRYPT=y" >> $config_host_mak 7128 if test "$gcrypt_hmac" = "yes" ; then 7129 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 7130 fi 7131fi 7132if test "$nettle" = "yes" ; then 7133 echo "CONFIG_NETTLE=y" >> $config_host_mak 7134 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 7135fi 7136if test "$qemu_private_xts" = "yes" ; then 7137 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 7138fi 7139if test "$tasn1" = "yes" ; then 7140 echo "CONFIG_TASN1=y" >> $config_host_mak 7141fi 7142if test "$auth_pam" = "yes" ; then 7143 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 7144fi 7145if test "$have_ifaddrs_h" = "yes" ; then 7146 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 7147fi 7148if test "$have_broken_size_max" = "yes" ; then 7149 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 7150fi 7151 7152# Work around a system header bug with some kernel/XFS header 7153# versions where they both try to define 'struct fsxattr': 7154# xfs headers will not try to redefine structs from linux headers 7155# if this macro is set. 7156if test "$have_fsxattr" = "yes" ; then 7157 echo "HAVE_FSXATTR=y" >> $config_host_mak 7158fi 7159if test "$have_copy_file_range" = "yes" ; then 7160 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 7161fi 7162if test "$vte" = "yes" ; then 7163 echo "CONFIG_VTE=y" >> $config_host_mak 7164 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 7165 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 7166fi 7167if test "$virglrenderer" = "yes" ; then 7168 echo "CONFIG_VIRGL=y" >> $config_host_mak 7169 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 7170 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 7171fi 7172if test "$xen" = "yes" ; then 7173 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 7174 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 7175fi 7176if test "$linux_aio" = "yes" ; then 7177 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 7178fi 7179if test "$linux_io_uring" = "yes" ; then 7180 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 7181 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 7182 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 7183fi 7184if test "$attr" = "yes" ; then 7185 echo "CONFIG_ATTR=y" >> $config_host_mak 7186fi 7187if test "$libattr" = "yes" ; then 7188 echo "CONFIG_LIBATTR=y" >> $config_host_mak 7189fi 7190if test "$virtfs" = "yes" ; then 7191 echo "CONFIG_VIRTFS=y" >> $config_host_mak 7192fi 7193if test "$mpath" = "yes" ; then 7194 echo "CONFIG_MPATH=y" >> $config_host_mak 7195 if test "$mpathpersist_new_api" = "yes"; then 7196 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 7197 fi 7198fi 7199if test "$vhost_scsi" = "yes" ; then 7200 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 7201fi 7202if test "$vhost_net" = "yes" ; then 7203 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 7204fi 7205if test "$vhost_net_user" = "yes" ; then 7206 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 7207fi 7208if test "$vhost_crypto" = "yes" ; then 7209 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 7210fi 7211if test "$vhost_vsock" = "yes" ; then 7212 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 7213fi 7214if test "$vhost_kernel" = "yes" ; then 7215 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 7216fi 7217if test "$vhost_user" = "yes" ; then 7218 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 7219fi 7220if test "$vhost_user_fs" = "yes" ; then 7221 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 7222fi 7223if test "$blobs" = "yes" ; then 7224 echo "INSTALL_BLOBS=yes" >> $config_host_mak 7225fi 7226if test "$iovec" = "yes" ; then 7227 echo "CONFIG_IOVEC=y" >> $config_host_mak 7228fi 7229if test "$preadv" = "yes" ; then 7230 echo "CONFIG_PREADV=y" >> $config_host_mak 7231fi 7232if test "$fdt" != "no" ; then 7233 echo "CONFIG_FDT=y" >> $config_host_mak 7234fi 7235if test "$membarrier" = "yes" ; then 7236 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 7237fi 7238if test "$signalfd" = "yes" ; then 7239 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 7240fi 7241if test "$optreset" = "yes" ; then 7242 echo "HAVE_OPTRESET=y" >> $config_host_mak 7243fi 7244if test "$tcg" = "yes"; then 7245 echo "CONFIG_TCG=y" >> $config_host_mak 7246 if test "$tcg_interpreter" = "yes" ; then 7247 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 7248 fi 7249fi 7250if test "$fdatasync" = "yes" ; then 7251 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 7252fi 7253if test "$madvise" = "yes" ; then 7254 echo "CONFIG_MADVISE=y" >> $config_host_mak 7255fi 7256if test "$posix_madvise" = "yes" ; then 7257 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 7258fi 7259if test "$posix_memalign" = "yes" ; then 7260 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 7261fi 7262 7263if test "$spice" = "yes" ; then 7264 echo "CONFIG_SPICE=y" >> $config_host_mak 7265fi 7266 7267if test "$smartcard" = "yes" ; then 7268 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 7269 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 7270 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 7271fi 7272 7273if test "$libusb" = "yes" ; then 7274 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 7275 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 7276 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 7277fi 7278 7279if test "$usb_redir" = "yes" ; then 7280 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 7281 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 7282 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 7283fi 7284 7285if test "$opengl" = "yes" ; then 7286 echo "CONFIG_OPENGL=y" >> $config_host_mak 7287 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 7288 if test "$opengl_dmabuf" = "yes" ; then 7289 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 7290 fi 7291fi 7292 7293if test "$gbm" = "yes" ; then 7294 echo "CONFIG_GBM=y" >> $config_host_mak 7295 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 7296 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 7297fi 7298 7299 7300if test "$malloc_trim" = "yes" ; then 7301 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 7302fi 7303 7304if test "$avx2_opt" = "yes" ; then 7305 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 7306fi 7307 7308if test "$avx512f_opt" = "yes" ; then 7309 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 7310fi 7311 7312if test "$lzo" = "yes" ; then 7313 echo "CONFIG_LZO=y" >> $config_host_mak 7314fi 7315 7316if test "$snappy" = "yes" ; then 7317 echo "CONFIG_SNAPPY=y" >> $config_host_mak 7318fi 7319 7320if test "$bzip2" = "yes" ; then 7321 echo "CONFIG_BZIP2=y" >> $config_host_mak 7322 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 7323fi 7324 7325if test "$lzfse" = "yes" ; then 7326 echo "CONFIG_LZFSE=y" >> $config_host_mak 7327 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 7328fi 7329 7330if test "$zstd" = "yes" ; then 7331 echo "CONFIG_ZSTD=y" >> $config_host_mak 7332fi 7333 7334if test "$libiscsi" = "yes" ; then 7335 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 7336 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 7337 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 7338fi 7339 7340if test "$libnfs" = "yes" ; then 7341 echo "CONFIG_LIBNFS=m" >> $config_host_mak 7342 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 7343fi 7344 7345if test "$seccomp" = "yes"; then 7346 echo "CONFIG_SECCOMP=y" >> $config_host_mak 7347 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 7348 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 7349fi 7350 7351# XXX: suppress that 7352if [ "$bsd" = "yes" ] ; then 7353 echo "CONFIG_BSD=y" >> $config_host_mak 7354fi 7355 7356if test "$localtime_r" = "yes" ; then 7357 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 7358fi 7359if test "$qom_cast_debug" = "yes" ; then 7360 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 7361fi 7362if test "$rbd" = "yes" ; then 7363 echo "CONFIG_RBD=m" >> $config_host_mak 7364 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 7365 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 7366fi 7367 7368echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 7369if test "$coroutine_pool" = "yes" ; then 7370 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 7371else 7372 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 7373fi 7374 7375if test "$debug_stack_usage" = "yes" ; then 7376 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 7377fi 7378 7379if test "$crypto_afalg" = "yes" ; then 7380 echo "CONFIG_AF_ALG=y" >> $config_host_mak 7381fi 7382 7383if test "$open_by_handle_at" = "yes" ; then 7384 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 7385fi 7386 7387if test "$linux_magic_h" = "yes" ; then 7388 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 7389fi 7390 7391if test "$pragma_diagnostic_available" = "yes" ; then 7392 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 7393fi 7394 7395if test "$valgrind_h" = "yes" ; then 7396 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 7397fi 7398 7399if test "$have_asan_iface_fiber" = "yes" ; then 7400 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 7401fi 7402 7403if test "$has_environ" = "yes" ; then 7404 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 7405fi 7406 7407if test "$cpuid_h" = "yes" ; then 7408 echo "CONFIG_CPUID_H=y" >> $config_host_mak 7409fi 7410 7411if test "$int128" = "yes" ; then 7412 echo "CONFIG_INT128=y" >> $config_host_mak 7413fi 7414 7415if test "$atomic128" = "yes" ; then 7416 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 7417fi 7418 7419if test "$cmpxchg128" = "yes" ; then 7420 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 7421fi 7422 7423if test "$atomic64" = "yes" ; then 7424 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 7425fi 7426 7427if test "$attralias" = "yes" ; then 7428 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak 7429fi 7430 7431if test "$getauxval" = "yes" ; then 7432 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 7433fi 7434 7435if test "$glusterfs" = "yes" ; then 7436 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 7437 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 7438 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 7439fi 7440 7441if test "$glusterfs_xlator_opt" = "yes" ; then 7442 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 7443fi 7444 7445if test "$glusterfs_discard" = "yes" ; then 7446 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 7447fi 7448 7449if test "$glusterfs_fallocate" = "yes" ; then 7450 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 7451fi 7452 7453if test "$glusterfs_zerofill" = "yes" ; then 7454 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 7455fi 7456 7457if test "$glusterfs_ftruncate_has_stat" = "yes" ; then 7458 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 7459fi 7460 7461if test "$glusterfs_iocb_has_stat" = "yes" ; then 7462 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 7463fi 7464 7465if test "$libssh" = "yes" ; then 7466 echo "CONFIG_LIBSSH=m" >> $config_host_mak 7467 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 7468 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 7469fi 7470 7471if test "$live_block_migration" = "yes" ; then 7472 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 7473fi 7474 7475if test "$tpm" = "yes"; then 7476 echo 'CONFIG_TPM=y' >> $config_host_mak 7477fi 7478 7479echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 7480if have_backend "nop"; then 7481 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 7482fi 7483if have_backend "simple"; then 7484 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 7485 # Set the appropriate trace file. 7486 trace_file="\"$trace_file-\" FMT_pid" 7487fi 7488if have_backend "log"; then 7489 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 7490fi 7491if have_backend "ust"; then 7492 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 7493fi 7494if have_backend "dtrace"; then 7495 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 7496 if test "$trace_backend_stap" = "yes" ; then 7497 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 7498 fi 7499fi 7500if have_backend "ftrace"; then 7501 if test "$linux" = "yes" ; then 7502 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 7503 else 7504 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 7505 fi 7506fi 7507if have_backend "syslog"; then 7508 if test "$posix_syslog" = "yes" ; then 7509 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 7510 else 7511 feature_not_found "syslog(trace backend)" "syslog not available" 7512 fi 7513fi 7514echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 7515 7516if test "$rdma" = "yes" ; then 7517 echo "CONFIG_RDMA=y" >> $config_host_mak 7518 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 7519fi 7520 7521if test "$pvrdma" = "yes" ; then 7522 echo "CONFIG_PVRDMA=y" >> $config_host_mak 7523fi 7524 7525if test "$have_rtnetlink" = "yes" ; then 7526 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 7527fi 7528 7529if test "$libxml2" = "yes" ; then 7530 echo "CONFIG_LIBXML2=y" >> $config_host_mak 7531 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 7532 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 7533fi 7534 7535if test "$replication" = "yes" ; then 7536 echo "CONFIG_REPLICATION=y" >> $config_host_mak 7537fi 7538 7539if test "$have_af_vsock" = "yes" ; then 7540 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 7541fi 7542 7543if test "$have_sysmacros" = "yes" ; then 7544 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 7545fi 7546 7547if test "$have_static_assert" = "yes" ; then 7548 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 7549fi 7550 7551if test "$have_utmpx" = "yes" ; then 7552 echo "HAVE_UTMPX=y" >> $config_host_mak 7553fi 7554if test "$have_getrandom" = "yes" ; then 7555 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 7556fi 7557if test "$ivshmem" = "yes" ; then 7558 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 7559fi 7560if test "$capstone" != "no" ; then 7561 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 7562fi 7563if test "$debug_mutex" = "yes" ; then 7564 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 7565fi 7566 7567# Hold two types of flag: 7568# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 7569# a thread we have a handle to 7570# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 7571# platform 7572if test "$pthread_setname_np_w_tid" = "yes" ; then 7573 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7574 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 7575elif test "$pthread_setname_np_wo_tid" = "yes" ; then 7576 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7577 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 7578fi 7579 7580if test "$vxhs" = "yes" ; then 7581 echo "CONFIG_VXHS=y" >> $config_host_mak 7582 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 7583fi 7584 7585if test "$libpmem" = "yes" ; then 7586 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 7587fi 7588 7589if test "$bochs" = "yes" ; then 7590 echo "CONFIG_BOCHS=y" >> $config_host_mak 7591fi 7592if test "$cloop" = "yes" ; then 7593 echo "CONFIG_CLOOP=y" >> $config_host_mak 7594fi 7595if test "$dmg" = "yes" ; then 7596 echo "CONFIG_DMG=y" >> $config_host_mak 7597fi 7598if test "$qcow1" = "yes" ; then 7599 echo "CONFIG_QCOW1=y" >> $config_host_mak 7600fi 7601if test "$vdi" = "yes" ; then 7602 echo "CONFIG_VDI=y" >> $config_host_mak 7603fi 7604if test "$vvfat" = "yes" ; then 7605 echo "CONFIG_VVFAT=y" >> $config_host_mak 7606fi 7607if test "$qed" = "yes" ; then 7608 echo "CONFIG_QED=y" >> $config_host_mak 7609fi 7610if test "$parallels" = "yes" ; then 7611 echo "CONFIG_PARALLELS=y" >> $config_host_mak 7612fi 7613if test "$sheepdog" = "yes" ; then 7614 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 7615fi 7616if test "$fuzzing" = "yes" ; then 7617 if test "$have_fuzzer" = "yes"; then 7618 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer" 7619 FUZZ_CFLAGS=" -fsanitize=address,fuzzer" 7620 CFLAGS=" -fsanitize=address,fuzzer-no-link" 7621 else 7622 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer" 7623 exit 1 7624 fi 7625fi 7626 7627if test "$plugins" = "yes" ; then 7628 echo "CONFIG_PLUGIN=y" >> $config_host_mak 7629 LIBS="-ldl $LIBS" 7630 # Copy the export object list to the build dir 7631 if test "$ld_dynamic_list" = "yes" ; then 7632 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 7633 ld_symbols=qemu-plugins-ld.symbols 7634 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 7635 elif test "$ld_exported_symbols_list" = "yes" ; then 7636 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 7637 ld64_symbols=qemu-plugins-ld64.symbols 7638 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 7639 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 7640 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 7641 else 7642 error_exit \ 7643 "If \$plugins=yes, either \$ld_dynamic_list or " \ 7644 "\$ld_exported_symbols_list should have been set to 'yes'." 7645 fi 7646fi 7647 7648if test -n "$gdb_bin" ; then 7649 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 7650fi 7651 7652if test "$tcg_interpreter" = "yes"; then 7653 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 7654elif test "$ARCH" = "sparc64" ; then 7655 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 7656elif test "$ARCH" = "s390x" ; then 7657 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 7658elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then 7659 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 7660elif test "$ARCH" = "ppc64" ; then 7661 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 7662elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then 7663 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES" 7664else 7665 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 7666fi 7667 7668echo "HELPERS=$helpers" >> $config_host_mak 7669echo "TOOLS=$tools" >> $config_host_mak 7670echo "ROMS=$roms" >> $config_host_mak 7671echo "MAKE=$make" >> $config_host_mak 7672echo "INSTALL=$install" >> $config_host_mak 7673echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 7674echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 7675echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 7676echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 7677echo "PYTHON=$python" >> $config_host_mak 7678echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak 7679echo "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak 7680echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 7681echo "CC=$cc" >> $config_host_mak 7682if $iasl -h > /dev/null 2>&1; then 7683 echo "IASL=$iasl" >> $config_host_mak 7684fi 7685echo "HOST_CC=$host_cc" >> $config_host_mak 7686echo "CXX=$cxx" >> $config_host_mak 7687echo "OBJCC=$objcc" >> $config_host_mak 7688echo "AR=$ar" >> $config_host_mak 7689echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 7690echo "AS=$as" >> $config_host_mak 7691echo "CCAS=$ccas" >> $config_host_mak 7692echo "CPP=$cpp" >> $config_host_mak 7693echo "OBJCOPY=$objcopy" >> $config_host_mak 7694echo "LD=$ld" >> $config_host_mak 7695echo "RANLIB=$ranlib" >> $config_host_mak 7696echo "NM=$nm" >> $config_host_mak 7697echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 7698echo "WINDRES=$windres" >> $config_host_mak 7699echo "CFLAGS=$CFLAGS" >> $config_host_mak 7700echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 7701echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 7702echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 7703echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 7704if test "$sparse" = "yes" ; then 7705 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 7706 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 7707 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 7708 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 7709 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 7710fi 7711echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 7712echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 7713echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 7714echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 7715echo "LIBS+=$LIBS" >> $config_host_mak 7716echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 7717echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 7718echo "EXESUF=$EXESUF" >> $config_host_mak 7719echo "DSOSUF=$DSOSUF" >> $config_host_mak 7720echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 7721echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 7722echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 7723echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 7724echo "POD2MAN=$POD2MAN" >> $config_host_mak 7725if test "$gcov" = "yes" ; then 7726 echo "CONFIG_GCOV=y" >> $config_host_mak 7727 echo "GCOV=$gcov_tool" >> $config_host_mak 7728fi 7729 7730if test "$libudev" != "no"; then 7731 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 7732 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 7733fi 7734if test "$fuzzing" != "no"; then 7735 echo "CONFIG_FUZZ=y" >> $config_host_mak 7736 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak 7737 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak 7738fi 7739 7740if test "$edk2_blobs" = "yes" ; then 7741 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak 7742fi 7743 7744# use included Linux headers 7745if test "$linux" = "yes" ; then 7746 mkdir -p linux-headers 7747 case "$cpu" in 7748 i386|x86_64|x32) 7749 linux_arch=x86 7750 ;; 7751 ppc|ppc64|ppc64le) 7752 linux_arch=powerpc 7753 ;; 7754 s390x) 7755 linux_arch=s390 7756 ;; 7757 aarch64) 7758 linux_arch=arm64 7759 ;; 7760 mips64) 7761 linux_arch=mips 7762 ;; 7763 *) 7764 # For most CPUs the kernel architecture name and QEMU CPU name match. 7765 linux_arch="$cpu" 7766 ;; 7767 esac 7768 # For non-KVM architectures we will not have asm headers 7769 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 7770 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 7771 fi 7772fi 7773 7774for target in $target_list; do 7775target_dir="$target" 7776config_target_mak=$target_dir/config-target.mak 7777target_name=$(echo $target | cut -d '-' -f 1) 7778target_aligned_only="no" 7779case "$target_name" in 7780 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb) 7781 target_aligned_only="yes" 7782 ;; 7783esac 7784target_bigendian="no" 7785case "$target_name" in 7786 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 7787 target_bigendian="yes" 7788 ;; 7789esac 7790target_softmmu="no" 7791target_user_only="no" 7792target_linux_user="no" 7793target_bsd_user="no" 7794case "$target" in 7795 ${target_name}-softmmu) 7796 target_softmmu="yes" 7797 ;; 7798 ${target_name}-linux-user) 7799 target_user_only="yes" 7800 target_linux_user="yes" 7801 ;; 7802 ${target_name}-bsd-user) 7803 target_user_only="yes" 7804 target_bsd_user="yes" 7805 ;; 7806 *) 7807 error_exit "Target '$target' not recognised" 7808 exit 1 7809 ;; 7810esac 7811 7812mkdir -p $target_dir 7813echo "# Automatically generated by configure - do not modify" > $config_target_mak 7814 7815bflt="no" 7816mttcg="no" 7817interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7818gdb_xml_files="" 7819 7820TARGET_ARCH="$target_name" 7821TARGET_BASE_ARCH="" 7822TARGET_ABI_DIR="" 7823 7824case "$target_name" in 7825 i386) 7826 mttcg="yes" 7827 gdb_xml_files="i386-32bit.xml" 7828 TARGET_SYSTBL_ABI=i386 7829 ;; 7830 x86_64) 7831 TARGET_BASE_ARCH=i386 7832 TARGET_SYSTBL_ABI=common,64 7833 mttcg="yes" 7834 gdb_xml_files="i386-64bit.xml" 7835 ;; 7836 alpha) 7837 mttcg="yes" 7838 TARGET_SYSTBL_ABI=common 7839 ;; 7840 arm|armeb) 7841 TARGET_ARCH=arm 7842 TARGET_SYSTBL_ABI=common,oabi 7843 bflt="yes" 7844 mttcg="yes" 7845 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml" 7846 ;; 7847 aarch64|aarch64_be) 7848 TARGET_ARCH=aarch64 7849 TARGET_BASE_ARCH=arm 7850 bflt="yes" 7851 mttcg="yes" 7852 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" 7853 ;; 7854 cris) 7855 ;; 7856 hppa) 7857 mttcg="yes" 7858 TARGET_SYSTBL_ABI=common,32 7859 ;; 7860 lm32) 7861 ;; 7862 m68k) 7863 bflt="yes" 7864 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml" 7865 TARGET_SYSTBL_ABI=common 7866 ;; 7867 microblaze|microblazeel) 7868 TARGET_ARCH=microblaze 7869 TARGET_SYSTBL_ABI=common 7870 bflt="yes" 7871 echo "TARGET_ABI32=y" >> $config_target_mak 7872 ;; 7873 mips|mipsel) 7874 mttcg="yes" 7875 TARGET_ARCH=mips 7876 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7877 TARGET_SYSTBL_ABI=o32 7878 ;; 7879 mipsn32|mipsn32el) 7880 mttcg="yes" 7881 TARGET_ARCH=mips64 7882 TARGET_BASE_ARCH=mips 7883 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7884 echo "TARGET_ABI32=y" >> $config_target_mak 7885 TARGET_SYSTBL_ABI=n32 7886 ;; 7887 mips64|mips64el) 7888 mttcg="no" 7889 TARGET_ARCH=mips64 7890 TARGET_BASE_ARCH=mips 7891 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7892 TARGET_SYSTBL_ABI=n64 7893 ;; 7894 moxie) 7895 ;; 7896 nios2) 7897 ;; 7898 or1k) 7899 TARGET_ARCH=openrisc 7900 TARGET_BASE_ARCH=openrisc 7901 ;; 7902 ppc) 7903 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7904 TARGET_SYSTBL_ABI=common,nospu,32 7905 ;; 7906 ppc64) 7907 TARGET_BASE_ARCH=ppc 7908 TARGET_ABI_DIR=ppc 7909 TARGET_SYSTBL_ABI=common,nospu,64 7910 mttcg=yes 7911 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7912 ;; 7913 ppc64le) 7914 TARGET_ARCH=ppc64 7915 TARGET_BASE_ARCH=ppc 7916 TARGET_ABI_DIR=ppc 7917 TARGET_SYSTBL_ABI=common,nospu,64 7918 mttcg=yes 7919 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7920 ;; 7921 ppc64abi32) 7922 TARGET_ARCH=ppc64 7923 TARGET_BASE_ARCH=ppc 7924 TARGET_ABI_DIR=ppc 7925 TARGET_SYSTBL_ABI=common,nospu,32 7926 echo "TARGET_ABI32=y" >> $config_target_mak 7927 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7928 ;; 7929 riscv32) 7930 TARGET_BASE_ARCH=riscv 7931 TARGET_ABI_DIR=riscv 7932 mttcg=yes 7933 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml" 7934 ;; 7935 riscv64) 7936 TARGET_BASE_ARCH=riscv 7937 TARGET_ABI_DIR=riscv 7938 mttcg=yes 7939 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml" 7940 ;; 7941 rx) 7942 TARGET_ARCH=rx 7943 bflt="yes" 7944 target_compiler=$cross_cc_rx 7945 gdb_xml_files="rx-core.xml" 7946 ;; 7947 sh4|sh4eb) 7948 TARGET_ARCH=sh4 7949 TARGET_SYSTBL_ABI=common 7950 bflt="yes" 7951 ;; 7952 sparc) 7953 TARGET_SYSTBL_ABI=common,32 7954 ;; 7955 sparc64) 7956 TARGET_BASE_ARCH=sparc 7957 TARGET_SYSTBL_ABI=common,64 7958 ;; 7959 sparc32plus) 7960 TARGET_ARCH=sparc64 7961 TARGET_BASE_ARCH=sparc 7962 TARGET_ABI_DIR=sparc 7963 TARGET_SYSTBL_ABI=common,32 7964 echo "TARGET_ABI32=y" >> $config_target_mak 7965 ;; 7966 s390x) 7967 TARGET_SYSTBL_ABI=common,64 7968 mttcg=yes 7969 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7970 ;; 7971 tilegx) 7972 ;; 7973 tricore) 7974 ;; 7975 unicore32) 7976 ;; 7977 xtensa|xtensaeb) 7978 TARGET_ARCH=xtensa 7979 TARGET_SYSTBL_ABI=common 7980 bflt="yes" 7981 mttcg="yes" 7982 ;; 7983 *) 7984 error_exit "Unsupported target CPU" 7985 ;; 7986esac 7987# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7988if [ "$TARGET_BASE_ARCH" = "" ]; then 7989 TARGET_BASE_ARCH=$TARGET_ARCH 7990fi 7991 7992symlink "$source_path/Makefile.target" "$target_dir/Makefile" 7993 7994upper() { 7995 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7996} 7997 7998target_arch_name="$(upper $TARGET_ARCH)" 7999echo "TARGET_$target_arch_name=y" >> $config_target_mak 8000echo "TARGET_NAME=$target_name" >> $config_target_mak 8001echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 8002if [ "$TARGET_ABI_DIR" = "" ]; then 8003 TARGET_ABI_DIR=$TARGET_ARCH 8004fi 8005echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 8006if [ "$HOST_VARIANT_DIR" != "" ]; then 8007 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 8008fi 8009if [ "$TARGET_SYSTBL_ABI" != "" ]; then 8010 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak 8011fi 8012 8013if supported_xen_target $target; then 8014 echo "CONFIG_XEN=y" >> $config_target_mak 8015 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak 8016 if test "$xen_pci_passthrough" = yes; then 8017 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 8018 fi 8019else 8020 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak 8021fi 8022if supported_kvm_target $target; then 8023 echo "CONFIG_KVM=y" >> $config_target_mak 8024 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak 8025else 8026 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak 8027fi 8028if supported_hax_target $target; then 8029 echo "CONFIG_HAX=y" >> $config_target_mak 8030fi 8031if supported_hvf_target $target; then 8032 echo "CONFIG_HVF=y" >> $config_target_mak 8033fi 8034if supported_whpx_target $target; then 8035 echo "CONFIG_WHPX=y" >> $config_target_mak 8036fi 8037if test "$target_aligned_only" = "yes" ; then 8038 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak 8039fi 8040if test "$target_bigendian" = "yes" ; then 8041 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 8042fi 8043if test "$target_softmmu" = "yes" ; then 8044 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 8045 if test "$mttcg" = "yes" ; then 8046 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 8047 fi 8048fi 8049if test "$target_user_only" = "yes" ; then 8050 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 8051 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 8052fi 8053if test "$target_linux_user" = "yes" ; then 8054 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 8055fi 8056list="" 8057if test ! -z "$gdb_xml_files" ; then 8058 for x in $gdb_xml_files; do 8059 list="$list $source_path/gdb-xml/$x" 8060 done 8061 echo "TARGET_XML_FILES=$list" >> $config_target_mak 8062fi 8063 8064if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then 8065 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 8066fi 8067if test "$target_bsd_user" = "yes" ; then 8068 echo "CONFIG_BSD_USER=y" >> $config_target_mak 8069fi 8070 8071 8072# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets 8073 8074cflags="" 8075ldflags="" 8076 8077disas_config() { 8078 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 8079 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 8080} 8081 8082for i in $ARCH $TARGET_BASE_ARCH ; do 8083 case "$i" in 8084 alpha) 8085 disas_config "ALPHA" 8086 ;; 8087 aarch64) 8088 if test -n "${cxx}"; then 8089 disas_config "ARM_A64" 8090 fi 8091 ;; 8092 arm) 8093 disas_config "ARM" 8094 if test -n "${cxx}"; then 8095 disas_config "ARM_A64" 8096 fi 8097 ;; 8098 cris) 8099 disas_config "CRIS" 8100 ;; 8101 hppa) 8102 disas_config "HPPA" 8103 ;; 8104 i386|x86_64|x32) 8105 disas_config "I386" 8106 ;; 8107 lm32) 8108 disas_config "LM32" 8109 ;; 8110 m68k) 8111 disas_config "M68K" 8112 ;; 8113 microblaze*) 8114 disas_config "MICROBLAZE" 8115 ;; 8116 mips*) 8117 disas_config "MIPS" 8118 if test -n "${cxx}"; then 8119 disas_config "NANOMIPS" 8120 fi 8121 ;; 8122 moxie*) 8123 disas_config "MOXIE" 8124 ;; 8125 nios2) 8126 disas_config "NIOS2" 8127 ;; 8128 or1k) 8129 disas_config "OPENRISC" 8130 ;; 8131 ppc*) 8132 disas_config "PPC" 8133 ;; 8134 riscv*) 8135 disas_config "RISCV" 8136 ;; 8137 rx) 8138 disas_config "RX" 8139 ;; 8140 s390*) 8141 disas_config "S390" 8142 ;; 8143 sh4) 8144 disas_config "SH4" 8145 ;; 8146 sparc*) 8147 disas_config "SPARC" 8148 ;; 8149 xtensa*) 8150 disas_config "XTENSA" 8151 ;; 8152 esac 8153done 8154if test "$tcg_interpreter" = "yes" ; then 8155 disas_config "TCI" 8156fi 8157 8158case "$ARCH" in 8159alpha) 8160 # Ensure there's only a single GP 8161 cflags="-msmall-data $cflags" 8162;; 8163esac 8164 8165if test "$gprof" = "yes" ; then 8166 if test "$target_linux_user" = "yes" ; then 8167 cflags="-p $cflags" 8168 ldflags="-p $ldflags" 8169 fi 8170 if test "$target_softmmu" = "yes" ; then 8171 ldflags="-p $ldflags" 8172 echo "GPROF_CFLAGS=-p" >> $config_target_mak 8173 fi 8174fi 8175 8176# Newer kernels on s390 check for an S390_PGSTE program header and 8177# enable the pgste page table extensions in that case. This makes 8178# the vm.allocate_pgste sysctl unnecessary. We enable this program 8179# header if 8180# - we build on s390x 8181# - we build the system emulation for s390x (qemu-system-s390x) 8182# - KVM is enabled 8183# - the linker supports --s390-pgste 8184if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \ 8185 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then 8186 if ld_has --s390-pgste ; then 8187 ldflags="-Wl,--s390-pgste $ldflags" 8188 fi 8189fi 8190 8191echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak 8192echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 8193 8194done # for target in $targets 8195 8196echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak 8197echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak 8198 8199if [ "$fdt" = "git" ]; then 8200 echo "config-host.h: dtc/all" >> $config_host_mak 8201fi 8202if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 8203 echo "config-host.h: capstone/all" >> $config_host_mak 8204fi 8205if test -n "$LIBCAPSTONE"; then 8206 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 8207fi 8208 8209if test "$numa" = "yes"; then 8210 echo "CONFIG_NUMA=y" >> $config_host_mak 8211fi 8212 8213if test "$ccache_cpp2" = "yes"; then 8214 echo "export CCACHE_CPP2=y" >> $config_host_mak 8215fi 8216 8217# If we're using a separate build tree, set it up now. 8218# DIRS are directories which we simply mkdir in the build tree; 8219# LINKS are things to symlink back into the source tree 8220# (these can be both files and directories). 8221# Caution: do not add files or directories here using wildcards. This 8222# will result in problems later if a new file matching the wildcard is 8223# added to the source tree -- nothing will cause configure to be rerun 8224# so the build tree will be missing the link back to the new file, and 8225# tests might fail. Prefer to keep the relevant files in their own 8226# directory and symlink the directory instead. 8227DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 8228DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 8229DIRS="$DIRS docs docs/interop fsdev scsi" 8230DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 8231DIRS="$DIRS roms/seabios roms/vgabios" 8232LINKS="Makefile" 8233LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile" 8234LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile" 8235LINKS="$LINKS tests/plugin/Makefile" 8236LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps" 8237LINKS="$LINKS pc-bios/s390-ccw/Makefile" 8238LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile" 8239LINKS="$LINKS pc-bios/qemu-icon.bmp" 8240LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 8241LINKS="$LINKS tests/acceptance tests/data" 8242LINKS="$LINKS tests/qemu-iotests/check" 8243LINKS="$LINKS python" 8244for bios_file in \ 8245 $source_path/pc-bios/*.bin \ 8246 $source_path/pc-bios/*.lid \ 8247 $source_path/pc-bios/*.rom \ 8248 $source_path/pc-bios/*.dtb \ 8249 $source_path/pc-bios/*.img \ 8250 $source_path/pc-bios/openbios-* \ 8251 $source_path/pc-bios/u-boot.* \ 8252 $source_path/pc-bios/edk2-*.fd.bz2 \ 8253 $source_path/pc-bios/palcode-* 8254do 8255 LINKS="$LINKS pc-bios/$(basename $bios_file)" 8256done 8257mkdir -p $DIRS 8258for f in $LINKS ; do 8259 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 8260 symlink "$source_path/$f" "$f" 8261 fi 8262done 8263 8264(for i in $cross_cc_vars; do 8265 export $i 8266done 8267export target_list source_path use_containers 8268$source_path/tests/tcg/configure.sh) 8269 8270# temporary config to build submodules 8271for rom in seabios vgabios ; do 8272 config_mak=roms/$rom/config.mak 8273 echo "# Automatically generated by configure - do not modify" > $config_mak 8274 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 8275 echo "AS=$as" >> $config_mak 8276 echo "CCAS=$ccas" >> $config_mak 8277 echo "CC=$cc" >> $config_mak 8278 echo "BCC=bcc" >> $config_mak 8279 echo "CPP=$cpp" >> $config_mak 8280 echo "OBJCOPY=objcopy" >> $config_mak 8281 echo "IASL=$iasl" >> $config_mak 8282 echo "LD=$ld" >> $config_mak 8283 echo "RANLIB=$ranlib" >> $config_mak 8284done 8285 8286# set up qemu-iotests in this build directory 8287iotests_common_env="tests/qemu-iotests/common.env" 8288 8289echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 8290echo >> "$iotests_common_env" 8291echo "export PYTHON='$python'" >> "$iotests_common_env" 8292 8293# Save the configure command line for later reuse. 8294cat <<EOD >config.status 8295#!/bin/sh 8296# Generated by configure. 8297# Run this file to recreate the current configuration. 8298# Compiler output produced by configure, useful for debugging 8299# configure, is in config.log if it exists. 8300EOD 8301 8302preserve_env() { 8303 envname=$1 8304 8305 eval envval=\$$envname 8306 8307 if test -n "$envval" 8308 then 8309 echo "$envname='$envval'" >> config.status 8310 echo "export $envname" >> config.status 8311 else 8312 echo "unset $envname" >> config.status 8313 fi 8314} 8315 8316# Preserve various env variables that influence what 8317# features/build target configure will detect 8318preserve_env AR 8319preserve_env AS 8320preserve_env CC 8321preserve_env CPP 8322preserve_env CXX 8323preserve_env INSTALL 8324preserve_env LD 8325preserve_env LD_LIBRARY_PATH 8326preserve_env LIBTOOL 8327preserve_env MAKE 8328preserve_env NM 8329preserve_env OBJCOPY 8330preserve_env PATH 8331preserve_env PKG_CONFIG 8332preserve_env PKG_CONFIG_LIBDIR 8333preserve_env PKG_CONFIG_PATH 8334preserve_env PYTHON 8335preserve_env SDL2_CONFIG 8336preserve_env SMBD 8337preserve_env STRIP 8338preserve_env WINDRES 8339 8340printf "exec" >>config.status 8341printf " '%s'" "$0" "$@" >>config.status 8342echo ' "$@"' >>config.status 8343chmod +x config.status 8344 8345rm -r "$TMPDIR1" 8346