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