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 else 2744 2745 xen_libs="-lxenstore -lxenctrl -lxenguest" 2746 xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" 2747 2748 # First we test whether Xen headers and libraries are available. 2749 # If no, we are done and there is no Xen support. 2750 # If yes, more tests are run to detect the Xen version. 2751 2752 # Xen (any) 2753 cat > $TMPC <<EOF 2754#include <xenctrl.h> 2755int main(void) { 2756 return 0; 2757} 2758EOF 2759 if ! compile_prog "" "$xen_libs" ; then 2760 # Xen not found 2761 if test "$xen" = "yes" ; then 2762 feature_not_found "xen" "Install xen devel" 2763 fi 2764 xen=no 2765 2766 # Xen unstable 2767 elif 2768 cat > $TMPC <<EOF && 2769#undef XC_WANT_COMPAT_DEVICEMODEL_API 2770#define __XEN_TOOLS__ 2771#include <xendevicemodel.h> 2772#include <xenforeignmemory.h> 2773int main(void) { 2774 xendevicemodel_handle *xd; 2775 xenforeignmemory_handle *xfmem; 2776 2777 xd = xendevicemodel_open(0, 0); 2778 xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); 2779 2780 xfmem = xenforeignmemory_open(0, 0); 2781 xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); 2782 2783 return 0; 2784} 2785EOF 2786 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2787 then 2788 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2789 xen_ctrl_version=41100 2790 xen=yes 2791 elif 2792 cat > $TMPC <<EOF && 2793#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2794#include <xenforeignmemory.h> 2795#include <xentoolcore.h> 2796int main(void) { 2797 xenforeignmemory_handle *xfmem; 2798 2799 xfmem = xenforeignmemory_open(0, 0); 2800 xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); 2801 xentoolcore_restrict_all(0); 2802 2803 return 0; 2804} 2805EOF 2806 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" 2807 then 2808 xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" 2809 xen_ctrl_version=41000 2810 xen=yes 2811 elif 2812 cat > $TMPC <<EOF && 2813#undef XC_WANT_COMPAT_DEVICEMODEL_API 2814#define __XEN_TOOLS__ 2815#include <xendevicemodel.h> 2816int main(void) { 2817 xendevicemodel_handle *xd; 2818 2819 xd = xendevicemodel_open(0, 0); 2820 xendevicemodel_close(xd); 2821 2822 return 0; 2823} 2824EOF 2825 compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" 2826 then 2827 xen_stable_libs="-lxendevicemodel $xen_stable_libs" 2828 xen_ctrl_version=40900 2829 xen=yes 2830 elif 2831 cat > $TMPC <<EOF && 2832/* 2833 * If we have stable libs the we don't want the libxc compat 2834 * layers, regardless of what CFLAGS we may have been given. 2835 * 2836 * Also, check if xengnttab_grant_copy_segment_t is defined and 2837 * grant copy operation is implemented. 2838 */ 2839#undef XC_WANT_COMPAT_EVTCHN_API 2840#undef XC_WANT_COMPAT_GNTTAB_API 2841#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2842#include <xenctrl.h> 2843#include <xenstore.h> 2844#include <xenevtchn.h> 2845#include <xengnttab.h> 2846#include <xenforeignmemory.h> 2847#include <stdint.h> 2848#include <xen/hvm/hvm_info_table.h> 2849#if !defined(HVM_MAX_VCPUS) 2850# error HVM_MAX_VCPUS not defined 2851#endif 2852int main(void) { 2853 xc_interface *xc = NULL; 2854 xenforeignmemory_handle *xfmem; 2855 xenevtchn_handle *xe; 2856 xengnttab_handle *xg; 2857 xengnttab_grant_copy_segment_t* seg = NULL; 2858 2859 xs_daemon_open(); 2860 2861 xc = xc_interface_open(0, 0, 0); 2862 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2863 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2864 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2865 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2866 2867 xfmem = xenforeignmemory_open(0, 0); 2868 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2869 2870 xe = xenevtchn_open(0, 0); 2871 xenevtchn_fd(xe); 2872 2873 xg = xengnttab_open(0, 0); 2874 xengnttab_grant_copy(xg, 0, seg); 2875 2876 return 0; 2877} 2878EOF 2879 compile_prog "" "$xen_libs $xen_stable_libs" 2880 then 2881 xen_ctrl_version=40800 2882 xen=yes 2883 elif 2884 cat > $TMPC <<EOF && 2885/* 2886 * If we have stable libs the we don't want the libxc compat 2887 * layers, regardless of what CFLAGS we may have been given. 2888 */ 2889#undef XC_WANT_COMPAT_EVTCHN_API 2890#undef XC_WANT_COMPAT_GNTTAB_API 2891#undef XC_WANT_COMPAT_MAP_FOREIGN_API 2892#include <xenctrl.h> 2893#include <xenstore.h> 2894#include <xenevtchn.h> 2895#include <xengnttab.h> 2896#include <xenforeignmemory.h> 2897#include <stdint.h> 2898#include <xen/hvm/hvm_info_table.h> 2899#if !defined(HVM_MAX_VCPUS) 2900# error HVM_MAX_VCPUS not defined 2901#endif 2902int main(void) { 2903 xc_interface *xc = NULL; 2904 xenforeignmemory_handle *xfmem; 2905 xenevtchn_handle *xe; 2906 xengnttab_handle *xg; 2907 2908 xs_daemon_open(); 2909 2910 xc = xc_interface_open(0, 0, 0); 2911 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2912 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2913 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2914 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2915 2916 xfmem = xenforeignmemory_open(0, 0); 2917 xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); 2918 2919 xe = xenevtchn_open(0, 0); 2920 xenevtchn_fd(xe); 2921 2922 xg = xengnttab_open(0, 0); 2923 xengnttab_map_grant_ref(xg, 0, 0, 0); 2924 2925 return 0; 2926} 2927EOF 2928 compile_prog "" "$xen_libs $xen_stable_libs" 2929 then 2930 xen_ctrl_version=40701 2931 xen=yes 2932 2933 # Xen 4.6 2934 elif 2935 cat > $TMPC <<EOF && 2936#include <xenctrl.h> 2937#include <xenstore.h> 2938#include <stdint.h> 2939#include <xen/hvm/hvm_info_table.h> 2940#if !defined(HVM_MAX_VCPUS) 2941# error HVM_MAX_VCPUS not defined 2942#endif 2943int main(void) { 2944 xc_interface *xc; 2945 xs_daemon_open(); 2946 xc = xc_interface_open(0, 0, 0); 2947 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2948 xc_gnttab_open(NULL, 0); 2949 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2950 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2951 xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); 2952 xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); 2953 return 0; 2954} 2955EOF 2956 compile_prog "" "$xen_libs" 2957 then 2958 xen_ctrl_version=40600 2959 xen=yes 2960 2961 # Xen 4.5 2962 elif 2963 cat > $TMPC <<EOF && 2964#include <xenctrl.h> 2965#include <xenstore.h> 2966#include <stdint.h> 2967#include <xen/hvm/hvm_info_table.h> 2968#if !defined(HVM_MAX_VCPUS) 2969# error HVM_MAX_VCPUS not defined 2970#endif 2971int main(void) { 2972 xc_interface *xc; 2973 xs_daemon_open(); 2974 xc = xc_interface_open(0, 0, 0); 2975 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 2976 xc_gnttab_open(NULL, 0); 2977 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 2978 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 2979 xc_hvm_create_ioreq_server(xc, 0, 0, NULL); 2980 return 0; 2981} 2982EOF 2983 compile_prog "" "$xen_libs" 2984 then 2985 xen_ctrl_version=40500 2986 xen=yes 2987 2988 elif 2989 cat > $TMPC <<EOF && 2990#include <xenctrl.h> 2991#include <xenstore.h> 2992#include <stdint.h> 2993#include <xen/hvm/hvm_info_table.h> 2994#if !defined(HVM_MAX_VCPUS) 2995# error HVM_MAX_VCPUS not defined 2996#endif 2997int main(void) { 2998 xc_interface *xc; 2999 xs_daemon_open(); 3000 xc = xc_interface_open(0, 0, 0); 3001 xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); 3002 xc_gnttab_open(NULL, 0); 3003 xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); 3004 xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); 3005 return 0; 3006} 3007EOF 3008 compile_prog "" "$xen_libs" 3009 then 3010 xen_ctrl_version=40200 3011 xen=yes 3012 3013 else 3014 if test "$xen" = "yes" ; then 3015 feature_not_found "xen (unsupported version)" \ 3016 "Install a supported xen (xen 4.2 or newer)" 3017 fi 3018 xen=no 3019 fi 3020 3021 if test "$xen" = yes; then 3022 if test $xen_ctrl_version -ge 40701 ; then 3023 libs_softmmu="$xen_stable_libs $libs_softmmu" 3024 fi 3025 libs_softmmu="$xen_libs $libs_softmmu" 3026 fi 3027 fi 3028fi 3029 3030if test "$xen_pci_passthrough" != "no"; then 3031 if test "$xen" = "yes" && test "$linux" = "yes"; then 3032 xen_pci_passthrough=yes 3033 else 3034 if test "$xen_pci_passthrough" = "yes"; then 3035 error_exit "User requested feature Xen PCI Passthrough" \ 3036 " but this feature requires /sys from Linux" 3037 fi 3038 xen_pci_passthrough=no 3039 fi 3040fi 3041 3042########################################## 3043# Windows Hypervisor Platform accelerator (WHPX) check 3044if test "$whpx" != "no" ; then 3045 if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then 3046 whpx="yes" 3047 else 3048 if test "$whpx" = "yes"; then 3049 feature_not_found "WinHvPlatform" "WinHvEmulation is not installed" 3050 fi 3051 whpx="no" 3052 fi 3053fi 3054 3055########################################## 3056# Sparse probe 3057if test "$sparse" != "no" ; then 3058 if has sparse; then 3059 sparse=yes 3060 else 3061 if test "$sparse" = "yes" ; then 3062 feature_not_found "sparse" "Install sparse binary" 3063 fi 3064 sparse=no 3065 fi 3066fi 3067 3068########################################## 3069# X11 probe 3070if $pkg_config --exists "x11"; then 3071 have_x11=yes 3072 x11_cflags=$($pkg_config --cflags x11) 3073 x11_libs=$($pkg_config --libs x11) 3074fi 3075 3076########################################## 3077# GTK probe 3078 3079if test "$gtk" != "no"; then 3080 gtkpackage="gtk+-3.0" 3081 gtkx11package="gtk+-x11-3.0" 3082 gtkversion="3.22.0" 3083 if $pkg_config --exists "$gtkpackage >= $gtkversion"; then 3084 gtk_cflags=$($pkg_config --cflags $gtkpackage) 3085 gtk_libs=$($pkg_config --libs $gtkpackage) 3086 gtk_version=$($pkg_config --modversion $gtkpackage) 3087 if $pkg_config --exists "$gtkx11package >= $gtkversion"; then 3088 need_x11=yes 3089 gtk_cflags="$gtk_cflags $x11_cflags" 3090 gtk_libs="$gtk_libs $x11_libs" 3091 fi 3092 gtk="yes" 3093 elif test "$gtk" = "yes"; then 3094 feature_not_found "gtk" "Install gtk3-devel" 3095 else 3096 gtk="no" 3097 fi 3098fi 3099 3100 3101########################################## 3102# GNUTLS probe 3103 3104if test "$gnutls" != "no"; then 3105 pass="no" 3106 if $pkg_config --exists "gnutls >= 3.1.18"; then 3107 gnutls_cflags=$($pkg_config --cflags gnutls) 3108 gnutls_libs=$($pkg_config --libs gnutls) 3109 # Packaging for the static libraries is not always correct. 3110 # At least ubuntu 18.04 ships only shared libraries. 3111 write_c_skeleton 3112 if compile_prog "" "$gnutls_libs" ; then 3113 LIBS="$gnutls_libs $LIBS" 3114 QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags" 3115 pass="yes" 3116 fi 3117 fi 3118 if test "$pass" = "no" && test "$gnutls" = "yes"; then 3119 feature_not_found "gnutls" "Install gnutls devel >= 3.1.18" 3120 else 3121 gnutls="$pass" 3122 fi 3123fi 3124 3125 3126# If user didn't give a --disable/enable-gcrypt flag, 3127# then mark as disabled if user requested nettle 3128# explicitly 3129if test -z "$gcrypt" 3130then 3131 if test "$nettle" = "yes" 3132 then 3133 gcrypt="no" 3134 fi 3135fi 3136 3137# If user didn't give a --disable/enable-nettle flag, 3138# then mark as disabled if user requested gcrypt 3139# explicitly 3140if test -z "$nettle" 3141then 3142 if test "$gcrypt" = "yes" 3143 then 3144 nettle="no" 3145 fi 3146fi 3147 3148has_libgcrypt() { 3149 if ! has "libgcrypt-config" 3150 then 3151 return 1 3152 fi 3153 3154 if test -n "$cross_prefix" 3155 then 3156 host=$(libgcrypt-config --host) 3157 if test "$host-" != $cross_prefix 3158 then 3159 return 1 3160 fi 3161 fi 3162 3163 maj=`libgcrypt-config --version | awk -F . '{print $1}'` 3164 min=`libgcrypt-config --version | awk -F . '{print $2}'` 3165 3166 if test $maj != 1 || test $min -lt 5 3167 then 3168 return 1 3169 fi 3170 3171 return 0 3172} 3173 3174 3175if test "$nettle" != "no"; then 3176 pass="no" 3177 if $pkg_config --exists "nettle >= 2.7.1"; then 3178 nettle_cflags=$($pkg_config --cflags nettle) 3179 nettle_libs=$($pkg_config --libs nettle) 3180 nettle_version=$($pkg_config --modversion nettle) 3181 # Link test to make sure the given libraries work (e.g for static). 3182 write_c_skeleton 3183 if compile_prog "" "$nettle_libs" ; then 3184 LIBS="$nettle_libs $LIBS" 3185 QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags" 3186 if test -z "$gcrypt"; then 3187 gcrypt="no" 3188 fi 3189 pass="yes" 3190 fi 3191 fi 3192 if test "$pass" = "yes" 3193 then 3194 cat > $TMPC << EOF 3195#include <nettle/xts.h> 3196int main(void) { 3197 return 0; 3198} 3199EOF 3200 if compile_prog "$nettle_cflags" "$nettle_libs" ; then 3201 nettle_xts=yes 3202 qemu_private_xts=no 3203 fi 3204 fi 3205 if test "$pass" = "no" && test "$nettle" = "yes"; then 3206 feature_not_found "nettle" "Install nettle devel >= 2.7.1" 3207 else 3208 nettle="$pass" 3209 fi 3210fi 3211 3212if test "$gcrypt" != "no"; then 3213 pass="no" 3214 if has_libgcrypt; then 3215 gcrypt_cflags=$(libgcrypt-config --cflags) 3216 gcrypt_libs=$(libgcrypt-config --libs) 3217 # Debian has removed -lgpg-error from libgcrypt-config 3218 # as it "spreads unnecessary dependencies" which in 3219 # turn breaks static builds... 3220 if test "$static" = "yes" 3221 then 3222 gcrypt_libs="$gcrypt_libs -lgpg-error" 3223 fi 3224 3225 # Link test to make sure the given libraries work (e.g for static). 3226 write_c_skeleton 3227 if compile_prog "" "$gcrypt_libs" ; then 3228 LIBS="$gcrypt_libs $LIBS" 3229 QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags" 3230 pass="yes" 3231 fi 3232 fi 3233 if test "$pass" = "yes"; then 3234 gcrypt="yes" 3235 cat > $TMPC << EOF 3236#include <gcrypt.h> 3237int main(void) { 3238 gcry_mac_hd_t handle; 3239 gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, 3240 GCRY_MAC_FLAG_SECURE, NULL); 3241 return 0; 3242} 3243EOF 3244 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 3245 gcrypt_hmac=yes 3246 fi 3247 cat > $TMPC << EOF 3248#include <gcrypt.h> 3249int main(void) { 3250 gcry_cipher_hd_t handle; 3251 gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0); 3252 return 0; 3253} 3254EOF 3255 if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then 3256 gcrypt_xts=yes 3257 qemu_private_xts=no 3258 fi 3259 elif test "$gcrypt" = "yes"; then 3260 feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0" 3261 else 3262 gcrypt="no" 3263 fi 3264fi 3265 3266 3267if test "$gcrypt" = "yes" && test "$nettle" = "yes" 3268then 3269 error_exit "Only one of gcrypt & nettle can be enabled" 3270fi 3271 3272########################################## 3273# libtasn1 - only for the TLS creds/session test suite 3274 3275tasn1=yes 3276tasn1_cflags="" 3277tasn1_libs="" 3278if $pkg_config --exists "libtasn1"; then 3279 tasn1_cflags=$($pkg_config --cflags libtasn1) 3280 tasn1_libs=$($pkg_config --libs libtasn1) 3281else 3282 tasn1=no 3283fi 3284 3285 3286########################################## 3287# PAM probe 3288 3289if test "$auth_pam" != "no"; then 3290 cat > $TMPC <<EOF 3291#include <security/pam_appl.h> 3292#include <stdio.h> 3293int main(void) { 3294 const char *service_name = "qemu"; 3295 const char *user = "frank"; 3296 const struct pam_conv pam_conv = { 0 }; 3297 pam_handle_t *pamh = NULL; 3298 pam_start(service_name, user, &pam_conv, &pamh); 3299 return 0; 3300} 3301EOF 3302 if compile_prog "" "-lpam" ; then 3303 auth_pam=yes 3304 else 3305 if test "$auth_pam" = "yes"; then 3306 feature_not_found "PAM" "Install PAM development package" 3307 else 3308 auth_pam=no 3309 fi 3310 fi 3311fi 3312 3313########################################## 3314# getifaddrs (for tests/test-io-channel-socket ) 3315 3316have_ifaddrs_h=yes 3317if ! check_include "ifaddrs.h" ; then 3318 have_ifaddrs_h=no 3319fi 3320 3321######################################### 3322# libdrm check 3323have_drm_h=no 3324if check_include "libdrm/drm.h" ; then 3325 have_drm_h=yes 3326fi 3327 3328######################################### 3329# sys/signal.h check 3330have_sys_signal_h=no 3331if check_include "sys/signal.h" ; then 3332 have_sys_signal_h=yes 3333fi 3334 3335########################################## 3336# VTE probe 3337 3338if test "$vte" != "no"; then 3339 vteminversion="0.32.0" 3340 if $pkg_config --exists "vte-2.91"; then 3341 vtepackage="vte-2.91" 3342 else 3343 vtepackage="vte-2.90" 3344 fi 3345 if $pkg_config --exists "$vtepackage >= $vteminversion"; then 3346 vte_cflags=$($pkg_config --cflags $vtepackage) 3347 vte_libs=$($pkg_config --libs $vtepackage) 3348 vteversion=$($pkg_config --modversion $vtepackage) 3349 vte="yes" 3350 elif test "$vte" = "yes"; then 3351 feature_not_found "vte" "Install libvte-2.90/2.91 devel" 3352 else 3353 vte="no" 3354 fi 3355fi 3356 3357########################################## 3358# SDL probe 3359 3360# Look for sdl configuration program (pkg-config or sdl2-config). Try 3361# sdl2-config even without cross prefix, and favour pkg-config over sdl2-config. 3362 3363sdl_probe () 3364{ 3365 if $pkg_config sdl2 --exists; then 3366 sdlconfig="$pkg_config sdl2" 3367 sdlversion=$($sdlconfig --modversion 2>/dev/null) 3368 elif has "$sdl2_config"; then 3369 sdlconfig="$sdl2_config" 3370 sdlversion=$($sdlconfig --version) 3371 else 3372 if test "$sdl" = "yes" ; then 3373 feature_not_found "sdl" "Install SDL2-devel" 3374 fi 3375 sdl=no 3376 # no need to do the rest 3377 return 3378 fi 3379 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then 3380 echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2 3381 fi 3382 3383 cat > $TMPC << EOF 3384#include <SDL.h> 3385#undef main /* We don't want SDL to override our main() */ 3386int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } 3387EOF 3388 sdl_cflags=$($sdlconfig --cflags 2>/dev/null) 3389 sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug 3390 if test "$static" = "yes" ; then 3391 if $pkg_config sdl2 --exists; then 3392 sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null) 3393 else 3394 sdl_libs=$($sdlconfig --static-libs 2>/dev/null) 3395 fi 3396 else 3397 sdl_libs=$($sdlconfig --libs 2>/dev/null) 3398 fi 3399 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 3400 sdl=yes 3401 3402 # static link with sdl ? (note: sdl.pc's --static --libs is broken) 3403 if test "$sdl" = "yes" && test "$static" = "yes" ; then 3404 if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then 3405 sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)" 3406 sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)" 3407 fi 3408 if compile_prog "$sdl_cflags" "$sdl_libs" ; then 3409 : 3410 else 3411 sdl=no 3412 fi 3413 fi # static link 3414 else # sdl not found 3415 if test "$sdl" = "yes" ; then 3416 feature_not_found "sdl" "Install SDL2 devel" 3417 fi 3418 sdl=no 3419 fi # sdl compile test 3420} 3421 3422sdl_image_probe () 3423{ 3424 if test "$sdl_image" != "no" ; then 3425 if $pkg_config SDL2_image --exists; then 3426 if test "$static" = "yes"; then 3427 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null) 3428 else 3429 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null) 3430 fi 3431 sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null) 3432 sdl_image=yes 3433 3434 sdl_cflags="$sdl_cflags $sdl_image_cflags" 3435 sdl_libs="$sdl_libs $sdl_image_libs" 3436 else 3437 if test "$sdl_image" = "yes" ; then 3438 feature_not_found "sdl_image" "Install SDL Image devel" 3439 else 3440 sdl_image=no 3441 fi 3442 fi 3443 fi 3444} 3445 3446if test "$sdl" != "no" ; then 3447 sdl_probe 3448fi 3449 3450if test "$sdl" = "yes" ; then 3451 sdl_image_probe 3452else 3453 if test "$sdl_image" = "yes"; then 3454 echo "warning: SDL Image requested, but SDL is not available, disabling" 3455 fi 3456 sdl_image=no 3457fi 3458 3459if test "$sdl" = "yes" ; then 3460 cat > $TMPC <<EOF 3461#include <SDL.h> 3462#if defined(SDL_VIDEO_DRIVER_X11) 3463#include <X11/XKBlib.h> 3464#else 3465#error No x11 support 3466#endif 3467int main(void) { return 0; } 3468EOF 3469 if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then 3470 need_x11=yes 3471 sdl_cflags="$sdl_cflags $x11_cflags" 3472 sdl_libs="$sdl_libs $x11_libs" 3473 fi 3474fi 3475 3476########################################## 3477# RDMA needs OpenFabrics libraries 3478if test "$rdma" != "no" ; then 3479 cat > $TMPC <<EOF 3480#include <rdma/rdma_cma.h> 3481int main(void) { return 0; } 3482EOF 3483 rdma_libs="-lrdmacm -libverbs -libumad" 3484 if compile_prog "" "$rdma_libs" ; then 3485 rdma="yes" 3486 libs_softmmu="$libs_softmmu $rdma_libs" 3487 else 3488 if test "$rdma" = "yes" ; then 3489 error_exit \ 3490 " OpenFabrics librdmacm/libibverbs/libibumad not present." \ 3491 " Your options:" \ 3492 " (1) Fast: Install infiniband packages (devel) from your distro." \ 3493 " (2) Cleanest: Install libraries from www.openfabrics.org" \ 3494 " (3) Also: Install softiwarp if you don't have RDMA hardware" 3495 fi 3496 rdma="no" 3497 fi 3498fi 3499 3500########################################## 3501# PVRDMA detection 3502 3503cat > $TMPC <<EOF && 3504#include <sys/mman.h> 3505 3506int 3507main(void) 3508{ 3509 char buf = 0; 3510 void *addr = &buf; 3511 addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); 3512 3513 return 0; 3514} 3515EOF 3516 3517if test "$rdma" = "yes" ; then 3518 case "$pvrdma" in 3519 "") 3520 if compile_prog "" ""; then 3521 pvrdma="yes" 3522 else 3523 pvrdma="no" 3524 fi 3525 ;; 3526 "yes") 3527 if ! compile_prog "" ""; then 3528 error_exit "PVRDMA is not supported since mremap is not implemented" 3529 fi 3530 pvrdma="yes" 3531 ;; 3532 "no") 3533 pvrdma="no" 3534 ;; 3535 esac 3536else 3537 if test "$pvrdma" = "yes" ; then 3538 error_exit "PVRDMA requires rdma suppport" 3539 fi 3540 pvrdma="no" 3541fi 3542 3543# Let's see if enhanced reg_mr is supported 3544if test "$pvrdma" = "yes" ; then 3545 3546cat > $TMPC <<EOF && 3547#include <infiniband/verbs.h> 3548 3549int 3550main(void) 3551{ 3552 struct ibv_mr *mr; 3553 struct ibv_pd *pd = NULL; 3554 size_t length = 10; 3555 uint64_t iova = 0; 3556 int access = 0; 3557 void *addr = NULL; 3558 3559 mr = ibv_reg_mr_iova(pd, addr, length, iova, access); 3560 3561 ibv_dereg_mr(mr); 3562 3563 return 0; 3564} 3565EOF 3566 if ! compile_prog "" "-libverbs"; then 3567 QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" 3568 fi 3569fi 3570 3571########################################## 3572# VNC SASL detection 3573if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then 3574 cat > $TMPC <<EOF 3575#include <sasl/sasl.h> 3576#include <stdio.h> 3577int main(void) { sasl_server_init(NULL, "qemu"); return 0; } 3578EOF 3579 # Assuming Cyrus-SASL installed in /usr prefix 3580 # QEMU defines struct iovec in "qemu/osdep.h", 3581 # we don't want libsasl to redefine it in <sasl/sasl.h>. 3582 vnc_sasl_cflags="-DSTRUCT_IOVEC_DEFINED" 3583 vnc_sasl_libs="-lsasl2" 3584 if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then 3585 vnc_sasl=yes 3586 libs_softmmu="$vnc_sasl_libs $libs_softmmu" 3587 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags" 3588 else 3589 if test "$vnc_sasl" = "yes" ; then 3590 feature_not_found "vnc-sasl" "Install Cyrus SASL devel" 3591 fi 3592 vnc_sasl=no 3593 fi 3594fi 3595 3596########################################## 3597# VNC JPEG detection 3598if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then 3599cat > $TMPC <<EOF 3600#include <stdio.h> 3601#include <jpeglib.h> 3602int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; } 3603EOF 3604 vnc_jpeg_cflags="" 3605 vnc_jpeg_libs="-ljpeg" 3606 if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then 3607 vnc_jpeg=yes 3608 libs_softmmu="$vnc_jpeg_libs $libs_softmmu" 3609 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags" 3610 else 3611 if test "$vnc_jpeg" = "yes" ; then 3612 feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel" 3613 fi 3614 vnc_jpeg=no 3615 fi 3616fi 3617 3618########################################## 3619# VNC PNG detection 3620if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then 3621cat > $TMPC <<EOF 3622//#include <stdio.h> 3623#include <png.h> 3624#include <stddef.h> 3625int main(void) { 3626 png_structp png_ptr; 3627 png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 3628 return png_ptr != 0; 3629} 3630EOF 3631 if $pkg_config libpng --exists; then 3632 vnc_png_cflags=$($pkg_config libpng --cflags) 3633 vnc_png_libs=$($pkg_config libpng --libs) 3634 else 3635 vnc_png_cflags="" 3636 vnc_png_libs="-lpng" 3637 fi 3638 if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then 3639 vnc_png=yes 3640 libs_softmmu="$vnc_png_libs $libs_softmmu" 3641 QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags" 3642 else 3643 if test "$vnc_png" = "yes" ; then 3644 feature_not_found "vnc-png" "Install libpng devel" 3645 fi 3646 vnc_png=no 3647 fi 3648fi 3649 3650########################################## 3651# xkbcommon probe 3652if test "$xkbcommon" != "no" ; then 3653 if $pkg_config xkbcommon --exists; then 3654 xkbcommon_cflags=$($pkg_config xkbcommon --cflags) 3655 xkbcommon_libs=$($pkg_config xkbcommon --libs) 3656 xkbcommon=yes 3657 else 3658 if test "$xkbcommon" = "yes" ; then 3659 feature_not_found "xkbcommon" "Install libxkbcommon-devel" 3660 fi 3661 xkbcommon=no 3662 fi 3663fi 3664 3665 3666########################################## 3667# xfsctl() probe, used for file-posix.c 3668if test "$xfs" != "no" ; then 3669 cat > $TMPC << EOF 3670#include <stddef.h> /* NULL */ 3671#include <xfs/xfs.h> 3672int main(void) 3673{ 3674 xfsctl(NULL, 0, 0, NULL); 3675 return 0; 3676} 3677EOF 3678 if compile_prog "" "" ; then 3679 xfs="yes" 3680 else 3681 if test "$xfs" = "yes" ; then 3682 feature_not_found "xfs" "Instal xfsprogs/xfslibs devel" 3683 fi 3684 xfs=no 3685 fi 3686fi 3687 3688########################################## 3689# vde libraries probe 3690if test "$vde" != "no" ; then 3691 vde_libs="-lvdeplug" 3692 cat > $TMPC << EOF 3693#include <libvdeplug.h> 3694int main(void) 3695{ 3696 struct vde_open_args a = {0, 0, 0}; 3697 char s[] = ""; 3698 vde_open(s, s, &a); 3699 return 0; 3700} 3701EOF 3702 if compile_prog "" "$vde_libs" ; then 3703 vde=yes 3704 else 3705 if test "$vde" = "yes" ; then 3706 feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" 3707 fi 3708 vde=no 3709 fi 3710fi 3711 3712########################################## 3713# netmap support probe 3714# Apart from looking for netmap headers, we make sure that the host API version 3715# supports the netmap backend (>=11). The upper bound (15) is meant to simulate 3716# a minor/major version number. Minor new features will be marked with values up 3717# to 15, and if something happens that requires a change to the backend we will 3718# move above 15, submit the backend fixes and modify this two bounds. 3719if test "$netmap" != "no" ; then 3720 cat > $TMPC << EOF 3721#include <inttypes.h> 3722#include <net/if.h> 3723#include <net/netmap.h> 3724#include <net/netmap_user.h> 3725#if (NETMAP_API < 11) || (NETMAP_API > 15) 3726#error 3727#endif 3728int main(void) { return 0; } 3729EOF 3730 if compile_prog "" "" ; then 3731 netmap=yes 3732 else 3733 if test "$netmap" = "yes" ; then 3734 feature_not_found "netmap" 3735 fi 3736 netmap=no 3737 fi 3738fi 3739 3740########################################## 3741# libcap-ng library probe 3742if test "$cap_ng" != "no" ; then 3743 cap_libs="-lcap-ng" 3744 cat > $TMPC << EOF 3745#include <cap-ng.h> 3746int main(void) 3747{ 3748 capng_capability_to_name(CAPNG_EFFECTIVE); 3749 return 0; 3750} 3751EOF 3752 if compile_prog "" "$cap_libs" ; then 3753 cap_ng=yes 3754 libs_tools="$cap_libs $libs_tools" 3755 else 3756 if test "$cap_ng" = "yes" ; then 3757 feature_not_found "cap_ng" "Install libcap-ng devel" 3758 fi 3759 cap_ng=no 3760 fi 3761fi 3762 3763########################################## 3764# Sound support libraries probe 3765 3766audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') 3767for drv in $audio_drv_list; do 3768 case $drv in 3769 alsa | try-alsa) 3770 if $pkg_config alsa --exists; then 3771 alsa_libs=$($pkg_config alsa --libs) 3772 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 else 4745 if test "$numa" = "yes" ; then 4746 feature_not_found "numa" "install numactl devel" 4747 fi 4748 numa=no 4749 fi 4750fi 4751 4752if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then 4753 echo "ERROR: tcmalloc && jemalloc can't be used at the same time" 4754 exit 1 4755fi 4756 4757# Even if malloc_trim() is available, these non-libc memory allocators 4758# do not support it. 4759if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then 4760 if test "$malloc_trim" = "yes" ; then 4761 echo "Disabling malloc_trim with non-libc memory allocator" 4762 fi 4763 malloc_trim="no" 4764fi 4765 4766####################################### 4767# malloc_trim 4768 4769if test "$malloc_trim" != "no" ; then 4770 cat > $TMPC << EOF 4771#include <malloc.h> 4772int main(void) { malloc_trim(0); return 0; } 4773EOF 4774 if compile_prog "" "" ; then 4775 malloc_trim="yes" 4776 else 4777 malloc_trim="no" 4778 fi 4779fi 4780 4781########################################## 4782# tcmalloc probe 4783 4784if test "$tcmalloc" = "yes" ; then 4785 cat > $TMPC << EOF 4786#include <stdlib.h> 4787int main(void) { 4788 void *tmp = malloc(1); 4789 if (tmp != NULL) { 4790 return 0; 4791 } 4792 return 1; 4793} 4794EOF 4795 4796 if compile_prog "" "-ltcmalloc" ; then 4797 LIBS="-ltcmalloc $LIBS" 4798 else 4799 feature_not_found "tcmalloc" "install gperftools devel" 4800 fi 4801fi 4802 4803########################################## 4804# jemalloc probe 4805 4806if test "$jemalloc" = "yes" ; then 4807 cat > $TMPC << EOF 4808#include <stdlib.h> 4809int main(void) { 4810 void *tmp = malloc(1); 4811 if (tmp != NULL) { 4812 return 0; 4813 } 4814 return 1; 4815} 4816EOF 4817 4818 if compile_prog "" "-ljemalloc" ; then 4819 LIBS="-ljemalloc $LIBS" 4820 else 4821 feature_not_found "jemalloc" "install jemalloc devel" 4822 fi 4823fi 4824 4825########################################## 4826# signalfd probe 4827signalfd="no" 4828cat > $TMPC << EOF 4829#include <unistd.h> 4830#include <sys/syscall.h> 4831#include <signal.h> 4832int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } 4833EOF 4834 4835if compile_prog "" "" ; then 4836 signalfd=yes 4837fi 4838 4839# check if optreset global is declared by <getopt.h> 4840optreset="no" 4841cat > $TMPC << EOF 4842#include <getopt.h> 4843int main(void) { return optreset; } 4844EOF 4845 4846if compile_prog "" "" ; then 4847 optreset=yes 4848fi 4849 4850# check if eventfd is supported 4851eventfd=no 4852cat > $TMPC << EOF 4853#include <sys/eventfd.h> 4854 4855int main(void) 4856{ 4857 return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); 4858} 4859EOF 4860if compile_prog "" "" ; then 4861 eventfd=yes 4862fi 4863 4864# check if memfd is supported 4865memfd=no 4866cat > $TMPC << EOF 4867#include <sys/mman.h> 4868 4869int main(void) 4870{ 4871 return memfd_create("foo", MFD_ALLOW_SEALING); 4872} 4873EOF 4874if compile_prog "" "" ; then 4875 memfd=yes 4876fi 4877 4878# check for usbfs 4879have_usbfs=no 4880if test "$linux_user" = "yes"; then 4881 cat > $TMPC << EOF 4882#include <linux/usbdevice_fs.h> 4883 4884#ifndef USBDEVFS_GET_CAPABILITIES 4885#error "USBDEVFS_GET_CAPABILITIES undefined" 4886#endif 4887 4888#ifndef USBDEVFS_DISCONNECT_CLAIM 4889#error "USBDEVFS_DISCONNECT_CLAIM undefined" 4890#endif 4891 4892int main(void) 4893{ 4894 return 0; 4895} 4896EOF 4897 if compile_prog "" ""; then 4898 have_usbfs=yes 4899 fi 4900fi 4901 4902# check for fallocate 4903fallocate=no 4904cat > $TMPC << EOF 4905#include <fcntl.h> 4906 4907int main(void) 4908{ 4909 fallocate(0, 0, 0, 0); 4910 return 0; 4911} 4912EOF 4913if compile_prog "" "" ; then 4914 fallocate=yes 4915fi 4916 4917# check for fallocate hole punching 4918fallocate_punch_hole=no 4919cat > $TMPC << EOF 4920#include <fcntl.h> 4921#include <linux/falloc.h> 4922 4923int main(void) 4924{ 4925 fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); 4926 return 0; 4927} 4928EOF 4929if compile_prog "" "" ; then 4930 fallocate_punch_hole=yes 4931fi 4932 4933# check that fallocate supports range zeroing inside the file 4934fallocate_zero_range=no 4935cat > $TMPC << EOF 4936#include <fcntl.h> 4937#include <linux/falloc.h> 4938 4939int main(void) 4940{ 4941 fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); 4942 return 0; 4943} 4944EOF 4945if compile_prog "" "" ; then 4946 fallocate_zero_range=yes 4947fi 4948 4949# check for posix_fallocate 4950posix_fallocate=no 4951cat > $TMPC << EOF 4952#include <fcntl.h> 4953 4954int main(void) 4955{ 4956 posix_fallocate(0, 0, 0); 4957 return 0; 4958} 4959EOF 4960if compile_prog "" "" ; then 4961 posix_fallocate=yes 4962fi 4963 4964# check for sync_file_range 4965sync_file_range=no 4966cat > $TMPC << EOF 4967#include <fcntl.h> 4968 4969int main(void) 4970{ 4971 sync_file_range(0, 0, 0, 0); 4972 return 0; 4973} 4974EOF 4975if compile_prog "" "" ; then 4976 sync_file_range=yes 4977fi 4978 4979# check for linux/fiemap.h and FS_IOC_FIEMAP 4980fiemap=no 4981cat > $TMPC << EOF 4982#include <sys/ioctl.h> 4983#include <linux/fs.h> 4984#include <linux/fiemap.h> 4985 4986int main(void) 4987{ 4988 ioctl(0, FS_IOC_FIEMAP, 0); 4989 return 0; 4990} 4991EOF 4992if compile_prog "" "" ; then 4993 fiemap=yes 4994fi 4995 4996# check for dup3 4997dup3=no 4998cat > $TMPC << EOF 4999#include <unistd.h> 5000 5001int main(void) 5002{ 5003 dup3(0, 0, 0); 5004 return 0; 5005} 5006EOF 5007if compile_prog "" "" ; then 5008 dup3=yes 5009fi 5010 5011# check for ppoll support 5012ppoll=no 5013cat > $TMPC << EOF 5014#include <poll.h> 5015 5016int main(void) 5017{ 5018 struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; 5019 ppoll(&pfd, 1, 0, 0); 5020 return 0; 5021} 5022EOF 5023if compile_prog "" "" ; then 5024 ppoll=yes 5025fi 5026 5027# check for prctl(PR_SET_TIMERSLACK , ... ) support 5028prctl_pr_set_timerslack=no 5029cat > $TMPC << EOF 5030#include <sys/prctl.h> 5031 5032int main(void) 5033{ 5034 prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); 5035 return 0; 5036} 5037EOF 5038if compile_prog "" "" ; then 5039 prctl_pr_set_timerslack=yes 5040fi 5041 5042# check for epoll support 5043epoll=no 5044cat > $TMPC << EOF 5045#include <sys/epoll.h> 5046 5047int main(void) 5048{ 5049 epoll_create(0); 5050 return 0; 5051} 5052EOF 5053if compile_prog "" "" ; then 5054 epoll=yes 5055fi 5056 5057# epoll_create1 is a later addition 5058# so we must check separately for its presence 5059epoll_create1=no 5060cat > $TMPC << EOF 5061#include <sys/epoll.h> 5062 5063int main(void) 5064{ 5065 /* Note that we use epoll_create1 as a value, not as 5066 * a function being called. This is necessary so that on 5067 * old SPARC glibc versions where the function was present in 5068 * the library but not declared in the header file we will 5069 * fail the configure check. (Otherwise we will get a compiler 5070 * warning but not an error, and will proceed to fail the 5071 * qemu compile where we compile with -Werror.) 5072 */ 5073 return (int)(uintptr_t)&epoll_create1; 5074} 5075EOF 5076if compile_prog "" "" ; then 5077 epoll_create1=yes 5078fi 5079 5080# check for sendfile support 5081sendfile=no 5082cat > $TMPC << EOF 5083#include <sys/sendfile.h> 5084 5085int main(void) 5086{ 5087 return sendfile(0, 0, 0, 0); 5088} 5089EOF 5090if compile_prog "" "" ; then 5091 sendfile=yes 5092fi 5093 5094# check for timerfd support (glibc 2.8 and newer) 5095timerfd=no 5096cat > $TMPC << EOF 5097#include <sys/timerfd.h> 5098 5099int main(void) 5100{ 5101 return(timerfd_create(CLOCK_REALTIME, 0)); 5102} 5103EOF 5104if compile_prog "" "" ; then 5105 timerfd=yes 5106fi 5107 5108# check for setns and unshare support 5109setns=no 5110cat > $TMPC << EOF 5111#include <sched.h> 5112 5113int main(void) 5114{ 5115 int ret; 5116 ret = setns(0, 0); 5117 ret = unshare(0); 5118 return ret; 5119} 5120EOF 5121if compile_prog "" "" ; then 5122 setns=yes 5123fi 5124 5125# clock_adjtime probe 5126clock_adjtime=no 5127cat > $TMPC <<EOF 5128#include <time.h> 5129 5130int main(void) 5131{ 5132 return clock_adjtime(0, 0); 5133} 5134EOF 5135clock_adjtime=no 5136if compile_prog "" "" ; then 5137 clock_adjtime=yes 5138fi 5139 5140# syncfs probe 5141syncfs=no 5142cat > $TMPC <<EOF 5143#include <unistd.h> 5144 5145int main(void) 5146{ 5147 return syncfs(0); 5148} 5149EOF 5150syncfs=no 5151if compile_prog "" "" ; then 5152 syncfs=yes 5153fi 5154 5155# check for kcov support (kernel must be 4.4+, compiled with certain options) 5156kcov=no 5157if check_include sys/kcov.h ; then 5158 kcov=yes 5159fi 5160 5161# If we're making warnings fatal, apply this to Sphinx runs as well 5162sphinx_werror="" 5163if test "$werror" = "yes"; then 5164 sphinx_werror="-W" 5165fi 5166 5167# Check we have a new enough version of sphinx-build 5168has_sphinx_build() { 5169 # This is a bit awkward but works: create a trivial document and 5170 # try to run it with our configuration file (which enforces a 5171 # version requirement). This will fail if either 5172 # sphinx-build doesn't exist at all or if it is too old. 5173 mkdir -p "$TMPDIR1/sphinx" 5174 touch "$TMPDIR1/sphinx/index.rst" 5175 "$sphinx_build" $sphinx_werror -c "$source_path/docs" \ 5176 -b html "$TMPDIR1/sphinx" \ 5177 "$TMPDIR1/sphinx/out" >> config.log 2>&1 5178} 5179 5180# Check if tools are available to build documentation. 5181if test "$docs" != "no" ; then 5182 if has_sphinx_build; then 5183 sphinx_ok=yes 5184 else 5185 sphinx_ok=no 5186 fi 5187 if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then 5188 docs=yes 5189 else 5190 if test "$docs" = "yes" ; then 5191 if has $sphinx_build && test "$sphinx_ok" != "yes"; then 5192 echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2 5193 fi 5194 feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx" 5195 fi 5196 docs=no 5197 fi 5198fi 5199 5200# Search for bswap_32 function 5201byteswap_h=no 5202cat > $TMPC << EOF 5203#include <byteswap.h> 5204int main(void) { return bswap_32(0); } 5205EOF 5206if compile_prog "" "" ; then 5207 byteswap_h=yes 5208fi 5209 5210# Search for bswap32 function 5211bswap_h=no 5212cat > $TMPC << EOF 5213#include <sys/endian.h> 5214#include <sys/types.h> 5215#include <machine/bswap.h> 5216int main(void) { return bswap32(0); } 5217EOF 5218if compile_prog "" "" ; then 5219 bswap_h=yes 5220fi 5221 5222########################################## 5223# Do we have libiscsi >= 1.9.0 5224if test "$libiscsi" != "no" ; then 5225 if $pkg_config --atleast-version=1.9.0 libiscsi; then 5226 libiscsi="yes" 5227 libiscsi_cflags=$($pkg_config --cflags libiscsi) 5228 libiscsi_libs=$($pkg_config --libs libiscsi) 5229 else 5230 if test "$libiscsi" = "yes" ; then 5231 feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" 5232 fi 5233 libiscsi="no" 5234 fi 5235fi 5236 5237########################################## 5238# Do we need libm 5239cat > $TMPC << EOF 5240#include <math.h> 5241int main(int argc, char **argv) { return isnan(sin((double)argc)); } 5242EOF 5243if compile_prog "" "" ; then 5244 : 5245elif compile_prog "" "-lm" ; then 5246 LIBS="-lm $LIBS" 5247else 5248 error_exit "libm check failed" 5249fi 5250 5251########################################## 5252# Do we need librt 5253# uClibc provides 2 versions of clock_gettime(), one with realtime 5254# support and one without. This means that the clock_gettime() don't 5255# need -lrt. We still need it for timer_create() so we check for this 5256# function in addition. 5257cat > $TMPC <<EOF 5258#include <signal.h> 5259#include <time.h> 5260int main(void) { 5261 timer_create(CLOCK_REALTIME, NULL, NULL); 5262 return clock_gettime(CLOCK_REALTIME, NULL); 5263} 5264EOF 5265 5266if compile_prog "" "" ; then 5267 : 5268# we need pthread for static linking. use previous pthread test result 5269elif compile_prog "" "$pthread_lib -lrt" ; then 5270 LIBS="$LIBS -lrt" 5271fi 5272 5273# Check whether we need to link libutil for openpty() 5274cat > $TMPC << EOF 5275extern int openpty(int *am, int *as, char *name, void *termp, void *winp); 5276int main(void) { return openpty(0, 0, 0, 0, 0); } 5277EOF 5278 5279have_openpty="no" 5280if compile_prog "" "" ; then 5281 have_openpty="yes" 5282else 5283 if compile_prog "" "-lutil" ; then 5284 libs_softmmu="-lutil $libs_softmmu" 5285 libs_tools="-lutil $libs_tools" 5286 have_openpty="yes" 5287 fi 5288fi 5289 5290########################################## 5291# spice probe 5292if test "$spice" != "no" ; then 5293 cat > $TMPC << EOF 5294#include <spice.h> 5295int main(void) { spice_server_new(); return 0; } 5296EOF 5297 spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) 5298 spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) 5299 if $pkg_config --atleast-version=0.12.5 spice-server && \ 5300 $pkg_config --atleast-version=0.12.3 spice-protocol && \ 5301 compile_prog "$spice_cflags" "$spice_libs" ; then 5302 spice="yes" 5303 libs_softmmu="$libs_softmmu $spice_libs" 5304 QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" 5305 else 5306 if test "$spice" = "yes" ; then 5307 feature_not_found "spice" \ 5308 "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" 5309 fi 5310 spice="no" 5311 fi 5312fi 5313 5314# check for smartcard support 5315if test "$smartcard" != "no"; then 5316 if $pkg_config --atleast-version=2.5.1 libcacard; then 5317 libcacard_cflags=$($pkg_config --cflags libcacard) 5318 libcacard_libs=$($pkg_config --libs libcacard) 5319 smartcard="yes" 5320 else 5321 if test "$smartcard" = "yes"; then 5322 feature_not_found "smartcard" "Install libcacard devel" 5323 fi 5324 smartcard="no" 5325 fi 5326fi 5327 5328# check for libusb 5329if test "$libusb" != "no" ; then 5330 if $pkg_config --atleast-version=1.0.13 libusb-1.0; then 5331 libusb="yes" 5332 libusb_cflags=$($pkg_config --cflags libusb-1.0) 5333 libusb_libs=$($pkg_config --libs libusb-1.0) 5334 else 5335 if test "$libusb" = "yes"; then 5336 feature_not_found "libusb" "Install libusb devel >= 1.0.13" 5337 fi 5338 libusb="no" 5339 fi 5340fi 5341 5342# check for usbredirparser for usb network redirection support 5343if test "$usb_redir" != "no" ; then 5344 if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then 5345 usb_redir="yes" 5346 usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) 5347 usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) 5348 else 5349 if test "$usb_redir" = "yes"; then 5350 feature_not_found "usb-redir" "Install usbredir devel" 5351 fi 5352 usb_redir="no" 5353 fi 5354fi 5355 5356########################################## 5357# check if we have VSS SDK headers for win 5358 5359if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5360 test "$vss_win32_sdk" != "no" ; then 5361 case "$vss_win32_sdk" in 5362 "") vss_win32_include="-isystem $source_path" ;; 5363 *\ *) # The SDK is installed in "Program Files" by default, but we cannot 5364 # handle path with spaces. So we symlink the headers into ".sdk/vss". 5365 vss_win32_include="-isystem $source_path/.sdk/vss" 5366 symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" 5367 ;; 5368 *) vss_win32_include="-isystem $vss_win32_sdk" 5369 esac 5370 cat > $TMPC << EOF 5371#define __MIDL_user_allocate_free_DEFINED__ 5372#include <inc/win2003/vss.h> 5373int main(void) { return VSS_CTX_BACKUP; } 5374EOF 5375 if compile_prog "$vss_win32_include" "" ; then 5376 guest_agent_with_vss="yes" 5377 QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" 5378 libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" 5379 qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" 5380 else 5381 if test "$vss_win32_sdk" != "" ; then 5382 echo "ERROR: Please download and install Microsoft VSS SDK:" 5383 echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" 5384 echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" 5385 echo "ERROR: scripts/extract-vsssdk-headers setup.exe" 5386 echo "ERROR: The headers are extracted in the directory \`inc'." 5387 feature_not_found "VSS support" 5388 fi 5389 guest_agent_with_vss="no" 5390 fi 5391fi 5392 5393########################################## 5394# lookup Windows platform SDK (if not specified) 5395# The SDK is needed only to build .tlb (type library) file of guest agent 5396# VSS provider from the source. It is usually unnecessary because the 5397# pre-compiled .tlb file is included. 5398 5399if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ 5400 test "$guest_agent_with_vss" = "yes" ; then 5401 if test -z "$win_sdk"; then 5402 programfiles="$PROGRAMFILES" 5403 test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" 5404 if test -n "$programfiles"; then 5405 win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null 5406 else 5407 feature_not_found "Windows SDK" 5408 fi 5409 elif test "$win_sdk" = "no"; then 5410 win_sdk="" 5411 fi 5412fi 5413 5414########################################## 5415# check if mingw environment provides a recent ntddscsi.h 5416if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then 5417 cat > $TMPC << EOF 5418#include <windows.h> 5419#include <ntddscsi.h> 5420int main(void) { 5421#if !defined(IOCTL_SCSI_GET_ADDRESS) 5422#error Missing required ioctl definitions 5423#endif 5424 SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; 5425 return addr.Lun; 5426} 5427EOF 5428 if compile_prog "" "" ; then 5429 guest_agent_ntddscsi=yes 5430 libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" 5431 fi 5432fi 5433 5434########################################## 5435# virgl renderer probe 5436 5437if test "$virglrenderer" != "no" ; then 5438 cat > $TMPC << EOF 5439#include <virglrenderer.h> 5440int main(void) { virgl_renderer_poll(); return 0; } 5441EOF 5442 virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) 5443 virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) 5444 virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) 5445 if $pkg_config virglrenderer >/dev/null 2>&1 && \ 5446 compile_prog "$virgl_cflags" "$virgl_libs" ; then 5447 virglrenderer="yes" 5448 else 5449 if test "$virglrenderer" = "yes" ; then 5450 feature_not_found "virglrenderer" 5451 fi 5452 virglrenderer="no" 5453 fi 5454fi 5455 5456########################################## 5457# capstone 5458 5459case "$capstone" in 5460 "" | yes) 5461 if $pkg_config capstone; then 5462 capstone=system 5463 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 5464 capstone=git 5465 elif test -e "${source_path}/capstone/Makefile" ; then 5466 capstone=internal 5467 elif test -z "$capstone" ; then 5468 capstone=no 5469 else 5470 feature_not_found "capstone" "Install capstone devel or git submodule" 5471 fi 5472 ;; 5473 5474 system) 5475 if ! $pkg_config capstone; then 5476 feature_not_found "capstone" "Install capstone devel" 5477 fi 5478 ;; 5479esac 5480 5481case "$capstone" in 5482 git | internal) 5483 if test "$capstone" = git; then 5484 git_submodules="${git_submodules} capstone" 5485 fi 5486 mkdir -p capstone 5487 QEMU_CFLAGS="$QEMU_CFLAGS -I${source_path}/capstone/include" 5488 if test "$mingw32" = "yes"; then 5489 LIBCAPSTONE=capstone.lib 5490 else 5491 LIBCAPSTONE=libcapstone.a 5492 fi 5493 libs_cpu="-L$PWD/capstone -lcapstone $libs_cpu" 5494 ;; 5495 5496 system) 5497 QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" 5498 libs_cpu="$($pkg_config --libs capstone) $libs_cpu" 5499 ;; 5500 5501 no) 5502 ;; 5503 *) 5504 error_exit "Unknown state for capstone: $capstone" 5505 ;; 5506esac 5507 5508########################################## 5509# check if we have fdatasync 5510 5511fdatasync=no 5512cat > $TMPC << EOF 5513#include <unistd.h> 5514int main(void) { 5515#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 5516return fdatasync(0); 5517#else 5518#error Not supported 5519#endif 5520} 5521EOF 5522if compile_prog "" "" ; then 5523 fdatasync=yes 5524fi 5525 5526########################################## 5527# check if we have madvise 5528 5529madvise=no 5530cat > $TMPC << EOF 5531#include <sys/types.h> 5532#include <sys/mman.h> 5533#include <stddef.h> 5534int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } 5535EOF 5536if compile_prog "" "" ; then 5537 madvise=yes 5538fi 5539 5540########################################## 5541# check if we have posix_madvise 5542 5543posix_madvise=no 5544cat > $TMPC << EOF 5545#include <sys/mman.h> 5546#include <stddef.h> 5547int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } 5548EOF 5549if compile_prog "" "" ; then 5550 posix_madvise=yes 5551fi 5552 5553########################################## 5554# check if we have posix_memalign() 5555 5556posix_memalign=no 5557cat > $TMPC << EOF 5558#include <stdlib.h> 5559int main(void) { 5560 void *p; 5561 return posix_memalign(&p, 8, 8); 5562} 5563EOF 5564if compile_prog "" "" ; then 5565 posix_memalign=yes 5566fi 5567 5568########################################## 5569# check if we have posix_syslog 5570 5571posix_syslog=no 5572cat > $TMPC << EOF 5573#include <syslog.h> 5574int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } 5575EOF 5576if compile_prog "" "" ; then 5577 posix_syslog=yes 5578fi 5579 5580########################################## 5581# check if we have sem_timedwait 5582 5583sem_timedwait=no 5584cat > $TMPC << EOF 5585#include <semaphore.h> 5586int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } 5587EOF 5588if compile_prog "" "" ; then 5589 sem_timedwait=yes 5590fi 5591 5592########################################## 5593# check if we have strchrnul 5594 5595strchrnul=no 5596cat > $TMPC << EOF 5597#include <string.h> 5598int main(void); 5599// Use a haystack that the compiler shouldn't be able to constant fold 5600char *haystack = (char*)&main; 5601int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } 5602EOF 5603if compile_prog "" "" ; then 5604 strchrnul=yes 5605fi 5606 5607######################################### 5608# check if we have st_atim 5609 5610st_atim=no 5611cat > $TMPC << EOF 5612#include <sys/stat.h> 5613#include <stddef.h> 5614int main(void) { return offsetof(struct stat, st_atim); } 5615EOF 5616if compile_prog "" "" ; then 5617 st_atim=yes 5618fi 5619 5620########################################## 5621# check if trace backend exists 5622 5623$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null 5624if test "$?" -ne 0 ; then 5625 error_exit "invalid trace backends" \ 5626 "Please choose supported trace backends." 5627fi 5628 5629########################################## 5630# For 'ust' backend, test if ust headers are present 5631if have_backend "ust"; then 5632 cat > $TMPC << EOF 5633#include <lttng/tracepoint.h> 5634int main(void) { return 0; } 5635EOF 5636 if compile_prog "" "-Wl,--no-as-needed -ldl" ; then 5637 if $pkg_config lttng-ust --exists; then 5638 lttng_ust_libs=$($pkg_config --libs lttng-ust) 5639 else 5640 lttng_ust_libs="-llttng-ust -ldl" 5641 fi 5642 if $pkg_config liburcu-bp --exists; then 5643 urcu_bp_libs=$($pkg_config --libs liburcu-bp) 5644 else 5645 urcu_bp_libs="-lurcu-bp" 5646 fi 5647 5648 LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" 5649 else 5650 error_exit "Trace backend 'ust' missing lttng-ust header files" 5651 fi 5652fi 5653 5654########################################## 5655# For 'dtrace' backend, test if 'dtrace' command is present 5656if have_backend "dtrace"; then 5657 if ! has 'dtrace' ; then 5658 error_exit "dtrace command is not found in PATH $PATH" 5659 fi 5660 trace_backend_stap="no" 5661 if has 'stap' ; then 5662 trace_backend_stap="yes" 5663 fi 5664fi 5665 5666########################################## 5667# check and set a backend for coroutine 5668 5669# We prefer ucontext, but it's not always possible. The fallback 5670# is sigcontext. On Windows the only valid backend is the Windows 5671# specific one. 5672 5673ucontext_works=no 5674if test "$darwin" != "yes"; then 5675 cat > $TMPC << EOF 5676#include <ucontext.h> 5677#ifdef __stub_makecontext 5678#error Ignoring glibc stub makecontext which will always fail 5679#endif 5680int main(void) { makecontext(0, 0, 0); return 0; } 5681EOF 5682 if compile_prog "" "" ; then 5683 ucontext_works=yes 5684 fi 5685fi 5686 5687if test "$coroutine" = ""; then 5688 if test "$mingw32" = "yes"; then 5689 coroutine=win32 5690 elif test "$ucontext_works" = "yes"; then 5691 coroutine=ucontext 5692 else 5693 coroutine=sigaltstack 5694 fi 5695else 5696 case $coroutine in 5697 windows) 5698 if test "$mingw32" != "yes"; then 5699 error_exit "'windows' coroutine backend only valid for Windows" 5700 fi 5701 # Unfortunately the user visible backend name doesn't match the 5702 # coroutine-*.c filename for this case, so we have to adjust it here. 5703 coroutine=win32 5704 ;; 5705 ucontext) 5706 if test "$ucontext_works" != "yes"; then 5707 feature_not_found "ucontext" 5708 fi 5709 ;; 5710 sigaltstack) 5711 if test "$mingw32" = "yes"; then 5712 error_exit "only the 'windows' coroutine backend is valid for Windows" 5713 fi 5714 ;; 5715 *) 5716 error_exit "unknown coroutine backend $coroutine" 5717 ;; 5718 esac 5719fi 5720 5721if test "$coroutine_pool" = ""; then 5722 coroutine_pool=yes 5723fi 5724 5725if test "$debug_stack_usage" = "yes"; then 5726 if test "$coroutine_pool" = "yes"; then 5727 echo "WARN: disabling coroutine pool for stack usage debugging" 5728 coroutine_pool=no 5729 fi 5730fi 5731 5732################################################## 5733# SafeStack 5734 5735 5736if test "$safe_stack" = "yes"; then 5737cat > $TMPC << EOF 5738int main(int argc, char *argv[]) 5739{ 5740#if ! __has_feature(safe_stack) 5741#error SafeStack Disabled 5742#endif 5743 return 0; 5744} 5745EOF 5746 flag="-fsanitize=safe-stack" 5747 # Check that safe-stack is supported and enabled. 5748 if compile_prog "-Werror $flag" "$flag"; then 5749 # Flag needed both at compilation and at linking 5750 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5751 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5752 else 5753 error_exit "SafeStack not supported by your compiler" 5754 fi 5755 if test "$coroutine" != "ucontext"; then 5756 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5757 fi 5758else 5759cat > $TMPC << EOF 5760int main(int argc, char *argv[]) 5761{ 5762#if defined(__has_feature) 5763#if __has_feature(safe_stack) 5764#error SafeStack Enabled 5765#endif 5766#endif 5767 return 0; 5768} 5769EOF 5770if test "$safe_stack" = "no"; then 5771 # Make sure that safe-stack is disabled 5772 if ! compile_prog "-Werror" ""; then 5773 # SafeStack was already enabled, try to explicitly remove the feature 5774 flag="-fno-sanitize=safe-stack" 5775 if ! compile_prog "-Werror $flag" "$flag"; then 5776 error_exit "Configure cannot disable SafeStack" 5777 fi 5778 QEMU_CFLAGS="$QEMU_CFLAGS $flag" 5779 QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" 5780 fi 5781else # "$safe_stack" = "" 5782 # Set safe_stack to yes or no based on pre-existing flags 5783 if compile_prog "-Werror" ""; then 5784 safe_stack="no" 5785 else 5786 safe_stack="yes" 5787 if test "$coroutine" != "ucontext"; then 5788 error_exit "SafeStack is only supported by the coroutine backend ucontext" 5789 fi 5790 fi 5791fi 5792fi 5793 5794########################################## 5795# check if we have open_by_handle_at 5796 5797open_by_handle_at=no 5798cat > $TMPC << EOF 5799#include <fcntl.h> 5800#if !defined(AT_EMPTY_PATH) 5801# error missing definition 5802#else 5803int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } 5804#endif 5805EOF 5806if compile_prog "" "" ; then 5807 open_by_handle_at=yes 5808fi 5809 5810######################################## 5811# check if we have linux/magic.h 5812 5813linux_magic_h=no 5814cat > $TMPC << EOF 5815#include <linux/magic.h> 5816int main(void) { 5817 return 0; 5818} 5819EOF 5820if compile_prog "" "" ; then 5821 linux_magic_h=yes 5822fi 5823 5824######################################## 5825# check if we have valgrind/valgrind.h 5826 5827valgrind_h=no 5828cat > $TMPC << EOF 5829#include <valgrind/valgrind.h> 5830int main(void) { 5831 return 0; 5832} 5833EOF 5834if compile_prog "" "" ; then 5835 valgrind_h=yes 5836fi 5837 5838######################################## 5839# check if environ is declared 5840 5841has_environ=no 5842cat > $TMPC << EOF 5843#include <unistd.h> 5844int main(void) { 5845 environ = 0; 5846 return 0; 5847} 5848EOF 5849if compile_prog "" "" ; then 5850 has_environ=yes 5851fi 5852 5853######################################## 5854# check if cpuid.h is usable. 5855 5856cat > $TMPC << EOF 5857#include <cpuid.h> 5858int main(void) { 5859 unsigned a, b, c, d; 5860 int max = __get_cpuid_max(0, 0); 5861 5862 if (max >= 1) { 5863 __cpuid(1, a, b, c, d); 5864 } 5865 5866 if (max >= 7) { 5867 __cpuid_count(7, 0, a, b, c, d); 5868 } 5869 5870 return 0; 5871} 5872EOF 5873if compile_prog "" "" ; then 5874 cpuid_h=yes 5875fi 5876 5877########################################## 5878# avx2 optimization requirement check 5879# 5880# There is no point enabling this if cpuid.h is not usable, 5881# since we won't be able to select the new routines. 5882 5883if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then 5884 cat > $TMPC << EOF 5885#pragma GCC push_options 5886#pragma GCC target("avx2") 5887#include <cpuid.h> 5888#include <immintrin.h> 5889static int bar(void *a) { 5890 __m256i x = *(__m256i *)a; 5891 return _mm256_testz_si256(x, x); 5892} 5893int main(int argc, char *argv[]) { return bar(argv[0]); } 5894EOF 5895 if compile_object "" ; then 5896 avx2_opt="yes" 5897 else 5898 avx2_opt="no" 5899 fi 5900fi 5901 5902########################################## 5903# avx512f optimization requirement check 5904# 5905# There is no point enabling this if cpuid.h is not usable, 5906# since we won't be able to select the new routines. 5907# by default, it is turned off. 5908# if user explicitly want to enable it, check environment 5909 5910if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then 5911 cat > $TMPC << EOF 5912#pragma GCC push_options 5913#pragma GCC target("avx512f") 5914#include <cpuid.h> 5915#include <immintrin.h> 5916static int bar(void *a) { 5917 __m512i x = *(__m512i *)a; 5918 return _mm512_test_epi64_mask(x, x); 5919} 5920int main(int argc, char *argv[]) 5921{ 5922 return bar(argv[0]); 5923} 5924EOF 5925 if ! compile_object "" ; then 5926 avx512f_opt="no" 5927 fi 5928else 5929 avx512f_opt="no" 5930fi 5931 5932######################################## 5933# check if __[u]int128_t is usable. 5934 5935int128=no 5936cat > $TMPC << EOF 5937__int128_t a; 5938__uint128_t b; 5939int main (void) { 5940 a = a + b; 5941 b = a * b; 5942 a = a * a; 5943 return 0; 5944} 5945EOF 5946if compile_prog "" "" ; then 5947 int128=yes 5948fi 5949 5950######################################### 5951# See if 128-bit atomic operations are supported. 5952 5953atomic128=no 5954if test "$int128" = "yes"; then 5955 cat > $TMPC << EOF 5956int main(void) 5957{ 5958 unsigned __int128 x = 0, y = 0; 5959 y = __atomic_load_16(&x, 0); 5960 __atomic_store_16(&x, y, 0); 5961 __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); 5962 return 0; 5963} 5964EOF 5965 if compile_prog "" "" ; then 5966 atomic128=yes 5967 fi 5968fi 5969 5970cmpxchg128=no 5971if test "$int128" = yes && test "$atomic128" = no; then 5972 cat > $TMPC << EOF 5973int main(void) 5974{ 5975 unsigned __int128 x = 0, y = 0; 5976 __sync_val_compare_and_swap_16(&x, y, x); 5977 return 0; 5978} 5979EOF 5980 if compile_prog "" "" ; then 5981 cmpxchg128=yes 5982 fi 5983fi 5984 5985######################################### 5986# See if 64-bit atomic operations are supported. 5987# Note that without __atomic builtins, we can only 5988# assume atomic loads/stores max at pointer size. 5989 5990cat > $TMPC << EOF 5991#include <stdint.h> 5992int main(void) 5993{ 5994 uint64_t x = 0, y = 0; 5995#ifdef __ATOMIC_RELAXED 5996 y = __atomic_load_8(&x, 0); 5997 __atomic_store_8(&x, y, 0); 5998 __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); 5999 __atomic_exchange_8(&x, y, 0); 6000 __atomic_fetch_add_8(&x, y, 0); 6001#else 6002 typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; 6003 __sync_lock_test_and_set(&x, y); 6004 __sync_val_compare_and_swap(&x, y, 0); 6005 __sync_fetch_and_add(&x, y); 6006#endif 6007 return 0; 6008} 6009EOF 6010if compile_prog "" "" ; then 6011 atomic64=yes 6012fi 6013 6014######################################### 6015# See if --dynamic-list is supported by the linker 6016ld_dynamic_list="no" 6017if test "$static" = "no" ; then 6018 cat > $TMPTXT <<EOF 6019{ 6020 foo; 6021}; 6022EOF 6023 6024 cat > $TMPC <<EOF 6025#include <stdio.h> 6026void foo(void); 6027 6028void foo(void) 6029{ 6030 printf("foo\n"); 6031} 6032 6033int main(void) 6034{ 6035 foo(); 6036 return 0; 6037} 6038EOF 6039 6040 if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then 6041 ld_dynamic_list="yes" 6042 fi 6043fi 6044 6045######################################### 6046# See if -exported_symbols_list is supported by the linker 6047 6048ld_exported_symbols_list="no" 6049if test "$static" = "no" ; then 6050 cat > $TMPTXT <<EOF 6051 _foo 6052EOF 6053 6054 if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then 6055 ld_exported_symbols_list="yes" 6056 fi 6057fi 6058 6059if test "$plugins" = "yes" && 6060 test "$ld_dynamic_list" = "no" && 6061 test "$ld_exported_symbols_list" = "no" ; then 6062 error_exit \ 6063 "Plugin support requires dynamic linking and specifying a set of symbols " \ 6064 "that are exported to plugins. Unfortunately your linker doesn't " \ 6065 "support the flag (--dynamic-list or -exported_symbols_list) used " \ 6066 "for this purpose. You can't build with --static." 6067fi 6068 6069######################################## 6070# See if __attribute__((alias)) is supported. 6071# This false for Xcode 9, but has been remedied for Xcode 10. 6072# Unfortunately, travis uses Xcode 9 by default. 6073 6074attralias=no 6075cat > $TMPC << EOF 6076int x = 1; 6077extern const int y __attribute__((alias("x"))); 6078int main(void) { return 0; } 6079EOF 6080if compile_prog "" "" ; then 6081 attralias=yes 6082fi 6083 6084######################################## 6085# check if getauxval is available. 6086 6087getauxval=no 6088cat > $TMPC << EOF 6089#include <sys/auxv.h> 6090int main(void) { 6091 return getauxval(AT_HWCAP) == 0; 6092} 6093EOF 6094if compile_prog "" "" ; then 6095 getauxval=yes 6096fi 6097 6098######################################## 6099# check if ccache is interfering with 6100# semantic analysis of macros 6101 6102unset CCACHE_CPP2 6103ccache_cpp2=no 6104cat > $TMPC << EOF 6105static const int Z = 1; 6106#define fn() ({ Z; }) 6107#define TAUT(X) ((X) == Z) 6108#define PAREN(X, Y) (X == Y) 6109#define ID(X) (X) 6110int main(int argc, char *argv[]) 6111{ 6112 int x = 0, y = 0; 6113 x = ID(x); 6114 x = fn(); 6115 fn(); 6116 if (PAREN(x, y)) return 0; 6117 if (TAUT(Z)) return 0; 6118 return 0; 6119} 6120EOF 6121 6122if ! compile_object "-Werror"; then 6123 ccache_cpp2=yes 6124fi 6125 6126################################################# 6127# clang does not support glibc + FORTIFY_SOURCE. 6128 6129if test "$fortify_source" != "no"; then 6130 if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then 6131 fortify_source="no"; 6132 elif test -n "$cxx" && has $cxx && 6133 echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then 6134 fortify_source="no"; 6135 else 6136 fortify_source="yes" 6137 fi 6138fi 6139 6140############################################### 6141# Check if copy_file_range is provided by glibc 6142have_copy_file_range=no 6143cat > $TMPC << EOF 6144#include <unistd.h> 6145int main(void) { 6146 copy_file_range(0, NULL, 0, NULL, 0, 0); 6147 return 0; 6148} 6149EOF 6150if compile_prog "" "" ; then 6151 have_copy_file_range=yes 6152fi 6153 6154########################################## 6155# check if struct fsxattr is available via linux/fs.h 6156 6157have_fsxattr=no 6158cat > $TMPC << EOF 6159#include <linux/fs.h> 6160struct fsxattr foo; 6161int main(void) { 6162 return 0; 6163} 6164EOF 6165if compile_prog "" "" ; then 6166 have_fsxattr=yes 6167fi 6168 6169########################################## 6170# check for usable membarrier system call 6171if test "$membarrier" = "yes"; then 6172 have_membarrier=no 6173 if test "$mingw32" = "yes" ; then 6174 have_membarrier=yes 6175 elif test "$linux" = "yes" ; then 6176 cat > $TMPC << EOF 6177 #include <linux/membarrier.h> 6178 #include <sys/syscall.h> 6179 #include <unistd.h> 6180 #include <stdlib.h> 6181 int main(void) { 6182 syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); 6183 syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); 6184 exit(0); 6185 } 6186EOF 6187 if compile_prog "" "" ; then 6188 have_membarrier=yes 6189 fi 6190 fi 6191 if test "$have_membarrier" = "no"; then 6192 feature_not_found "membarrier" "membarrier system call not available" 6193 fi 6194else 6195 # Do not enable it by default even for Mingw32, because it doesn't 6196 # work on Wine. 6197 membarrier=no 6198fi 6199 6200########################################## 6201# check if rtnetlink.h exists and is useful 6202have_rtnetlink=no 6203cat > $TMPC << EOF 6204#include <linux/rtnetlink.h> 6205int main(void) { 6206 return IFLA_PROTO_DOWN; 6207} 6208EOF 6209if compile_prog "" "" ; then 6210 have_rtnetlink=yes 6211fi 6212 6213########################################## 6214# check for usable AF_VSOCK environment 6215have_af_vsock=no 6216cat > $TMPC << EOF 6217#include <errno.h> 6218#include <sys/types.h> 6219#include <sys/socket.h> 6220#if !defined(AF_VSOCK) 6221# error missing AF_VSOCK flag 6222#endif 6223#include <linux/vm_sockets.h> 6224int main(void) { 6225 int sock, ret; 6226 struct sockaddr_vm svm; 6227 socklen_t len = sizeof(svm); 6228 sock = socket(AF_VSOCK, SOCK_STREAM, 0); 6229 ret = getpeername(sock, (struct sockaddr *)&svm, &len); 6230 if ((ret == -1) && (errno == ENOTCONN)) { 6231 return 0; 6232 } 6233 return -1; 6234} 6235EOF 6236if compile_prog "" "" ; then 6237 have_af_vsock=yes 6238fi 6239 6240########################################## 6241# check for usable AF_ALG environment 6242have_afalg=no 6243cat > $TMPC << EOF 6244#include <errno.h> 6245#include <sys/types.h> 6246#include <sys/socket.h> 6247#include <linux/if_alg.h> 6248int main(void) { 6249 int sock; 6250 sock = socket(AF_ALG, SOCK_SEQPACKET, 0); 6251 return sock; 6252} 6253EOF 6254if compile_prog "" "" ; then 6255 have_afalg=yes 6256fi 6257if test "$crypto_afalg" = "yes" 6258then 6259 if test "$have_afalg" != "yes" 6260 then 6261 error_exit "AF_ALG requested but could not be detected" 6262 fi 6263fi 6264 6265 6266################################################# 6267# Check to see if we have the Hypervisor framework 6268if [ "$darwin" = "yes" ] ; then 6269 cat > $TMPC << EOF 6270#include <Hypervisor/hv.h> 6271int main() { return 0;} 6272EOF 6273 if ! compile_object ""; then 6274 hvf='no' 6275 else 6276 hvf='yes' 6277 QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS" 6278 fi 6279fi 6280 6281################################################# 6282# Sparc implicitly links with --relax, which is 6283# incompatible with -r, so --no-relax should be 6284# given. It does no harm to give it on other 6285# platforms too. 6286 6287# Note: the prototype is needed since QEMU_CFLAGS 6288# contains -Wmissing-prototypes 6289cat > $TMPC << EOF 6290extern int foo(void); 6291int foo(void) { return 0; } 6292EOF 6293if ! compile_object ""; then 6294 error_exit "Failed to compile object file for LD_REL_FLAGS test" 6295fi 6296for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do 6297 if do_cc -nostdlib $i -o $TMPMO $TMPO; then 6298 LD_REL_FLAGS=$i 6299 break 6300 fi 6301done 6302if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then 6303 feature_not_found "modules" "Cannot find how to build relocatable objects" 6304fi 6305 6306########################################## 6307# check for sysmacros.h 6308 6309have_sysmacros=no 6310cat > $TMPC << EOF 6311#include <sys/sysmacros.h> 6312int main(void) { 6313 return makedev(0, 0); 6314} 6315EOF 6316if compile_prog "" "" ; then 6317 have_sysmacros=yes 6318fi 6319 6320########################################## 6321# check for _Static_assert() 6322 6323have_static_assert=no 6324cat > $TMPC << EOF 6325_Static_assert(1, "success"); 6326int main(void) { 6327 return 0; 6328} 6329EOF 6330if compile_prog "" "" ; then 6331 have_static_assert=yes 6332fi 6333 6334########################################## 6335# check for utmpx.h, it is missing e.g. on OpenBSD 6336 6337have_utmpx=no 6338cat > $TMPC << EOF 6339#include <utmpx.h> 6340struct utmpx user_info; 6341int main(void) { 6342 return 0; 6343} 6344EOF 6345if compile_prog "" "" ; then 6346 have_utmpx=yes 6347fi 6348 6349########################################## 6350# check for getrandom() 6351 6352have_getrandom=no 6353cat > $TMPC << EOF 6354#include <sys/random.h> 6355int main(void) { 6356 return getrandom(0, 0, GRND_NONBLOCK); 6357} 6358EOF 6359if compile_prog "" "" ; then 6360 have_getrandom=yes 6361fi 6362 6363########################################## 6364# checks for sanitizers 6365 6366have_asan=no 6367have_ubsan=no 6368have_asan_iface_h=no 6369have_asan_iface_fiber=no 6370 6371if test "$sanitizers" = "yes" ; then 6372 write_c_skeleton 6373 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then 6374 have_asan=yes 6375 fi 6376 6377 # we could use a simple skeleton for flags checks, but this also 6378 # detect the static linking issue of ubsan, see also: 6379 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 6380 cat > $TMPC << EOF 6381#include <stdlib.h> 6382int main(void) { 6383 void *tmp = malloc(10); 6384 if (tmp != NULL) { 6385 return *(int *)(tmp + 2); 6386 } 6387 return 1; 6388} 6389EOF 6390 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then 6391 have_ubsan=yes 6392 fi 6393 6394 if check_include "sanitizer/asan_interface.h" ; then 6395 have_asan_iface_h=yes 6396 fi 6397 6398 cat > $TMPC << EOF 6399#include <sanitizer/asan_interface.h> 6400int main(void) { 6401 __sanitizer_start_switch_fiber(0, 0, 0); 6402 return 0; 6403} 6404EOF 6405 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then 6406 have_asan_iface_fiber=yes 6407 fi 6408fi 6409 6410########################################## 6411# checks for fuzzer 6412if test "$fuzzing" = "yes" ; then 6413 write_c_fuzzer_skeleton 6414 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then 6415 have_fuzzer=yes 6416 fi 6417fi 6418 6419# Thread sanitizer is, for now, much noisier than the other sanitizers; 6420# keep it separate until that is not the case. 6421if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then 6422 error_exit "TSAN is not supported with other sanitiziers." 6423fi 6424have_tsan=no 6425have_tsan_iface_fiber=no 6426if test "$tsan" = "yes" ; then 6427 write_c_skeleton 6428 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6429 have_tsan=yes 6430 fi 6431 cat > $TMPC << EOF 6432#include <sanitizer/tsan_interface.h> 6433int main(void) { 6434 __tsan_create_fiber(0); 6435 return 0; 6436} 6437EOF 6438 if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then 6439 have_tsan_iface_fiber=yes 6440 fi 6441fi 6442 6443########################################## 6444# check for libpmem 6445 6446if test "$libpmem" != "no"; then 6447 if $pkg_config --exists "libpmem"; then 6448 libpmem="yes" 6449 libpmem_libs=$($pkg_config --libs libpmem) 6450 libpmem_cflags=$($pkg_config --cflags libpmem) 6451 libs_softmmu="$libs_softmmu $libpmem_libs" 6452 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" 6453 else 6454 if test "$libpmem" = "yes" ; then 6455 feature_not_found "libpmem" "Install nvml or pmdk" 6456 fi 6457 libpmem="no" 6458 fi 6459fi 6460 6461########################################## 6462# check for libdaxctl 6463 6464if test "$libdaxctl" != "no"; then 6465 if $pkg_config --atleast-version=57 "libdaxctl"; then 6466 libdaxctl="yes" 6467 libdaxctl_libs=$($pkg_config --libs libdaxctl) 6468 libdaxctl_cflags=$($pkg_config --cflags libdaxctl) 6469 libs_softmmu="$libs_softmmu $libdaxctl_libs" 6470 QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags" 6471 else 6472 if test "$libdaxctl" = "yes" ; then 6473 feature_not_found "libdaxctl" "Install libdaxctl" 6474 fi 6475 libdaxctl="no" 6476 fi 6477fi 6478 6479########################################## 6480# check for slirp 6481 6482# slirp is only required when building softmmu targets 6483if test -z "$slirp" -a "$softmmu" != "yes" ; then 6484 slirp="no" 6485fi 6486 6487case "$slirp" in 6488 "" | yes) 6489 if $pkg_config slirp; then 6490 slirp=system 6491 elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then 6492 slirp=git 6493 elif test -e "${source_path}/slirp/Makefile" ; then 6494 slirp=internal 6495 elif test -z "$slirp" ; then 6496 slirp=no 6497 else 6498 feature_not_found "slirp" "Install slirp devel or git submodule" 6499 fi 6500 ;; 6501 6502 system) 6503 if ! $pkg_config slirp; then 6504 feature_not_found "slirp" "Install slirp devel" 6505 fi 6506 ;; 6507esac 6508 6509case "$slirp" in 6510 git | internal) 6511 if test "$slirp" = git; then 6512 git_submodules="${git_submodules} slirp" 6513 fi 6514 mkdir -p slirp 6515 slirp_cflags="-I${source_path}/slirp/src -I$PWD/slirp/src" 6516 slirp_libs="-L$PWD/slirp -lslirp" 6517 if test "$mingw32" = "yes" ; then 6518 slirp_libs="$slirp_libs -lws2_32 -liphlpapi" 6519 fi 6520 ;; 6521 6522 system) 6523 slirp_version=$($pkg_config --modversion slirp 2>/dev/null) 6524 slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) 6525 slirp_libs=$($pkg_config --libs slirp 2>/dev/null) 6526 ;; 6527 6528 no) 6529 ;; 6530 *) 6531 error_exit "Unknown state for slirp: $slirp" 6532 ;; 6533esac 6534 6535########################################## 6536# check for usable __NR_keyctl syscall 6537 6538if test "$linux" = "yes" ; then 6539 6540 have_keyring=no 6541 cat > $TMPC << EOF 6542#include <errno.h> 6543#include <asm/unistd.h> 6544#include <linux/keyctl.h> 6545#include <unistd.h> 6546int main(void) { 6547 return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); 6548} 6549EOF 6550 if compile_prog "" "" ; then 6551 have_keyring=yes 6552 fi 6553fi 6554if test "$secret_keyring" != "no" 6555then 6556 if test "$have_keyring" = "yes" 6557 then 6558 secret_keyring=yes 6559 else 6560 if test "$secret_keyring" = "yes" 6561 then 6562 error_exit "syscall __NR_keyctl requested, \ 6563but not implemented on your system" 6564 else 6565 secret_keyring=no 6566 fi 6567 fi 6568fi 6569 6570########################################## 6571# check for usable keyutils.h 6572 6573if test "$linux" = "yes" ; then 6574 6575 have_keyutils=no 6576 cat > $TMPC << EOF 6577#include <errno.h> 6578#include <asm/unistd.h> 6579#include <unistd.h> 6580#include <sys/types.h> 6581#include <keyutils.h> 6582int main(void) { 6583 return request_key("user", NULL, NULL, 0); 6584} 6585EOF 6586 if compile_prog "" "-lkeyutils"; then 6587 have_keyutils=yes 6588 fi 6589fi 6590 6591 6592########################################## 6593# End of CC checks 6594# After here, no more $cc or $ld runs 6595 6596write_c_skeleton 6597 6598if test "$gcov" = "yes" ; then 6599 : 6600elif test "$fortify_source" = "yes" ; then 6601 QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" 6602 debug=no 6603fi 6604if test "$debug_info" = "yes"; then 6605 CFLAGS="-g $CFLAGS" 6606 LDFLAGS="-g $LDFLAGS" 6607fi 6608if test "$debug" = "no"; then 6609 CFLAGS="-O2 $CFLAGS" 6610fi 6611 6612case "$ARCH" in 6613alpha) 6614 # Ensure there's only a single GP 6615 QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" 6616;; 6617esac 6618 6619if test "$gprof" = "yes" ; then 6620 QEMU_CFLAGS="-p $QEMU_CFLAGS" 6621 QEMU_LDFLAGS="-p $QEMU_LDFLAGS" 6622fi 6623 6624if test "$have_asan" = "yes"; then 6625 QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" 6626 QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" 6627 if test "$have_asan_iface_h" = "no" ; then 6628 echo "ASAN build enabled, but ASAN header missing." \ 6629 "Without code annotation, the report may be inferior." 6630 elif test "$have_asan_iface_fiber" = "no" ; then 6631 echo "ASAN build enabled, but ASAN header is too old." \ 6632 "Without code annotation, the report may be inferior." 6633 fi 6634fi 6635if test "$have_tsan" = "yes" ; then 6636 if test "$have_tsan_iface_fiber" = "yes" ; then 6637 QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" 6638 QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" 6639 else 6640 error_exit "Cannot enable TSAN due to missing fiber annotation interface." 6641 fi 6642elif test "$tsan" = "yes" ; then 6643 error_exit "Cannot enable TSAN due to missing sanitize thread interface." 6644fi 6645if test "$have_ubsan" = "yes"; then 6646 QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" 6647 QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" 6648fi 6649 6650########################################## 6651# Do we have libnfs 6652if test "$libnfs" != "no" ; then 6653 if $pkg_config --atleast-version=1.9.3 libnfs; then 6654 libnfs="yes" 6655 libnfs_libs=$($pkg_config --libs libnfs) 6656 else 6657 if test "$libnfs" = "yes" ; then 6658 feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" 6659 fi 6660 libnfs="no" 6661 fi 6662fi 6663 6664########################################## 6665# Do we have libudev 6666if test "$libudev" != "no" ; then 6667 if $pkg_config libudev && test "$static" != "yes"; then 6668 libudev="yes" 6669 libudev_libs=$($pkg_config --libs libudev) 6670 else 6671 libudev="no" 6672 fi 6673fi 6674 6675# Now we've finished running tests it's OK to add -Werror to the compiler flags 6676if test "$werror" = "yes"; then 6677 QEMU_CFLAGS="-Werror $QEMU_CFLAGS" 6678fi 6679 6680# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. 6681if test "$solaris" = "no" && test "$tsan" = "no"; then 6682 if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then 6683 QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" 6684 fi 6685fi 6686 6687# test if pod2man has --utf8 option 6688if pod2man --help | grep -q utf8; then 6689 POD2MAN="pod2man --utf8" 6690else 6691 POD2MAN="pod2man" 6692fi 6693 6694# Use ASLR, no-SEH and DEP if available 6695if test "$mingw32" = "yes" ; then 6696 for flag in --dynamicbase --no-seh --nxcompat; do 6697 if ld_has $flag ; then 6698 QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" 6699 fi 6700 done 6701fi 6702 6703# Disable OpenBSD W^X if available 6704if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then 6705 cat > $TMPC <<EOF 6706 int main(void) { return 0; } 6707EOF 6708 wx_ldflags="-Wl,-z,wxneeded" 6709 if compile_prog "" "$wx_ldflags"; then 6710 QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags" 6711 fi 6712fi 6713 6714qemu_confdir=$sysconfdir$confsuffix 6715qemu_moddir=$libdir$confsuffix 6716qemu_datadir=$datadir$confsuffix 6717qemu_localedir="$datadir/locale" 6718qemu_icondir="$datadir/icons" 6719qemu_desktopdir="$datadir/applications" 6720 6721# We can only support ivshmem if we have eventfd 6722if [ "$eventfd" = "yes" ]; then 6723 ivshmem=yes 6724fi 6725 6726if test "$softmmu" = yes ; then 6727 if test "$linux" = yes; then 6728 if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then 6729 virtfs=yes 6730 else 6731 if test "$virtfs" = yes; then 6732 error_exit "VirtFS requires libcap-ng devel and libattr devel" 6733 fi 6734 virtfs=no 6735 fi 6736 if test "$mpath" != no && test "$mpathpersist" = yes ; then 6737 mpath=yes 6738 else 6739 if test "$mpath" = yes; then 6740 error_exit "Multipath requires libmpathpersist devel" 6741 fi 6742 mpath=no 6743 fi 6744 else 6745 if test "$virtfs" = yes; then 6746 error_exit "VirtFS is supported only on Linux" 6747 fi 6748 virtfs=no 6749 if test "$mpath" = yes; then 6750 error_exit "Multipath is supported only on Linux" 6751 fi 6752 mpath=no 6753 fi 6754fi 6755 6756# Probe for guest agent support/options 6757 6758if [ "$guest_agent" != "no" ]; then 6759 if [ "$softmmu" = no -a "$want_tools" = no ] ; then 6760 guest_agent=no 6761 elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then 6762 guest_agent=yes 6763 elif [ "$guest_agent" != yes ]; then 6764 guest_agent=no 6765 else 6766 error_exit "Guest agent is not supported on this platform" 6767 fi 6768fi 6769 6770# Guest agent Window MSI package 6771 6772if test "$guest_agent" != yes; then 6773 if test "$guest_agent_msi" = yes; then 6774 error_exit "MSI guest agent package requires guest agent enabled" 6775 fi 6776 guest_agent_msi=no 6777elif test "$mingw32" != "yes"; then 6778 if test "$guest_agent_msi" = "yes"; then 6779 error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" 6780 fi 6781 guest_agent_msi=no 6782elif ! has wixl; then 6783 if test "$guest_agent_msi" = "yes"; then 6784 error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" 6785 fi 6786 guest_agent_msi=no 6787else 6788 # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't 6789 # disabled explicitly 6790 if test "$guest_agent_msi" != "no"; then 6791 guest_agent_msi=yes 6792 fi 6793fi 6794 6795if test "$guest_agent_msi" = "yes"; then 6796 if test "$guest_agent_with_vss" = "yes"; then 6797 QEMU_GA_MSI_WITH_VSS="-D InstallVss" 6798 fi 6799 6800 if test "$QEMU_GA_MANUFACTURER" = ""; then 6801 QEMU_GA_MANUFACTURER=QEMU 6802 fi 6803 6804 if test "$QEMU_GA_DISTRO" = ""; then 6805 QEMU_GA_DISTRO=Linux 6806 fi 6807 6808 if test "$QEMU_GA_VERSION" = ""; then 6809 QEMU_GA_VERSION=$(cat $source_path/VERSION) 6810 fi 6811 6812 QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" 6813 6814 case "$cpu" in 6815 x86_64) 6816 QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" 6817 ;; 6818 i386) 6819 QEMU_GA_MSI_ARCH="-D Arch=32" 6820 ;; 6821 *) 6822 error_exit "CPU $cpu not supported for building installation package" 6823 ;; 6824 esac 6825fi 6826 6827# Mac OS X ships with a broken assembler 6828roms= 6829if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ 6830 test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ 6831 test "$softmmu" = yes ; then 6832 # Different host OS linkers have different ideas about the name of the ELF 6833 # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd 6834 # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. 6835 for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do 6836 if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then 6837 ld_i386_emulation="$emu" 6838 roms="optionrom" 6839 break 6840 fi 6841 done 6842fi 6843 6844# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 6845if test "$cpu" = "s390x" ; then 6846 write_c_skeleton 6847 if compile_prog "-march=z900" ""; then 6848 roms="$roms s390-ccw" 6849 # SLOF is required for building the s390-ccw firmware on s390x, 6850 # since it is using the libnet code from SLOF for network booting. 6851 if test -e "${source_path}/.git" ; then 6852 git_submodules="${git_submodules} roms/SLOF" 6853 fi 6854 fi 6855fi 6856 6857# Check that the C++ compiler exists and works with the C compiler. 6858# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. 6859if has $cxx; then 6860 cat > $TMPC <<EOF 6861int c_function(void); 6862int main(void) { return c_function(); } 6863EOF 6864 6865 compile_object 6866 6867 cat > $TMPCXX <<EOF 6868extern "C" { 6869 int c_function(void); 6870} 6871int c_function(void) { return 42; } 6872EOF 6873 6874 update_cxxflags 6875 6876 if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then 6877 # C++ compiler $cxx works ok with C compiler $cc 6878 : 6879 else 6880 echo "C++ compiler $cxx does not work with C compiler $cc" 6881 echo "Disabling C++ specific optional code" 6882 cxx= 6883 fi 6884else 6885 echo "No C++ compiler available; disabling C++ specific optional code" 6886 cxx= 6887fi 6888 6889echo_version() { 6890 if test "$1" = "yes" ; then 6891 echo "($2)" 6892 fi 6893} 6894 6895# prepend pixman and ftd flags after all config tests are done 6896QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS" 6897QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" 6898libs_softmmu="$pixman_libs $libs_softmmu" 6899 6900config_host_mak="config-host.mak" 6901 6902echo "# Automatically generated by configure - do not modify" >config-all-disas.mak 6903 6904echo "# Automatically generated by configure - do not modify" > $config_host_mak 6905echo >> $config_host_mak 6906 6907echo all: >> $config_host_mak 6908echo "prefix=$prefix" >> $config_host_mak 6909echo "bindir=$bindir" >> $config_host_mak 6910echo "libdir=$libdir" >> $config_host_mak 6911echo "libexecdir=$libexecdir" >> $config_host_mak 6912echo "includedir=$includedir" >> $config_host_mak 6913echo "mandir=$mandir" >> $config_host_mak 6914echo "sysconfdir=$sysconfdir" >> $config_host_mak 6915echo "qemu_confdir=$qemu_confdir" >> $config_host_mak 6916echo "qemu_datadir=$qemu_datadir" >> $config_host_mak 6917echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak 6918echo "qemu_docdir=$qemu_docdir" >> $config_host_mak 6919echo "qemu_moddir=$qemu_moddir" >> $config_host_mak 6920if test "$mingw32" = "no" ; then 6921 echo "qemu_localstatedir=$local_statedir" >> $config_host_mak 6922fi 6923echo "qemu_helperdir=$libexecdir" >> $config_host_mak 6924echo "qemu_localedir=$qemu_localedir" >> $config_host_mak 6925echo "qemu_icondir=$qemu_icondir" >> $config_host_mak 6926echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak 6927echo "libs_cpu=$libs_cpu" >> $config_host_mak 6928echo "libs_softmmu=$libs_softmmu" >> $config_host_mak 6929echo "GIT=$git" >> $config_host_mak 6930echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak 6931echo "GIT_UPDATE=$git_update" >> $config_host_mak 6932 6933echo "ARCH=$ARCH" >> $config_host_mak 6934 6935echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 6936echo "GLIB_LDFLAGS=$glib_ldflags" >> $config_host_mak 6937 6938if test "$default_devices" = "yes" ; then 6939 echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak 6940else 6941 echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak 6942fi 6943if test "$debug_tcg" = "yes" ; then 6944 echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak 6945fi 6946if test "$strip_opt" = "yes" ; then 6947 echo "STRIP=${strip}" >> $config_host_mak 6948fi 6949if test "$bigendian" = "yes" ; then 6950 echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak 6951fi 6952if test "$mingw32" = "yes" ; then 6953 echo "CONFIG_WIN32=y" >> $config_host_mak 6954 rc_version=$(cat $source_path/VERSION) 6955 version_major=${rc_version%%.*} 6956 rc_version=${rc_version#*.} 6957 version_minor=${rc_version%%.*} 6958 rc_version=${rc_version#*.} 6959 version_subminor=${rc_version%%.*} 6960 version_micro=0 6961 echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6962 echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak 6963 if test "$guest_agent_with_vss" = "yes" ; then 6964 echo "CONFIG_QGA_VSS=y" >> $config_host_mak 6965 echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak 6966 echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak 6967 fi 6968 if test "$guest_agent_ntddscsi" = "yes" ; then 6969 echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak 6970 fi 6971 if test "$guest_agent_msi" = "yes"; then 6972 echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak 6973 echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak 6974 echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak 6975 echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak 6976 echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak 6977 echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak 6978 echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak 6979 fi 6980else 6981 echo "CONFIG_POSIX=y" >> $config_host_mak 6982fi 6983 6984if test "$linux" = "yes" ; then 6985 echo "CONFIG_LINUX=y" >> $config_host_mak 6986fi 6987 6988if test "$darwin" = "yes" ; then 6989 echo "CONFIG_DARWIN=y" >> $config_host_mak 6990fi 6991 6992if test "$solaris" = "yes" ; then 6993 echo "CONFIG_SOLARIS=y" >> $config_host_mak 6994fi 6995if test "$haiku" = "yes" ; then 6996 echo "CONFIG_HAIKU=y" >> $config_host_mak 6997fi 6998if test "$static" = "yes" ; then 6999 echo "CONFIG_STATIC=y" >> $config_host_mak 7000fi 7001if test "$profiler" = "yes" ; then 7002 echo "CONFIG_PROFILER=y" >> $config_host_mak 7003fi 7004if test "$want_tools" = "yes" ; then 7005 echo "CONFIG_TOOLS=y" >> $config_host_mak 7006fi 7007if test "$guest_agent" = "yes" ; then 7008 echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak 7009fi 7010if test "$slirp" != "no"; then 7011 echo "CONFIG_SLIRP=y" >> $config_host_mak 7012 echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak 7013 echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak 7014 echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak 7015fi 7016if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then 7017 echo "config-host.h: slirp/all" >> $config_host_mak 7018fi 7019if test "$vde" = "yes" ; then 7020 echo "CONFIG_VDE=y" >> $config_host_mak 7021 echo "VDE_LIBS=$vde_libs" >> $config_host_mak 7022fi 7023if test "$netmap" = "yes" ; then 7024 echo "CONFIG_NETMAP=y" >> $config_host_mak 7025fi 7026if test "$l2tpv3" = "yes" ; then 7027 echo "CONFIG_L2TPV3=y" >> $config_host_mak 7028fi 7029if test "$gprof" = "yes" ; then 7030 echo "CONFIG_GPROF=y" >> $config_host_mak 7031fi 7032if test "$cap_ng" = "yes" ; then 7033 echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak 7034 echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak 7035fi 7036echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak 7037for drv in $audio_drv_list; do 7038 def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') 7039 case "$drv" in 7040 alsa | oss | pa | sdl) 7041 echo "$def=m" >> $config_host_mak ;; 7042 *) 7043 echo "$def=y" >> $config_host_mak ;; 7044 esac 7045done 7046if test "$alsa" = "yes" ; then 7047 echo "CONFIG_ALSA=y" >> $config_host_mak 7048fi 7049echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak 7050echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak 7051if test "$libpulse" = "yes" ; then 7052 echo "CONFIG_LIBPULSE=y" >> $config_host_mak 7053fi 7054echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak 7055echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak 7056echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak 7057echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak 7058echo "OSS_LIBS=$oss_libs" >> $config_host_mak 7059if test "$libjack" = "yes" ; then 7060 echo "CONFIG_LIBJACK=y" >> $config_host_mak 7061fi 7062echo "JACK_LIBS=$jack_libs" >> $config_host_mak 7063if test "$audio_win_int" = "yes" ; then 7064 echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak 7065fi 7066echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak 7067echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak 7068if test "$vnc" = "yes" ; then 7069 echo "CONFIG_VNC=y" >> $config_host_mak 7070fi 7071if test "$vnc_sasl" = "yes" ; then 7072 echo "CONFIG_VNC_SASL=y" >> $config_host_mak 7073fi 7074echo "SASL_CFLAGS=$vnc_sasl_cflags" >> $config_host_mak 7075echo "SASL_LIBS=$vnc_sasl_libs" >> $config_host_mak 7076if test "$vnc_jpeg" = "yes" ; then 7077 echo "CONFIG_VNC_JPEG=y" >> $config_host_mak 7078fi 7079echo "JPEG_CFLAGS=$vnc_jpeg_cflags" >> $config_host_mak 7080echo "JPEG_LIBS=$vnc_jpeg_libs" >> $config_host_mak 7081if test "$vnc_png" = "yes" ; then 7082 echo "CONFIG_VNC_PNG=y" >> $config_host_mak 7083fi 7084echo "PNG_CFLAGS=$vnc_png_cflags" >> $config_host_mak 7085echo "PNG_LIBS=$vnc_png_libs" >> $config_host_mak 7086if test "$xkbcommon" = "yes" ; then 7087 echo "CONFIG_XKBCOMMON=y" >> $config_host_mak 7088 echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak 7089 echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak 7090fi 7091if test "$xfs" = "yes" ; then 7092 echo "CONFIG_XFS=y" >> $config_host_mak 7093fi 7094qemu_version=$(head $source_path/VERSION) 7095echo "VERSION=$qemu_version" >>$config_host_mak 7096echo "PKGVERSION=$pkgversion" >>$config_host_mak 7097echo "SRC_PATH=$source_path" >> $config_host_mak 7098echo "TARGET_DIRS=$target_list" >> $config_host_mak 7099if [ "$docs" = "yes" ] ; then 7100 echo "BUILD_DOCS=yes" >> $config_host_mak 7101fi 7102if test "$modules" = "yes"; then 7103 # $shacmd can generate a hash started with digit, which the compiler doesn't 7104 # like as an symbol. So prefix it with an underscore 7105 echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak 7106 echo "CONFIG_MODULES=y" >> $config_host_mak 7107fi 7108if test "$module_upgrades" = "yes"; then 7109 echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak 7110fi 7111if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then 7112 echo "CONFIG_X11=y" >> $config_host_mak 7113 echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak 7114 echo "X11_LIBS=$x11_libs" >> $config_host_mak 7115fi 7116if test "$sdl" = "yes" ; then 7117 echo "CONFIG_SDL=m" >> $config_host_mak 7118 echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak 7119 echo "SDL_LIBS=$sdl_libs" >> $config_host_mak 7120 if test "$sdl_image" = "yes" ; then 7121 echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak 7122 fi 7123fi 7124if test "$cocoa" = "yes" ; then 7125 echo "CONFIG_COCOA=y" >> $config_host_mak 7126fi 7127if test "$iconv" = "yes" ; then 7128 echo "CONFIG_ICONV=y" >> $config_host_mak 7129 echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak 7130 echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak 7131fi 7132if test "$curses" = "yes" ; then 7133 echo "CONFIG_CURSES=m" >> $config_host_mak 7134 echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak 7135 echo "CURSES_LIBS=$curses_lib" >> $config_host_mak 7136fi 7137if test "$pipe2" = "yes" ; then 7138 echo "CONFIG_PIPE2=y" >> $config_host_mak 7139fi 7140if test "$accept4" = "yes" ; then 7141 echo "CONFIG_ACCEPT4=y" >> $config_host_mak 7142fi 7143if test "$splice" = "yes" ; then 7144 echo "CONFIG_SPLICE=y" >> $config_host_mak 7145fi 7146if test "$eventfd" = "yes" ; then 7147 echo "CONFIG_EVENTFD=y" >> $config_host_mak 7148fi 7149if test "$memfd" = "yes" ; then 7150 echo "CONFIG_MEMFD=y" >> $config_host_mak 7151fi 7152if test "$have_usbfs" = "yes" ; then 7153 echo "CONFIG_USBFS=y" >> $config_host_mak 7154fi 7155if test "$fallocate" = "yes" ; then 7156 echo "CONFIG_FALLOCATE=y" >> $config_host_mak 7157fi 7158if test "$fallocate_punch_hole" = "yes" ; then 7159 echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak 7160fi 7161if test "$fallocate_zero_range" = "yes" ; then 7162 echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak 7163fi 7164if test "$posix_fallocate" = "yes" ; then 7165 echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak 7166fi 7167if test "$sync_file_range" = "yes" ; then 7168 echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak 7169fi 7170if test "$fiemap" = "yes" ; then 7171 echo "CONFIG_FIEMAP=y" >> $config_host_mak 7172fi 7173if test "$dup3" = "yes" ; then 7174 echo "CONFIG_DUP3=y" >> $config_host_mak 7175fi 7176if test "$ppoll" = "yes" ; then 7177 echo "CONFIG_PPOLL=y" >> $config_host_mak 7178fi 7179if test "$prctl_pr_set_timerslack" = "yes" ; then 7180 echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak 7181fi 7182if test "$epoll" = "yes" ; then 7183 echo "CONFIG_EPOLL=y" >> $config_host_mak 7184fi 7185if test "$epoll_create1" = "yes" ; then 7186 echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak 7187fi 7188if test "$sendfile" = "yes" ; then 7189 echo "CONFIG_SENDFILE=y" >> $config_host_mak 7190fi 7191if test "$timerfd" = "yes" ; then 7192 echo "CONFIG_TIMERFD=y" >> $config_host_mak 7193fi 7194if test "$setns" = "yes" ; then 7195 echo "CONFIG_SETNS=y" >> $config_host_mak 7196fi 7197if test "$clock_adjtime" = "yes" ; then 7198 echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak 7199fi 7200if test "$syncfs" = "yes" ; then 7201 echo "CONFIG_SYNCFS=y" >> $config_host_mak 7202fi 7203if test "$kcov" = "yes" ; then 7204 echo "CONFIG_KCOV=y" >> $config_host_mak 7205fi 7206if test "$inotify" = "yes" ; then 7207 echo "CONFIG_INOTIFY=y" >> $config_host_mak 7208fi 7209if test "$inotify1" = "yes" ; then 7210 echo "CONFIG_INOTIFY1=y" >> $config_host_mak 7211fi 7212if test "$sem_timedwait" = "yes" ; then 7213 echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak 7214fi 7215if test "$strchrnul" = "yes" ; then 7216 echo "HAVE_STRCHRNUL=y" >> $config_host_mak 7217fi 7218if test "$st_atim" = "yes" ; then 7219 echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak 7220fi 7221if test "$byteswap_h" = "yes" ; then 7222 echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak 7223fi 7224if test "$bswap_h" = "yes" ; then 7225 echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak 7226fi 7227if test "$curl" = "yes" ; then 7228 echo "CONFIG_CURL=m" >> $config_host_mak 7229 echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak 7230 echo "CURL_LIBS=$curl_libs" >> $config_host_mak 7231fi 7232if test "$brlapi" = "yes" ; then 7233 echo "CONFIG_BRLAPI=y" >> $config_host_mak 7234 echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak 7235fi 7236if test "$gtk" = "yes" ; then 7237 echo "CONFIG_GTK=m" >> $config_host_mak 7238 echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak 7239 echo "GTK_LIBS=$gtk_libs" >> $config_host_mak 7240 if test "$gtk_gl" = "yes" ; then 7241 echo "CONFIG_GTK_GL=y" >> $config_host_mak 7242 fi 7243fi 7244if test "$gio" = "yes" ; then 7245 echo "CONFIG_GIO=y" >> $config_host_mak 7246 echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak 7247 echo "GIO_LIBS=$gio_libs" >> $config_host_mak 7248 echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak 7249fi 7250echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak 7251if test "$gnutls" = "yes" ; then 7252 echo "CONFIG_GNUTLS=y" >> $config_host_mak 7253 echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak 7254 echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak 7255fi 7256if test "$gcrypt" = "yes" ; then 7257 echo "CONFIG_GCRYPT=y" >> $config_host_mak 7258 if test "$gcrypt_hmac" = "yes" ; then 7259 echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak 7260 fi 7261fi 7262if test "$nettle" = "yes" ; then 7263 echo "CONFIG_NETTLE=y" >> $config_host_mak 7264 echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak 7265 echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak 7266 echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak 7267fi 7268if test "$qemu_private_xts" = "yes" ; then 7269 echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak 7270fi 7271if test "$tasn1" = "yes" ; then 7272 echo "CONFIG_TASN1=y" >> $config_host_mak 7273fi 7274if test "$auth_pam" = "yes" ; then 7275 echo "CONFIG_AUTH_PAM=y" >> $config_host_mak 7276fi 7277if test "$have_ifaddrs_h" = "yes" ; then 7278 echo "HAVE_IFADDRS_H=y" >> $config_host_mak 7279fi 7280if test "$have_drm_h" = "yes" ; then 7281 echo "HAVE_DRM_H=y" >> $config_host_mak 7282fi 7283if test "$have_broken_size_max" = "yes" ; then 7284 echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak 7285fi 7286if test "$have_openpty" = "yes" ; then 7287 echo "HAVE_OPENPTY=y" >> $config_host_mak 7288fi 7289if test "$have_sys_signal_h" = "yes" ; then 7290 echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak 7291fi 7292 7293# Work around a system header bug with some kernel/XFS header 7294# versions where they both try to define 'struct fsxattr': 7295# xfs headers will not try to redefine structs from linux headers 7296# if this macro is set. 7297if test "$have_fsxattr" = "yes" ; then 7298 echo "HAVE_FSXATTR=y" >> $config_host_mak 7299fi 7300if test "$have_copy_file_range" = "yes" ; then 7301 echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak 7302fi 7303if test "$vte" = "yes" ; then 7304 echo "CONFIG_VTE=y" >> $config_host_mak 7305 echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak 7306 echo "VTE_LIBS=$vte_libs" >> $config_host_mak 7307fi 7308if test "$virglrenderer" = "yes" ; then 7309 echo "CONFIG_VIRGL=y" >> $config_host_mak 7310 echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak 7311 echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak 7312fi 7313if test "$xen" = "yes" ; then 7314 echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak 7315 echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak 7316fi 7317if test "$linux_aio" = "yes" ; then 7318 echo "CONFIG_LINUX_AIO=y" >> $config_host_mak 7319fi 7320if test "$linux_io_uring" = "yes" ; then 7321 echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak 7322 echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak 7323 echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak 7324fi 7325if test "$attr" = "yes" ; then 7326 echo "CONFIG_ATTR=y" >> $config_host_mak 7327 echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak 7328fi 7329if test "$libattr" = "yes" ; then 7330 echo "CONFIG_LIBATTR=y" >> $config_host_mak 7331fi 7332if test "$virtfs" = "yes" ; then 7333 echo "CONFIG_VIRTFS=y" >> $config_host_mak 7334fi 7335if test "$mpath" = "yes" ; then 7336 echo "CONFIG_MPATH=y" >> $config_host_mak 7337 if test "$mpathpersist_new_api" = "yes"; then 7338 echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak 7339 fi 7340fi 7341if test "$vhost_scsi" = "yes" ; then 7342 echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak 7343fi 7344if test "$vhost_net" = "yes" ; then 7345 echo "CONFIG_VHOST_NET=y" >> $config_host_mak 7346fi 7347if test "$vhost_net_user" = "yes" ; then 7348 echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak 7349fi 7350if test "$vhost_net_vdpa" = "yes" ; then 7351 echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak 7352fi 7353if test "$vhost_crypto" = "yes" ; then 7354 echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak 7355fi 7356if test "$vhost_vsock" = "yes" ; then 7357 echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak 7358 if test "$vhost_user" = "yes" ; then 7359 echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak 7360 fi 7361fi 7362if test "$vhost_kernel" = "yes" ; then 7363 echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak 7364fi 7365if test "$vhost_user" = "yes" ; then 7366 echo "CONFIG_VHOST_USER=y" >> $config_host_mak 7367fi 7368if test "$vhost_vdpa" = "yes" ; then 7369 echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak 7370fi 7371if test "$vhost_user_fs" = "yes" ; then 7372 echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak 7373fi 7374if test "$blobs" = "yes" ; then 7375 echo "INSTALL_BLOBS=yes" >> $config_host_mak 7376fi 7377if test "$iovec" = "yes" ; then 7378 echo "CONFIG_IOVEC=y" >> $config_host_mak 7379fi 7380if test "$preadv" = "yes" ; then 7381 echo "CONFIG_PREADV=y" >> $config_host_mak 7382fi 7383if test "$fdt" != "no" ; then 7384 echo "CONFIG_FDT=y" >> $config_host_mak 7385 echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak 7386 echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak 7387fi 7388if test "$membarrier" = "yes" ; then 7389 echo "CONFIG_MEMBARRIER=y" >> $config_host_mak 7390fi 7391if test "$signalfd" = "yes" ; then 7392 echo "CONFIG_SIGNALFD=y" >> $config_host_mak 7393fi 7394if test "$optreset" = "yes" ; then 7395 echo "HAVE_OPTRESET=y" >> $config_host_mak 7396fi 7397if test "$tcg" = "yes"; then 7398 echo "CONFIG_TCG=y" >> $config_host_mak 7399 if test "$tcg_interpreter" = "yes" ; then 7400 echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak 7401 fi 7402fi 7403if test "$fdatasync" = "yes" ; then 7404 echo "CONFIG_FDATASYNC=y" >> $config_host_mak 7405fi 7406if test "$madvise" = "yes" ; then 7407 echo "CONFIG_MADVISE=y" >> $config_host_mak 7408fi 7409if test "$posix_madvise" = "yes" ; then 7410 echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak 7411fi 7412if test "$posix_memalign" = "yes" ; then 7413 echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak 7414fi 7415if test "$zlib" != "no" ; then 7416 echo "CONFIG_ZLIB=y" >> $config_host_mak 7417 echo "ZLIB_CFLAGS=$zlib_cflags" >> $config_host_mak 7418 echo "ZLIB_LIBS=$zlib_libs" >> $config_host_mak 7419fi 7420if test "$spice" = "yes" ; then 7421 echo "CONFIG_SPICE=y" >> $config_host_mak 7422 echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak 7423 echo "SPICE_LIBS=$spice_libs" >> $config_host_mak 7424fi 7425 7426if test "$smartcard" = "yes" ; then 7427 echo "CONFIG_SMARTCARD=y" >> $config_host_mak 7428 echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak 7429 echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak 7430fi 7431 7432if test "$libusb" = "yes" ; then 7433 echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak 7434 echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak 7435 echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak 7436fi 7437 7438if test "$usb_redir" = "yes" ; then 7439 echo "CONFIG_USB_REDIR=y" >> $config_host_mak 7440 echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak 7441 echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak 7442fi 7443 7444if test "$opengl" = "yes" ; then 7445 echo "CONFIG_OPENGL=y" >> $config_host_mak 7446 echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak 7447 if test "$opengl_dmabuf" = "yes" ; then 7448 echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak 7449 fi 7450fi 7451 7452if test "$gbm" = "yes" ; then 7453 echo "CONFIG_GBM=y" >> $config_host_mak 7454 echo "GBM_LIBS=$gbm_libs" >> $config_host_mak 7455 echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak 7456fi 7457 7458 7459if test "$malloc_trim" = "yes" ; then 7460 echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak 7461fi 7462 7463if test "$avx2_opt" = "yes" ; then 7464 echo "CONFIG_AVX2_OPT=y" >> $config_host_mak 7465fi 7466 7467if test "$avx512f_opt" = "yes" ; then 7468 echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak 7469fi 7470 7471if test "$lzo" = "yes" ; then 7472 echo "CONFIG_LZO=y" >> $config_host_mak 7473 echo "LZO_LIBS=$lzo_libs" >> $config_host_mak 7474fi 7475 7476if test "$snappy" = "yes" ; then 7477 echo "CONFIG_SNAPPY=y" >> $config_host_mak 7478 echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak 7479fi 7480 7481if test "$bzip2" = "yes" ; then 7482 echo "CONFIG_BZIP2=y" >> $config_host_mak 7483 echo "BZIP2_LIBS=-lbz2" >> $config_host_mak 7484fi 7485 7486if test "$lzfse" = "yes" ; then 7487 echo "CONFIG_LZFSE=y" >> $config_host_mak 7488 echo "LZFSE_LIBS=-llzfse" >> $config_host_mak 7489fi 7490 7491if test "$zstd" = "yes" ; then 7492 echo "CONFIG_ZSTD=y" >> $config_host_mak 7493 echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak 7494 echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak 7495fi 7496 7497if test "$libiscsi" = "yes" ; then 7498 echo "CONFIG_LIBISCSI=m" >> $config_host_mak 7499 echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak 7500 echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak 7501fi 7502 7503if test "$libnfs" = "yes" ; then 7504 echo "CONFIG_LIBNFS=m" >> $config_host_mak 7505 echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak 7506fi 7507 7508if test "$seccomp" = "yes"; then 7509 echo "CONFIG_SECCOMP=y" >> $config_host_mak 7510 echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak 7511 echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak 7512fi 7513 7514# XXX: suppress that 7515if [ "$bsd" = "yes" ] ; then 7516 echo "CONFIG_BSD=y" >> $config_host_mak 7517fi 7518 7519if test "$localtime_r" = "yes" ; then 7520 echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak 7521fi 7522if test "$qom_cast_debug" = "yes" ; then 7523 echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak 7524fi 7525if test "$rbd" = "yes" ; then 7526 echo "CONFIG_RBD=m" >> $config_host_mak 7527 echo "RBD_LIBS=$rbd_libs" >> $config_host_mak 7528fi 7529 7530echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak 7531if test "$coroutine_pool" = "yes" ; then 7532 echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak 7533else 7534 echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak 7535fi 7536 7537if test "$debug_stack_usage" = "yes" ; then 7538 echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak 7539fi 7540 7541if test "$crypto_afalg" = "yes" ; then 7542 echo "CONFIG_AF_ALG=y" >> $config_host_mak 7543fi 7544 7545if test "$open_by_handle_at" = "yes" ; then 7546 echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak 7547fi 7548 7549if test "$linux_magic_h" = "yes" ; then 7550 echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak 7551fi 7552 7553if test "$valgrind_h" = "yes" ; then 7554 echo "CONFIG_VALGRIND_H=y" >> $config_host_mak 7555fi 7556 7557if test "$have_asan_iface_fiber" = "yes" ; then 7558 echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak 7559fi 7560 7561if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then 7562 echo "CONFIG_TSAN=y" >> $config_host_mak 7563fi 7564 7565if test "$has_environ" = "yes" ; then 7566 echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak 7567fi 7568 7569if test "$cpuid_h" = "yes" ; then 7570 echo "CONFIG_CPUID_H=y" >> $config_host_mak 7571fi 7572 7573if test "$int128" = "yes" ; then 7574 echo "CONFIG_INT128=y" >> $config_host_mak 7575fi 7576 7577if test "$atomic128" = "yes" ; then 7578 echo "CONFIG_ATOMIC128=y" >> $config_host_mak 7579fi 7580 7581if test "$cmpxchg128" = "yes" ; then 7582 echo "CONFIG_CMPXCHG128=y" >> $config_host_mak 7583fi 7584 7585if test "$atomic64" = "yes" ; then 7586 echo "CONFIG_ATOMIC64=y" >> $config_host_mak 7587fi 7588 7589if test "$attralias" = "yes" ; then 7590 echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak 7591fi 7592 7593if test "$getauxval" = "yes" ; then 7594 echo "CONFIG_GETAUXVAL=y" >> $config_host_mak 7595fi 7596 7597if test "$glusterfs" = "yes" ; then 7598 echo "CONFIG_GLUSTERFS=m" >> $config_host_mak 7599 echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak 7600 echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak 7601fi 7602 7603if test "$glusterfs_xlator_opt" = "yes" ; then 7604 echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak 7605fi 7606 7607if test "$glusterfs_discard" = "yes" ; then 7608 echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak 7609fi 7610 7611if test "$glusterfs_fallocate" = "yes" ; then 7612 echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak 7613fi 7614 7615if test "$glusterfs_zerofill" = "yes" ; then 7616 echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak 7617fi 7618 7619if test "$glusterfs_ftruncate_has_stat" = "yes" ; then 7620 echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak 7621fi 7622 7623if test "$glusterfs_iocb_has_stat" = "yes" ; then 7624 echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak 7625fi 7626 7627if test "$libssh" = "yes" ; then 7628 echo "CONFIG_LIBSSH=m" >> $config_host_mak 7629 echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak 7630 echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak 7631fi 7632 7633if test "$live_block_migration" = "yes" ; then 7634 echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak 7635fi 7636 7637if test "$tpm" = "yes"; then 7638 echo 'CONFIG_TPM=y' >> $config_host_mak 7639fi 7640 7641echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak 7642if have_backend "nop"; then 7643 echo "CONFIG_TRACE_NOP=y" >> $config_host_mak 7644fi 7645if have_backend "simple"; then 7646 echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak 7647 # Set the appropriate trace file. 7648 trace_file="\"$trace_file-\" FMT_pid" 7649fi 7650if have_backend "log"; then 7651 echo "CONFIG_TRACE_LOG=y" >> $config_host_mak 7652fi 7653if have_backend "ust"; then 7654 echo "CONFIG_TRACE_UST=y" >> $config_host_mak 7655 echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak 7656 echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak 7657fi 7658if have_backend "dtrace"; then 7659 echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak 7660 if test "$trace_backend_stap" = "yes" ; then 7661 echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak 7662 fi 7663fi 7664if have_backend "ftrace"; then 7665 if test "$linux" = "yes" ; then 7666 echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak 7667 else 7668 feature_not_found "ftrace(trace backend)" "ftrace requires Linux" 7669 fi 7670fi 7671if have_backend "syslog"; then 7672 if test "$posix_syslog" = "yes" ; then 7673 echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak 7674 else 7675 feature_not_found "syslog(trace backend)" "syslog not available" 7676 fi 7677fi 7678echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak 7679 7680if test "$rdma" = "yes" ; then 7681 echo "CONFIG_RDMA=y" >> $config_host_mak 7682 echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak 7683fi 7684 7685if test "$pvrdma" = "yes" ; then 7686 echo "CONFIG_PVRDMA=y" >> $config_host_mak 7687fi 7688 7689if test "$have_rtnetlink" = "yes" ; then 7690 echo "CONFIG_RTNETLINK=y" >> $config_host_mak 7691fi 7692 7693if test "$libxml2" = "yes" ; then 7694 echo "CONFIG_LIBXML2=y" >> $config_host_mak 7695 echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak 7696 echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak 7697fi 7698 7699if test "$replication" = "yes" ; then 7700 echo "CONFIG_REPLICATION=y" >> $config_host_mak 7701fi 7702 7703if test "$have_af_vsock" = "yes" ; then 7704 echo "CONFIG_AF_VSOCK=y" >> $config_host_mak 7705fi 7706 7707if test "$have_sysmacros" = "yes" ; then 7708 echo "CONFIG_SYSMACROS=y" >> $config_host_mak 7709fi 7710 7711if test "$have_static_assert" = "yes" ; then 7712 echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak 7713fi 7714 7715if test "$have_utmpx" = "yes" ; then 7716 echo "HAVE_UTMPX=y" >> $config_host_mak 7717fi 7718if test "$have_getrandom" = "yes" ; then 7719 echo "CONFIG_GETRANDOM=y" >> $config_host_mak 7720fi 7721if test "$ivshmem" = "yes" ; then 7722 echo "CONFIG_IVSHMEM=y" >> $config_host_mak 7723fi 7724if test "$capstone" != "no" ; then 7725 echo "CONFIG_CAPSTONE=y" >> $config_host_mak 7726fi 7727if test "$debug_mutex" = "yes" ; then 7728 echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak 7729fi 7730 7731# Hold two types of flag: 7732# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on 7733# a thread we have a handle to 7734# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular 7735# platform 7736if test "$pthread_setname_np_w_tid" = "yes" ; then 7737 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7738 echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak 7739elif test "$pthread_setname_np_wo_tid" = "yes" ; then 7740 echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak 7741 echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak 7742fi 7743 7744if test "$libpmem" = "yes" ; then 7745 echo "CONFIG_LIBPMEM=y" >> $config_host_mak 7746fi 7747 7748if test "$libdaxctl" = "yes" ; then 7749 echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak 7750fi 7751 7752if test "$bochs" = "yes" ; then 7753 echo "CONFIG_BOCHS=y" >> $config_host_mak 7754fi 7755if test "$cloop" = "yes" ; then 7756 echo "CONFIG_CLOOP=y" >> $config_host_mak 7757fi 7758if test "$dmg" = "yes" ; then 7759 echo "CONFIG_DMG=y" >> $config_host_mak 7760fi 7761if test "$qcow1" = "yes" ; then 7762 echo "CONFIG_QCOW1=y" >> $config_host_mak 7763fi 7764if test "$vdi" = "yes" ; then 7765 echo "CONFIG_VDI=y" >> $config_host_mak 7766fi 7767if test "$vvfat" = "yes" ; then 7768 echo "CONFIG_VVFAT=y" >> $config_host_mak 7769fi 7770if test "$qed" = "yes" ; then 7771 echo "CONFIG_QED=y" >> $config_host_mak 7772fi 7773if test "$parallels" = "yes" ; then 7774 echo "CONFIG_PARALLELS=y" >> $config_host_mak 7775fi 7776if test "$sheepdog" = "yes" ; then 7777 echo "CONFIG_SHEEPDOG=y" >> $config_host_mak 7778fi 7779if test "$pty_h" = "yes" ; then 7780 echo "HAVE_PTY_H=y" >> $config_host_mak 7781fi 7782if test "$have_mlockall" = "yes" ; then 7783 echo "HAVE_MLOCKALL=y" >> $config_host_mak 7784fi 7785if test "$fuzzing" = "yes" ; then 7786 if test "$have_fuzzer" = "yes"; then 7787 FUZZ_LDFLAGS=" -fsanitize=fuzzer" 7788 FUZZ_CFLAGS=" -fsanitize=fuzzer" 7789 QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link" 7790 else 7791 error_exit "Your compiler doesn't support -fsanitize=fuzzer" 7792 exit 1 7793 fi 7794fi 7795 7796if test "$plugins" = "yes" ; then 7797 echo "CONFIG_PLUGIN=y" >> $config_host_mak 7798 LIBS="-ldl $LIBS" 7799 # Copy the export object list to the build dir 7800 if test "$ld_dynamic_list" = "yes" ; then 7801 echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak 7802 ld_symbols=qemu-plugins-ld.symbols 7803 cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols 7804 elif test "$ld_exported_symbols_list" = "yes" ; then 7805 echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak 7806 ld64_symbols=qemu-plugins-ld64.symbols 7807 echo "# Automatically generated by configure - do not modify" > $ld64_symbols 7808 grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ 7809 sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols 7810 else 7811 error_exit \ 7812 "If \$plugins=yes, either \$ld_dynamic_list or " \ 7813 "\$ld_exported_symbols_list should have been set to 'yes'." 7814 fi 7815fi 7816 7817if test -n "$gdb_bin" ; then 7818 echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak 7819fi 7820 7821if test "$secret_keyring" = "yes" ; then 7822 echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak 7823 if test "$have_keyutils" = "yes" ; then 7824 echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak 7825 fi 7826fi 7827 7828if test "$tcg_interpreter" = "yes"; then 7829 QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES" 7830elif test "$ARCH" = "sparc64" ; then 7831 QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES" 7832elif test "$ARCH" = "s390x" ; then 7833 QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES" 7834elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then 7835 QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES" 7836elif test "$ARCH" = "ppc64" ; then 7837 QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES" 7838elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then 7839 QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES" 7840else 7841 QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES" 7842fi 7843 7844echo "ROMS=$roms" >> $config_host_mak 7845echo "MAKE=$make" >> $config_host_mak 7846echo "INSTALL=$install" >> $config_host_mak 7847echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak 7848echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak 7849echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak 7850echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak 7851echo "PYTHON=$python" >> $config_host_mak 7852echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak 7853echo "SPHINX_WERROR=$sphinx_werror" >> $config_host_mak 7854echo "GENISOIMAGE=$genisoimage" >> $config_host_mak 7855echo "MESON=$meson" >> $config_host_mak 7856echo "CC=$cc" >> $config_host_mak 7857if $iasl -h > /dev/null 2>&1; then 7858 echo "IASL=$iasl" >> $config_host_mak 7859fi 7860echo "CXX=$cxx" >> $config_host_mak 7861echo "OBJCC=$objcc" >> $config_host_mak 7862echo "AR=$ar" >> $config_host_mak 7863echo "ARFLAGS=$ARFLAGS" >> $config_host_mak 7864echo "AS=$as" >> $config_host_mak 7865echo "CCAS=$ccas" >> $config_host_mak 7866echo "CPP=$cpp" >> $config_host_mak 7867echo "OBJCOPY=$objcopy" >> $config_host_mak 7868echo "LD=$ld" >> $config_host_mak 7869echo "RANLIB=$ranlib" >> $config_host_mak 7870echo "NM=$nm" >> $config_host_mak 7871echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak 7872echo "WINDRES=$windres" >> $config_host_mak 7873echo "CFLAGS=$CFLAGS" >> $config_host_mak 7874echo "CXXFLAGS=$CXXFLAGS" >> $config_host_mak 7875echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak 7876echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak 7877echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak 7878echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak 7879echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak 7880echo "GLIB_LIBS=$glib_libs" >> $config_host_mak 7881if test "$sparse" = "yes" ; then 7882 echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak 7883fi 7884echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak 7885echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak 7886echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak 7887echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak 7888echo "LIBS+=$LIBS" >> $config_host_mak 7889echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak 7890echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak 7891echo "EXESUF=$EXESUF" >> $config_host_mak 7892echo "DSOSUF=$DSOSUF" >> $config_host_mak 7893echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak 7894echo "LIBS_QGA=$libs_qga" >> $config_host_mak 7895echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak 7896echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak 7897echo "POD2MAN=$POD2MAN" >> $config_host_mak 7898if test "$gcov" = "yes" ; then 7899 echo "CONFIG_GCOV=y" >> $config_host_mak 7900fi 7901 7902if test "$libudev" != "no"; then 7903 echo "CONFIG_LIBUDEV=y" >> $config_host_mak 7904 echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak 7905fi 7906if test "$fuzzing" != "no"; then 7907 echo "CONFIG_FUZZ=y" >> $config_host_mak 7908 echo "FUZZ_CFLAGS=$FUZZ_CFLAGS" >> $config_host_mak 7909 echo "FUZZ_LDFLAGS=$FUZZ_LDFLAGS" >> $config_host_mak 7910fi 7911 7912if test "$edk2_blobs" = "yes" ; then 7913 echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak 7914fi 7915 7916if test "$rng_none" = "yes"; then 7917 echo "CONFIG_RNG_NONE=y" >> $config_host_mak 7918fi 7919 7920# use included Linux headers 7921if test "$linux" = "yes" ; then 7922 mkdir -p linux-headers 7923 case "$cpu" in 7924 i386|x86_64|x32) 7925 linux_arch=x86 7926 ;; 7927 ppc|ppc64|ppc64le) 7928 linux_arch=powerpc 7929 ;; 7930 s390x) 7931 linux_arch=s390 7932 ;; 7933 aarch64) 7934 linux_arch=arm64 7935 ;; 7936 mips64) 7937 linux_arch=mips 7938 ;; 7939 *) 7940 # For most CPUs the kernel architecture name and QEMU CPU name match. 7941 linux_arch="$cpu" 7942 ;; 7943 esac 7944 # For non-KVM architectures we will not have asm headers 7945 if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then 7946 symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm 7947 fi 7948fi 7949 7950for target in $target_list; do 7951target_dir="$target" 7952config_target_mak=$target_dir/config-target.mak 7953target_name=$(echo $target | cut -d '-' -f 1) 7954target_aligned_only="no" 7955case "$target_name" in 7956 alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb) 7957 target_aligned_only="yes" 7958 ;; 7959esac 7960target_bigendian="no" 7961case "$target_name" in 7962 armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) 7963 target_bigendian="yes" 7964 ;; 7965esac 7966target_softmmu="no" 7967target_user_only="no" 7968target_linux_user="no" 7969target_bsd_user="no" 7970case "$target" in 7971 ${target_name}-softmmu) 7972 target_softmmu="yes" 7973 ;; 7974 ${target_name}-linux-user) 7975 target_user_only="yes" 7976 target_linux_user="yes" 7977 ;; 7978 ${target_name}-bsd-user) 7979 target_user_only="yes" 7980 target_bsd_user="yes" 7981 ;; 7982 *) 7983 error_exit "Target '$target' not recognised" 7984 exit 1 7985 ;; 7986esac 7987 7988mkdir -p $target_dir 7989echo "# Automatically generated by configure - do not modify" > $config_target_mak 7990 7991bflt="no" 7992mttcg="no" 7993interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") 7994gdb_xml_files="" 7995 7996TARGET_ARCH="$target_name" 7997TARGET_BASE_ARCH="" 7998TARGET_ABI_DIR="" 7999 8000case "$target_name" in 8001 i386) 8002 mttcg="yes" 8003 gdb_xml_files="i386-32bit.xml" 8004 TARGET_SYSTBL_ABI=i386 8005 ;; 8006 x86_64) 8007 TARGET_BASE_ARCH=i386 8008 TARGET_SYSTBL_ABI=common,64 8009 mttcg="yes" 8010 gdb_xml_files="i386-64bit.xml" 8011 ;; 8012 alpha) 8013 mttcg="yes" 8014 TARGET_SYSTBL_ABI=common 8015 ;; 8016 arm|armeb) 8017 TARGET_ARCH=arm 8018 TARGET_SYSTBL_ABI=common,oabi 8019 bflt="yes" 8020 mttcg="yes" 8021 gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml" 8022 ;; 8023 aarch64|aarch64_be) 8024 TARGET_ARCH=aarch64 8025 TARGET_BASE_ARCH=arm 8026 bflt="yes" 8027 mttcg="yes" 8028 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" 8029 ;; 8030 avr) 8031 gdb_xml_files="avr-cpu.xml" 8032 target_compiler=$cross_cc_avr 8033 ;; 8034 cris) 8035 ;; 8036 hppa) 8037 mttcg="yes" 8038 TARGET_SYSTBL_ABI=common,32 8039 ;; 8040 lm32) 8041 ;; 8042 m68k) 8043 bflt="yes" 8044 gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml" 8045 TARGET_SYSTBL_ABI=common 8046 ;; 8047 microblaze|microblazeel) 8048 TARGET_ARCH=microblaze 8049 TARGET_SYSTBL_ABI=common 8050 bflt="yes" 8051 echo "TARGET_ABI32=y" >> $config_target_mak 8052 ;; 8053 mips|mipsel) 8054 mttcg="yes" 8055 TARGET_ARCH=mips 8056 echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak 8057 TARGET_SYSTBL_ABI=o32 8058 ;; 8059 mipsn32|mipsn32el) 8060 mttcg="yes" 8061 TARGET_ARCH=mips64 8062 TARGET_BASE_ARCH=mips 8063 echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak 8064 echo "TARGET_ABI32=y" >> $config_target_mak 8065 TARGET_SYSTBL_ABI=n32 8066 ;; 8067 mips64|mips64el) 8068 mttcg="no" 8069 TARGET_ARCH=mips64 8070 TARGET_BASE_ARCH=mips 8071 echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak 8072 TARGET_SYSTBL_ABI=n64 8073 ;; 8074 moxie) 8075 ;; 8076 nios2) 8077 ;; 8078 or1k) 8079 TARGET_ARCH=openrisc 8080 TARGET_BASE_ARCH=openrisc 8081 ;; 8082 ppc) 8083 gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" 8084 TARGET_SYSTBL_ABI=common,nospu,32 8085 ;; 8086 ppc64) 8087 TARGET_BASE_ARCH=ppc 8088 TARGET_ABI_DIR=ppc 8089 TARGET_SYSTBL_ABI=common,nospu,64 8090 mttcg=yes 8091 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 8092 ;; 8093 ppc64le) 8094 TARGET_ARCH=ppc64 8095 TARGET_BASE_ARCH=ppc 8096 TARGET_ABI_DIR=ppc 8097 TARGET_SYSTBL_ABI=common,nospu,64 8098 mttcg=yes 8099 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 8100 ;; 8101 ppc64abi32) 8102 TARGET_ARCH=ppc64 8103 TARGET_BASE_ARCH=ppc 8104 TARGET_ABI_DIR=ppc 8105 TARGET_SYSTBL_ABI=common,nospu,32 8106 echo "TARGET_ABI32=y" >> $config_target_mak 8107 gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" 8108 ;; 8109 riscv32) 8110 TARGET_BASE_ARCH=riscv 8111 TARGET_ABI_DIR=riscv 8112 mttcg=yes 8113 gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml" 8114 ;; 8115 riscv64) 8116 TARGET_BASE_ARCH=riscv 8117 TARGET_ABI_DIR=riscv 8118 mttcg=yes 8119 gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml" 8120 ;; 8121 rx) 8122 TARGET_ARCH=rx 8123 bflt="yes" 8124 target_compiler=$cross_cc_rx 8125 gdb_xml_files="rx-core.xml" 8126 ;; 8127 sh4|sh4eb) 8128 TARGET_ARCH=sh4 8129 TARGET_SYSTBL_ABI=common 8130 bflt="yes" 8131 ;; 8132 sparc) 8133 TARGET_SYSTBL_ABI=common,32 8134 ;; 8135 sparc64) 8136 TARGET_BASE_ARCH=sparc 8137 TARGET_SYSTBL_ABI=common,64 8138 ;; 8139 sparc32plus) 8140 TARGET_ARCH=sparc64 8141 TARGET_BASE_ARCH=sparc 8142 TARGET_ABI_DIR=sparc 8143 TARGET_SYSTBL_ABI=common,32 8144 echo "TARGET_ABI32=y" >> $config_target_mak 8145 ;; 8146 s390x) 8147 TARGET_SYSTBL_ABI=common,64 8148 mttcg=yes 8149 gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" 8150 ;; 8151 tilegx) 8152 ;; 8153 tricore) 8154 ;; 8155 unicore32) 8156 ;; 8157 xtensa|xtensaeb) 8158 TARGET_ARCH=xtensa 8159 TARGET_SYSTBL_ABI=common 8160 bflt="yes" 8161 mttcg="yes" 8162 ;; 8163 *) 8164 error_exit "Unsupported target CPU" 8165 ;; 8166esac 8167# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH 8168if [ "$TARGET_BASE_ARCH" = "" ]; then 8169 TARGET_BASE_ARCH=$TARGET_ARCH 8170fi 8171 8172symlink "$source_path/Makefile.target" "$target_dir/Makefile" 8173 8174upper() { 8175 echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' 8176} 8177 8178target_arch_name="$(upper $TARGET_ARCH)" 8179echo "TARGET_$target_arch_name=y" >> $config_target_mak 8180echo "TARGET_NAME=$target_name" >> $config_target_mak 8181echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak 8182if [ "$TARGET_ABI_DIR" = "" ]; then 8183 TARGET_ABI_DIR=$TARGET_ARCH 8184fi 8185echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak 8186if [ "$HOST_VARIANT_DIR" != "" ]; then 8187 echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak 8188fi 8189if [ "$TARGET_SYSTBL_ABI" != "" ]; then 8190 echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak 8191fi 8192 8193if supported_xen_target $target; then 8194 echo "CONFIG_XEN=y" >> $config_target_mak 8195 if test "$xen_pci_passthrough" = yes; then 8196 echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" 8197 fi 8198fi 8199if supported_kvm_target $target; then 8200 echo "CONFIG_KVM=y" >> $config_target_mak 8201fi 8202if supported_hax_target $target; then 8203 echo "CONFIG_HAX=y" >> $config_target_mak 8204fi 8205if supported_hvf_target $target; then 8206 echo "CONFIG_HVF=y" >> $config_target_mak 8207fi 8208if supported_whpx_target $target; then 8209 echo "CONFIG_WHPX=y" >> $config_target_mak 8210fi 8211if test "$target_aligned_only" = "yes" ; then 8212 echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak 8213fi 8214if test "$target_bigendian" = "yes" ; then 8215 echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak 8216fi 8217if test "$target_softmmu" = "yes" ; then 8218 echo "CONFIG_SOFTMMU=y" >> $config_target_mak 8219 if test "$mttcg" = "yes" ; then 8220 echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak 8221 fi 8222fi 8223if test "$target_user_only" = "yes" ; then 8224 echo "CONFIG_USER_ONLY=y" >> $config_target_mak 8225 echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak 8226fi 8227if test "$target_linux_user" = "yes" ; then 8228 echo "CONFIG_LINUX_USER=y" >> $config_target_mak 8229fi 8230list="" 8231if test ! -z "$gdb_xml_files" ; then 8232 for x in $gdb_xml_files; do 8233 list="$list $source_path/gdb-xml/$x" 8234 done 8235 echo "TARGET_XML_FILES=$list" >> $config_target_mak 8236fi 8237 8238if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then 8239 echo "TARGET_HAS_BFLT=y" >> $config_target_mak 8240fi 8241if test "$target_bsd_user" = "yes" ; then 8242 echo "CONFIG_BSD_USER=y" >> $config_target_mak 8243fi 8244 8245 8246# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets 8247 8248cflags="" 8249ldflags="" 8250 8251disas_config() { 8252 echo "CONFIG_${1}_DIS=y" >> $config_target_mak 8253 echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak 8254} 8255 8256for i in $ARCH $TARGET_BASE_ARCH ; do 8257 case "$i" in 8258 alpha) 8259 disas_config "ALPHA" 8260 ;; 8261 aarch64) 8262 if test -n "${cxx}"; then 8263 disas_config "ARM_A64" 8264 fi 8265 ;; 8266 arm) 8267 disas_config "ARM" 8268 if test -n "${cxx}"; then 8269 disas_config "ARM_A64" 8270 fi 8271 ;; 8272 avr) 8273 disas_config "AVR" 8274 ;; 8275 cris) 8276 disas_config "CRIS" 8277 ;; 8278 hppa) 8279 disas_config "HPPA" 8280 ;; 8281 i386|x86_64|x32) 8282 disas_config "I386" 8283 ;; 8284 lm32) 8285 disas_config "LM32" 8286 ;; 8287 m68k) 8288 disas_config "M68K" 8289 ;; 8290 microblaze*) 8291 disas_config "MICROBLAZE" 8292 ;; 8293 mips*) 8294 disas_config "MIPS" 8295 if test -n "${cxx}"; then 8296 disas_config "NANOMIPS" 8297 fi 8298 ;; 8299 moxie*) 8300 disas_config "MOXIE" 8301 ;; 8302 nios2) 8303 disas_config "NIOS2" 8304 ;; 8305 or1k) 8306 disas_config "OPENRISC" 8307 ;; 8308 ppc*) 8309 disas_config "PPC" 8310 ;; 8311 riscv*) 8312 disas_config "RISCV" 8313 ;; 8314 rx) 8315 disas_config "RX" 8316 ;; 8317 s390*) 8318 disas_config "S390" 8319 ;; 8320 sh4) 8321 disas_config "SH4" 8322 ;; 8323 sparc*) 8324 disas_config "SPARC" 8325 ;; 8326 xtensa*) 8327 disas_config "XTENSA" 8328 ;; 8329 esac 8330done 8331if test "$tcg_interpreter" = "yes" ; then 8332 disas_config "TCI" 8333fi 8334 8335# Newer kernels on s390 check for an S390_PGSTE program header and 8336# enable the pgste page table extensions in that case. This makes 8337# the vm.allocate_pgste sysctl unnecessary. We enable this program 8338# header if 8339# - we build on s390x 8340# - we build the system emulation for s390x (qemu-system-s390x) 8341# - KVM is enabled 8342# - the linker supports --s390-pgste 8343if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \ 8344 test "$ARCH" = "s390x" && test "$kvm" = "yes"; then 8345 if ld_has --s390-pgste ; then 8346 ldflags="-Wl,--s390-pgste $ldflags" 8347 fi 8348fi 8349 8350echo "QEMU_LDFLAGS+=$ldflags" >> $config_target_mak 8351echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak 8352 8353done # for target in $targets 8354 8355echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak 8356echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak 8357 8358if [ "$fdt" = "git" ]; then 8359 echo "config-host.h: dtc/all" >> $config_host_mak 8360fi 8361if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then 8362 echo "config-host.h: capstone/all" >> $config_host_mak 8363fi 8364if test -n "$LIBCAPSTONE"; then 8365 echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak 8366fi 8367 8368if test "$numa" = "yes"; then 8369 echo "CONFIG_NUMA=y" >> $config_host_mak 8370fi 8371 8372if test "$ccache_cpp2" = "yes"; then 8373 echo "export CCACHE_CPP2=y" >> $config_host_mak 8374fi 8375 8376if test "$safe_stack" = "yes"; then 8377 echo "CONFIG_SAFESTACK=y" >> $config_host_mak 8378fi 8379 8380# If we're using a separate build tree, set it up now. 8381# DIRS are directories which we simply mkdir in the build tree; 8382# LINKS are things to symlink back into the source tree 8383# (these can be both files and directories). 8384# Caution: do not add files or directories here using wildcards. This 8385# will result in problems later if a new file matching the wildcard is 8386# added to the source tree -- nothing will cause configure to be rerun 8387# so the build tree will be missing the link back to the new file, and 8388# tests might fail. Prefer to keep the relevant files in their own 8389# directory and symlink the directory instead. 8390DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" 8391DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" 8392DIRS="$DIRS docs docs/interop fsdev scsi" 8393DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" 8394DIRS="$DIRS roms/seabios" 8395LINKS="Makefile" 8396LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile" 8397LINKS="$LINKS tests/tcg/Makefile.target" 8398LINKS="$LINKS tests/plugin/Makefile" 8399LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps" 8400LINKS="$LINKS pc-bios/s390-ccw/Makefile" 8401LINKS="$LINKS roms/seabios/Makefile" 8402LINKS="$LINKS pc-bios/qemu-icon.bmp" 8403LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit 8404LINKS="$LINKS tests/acceptance tests/data" 8405LINKS="$LINKS tests/qemu-iotests/check" 8406LINKS="$LINKS python" 8407for bios_file in \ 8408 $source_path/pc-bios/*.bin \ 8409 $source_path/pc-bios/*.lid \ 8410 $source_path/pc-bios/*.rom \ 8411 $source_path/pc-bios/*.dtb \ 8412 $source_path/pc-bios/*.img \ 8413 $source_path/pc-bios/openbios-* \ 8414 $source_path/pc-bios/u-boot.* \ 8415 $source_path/pc-bios/edk2-*.fd.bz2 \ 8416 $source_path/pc-bios/palcode-* 8417do 8418 LINKS="$LINKS pc-bios/$(basename $bios_file)" 8419done 8420mkdir -p $DIRS 8421for f in $LINKS ; do 8422 if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then 8423 symlink "$source_path/$f" "$f" 8424 fi 8425done 8426 8427(for i in $cross_cc_vars; do 8428 export $i 8429done 8430export target_list source_path use_containers 8431$source_path/tests/tcg/configure.sh) 8432 8433# temporary config to build submodules 8434for rom in seabios; do 8435 config_mak=roms/$rom/config.mak 8436 echo "# Automatically generated by configure - do not modify" > $config_mak 8437 echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak 8438 echo "AS=$as" >> $config_mak 8439 echo "CCAS=$ccas" >> $config_mak 8440 echo "CC=$cc" >> $config_mak 8441 echo "BCC=bcc" >> $config_mak 8442 echo "CPP=$cpp" >> $config_mak 8443 echo "OBJCOPY=objcopy" >> $config_mak 8444 echo "IASL=$iasl" >> $config_mak 8445 echo "LD=$ld" >> $config_mak 8446 echo "RANLIB=$ranlib" >> $config_mak 8447done 8448 8449# set up qemu-iotests in this build directory 8450iotests_common_env="tests/qemu-iotests/common.env" 8451 8452echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" 8453echo >> "$iotests_common_env" 8454echo "export PYTHON='$python'" >> "$iotests_common_env" 8455 8456if test "$skip_meson" = no; then 8457cross="config-meson.cross.new" 8458meson_quote() { 8459 echo "['$(echo $* | sed "s/ /','/g")']" 8460} 8461 8462echo "# Automatically generated by configure - do not modify" > $cross 8463echo "[properties]" >> $cross 8464test -z "$cxx" && echo "link_language = 'c'" >> $cross 8465echo "[binaries]" >> $cross 8466echo "c = $(meson_quote $cc)" >> $cross 8467test -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross 8468echo "ar = $(meson_quote $ar)" >> $cross 8469echo "nm = $(meson_quote $nm)" >> $cross 8470echo "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross 8471echo "ranlib = $(meson_quote $ranlib)" >> $cross 8472echo "strip = $(meson_quote $strip)" >> $cross 8473echo "windres = $(meson_quote $windres)" >> $cross 8474if test -n "$cross_prefix"; then 8475 cross_arg="--cross-file config-meson.cross" 8476 # Hack: Meson expects an absolute path for the *build* machine 8477 # for the prefix, so add a slash in front of a Windows path that 8478 # includes a drive letter. 8479 # 8480 # See https://github.com/mesonbuild/meson/issues/7577. 8481 echo "[host_machine]" >> $cross 8482 if test "$mingw32" = "yes" ; then 8483 echo "system = 'windows'" >> $cross 8484 case $prefix in 8485 ?:*) pre_prefix=/ ;; 8486 esac 8487 fi 8488 case "$ARCH" in 8489 i386|x86_64) 8490 echo "cpu_family = 'x86'" >> $cross 8491 ;; 8492 ppc64le) 8493 echo "cpu_family = 'ppc64'" >> $cross 8494 ;; 8495 *) 8496 echo "cpu_family = '$ARCH'" >> $cross 8497 ;; 8498 esac 8499 echo "cpu = '$cpu'" >> $cross 8500 if test "$bigendian" = "yes" ; then 8501 echo "endian = 'big'" >> $cross 8502 else 8503 echo "endian = 'little'" >> $cross 8504 fi 8505else 8506 cross_arg="--native-file config-meson.cross" 8507fi 8508mv $cross config-meson.cross 8509 8510rm -rf meson-private meson-info meson-logs 8511NINJA=$PWD/ninjatool $meson setup \ 8512 --prefix "${pre_prefix}$prefix" \ 8513 --libdir "${pre_prefix}$libdir" \ 8514 --libexecdir "${pre_prefix}$libexecdir" \ 8515 --bindir "${pre_prefix}$bindir" \ 8516 --includedir "${pre_prefix}$includedir" \ 8517 --datadir "${pre_prefix}$datadir" \ 8518 --mandir "${pre_prefix}$mandir" \ 8519 --sysconfdir "${pre_prefix}$sysconfdir" \ 8520 --localstatedir "${pre_prefix}$local_statedir" \ 8521 -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ 8522 -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ 8523 -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ 8524 -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ 8525 -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ 8526 -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ 8527 $cross_arg \ 8528 "$PWD" "$source_path" 8529 8530if test "$?" -ne 0 ; then 8531 error_exit "meson setup failed" 8532fi 8533touch ninjatool.stamp 8534fi 8535 8536# Save the configure command line for later reuse. 8537cat <<EOD >config.status 8538#!/bin/sh 8539# Generated by configure. 8540# Run this file to recreate the current configuration. 8541# Compiler output produced by configure, useful for debugging 8542# configure, is in config.log if it exists. 8543EOD 8544 8545preserve_env() { 8546 envname=$1 8547 8548 eval envval=\$$envname 8549 8550 if test -n "$envval" 8551 then 8552 echo "$envname='$envval'" >> config.status 8553 echo "export $envname" >> config.status 8554 else 8555 echo "unset $envname" >> config.status 8556 fi 8557} 8558 8559# Preserve various env variables that influence what 8560# features/build target configure will detect 8561preserve_env AR 8562preserve_env AS 8563preserve_env CC 8564preserve_env CPP 8565preserve_env CXX 8566preserve_env INSTALL 8567preserve_env LD 8568preserve_env LD_LIBRARY_PATH 8569preserve_env LIBTOOL 8570preserve_env MAKE 8571preserve_env NM 8572preserve_env OBJCOPY 8573preserve_env PATH 8574preserve_env PKG_CONFIG 8575preserve_env PKG_CONFIG_LIBDIR 8576preserve_env PKG_CONFIG_PATH 8577preserve_env PYTHON 8578preserve_env SDL2_CONFIG 8579preserve_env SMBD 8580preserve_env STRIP 8581preserve_env WINDRES 8582 8583printf "exec" >>config.status 8584for i in "$0" "$@"; do 8585 test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status 8586done 8587echo ' "$@"' >>config.status 8588chmod +x config.status 8589 8590rm -r "$TMPDIR1" 8591