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