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