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