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