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