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