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