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