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