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# Silence clang warnings triggered by glib < 2.57.2 3859cat > $TMPC << EOF 3860#include <glib.h> 3861typedef struct Foo { 3862 int i; 3863} Foo; 3864static void foo_free(Foo *f) 3865{ 3866 g_free(f); 3867} 3868G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); 3869int main(void) { return 0; } 3870EOF 3871if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then 3872 if cc_has_warning_flag "-Wno-unused-function"; then 3873 glib_cflags="$glib_cflags -Wno-unused-function" 3874 CFLAGS="$CFLAGS -Wno-unused-function" 3875 fi 3876fi 3877 3878######################################### 3879# zlib check 3880 3881if test "$zlib" != "no" ; then 3882 if $pkg_config --exists zlib; then 3883 zlib_cflags=$($pkg_config --cflags zlib) 3884 zlib_libs=$($pkg_config --libs zlib) 3885 QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS" 3886 LIBS="$zlib_libs $LIBS" 3887 else 3888 cat > $TMPC << EOF 3889#include <zlib.h> 3890int main(void) { zlibVersion(); return 0; } 3891EOF 3892 if compile_prog "" "-lz" ; then 3893 LIBS="$LIBS -lz" 3894 else 3895 error_exit "zlib check failed" \ 3896 "Make sure to have the zlib libs and headers installed." 3897 fi 3898 fi 3899fi 3900 3901########################################## 3902# SHA command probe for modules 3903if test "$modules" = yes; then 3904 shacmd_probe="sha1sum sha1 shasum" 3905 for c in $shacmd_probe; do 3906 if has $c; then 3907 shacmd="$c" 3908 break 3909 fi 3910 done 3911 if test "$shacmd" = ""; then 3912 error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" 3913 fi 3914fi 3915 3916########################################## 3917# pixman support probe 3918 3919if test "$want_tools" = "no" && test "$softmmu" = "no"; then 3920 pixman_cflags= 3921 pixman_libs= 3922elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then 3923 pixman_cflags=$($pkg_config --cflags pixman-1) 3924 pixman_libs=$($pkg_config --libs pixman-1) 3925else 3926 error_exit "pixman >= 0.21.8 not present." \ 3927 "Please install the pixman devel package." 3928fi 3929 3930########################################## 3931# libmpathpersist probe 3932 3933if test "$mpath" != "no" ; then 3934 # probe for the new API 3935 cat > $TMPC <<EOF 3936#include <libudev.h> 3937#include <mpath_persist.h> 3938unsigned mpath_mx_alloc_len = 1024; 3939int logsink; 3940static struct config *multipath_conf; 3941extern struct udev *udev; 3942extern struct config *get_multipath_config(void); 3943extern void put_multipath_config(struct config *conf); 3944struct udev *udev; 3945struct config *get_multipath_config(void) { return multipath_conf; } 3946void put_multipath_config(struct config *conf) { } 3947 3948int main(void) { 3949 udev = udev_new(); 3950 multipath_conf = mpath_lib_init(); 3951 return 0; 3952} 3953EOF 3954 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3955 mpathpersist=yes 3956 mpathpersist_new_api=yes 3957 else 3958 # probe for the old API 3959 cat > $TMPC <<EOF 3960#include <libudev.h> 3961#include <mpath_persist.h> 3962unsigned mpath_mx_alloc_len = 1024; 3963int logsink; 3964int main(void) { 3965 struct udev *udev = udev_new(); 3966 mpath_lib_init(udev); 3967 return 0; 3968} 3969EOF 3970 if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then 3971 mpathpersist=yes 3972 mpathpersist_new_api=no 3973 else 3974 mpathpersist=no 3975 fi 3976 fi 3977else 3978 mpathpersist=no 3979fi 3980 3981########################################## 3982# pthread probe 3983PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" 3984 3985pthread=no 3986cat > $TMPC << EOF 3987#include <pthread.h> 3988static void *f(void *p) { return NULL; } 3989int main(void) { 3990 pthread_t thread; 3991 pthread_create(&thread, 0, f, 0); 3992 return 0; 3993} 3994EOF 3995if compile_prog "" "" ; then 3996 pthread=yes 3997else 3998 for pthread_lib in $PTHREADLIBS_LIST; do 3999 if compile_prog "" "$pthread_lib" ; then 4000 pthread=yes 4001 found=no 4002 for lib_entry in $LIBS; do 4003 if test "$lib_entry" = "$pthread_lib"; then 4004 found=yes 4005 break 4006 fi 4007 done 4008 if test "$found" = "no"; then 4009 LIBS="$pthread_lib $LIBS" 4010 libs_qga="$pthread_lib $libs_qga" 4011 fi 4012 PTHREAD_LIB="$pthread_lib" 4013 break 4014 fi 4015 done 4016fi 4017 4018if test "$mingw32" != yes && test "$pthread" = no; then 4019 error_exit "pthread check failed" \ 4020 "Make sure to have the pthread libs and headers installed." 4021fi 4022 4023# check for pthread_setname_np with thread id 4024pthread_setname_np_w_tid=no 4025cat > $TMPC << EOF 4026#include <pthread.h> 4027 4028static void *f(void *p) { return NULL; } 4029int main(void) 4030{ 4031 pthread_t thread; 4032 pthread_create(&thread, 0, f, 0); 4033 pthread_setname_np(thread, "QEMU"); 4034 return 0; 4035} 4036EOF 4037if compile_prog "" "$pthread_lib" ; then 4038 pthread_setname_np_w_tid=yes 4039fi 4040 4041# check for pthread_setname_np without thread id 4042pthread_setname_np_wo_tid=no 4043cat > $TMPC << EOF 4044#include <pthread.h> 4045 4046static void *f(void *p) { pthread_setname_np("QEMU"); } 4047int main(void) 4048{ 4049 pthread_t thread; 4050 pthread_create(&thread, 0, f, 0); 4051 return 0; 4052} 4053EOF 4054if compile_prog "" "$pthread_lib" ; then 4055 pthread_setname_np_wo_tid=yes 4056fi 4057 4058########################################## 4059# rbd probe 4060if test "$rbd" != "no" ; then 4061 cat > $TMPC <<EOF 4062#include <stdio.h> 4063#include <rbd/librbd.h> 4064int main(void) { 4065 rados_t cluster; 4066 rados_create(&cluster, NULL); 4067 return 0; 4068} 4069EOF 4070 rbd_libs="-lrbd -lrados" 4071 if compile_prog "" "$rbd_libs" ; then 4072 rbd=yes 4073 else 4074 if test "$rbd" = "yes" ; then 4075 feature_not_found "rados block device" "Install librbd/ceph devel" 4076 fi 4077 rbd=no 4078 fi 4079fi 4080 4081########################################## 4082# libssh probe 4083if test "$libssh" != "no" ; then 4084 if $pkg_config --exists libssh; then 4085 libssh_cflags=$($pkg_config libssh --cflags) 4086 libssh_libs=$($pkg_config libssh --libs) 4087 libssh=yes 4088 else 4089 if test "$libssh" = "yes" ; then 4090 error_exit "libssh required for --enable-libssh" 4091 fi 4092 libssh=no 4093 fi 4094fi 4095 4096########################################## 4097# Check for libssh 0.8 4098# This is done like this instead of using the LIBSSH_VERSION_* and 4099# SSH_VERSION_* macros because some distributions in the past shipped 4100# snapshots of the future 0.8 from Git, and those snapshots did not 4101# have updated version numbers (still referring to 0.7.0). 4102 4103if test "$libssh" = "yes"; then 4104 cat > $TMPC <<EOF 4105#include <libssh/libssh.h> 4106int main(void) { return ssh_get_server_publickey(NULL, NULL); } 4107EOF 4108 if compile_prog "$libssh_cflags" "$libssh_libs"; then 4109 libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" 4110 fi 4111fi 4112 4113########################################## 4114# linux-aio probe 4115 4116if test "$linux_aio" != "no" ; then 4117 cat > $TMPC <<EOF 4118#include <libaio.h> 4119#include <sys/eventfd.h> 4120#include <stddef.h> 4121int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } 4122EOF 4123 if compile_prog "" "-laio" ; then 4124 linux_aio=yes 4125 else 4126 if test "$linux_aio" = "yes" ; then 4127 feature_not_found "linux AIO" "Install libaio devel" 4128 fi 4129 linux_aio=no 4130 fi 4131fi 4132########################################## 4133# linux-io-uring probe 4134 4135if test "$linux_io_uring" != "no" ; then 4136 if $pkg_config liburing; then 4137 linux_io_uring_cflags=$($pkg_config --cflags liburing) 4138 linux_io_uring_libs=$($pkg_config --libs liburing) 4139 linux_io_uring=yes 4140 4141 # io_uring is used in libqemuutil.a where per-file -libs variables are not 4142 # seen by programs linking the archive. It's not ideal, but just add the 4143 # library dependency globally. 4144 LIBS="$linux_io_uring_libs $LIBS" 4145 else 4146 if test "$linux_io_uring" = "yes" ; then 4147 feature_not_found "linux io_uring" "Install liburing devel" 4148 fi 4149 linux_io_uring=no 4150 fi 4151fi 4152 4153########################################## 4154# TPM emulation is only on POSIX 4155 4156if test "$tpm" = ""; then 4157 if test "$mingw32" = "yes"; then 4158 tpm=no 4159 else 4160 tpm=yes 4161 fi 4162elif test "$tpm" = "yes"; then 4163 if test "$mingw32" = "yes" ; then 4164 error_exit "TPM emulation only available on POSIX systems" 4165 fi 4166fi 4167 4168########################################## 4169# attr probe 4170 4171if test "$attr" != "no" ; then 4172 cat > $TMPC <<EOF 4173#include <stdio.h> 4174#include <sys/types.h> 4175#ifdef CONFIG_LIBATTR 4176#include <attr/xattr.h> 4177#else 4178#include <sys/xattr.h> 4179#endif 4180int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } 4181EOF 4182 if compile_prog "" "" ; then 4183 attr=yes 4184 # Older distros have <attr/xattr.h>, and need -lattr: 4185 elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then 4186 attr=yes 4187 LIBS="-lattr $LIBS" 4188 libattr=yes 4189 else 4190 if test "$attr" = "yes" ; then 4191 feature_not_found "ATTR" "Install libc6 or libattr devel" 4192 fi 4193 attr=no 4194 fi 4195fi 4196 4197########################################## 4198# iovec probe 4199cat > $TMPC <<EOF 4200#include <sys/types.h> 4201#include <sys/uio.h> 4202#include <unistd.h> 4203int main(void) { return sizeof(struct iovec); } 4204EOF 4205iovec=no 4206if compile_prog "" "" ; then 4207 iovec=yes 4208fi 4209 4210########################################## 4211# preadv probe 4212cat > $TMPC <<EOF 4213#include <sys/types.h> 4214#include <sys/uio.h> 4215#include <unistd.h> 4216int main(void) { return preadv(0, 0, 0, 0); } 4217EOF 4218preadv=no 4219if compile_prog "" "" ; then 4220 preadv=yes 4221fi 4222 4223########################################## 4224# fdt probe 4225# fdt support is mandatory for at least some target architectures, 4226# so insist on it if we're building those system emulators. 4227fdt_required=no 4228for target in $target_list; do 4229 case $target in 4230 aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu) 4231 fdt_required=yes 4232 ;; 4233 esac 4234done 4235 4236if test "$fdt_required" = "yes"; then 4237 if test "$fdt" = "no"; then 4238 error_exit "fdt disabled but some requested targets require it." \ 4239 "You can turn off fdt only if you also disable all the system emulation" \ 4240 "targets which need it (by specifying a cut down --target-list)." 4241 fi 4242 fdt=yes 4243elif test "$fdt" != "yes" ; then 4244 fdt=no 4245fi 4246 4247# fdt is only required when building softmmu targets 4248if test -z "$fdt" -a "$softmmu" != "yes" ; then 4249 fdt="no" 4250fi 4251 4252if test "$fdt" != "no" ; then 4253 fdt_libs="-lfdt" 4254 # explicitly check for libfdt_env.h as it is missing in some stable installs 4255 # and test for required functions to make sure we are on a version >= 1.4.2 4256 cat > $TMPC << EOF 4257#include <libfdt.h> 4258#include <libfdt_env.h> 4259int main(void) { fdt_check_full(NULL, 0); return 0; } 4260EOF 4261 if compile_prog "" "$fdt_libs" ; then 4262 # system DTC is good - use it 4263 fdt=system 4264 else 4265 # have GIT checkout, so activate dtc submodule 4266 if test -e "${source_path}/.git" ; then 4267 git_submodules="${git_submodules} dtc" 4268 fi 4269 if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then 4270 fdt=git 4271 mkdir -p dtc 4272 if [ "$pwd_is_source_path" != "y" ] ; then 4273 symlink "$source_path/dtc/Makefile" "dtc/Makefile" 4274 symlink "$source_path/dtc/scripts" "dtc/scripts" 4275 fi 4276 fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt" 4277 fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt" 4278 fdt_libs="$fdt_libs" 4279 elif test "$fdt" = "yes" ; then 4280 # Not a git build & no libfdt found, prompt for system install 4281 error_exit "DTC (libfdt) version >= 1.4.2 not present." \ 4282 "Please install the DTC (libfdt) devel package" 4283 else 4284 # don't have and don't want 4285 fdt_libs= 4286 fdt=no 4287 fi 4288 fi 4289fi 4290 4291libs_softmmu="$libs_softmmu $fdt_libs" 4292 4293########################################## 4294# opengl probe (for sdl2, gtk, milkymist-tmu2) 4295 4296gbm="no" 4297if $pkg_config gbm; then 4298 gbm_cflags="$($pkg_config --cflags gbm)" 4299 gbm_libs="$($pkg_config --libs gbm)" 4300 gbm="yes" 4301fi 4302 4303if test "$opengl" != "no" ; then 4304 opengl_pkgs="epoxy gbm" 4305 if $pkg_config $opengl_pkgs; then 4306 opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" 4307 opengl_libs="$($pkg_config --libs $opengl_pkgs)" 4308 opengl=yes 4309 if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then 4310 gtk_gl="yes" 4311 fi 4312 QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" 4313 else 4314 if test "$opengl" = "yes" ; then 4315 feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" 4316 fi 4317 opengl_cflags="" 4318 opengl_libs="" 4319 opengl=no 4320 fi 4321fi 4322 4323if test "$opengl" = "yes"; then 4324 cat > $TMPC << EOF 4325#include <epoxy/egl.h> 4326#ifndef EGL_MESA_image_dma_buf_export 4327# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) 4328#endif 4329int main(void) { return 0; } 4330EOF 4331 if compile_prog "" "" ; then 4332 opengl_dmabuf=yes 4333 fi 4334fi 4335 4336if test "$opengl" = "yes" && test "$have_x11" = "yes"; then 4337 for target in $target_list; do 4338 case $target in 4339 lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL 4340 need_x11=yes 4341 ;; 4342 esac 4343 done 4344fi 4345 4346########################################## 4347# libxml2 probe 4348if test "$libxml2" != "no" ; then 4349 if $pkg_config --exists libxml-2.0; then 4350 libxml2="yes" 4351 libxml2_cflags=$($pkg_config --cflags libxml-2.0) 4352 libxml2_libs=$($pkg_config --libs libxml-2.0) 4353 else 4354 if test "$libxml2" = "yes"; then 4355 feature_not_found "libxml2" "Install libxml2 devel" 4356 fi 4357 libxml2="no" 4358 fi 4359fi 4360 4361########################################## 4362# glusterfs probe 4363if test "$glusterfs" != "no" ; then 4364 if $pkg_config --atleast-version=3 glusterfs-api; then 4365 glusterfs="yes" 4366 glusterfs_cflags=$($pkg_config --cflags glusterfs-api) 4367 glusterfs_libs=$($pkg_config --libs glusterfs-api) 4368 if $pkg_config --atleast-version=4 glusterfs-api; then 4369 glusterfs_xlator_opt="yes" 4370 fi 4371 if $pkg_config --atleast-version=5 glusterfs-api; then 4372 glusterfs_discard="yes" 4373 fi 4374 if $pkg_config --atleast-version=6 glusterfs-api; then 4375 glusterfs_fallocate="yes" 4376 glusterfs_zerofill="yes" 4377 fi 4378 cat > $TMPC << EOF 4379#include <glusterfs/api/glfs.h> 4380 4381int 4382main(void) 4383{ 4384 /* new glfs_ftruncate() passes two additional args */ 4385 return glfs_ftruncate(NULL, 0, NULL, NULL); 4386} 4387EOF 4388 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4389 glusterfs_ftruncate_has_stat="yes" 4390 fi 4391 cat > $TMPC << EOF 4392#include <glusterfs/api/glfs.h> 4393 4394/* new glfs_io_cbk() passes two additional glfs_stat structs */ 4395static void 4396glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) 4397{} 4398 4399int 4400main(void) 4401{ 4402 glfs_io_cbk iocb = &glusterfs_iocb; 4403 iocb(NULL, 0 , NULL, NULL, NULL); 4404 return 0; 4405} 4406EOF 4407 if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then 4408 glusterfs_iocb_has_stat="yes" 4409 fi 4410 else 4411 if test "$glusterfs" = "yes" ; then 4412 feature_not_found "GlusterFS backend support" \ 4413 "Install glusterfs-api devel >= 3" 4414 fi 4415 glusterfs="no" 4416 fi 4417fi 4418 4419# Check for inotify functions when we are building linux-user 4420# emulator. This is done because older glibc versions don't 4421# have syscall stubs for these implemented. In that case we 4422# don't provide them even if kernel supports them. 4423# 4424inotify=no 4425cat > $TMPC << EOF 4426#include <sys/inotify.h> 4427 4428int 4429main(void) 4430{ 4431 /* try to start inotify */ 4432 return inotify_init(); 4433} 4434EOF 4435if compile_prog "" "" ; then 4436 inotify=yes 4437fi 4438 4439inotify1=no 4440cat > $TMPC << EOF 4441#include <sys/inotify.h> 4442 4443int 4444main(void) 4445{ 4446 /* try to start inotify */ 4447 return inotify_init1(0); 4448} 4449EOF 4450if compile_prog "" "" ; then 4451 inotify1=yes 4452fi 4453 4454# check if pipe2 is there 4455pipe2=no 4456cat > $TMPC << EOF 4457#include <unistd.h> 4458#include <fcntl.h> 4459 4460int main(void) 4461{ 4462 int pipefd[2]; 4463 return pipe2(pipefd, O_CLOEXEC); 4464} 4465EOF 4466if compile_prog "" "" ; then 4467 pipe2=yes 4468fi 4469 4470# check if accept4 is there 4471accept4=no 4472cat > $TMPC << EOF 4473#include <sys/socket.h> 4474#include <stddef.h> 4475 4476int main(void) 4477{ 4478 accept4(0, NULL, NULL, SOCK_CLOEXEC); 4479 return 0; 4480} 4481EOF 4482if compile_prog "" "" ; then 4483 accept4=yes 4484fi 4485 4486# check if tee/splice is there. vmsplice was added same time. 4487splice=no 4488cat > $TMPC << EOF 4489#include <unistd.h> 4490#include <fcntl.h> 4491#include <limits.h> 4492 4493int main(void) 4494{ 4495 int len, fd = 0; 4496 len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); 4497 splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); 4498 return 0; 4499} 4500EOF 4501if compile_prog "" "" ; then 4502 splice=yes 4503fi 4504 4505########################################## 4506# libnuma probe 4507 4508if test "$numa" != "no" ; then 4509 cat > $TMPC << EOF 4510#include <numa.h> 4511int main(void) { return numa_available(); } 4512EOF 4513 4514 if compile_prog "" "-lnuma" ; then 4515 numa=yes 4516 libs_softmmu="-lnuma $libs_softmmu" 4517 else 4518 if test "$numa" = "yes" ; then 4519 feature_not_found "numa" "install numactl devel" 4520 fi 4521 numa=no 4522 fi 4523fi 4524 4525if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4526 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4527 exit 1 4528fi 4529 4530# Even if malloc_trim() is available, these non-libc memory allocators 4531# do not support it. 4532if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then 4533 if test "$malloc_trim" = "yes" ; then 4534 echo "Disabling malloc_trim with non-libc memory allocator" 4535 fi 4536 malloc_trim="no" 4537fi 4538 4539####################################### 4540# malloc_trim 4541 4542if test "$malloc_trim" != "no" ; then 4543 cat > $TMPC << EOF 4544#include <malloc.h> 4545int main(void) { malloc_trim(0); return 0; } 4546EOF 4547 if compile_prog "" "" ; then 4548 malloc_trim="yes" 4549 else 4550 malloc_trim="no" 4551 fi 4552fi 4553 4554########################################## 4555# tcmalloc probe 4556 4557if test "$tcmalloc" = "yes" ; then 4558 cat > $TMPC << EOF 4559#include <stdlib.h> 4560int main(void) { malloc(1); return 0; } 4561EOF 4562 4563 if compile_prog "" "-ltcmalloc" ; then 4564 LIBS="-ltcmalloc $LIBS" 4565 else 4566 feature_not_found "tcmalloc" "install gperftools devel" 4567 fi 4568fi 4569 4570########################################## 4571# jemalloc probe 4572 4573if test "$jemalloc" = "yes" ; then 4574 cat > $TMPC << EOF 4575#include <stdlib.h> 4576int main(void) { malloc(1); return 0; } 4577EOF 4578 4579 if compile_prog "" "-ljemalloc" ; then 4580 LIBS="-ljemalloc $LIBS" 4581 else 4582 feature_not_found "jemalloc" "install jemalloc devel" 4583 fi 4584fi 4585 4586########################################## 4587# signalfd probe 4588signalfd="no" 4589cat > $TMPC << EOF 4590#include <unistd.h> 4591#include <sys/syscall.h> 4592#include <signal.h> 4593int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4594EOF 4595 4596if compile_prog "" "" ; then 4597 signalfd=yes 4598fi 4599 4600# check if optreset global is declared by <getopt.h> 4601optreset="no" 4602cat > $TMPC << EOF 4603#include <getopt.h> 4604int main(void) { return optreset; } 4605EOF 4606 4607if compile_prog "" "" ; then 4608 optreset=yes 4609fi 4610 4611# check if eventfd is supported 4612eventfd=no 4613cat > $TMPC << EOF 4614#include <sys/eventfd.h> 4615 4616int main(void) 4617{ 4618 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4619} 4620EOF 4621if compile_prog "" "" ; then 4622 eventfd=yes 4623fi 4624 4625# check if memfd is supported 4626memfd=no 4627cat > $TMPC << EOF 4628#include <sys/mman.h> 4629 4630int main(void) 4631{ 4632 return memfd_create("foo", MFD_ALLOW_SEALING); 4633} 4634EOF 4635if compile_prog "" "" ; then 4636 memfd=yes 4637fi 4638 4639# check for usbfs 4640have_usbfs=no 4641if test "$linux_user" = "yes"; then 4642 cat > $TMPC << EOF 4643#include <linux/usbdevice_fs.h> 4644 4645#ifndef USBDEVFS_GET_CAPABILITIES 4646#error "USBDEVFS_GET_CAPABILITIES undefined" 4647#endif 4648 4649#ifndef USBDEVFS_DISCONNECT_CLAIM 4650#error "USBDEVFS_DISCONNECT_CLAIM undefined" 4651#endif 4652 4653int main(void) 4654{ 4655 return 0; 4656} 4657EOF 4658 if compile_prog "" ""; then 4659 have_usbfs=yes 4660 fi 4661fi 4662 4663# check for fallocate 4664fallocate=no 4665cat > $TMPC << EOF 4666#include <fcntl.h> 4667 4668int main(void) 4669{ 4670 fallocate(0, 0, 0, 0); 4671 return 0; 4672} 4673EOF 4674if compile_prog "" "" ; then 4675 fallocate=yes 4676fi 4677 4678# check for fallocate hole punching 4679fallocate_punch_hole=no 4680cat > $TMPC << EOF 4681#include <fcntl.h> 4682#include <linux/falloc.h> 4683 4684int main(void) 4685{ 4686 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4687 return 0; 4688} 4689EOF 4690if compile_prog "" "" ; then 4691 fallocate_punch_hole=yes 4692fi 4693 4694# check that fallocate supports range zeroing inside the file 4695fallocate_zero_range=no 4696cat > $TMPC << EOF 4697#include <fcntl.h> 4698#include <linux/falloc.h> 4699 4700int main(void) 4701{ 4702 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4703 return 0; 4704} 4705EOF 4706if compile_prog "" "" ; then 4707 fallocate_zero_range=yes 4708fi 4709 4710# check for posix_fallocate 4711posix_fallocate=no 4712cat > $TMPC << EOF 4713#include <fcntl.h> 4714 4715int main(void) 4716{ 4717 posix_fallocate(0, 0, 0); 4718 return 0; 4719} 4720EOF 4721if compile_prog "" "" ; then 4722 posix_fallocate=yes 4723fi 4724 4725# check for sync_file_range 4726sync_file_range=no 4727cat > $TMPC << EOF 4728#include <fcntl.h> 4729 4730int main(void) 4731{ 4732 sync_file_range(0, 0, 0, 0); 4733 return 0; 4734} 4735EOF 4736if compile_prog "" "" ; then 4737 sync_file_range=yes 4738fi 4739 4740# check for linux/fiemap.h and FS_IOC_FIEMAP 4741fiemap=no 4742cat > $TMPC << EOF 4743#include <sys/ioctl.h> 4744#include <linux/fs.h> 4745#include <linux/fiemap.h> 4746 4747int main(void) 4748{ 4749 ioctl(0, FS_IOC_FIEMAP, 0); 4750 return 0; 4751} 4752EOF 4753if compile_prog "" "" ; then 4754 fiemap=yes 4755fi 4756 4757# check for dup3 4758dup3=no 4759cat > $TMPC << EOF 4760#include <unistd.h> 4761 4762int main(void) 4763{ 4764 dup3(0, 0, 0); 4765 return 0; 4766} 4767EOF 4768if compile_prog "" "" ; then 4769 dup3=yes 4770fi 4771 4772# check for ppoll support 4773ppoll=no 4774cat > $TMPC << EOF 4775#include <poll.h> 4776 4777int main(void) 4778{ 4779 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 4780 ppoll(&pfd, 1, 0, 0); 4781 return 0; 4782} 4783EOF 4784if compile_prog "" "" ; then 4785 ppoll=yes 4786fi 4787 4788# check for prctl(PR_SET_TIMERSLACK , ... ) support 4789prctl_pr_set_timerslack=no 4790cat > $TMPC << EOF 4791#include <sys/prctl.h> 4792 4793int main(void) 4794{ 4795 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 4796 return 0; 4797} 4798EOF 4799if compile_prog "" "" ; then 4800 prctl_pr_set_timerslack=yes 4801fi 4802 4803# check for epoll support 4804epoll=no 4805cat > $TMPC << EOF 4806#include <sys/epoll.h> 4807 4808int main(void) 4809{ 4810 epoll_create(0); 4811 return 0; 4812} 4813EOF 4814if compile_prog "" "" ; then 4815 epoll=yes 4816fi 4817 4818# epoll_create1 is a later addition 4819# so we must check separately for its presence 4820epoll_create1=no 4821cat > $TMPC << EOF 4822#include <sys/epoll.h> 4823 4824int main(void) 4825{ 4826 /* Note that we use epoll_create1 as a value, not as 4827 * a function being called. This is necessary so that on 4828 * old SPARC glibc versions where the function was present in 4829 * the library but not declared in the header file we will 4830 * fail the configure check. (Otherwise we will get a compiler 4831 * warning but not an error, and will proceed to fail the 4832 * qemu compile where we compile with -Werror.) 4833 */ 4834 return (int)(uintptr_t)&epoll_create1; 4835} 4836EOF 4837if compile_prog "" "" ; then 4838 epoll_create1=yes 4839fi 4840 4841# check for sendfile support 4842sendfile=no 4843cat > $TMPC << EOF 4844#include <sys/sendfile.h> 4845 4846int main(void) 4847{ 4848 return sendfile(0, 0, 0, 0); 4849} 4850EOF 4851if compile_prog "" "" ; then 4852 sendfile=yes 4853fi 4854 4855# check for timerfd support (glibc 2.8 and newer) 4856timerfd=no 4857cat > $TMPC << EOF 4858#include <sys/timerfd.h> 4859 4860int main(void) 4861{ 4862 return(timerfd_create(CLOCK_REALTIME, 0)); 4863} 4864EOF 4865if compile_prog "" "" ; then 4866 timerfd=yes 4867fi 4868 4869# check for setns and unshare support 4870setns=no 4871cat > $TMPC << EOF 4872#include <sched.h> 4873 4874int main(void) 4875{ 4876 int ret; 4877 ret = setns(0, 0); 4878 ret = unshare(0); 4879 return ret; 4880} 4881EOF 4882if compile_prog "" "" ; then 4883 setns=yes 4884fi 4885 4886# clock_adjtime probe 4887clock_adjtime=no 4888cat > $TMPC <<EOF 4889#include <time.h> 4890 4891int main(void) 4892{ 4893 return clock_adjtime(0, 0); 4894} 4895EOF 4896clock_adjtime=no 4897if compile_prog "" "" ; then 4898 clock_adjtime=yes 4899fi 4900 4901# syncfs probe 4902syncfs=no 4903cat > $TMPC <<EOF 4904#include <unistd.h> 4905 4906int main(void) 4907{ 4908 return syncfs(0); 4909} 4910EOF 4911syncfs=no 4912if compile_prog "" "" ; then 4913 syncfs=yes 4914fi 4915 4916# check for kcov support (kernel must be 4.4+, compiled with certain options) 4917kcov=no 4918if check_include sys/kcov.h ; then 4919 kcov=yes 4920fi 4921 4922# Check we have a new enough version of sphinx-build 4923has_sphinx_build() { 4924 # This is a bit awkward but works: create a trivial document and 4925 # try to run it with our configuration file (which enforces a 4926 # version requirement). This will fail if either 4927 # sphinx-build doesn't exist at all or if it is too old. 4928 mkdir -p "$TMPDIR1/sphinx" 4929 touch "$TMPDIR1/sphinx/index.rst" 4930 "$sphinx_build" -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1 4931} 4932 4933# Check if tools are available to build documentation. 4934if test "$docs" != "no" ; then 4935 if has_sphinx_build; then 4936 sphinx_ok=yes 4937 else 4938 sphinx_ok=no 4939 fi 4940 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then 4941 docs=yes 4942 else 4943 if test "$docs" = "yes" ; then 4944 if has $sphinx_build && test "$sphinx_ok" != "yes"; then 4945 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2 4946 fi 4947 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx" 4948 fi 4949 docs=no 4950 fi 4951fi 4952 4953# Search for bswap_32 function 4954byteswap_h=no 4955cat > $TMPC << EOF 4956#include <byteswap.h> 4957int main(void) { return bswap_32(0); } 4958EOF 4959if compile_prog "" "" ; then 4960 byteswap_h=yes 4961fi 4962 4963# Search for bswap32 function 4964bswap_h=no 4965cat > $TMPC << EOF 4966#include <sys/endian.h> 4967#include <sys/types.h> 4968#include <machine/bswap.h> 4969int main(void) { return bswap32(0); } 4970EOF 4971if compile_prog "" "" ; then 4972 bswap_h=yes 4973fi 4974 4975########################################## 4976# Do we have libiscsi >= 1.9.0 4977if test "$libiscsi" != "no" ; then 4978 if $pkg_config --atleast-version=1.9.0 libiscsi; then 4979 libiscsi="yes" 4980 libiscsi_cflags=$($pkg_config --cflags libiscsi) 4981 libiscsi_libs=$($pkg_config --libs libiscsi) 4982 else 4983 if test "$libiscsi" = "yes" ; then 4984 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 4985 fi 4986 libiscsi="no" 4987 fi 4988fi 4989 4990########################################## 4991# Do we need libm 4992cat > $TMPC << EOF 4993#include <math.h> 4994int main(int argc, char **argv) { return isnan(sin((double)argc)); } 4995EOF 4996if compile_prog "" "" ; then 4997 : 4998elif compile_prog "" "-lm" ; then 4999 LIBS="-lm $LIBS" 5000 libs_qga="-lm $libs_qga" 5001else 5002 error_exit "libm check failed" 5003fi 5004 5005########################################## 5006# Do we need librt 5007# uClibc provides 2 versions of clock_gettime(), one with realtime 5008# support and one without. This means that the clock_gettime() don't 5009# need -lrt. We still need it for timer_create() so we check for this 5010# function in addition. 5011cat > $TMPC <<EOF 5012#include <signal.h> 5013#include <time.h> 5014int main(void) { 5015 timer_create(CLOCK_REALTIME, NULL, NULL); 5016 return clock_gettime(CLOCK_REALTIME, NULL); 5017} 5018EOF 5019 5020if compile_prog "" "" ; then 5021 : 5022# we need pthread for static linking. use previous pthread test result 5023elif compile_prog "" "$pthread_lib -lrt" ; then 5024 LIBS="$LIBS -lrt" 5025 libs_qga="$libs_qga -lrt" 5026fi 5027 5028# Check whether we need to link libutil for openpty() 5029cat > $TMPC << EOF 5030extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 5031int main(void) { return openpty(0, 0, 0, 0, 0); } 5032EOF 5033 5034if ! compile_prog "" "" ; then 5035 if compile_prog "" "-lutil" ; then 5036 libs_softmmu="-lutil $libs_softmmu" 5037 libs_tools="-lutil $libs_tools" 5038 fi 5039fi 5040 5041########################################## 5042# spice probe 5043if test "$spice" != "no" ; then 5044 cat > $TMPC << EOF 5045#include <spice.h> 5046int main(void) { spice_server_new(); return 0; } 5047EOF 5048 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 5049 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 5050 if $pkg_config --atleast-version=0.12.5 spice-server && \ 5051 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 5052 compile_prog "$spice_cflags" "$spice_libs" ; then 5053 spice="yes" 5054 libs_softmmu="$libs_softmmu $spice_libs" 5055 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 5056 spice_protocol_version=$($pkg_config --modversion spice-protocol) 5057 spice_server_version=$($pkg_config --modversion spice-server) 5058 else 5059 if test "$spice" = "yes" ; then 5060 feature_not_found "spice" \ 5061 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 5062 fi 5063 spice="no" 5064 fi 5065fi 5066 5067# check for smartcard support 5068if test "$smartcard" != "no"; then 5069 if $pkg_config --atleast-version=2.5.1 libcacard; then 5070 libcacard_cflags=$($pkg_config --cflags libcacard) 5071 libcacard_libs=$($pkg_config --libs libcacard) 5072 smartcard="yes" 5073 else 5074 if test "$smartcard" = "yes"; then 5075 feature_not_found "smartcard" "Install libcacard devel" 5076 fi 5077 smartcard="no" 5078 fi 5079fi 5080 5081# check for libusb 5082if test "$libusb" != "no" ; then 5083 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 5084 libusb="yes" 5085 libusb_cflags=$($pkg_config --cflags libusb-1.0) 5086 libusb_libs=$($pkg_config --libs libusb-1.0) 5087 else 5088 if test "$libusb" = "yes"; then 5089 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 5090 fi 5091 libusb="no" 5092 fi 5093fi 5094 5095# check for usbredirparser for usb network redirection support 5096if test "$usb_redir" != "no" ; then 5097 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 5098 usb_redir="yes" 5099 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 5100 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 5101 else 5102 if test "$usb_redir" = "yes"; then 5103 feature_not_found "usb-redir" "Install usbredir devel" 5104 fi 5105 usb_redir="no" 5106 fi 5107fi 5108 5109########################################## 5110# check if we have VSS SDK headers for win 5111 5112if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5113 test "$vss_win32_sdk" != "no" ; then 5114 case "$vss_win32_sdk" in 5115 "") vss_win32_include="-isystem $source_path" ;; 5116 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 5117 # handle path with spaces. So we symlink the headers into ".sdk/vss". 5118 vss_win32_include="-isystem $source_path/.sdk/vss" 5119 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 5120 ;; 5121 *) vss_win32_include="-isystem $vss_win32_sdk" 5122 esac 5123 cat > $TMPC << EOF 5124#define __MIDL_user_allocate_free_DEFINED__ 5125#include <inc/win2003/vss.h> 5126int main(void) { return VSS_CTX_BACKUP; } 5127EOF 5128 if compile_prog "$vss_win32_include" "" ; then 5129 guest_agent_with_vss="yes" 5130 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 5131 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 5132 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 5133 else 5134 if test "$vss_win32_sdk" != "" ; then 5135 echo "ERROR: Please download and install Microsoft VSS SDK:" 5136 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 5137 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 5138 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 5139 echo "ERROR: The headers are extracted in the directory \`inc'." 5140 feature_not_found "VSS support" 5141 fi 5142 guest_agent_with_vss="no" 5143 fi 5144fi 5145 5146########################################## 5147# lookup Windows platform SDK (if not specified) 5148# The SDK is needed only to build .tlb (type library) file of guest agent 5149# VSS provider from the source. It is usually unnecessary because the 5150# pre-compiled .tlb file is included. 5151 5152if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5153 test "$guest_agent_with_vss" = "yes" ; then 5154 if test -z "$win_sdk"; then 5155 programfiles="$PROGRAMFILES" 5156 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 5157 if test -n "$programfiles"; then 5158 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 5159 else 5160 feature_not_found "Windows SDK" 5161 fi 5162 elif test "$win_sdk" = "no"; then 5163 win_sdk="" 5164 fi 5165fi 5166 5167########################################## 5168# check if mingw environment provides a recent ntddscsi.h 5169if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 5170 cat > $TMPC << EOF 5171#include <windows.h> 5172#include <ntddscsi.h> 5173int main(void) { 5174#if !defined(IOCTL_SCSI_GET_ADDRESS) 5175#error Missing required ioctl definitions 5176#endif 5177 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 5178 return addr.Lun; 5179} 5180EOF 5181 if compile_prog "" "" ; then 5182 guest_agent_ntddscsi=yes 5183 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 5184 fi 5185fi 5186 5187########################################## 5188# virgl renderer probe 5189 5190if test "$virglrenderer" != "no" ; then 5191 cat > $TMPC << EOF 5192#include <virglrenderer.h> 5193int main(void) { virgl_renderer_poll(); return 0; } 5194EOF 5195 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 5196 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 5197 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 5198 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 5199 compile_prog "$virgl_cflags" "$virgl_libs" ; then 5200 virglrenderer="yes" 5201 else 5202 if test "$virglrenderer" = "yes" ; then 5203 feature_not_found "virglrenderer" 5204 fi 5205 virglrenderer="no" 5206 fi 5207fi 5208 5209########################################## 5210# capstone 5211 5212case "$capstone" in 5213 "" | yes) 5214 if $pkg_config capstone; then 5215 capstone=system 5216 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5217 capstone=git 5218 elif test -e "${source_path}/capstone/Makefile" ; then 5219 capstone=internal 5220 elif test -z "$capstone" ; then 5221 capstone=no 5222 else 5223 feature_not_found "capstone" "Install capstone devel or git submodule" 5224 fi 5225 ;; 5226 5227 system) 5228 if ! $pkg_config capstone; then 5229 feature_not_found "capstone" "Install capstone devel" 5230 fi 5231 ;; 5232esac 5233 5234case "$capstone" in 5235 git | internal) 5236 if test "$capstone" = git; then 5237 git_submodules="${git_submodules} capstone" 5238 fi 5239 mkdir -p capstone 5240 QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include" 5241 if test "$mingw32" = "yes"; then 5242 LIBCAPSTONE=capstone.lib 5243 else 5244 LIBCAPSTONE=libcapstone.a 5245 fi 5246 libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu" 5247 ;; 5248 5249 system) 5250 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 5251 libs_cpu="$($pkg_config --libs capstone) $libs_cpu" 5252 ;; 5253 5254 no) 5255 ;; 5256 *) 5257 error_exit "Unknown state for capstone: $capstone" 5258 ;; 5259esac 5260 5261########################################## 5262# check if we have fdatasync 5263 5264fdatasync=no 5265cat > $TMPC << EOF 5266#include <unistd.h> 5267int main(void) { 5268#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 5269return fdatasync(0); 5270#else 5271#error Not supported 5272#endif 5273} 5274EOF 5275if compile_prog "" "" ; then 5276 fdatasync=yes 5277fi 5278 5279########################################## 5280# check if we have madvise 5281 5282madvise=no 5283cat > $TMPC << EOF 5284#include <sys/types.h> 5285#include <sys/mman.h> 5286#include <stddef.h> 5287int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 5288EOF 5289if compile_prog "" "" ; then 5290 madvise=yes 5291fi 5292 5293########################################## 5294# check if we have posix_madvise 5295 5296posix_madvise=no 5297cat > $TMPC << EOF 5298#include <sys/mman.h> 5299#include <stddef.h> 5300int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 5301EOF 5302if compile_prog "" "" ; then 5303 posix_madvise=yes 5304fi 5305 5306########################################## 5307# check if we have posix_memalign() 5308 5309posix_memalign=no 5310cat > $TMPC << EOF 5311#include <stdlib.h> 5312int main(void) { 5313 void *p; 5314 return posix_memalign(&p, 8, 8); 5315} 5316EOF 5317if compile_prog "" "" ; then 5318 posix_memalign=yes 5319fi 5320 5321########################################## 5322# check if we have posix_syslog 5323 5324posix_syslog=no 5325cat > $TMPC << EOF 5326#include <syslog.h> 5327int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 5328EOF 5329if compile_prog "" "" ; then 5330 posix_syslog=yes 5331fi 5332 5333########################################## 5334# check if we have sem_timedwait 5335 5336sem_timedwait=no 5337cat > $TMPC << EOF 5338#include <semaphore.h> 5339int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 5340EOF 5341if compile_prog "" "" ; then 5342 sem_timedwait=yes 5343fi 5344 5345########################################## 5346# check if we have strchrnul 5347 5348strchrnul=no 5349cat > $TMPC << EOF 5350#include <string.h> 5351int main(void); 5352// Use a haystack that the compiler shouldn't be able to constant fold 5353char *haystack = (char*)&main; 5354int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 5355EOF 5356if compile_prog "" "" ; then 5357 strchrnul=yes 5358fi 5359 5360######################################### 5361# check if we have st_atim 5362 5363st_atim=no 5364cat > $TMPC << EOF 5365#include <sys/stat.h> 5366#include <stddef.h> 5367int main(void) { return offsetof(struct stat, st_atim); } 5368EOF 5369if compile_prog "" "" ; then 5370 st_atim=yes 5371fi 5372 5373########################################## 5374# check if trace backend exists 5375 5376$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 5377if test "$?" -ne 0 ; then 5378 error_exit "invalid trace backends" \ 5379 "Please choose supported trace backends." 5380fi 5381 5382########################################## 5383# For 'ust' backend, test if ust headers are present 5384if have_backend "ust"; then 5385 cat > $TMPC << EOF 5386#include <lttng/tracepoint.h> 5387int main(void) { return 0; } 5388EOF 5389 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 5390 if $pkg_config lttng-ust --exists; then 5391 lttng_ust_libs=$($pkg_config --libs lttng-ust) 5392 else 5393 lttng_ust_libs="-llttng-ust -ldl" 5394 fi 5395 if $pkg_config liburcu-bp --exists; then 5396 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 5397 else 5398 urcu_bp_libs="-lurcu-bp" 5399 fi 5400 5401 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 5402 libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga" 5403 else 5404 error_exit "Trace backend 'ust' missing lttng-ust header files" 5405 fi 5406fi 5407 5408########################################## 5409# For 'dtrace' backend, test if 'dtrace' command is present 5410if have_backend "dtrace"; then 5411 if ! has 'dtrace' ; then 5412 error_exit "dtrace command is not found in PATH $PATH" 5413 fi 5414 trace_backend_stap="no" 5415 if has 'stap' ; then 5416 trace_backend_stap="yes" 5417 fi 5418fi 5419 5420########################################## 5421# check and set a backend for coroutine 5422 5423# We prefer ucontext, but it's not always possible. The fallback 5424# is sigcontext. On Windows the only valid backend is the Windows 5425# specific one. 5426 5427ucontext_works=no 5428if test "$darwin" != "yes"; then 5429 cat > $TMPC << EOF 5430#include <ucontext.h> 5431#ifdef __stub_makecontext 5432#error Ignoring glibc stub makecontext which will always fail 5433#endif 5434int main(void) { makecontext(0, 0, 0); return 0; } 5435EOF 5436 if compile_prog "" "" ; then 5437 ucontext_works=yes 5438 fi 5439fi 5440 5441if test "$coroutine" = ""; then 5442 if test "$mingw32" = "yes"; then 5443 coroutine=win32 5444 elif test "$ucontext_works" = "yes"; then 5445 coroutine=ucontext 5446 else 5447 coroutine=sigaltstack 5448 fi 5449else 5450 case $coroutine in 5451 windows) 5452 if test "$mingw32" != "yes"; then 5453 error_exit "'windows' coroutine backend only valid for Windows" 5454 fi 5455 # Unfortunately the user visible backend name doesn't match the 5456 # coroutine-*.c filename for this case, so we have to adjust it here. 5457 coroutine=win32 5458 ;; 5459 ucontext) 5460 if test "$ucontext_works" != "yes"; then 5461 feature_not_found "ucontext" 5462 fi 5463 ;; 5464 sigaltstack) 5465 if test "$mingw32" = "yes"; then 5466 error_exit "only the 'windows' coroutine backend is valid for Windows" 5467 fi 5468 ;; 5469 *) 5470 error_exit "unknown coroutine backend $coroutine" 5471 ;; 5472 esac 5473fi 5474 5475if test "$coroutine_pool" = ""; then 5476 coroutine_pool=yes 5477fi 5478 5479if test "$debug_stack_usage" = "yes"; then 5480 if test "$coroutine_pool" = "yes"; then 5481 echo "WARN: disabling coroutine pool for stack usage debugging" 5482 coroutine_pool=no 5483 fi 5484fi 5485 5486 5487########################################## 5488# check if we have open_by_handle_at 5489 5490open_by_handle_at=no 5491cat > $TMPC << EOF 5492#include <fcntl.h> 5493#if !defined(AT_EMPTY_PATH) 5494# error missing definition 5495#else 5496int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5497#endif 5498EOF 5499if compile_prog "" "" ; then 5500 open_by_handle_at=yes 5501fi 5502 5503######################################## 5504# check if we have linux/magic.h 5505 5506linux_magic_h=no 5507cat > $TMPC << EOF 5508#include <linux/magic.h> 5509int main(void) { 5510 return 0; 5511} 5512EOF 5513if compile_prog "" "" ; then 5514 linux_magic_h=yes 5515fi 5516 5517######################################## 5518# check whether we can disable warning option with a pragma (this is needed 5519# to silence warnings in the headers of some versions of external libraries). 5520# This test has to be compiled with -Werror as otherwise an unknown pragma is 5521# only a warning. 5522# 5523# If we can't selectively disable warning in the code, disable -Werror so that 5524# the build doesn't fail anyway. 5525 5526pragma_disable_unused_but_set=no 5527cat > $TMPC << EOF 5528#pragma GCC diagnostic push 5529#pragma GCC diagnostic ignored "-Wstrict-prototypes" 5530#pragma GCC diagnostic pop 5531 5532int main(void) { 5533 return 0; 5534} 5535EOF 5536if compile_prog "-Werror" "" ; then 5537 pragma_diagnostic_available=yes 5538else 5539 werror=no 5540fi 5541 5542######################################## 5543# check if we have valgrind/valgrind.h 5544 5545valgrind_h=no 5546cat > $TMPC << EOF 5547#include <valgrind/valgrind.h> 5548int main(void) { 5549 return 0; 5550} 5551EOF 5552if compile_prog "" "" ; then 5553 valgrind_h=yes 5554fi 5555 5556######################################## 5557# check if environ is declared 5558 5559has_environ=no 5560cat > $TMPC << EOF 5561#include <unistd.h> 5562int main(void) { 5563 environ = 0; 5564 return 0; 5565} 5566EOF 5567if compile_prog "" "" ; then 5568 has_environ=yes 5569fi 5570 5571######################################## 5572# check if cpuid.h is usable. 5573 5574cat > $TMPC << EOF 5575#include <cpuid.h> 5576int main(void) { 5577 unsigned a, b, c, d; 5578 int max = __get_cpuid_max(0, 0); 5579 5580 if (max >= 1) { 5581 __cpuid(1, a, b, c, d); 5582 } 5583 5584 if (max >= 7) { 5585 __cpuid_count(7, 0, a, b, c, d); 5586 } 5587 5588 return 0; 5589} 5590EOF 5591if compile_prog "" "" ; then 5592 cpuid_h=yes 5593fi 5594 5595########################################## 5596# avx2 optimization requirement check 5597# 5598# There is no point enabling this if cpuid.h is not usable, 5599# since we won't be able to select the new routines. 5600 5601if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 5602 cat > $TMPC << EOF 5603#pragma GCC push_options 5604#pragma GCC target("avx2") 5605#include <cpuid.h> 5606#include <immintrin.h> 5607static int bar(void *a) { 5608 __m256i x = *(__m256i *)a; 5609 return _mm256_testz_si256(x, x); 5610} 5611int main(int argc, char *argv[]) { return bar(argv[0]); } 5612EOF 5613 if compile_object "" ; then 5614 avx2_opt="yes" 5615 else 5616 avx2_opt="no" 5617 fi 5618fi 5619 5620########################################## 5621# avx512f optimization requirement check 5622# 5623# There is no point enabling this if cpuid.h is not usable, 5624# since we won't be able to select the new routines. 5625# by default, it is turned off. 5626# if user explicitly want to enable it, check environment 5627 5628if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 5629 cat > $TMPC << EOF 5630#pragma GCC push_options 5631#pragma GCC target("avx512f") 5632#include <cpuid.h> 5633#include <immintrin.h> 5634static int bar(void *a) { 5635 __m512i x = *(__m512i *)a; 5636 return _mm512_test_epi64_mask(x, x); 5637} 5638int main(int argc, char *argv[]) 5639{ 5640 return bar(argv[0]); 5641} 5642EOF 5643 if ! compile_object "" ; then 5644 avx512f_opt="no" 5645 fi 5646else 5647 avx512f_opt="no" 5648fi 5649 5650######################################## 5651# check if __[u]int128_t is usable. 5652 5653int128=no 5654cat > $TMPC << EOF 5655__int128_t a; 5656__uint128_t b; 5657int main (void) { 5658 a = a + b; 5659 b = a * b; 5660 a = a * a; 5661 return 0; 5662} 5663EOF 5664if compile_prog "" "" ; then 5665 int128=yes 5666fi 5667 5668######################################### 5669# See if 128-bit atomic operations are supported. 5670 5671atomic128=no 5672if test "$int128" = "yes"; then 5673 cat > $TMPC << EOF 5674int main(void) 5675{ 5676 unsigned __int128 x = 0, y = 0; 5677 y = __atomic_load_16(&x, 0); 5678 __atomic_store_16(&x, y, 0); 5679 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5680 return 0; 5681} 5682EOF 5683 if compile_prog "" "" ; then 5684 atomic128=yes 5685 fi 5686fi 5687 5688cmpxchg128=no 5689if test "$int128" = yes && test "$atomic128" = no; then 5690 cat > $TMPC << EOF 5691int main(void) 5692{ 5693 unsigned __int128 x = 0, y = 0; 5694 __sync_val_compare_and_swap_16(&x, y, x); 5695 return 0; 5696} 5697EOF 5698 if compile_prog "" "" ; then 5699 cmpxchg128=yes 5700 fi 5701fi 5702 5703######################################### 5704# See if 64-bit atomic operations are supported. 5705# Note that without __atomic builtins, we can only 5706# assume atomic loads/stores max at pointer size. 5707 5708cat > $TMPC << EOF 5709#include <stdint.h> 5710int main(void) 5711{ 5712 uint64_t x = 0, y = 0; 5713#ifdef __ATOMIC_RELAXED 5714 y = __atomic_load_8(&x, 0); 5715 __atomic_store_8(&x, y, 0); 5716 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5717 __atomic_exchange_8(&x, y, 0); 5718 __atomic_fetch_add_8(&x, y, 0); 5719#else 5720 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 5721 __sync_lock_test_and_set(&x, y); 5722 __sync_val_compare_and_swap(&x, y, 0); 5723 __sync_fetch_and_add(&x, y); 5724#endif 5725 return 0; 5726} 5727EOF 5728if compile_prog "" "" ; then 5729 atomic64=yes 5730fi 5731 5732######################################### 5733# See if --dynamic-list is supported by the linker 5734ld_dynamic_list="no" 5735if test "$static" = "no" ; then 5736 cat > $TMPTXT <<EOF 5737{ 5738 foo; 5739}; 5740EOF 5741 5742 cat > $TMPC <<EOF 5743#include <stdio.h> 5744void foo(void); 5745 5746void foo(void) 5747{ 5748 printf("foo\n"); 5749} 5750 5751int main(void) 5752{ 5753 foo(); 5754 return 0; 5755} 5756EOF 5757 5758 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 5759 ld_dynamic_list="yes" 5760 fi 5761fi 5762 5763######################################### 5764# See if -exported_symbols_list is supported by the linker 5765 5766ld_exported_symbols_list="no" 5767if test "$static" = "no" ; then 5768 cat > $TMPTXT <<EOF 5769 _foo 5770EOF 5771 5772 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 5773 ld_exported_symbols_list="yes" 5774 fi 5775fi 5776 5777if test "$plugins" = "yes" && 5778 test "$ld_dynamic_list" = "no" && 5779 test "$ld_exported_symbols_list" = "no" ; then 5780 error_exit \ 5781 "Plugin support requires dynamic linking and specifying a set of symbols " \ 5782 "that are exported to plugins. Unfortunately your linker doesn't " \ 5783 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 5784 "for this purpose. You can't build with --static." 5785fi 5786 5787######################################## 5788# See if __attribute__((alias)) is supported. 5789# This false for Xcode 9, but has been remedied for Xcode 10. 5790# Unfortunately, travis uses Xcode 9 by default. 5791 5792attralias=no 5793cat > $TMPC << EOF 5794int x = 1; 5795extern const int y __attribute__((alias("x"))); 5796int main(void) { return 0; } 5797EOF 5798if compile_prog "" "" ; then 5799 attralias=yes 5800fi 5801 5802######################################## 5803# check if getauxval is available. 5804 5805getauxval=no 5806cat > $TMPC << EOF 5807#include <sys/auxv.h> 5808int main(void) { 5809 return getauxval(AT_HWCAP) == 0; 5810} 5811EOF 5812if compile_prog "" "" ; then 5813 getauxval=yes 5814fi 5815 5816######################################## 5817# check if ccache is interfering with 5818# semantic analysis of macros 5819 5820unset CCACHE_CPP2 5821ccache_cpp2=no 5822cat > $TMPC << EOF 5823static const int Z = 1; 5824#define fn() ({ Z; }) 5825#define TAUT(X) ((X) == Z) 5826#define PAREN(X, Y) (X == Y) 5827#define ID(X) (X) 5828int main(int argc, char *argv[]) 5829{ 5830 int x = 0, y = 0; 5831 x = ID(x); 5832 x = fn(); 5833 fn(); 5834 if (PAREN(x, y)) return 0; 5835 if (TAUT(Z)) return 0; 5836 return 0; 5837} 5838EOF 5839 5840if ! compile_object "-Werror"; then 5841 ccache_cpp2=yes 5842fi 5843 5844################################################# 5845# clang does not support glibc + FORTIFY_SOURCE. 5846 5847if test "$fortify_source" != "no"; then 5848 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 5849 fortify_source="no"; 5850 elif test -n "$cxx" && has $cxx && 5851 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 5852 fortify_source="no"; 5853 else 5854 fortify_source="yes" 5855 fi 5856fi 5857 5858############################################### 5859# Check if copy_file_range is provided by glibc 5860have_copy_file_range=no 5861cat > $TMPC << EOF 5862#include <unistd.h> 5863int main(void) { 5864 copy_file_range(0, NULL, 0, NULL, 0, 0); 5865 return 0; 5866} 5867EOF 5868if compile_prog "" "" ; then 5869 have_copy_file_range=yes 5870fi 5871 5872########################################## 5873# check if struct fsxattr is available via linux/fs.h 5874 5875have_fsxattr=no 5876cat > $TMPC << EOF 5877#include <linux/fs.h> 5878struct fsxattr foo; 5879int main(void) { 5880 return 0; 5881} 5882EOF 5883if compile_prog "" "" ; then 5884 have_fsxattr=yes 5885fi 5886 5887########################################## 5888# check for usable membarrier system call 5889if test "$membarrier" = "yes"; then 5890 have_membarrier=no 5891 if test "$mingw32" = "yes" ; then 5892 have_membarrier=yes 5893 elif test "$linux" = "yes" ; then 5894 cat > $TMPC << EOF 5895 #include <linux/membarrier.h> 5896 #include <sys/syscall.h> 5897 #include <unistd.h> 5898 #include <stdlib.h> 5899 int main(void) { 5900 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 5901 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 5902 exit(0); 5903 } 5904EOF 5905 if compile_prog "" "" ; then 5906 have_membarrier=yes 5907 fi 5908 fi 5909 if test "$have_membarrier" = "no"; then 5910 feature_not_found "membarrier" "membarrier system call not available" 5911 fi 5912else 5913 # Do not enable it by default even for Mingw32, because it doesn't 5914 # work on Wine. 5915 membarrier=no 5916fi 5917 5918########################################## 5919# check if rtnetlink.h exists and is useful 5920have_rtnetlink=no 5921cat > $TMPC << EOF 5922#include <linux/rtnetlink.h> 5923int main(void) { 5924 return IFLA_PROTO_DOWN; 5925} 5926EOF 5927if compile_prog "" "" ; then 5928 have_rtnetlink=yes 5929fi 5930 5931########################################## 5932# check for usable AF_VSOCK environment 5933have_af_vsock=no 5934cat > $TMPC << EOF 5935#include <errno.h> 5936#include <sys/types.h> 5937#include <sys/socket.h> 5938#if !defined(AF_VSOCK) 5939# error missing AF_VSOCK flag 5940#endif 5941#include <linux/vm_sockets.h> 5942int main(void) { 5943 int sock, ret; 5944 struct sockaddr_vm svm; 5945 socklen_t len = sizeof(svm); 5946 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 5947 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 5948 if ((ret == -1) && (errno == ENOTCONN)) { 5949 return 0; 5950 } 5951 return -1; 5952} 5953EOF 5954if compile_prog "" "" ; then 5955 have_af_vsock=yes 5956fi 5957 5958########################################## 5959# check for usable AF_ALG environment 5960have_afalg=no 5961cat > $TMPC << EOF 5962#include <errno.h> 5963#include <sys/types.h> 5964#include <sys/socket.h> 5965#include <linux/if_alg.h> 5966int main(void) { 5967 int sock; 5968 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 5969 return sock; 5970} 5971EOF 5972if compile_prog "" "" ; then 5973 have_afalg=yes 5974fi 5975if test "$crypto_afalg" = "yes" 5976then 5977 if test "$have_afalg" != "yes" 5978 then 5979 error_exit "AF_ALG requested but could not be detected" 5980 fi 5981fi 5982 5983 5984################################################# 5985# Check to see if we have the Hypervisor framework 5986if [ "$darwin" = "yes" ] ; then 5987 cat > $TMPC << EOF 5988#include <Hypervisor/hv.h> 5989int main() { return 0;} 5990EOF 5991 if ! compile_object ""; then 5992 hvf='no' 5993 else 5994 hvf='yes' 5995 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS" 5996 fi 5997fi 5998 5999################################################# 6000# Sparc implicitly links with --relax, which is 6001# incompatible with -r, so --no-relax should be 6002# given. It does no harm to give it on other 6003# platforms too. 6004 6005# Note: the prototype is needed since QEMU_CFLAGS 6006# contains -Wmissing-prototypes 6007cat > $TMPC << EOF 6008extern int foo(void); 6009int foo(void) { return 0; } 6010EOF 6011if ! compile_object ""; then 6012 error_exit "Failed to compile object file for LD_REL_FLAGS test" 6013fi 6014for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 6015 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 6016 LD_REL_FLAGS=$i 6017 break 6018 fi 6019done 6020if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 6021 feature_not_found "modules" "Cannot find how to build relocatable objects" 6022fi 6023 6024########################################## 6025# check for sysmacros.h 6026 6027have_sysmacros=no 6028cat > $TMPC << EOF 6029#include <sys/sysmacros.h> 6030int main(void) { 6031 return makedev(0, 0); 6032} 6033EOF 6034if compile_prog "" "" ; then 6035 have_sysmacros=yes 6036fi 6037 6038########################################## 6039# Veritas HyperScale block driver VxHS 6040# Check if libvxhs is installed 6041 6042if test "$vxhs" != "no" ; then 6043 cat > $TMPC <<EOF 6044#include <stdint.h> 6045#include <qnio/qnio_api.h> 6046 6047void *vxhs_callback; 6048 6049int main(void) { 6050 iio_init(QNIO_VERSION, vxhs_callback); 6051 return 0; 6052} 6053EOF 6054 vxhs_libs="-lvxhs -lssl" 6055 if compile_prog "" "$vxhs_libs" ; then 6056 vxhs=yes 6057 else 6058 if test "$vxhs" = "yes" ; then 6059 feature_not_found "vxhs block device" "Install libvxhs See github" 6060 fi 6061 vxhs=no 6062 fi 6063fi 6064 6065########################################## 6066# check for _Static_assert() 6067 6068have_static_assert=no 6069cat > $TMPC << EOF 6070_Static_assert(1, "success"); 6071int main(void) { 6072 return 0; 6073} 6074EOF 6075if compile_prog "" "" ; then 6076 have_static_assert=yes 6077fi 6078 6079########################################## 6080# check for utmpx.h, it is missing e.g. on OpenBSD 6081 6082have_utmpx=no 6083cat > $TMPC << EOF 6084#include <utmpx.h> 6085struct utmpx user_info; 6086int main(void) { 6087 return 0; 6088} 6089EOF 6090if compile_prog "" "" ; then 6091 have_utmpx=yes 6092fi 6093 6094########################################## 6095# check for getrandom() 6096 6097have_getrandom=no 6098cat > $TMPC << EOF 6099#include <sys/random.h> 6100int main(void) { 6101 return getrandom(0, 0, GRND_NONBLOCK); 6102} 6103EOF 6104if compile_prog "" "" ; then 6105 have_getrandom=yes 6106fi 6107 6108########################################## 6109# checks for sanitizers 6110 6111have_asan=no 6112have_ubsan=no 6113have_asan_iface_h=no 6114have_asan_iface_fiber=no 6115 6116if test "$sanitizers" = "yes" ; then 6117 write_c_skeleton 6118 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 6119 have_asan=yes 6120 fi 6121 6122 # we could use a simple skeleton for flags checks, but this also 6123 # detect the static linking issue of ubsan, see also: 6124 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 6125 cat > $TMPC << EOF 6126#include <stdlib.h> 6127int main(void) { 6128 void *tmp = malloc(10); 6129 return *(int *)(tmp + 2); 6130} 6131EOF 6132 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 6133 have_ubsan=yes 6134 fi 6135 6136 if check_include "sanitizer/asan_interface.h" ; then 6137 have_asan_iface_h=yes 6138 fi 6139 6140 cat > $TMPC << EOF 6141#include <sanitizer/asan_interface.h> 6142int main(void) { 6143 __sanitizer_start_switch_fiber(0, 0, 0); 6144 return 0; 6145} 6146EOF 6147 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 6148 have_asan_iface_fiber=yes 6149 fi 6150fi 6151 6152########################################## 6153# checks for fuzzer 6154if test "$fuzzing" = "yes" ; then 6155 write_c_fuzzer_skeleton 6156 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address,fuzzer" ""; then 6157 have_fuzzer=yes 6158 fi 6159fi 6160 6161########################################## 6162# check for libpmem 6163 6164if test "$libpmem" != "no"; then 6165 if $pkg_config --exists "libpmem"; then 6166 libpmem="yes" 6167 libpmem_libs=$($pkg_config --libs libpmem) 6168 libpmem_cflags=$($pkg_config --cflags libpmem) 6169 libs_softmmu="$libs_softmmu $libpmem_libs" 6170 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 6171 else 6172 if test "$libpmem" = "yes" ; then 6173 feature_not_found "libpmem" "Install nvml or pmdk" 6174 fi 6175 libpmem="no" 6176 fi 6177fi 6178 6179########################################## 6180# check for slirp 6181 6182# slirp is only required when building softmmu targets 6183if test -z "$slirp" -a "$softmmu" != "yes" ; then 6184 slirp="no" 6185fi 6186 6187case "$slirp" in 6188 "" | yes) 6189 if $pkg_config slirp; then 6190 slirp=system 6191 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 6192 slirp=git 6193 elif test -e "${source_path}/slirp/Makefile" ; then 6194 slirp=internal 6195 elif test -z "$slirp" ; then 6196 slirp=no 6197 else 6198 feature_not_found "slirp" "Install slirp devel or git submodule" 6199 fi 6200 ;; 6201 6202 system) 6203 if ! $pkg_config slirp; then 6204 feature_not_found "slirp" "Install slirp devel" 6205 fi 6206 ;; 6207esac 6208 6209case "$slirp" in 6210 git | internal) 6211 if test "$slirp" = git; then 6212 git_submodules="${git_submodules} slirp" 6213 fi 6214 mkdir -p slirp 6215 slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src" 6216 slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp" 6217 if test "$mingw32" = "yes" ; then 6218 slirp_libs="$slirp_libs -lws2_32 -liphlpapi" 6219 fi 6220 ;; 6221 6222 system) 6223 slirp_version=$($pkg_config --modversion slirp 2>/dev/null) 6224 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) 6225 slirp_libs=$($pkg_config --libs slirp 2>/dev/null) 6226 ;; 6227 6228 no) 6229 ;; 6230 *) 6231 error_exit "Unknown state for slirp: $slirp" 6232 ;; 6233esac 6234 6235 6236########################################## 6237# End of CC checks 6238# After here, no more $cc or $ld runs 6239 6240write_c_skeleton 6241 6242if test "$gcov" = "yes" ; then 6243 QEMU_CFLAGS="-fprofile-arcs -ftest-coverage -g $QEMU_CFLAGS" 6244 QEMU_LDFLAGS="-fprofile-arcs -ftest-coverage $QEMU_LDFLAGS" 6245elif test "$fortify_source" = "yes" ; then 6246 CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS" 6247elif test "$debug" = "no"; then 6248 CFLAGS="-O2 $CFLAGS" 6249fi 6250 6251if test "$have_asan" = "yes"; then 6252 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 6253 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 6254 if test "$have_asan_iface_h" = "no" ; then 6255 echo "ASAN build enabled, but ASAN header missing." \ 6256 "Without code annotation, the report may be inferior." 6257 elif test "$have_asan_iface_fiber" = "no" ; then 6258 echo "ASAN build enabled, but ASAN header is too old." \ 6259 "Without code annotation, the report may be inferior." 6260 fi 6261fi 6262if test "$have_ubsan" = "yes"; then 6263 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 6264 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 6265fi 6266 6267########################################## 6268# Do we have libnfs 6269if test "$libnfs" != "no" ; then 6270 if $pkg_config --atleast-version=1.9.3 libnfs; then 6271 libnfs="yes" 6272 libnfs_libs=$($pkg_config --libs libnfs) 6273 else 6274 if test "$libnfs" = "yes" ; then 6275 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 6276 fi 6277 libnfs="no" 6278 fi 6279fi 6280 6281########################################## 6282# Do we have libudev 6283if test "$libudev" != "no" ; then 6284 if $pkg_config libudev && test "$static" != "yes"; then 6285 libudev="yes" 6286 libudev_libs=$($pkg_config --libs libudev) 6287 else 6288 libudev="no" 6289 fi 6290fi 6291 6292# Now we've finished running tests it's OK to add -Werror to the compiler flags 6293if test "$werror" = "yes"; then 6294 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 6295fi 6296 6297if test "$solaris" = "no" ; then 6298 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 6299 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 6300 fi 6301fi 6302 6303# test if pod2man has --utf8 option 6304if pod2man --help | grep -q utf8; then 6305 POD2MAN="pod2man --utf8" 6306else 6307 POD2MAN="pod2man" 6308fi 6309 6310# Use ASLR, no-SEH and DEP if available 6311if test "$mingw32" = "yes" ; then 6312 for flag in --dynamicbase --no-seh --nxcompat; do 6313 if ld_has $flag ; then 6314 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 6315 fi 6316 done 6317fi 6318 6319# Disable OpenBSD W^X if available 6320if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then 6321 cat > $TMPC <<EOF 6322 int main(void) { return 0; } 6323EOF 6324 wx_ldflags="-Wl,-z,wxneeded" 6325 if compile_prog "" "$wx_ldflags"; then 6326 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags" 6327 fi 6328fi 6329 6330qemu_confdir=$sysconfdir$confsuffix 6331qemu_moddir=$libdir$confsuffix 6332qemu_datadir=$datadir$confsuffix 6333qemu_localedir="$datadir/locale" 6334qemu_icondir="$datadir/icons" 6335qemu_desktopdir="$datadir/applications" 6336 6337# We can only support ivshmem if we have eventfd 6338if [ "$eventfd" = "yes" ]; then 6339 ivshmem=yes 6340fi 6341 6342tools="" 6343if test "$want_tools" = "yes" ; then 6344 tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools" 6345 if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then 6346 tools="qemu-nbd\$(EXESUF) qemu-storage-daemon\$(EXESUF) $tools" 6347 fi 6348 if [ "$ivshmem" = "yes" ]; then 6349 tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools" 6350 fi 6351 if [ "$curl" = "yes" ]; then 6352 tools="elf2dmp\$(EXESUF) $tools" 6353 fi 6354fi 6355if test "$softmmu" = yes ; then 6356 if test "$linux" = yes; then 6357 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then 6358 virtfs=yes 6359 tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)" 6360 else 6361 if test "$virtfs" = yes; then 6362 error_exit "VirtFS requires libcap-ng devel and libattr devel" 6363 fi 6364 virtfs=no 6365 fi 6366 if test "$mpath" != no && test "$mpathpersist" = yes ; then 6367 mpath=yes 6368 else 6369 if test "$mpath" = yes; then 6370 error_exit "Multipath requires libmpathpersist devel" 6371 fi 6372 mpath=no 6373 fi 6374 tools="$tools scsi/qemu-pr-helper\$(EXESUF)" 6375 else 6376 if test "$virtfs" = yes; then 6377 error_exit "VirtFS is supported only on Linux" 6378 fi 6379 virtfs=no 6380 if test "$mpath" = yes; then 6381 error_exit "Multipath is supported only on Linux" 6382 fi 6383 mpath=no 6384 fi 6385 if test "$xkbcommon" = "yes"; then 6386 tools="qemu-keymap\$(EXESUF) $tools" 6387 fi 6388fi 6389 6390# Probe for guest agent support/options 6391 6392if [ "$guest_agent" != "no" ]; then 6393 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 6394 guest_agent=no 6395 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 6396 tools="qemu-ga\$(EXESUF) $tools" 6397 guest_agent=yes 6398 elif [ "$guest_agent" != yes ]; then 6399 guest_agent=no 6400 else 6401 error_exit "Guest agent is not supported on this platform" 6402 fi 6403fi 6404 6405# Guest agent Window MSI package 6406 6407if test "$guest_agent" != yes; then 6408 if test "$guest_agent_msi" = yes; then 6409 error_exit "MSI guest agent package requires guest agent enabled" 6410 fi 6411 guest_agent_msi=no 6412elif test "$mingw32" != "yes"; then 6413 if test "$guest_agent_msi" = "yes"; then 6414 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 6415 fi 6416 guest_agent_msi=no 6417elif ! has wixl; then 6418 if test "$guest_agent_msi" = "yes"; then 6419 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 6420 fi 6421 guest_agent_msi=no 6422else 6423 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 6424 # disabled explicitly 6425 if test "$guest_agent_msi" != "no"; then 6426 guest_agent_msi=yes 6427 fi 6428fi 6429 6430if test "$guest_agent_msi" = "yes"; then 6431 if test "$guest_agent_with_vss" = "yes"; then 6432 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 6433 fi 6434 6435 if test "$QEMU_GA_MANUFACTURER" = ""; then 6436 QEMU_GA_MANUFACTURER=QEMU 6437 fi 6438 6439 if test "$QEMU_GA_DISTRO" = ""; then 6440 QEMU_GA_DISTRO=Linux 6441 fi 6442 6443 if test "$QEMU_GA_VERSION" = ""; then 6444 QEMU_GA_VERSION=$(cat $source_path/VERSION) 6445 fi 6446 6447 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 6448 6449 case "$cpu" in 6450 x86_64) 6451 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 6452 ;; 6453 i386) 6454 QEMU_GA_MSI_ARCH="-D Arch=32" 6455 ;; 6456 *) 6457 error_exit "CPU $cpu not supported for building installation package" 6458 ;; 6459 esac 6460fi 6461 6462# Mac OS X ships with a broken assembler 6463roms= 6464if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 6465 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 6466 test "$softmmu" = yes ; then 6467 # Different host OS linkers have different ideas about the name of the ELF 6468 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 6469 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 6470 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 6471 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 6472 ld_i386_emulation="$emu" 6473 roms="optionrom" 6474 break 6475 fi 6476 done 6477fi 6478 6479# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 6480if test "$cpu" = "s390x" ; then 6481 write_c_skeleton 6482 if compile_prog "-march=z900" ""; then 6483 roms="$roms s390-ccw" 6484 fi 6485fi 6486 6487# Probe for the need for relocating the user-only binary. 6488if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then 6489 textseg_addr= 6490 case "$cpu" in 6491 arm | i386 | ppc* | s390* | sparc* | x86_64 | x32) 6492 # ??? Rationale for choosing this address 6493 textseg_addr=0x60000000 6494 ;; 6495 mips) 6496 # A 256M aligned address, high in the address space, with enough 6497 # room for the code_gen_buffer above it before the stack. 6498 textseg_addr=0x60000000 6499 ;; 6500 esac 6501 if [ -n "$textseg_addr" ]; then 6502 cat > $TMPC <<EOF 6503 int main(void) { return 0; } 6504EOF 6505 textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr" 6506 if ! compile_prog "" "$textseg_ldflags"; then 6507 # In case ld does not support -Ttext-segment, edit the default linker 6508 # script via sed to set the .text start addr. This is needed on FreeBSD 6509 # at least. 6510 if ! $ld --verbose >/dev/null 2>&1; then 6511 error_exit \ 6512 "We need to link the QEMU user mode binaries at a" \ 6513 "specific text address. Unfortunately your linker" \ 6514 "doesn't support either the -Ttext-segment option or" \ 6515 "printing the default linker script with --verbose." \ 6516 "If you don't want the user mode binaries, pass the" \ 6517 "--disable-user option to configure." 6518 fi 6519 6520 $ld --verbose | sed \ 6521 -e '1,/==================================================/d' \ 6522 -e '/==================================================/,$d' \ 6523 -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \ 6524 -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld 6525 textseg_ldflags="-Wl,-T../config-host.ld" 6526 fi 6527 fi 6528fi 6529 6530# Check that the C++ compiler exists and works with the C compiler. 6531# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 6532if has $cxx; then 6533 cat > $TMPC <<EOF 6534int c_function(void); 6535int main(void) { return c_function(); } 6536EOF 6537 6538 compile_object 6539 6540 cat > $TMPCXX <<EOF 6541extern "C" { 6542 int c_function(void); 6543} 6544int c_function(void) { return 42; } 6545EOF 6546 6547 update_cxxflags 6548 6549 if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 6550 # C++ compiler $cxx works ok with C compiler $cc 6551 : 6552 else 6553 echo "C++ compiler $cxx does not work with C compiler $cc" 6554 echo "Disabling C++ specific optional code" 6555 cxx= 6556 fi 6557else 6558 echo "No C++ compiler available; disabling C++ specific optional code" 6559 cxx= 6560fi 6561 6562echo_version() { 6563 if test "$1" = "yes" ; then 6564 echo "($2)" 6565 fi 6566} 6567 6568# prepend pixman and ftd flags after all config tests are done 6569QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 6570QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 6571libs_softmmu="$pixman_libs $libs_softmmu" 6572 6573echo "Install prefix $prefix" 6574echo "BIOS directory $(eval echo $qemu_datadir)" 6575echo "firmware path $(eval echo $firmwarepath)" 6576echo "binary directory $(eval echo $bindir)" 6577echo "library directory $(eval echo $libdir)" 6578echo "module directory $(eval echo $qemu_moddir)" 6579echo "libexec directory $(eval echo $libexecdir)" 6580echo "include directory $(eval echo $includedir)" 6581echo "config directory $(eval echo $sysconfdir)" 6582if test "$mingw32" = "no" ; then 6583echo "local state directory $(eval echo $local_statedir)" 6584echo "Manual directory $(eval echo $mandir)" 6585echo "ELF interp prefix $interp_prefix" 6586else 6587echo "local state directory queried at runtime" 6588echo "Windows SDK $win_sdk" 6589fi 6590echo "Build directory $(pwd)" 6591echo "Source path $source_path" 6592echo "GIT binary $git" 6593echo "GIT submodules $git_submodules" 6594echo "C compiler $cc" 6595echo "Host C compiler $host_cc" 6596echo "C++ compiler $cxx" 6597echo "Objective-C compiler $objcc" 6598echo "ARFLAGS $ARFLAGS" 6599echo "CFLAGS $CFLAGS" 6600echo "QEMU_CFLAGS $QEMU_CFLAGS" 6601echo "QEMU_LDFLAGS $QEMU_LDFLAGS" 6602echo "make $make" 6603echo "install $install" 6604echo "python $python ($python_version)" 6605if test "$docs" != "no"; then 6606 echo "sphinx-build $sphinx_build" 6607fi 6608echo "genisoimage $genisoimage" 6609echo "slirp support $slirp $(echo_version $slirp $slirp_version)" 6610if test "$slirp" != "no" ; then 6611 echo "smbd $smbd" 6612fi 6613echo "module support $modules" 6614echo "alt path mod load $module_upgrades" 6615echo "host CPU $cpu" 6616echo "host big endian $bigendian" 6617echo "target list $target_list" 6618echo "gprof enabled $gprof" 6619echo "sparse enabled $sparse" 6620echo "strip binaries $strip_opt" 6621echo "profiler $profiler" 6622echo "static build $static" 6623if test "$darwin" = "yes" ; then 6624 echo "Cocoa support $cocoa" 6625fi 6626echo "SDL support $sdl $(echo_version $sdl $sdlversion)" 6627echo "SDL image support $sdl_image" 6628echo "GTK support $gtk $(echo_version $gtk $gtk_version)" 6629echo "GTK GL support $gtk_gl" 6630echo "VTE support $vte $(echo_version $vte $vteversion)" 6631echo "TLS priority $tls_priority" 6632echo "GNUTLS support $gnutls" 6633echo "libgcrypt $gcrypt" 6634if test "$gcrypt" = "yes" 6635then 6636 echo " hmac $gcrypt_hmac" 6637 echo " XTS $gcrypt_xts" 6638fi 6639echo "nettle $nettle $(echo_version $nettle $nettle_version)" 6640if test "$nettle" = "yes" 6641then 6642 echo " XTS $nettle_xts" 6643fi 6644echo "libtasn1 $tasn1" 6645echo "PAM $auth_pam" 6646echo "iconv support $iconv" 6647echo "curses support $curses" 6648echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)" 6649echo "curl support $curl" 6650echo "mingw32 support $mingw32" 6651echo "Audio drivers $audio_drv_list" 6652echo "Block whitelist (rw) $block_drv_rw_whitelist" 6653echo "Block whitelist (ro) $block_drv_ro_whitelist" 6654echo "VirtFS support $virtfs" 6655echo "Multipath support $mpath" 6656echo "VNC support $vnc" 6657if test "$vnc" = "yes" ; then 6658 echo "VNC SASL support $vnc_sasl" 6659 echo "VNC JPEG support $vnc_jpeg" 6660 echo "VNC PNG support $vnc_png" 6661fi 6662echo "xen support $xen" 6663if test "$xen" = "yes" ; then 6664 echo "xen ctrl version $xen_ctrl_version" 6665fi 6666echo "brlapi support $brlapi" 6667echo "Documentation $docs" 6668echo "PIE $pie" 6669echo "vde support $vde" 6670echo "netmap support $netmap" 6671echo "Linux AIO support $linux_aio" 6672echo "Linux io_uring support $linux_io_uring" 6673echo "ATTR/XATTR support $attr" 6674echo "Install blobs $blobs" 6675echo "KVM support $kvm" 6676echo "HAX support $hax" 6677echo "HVF support $hvf" 6678echo "WHPX support $whpx" 6679echo "TCG support $tcg" 6680if test "$tcg" = "yes" ; then 6681 echo "TCG debug enabled $debug_tcg" 6682 echo "TCG interpreter $tcg_interpreter" 6683fi 6684echo "malloc trim support $malloc_trim" 6685echo "RDMA support $rdma" 6686echo "PVRDMA support $pvrdma" 6687echo "fdt support $fdt" 6688echo "membarrier $membarrier" 6689echo "preadv support $preadv" 6690echo "fdatasync $fdatasync" 6691echo "madvise $madvise" 6692echo "posix_madvise $posix_madvise" 6693echo "posix_memalign $posix_memalign" 6694echo "libcap-ng support $cap_ng" 6695echo "vhost-net support $vhost_net" 6696echo "vhost-crypto support $vhost_crypto" 6697echo "vhost-scsi support $vhost_scsi" 6698echo "vhost-vsock support $vhost_vsock" 6699echo "vhost-user support $vhost_user" 6700echo "vhost-user-fs support $vhost_user_fs" 6701echo "Trace backends $trace_backends" 6702if have_backend "simple"; then 6703echo "Trace output file $trace_file-<pid>" 6704fi 6705echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)" 6706echo "rbd support $rbd" 6707echo "xfsctl support $xfs" 6708echo "smartcard support $smartcard" 6709echo "libusb $libusb" 6710echo "usb net redir $usb_redir" 6711echo "OpenGL support $opengl" 6712echo "OpenGL dmabufs $opengl_dmabuf" 6713echo "libiscsi support $libiscsi" 6714echo "libnfs support $libnfs" 6715echo "build guest agent $guest_agent" 6716echo "QGA VSS support $guest_agent_with_vss" 6717echo "QGA w32 disk info $guest_agent_ntddscsi" 6718echo "QGA MSI support $guest_agent_msi" 6719echo "seccomp support $seccomp" 6720echo "coroutine backend $coroutine" 6721echo "coroutine pool $coroutine_pool" 6722echo "debug stack usage $debug_stack_usage" 6723echo "mutex debugging $debug_mutex" 6724echo "crypto afalg $crypto_afalg" 6725echo "GlusterFS support $glusterfs" 6726echo "gcov $gcov_tool" 6727echo "gcov enabled $gcov" 6728echo "TPM support $tpm" 6729echo "libssh support $libssh" 6730echo "QOM debugging $qom_cast_debug" 6731echo "Live block migration $live_block_migration" 6732echo "lzo support $lzo" 6733echo "snappy support $snappy" 6734echo "bzip2 support $bzip2" 6735echo "lzfse support $lzfse" 6736echo "zstd support $zstd" 6737echo "NUMA host support $numa" 6738echo "libxml2 $libxml2" 6739echo "tcmalloc support $tcmalloc" 6740echo "jemalloc support $jemalloc" 6741echo "avx2 optimization $avx2_opt" 6742echo "avx512f optimization $avx512f_opt" 6743echo "replication support $replication" 6744echo "VxHS block device $vxhs" 6745echo "bochs support $bochs" 6746echo "cloop support $cloop" 6747echo "dmg support $dmg" 6748echo "qcow v1 support $qcow1" 6749echo "vdi support $vdi" 6750echo "vvfat support $vvfat" 6751echo "qed support $qed" 6752echo "parallels support $parallels" 6753echo "sheepdog support $sheepdog" 6754echo "capstone $capstone" 6755echo "libpmem support $libpmem" 6756echo "libudev $libudev" 6757echo "default devices $default_devices" 6758echo "plugin support $plugins" 6759echo "fuzzing support $fuzzing" 6760echo "gdb $gdb_bin" 6761 6762if test "$supported_cpu" = "no"; then 6763 echo 6764 echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!" 6765 echo 6766 echo "CPU host architecture $cpu support is not currently maintained." 6767 echo "The QEMU project intends to remove support for this host CPU in" 6768 echo "a future release if nobody volunteers to maintain it and to" 6769 echo "provide a build host for our continuous integration setup." 6770 echo "configure has succeeded and you can continue to build, but" 6771 echo "if you care about QEMU on this platform you should contact" 6772 echo "us upstream at qemu-devel@nongnu.org." 6773fi 6774 6775if test "$supported_os" = "no"; then 6776 echo 6777 echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!" 6778 echo 6779 echo "Host OS $targetos support is not currently maintained." 6780 echo "The QEMU project intends to remove support for this host OS in" 6781 echo "a future release if nobody volunteers to maintain it and to" 6782 echo "provide a build host for our continuous integration setup." 6783 echo "configure has succeeded and you can continue to build, but" 6784 echo "if you care about QEMU on this platform you should contact" 6785 echo "us upstream at qemu-devel@nongnu.org." 6786fi 6787 6788config_host_mak="config-host.mak" 6789 6790echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6791 6792echo "# Automatically generated by configure - do not modify" > $config_host_mak 6793echo >> $config_host_mak 6794 6795echo all: >> $config_host_mak 6796echo "prefix=$prefix" >> $config_host_mak 6797echo "bindir=$bindir" >> $config_host_mak 6798echo "libdir=$libdir" >> $config_host_mak 6799echo "libexecdir=$libexecdir" >> $config_host_mak 6800echo "includedir=$includedir" >> $config_host_mak 6801echo "mandir=$mandir" >> $config_host_mak 6802echo "sysconfdir=$sysconfdir" >> $config_host_mak 6803echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6804echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6805echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6806echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 6807echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6808if test "$mingw32" = "no" ; then 6809 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6810fi 6811echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6812echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6813echo "qemu_icondir=$qemu_icondir" >> $config_host_mak 6814echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak 6815echo "libs_cpu=$libs_cpu" >> $config_host_mak 6816echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 6817echo "GIT=$git" >> $config_host_mak 6818echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6819echo "GIT_UPDATE=$git_update" >> $config_host_mak 6820 6821echo "ARCH=$ARCH" >> $config_host_mak 6822 6823if test "$default_devices" = "yes" ; then 6824 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 6825else 6826 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 6827fi 6828if test "$debug_tcg" = "yes" ; then 6829 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6830fi 6831if test "$strip_opt" = "yes" ; then 6832 echo "STRIP=${strip}" >> $config_host_mak 6833fi 6834if test "$bigendian" = "yes" ; then 6835 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6836fi 6837if test "$mingw32" = "yes" ; then 6838 echo "CONFIG_WIN32=y" >> $config_host_mak 6839 rc_version=$(cat $source_path/VERSION) 6840 version_major=${rc_version%%.*} 6841 rc_version=${rc_version#*.} 6842 version_minor=${rc_version%%.*} 6843 rc_version=${rc_version#*.} 6844 version_subminor=${rc_version%%.*} 6845 version_micro=0 6846 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6847 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6848 if test "$guest_agent_with_vss" = "yes" ; then 6849 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6850 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6851 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6852 fi 6853 if test "$guest_agent_ntddscsi" = "yes" ; then 6854 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 6855 fi 6856 if test "$guest_agent_msi" = "yes"; then 6857 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6858 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6859 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6860 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6861 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6862 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6863 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6864 fi 6865else 6866 echo "CONFIG_POSIX=y" >> $config_host_mak 6867fi 6868 6869if test "$linux" = "yes" ; then 6870 echo "CONFIG_LINUX=y" >> $config_host_mak 6871fi 6872 6873if test "$darwin" = "yes" ; then 6874 echo "CONFIG_DARWIN=y" >> $config_host_mak 6875fi 6876 6877if test "$solaris" = "yes" ; then 6878 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6879fi 6880if test "$haiku" = "yes" ; then 6881 echo "CONFIG_HAIKU=y" >> $config_host_mak 6882fi 6883if test "$static" = "yes" ; then 6884 echo "CONFIG_STATIC=y" >> $config_host_mak 6885fi 6886if test "$profiler" = "yes" ; then 6887 echo "CONFIG_PROFILER=y" >> $config_host_mak 6888fi 6889if test "$want_tools" = "yes" ; then 6890 echo "CONFIG_TOOLS=y" >> $config_host_mak 6891fi 6892if test "$slirp" != "no"; then 6893 echo "CONFIG_SLIRP=y" >> $config_host_mak 6894 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 6895 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak 6896 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak 6897fi 6898if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then 6899 echo "config-host.h: slirp/all" >> $config_host_mak 6900fi 6901if test "$vde" = "yes" ; then 6902 echo "CONFIG_VDE=y" >> $config_host_mak 6903 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 6904fi 6905if test "$netmap" = "yes" ; then 6906 echo "CONFIG_NETMAP=y" >> $config_host_mak 6907fi 6908if test "$l2tpv3" = "yes" ; then 6909 echo "CONFIG_L2TPV3=y" >> $config_host_mak 6910fi 6911if test "$gprof" = "yes" ; then 6912 echo "CONFIG_GPROF=y" >> $config_host_mak 6913fi 6914if test "$cap_ng" = "yes" ; then 6915 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak 6916fi 6917echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 6918for drv in $audio_drv_list; do 6919 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 6920 case "$drv" in 6921 alsa | oss | pa | sdl) 6922 echo "$def=m" >> $config_host_mak ;; 6923 *) 6924 echo "$def=y" >> $config_host_mak ;; 6925 esac 6926done 6927echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 6928echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 6929echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 6930echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 6931echo "OSS_LIBS=$oss_libs" >> $config_host_mak 6932if test "$audio_win_int" = "yes" ; then 6933 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 6934fi 6935echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 6936echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 6937if test "$vnc" = "yes" ; then 6938 echo "CONFIG_VNC=y" >> $config_host_mak 6939fi 6940if test "$vnc_sasl" = "yes" ; then 6941 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 6942fi 6943if test "$vnc_jpeg" = "yes" ; then 6944 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 6945fi 6946if test "$vnc_png" = "yes" ; then 6947 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 6948fi 6949if test "$xkbcommon" = "yes" ; then 6950 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 6951 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 6952fi 6953if test "$xfs" = "yes" ; then 6954 echo "CONFIG_XFS=y" >> $config_host_mak 6955fi 6956qemu_version=$(head $source_path/VERSION) 6957echo "VERSION=$qemu_version" >>$config_host_mak 6958echo "PKGVERSION=$pkgversion" >>$config_host_mak 6959echo "SRC_PATH=$source_path" >> $config_host_mak 6960echo "TARGET_DIRS=$target_list" >> $config_host_mak 6961if [ "$docs" = "yes" ] ; then 6962 echo "BUILD_DOCS=yes" >> $config_host_mak 6963fi 6964if test "$modules" = "yes"; then 6965 # $shacmd can generate a hash started with digit, which the compiler doesn't 6966 # like as an symbol. So prefix it with an underscore 6967 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 6968 echo "CONFIG_MODULES=y" >> $config_host_mak 6969fi 6970if test "$module_upgrades" = "yes"; then 6971 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 6972fi 6973if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 6974 echo "CONFIG_X11=y" >> $config_host_mak 6975 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 6976 echo "X11_LIBS=$x11_libs" >> $config_host_mak 6977fi 6978if test "$sdl" = "yes" ; then 6979 echo "CONFIG_SDL=m" >> $config_host_mak 6980 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 6981 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 6982 if test "$sdl_image" = "yes" ; then 6983 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak 6984 fi 6985fi 6986if test "$cocoa" = "yes" ; then 6987 echo "CONFIG_COCOA=y" >> $config_host_mak 6988fi 6989if test "$iconv" = "yes" ; then 6990 echo "CONFIG_ICONV=y" >> $config_host_mak 6991 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak 6992 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak 6993fi 6994if test "$curses" = "yes" ; then 6995 echo "CONFIG_CURSES=m" >> $config_host_mak 6996 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 6997 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 6998fi 6999if test "$pipe2" = "yes" ; then 7000 echo "CONFIG_PIPE2=y" >> $config_host_mak 7001fi 7002if test "$accept4" = "yes" ; then 7003 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 7004fi 7005if test "$splice" = "yes" ; then 7006 echo "CONFIG_SPLICE=y" >> $config_host_mak 7007fi 7008if test "$eventfd" = "yes" ; then 7009 echo "CONFIG_EVENTFD=y" >> $config_host_mak 7010fi 7011if test "$memfd" = "yes" ; then 7012 echo "CONFIG_MEMFD=y" >> $config_host_mak 7013fi 7014if test "$have_usbfs" = "yes" ; then 7015 echo "CONFIG_USBFS=y" >> $config_host_mak 7016fi 7017if test "$fallocate" = "yes" ; then 7018 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 7019fi 7020if test "$fallocate_punch_hole" = "yes" ; then 7021 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 7022fi 7023if test "$fallocate_zero_range" = "yes" ; then 7024 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 7025fi 7026if test "$posix_fallocate" = "yes" ; then 7027 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 7028fi 7029if test "$sync_file_range" = "yes" ; then 7030 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 7031fi 7032if test "$fiemap" = "yes" ; then 7033 echo "CONFIG_FIEMAP=y" >> $config_host_mak 7034fi 7035if test "$dup3" = "yes" ; then 7036 echo "CONFIG_DUP3=y" >> $config_host_mak 7037fi 7038if test "$ppoll" = "yes" ; then 7039 echo "CONFIG_PPOLL=y" >> $config_host_mak 7040fi 7041if test "$prctl_pr_set_timerslack" = "yes" ; then 7042 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 7043fi 7044if test "$epoll" = "yes" ; then 7045 echo "CONFIG_EPOLL=y" >> $config_host_mak 7046fi 7047if test "$epoll_create1" = "yes" ; then 7048 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 7049fi 7050if test "$sendfile" = "yes" ; then 7051 echo "CONFIG_SENDFILE=y" >> $config_host_mak 7052fi 7053if test "$timerfd" = "yes" ; then 7054 echo "CONFIG_TIMERFD=y" >> $config_host_mak 7055fi 7056if test "$setns" = "yes" ; then 7057 echo "CONFIG_SETNS=y" >> $config_host_mak 7058fi 7059if test "$clock_adjtime" = "yes" ; then 7060 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 7061fi 7062if test "$syncfs" = "yes" ; then 7063 echo "CONFIG_SYNCFS=y" >> $config_host_mak 7064fi 7065if test "$kcov" = "yes" ; then 7066 echo "CONFIG_KCOV=y" >> $config_host_mak 7067fi 7068if test "$inotify" = "yes" ; then 7069 echo "CONFIG_INOTIFY=y" >> $config_host_mak 7070fi 7071if test "$inotify1" = "yes" ; then 7072 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 7073fi 7074if test "$sem_timedwait" = "yes" ; then 7075 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 7076fi 7077if test "$strchrnul" = "yes" ; then 7078 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 7079fi 7080if test "$st_atim" = "yes" ; then 7081 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 7082fi 7083if test "$byteswap_h" = "yes" ; then 7084 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 7085fi 7086if test "$bswap_h" = "yes" ; then 7087 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 7088fi 7089if test "$curl" = "yes" ; then 7090 echo "CONFIG_CURL=m" >> $config_host_mak 7091 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 7092 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 7093fi 7094if test "$brlapi" = "yes" ; then 7095 echo "CONFIG_BRLAPI=y" >> $config_host_mak 7096 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 7097fi 7098if test "$gtk" = "yes" ; then 7099 echo "CONFIG_GTK=m" >> $config_host_mak 7100 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 7101 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 7102 if test "$gtk_gl" = "yes" ; then 7103 echo "CONFIG_GTK_GL=y" >> $config_host_mak 7104 fi 7105fi 7106if test "$gio" = "yes" ; then 7107 echo "CONFIG_GIO=y" >> $config_host_mak 7108 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 7109 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 7110 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 7111fi 7112echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 7113if test "$gnutls" = "yes" ; then 7114 echo "CONFIG_GNUTLS=y" >> $config_host_mak 7115fi 7116if test "$gcrypt" = "yes" ; then 7117 echo "CONFIG_GCRYPT=y" >> $config_host_mak 7118 if test "$gcrypt_hmac" = "yes" ; then 7119 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 7120 fi 7121fi 7122if test "$nettle" = "yes" ; then 7123 echo "CONFIG_NETTLE=y" >> $config_host_mak 7124 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 7125fi 7126if test "$qemu_private_xts" = "yes" ; then 7127 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 7128fi 7129if test "$tasn1" = "yes" ; then 7130 echo "CONFIG_TASN1=y" >> $config_host_mak 7131fi 7132if test "$auth_pam" = "yes" ; then 7133 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 7134fi 7135if test "$have_ifaddrs_h" = "yes" ; then 7136 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 7137fi 7138if test "$have_broken_size_max" = "yes" ; then 7139 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 7140fi 7141 7142# Work around a system header bug with some kernel/XFS header 7143# versions where they both try to define 'struct fsxattr': 7144# xfs headers will not try to redefine structs from linux headers 7145# if this macro is set. 7146if test "$have_fsxattr" = "yes" ; then 7147 echo "HAVE_FSXATTR=y" >> $config_host_mak 7148fi 7149if test "$have_copy_file_range" = "yes" ; then 7150 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 7151fi 7152if test "$vte" = "yes" ; then 7153 echo "CONFIG_VTE=y" >> $config_host_mak 7154 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 7155 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 7156fi 7157if test "$virglrenderer" = "yes" ; then 7158 echo "CONFIG_VIRGL=y" >> $config_host_mak 7159 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 7160 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 7161fi 7162if test "$xen" = "yes" ; then 7163 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 7164 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 7165fi 7166if test "$linux_aio" = "yes" ; then 7167 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 7168fi 7169if test "$linux_io_uring" = "yes" ; then 7170 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 7171 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 7172 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 7173fi 7174if test "$attr" = "yes" ; then 7175 echo "CONFIG_ATTR=y" >> $config_host_mak 7176fi 7177if test "$libattr" = "yes" ; then 7178 echo "CONFIG_LIBATTR=y" >> $config_host_mak 7179fi 7180if test "$virtfs" = "yes" ; then 7181 echo "CONFIG_VIRTFS=y" >> $config_host_mak 7182fi 7183if test "$mpath" = "yes" ; then 7184 echo "CONFIG_MPATH=y" >> $config_host_mak 7185 if test "$mpathpersist_new_api" = "yes"; then 7186 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 7187 fi 7188fi 7189if test "$vhost_scsi" = "yes" ; then 7190 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 7191fi 7192if test "$vhost_net" = "yes" ; then 7193 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 7194fi 7195if test "$vhost_net_user" = "yes" ; then 7196 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 7197fi 7198if test "$vhost_crypto" = "yes" ; then 7199 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 7200fi 7201if test "$vhost_vsock" = "yes" ; then 7202 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 7203fi 7204if test "$vhost_kernel" = "yes" ; then 7205 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 7206fi 7207if test "$vhost_user" = "yes" ; then 7208 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 7209fi 7210if test "$vhost_user_fs" = "yes" ; then 7211 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 7212fi 7213if test "$blobs" = "yes" ; then 7214 echo "INSTALL_BLOBS=yes" >> $config_host_mak 7215fi 7216if test "$iovec" = "yes" ; then 7217 echo "CONFIG_IOVEC=y" >> $config_host_mak 7218fi 7219if test "$preadv" = "yes" ; then 7220 echo "CONFIG_PREADV=y" >> $config_host_mak 7221fi 7222if test "$fdt" != "no" ; then 7223 echo "CONFIG_FDT=y" >> $config_host_mak 7224fi 7225if test "$membarrier" = "yes" ; then 7226 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 7227fi 7228if test "$signalfd" = "yes" ; then 7229 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 7230fi 7231if test "$optreset" = "yes" ; then 7232 echo "HAVE_OPTRESET=y" >> $config_host_mak 7233fi 7234if test "$tcg" = "yes"; then 7235 echo "CONFIG_TCG=y" >> $config_host_mak 7236 if test "$tcg_interpreter" = "yes" ; then 7237 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 7238 fi 7239fi 7240if test "$fdatasync" = "yes" ; then 7241 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 7242fi 7243if test "$madvise" = "yes" ; then 7244 echo "CONFIG_MADVISE=y" >> $config_host_mak 7245fi 7246if test "$posix_madvise" = "yes" ; then 7247 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 7248fi 7249if test "$posix_memalign" = "yes" ; then 7250 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 7251fi 7252 7253if test "$spice" = "yes" ; then 7254 echo "CONFIG_SPICE=y" >> $config_host_mak 7255fi 7256 7257if test "$smartcard" = "yes" ; then 7258 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 7259 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 7260 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 7261fi 7262 7263if test "$libusb" = "yes" ; then 7264 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 7265 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 7266 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 7267fi 7268 7269if test "$usb_redir" = "yes" ; then 7270 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 7271 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 7272 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 7273fi 7274 7275if test "$opengl" = "yes" ; then 7276 echo "CONFIG_OPENGL=y" >> $config_host_mak 7277 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 7278 if test "$opengl_dmabuf" = "yes" ; then 7279 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 7280 fi 7281fi 7282 7283if test "$gbm" = "yes" ; then 7284 echo "CONFIG_GBM=y" >> $config_host_mak 7285 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 7286 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 7287fi 7288 7289 7290if test "$malloc_trim" = "yes" ; then 7291 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 7292fi 7293 7294if test "$avx2_opt" = "yes" ; then 7295 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 7296fi 7297 7298if test "$avx512f_opt" = "yes" ; then 7299 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 7300fi 7301 7302if test "$lzo" = "yes" ; then 7303 echo "CONFIG_LZO=y" >> $config_host_mak 7304fi 7305 7306if test "$snappy" = "yes" ; then 7307 echo "CONFIG_SNAPPY=y" >> $config_host_mak 7308fi 7309 7310if test "$bzip2" = "yes" ; then 7311 echo "CONFIG_BZIP2=y" >> $config_host_mak 7312 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 7313fi 7314 7315if test "$lzfse" = "yes" ; then 7316 echo "CONFIG_LZFSE=y" >> $config_host_mak 7317 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 7318fi 7319 7320if test "$zstd" = "yes" ; then 7321 echo "CONFIG_ZSTD=y" >> $config_host_mak 7322fi 7323 7324if test "$libiscsi" = "yes" ; then 7325 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 7326 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 7327 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 7328fi 7329 7330if test "$libnfs" = "yes" ; then 7331 echo "CONFIG_LIBNFS=m" >> $config_host_mak 7332 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 7333fi 7334 7335if test "$seccomp" = "yes"; then 7336 echo "CONFIG_SECCOMP=y" >> $config_host_mak 7337 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 7338 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 7339fi 7340 7341# XXX: suppress that 7342if [ "$bsd" = "yes" ] ; then 7343 echo "CONFIG_BSD=y" >> $config_host_mak 7344fi 7345 7346if test "$localtime_r" = "yes" ; then 7347 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 7348fi 7349if test "$qom_cast_debug" = "yes" ; then 7350 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 7351fi 7352if test "$rbd" = "yes" ; then 7353 echo "CONFIG_RBD=m" >> $config_host_mak 7354 echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak 7355 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 7356fi 7357 7358echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 7359if test "$coroutine_pool" = "yes" ; then 7360 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 7361else 7362 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 7363fi 7364 7365if test "$debug_stack_usage" = "yes" ; then 7366 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 7367fi 7368 7369if test "$crypto_afalg" = "yes" ; then 7370 echo "CONFIG_AF_ALG=y" >> $config_host_mak 7371fi 7372 7373if test "$open_by_handle_at" = "yes" ; then 7374 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 7375fi 7376 7377if test "$linux_magic_h" = "yes" ; then 7378 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 7379fi 7380 7381if test "$pragma_diagnostic_available" = "yes" ; then 7382 echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak 7383fi 7384 7385if test "$valgrind_h" = "yes" ; then 7386 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 7387fi 7388 7389if test "$have_asan_iface_fiber" = "yes" ; then 7390 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 7391fi 7392 7393if test "$has_environ" = "yes" ; then 7394 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 7395fi 7396 7397if test "$cpuid_h" = "yes" ; then 7398 echo "CONFIG_CPUID_H=y" >> $config_host_mak 7399fi 7400 7401if test "$int128" = "yes" ; then 7402 echo "CONFIG_INT128=y" >> $config_host_mak 7403fi 7404 7405if test "$atomic128" = "yes" ; then 7406 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 7407fi 7408 7409if test "$cmpxchg128" = "yes" ; then 7410 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 7411fi 7412 7413if test "$atomic64" = "yes" ; then 7414 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 7415fi 7416 7417if test "$attralias" = "yes" ; then 7418 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak 7419fi 7420 7421if test "$getauxval" = "yes" ; then 7422 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 7423fi 7424 7425if test "$glusterfs" = "yes" ; then 7426 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 7427 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 7428 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 7429fi 7430 7431if test "$glusterfs_xlator_opt" = "yes" ; then 7432 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 7433fi 7434 7435if test "$glusterfs_discard" = "yes" ; then 7436 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 7437fi 7438 7439if test "$glusterfs_fallocate" = "yes" ; then 7440 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 7441fi 7442 7443if test "$glusterfs_zerofill" = "yes" ; then 7444 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 7445fi 7446 7447if test "$glusterfs_ftruncate_has_stat" = "yes" ; then 7448 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 7449fi 7450 7451if test "$glusterfs_iocb_has_stat" = "yes" ; then 7452 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 7453fi 7454 7455if test "$libssh" = "yes" ; then 7456 echo "CONFIG_LIBSSH=m" >> $config_host_mak 7457 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 7458 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 7459fi 7460 7461if test "$live_block_migration" = "yes" ; then 7462 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 7463fi 7464 7465if test "$tpm" = "yes"; then 7466 echo 'CONFIG_TPM=y' >> $config_host_mak 7467fi 7468 7469echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 7470if have_backend "nop"; then 7471 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 7472fi 7473if have_backend "simple"; then 7474 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 7475 # Set the appropriate trace file. 7476 trace_file="\"$trace_file-\" FMT_pid" 7477fi 7478if have_backend "log"; then 7479 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 7480fi 7481if have_backend "ust"; then 7482 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 7483fi 7484if have_backend "dtrace"; then 7485 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 7486 if test "$trace_backend_stap" = "yes" ; then 7487 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 7488 fi 7489fi 7490if have_backend "ftrace"; then 7491 if test "$linux" = "yes" ; then 7492 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 7493 else 7494 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 7495 fi 7496fi 7497if have_backend "syslog"; then 7498 if test "$posix_syslog" = "yes" ; then 7499 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 7500 else 7501 feature_not_found "syslog(trace backend)" "syslog not available" 7502 fi 7503fi 7504echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 7505 7506if test "$rdma" = "yes" ; then 7507 echo "CONFIG_RDMA=y" >> $config_host_mak 7508 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 7509fi 7510 7511if test "$pvrdma" = "yes" ; then 7512 echo "CONFIG_PVRDMA=y" >> $config_host_mak 7513fi 7514 7515if test "$have_rtnetlink" = "yes" ; then 7516 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 7517fi 7518 7519if test "$libxml2" = "yes" ; then 7520 echo "CONFIG_LIBXML2=y" >> $config_host_mak 7521 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 7522 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 7523fi 7524 7525if test "$replication" = "yes" ; then 7526 echo "CONFIG_REPLICATION=y" >> $config_host_mak 7527fi 7528 7529if test "$have_af_vsock" = "yes" ; then 7530 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 7531fi 7532 7533if test "$have_sysmacros" = "yes" ; then 7534 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 7535fi 7536 7537if test "$have_static_assert" = "yes" ; then 7538 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 7539fi 7540 7541if test "$have_utmpx" = "yes" ; then 7542 echo "HAVE_UTMPX=y" >> $config_host_mak 7543fi 7544if test "$have_getrandom" = "yes" ; then 7545 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 7546fi 7547if test "$ivshmem" = "yes" ; then 7548 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 7549fi 7550if test "$capstone" != "no" ; then 7551 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 7552fi 7553if test "$debug_mutex" = "yes" ; then 7554 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 7555fi 7556 7557# Hold two types of flag: 7558# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 7559# a thread we have a handle to 7560# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 7561# platform 7562if test "$pthread_setname_np_w_tid" = "yes" ; then 7563 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7564 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 7565elif test "$pthread_setname_np_wo_tid" = "yes" ; then 7566 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7567 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 7568fi 7569 7570if test "$vxhs" = "yes" ; then 7571 echo "CONFIG_VXHS=y" >> $config_host_mak 7572 echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak 7573fi 7574 7575if test "$libpmem" = "yes" ; then 7576 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 7577fi 7578 7579if test "$bochs" = "yes" ; then 7580 echo "CONFIG_BOCHS=y" >> $config_host_mak 7581fi 7582if test "$cloop" = "yes" ; then 7583 echo "CONFIG_CLOOP=y" >> $config_host_mak 7584fi 7585if test "$dmg" = "yes" ; then 7586 echo "CONFIG_DMG=y" >> $config_host_mak 7587fi 7588if test "$qcow1" = "yes" ; then 7589 echo "CONFIG_QCOW1=y" >> $config_host_mak 7590fi 7591if test "$vdi" = "yes" ; then 7592 echo "CONFIG_VDI=y" >> $config_host_mak 7593fi 7594if test "$vvfat" = "yes" ; then 7595 echo "CONFIG_VVFAT=y" >> $config_host_mak 7596fi 7597if test "$qed" = "yes" ; then 7598 echo "CONFIG_QED=y" >> $config_host_mak 7599fi 7600if test "$parallels" = "yes" ; then 7601 echo "CONFIG_PARALLELS=y" >> $config_host_mak 7602fi 7603if test "$sheepdog" = "yes" ; then 7604 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 7605fi 7606if test "$fuzzing" = "yes" ; then 7607 if test "$have_fuzzer" = "yes"; then 7608 FUZZ_LDFLAGS=" -fsanitize=address,fuzzer" 7609 FUZZ_CFLAGS=" -fsanitize=address,fuzzer" 7610 CFLAGS=" -fsanitize=address,fuzzer-no-link" 7611 else 7612 error_exit "Your compiler doesn't support -fsanitize=address,fuzzer" 7613 exit 1 7614 fi 7615fi 7616 7617if test "$plugins" = "yes" ; then 7618 echo "CONFIG_PLUGIN=y" >> $config_host_mak 7619 LIBS="-ldl $LIBS" 7620 # Copy the export object list to the build dir 7621 if test "$ld_dynamic_list" = "yes" ; then 7622 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 7623 ld_symbols=qemu-plugins-ld.symbols 7624 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 7625 elif test "$ld_exported_symbols_list" = "yes" ; then 7626 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 7627 ld64_symbols=qemu-plugins-ld64.symbols 7628 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 7629 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 7630 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 7631 else 7632 error_exit \ 7633 "If \$plugins=yes, either \$ld_dynamic_list or " \ 7634 "\$ld_exported_symbols_list should have been set to 'yes'." 7635 fi 7636fi 7637 7638if test -n "$gdb_bin" ; then 7639 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 7640fi 7641 7642if test "$tcg_interpreter" = "yes"; then 7643 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" 7644elif test "$ARCH" = "sparc64" ; then 7645 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES" 7646elif test "$ARCH" = "s390x" ; then 7647 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES" 7648elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then 7649 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES" 7650elif test "$ARCH" = "ppc64" ; then 7651 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES" 7652elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then 7653 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES" 7654else 7655 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES" 7656fi 7657 7658echo "TOOLS=$tools" >> $config_host_mak 7659echo "ROMS=$roms" >> $config_host_mak 7660echo "MAKE=$make" >> $config_host_mak 7661echo "INSTALL=$install" >> $config_host_mak 7662echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 7663echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 7664echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 7665echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 7666echo "PYTHON=$python" >> $config_host_mak 7667echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak 7668echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 7669echo "CC=$cc" >> $config_host_mak 7670if $iasl -h > /dev/null 2>&1; then 7671 echo "IASL=$iasl" >> $config_host_mak 7672fi 7673echo "HOST_CC=$host_cc" >> $config_host_mak 7674echo "CXX=$cxx" >> $config_host_mak 7675echo "OBJCC=$objcc" >> $config_host_mak 7676echo "AR=$ar" >> $config_host_mak 7677echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 7678echo "AS=$as" >> $config_host_mak 7679echo "CCAS=$ccas" >> $config_host_mak 7680echo "CPP=$cpp" >> $config_host_mak 7681echo "OBJCOPY=$objcopy" >> $config_host_mak 7682echo "LD=$ld" >> $config_host_mak 7683echo "RANLIB=$ranlib" >> $config_host_mak 7684echo "NM=$nm" >> $config_host_mak 7685echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 7686echo "WINDRES=$windres" >> $config_host_mak 7687echo "CFLAGS=$CFLAGS" >> $config_host_mak 7688echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 7689echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 7690echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 7691echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 7692if test "$sparse" = "yes" ; then 7693 echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak 7694 echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak 7695 echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak 7696 echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak 7697 echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 7698fi 7699echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 7700echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 7701echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 7702echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 7703echo "LIBS+=$LIBS" >> $config_host_mak 7704echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 7705echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 7706echo "EXESUF=$EXESUF" >> $config_host_mak 7707echo "DSOSUF=$DSOSUF" >> $config_host_mak 7708echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 7709echo "LIBS_QGA+=$libs_qga" >> $config_host_mak 7710echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 7711echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 7712echo "POD2MAN=$POD2MAN" >> $config_host_mak 7713if test "$gcov" = "yes" ; then 7714 echo "CONFIG_GCOV=y" >> $config_host_mak 7715 echo "GCOV=$gcov_tool" >> $config_host_mak 7716fi 7717 7718if test "$libudev" != "no"; then 7719 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 7720 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 7721fi 7722if test "$fuzzing" != "no"; then 7723 echo "CONFIG_FUZZ=y" >> $config_host_mak 7724 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak 7725 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak 7726fi 7727 7728if test "$edk2_blobs" = "yes" ; then 7729 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak 7730fi 7731 7732# use included Linux headers 7733if test "$linux" = "yes" ; then 7734 mkdir -p linux-headers 7735 case "$cpu" in 7736 i386|x86_64|x32) 7737 linux_arch=x86 7738 ;; 7739 ppc|ppc64|ppc64le) 7740 linux_arch=powerpc 7741 ;; 7742 s390x) 7743 linux_arch=s390 7744 ;; 7745 aarch64) 7746 linux_arch=arm64 7747 ;; 7748 mips64) 7749 linux_arch=mips 7750 ;; 7751 *) 7752 # For most CPUs the kernel architecture name and QEMU CPU name match. 7753 linux_arch="$cpu" 7754 ;; 7755 esac 7756 # For non-KVM architectures we will not have asm headers 7757 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 7758 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 7759 fi 7760fi 7761 7762for target in $target_list; do 7763target_dir="$target" 7764config_target_mak=$target_dir/config-target.mak 7765target_name=$(echo $target | cut -d '-' -f 1) 7766target_aligned_only="no" 7767case "$target_name" in 7768 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb) 7769 target_aligned_only="yes" 7770 ;; 7771esac 7772target_bigendian="no" 7773case "$target_name" in 7774 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 7775 target_bigendian="yes" 7776 ;; 7777esac 7778target_softmmu="no" 7779target_user_only="no" 7780target_linux_user="no" 7781target_bsd_user="no" 7782case "$target" in 7783 ${target_name}-softmmu) 7784 target_softmmu="yes" 7785 ;; 7786 ${target_name}-linux-user) 7787 target_user_only="yes" 7788 target_linux_user="yes" 7789 ;; 7790 ${target_name}-bsd-user) 7791 target_user_only="yes" 7792 target_bsd_user="yes" 7793 ;; 7794 *) 7795 error_exit "Target '$target' not recognised" 7796 exit 1 7797 ;; 7798esac 7799 7800mkdir -p $target_dir 7801echo "# Automatically generated by configure - do not modify" > $config_target_mak 7802 7803bflt="no" 7804mttcg="no" 7805interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7806gdb_xml_files="" 7807 7808TARGET_ARCH="$target_name" 7809TARGET_BASE_ARCH="" 7810TARGET_ABI_DIR="" 7811 7812case "$target_name" in 7813 i386) 7814 mttcg="yes" 7815 gdb_xml_files="i386-32bit.xml" 7816 ;; 7817 x86_64) 7818 TARGET_BASE_ARCH=i386 7819 mttcg="yes" 7820 gdb_xml_files="i386-64bit.xml" 7821 ;; 7822 alpha) 7823 mttcg="yes" 7824 ;; 7825 arm|armeb) 7826 TARGET_ARCH=arm 7827 bflt="yes" 7828 mttcg="yes" 7829 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7830 ;; 7831 aarch64|aarch64_be) 7832 TARGET_ARCH=aarch64 7833 TARGET_BASE_ARCH=arm 7834 bflt="yes" 7835 mttcg="yes" 7836 gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml" 7837 ;; 7838 cris) 7839 ;; 7840 hppa) 7841 mttcg="yes" 7842 ;; 7843 lm32) 7844 ;; 7845 m68k) 7846 bflt="yes" 7847 gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml" 7848 ;; 7849 microblaze|microblazeel) 7850 TARGET_ARCH=microblaze 7851 bflt="yes" 7852 echo "TARGET_ABI32=y" >> $config_target_mak 7853 ;; 7854 mips|mipsel) 7855 mttcg="yes" 7856 TARGET_ARCH=mips 7857 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 7858 ;; 7859 mipsn32|mipsn32el) 7860 mttcg="yes" 7861 TARGET_ARCH=mips64 7862 TARGET_BASE_ARCH=mips 7863 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 7864 echo "TARGET_ABI32=y" >> $config_target_mak 7865 ;; 7866 mips64|mips64el) 7867 mttcg="yes" 7868 TARGET_ARCH=mips64 7869 TARGET_BASE_ARCH=mips 7870 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 7871 ;; 7872 moxie) 7873 ;; 7874 nios2) 7875 ;; 7876 or1k) 7877 TARGET_ARCH=openrisc 7878 TARGET_BASE_ARCH=openrisc 7879 ;; 7880 ppc) 7881 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 7882 ;; 7883 ppc64) 7884 TARGET_BASE_ARCH=ppc 7885 TARGET_ABI_DIR=ppc 7886 mttcg=yes 7887 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7888 ;; 7889 ppc64le) 7890 TARGET_ARCH=ppc64 7891 TARGET_BASE_ARCH=ppc 7892 TARGET_ABI_DIR=ppc 7893 mttcg=yes 7894 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7895 ;; 7896 ppc64abi32) 7897 TARGET_ARCH=ppc64 7898 TARGET_BASE_ARCH=ppc 7899 TARGET_ABI_DIR=ppc 7900 echo "TARGET_ABI32=y" >> $config_target_mak 7901 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 7902 ;; 7903 riscv32) 7904 TARGET_BASE_ARCH=riscv 7905 TARGET_ABI_DIR=riscv 7906 mttcg=yes 7907 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml" 7908 ;; 7909 riscv64) 7910 TARGET_BASE_ARCH=riscv 7911 TARGET_ABI_DIR=riscv 7912 mttcg=yes 7913 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml" 7914 ;; 7915 sh4|sh4eb) 7916 TARGET_ARCH=sh4 7917 bflt="yes" 7918 ;; 7919 sparc) 7920 ;; 7921 sparc64) 7922 TARGET_BASE_ARCH=sparc 7923 ;; 7924 sparc32plus) 7925 TARGET_ARCH=sparc64 7926 TARGET_BASE_ARCH=sparc 7927 TARGET_ABI_DIR=sparc 7928 echo "TARGET_ABI32=y" >> $config_target_mak 7929 ;; 7930 s390x) 7931 mttcg=yes 7932 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 7933 ;; 7934 tilegx) 7935 ;; 7936 tricore) 7937 ;; 7938 unicore32) 7939 ;; 7940 xtensa|xtensaeb) 7941 TARGET_ARCH=xtensa 7942 bflt="yes" 7943 mttcg="yes" 7944 ;; 7945 *) 7946 error_exit "Unsupported target CPU" 7947 ;; 7948esac 7949# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 7950if [ "$TARGET_BASE_ARCH" = "" ]; then 7951 TARGET_BASE_ARCH=$TARGET_ARCH 7952fi 7953 7954symlink "$source_path/Makefile.target" "$target_dir/Makefile" 7955 7956upper() { 7957 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 7958} 7959 7960target_arch_name="$(upper $TARGET_ARCH)" 7961echo "TARGET_$target_arch_name=y" >> $config_target_mak 7962echo "TARGET_NAME=$target_name" >> $config_target_mak 7963echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 7964if [ "$TARGET_ABI_DIR" = "" ]; then 7965 TARGET_ABI_DIR=$TARGET_ARCH 7966fi 7967echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 7968if [ "$HOST_VARIANT_DIR" != "" ]; then 7969 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 7970fi 7971 7972if supported_xen_target $target; then 7973 echo "CONFIG_XEN=y" >> $config_target_mak 7974 echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak 7975 if test "$xen_pci_passthrough" = yes; then 7976 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 7977 fi 7978else 7979 echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak 7980fi 7981if supported_kvm_target $target; then 7982 echo "CONFIG_KVM=y" >> $config_target_mak 7983 echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak 7984else 7985 echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak 7986fi 7987if supported_hax_target $target; then 7988 echo "CONFIG_HAX=y" >> $config_target_mak 7989fi 7990if supported_hvf_target $target; then 7991 echo "CONFIG_HVF=y" >> $config_target_mak 7992fi 7993if supported_whpx_target $target; then 7994 echo "CONFIG_WHPX=y" >> $config_target_mak 7995fi 7996if test "$target_aligned_only" = "yes" ; then 7997 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak 7998fi 7999if test "$target_bigendian" = "yes" ; then 8000 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 8001fi 8002if test "$target_softmmu" = "yes" ; then 8003 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 8004 if test "$mttcg" = "yes" ; then 8005 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 8006 fi 8007fi 8008if test "$target_user_only" = "yes" ; then 8009 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 8010 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 8011fi 8012if test "$target_linux_user" = "yes" ; then 8013 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 8014fi 8015list="" 8016if test ! -z "$gdb_xml_files" ; then 8017 for x in $gdb_xml_files; do 8018 list="$list $source_path/gdb-xml/$x" 8019 done 8020 echo "TARGET_XML_FILES=$list" >> $config_target_mak 8021fi 8022 8023if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then 8024 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 8025fi 8026if test "$target_bsd_user" = "yes" ; then 8027 echo "CONFIG_BSD_USER=y" >> $config_target_mak 8028fi 8029 8030 8031# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets 8032 8033cflags="" 8034ldflags="" 8035 8036disas_config() { 8037 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 8038 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 8039} 8040 8041for i in $ARCH $TARGET_BASE_ARCH ; do 8042 case "$i" in 8043 alpha) 8044 disas_config "ALPHA" 8045 ;; 8046 aarch64) 8047 if test -n "${cxx}"; then 8048 disas_config "ARM_A64" 8049 fi 8050 ;; 8051 arm) 8052 disas_config "ARM" 8053 if test -n "${cxx}"; then 8054 disas_config "ARM_A64" 8055 fi 8056 ;; 8057 cris) 8058 disas_config "CRIS" 8059 ;; 8060 hppa) 8061 disas_config "HPPA" 8062 ;; 8063 i386|x86_64|x32) 8064 disas_config "I386" 8065 ;; 8066 lm32) 8067 disas_config "LM32" 8068 ;; 8069 m68k) 8070 disas_config "M68K" 8071 ;; 8072 microblaze*) 8073 disas_config "MICROBLAZE" 8074 ;; 8075 mips*) 8076 disas_config "MIPS" 8077 if test -n "${cxx}"; then 8078 disas_config "NANOMIPS" 8079 fi 8080 ;; 8081 moxie*) 8082 disas_config "MOXIE" 8083 ;; 8084 nios2) 8085 disas_config "NIOS2" 8086 ;; 8087 or1k) 8088 disas_config "OPENRISC" 8089 ;; 8090 ppc*) 8091 disas_config "PPC" 8092 ;; 8093 riscv*) 8094 disas_config "RISCV" 8095 ;; 8096 s390*) 8097 disas_config "S390" 8098 ;; 8099 sh4) 8100 disas_config "SH4" 8101 ;; 8102 sparc*) 8103 disas_config "SPARC" 8104 ;; 8105 xtensa*) 8106 disas_config "XTENSA" 8107 ;; 8108 esac 8109done 8110if test "$tcg_interpreter" = "yes" ; then 8111 disas_config "TCI" 8112fi 8113 8114case "$ARCH" in 8115alpha) 8116 # Ensure there's only a single GP 8117 cflags="-msmall-data $cflags" 8118;; 8119esac 8120 8121if test "$gprof" = "yes" ; then 8122 if test "$target_linux_user" = "yes" ; then 8123 cflags="-p $cflags" 8124 ldflags="-p $ldflags" 8125 fi 8126 if test "$target_softmmu" = "yes" ; then 8127 ldflags="-p $ldflags" 8128 echo "GPROF_CFLAGS=-p" >> $config_target_mak 8129 fi 8130fi 8131 8132if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then 8133 ldflags="$ldflags $textseg_ldflags" 8134fi 8135 8136# Newer kernels on s390 check for an S390_PGSTE program header and 8137# enable the pgste page table extensions in that case. This makes 8138# the vm.allocate_pgste sysctl unnecessary. We enable this program 8139# header if 8140# - we build on s390x 8141# - we build the system emulation for s390x (qemu-system-s390x) 8142# - KVM is enabled 8143# - the linker supports --s390-pgste 8144if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \ 8145 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then 8146 if ld_has --s390-pgste ; then 8147 ldflags="-Wl,--s390-pgste $ldflags" 8148 fi 8149fi 8150 8151echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak 8152echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 8153 8154done # for target in $targets 8155 8156echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak 8157echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak 8158 8159if [ "$fdt" = "git" ]; then 8160 echo "config-host.h: dtc/all" >> $config_host_mak 8161fi 8162if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 8163 echo "config-host.h: capstone/all" >> $config_host_mak 8164fi 8165if test -n "$LIBCAPSTONE"; then 8166 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 8167fi 8168 8169if test "$numa" = "yes"; then 8170 echo "CONFIG_NUMA=y" >> $config_host_mak 8171fi 8172 8173if test "$ccache_cpp2" = "yes"; then 8174 echo "export CCACHE_CPP2=y" >> $config_host_mak 8175fi 8176 8177# If we're using a separate build tree, set it up now. 8178# DIRS are directories which we simply mkdir in the build tree; 8179# LINKS are things to symlink back into the source tree 8180# (these can be both files and directories). 8181# Caution: do not add files or directories here using wildcards. This 8182# will result in problems later if a new file matching the wildcard is 8183# added to the source tree -- nothing will cause configure to be rerun 8184# so the build tree will be missing the link back to the new file, and 8185# tests might fail. Prefer to keep the relevant files in their own 8186# directory and symlink the directory instead. 8187DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 8188DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 8189DIRS="$DIRS docs docs/interop fsdev scsi" 8190DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 8191DIRS="$DIRS roms/seabios roms/vgabios" 8192LINKS="Makefile" 8193LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile" 8194LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile" 8195LINKS="$LINKS tests/plugin/Makefile" 8196LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps" 8197LINKS="$LINKS pc-bios/s390-ccw/Makefile" 8198LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile" 8199LINKS="$LINKS pc-bios/qemu-icon.bmp" 8200LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 8201LINKS="$LINKS tests/acceptance tests/data" 8202LINKS="$LINKS tests/qemu-iotests/check" 8203LINKS="$LINKS python" 8204for bios_file in \ 8205 $source_path/pc-bios/*.bin \ 8206 $source_path/pc-bios/*.lid \ 8207 $source_path/pc-bios/*.rom \ 8208 $source_path/pc-bios/*.dtb \ 8209 $source_path/pc-bios/*.img \ 8210 $source_path/pc-bios/openbios-* \ 8211 $source_path/pc-bios/u-boot.* \ 8212 $source_path/pc-bios/edk2-*.fd.bz2 \ 8213 $source_path/pc-bios/palcode-* 8214do 8215 LINKS="$LINKS pc-bios/$(basename $bios_file)" 8216done 8217mkdir -p $DIRS 8218for f in $LINKS ; do 8219 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 8220 symlink "$source_path/$f" "$f" 8221 fi 8222done 8223 8224(for i in $cross_cc_vars; do 8225 export $i 8226done 8227export target_list source_path use_containers 8228$source_path/tests/tcg/configure.sh) 8229 8230# temporary config to build submodules 8231for rom in seabios vgabios ; do 8232 config_mak=roms/$rom/config.mak 8233 echo "# Automatically generated by configure - do not modify" > $config_mak 8234 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 8235 echo "AS=$as" >> $config_mak 8236 echo "CCAS=$ccas" >> $config_mak 8237 echo "CC=$cc" >> $config_mak 8238 echo "BCC=bcc" >> $config_mak 8239 echo "CPP=$cpp" >> $config_mak 8240 echo "OBJCOPY=objcopy" >> $config_mak 8241 echo "IASL=$iasl" >> $config_mak 8242 echo "LD=$ld" >> $config_mak 8243 echo "RANLIB=$ranlib" >> $config_mak 8244done 8245 8246# set up qemu-iotests in this build directory 8247iotests_common_env="tests/qemu-iotests/common.env" 8248 8249echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 8250echo >> "$iotests_common_env" 8251echo "export PYTHON='$python'" >> "$iotests_common_env" 8252 8253# Save the configure command line for later reuse. 8254cat <<EOD >config.status 8255#!/bin/sh 8256# Generated by configure. 8257# Run this file to recreate the current configuration. 8258# Compiler output produced by configure, useful for debugging 8259# configure, is in config.log if it exists. 8260EOD 8261 8262preserve_env() { 8263 envname=$1 8264 8265 eval envval=\$$envname 8266 8267 if test -n "$envval" 8268 then 8269 echo "$envname='$envval'" >> config.status 8270 echo "export $envname" >> config.status 8271 else 8272 echo "unset $envname" >> config.status 8273 fi 8274} 8275 8276# Preserve various env variables that influence what 8277# features/build target configure will detect 8278preserve_env AR 8279preserve_env AS 8280preserve_env CC 8281preserve_env CPP 8282preserve_env CXX 8283preserve_env INSTALL 8284preserve_env LD 8285preserve_env LD_LIBRARY_PATH 8286preserve_env LIBTOOL 8287preserve_env MAKE 8288preserve_env NM 8289preserve_env OBJCOPY 8290preserve_env PATH 8291preserve_env PKG_CONFIG 8292preserve_env PKG_CONFIG_LIBDIR 8293preserve_env PKG_CONFIG_PATH 8294preserve_env PYTHON 8295preserve_env SDL2_CONFIG 8296preserve_env SMBD 8297preserve_env STRIP 8298preserve_env WINDRES 8299 8300printf "exec" >>config.status 8301printf " '%s'" "$0" "$@" >>config.status 8302echo ' "$@"' >>config.status 8303chmod +x config.status 8304 8305rm -r "$TMPDIR1" 8306