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