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