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