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