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