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