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