From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.3 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F1FB2C433E2 for ; Thu, 3 Sep 2020 08:31:19 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 199B2205F4 for ; Thu, 3 Sep 2020 08:31:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="UjHckIIo" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 199B2205F4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:53918 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kDkeM-0006Yn-6k for qemu-devel@archiver.kernel.org; Thu, 03 Sep 2020 04:31:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52206) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kDkb1-0003I6-6N for qemu-devel@nongnu.org; Thu, 03 Sep 2020 04:27:51 -0400 Received: from us-smtp-2.mimecast.com ([205.139.110.61]:48054 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kDkat-0000hl-T3 for qemu-devel@nongnu.org; Thu, 03 Sep 2020 04:27:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1599121663; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references; bh=l0EJxz0dKc55j0WznGLi7kBiuXX7tNWTpfMQ4ceBH4U=; b=UjHckIIoW4Cbq6GSAVRo34jiIyJBYF2Tfiv/n5MwbqIWZC+BuOi+ZTw7QxLiiQDAnsUftl OVvGDJytpM4Op1XDj3TTXfwu2ZHi88pIVtOLAENacAxpwQuTX/89Y652nToSBsqRRN9kKg qsMwQrzJRrfa5Ds8vAxVxoJzjcM9Jqc= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-262-Ue9UmSY-NhKjFftjRnRLaw-1; Thu, 03 Sep 2020 04:27:23 -0400 X-MC-Unique: Ue9UmSY-NhKjFftjRnRLaw-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C638985C706; Thu, 3 Sep 2020 08:27:22 +0000 (UTC) Received: from redhat.com (ovpn-114-170.ams2.redhat.com [10.36.114.170]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 06F3C65F5E; Thu, 3 Sep 2020 08:27:16 +0000 (UTC) Date: Thu, 3 Sep 2020 09:27:14 +0100 From: Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= To: Yonggang Luo Subject: Re: [PATCH v3 08/12] ci: fixes msys2 build by upgrading capstone to 4.0.2 Message-ID: <20200903082714.GF441291@redhat.com> References: <20200903074313.1498-1-luoyonggang@gmail.com> <20200903074313.1498-9-luoyonggang@gmail.com> MIME-Version: 1.0 In-Reply-To: <20200903074313.1498-9-luoyonggang@gmail.com> User-Agent: Mutt/1.14.6 (2020-07-11) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=berrange@redhat.com X-Mimecast-Spam-Score: 0.004 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Received-SPF: pass client-ip=205.139.110.61; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/03 01:28:33 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Daniel =?utf-8?B?UC4gQmVycmFuZ8Op?= Cc: Paolo Bonzini , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" On Thu, Sep 03, 2020 at 03:43:09PM +0800, Yonggang Luo wrote: > Signed-off-by: Yonggang Luo > --- > capstone | 2 +- > configure | 16574 ++++++++++++++++++++++++++-------------------------- > 2 files changed, 8288 insertions(+), 8288 deletions(-) Again you've added & removed every single line. > > diff --git a/capstone b/capstone > index 22ead3e0bf..1d23053284 160000 > --- a/capstone > +++ b/capstone > @@ -1 +1 @@ > -Subproject commit 22ead3e0bfdb87516656453336160e0a37b066bf > +Subproject commit 1d230532840a37ac032c6ab80128238fc930c6c1 > diff --git a/configure b/configure > index 5f2bcc4b57..e42d210e5f 100755 > --- a/configure > +++ b/configure > @@ -1,8287 +1,8287 @@ > -#!/bin/sh > -# > -# qemu configure script (c) 2003 Fabrice Bellard > -# > - > -# Unset some variables known to interfere with behavior of common tools, > -# just as autoconf does. > -CLICOLOR_FORCE= GREP_OPTIONS= > -unset CLICOLOR_FORCE GREP_OPTIONS > - > -# Don't allow CCACHE, if present, to use cached results of compile tests! > -export CCACHE_RECACHE=yes > - > -# make source path absolute > -source_path=$(cd "$(dirname -- "$0")"; pwd) > -build_path=$PWD > -if [ "$MSYSTEM" = "MINGW64" -o "$MSYSTEM" = "MINGW32" ]; then > -source_path=$(cd "$(dirname -- "$0")"; pwd -W) > -build_path=`pwd -W` > -fi > - > -if test "$build_path" = "$source_path" > -then > - echo "Using './build' as the directory for build output" > - > - MARKER=build/auto-created-by-configure > - > - if test -e build > - then > - if test -f $MARKER > - then > - rm -rf build > - else > - echo "ERROR: ./build dir already exists and was not previously created by configure" > - exit 1 > - fi > - fi > - > - mkdir build > - touch $MARKER > - > - cat > GNUmakefile <<'EOF' > -# This file is auto-generated by configure to support in-source tree > -# 'make' command invocation > - > -ifeq ($(MAKECMDGOALS),) > -recurse: all > -endif > - > -.NOTPARALLEL: % > -%: force > - @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...' > - @$(MAKE) -C build -f Makefile $(MAKECMDGOALS) > - @if test "$(MAKECMDGOALS)" = "distclean" && \ > - test -e build/auto-created-by-configure ; \ > - then \ > - rm -rf build GNUmakefile ; \ > - fi > -force: ; > -.PHONY: force > -GNUmakefile: ; > - > -EOF > - cd build > - exec $source_path/configure "$@" > -fi > - > -# Temporary directory used for files created while > -# configure runs. Since it is in the build directory > -# we can safely blow away any previous version of it > -# (and we need not jump through hoops to try to delete > -# it when configure exits.) > -TMPDIR1="config-temp" > -rm -rf "${TMPDIR1}" > -mkdir -p "${TMPDIR1}" > -if [ $? -ne 0 ]; then > - echo "ERROR: failed to create temporary directory" > - exit 1 > -fi > - > -TMPB="qemu-conf" > -TMPC="${TMPDIR1}/${TMPB}.c" > -TMPO="${TMPDIR1}/${TMPB}.o" > -TMPCXX="${TMPDIR1}/${TMPB}.cxx" > -TMPE="${TMPDIR1}/${TMPB}.exe" > -TMPTXT="${TMPDIR1}/${TMPB}.txt" > - > -rm -f config.log > - > -# Print a helpful header at the top of config.log > -echo "# QEMU configure log $(date)" >> config.log > -printf "# Configured with:" >> config.log > -printf " '%s'" "$0" "$@" >> config.log > -echo >> config.log > -echo "#" >> config.log > - > -print_error() { > - (echo > - echo "ERROR: $1" > - while test -n "$2"; do > - echo " $2" > - shift > - done > - echo) >&2 > -} > - > -error_exit() { > - print_error "$@" > - exit 1 > -} > - > -do_compiler() { > - # Run the compiler, capturing its output to the log. First argument > - # is compiler binary to execute. > - local compiler="$1" > - shift > - if test -n "$BASH_VERSION"; then eval ' > - echo >>config.log " > -funcs: ${FUNCNAME[*]} > -lines: ${BASH_LINENO[*]}" > - '; fi > - echo $compiler "$@" >> config.log > - $compiler "$@" >> config.log 2>&1 || return $? > - # Test passed. If this is an --enable-werror build, rerun > - # the test with -Werror and bail out if it fails. This > - # makes warning-generating-errors in configure test code > - # obvious to developers. > - if test "$werror" != "yes"; then > - return 0 > - fi > - # Don't bother rerunning the compile if we were already using -Werror > - case "$*" in > - *-Werror*) > - return 0 > - ;; > - esac > - echo $compiler -Werror "$@" >> config.log > - $compiler -Werror "$@" >> config.log 2>&1 && return $? > - error_exit "configure test passed without -Werror but failed with -Werror." \ > - "This is probably a bug in the configure script. The failing command" \ > - "will be at the bottom of config.log." \ > - "You can run configure with --disable-werror to bypass this check." > -} > - > -do_cc() { > - do_compiler "$cc" "$@" > -} > - > -do_cxx() { > - do_compiler "$cxx" "$@" > -} > - > -# Append $2 to the variable named $1, with space separation > -add_to() { > - eval $1=\${$1:+\"\$$1 \"}\$2 > -} > - > -update_cxxflags() { > - # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those > - # options which some versions of GCC's C++ compiler complain about > - # because they only make sense for C programs. > - QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS" > - CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/) > - for arg in $QEMU_CFLAGS; do > - case $arg in > - -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ > - -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls) > - ;; > - *) > - QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg > - ;; > - esac > - done > -} > - > -compile_object() { > - local_cflags="$1" > - do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC > -} > - > -compile_prog() { > - local_cflags="$1" > - local_ldflags="$2" > - do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags > -} > - > -# symbolically link $1 to $2. Portable version of "ln -sf". > -symlink() { > - rm -rf "$2" > - mkdir -p "$(dirname "$2")" > - ln -s "$1" "$2" > -} > - > -# check whether a command is available to this shell (may be either an > -# executable or a builtin) > -has() { > - type "$1" >/dev/null 2>&1 > -} > - > -# search for an executable in PATH > -path_of() { > - local_command="$1" > - local_ifs="$IFS" > - local_dir="" > - > - # pathname has a dir component? > - if [ "${local_command#*/}" != "$local_command" ]; then > - if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then > - echo "$local_command" > - return 0 > - fi > - fi > - if [ -z "$local_command" ]; then > - return 1 > - fi > - > - IFS=: > - for local_dir in $PATH; do > - if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then > - echo "$local_dir/$local_command" > - IFS="${local_ifs:-$(printf ' \t\n')}" > - return 0 > - fi > - done > - # not found > - IFS="${local_ifs:-$(printf ' \t\n')}" > - return 1 > -} > - > -version_ge () { > - local_ver1=`echo $1 | tr . ' '` > - local_ver2=`echo $2 | tr . ' '` > - while true; do > - set x $local_ver1 > - local_first=${2-0} > - # 'shift 2' if $2 is set, or 'shift' if $2 is not set > - shift ${2:+2} > - local_ver1=$* > - set x $local_ver2 > - # the second argument finished, the first must be greater or equal > - test $# = 1 && return 0 > - test $local_first -lt $2 && return 1 > - test $local_first -gt $2 && return 0 > - shift ${2:+2} > - local_ver2=$* > - done > -} > - > -have_backend () { > - echo "$trace_backends" | grep "$1" >/dev/null > -} > - > -glob() { > - eval test -z '"${1#'"$2"'}"' > -} > - > -supported_hax_target() { > - test "$hax" = "yes" || return 1 > - glob "$1" "*-softmmu" || return 1 > - case "${1%-softmmu}" in > - i386|x86_64) > - return 0 > - ;; > - esac > - return 1 > -} > - > -supported_kvm_target() { > - test "$kvm" = "yes" || return 1 > - glob "$1" "*-softmmu" || return 1 > - case "${1%-softmmu}:$cpu" in > - arm:arm | aarch64:aarch64 | \ > - i386:i386 | i386:x86_64 | i386:x32 | \ > - x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \ > - mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \ > - ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \ > - s390x:s390x) > - return 0 > - ;; > - esac > - return 1 > -} > - > -supported_xen_target() { > - test "$xen" = "yes" || return 1 > - glob "$1" "*-softmmu" || return 1 > - # Only i386 and x86_64 provide the xenpv machine. > - case "${1%-softmmu}" in > - i386|x86_64) > - return 0 > - ;; > - esac > - return 1 > -} > - > -supported_hvf_target() { > - test "$hvf" = "yes" || return 1 > - glob "$1" "*-softmmu" || return 1 > - case "${1%-softmmu}" in > - x86_64) > - return 0 > - ;; > - esac > - return 1 > -} > - > -supported_whpx_target() { > - test "$whpx" = "yes" || return 1 > - glob "$1" "*-softmmu" || return 1 > - case "${1%-softmmu}" in > - i386|x86_64) > - return 0 > - ;; > - esac > - return 1 > -} > - > -supported_target() { > - case "$1" in > - *-softmmu) > - ;; > - *-linux-user) > - if test "$linux" != "yes"; then > - print_error "Target '$target' is only available on a Linux host" > - return 1 > - fi > - ;; > - *-bsd-user) > - if test "$bsd" != "yes"; then > - print_error "Target '$target' is only available on a BSD host" > - return 1 > - fi > - ;; > - *) > - print_error "Invalid target name '$target'" > - return 1 > - ;; > - esac > - test "$tcg" = "yes" && return 0 > - supported_kvm_target "$1" && return 0 > - supported_xen_target "$1" && return 0 > - supported_hax_target "$1" && return 0 > - supported_hvf_target "$1" && return 0 > - supported_whpx_target "$1" && return 0 > - print_error "TCG disabled, but hardware accelerator not available for '$target'" > - return 1 > -} > - > - > -ld_has() { > - $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1 > -} > - > -check_valid_build_path="[[:space:]:]" > -if [ "$MSYSTEM" = "MINGW64" -o "$MSYSTEM" = "MINGW32" ]; then > -check_valid_build_path="[[:space:]]" > -fi > - > -if printf %s\\n "$source_path" "$build_path" | grep -q "$check_valid_build_path"; > -then > - error_exit "main directory cannot contain spaces nor colons" > -fi > - > -# default parameters > -cpu="" > -iasl="iasl" > -interp_prefix="/usr/gnemul/qemu-%M" > -static="no" > -cross_prefix="" > -audio_drv_list="" > -block_drv_rw_whitelist="" > -block_drv_ro_whitelist="" > -host_cc="cc" > -libs_tools="" > -audio_win_int="" > -libs_qga="" > -debug_info="yes" > -stack_protector="" > -safe_stack="" > -use_containers="yes" > -gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb") > - > -if test -e "$source_path/.git" > -then > - git_update=yes > - git_submodules="ui/keycodemapdb" > - git_submodules="$git_submodules tests/fp/berkeley-testfloat-3" > - git_submodules="$git_submodules tests/fp/berkeley-softfloat-3" > -else > - git_update=no > - git_submodules="" > - > - if ! test -f "$source_path/ui/keycodemapdb/README" > - then > - echo > - echo "ERROR: missing file $source_path/ui/keycodemapdb/README" > - echo > - echo "This is not a GIT checkout but module content appears to" > - echo "be missing. Do not use 'git archive' or GitHub download links" > - echo "to acquire QEMU source archives. Non-GIT builds are only" > - echo "supported with source archives linked from:" > - echo > - echo " https://www.qemu.org/download/#source" > - echo > - echo "Developers working with GIT can use scripts/archive-source.sh" > - echo "if they need to create valid source archives." > - echo > - exit 1 > - fi > -fi > -git="git" > - > -# Don't accept a target_list environment variable. > -unset target_list > -unset target_list_exclude > - > -# Default value for a variable defining feature "foo". > -# * foo="no" feature will only be used if --enable-foo arg is given > -# * foo="" feature will be searched for, and if found, will be used > -# unless --disable-foo is given > -# * foo="yes" this value will only be set by --enable-foo flag. > -# feature will searched for, > -# if not found, configure exits with error > -# > -# Always add --enable-foo and --disable-foo command line args. > -# Distributions want to ensure that several features are compiled in, and it > -# is impossible without a --enable-foo that exits if a feature is not found. > - > -brlapi="" > -curl="" > -curses="" > -docs="" > -fdt="" > -netmap="no" > -sdl="auto" > -sdl_image="auto" > -virtfs="" > -mpath="" > -vnc="enabled" > -sparse="no" > -vde="" > -vnc_sasl="auto" > -vnc_jpeg="auto" > -vnc_png="auto" > -xkbcommon="auto" > -xen="" > -xen_ctrl_version="" > -xen_pci_passthrough="" > -linux_aio="" > -linux_io_uring="" > -cap_ng="" > -attr="" > -libattr="" > -xfs="" > -tcg="yes" > -membarrier="" > -vhost_net="" > -vhost_crypto="" > -vhost_scsi="" > -vhost_vsock="" > -vhost_user="" > -vhost_user_fs="" > -kvm="no" > -hax="no" > -hvf="no" > -whpx="no" > -rdma="" > -pvrdma="" > -gprof="no" > -debug_tcg="no" > -debug="no" > -sanitizers="no" > -tsan="no" > -fortify_source="" > -strip_opt="yes" > -tcg_interpreter="no" > -bigendian="no" > -mingw32="no" > -gcov="no" > -EXESUF="" > -HOST_DSOSUF=".so" > -LDFLAGS_SHARED="-shared" > -modules="no" > -module_upgrades="no" > -prefix="/usr/local" > -qemu_suffix="qemu" > -slirp="" > -oss_lib="" > -bsd="no" > -linux="no" > -solaris="no" > -profiler="no" > -cocoa="no" > -softmmu="yes" > -linux_user="no" > -bsd_user="no" > -blobs="yes" > -edk2_blobs="no" > -pkgversion="" > -pie="" > -qom_cast_debug="yes" > -trace_backends="log" > -trace_file="trace" > -spice="" > -rbd="" > -smartcard="" > -u2f="auto" > -libusb="" > -usb_redir="" > -opengl="" > -opengl_dmabuf="no" > -cpuid_h="no" > -avx2_opt="" > -capstone="" > -lzo="" > -snappy="" > -bzip2="" > -lzfse="" > -zstd="" > -guest_agent="" > -guest_agent_with_vss="no" > -guest_agent_ntddscsi="no" > -guest_agent_msi="" > -vss_win32_sdk="" > -win_sdk="no" > -want_tools="" > -libiscsi="" > -libnfs="" > -coroutine="" > -coroutine_pool="" > -debug_stack_usage="no" > -crypto_afalg="no" > -seccomp="" > -glusterfs="" > -glusterfs_xlator_opt="no" > -glusterfs_discard="no" > -glusterfs_fallocate="no" > -glusterfs_zerofill="no" > -glusterfs_ftruncate_has_stat="no" > -glusterfs_iocb_has_stat="no" > -gtk="" > -gtk_gl="no" > -tls_priority="NORMAL" > -gnutls="" > -nettle="" > -nettle_xts="no" > -gcrypt="" > -gcrypt_hmac="no" > -gcrypt_xts="no" > -qemu_private_xts="yes" > -auth_pam="" > -vte="" > -virglrenderer="" > -tpm="" > -libssh="" > -live_block_migration="yes" > -numa="" > -tcmalloc="no" > -jemalloc="no" > -replication="yes" > -bochs="yes" > -cloop="yes" > -dmg="yes" > -qcow1="yes" > -vdi="yes" > -vvfat="yes" > -qed="yes" > -parallels="yes" > -sheepdog="yes" > -libxml2="" > -debug_mutex="no" > -libpmem="" > -default_devices="yes" > -plugins="no" > -fuzzing="no" > -rng_none="no" > -secret_keyring="" > -libdaxctl="" > -meson="" > -ninja="" > -skip_meson=no > -gettext="" > - > -bogus_os="no" > -malloc_trim="" > - > -# parse CC options first > -for opt do > - optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') > - case "$opt" in > - --cross-prefix=*) cross_prefix="$optarg" > - ;; > - --cc=*) CC="$optarg" > - ;; > - --cxx=*) CXX="$optarg" > - ;; > - --cpu=*) cpu="$optarg" > - ;; > - --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg" > - QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" > - ;; > - --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg" > - ;; > - --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" > - EXTRA_LDFLAGS="$optarg" > - ;; > - --enable-debug-info) debug_info="yes" > - ;; > - --disable-debug-info) debug_info="no" > - ;; > - --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" > - ;; > - --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*} > - eval "cross_cc_cflags_${cc_arch}=\$optarg" > - cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}" > - ;; > - --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} > - cc_archs="$cc_archs $cc_arch" > - eval "cross_cc_${cc_arch}=\$optarg" > - cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}" > - ;; > - esac > -done > -# OS specific > -# Using uname is really, really broken. Once we have the right set of checks > -# we can eliminate its usage altogether. > - > -# Preferred compiler: > -# ${CC} (if set) > -# ${cross_prefix}gcc (if cross-prefix specified) > -# system compiler > -if test -z "${CC}${cross_prefix}"; then > - cc="$host_cc" > -else > - cc="${CC-${cross_prefix}gcc}" > -fi > - > -if test -z "${CXX}${cross_prefix}"; then > - cxx="c++" > -else > - cxx="${CXX-${cross_prefix}g++}" > -fi > - > -ar="${AR-${cross_prefix}ar}" > -as="${AS-${cross_prefix}as}" > -ccas="${CCAS-$cc}" > -cpp="${CPP-$cc -E}" > -objcopy="${OBJCOPY-${cross_prefix}objcopy}" > -ld="${LD-${cross_prefix}ld}" > -ranlib="${RANLIB-${cross_prefix}ranlib}" > -nm="${NM-${cross_prefix}nm}" > -strip="${STRIP-${cross_prefix}strip}" > -windres="${WINDRES-${cross_prefix}windres}" > -pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" > -query_pkg_config() { > - "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" > -} > -pkg_config=query_pkg_config > -sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}" > - > -# If the user hasn't specified ARFLAGS, default to 'rv', just as make does. > -ARFLAGS="${ARFLAGS-rv}" > - > -# default flags for all hosts > -# We use -fwrapv to tell the compiler that we require a C dialect where > -# left shift of signed integers is well defined and has the expected > -# 2s-complement style results. (Both clang and gcc agree that it > -# provides these semantics.) > -QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS" > -QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" > -QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" > -QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" > -QEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include" > -QEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl" > -CFLAGS="-std=gnu99 -Wall" > - > - > -# running configure in the source tree? > -# we know that's the case if configure is there. > -if test -f "./configure"; then > - pwd_is_source_path="y" > -else > - pwd_is_source_path="n" > -fi > - > -check_define() { > -cat > $TMPC < -#if !defined($1) > -#error $1 not defined > -#endif > -int main(void) { return 0; } > -EOF > - compile_object > -} > - > -check_include() { > -cat > $TMPC < -#include <$1> > -int main(void) { return 0; } > -EOF > - compile_object > -} > - > -write_c_skeleton() { > - cat > $TMPC < -int main(void) { return 0; } > -EOF > -} > - > -write_c_fuzzer_skeleton() { > - cat > $TMPC < -#include > -#include > -int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size); > -int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; } > -EOF > -} > - > -if check_define __linux__ ; then > - targetos="Linux" > -elif check_define _WIN32 ; then > - targetos='MINGW32' > -elif check_define __OpenBSD__ ; then > - targetos='OpenBSD' > -elif check_define __sun__ ; then > - targetos='SunOS' > -elif check_define __HAIKU__ ; then > - targetos='Haiku' > -elif check_define __FreeBSD__ ; then > - targetos='FreeBSD' > -elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then > - targetos='GNU/kFreeBSD' > -elif check_define __DragonFly__ ; then > - targetos='DragonFly' > -elif check_define __NetBSD__; then > - targetos='NetBSD' > -elif check_define __APPLE__; then > - targetos='Darwin' > -else > - # This is a fatal error, but don't report it yet, because we > - # might be going to just print the --help text, or it might > - # be the result of a missing compiler. > - targetos='bogus' > - bogus_os='yes' > -fi > - > -# Some host OSes need non-standard checks for which CPU to use. > -# Note that these checks are broken for cross-compilation: if you're > -# cross-compiling to one of these OSes then you'll need to specify > -# the correct CPU with the --cpu option. > -case $targetos in > -Darwin) > - # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can > - # run 64-bit userspace code. > - # If the user didn't specify a CPU explicitly and the kernel says this is > - # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code. > - if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then > - cpu="x86_64" > - fi > - ;; > -SunOS) > - # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo > - if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then > - cpu="x86_64" > - fi > -esac > - > -if test ! -z "$cpu" ; then > - # command line argument > - : > -elif check_define __i386__ ; then > - cpu="i386" > -elif check_define __x86_64__ ; then > - if check_define __ILP32__ ; then > - cpu="x32" > - else > - cpu="x86_64" > - fi > -elif check_define __sparc__ ; then > - if check_define __arch64__ ; then > - cpu="sparc64" > - else > - cpu="sparc" > - fi > -elif check_define _ARCH_PPC ; then > - if check_define _ARCH_PPC64 ; then > - if check_define _LITTLE_ENDIAN ; then > - cpu="ppc64le" > - else > - cpu="ppc64" > - fi > - else > - cpu="ppc" > - fi > -elif check_define __mips__ ; then > - cpu="mips" > -elif check_define __s390__ ; then > - if check_define __s390x__ ; then > - cpu="s390x" > - else > - cpu="s390" > - fi > -elif check_define __riscv ; then > - if check_define _LP64 ; then > - cpu="riscv64" > - else > - cpu="riscv32" > - fi > -elif check_define __arm__ ; then > - cpu="arm" > -elif check_define __aarch64__ ; then > - cpu="aarch64" > -else > - cpu=$(uname -m) > -fi > - > -ARCH= > -# Normalise host CPU name and set ARCH. > -# Note that this case should only have supported host CPUs, not guests. > -case "$cpu" in > - ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64) > - ;; > - ppc64le) > - ARCH="ppc64" > - ;; > - i386|i486|i586|i686|i86pc|BePC) > - cpu="i386" > - ;; > - x86_64|amd64) > - cpu="x86_64" > - ;; > - armv*b|armv*l|arm) > - cpu="arm" > - ;; > - aarch64) > - cpu="aarch64" > - ;; > - mips*) > - cpu="mips" > - ;; > - sparc|sun4[cdmuv]) > - cpu="sparc" > - ;; > - *) > - # This will result in either an error or falling back to TCI later > - ARCH=unknown > - ;; > -esac > -if test -z "$ARCH"; then > - ARCH="$cpu" > -fi > - > -# OS specific > - > -# host *BSD for user mode > -HOST_VARIANT_DIR="" > - > -case $targetos in > -MINGW32*) > - mingw32="yes" > - hax="yes" > - vhost_user="no" > - audio_possible_drivers="dsound sdl" > - if check_include dsound.h; then > - audio_drv_list="dsound" > - else > - audio_drv_list="" > - fi > - supported_os="yes" > - pie="no" > -;; > -GNU/kFreeBSD) > - bsd="yes" > - audio_drv_list="oss try-sdl" > - audio_possible_drivers="oss sdl pa" > -;; > -FreeBSD) > - bsd="yes" > - make="${MAKE-gmake}" > - audio_drv_list="oss try-sdl" > - audio_possible_drivers="oss sdl pa" > - # needed for kinfo_getvmmap(3) in libutil.h > - LIBS="-lutil $LIBS" > - netmap="" # enable netmap autodetect > - HOST_VARIANT_DIR="freebsd" > -;; > -DragonFly) > - bsd="yes" > - make="${MAKE-gmake}" > - audio_drv_list="oss try-sdl" > - audio_possible_drivers="oss sdl pa" > - HOST_VARIANT_DIR="dragonfly" > -;; > -NetBSD) > - bsd="yes" > - hax="yes" > - make="${MAKE-gmake}" > - audio_drv_list="oss try-sdl" > - audio_possible_drivers="oss sdl" > - oss_lib="-lossaudio" > - HOST_VARIANT_DIR="netbsd" > -;; > -OpenBSD) > - bsd="yes" > - make="${MAKE-gmake}" > - audio_drv_list="try-sdl" > - audio_possible_drivers="sdl" > - HOST_VARIANT_DIR="openbsd" > -;; > -Darwin) > - bsd="yes" > - darwin="yes" > - hax="yes" > - hvf="yes" > - LDFLAGS_SHARED="-bundle -undefined dynamic_lookup" > - if [ "$cpu" = "x86_64" ] ; then > - QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS" > - QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS" > - fi > - cocoa="yes" > - audio_drv_list="coreaudio try-sdl" > - audio_possible_drivers="coreaudio sdl" > - QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS" > - # Disable attempts to use ObjectiveC features in os/object.h since they > - # won't work when we're compiling with gcc as a C compiler. > - QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS" > - HOST_VARIANT_DIR="darwin" > -;; > -SunOS) > - solaris="yes" > - make="${MAKE-gmake}" > - install="${INSTALL-ginstall}" > - smbd="${SMBD-/usr/sfw/sbin/smbd}" > - if test -f /usr/include/sys/soundcard.h ; then > - audio_drv_list="oss try-sdl" > - fi > - audio_possible_drivers="oss sdl" > -# needed for CMSG_ macros in sys/socket.h > - QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS" > -# needed for TIOCWIN* defines in termios.h > - QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS" > - solarisnetlibs="-lsocket -lnsl -lresolv" > - LIBS="$solarisnetlibs $LIBS" > -;; > -Haiku) > - haiku="yes" > - QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS" > - LIBS="-lposix_error_mapper -lnetwork -lbsd $LIBS" > -;; > -Linux) > - audio_drv_list="try-pa oss" > - audio_possible_drivers="oss alsa sdl pa" > - linux="yes" > - linux_user="yes" > - kvm="yes" > - QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I${build_path}/linux-headers $QEMU_INCLUDES" > - libudev="yes" > -;; > -esac > - > -if [ "$bsd" = "yes" ] ; then > - if [ "$darwin" != "yes" ] ; then > - bsd_user="yes" > - fi > -fi > - > -: ${make=${MAKE-make}} > -: ${install=${INSTALL-install}} > -# We prefer python 3.x. A bare 'python' is traditionally > -# python 2.x, but some distros have it as python 3.x, so > -# we check that too > -python= > -explicit_python=no > -for binary in "${PYTHON-python3}" python > -do > - if has "$binary" > - then > - python=$(command -v "$binary") > - break > - fi > -done > - > -sphinx_build= > -for binary in sphinx-build-3 sphinx-build > -do > - if has "$binary" > - then > - sphinx_build=$(command -v "$binary") > - break > - fi > -done > - > -# Check for ancillary tools used in testing > -genisoimage= > -for binary in genisoimage mkisofs > -do > - if has $binary > - then > - genisoimage=$(command -v "$binary") > - break > - fi > -done > - > -: ${smbd=${SMBD-/usr/sbin/smbd}} > - > -# Default objcc to clang if available, otherwise use CC > -if has clang; then > - objcc=clang > -else > - objcc="$cc" > -fi > - > -if test "$mingw32" = "yes" ; then > - EXESUF=".exe" > - HOST_DSOSUF=".dll" > - # MinGW needs -mthreads for TLS and macro _MT. > - CFLAGS="-mthreads $CFLAGS" > - LIBS="-lwinmm -lws2_32 $LIBS" > - write_c_skeleton; > - if compile_prog "" "-liberty" ; then > - LIBS="-liberty $LIBS" > - fi > - prefix="c:/Program Files/QEMU" > - qemu_suffix="" > - libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga" > -fi > - > -werror="" > - > -for opt do > - optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') > - case "$opt" in > - --help|-h) show_help=yes > - ;; > - --version|-V) exec cat $source_path/VERSION > - ;; > - --prefix=*) prefix="$optarg" > - ;; > - --interp-prefix=*) interp_prefix="$optarg" > - ;; > - --cross-prefix=*) > - ;; > - --cc=*) > - ;; > - --host-cc=*) host_cc="$optarg" > - ;; > - --cxx=*) > - ;; > - --iasl=*) iasl="$optarg" > - ;; > - --objcc=*) objcc="$optarg" > - ;; > - --make=*) make="$optarg" > - ;; > - --install=*) install="$optarg" > - ;; > - --python=*) python="$optarg" ; explicit_python=yes > - ;; > - --sphinx-build=*) sphinx_build="$optarg" > - ;; > - --skip-meson) skip_meson=yes > - ;; > - --meson=*) meson="$optarg" > - ;; > - --ninja=*) ninja="$optarg" > - ;; > - --smbd=*) smbd="$optarg" > - ;; > - --extra-cflags=*) > - ;; > - --extra-cxxflags=*) > - ;; > - --extra-ldflags=*) > - ;; > - --enable-debug-info) > - ;; > - --disable-debug-info) > - ;; > - --cross-cc-*) > - ;; > - --enable-modules) > - modules="yes" > - ;; > - --disable-modules) > - modules="no" > - ;; > - --disable-module-upgrades) module_upgrades="no" > - ;; > - --enable-module-upgrades) module_upgrades="yes" > - ;; > - --cpu=*) > - ;; > - --target-list=*) target_list="$optarg" > - if test "$target_list_exclude"; then > - error_exit "Can't mix --target-list with --target-list-exclude" > - fi > - ;; > - --target-list-exclude=*) target_list_exclude="$optarg" > - if test "$target_list"; then > - error_exit "Can't mix --target-list-exclude with --target-list" > - fi > - ;; > - --enable-trace-backends=*) trace_backends="$optarg" > - ;; > - # XXX: backwards compatibility > - --enable-trace-backend=*) trace_backends="$optarg" > - ;; > - --with-trace-file=*) trace_file="$optarg" > - ;; > - --with-default-devices) default_devices="yes" > - ;; > - --without-default-devices) default_devices="no" > - ;; > - --enable-gprof) gprof="yes" > - ;; > - --enable-gcov) gcov="yes" > - ;; > - --static) > - static="yes" > - QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS" > - ;; > - --mandir=*) mandir="$optarg" > - ;; > - --bindir=*) bindir="$optarg" > - ;; > - --libdir=*) libdir="$optarg" > - ;; > - --libexecdir=*) libexecdir="$optarg" > - ;; > - --includedir=*) includedir="$optarg" > - ;; > - --datadir=*) datadir="$optarg" > - ;; > - --with-suffix=*) qemu_suffix="$optarg" > - ;; > - --docdir=*) qemu_docdir="$optarg" > - ;; > - --sysconfdir=*) sysconfdir="$optarg" > - ;; > - --localstatedir=*) local_statedir="$optarg" > - ;; > - --firmwarepath=*) firmwarepath="$optarg" > - ;; > - --host=*|--build=*|\ > - --disable-dependency-tracking|\ > - --sbindir=*|--sharedstatedir=*|\ > - --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\ > - --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*) > - # These switches are silently ignored, for compatibility with > - # autoconf-generated configure scripts. This allows QEMU's > - # configure to be used by RPM and similar macros that set > - # lots of directory switches by default. > - ;; > - --disable-sdl) sdl="disabled" > - ;; > - --enable-sdl) sdl="enabled" > - ;; > - --disable-sdl-image) sdl_image="disabled" > - ;; > - --enable-sdl-image) sdl_image="enabled" > - ;; > - --disable-qom-cast-debug) qom_cast_debug="no" > - ;; > - --enable-qom-cast-debug) qom_cast_debug="yes" > - ;; > - --disable-virtfs) virtfs="no" > - ;; > - --enable-virtfs) virtfs="yes" > - ;; > - --disable-mpath) mpath="no" > - ;; > - --enable-mpath) mpath="yes" > - ;; > - --disable-vnc) vnc="disabled" > - ;; > - --enable-vnc) vnc="enabled" > - ;; > - --disable-gettext) gettext="false" > - ;; > - --enable-gettext) gettext="true" > - ;; > - --oss-lib=*) oss_lib="$optarg" > - ;; > - --audio-drv-list=*) audio_drv_list="$optarg" > - ;; > - --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') > - ;; > - --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') > - ;; > - --enable-debug-tcg) debug_tcg="yes" > - ;; > - --disable-debug-tcg) debug_tcg="no" > - ;; > - --enable-debug) > - # Enable debugging options that aren't excessively noisy > - debug_tcg="yes" > - debug_mutex="yes" > - debug="yes" > - strip_opt="no" > - fortify_source="no" > - ;; > - --enable-sanitizers) sanitizers="yes" > - ;; > - --disable-sanitizers) sanitizers="no" > - ;; > - --enable-tsan) tsan="yes" > - ;; > - --disable-tsan) tsan="no" > - ;; > - --enable-sparse) sparse="yes" > - ;; > - --disable-sparse) sparse="no" > - ;; > - --disable-strip) strip_opt="no" > - ;; > - --disable-vnc-sasl) vnc_sasl="disabled" > - ;; > - --enable-vnc-sasl) vnc_sasl="enabled" > - ;; > - --disable-vnc-jpeg) vnc_jpeg="disabled" > - ;; > - --enable-vnc-jpeg) vnc_jpeg="enabled" > - ;; > - --disable-vnc-png) vnc_png="disabled" > - ;; > - --enable-vnc-png) vnc_png="enabled" > - ;; > - --disable-slirp) slirp="no" > - ;; > - --enable-slirp=git) slirp="git" > - ;; > - --enable-slirp=system) slirp="system" > - ;; > - --disable-vde) vde="no" > - ;; > - --enable-vde) vde="yes" > - ;; > - --disable-netmap) netmap="no" > - ;; > - --enable-netmap) netmap="yes" > - ;; > - --disable-xen) xen="no" > - ;; > - --enable-xen) xen="yes" > - ;; > - --disable-xen-pci-passthrough) xen_pci_passthrough="no" > - ;; > - --enable-xen-pci-passthrough) xen_pci_passthrough="yes" > - ;; > - --disable-brlapi) brlapi="no" > - ;; > - --enable-brlapi) brlapi="yes" > - ;; > - --disable-kvm) kvm="no" > - ;; > - --enable-kvm) kvm="yes" > - ;; > - --disable-hax) hax="no" > - ;; > - --enable-hax) hax="yes" > - ;; > - --disable-hvf) hvf="no" > - ;; > - --enable-hvf) hvf="yes" > - ;; > - --disable-whpx) whpx="no" > - ;; > - --enable-whpx) whpx="yes" > - ;; > - --disable-tcg-interpreter) tcg_interpreter="no" > - ;; > - --enable-tcg-interpreter) tcg_interpreter="yes" > - ;; > - --disable-cap-ng) cap_ng="no" > - ;; > - --enable-cap-ng) cap_ng="yes" > - ;; > - --disable-tcg) tcg="no" > - ;; > - --enable-tcg) tcg="yes" > - ;; > - --disable-malloc-trim) malloc_trim="no" > - ;; > - --enable-malloc-trim) malloc_trim="yes" > - ;; > - --disable-spice) spice="no" > - ;; > - --enable-spice) spice="yes" > - ;; > - --disable-libiscsi) libiscsi="no" > - ;; > - --enable-libiscsi) libiscsi="yes" > - ;; > - --disable-libnfs) libnfs="no" > - ;; > - --enable-libnfs) libnfs="yes" > - ;; > - --enable-profiler) profiler="yes" > - ;; > - --disable-cocoa) cocoa="no" > - ;; > - --enable-cocoa) > - cocoa="yes" ; > - audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)" > - ;; > - --disable-system) softmmu="no" > - ;; > - --enable-system) softmmu="yes" > - ;; > - --disable-user) > - linux_user="no" ; > - bsd_user="no" ; > - ;; > - --enable-user) ;; > - --disable-linux-user) linux_user="no" > - ;; > - --enable-linux-user) linux_user="yes" > - ;; > - --disable-bsd-user) bsd_user="no" > - ;; > - --enable-bsd-user) bsd_user="yes" > - ;; > - --enable-pie) pie="yes" > - ;; > - --disable-pie) pie="no" > - ;; > - --enable-werror) werror="yes" > - ;; > - --disable-werror) werror="no" > - ;; > - --enable-stack-protector) stack_protector="yes" > - ;; > - --disable-stack-protector) stack_protector="no" > - ;; > - --enable-safe-stack) safe_stack="yes" > - ;; > - --disable-safe-stack) safe_stack="no" > - ;; > - --disable-curses) curses="no" > - ;; > - --enable-curses) curses="yes" > - ;; > - --disable-iconv) iconv="no" > - ;; > - --enable-iconv) iconv="yes" > - ;; > - --disable-curl) curl="no" > - ;; > - --enable-curl) curl="yes" > - ;; > - --disable-fdt) fdt="no" > - ;; > - --enable-fdt) fdt="yes" > - ;; > - --disable-linux-aio) linux_aio="no" > - ;; > - --enable-linux-aio) linux_aio="yes" > - ;; > - --disable-linux-io-uring) linux_io_uring="no" > - ;; > - --enable-linux-io-uring) linux_io_uring="yes" > - ;; > - --disable-attr) attr="no" > - ;; > - --enable-attr) attr="yes" > - ;; > - --disable-membarrier) membarrier="no" > - ;; > - --enable-membarrier) membarrier="yes" > - ;; > - --disable-blobs) blobs="no" > - ;; > - --with-pkgversion=*) pkgversion="$optarg" > - ;; > - --with-coroutine=*) coroutine="$optarg" > - ;; > - --disable-coroutine-pool) coroutine_pool="no" > - ;; > - --enable-coroutine-pool) coroutine_pool="yes" > - ;; > - --enable-debug-stack-usage) debug_stack_usage="yes" > - ;; > - --enable-crypto-afalg) crypto_afalg="yes" > - ;; > - --disable-crypto-afalg) crypto_afalg="no" > - ;; > - --disable-docs) docs="no" > - ;; > - --enable-docs) docs="yes" > - ;; > - --disable-vhost-net) vhost_net="no" > - ;; > - --enable-vhost-net) vhost_net="yes" > - ;; > - --disable-vhost-crypto) vhost_crypto="no" > - ;; > - --enable-vhost-crypto) vhost_crypto="yes" > - ;; > - --disable-vhost-scsi) vhost_scsi="no" > - ;; > - --enable-vhost-scsi) vhost_scsi="yes" > - ;; > - --disable-vhost-vsock) vhost_vsock="no" > - ;; > - --enable-vhost-vsock) vhost_vsock="yes" > - ;; > - --disable-vhost-user-fs) vhost_user_fs="no" > - ;; > - --enable-vhost-user-fs) vhost_user_fs="yes" > - ;; > - --disable-opengl) opengl="no" > - ;; > - --enable-opengl) opengl="yes" > - ;; > - --disable-rbd) rbd="no" > - ;; > - --enable-rbd) rbd="yes" > - ;; > - --disable-xfsctl) xfs="no" > - ;; > - --enable-xfsctl) xfs="yes" > - ;; > - --disable-smartcard) smartcard="no" > - ;; > - --enable-smartcard) smartcard="yes" > - ;; > - --disable-u2f) u2f="disabled" > - ;; > - --enable-u2f) u2f="enabled" > - ;; > - --disable-libusb) libusb="no" > - ;; > - --enable-libusb) libusb="yes" > - ;; > - --disable-usb-redir) usb_redir="no" > - ;; > - --enable-usb-redir) usb_redir="yes" > - ;; > - --disable-zlib-test) > - ;; > - --disable-lzo) lzo="no" > - ;; > - --enable-lzo) lzo="yes" > - ;; > - --disable-snappy) snappy="no" > - ;; > - --enable-snappy) snappy="yes" > - ;; > - --disable-bzip2) bzip2="no" > - ;; > - --enable-bzip2) bzip2="yes" > - ;; > - --enable-lzfse) lzfse="yes" > - ;; > - --disable-lzfse) lzfse="no" > - ;; > - --disable-zstd) zstd="no" > - ;; > - --enable-zstd) zstd="yes" > - ;; > - --enable-guest-agent) guest_agent="yes" > - ;; > - --disable-guest-agent) guest_agent="no" > - ;; > - --enable-guest-agent-msi) guest_agent_msi="yes" > - ;; > - --disable-guest-agent-msi) guest_agent_msi="no" > - ;; > - --with-vss-sdk) vss_win32_sdk="" > - ;; > - --with-vss-sdk=*) vss_win32_sdk="$optarg" > - ;; > - --without-vss-sdk) vss_win32_sdk="no" > - ;; > - --with-win-sdk) win_sdk="" > - ;; > - --with-win-sdk=*) win_sdk="$optarg" > - ;; > - --without-win-sdk) win_sdk="no" > - ;; > - --enable-tools) want_tools="yes" > - ;; > - --disable-tools) want_tools="no" > - ;; > - --enable-seccomp) seccomp="yes" > - ;; > - --disable-seccomp) seccomp="no" > - ;; > - --disable-glusterfs) glusterfs="no" > - ;; > - --disable-avx2) avx2_opt="no" > - ;; > - --enable-avx2) avx2_opt="yes" > - ;; > - --disable-avx512f) avx512f_opt="no" > - ;; > - --enable-avx512f) avx512f_opt="yes" > - ;; > - > - --enable-glusterfs) glusterfs="yes" > - ;; > - --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane) > - echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2 > - ;; > - --enable-vhdx|--disable-vhdx) > - echo "$0: $opt is obsolete, VHDX driver is always built" >&2 > - ;; > - --enable-uuid|--disable-uuid) > - echo "$0: $opt is obsolete, UUID support is always built" >&2 > - ;; > - --disable-gtk) gtk="no" > - ;; > - --enable-gtk) gtk="yes" > - ;; > - --tls-priority=*) tls_priority="$optarg" > - ;; > - --disable-gnutls) gnutls="no" > - ;; > - --enable-gnutls) gnutls="yes" > - ;; > - --disable-nettle) nettle="no" > - ;; > - --enable-nettle) nettle="yes" > - ;; > - --disable-gcrypt) gcrypt="no" > - ;; > - --enable-gcrypt) gcrypt="yes" > - ;; > - --disable-auth-pam) auth_pam="no" > - ;; > - --enable-auth-pam) auth_pam="yes" > - ;; > - --enable-rdma) rdma="yes" > - ;; > - --disable-rdma) rdma="no" > - ;; > - --enable-pvrdma) pvrdma="yes" > - ;; > - --disable-pvrdma) pvrdma="no" > - ;; > - --disable-vte) vte="no" > - ;; > - --enable-vte) vte="yes" > - ;; > - --disable-virglrenderer) virglrenderer="no" > - ;; > - --enable-virglrenderer) virglrenderer="yes" > - ;; > - --disable-tpm) tpm="no" > - ;; > - --enable-tpm) tpm="yes" > - ;; > - --disable-libssh) libssh="no" > - ;; > - --enable-libssh) libssh="yes" > - ;; > - --disable-live-block-migration) live_block_migration="no" > - ;; > - --enable-live-block-migration) live_block_migration="yes" > - ;; > - --disable-numa) numa="no" > - ;; > - --enable-numa) numa="yes" > - ;; > - --disable-libxml2) libxml2="no" > - ;; > - --enable-libxml2) libxml2="yes" > - ;; > - --disable-tcmalloc) tcmalloc="no" > - ;; > - --enable-tcmalloc) tcmalloc="yes" > - ;; > - --disable-jemalloc) jemalloc="no" > - ;; > - --enable-jemalloc) jemalloc="yes" > - ;; > - --disable-replication) replication="no" > - ;; > - --enable-replication) replication="yes" > - ;; > - --disable-bochs) bochs="no" > - ;; > - --enable-bochs) bochs="yes" > - ;; > - --disable-cloop) cloop="no" > - ;; > - --enable-cloop) cloop="yes" > - ;; > - --disable-dmg) dmg="no" > - ;; > - --enable-dmg) dmg="yes" > - ;; > - --disable-qcow1) qcow1="no" > - ;; > - --enable-qcow1) qcow1="yes" > - ;; > - --disable-vdi) vdi="no" > - ;; > - --enable-vdi) vdi="yes" > - ;; > - --disable-vvfat) vvfat="no" > - ;; > - --enable-vvfat) vvfat="yes" > - ;; > - --disable-qed) qed="no" > - ;; > - --enable-qed) qed="yes" > - ;; > - --disable-parallels) parallels="no" > - ;; > - --enable-parallels) parallels="yes" > - ;; > - --disable-sheepdog) sheepdog="no" > - ;; > - --enable-sheepdog) sheepdog="yes" > - ;; > - --disable-vhost-user) vhost_user="no" > - ;; > - --enable-vhost-user) vhost_user="yes" > - ;; > - --disable-vhost-vdpa) vhost_vdpa="no" > - ;; > - --enable-vhost-vdpa) vhost_vdpa="yes" > - ;; > - --disable-vhost-kernel) vhost_kernel="no" > - ;; > - --enable-vhost-kernel) vhost_kernel="yes" > - ;; > - --disable-capstone) capstone="no" > - ;; > - --enable-capstone) capstone="yes" > - ;; > - --enable-capstone=git) capstone="git" > - ;; > - --enable-capstone=system) capstone="system" > - ;; > - --with-git=*) git="$optarg" > - ;; > - --enable-git-update) git_update=yes > - ;; > - --disable-git-update) git_update=no > - ;; > - --enable-debug-mutex) debug_mutex=yes > - ;; > - --disable-debug-mutex) debug_mutex=no > - ;; > - --enable-libpmem) libpmem=yes > - ;; > - --disable-libpmem) libpmem=no > - ;; > - --enable-xkbcommon) xkbcommon="enabled" > - ;; > - --disable-xkbcommon) xkbcommon="disabled" > - ;; > - --enable-plugins) plugins="yes" > - ;; > - --disable-plugins) plugins="no" > - ;; > - --enable-containers) use_containers="yes" > - ;; > - --disable-containers) use_containers="no" > - ;; > - --enable-fuzzing) fuzzing=yes > - ;; > - --disable-fuzzing) fuzzing=no > - ;; > - --gdb=*) gdb_bin="$optarg" > - ;; > - --enable-rng-none) rng_none=yes > - ;; > - --disable-rng-none) rng_none=no > - ;; > - --enable-keyring) secret_keyring="yes" > - ;; > - --disable-keyring) secret_keyring="no" > - ;; > - --enable-libdaxctl) libdaxctl=yes > - ;; > - --disable-libdaxctl) libdaxctl=no > - ;; > - *) > - echo "ERROR: unknown option $opt" > - echo "Try '$0 --help' for more information" > - exit 1 > - ;; > - esac > -done > - > -firmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}" > -libdir="${libdir:-$prefix/lib}" > -libexecdir="${libexecdir:-$prefix/libexec}" > -includedir="${includedir:-$prefix/include}" > - > -if test "$mingw32" = "yes" ; then > - mandir="$prefix" > - datadir="$prefix" > - docdir="$prefix" > - bindir="$prefix" > - sysconfdir="$prefix" > - local_statedir= > -else > - mandir="${mandir:-$prefix/share/man}" > - datadir="${datadir:-$prefix/share}" > - docdir="${docdir:-$prefix/share/doc}" > - bindir="${bindir:-$prefix/bin}" > - sysconfdir="${sysconfdir:-$prefix/etc}" > - local_statedir="${local_statedir:-$prefix/var}" > -fi > - > -case "$cpu" in > - ppc) > - CPU_CFLAGS="-m32" > - QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" > - ;; > - ppc64) > - CPU_CFLAGS="-m64" > - QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" > - ;; > - sparc) > - CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" > - QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS" > - ;; > - sparc64) > - CPU_CFLAGS="-m64 -mcpu=ultrasparc" > - QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" > - ;; > - s390) > - CPU_CFLAGS="-m31" > - QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS" > - ;; > - s390x) > - CPU_CFLAGS="-m64" > - QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" > - ;; > - i386) > - CPU_CFLAGS="-m32" > - QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" > - ;; > - x86_64) > - # ??? Only extremely old AMD cpus do not have cmpxchg16b. > - # If we truly care, we should simply detect this case at > - # runtime and generate the fallback to serial emulation. > - CPU_CFLAGS="-m64 -mcx16" > - QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" > - ;; > - x32) > - CPU_CFLAGS="-mx32" > - QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS" > - ;; > - # No special flags required for other host CPUs > -esac > - > -eval "cross_cc_${cpu}=\$host_cc" > -cross_cc_vars="$cross_cc_vars cross_cc_${cpu}" > -QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS" > - > -# For user-mode emulation the host arch has to be one we explicitly > -# support, even if we're using TCI. > -if [ "$ARCH" = "unknown" ]; then > - bsd_user="no" > - linux_user="no" > -fi > - > -if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then > - tcg="no" > -fi > - > -default_target_list="" > - > -mak_wilds="" > - > -if [ "$softmmu" = "yes" ]; then > - mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak" > -fi > -if [ "$linux_user" = "yes" ]; then > - mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak" > -fi > -if [ "$bsd_user" = "yes" ]; then > - mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak" > -fi > - > -if test -z "$target_list_exclude"; then > - for config in $mak_wilds; do > - default_target_list="${default_target_list} $(basename "$config" .mak)" > - done > -else > - exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g') > - for config in $mak_wilds; do > - target="$(basename "$config" .mak)" > - exclude="no" > - for excl in $exclude_list; do > - if test "$excl" = "$target"; then > - exclude="yes" > - break; > - fi > - done > - if test "$exclude" = "no"; then > - default_target_list="${default_target_list} $target" > - fi > - done > -fi > - > -# Enumerate public trace backends for --help output > -trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/')) > - > -if test x"$show_help" = x"yes" ; then > -cat << EOF > - > -Usage: configure [options] > -Options: [defaults in brackets after descriptions] > - > -Standard options: > - --help print this message > - --prefix=PREFIX install in PREFIX [$prefix] > - --interp-prefix=PREFIX where to find shared libraries, etc. > - use %M for cpu name [$interp_prefix] > - --target-list=LIST set target list (default: build everything) > -$(echo Available targets: $default_target_list | \ > - fold -s -w 53 | sed -e 's/^/ /') > - --target-list-exclude=LIST exclude a set of targets from the default target-list > - > -Advanced options (experts only): > - --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix] > - --cc=CC use C compiler CC [$cc] > - --iasl=IASL use ACPI compiler IASL [$iasl] > - --host-cc=CC use C compiler CC [$host_cc] for code run at > - build time > - --cxx=CXX use C++ compiler CXX [$cxx] > - --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] > - --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS > - --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS > - --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS > - --cross-cc-ARCH=CC use compiler when building ARCH guest test cases > - --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests > - --make=MAKE use specified make [$make] > - --install=INSTALL use specified install [$install] > - --python=PYTHON use specified python [$python] > - --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build] > - --meson=MESON use specified meson [$meson] > - --ninja=NINJA use specified ninja [$ninja] > - --smbd=SMBD use specified smbd [$smbd] > - --with-git=GIT use specified git [$git] > - --static enable static build [$static] > - --mandir=PATH install man pages in PATH > - --datadir=PATH install firmware in PATH/$qemu_suffix > - --docdir=PATH install documentation in PATH/$qemu_suffix > - --bindir=PATH install binaries in PATH > - --libdir=PATH install libraries in PATH > - --libexecdir=PATH install helper binaries in PATH > - --sysconfdir=PATH install config in PATH/$qemu_suffix > - --localstatedir=PATH install local state in PATH (set at runtime on win32) > - --firmwarepath=PATH search PATH for firmware files > - --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs. > - --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix] > - --with-pkgversion=VERS use specified string as sub-version of the package > - --enable-debug enable common debug build options > - --enable-sanitizers enable default sanitizers > - --enable-tsan enable thread sanitizer > - --disable-strip disable stripping binaries > - --disable-werror disable compilation abort on warning > - --disable-stack-protector disable compiler-provided stack protection > - --audio-drv-list=LIST set audio drivers list: > - Available drivers: $audio_possible_drivers > - --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L > - --block-drv-rw-whitelist=L > - set block driver read-write whitelist > - (affects only QEMU, not qemu-img) > - --block-drv-ro-whitelist=L > - set block driver read-only whitelist > - (affects only QEMU, not qemu-img) > - --enable-trace-backends=B Set trace backend > - Available backends: $trace_backend_list > - --with-trace-file=NAME Full PATH,NAME of file to store traces > - Default:trace- > - --disable-slirp disable SLIRP userspace network connectivity > - --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI) > - --enable-malloc-trim enable libc malloc_trim() for memory optimization > - --oss-lib path to OSS library > - --cpu=CPU Build for host CPU [$cpu] > - --with-coroutine=BACKEND coroutine backend. Supported options: > - ucontext, sigaltstack, windows > - --enable-gcov enable test coverage analysis with gcov > - --disable-blobs disable installing provided firmware blobs > - --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent > - --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb) > - --tls-priority default TLS protocol/cipher priority string > - --enable-gprof QEMU profiling with gprof > - --enable-profiler profiler support > - --enable-debug-stack-usage > - track the maximum stack usage of stacks created by qemu_alloc_stack > - --enable-plugins > - enable plugins via shared library loading > - --disable-containers don't use containers for cross-building > - --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin] > - > -Optional features, enabled with --enable-FEATURE and > -disabled with --disable-FEATURE, default is enabled if available: > - > - system all system emulation targets > - user supported user emulation targets > - linux-user all linux usermode emulation targets > - bsd-user all BSD usermode emulation targets > - docs build documentation > - guest-agent build the QEMU Guest Agent > - guest-agent-msi build guest agent Windows MSI installation package > - pie Position Independent Executables > - modules modules support (non-Windows) > - module-upgrades try to load modules from alternate paths for upgrades > - debug-tcg TCG debugging (default is disabled) > - debug-info debugging information > - sparse sparse checker > - safe-stack SafeStack Stack Smash Protection. Depends on > - clang/llvm >= 3.7 and requires coroutine backend ucontext. > - > - gnutls GNUTLS cryptography support > - nettle nettle cryptography support > - gcrypt libgcrypt cryptography support > - auth-pam PAM access control > - sdl SDL UI > - sdl-image SDL Image support for icons > - gtk gtk UI > - vte vte support for the gtk UI > - curses curses UI > - iconv font glyph conversion support > - vnc VNC UI support > - vnc-sasl SASL encryption for VNC server > - vnc-jpeg JPEG lossy compression for VNC server > - vnc-png PNG compression for VNC server > - cocoa Cocoa UI (Mac OS X only) > - virtfs VirtFS > - mpath Multipath persistent reservation passthrough > - xen xen backend driver support > - xen-pci-passthrough PCI passthrough support for Xen > - brlapi BrlAPI (Braile) > - curl curl connectivity > - membarrier membarrier system call (for Linux 4.14+ or Windows) > - fdt fdt device tree > - kvm KVM acceleration support > - hax HAX acceleration support > - hvf Hypervisor.framework acceleration support > - whpx Windows Hypervisor Platform acceleration support > - rdma Enable RDMA-based migration > - pvrdma Enable PVRDMA support > - vde support for vde network > - netmap support for netmap network > - linux-aio Linux AIO support > - linux-io-uring Linux io_uring support > - cap-ng libcap-ng support > - attr attr and xattr support > - vhost-net vhost-net kernel acceleration support > - vhost-vsock virtio sockets device support > - vhost-scsi vhost-scsi kernel target support > - vhost-crypto vhost-user-crypto backend support > - vhost-kernel vhost kernel backend support > - vhost-user vhost-user backend support > - vhost-vdpa vhost-vdpa kernel backend support > - spice spice > - rbd rados block device (rbd) > - libiscsi iscsi support > - libnfs nfs support > - smartcard smartcard support (libcacard) > - u2f U2F support (u2f-emu) > - libusb libusb (for usb passthrough) > - live-block-migration Block migration in the main migration stream > - usb-redir usb network redirection support > - lzo support of lzo compression library > - snappy support of snappy compression library > - bzip2 support of bzip2 compression library > - (for reading bzip2-compressed dmg images) > - lzfse support of lzfse compression library > - (for reading lzfse-compressed dmg images) > - zstd support for zstd compression library > - (for migration compression and qcow2 cluster compression) > - seccomp seccomp support > - coroutine-pool coroutine freelist (better performance) > - glusterfs GlusterFS backend > - tpm TPM support > - libssh ssh block device support > - numa libnuma support > - libxml2 for Parallels image format > - tcmalloc tcmalloc support > - jemalloc jemalloc support > - avx2 AVX2 optimization support > - avx512f AVX512F optimization support > - replication replication support > - opengl opengl support > - virglrenderer virgl rendering support > - xfsctl xfsctl support > - qom-cast-debug cast debugging support > - tools build qemu-io, qemu-nbd and qemu-img tools > - bochs bochs image format support > - cloop cloop image format support > - dmg dmg image format support > - qcow1 qcow v1 image format support > - vdi vdi image format support > - vvfat vvfat image format support > - qed qed image format support > - parallels parallels image format support > - sheepdog sheepdog block driver support > - crypto-afalg Linux AF_ALG crypto backend driver > - capstone capstone disassembler support > - debug-mutex mutex debugging support > - libpmem libpmem support > - xkbcommon xkbcommon support > - rng-none dummy RNG, avoid using /dev/(u)random and getrandom() > - libdaxctl libdaxctl support > - > -NOTE: The object files are built at the place where configure is launched > -EOF > -exit 0 > -fi > - > -# Remove old dependency files to make sure that they get properly regenerated > -rm -f */config-devices.mak.d > - > -if test -z "$python" > -then > - error_exit "Python not found. Use --python=/path/to/python" > -fi > - > -# Note that if the Python conditional here evaluates True we will exit > -# with status 1 which is a shell 'false' value. > -if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then > - error_exit "Cannot use '$python', Python >= 3.5 is required." \ > - "Use --python=/path/to/python to specify a supported Python." > -fi > - > -# Preserve python version since some functionality is dependent on it > -python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null) > - > -# Suppress writing compiled files > -python="$python -B" > - > -if test -z "$meson"; then > - if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.1; then > - meson=meson > - elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then > - meson=git > - elif test -e "${source_path}/meson/meson.py" ; then > - meson=internal > - else > - if test "$explicit_python" = yes; then > - error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found." > - else > - error_exit "Meson not found. Use --meson=/path/to/meson" > - fi > - fi > -else > - # Meson uses its own Python interpreter to invoke other Python scripts, > - # but the user wants to use the one they specified with --python. > - # > - # We do not want to override the distro Python interpreter (and sometimes > - # cannot: for example in Homebrew /usr/bin/meson is a bash script), so > - # just require --meson=git|internal together with --python. > - if test "$explicit_python" = yes; then > - case "$meson" in > - git | internal) ;; > - *) error_exit "--python requires using QEMU's embedded Meson distribution." ;; > - esac > - fi > -fi > - > -if test "$meson" = git; then > - git_submodules="${git_submodules} meson" > -fi > - > -case "$meson" in > - git | internal) > - if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then > - error_exit "Python setuptools not found" > - fi > - meson="$python ${source_path}/meson/meson.py" > - ;; > - *) meson=$(command -v meson) ;; > -esac > - > -# Probe for ninja (used for compdb) > - > -if test -z "$ninja"; then > - for c in ninja ninja-build samu; do > - if has $c; then > - ninja=$(command -v "$c") > - break > - fi > - done > -fi > - > -# Check that the C compiler works. Doing this here before testing > -# the host CPU ensures that we had a valid CC to autodetect the > -# $cpu var (and we should bail right here if that's not the case). > -# It also allows the help message to be printed without a CC. > -write_c_skeleton; > -if compile_object ; then > - : C compiler works ok > -else > - error_exit "\"$cc\" either does not exist or does not work" > -fi > -if ! compile_prog ; then > - error_exit "\"$cc\" cannot build an executable (is your linker broken?)" > -fi > - > -# Now we have handled --enable-tcg-interpreter and know we're not just > -# printing the help message, bail out if the host CPU isn't supported. > -if test "$ARCH" = "unknown"; then > - if test "$tcg_interpreter" = "yes" ; then > - echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)" > - else > - error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter" > - fi > -fi > - > -# Consult white-list to determine whether to enable werror > -# by default. Only enable by default for git builds > -if test -z "$werror" ; then > - if test -e "$source_path/.git" && \ > - { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then > - werror="yes" > - else > - werror="no" > - fi > -fi > - > -if test "$bogus_os" = "yes"; then > - # Now that we know that we're not printing the help and that > - # the compiler works (so the results of the check_defines we used > - # to identify the OS are reliable), if we didn't recognize the > - # host OS we should stop now. > - error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" > -fi > - > -# Check whether the compiler matches our minimum requirements: > -cat > $TMPC << EOF > -#if defined(__clang_major__) && defined(__clang_minor__) > -# ifdef __apple_build_version__ > -# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1) > -# error You need at least XCode Clang v5.1 to compile QEMU > -# endif > -# else > -# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4) > -# error You need at least Clang v3.4 to compile QEMU > -# endif > -# endif > -#elif defined(__GNUC__) && defined(__GNUC_MINOR__) > -# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) > -# error You need at least GCC v4.8 to compile QEMU > -# endif > -#else > -# error You either need GCC or Clang to compiler QEMU > -#endif > -int main (void) { return 0; } > -EOF > -if ! compile_prog "" "" ; then > - error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)" > -fi > - > -# Accumulate -Wfoo and -Wno-bar separately. > -# We will list all of the enable flags first, and the disable flags second. > -# Note that we do not add -Werror, because that would enable it for all > -# configure tests. If a configure test failed due to -Werror this would > -# just silently disable some features, so it's too error prone. > - > -warn_flags= > -add_to warn_flags -Wold-style-declaration > -add_to warn_flags -Wold-style-definition > -add_to warn_flags -Wtype-limits > -add_to warn_flags -Wformat-security > -add_to warn_flags -Wformat-y2k > -add_to warn_flags -Winit-self > -add_to warn_flags -Wignored-qualifiers > -add_to warn_flags -Wempty-body > -add_to warn_flags -Wnested-externs > -add_to warn_flags -Wendif-labels > -add_to warn_flags -Wexpansion-to-defined > - > -nowarn_flags= > -add_to nowarn_flags -Wno-initializer-overrides > -add_to nowarn_flags -Wno-missing-include-dirs > -add_to nowarn_flags -Wno-shift-negative-value > -add_to nowarn_flags -Wno-string-plus-int > -add_to nowarn_flags -Wno-typedef-redefinition > -add_to nowarn_flags -Wno-tautological-type-limit-compare > -add_to nowarn_flags -Wno-psabi > - > -gcc_flags="$warn_flags $nowarn_flags" > - > -cc_has_warning_flag() { > - write_c_skeleton; > - > - # Use the positive sense of the flag when testing for -Wno-wombat > - # support (gcc will happily accept the -Wno- form of unknown > - # warning options). > - optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" > - compile_prog "-Werror $optflag" "" > -} > - > -for flag in $gcc_flags; do > - if cc_has_warning_flag $flag ; then > - QEMU_CFLAGS="$QEMU_CFLAGS $flag" > - fi > -done > - > -if test "$stack_protector" != "no"; then > - cat > $TMPC << EOF > -int main(int argc, char *argv[]) > -{ > - char arr[64], *p = arr, *c = argv[0]; > - while (*c) { > - *p++ = *c++; > - } > - return 0; > -} > -EOF > - gcc_flags="-fstack-protector-strong -fstack-protector-all" > - sp_on=0 > - for flag in $gcc_flags; do > - # We need to check both a compile and a link, since some compiler > - # setups fail only on a .c->.o compile and some only at link time > - if compile_object "-Werror $flag" && > - compile_prog "-Werror $flag" ""; then > - QEMU_CFLAGS="$QEMU_CFLAGS $flag" > - QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" > - sp_on=1 > - break > - fi > - done > - if test "$stack_protector" = yes; then > - if test $sp_on = 0; then > - error_exit "Stack protector not supported" > - fi > - fi > -fi > - > -# Disable -Wmissing-braces on older compilers that warn even for > -# the "universal" C zero initializer {0}. > -cat > $TMPC << EOF > -struct { > - int a[2]; > -} x = {0}; > -EOF > -if compile_object "-Werror" "" ; then > - : > -else > - QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" > -fi > - > -# Our module code doesn't support Windows > -if test "$modules" = "yes" && test "$mingw32" = "yes" ; then > - error_exit "Modules are not available for Windows" > -fi > - > -# module_upgrades is only reasonable if modules are enabled > -if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then > - error_exit "Can't enable module-upgrades as Modules are not enabled" > -fi > - > -# Static linking is not possible with modules or PIE > -if test "$static" = "yes" ; then > - if test "$modules" = "yes" ; then > - error_exit "static and modules are mutually incompatible" > - fi > -fi > - > -# Unconditional check for compiler __thread support > - cat > $TMPC << EOF > -static __thread int tls_var; > -int main(void) { return tls_var; } > -EOF > - > -if ! compile_prog "-Werror" "" ; then > - error_exit "Your compiler does not support the __thread specifier for " \ > - "Thread-Local Storage (TLS). Please upgrade to a version that does." > -fi > - > -cat > $TMPC << EOF > - > -#ifdef __linux__ > -# define THREAD __thread > -#else > -# define THREAD > -#endif > -static THREAD int tls_var; > -int main(void) { return tls_var; } > -EOF > - > -# Check we support --no-pie first; we will need this for building ROMs. > -if compile_prog "-Werror -fno-pie" "-no-pie"; then > - CFLAGS_NOPIE="-fno-pie" > - LDFLAGS_NOPIE="-no-pie" > -fi > - > -if test "$static" = "yes"; then > - if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then > - CFLAGS="-fPIE -DPIE $CFLAGS" > - QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS" > - pie="yes" > - elif test "$pie" = "yes"; then > - error_exit "-static-pie not available due to missing toolchain support" > - else > - QEMU_LDFLAGS="-static $QEMU_LDFLAGS" > - pie="no" > - fi > -elif test "$pie" = "no"; then > - CFLAGS="$CFLAGS_NOPIE $CFLAGS" > - LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS" > -elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then > - CFLAGS="-fPIE -DPIE $CFLAGS" > - LDFLAGS="-pie $LDFLAGS" > - pie="yes" > -elif test "$pie" = "yes"; then > - error_exit "PIE not available due to missing toolchain support" > -else > - echo "Disabling PIE due to missing toolchain support" > - pie="no" > -fi > - > -# Detect support for PT_GNU_RELRO + DT_BIND_NOW. > -# The combination is known as "full relro", because .got.plt is read-only too. > -if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then > - QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS" > -fi > - > -########################################## > -# __sync_fetch_and_and requires at least -march=i486. Many toolchains > -# use i686 as default anyway, but for those that don't, an explicit > -# specification is necessary > - > -if test "$cpu" = "i386"; then > - cat > $TMPC << EOF > -static int sfaa(int *ptr) > -{ > - return __sync_fetch_and_and(ptr, 0); > -} > - > -int main(void) > -{ > - int val = 42; > - val = __sync_val_compare_and_swap(&val, 0, 1); > - sfaa(&val); > - return val; > -} > -EOF > - if ! compile_prog "" "" ; then > - QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" > - fi > -fi > - > -######################################### > -# Solaris specific configure tool chain decisions > - > -if test "$solaris" = "yes" ; then > - if has $install; then > - : > - else > - error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \ > - "install fileutils from www.blastwave.org using pkg-get -i fileutils" \ > - "to get ginstall which is used by default (which lives in /opt/csw/bin)" > - fi > - if test "$(path_of $install)" = "/usr/sbin/install" ; then > - error_exit "Solaris /usr/sbin/install is not an appropriate install program." \ > - "try ginstall from the GNU fileutils available from www.blastwave.org" \ > - "using pkg-get -i fileutils, or use --install=/usr/ucb/install" > - fi > - if has ar; then > - : > - else > - if test -f /usr/ccs/bin/ar ; then > - error_exit "No path includes ar" \ > - "Add /usr/ccs/bin to your path and rerun configure" > - fi > - error_exit "No path includes ar" > - fi > -fi > - > -if test -z "${target_list+xxx}" ; then > - for target in $default_target_list; do > - supported_target $target 2>/dev/null && \ > - target_list="$target_list $target" > - done > - target_list="${target_list# }" > -else > - target_list=$(echo "$target_list" | sed -e 's/,/ /g') > - for target in $target_list; do > - # Check that we recognised the target name; this allows a more > - # friendly error message than if we let it fall through. > - case " $default_target_list " in > - *" $target "*) > - ;; > - *) > - error_exit "Unknown target name '$target'" > - ;; > - esac > - supported_target $target || exit 1 > - done > -fi > - > -# see if system emulation was really requested > -case " $target_list " in > - *"-softmmu "*) softmmu=yes > - ;; > - *) softmmu=no > - ;; > -esac > - > -for target in $target_list; do > - case "$target" in > - arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu) > - edk2_blobs="yes" > - ;; > - esac > -done > -# The EDK2 binaries are compressed with bzip2 > -if test "$edk2_blobs" = "yes" && ! has bzip2; then > - error_exit "The bzip2 program is required for building QEMU" > -fi > - > -feature_not_found() { > - feature=$1 > - remedy=$2 > - > - error_exit "User requested feature $feature" \ > - "configure was not able to find it." \ > - "$remedy" > -} > - > -# --- > -# big/little endian test > -cat > $TMPC << EOF > -short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; > -short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; > -extern int foo(short *, short *); > -int main(int argc, char *argv[]) { > - return foo(big_endian, little_endian); > -} > -EOF > - > -if compile_object ; then > - if strings -a $TMPO | grep -q BiGeNdIaN ; then > - bigendian="yes" > - elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then > - bigendian="no" > - else > - echo big/little test failed > - fi > -else > - echo big/little test failed > -fi > - > -########################################## > -# system tools > -if test -z "$want_tools"; then > - if test "$softmmu" = "no"; then > - want_tools=no > - else > - want_tools=yes > - fi > -fi > - > -########################################## > -# cocoa implies not SDL or GTK > -# (the cocoa UI code currently assumes it is always the active UI > -# and doesn't interact well with other UI frontend code) > -if test "$cocoa" = "yes"; then > - if test "$sdl" = "yes"; then > - error_exit "Cocoa and SDL UIs cannot both be enabled at once" > - fi > - if test "$gtk" = "yes"; then > - error_exit "Cocoa and GTK UIs cannot both be enabled at once" > - fi > - gtk=no > - sdl=disabled > -fi > - > -# Some versions of Mac OS X incorrectly define SIZE_MAX > -cat > $TMPC << EOF > -#include > -#include > -int main(int argc, char *argv[]) { > - return printf("%zu", SIZE_MAX); > -} > -EOF > -have_broken_size_max=no > -if ! compile_object -Werror ; then > - have_broken_size_max=yes > -fi > - > -########################################## > -# L2TPV3 probe > - > -cat > $TMPC < -#include > -#include > -int main(void) { return sizeof(struct mmsghdr); } > -EOF > -if compile_prog "" "" ; then > - l2tpv3=yes > -else > - l2tpv3=no > -fi > - > -if check_include "pty.h" ; then > - pty_h=yes > -else > - pty_h=no > -fi > - > -cat > $TMPC < -#include > -int main(int argc, char *argv[]) { > - return mlockall(MCL_FUTURE); > -} > -EOF > -if compile_prog "" "" ; then > - have_mlockall=yes > -else > - have_mlockall=no > -fi > - > -######################################### > -# vhost interdependencies and host support > - > -# vhost backends > -test "$vhost_user" = "" && vhost_user=yes > -if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then > - error_exit "vhost-user isn't available on win32" > -fi > -test "$vhost_vdpa" = "" && vhost_vdpa=$linux > -if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then > - error_exit "vhost-vdpa is only available on Linux" > -fi > -test "$vhost_kernel" = "" && vhost_kernel=$linux > -if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then > - error_exit "vhost-kernel is only available on Linux" > -fi > - > -# vhost-kernel devices > -test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel > -if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then > - error_exit "--enable-vhost-scsi requires --enable-vhost-kernel" > -fi > -test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel > -if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then > - error_exit "--enable-vhost-vsock requires --enable-vhost-kernel" > -fi > - > -# vhost-user backends > -test "$vhost_net_user" = "" && vhost_net_user=$vhost_user > -if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then > - error_exit "--enable-vhost-net-user requires --enable-vhost-user" > -fi > -test "$vhost_crypto" = "" && vhost_crypto=$vhost_user > -if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then > - error_exit "--enable-vhost-crypto requires --enable-vhost-user" > -fi > -test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user > -if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then > - error_exit "--enable-vhost-user-fs requires --enable-vhost-user" > -fi > -#vhost-vdpa backends > -test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa > -if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then > - error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa" > -fi > - > -# OR the vhost-kernel and vhost-user values for simplicity > -if test "$vhost_net" = ""; then > - test "$vhost_net_user" = "yes" && vhost_net=yes > - test "$vhost_kernel" = "yes" && vhost_net=yes > -fi > - > -########################################## > -# MinGW / Mingw-w64 localtime_r/gmtime_r check > - > -if test "$mingw32" = "yes"; then > - # Some versions of MinGW / Mingw-w64 lack localtime_r > - # and gmtime_r entirely. > - # > - # Some versions of Mingw-w64 define a macro for > - # localtime_r/gmtime_r. > - # > - # Some versions of Mingw-w64 will define functions > - # for localtime_r/gmtime_r, but only if you have > - # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun > - # though, unistd.h and pthread.h both define > - # that for you. > - # > - # So this #undef localtime_r and #include > - # are not in fact redundant. > -cat > $TMPC << EOF > -#include > -#include > -#undef localtime_r > -int main(void) { localtime_r(NULL, NULL); return 0; } > -EOF > - if compile_prog "" "" ; then > - localtime_r="yes" > - else > - localtime_r="no" > - fi > -fi > - > -########################################## > -# pkg-config probe > - > -if ! has "$pkg_config_exe"; then > - error_exit "pkg-config binary '$pkg_config_exe' not found" > -fi > - > -########################################## > -# NPTL probe > - > -if test "$linux_user" = "yes"; then > - cat > $TMPC < -#include > -#include > -int main(void) { > -#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) > -#error bork > -#endif > - return 0; > -} > -EOF > - if ! compile_object ; then > - feature_not_found "nptl" "Install glibc and linux kernel headers." > - fi > -fi > - > -########################################## > -# lzo check > - > -if test "$lzo" != "no" ; then > - cat > $TMPC << EOF > -#include > -int main(void) { lzo_version(); return 0; } > -EOF > - if compile_prog "" "-llzo2" ; then > - lzo_libs="-llzo2" > - lzo="yes" > - else > - if test "$lzo" = "yes"; then > - feature_not_found "liblzo2" "Install liblzo2 devel" > - fi > - lzo="no" > - fi > -fi > - > -########################################## > -# snappy check > - > -if test "$snappy" != "no" ; then > - cat > $TMPC << EOF > -#include > -int main(void) { snappy_max_compressed_length(4096); return 0; } > -EOF > - if compile_prog "" "-lsnappy" ; then > - snappy_libs='-lsnappy' > - snappy="yes" > - else > - if test "$snappy" = "yes"; then > - feature_not_found "libsnappy" "Install libsnappy devel" > - fi > - snappy="no" > - fi > -fi > - > -########################################## > -# bzip2 check > - > -if test "$bzip2" != "no" ; then > - cat > $TMPC << EOF > -#include > -int main(void) { BZ2_bzlibVersion(); return 0; } > -EOF > - if compile_prog "" "-lbz2" ; then > - bzip2="yes" > - else > - if test "$bzip2" = "yes"; then > - feature_not_found "libbzip2" "Install libbzip2 devel" > - fi > - bzip2="no" > - fi > -fi > - > -########################################## > -# lzfse check > - > -if test "$lzfse" != "no" ; then > - cat > $TMPC << EOF > -#include > -int main(void) { lzfse_decode_scratch_size(); return 0; } > -EOF > - if compile_prog "" "-llzfse" ; then > - lzfse="yes" > - else > - if test "$lzfse" = "yes"; then > - feature_not_found "lzfse" "Install lzfse devel" > - fi > - lzfse="no" > - fi > -fi > - > -########################################## > -# zstd check > - > -if test "$zstd" != "no" ; then > - libzstd_minver="1.4.0" > - if $pkg_config --atleast-version=$libzstd_minver libzstd ; then > - zstd_cflags="$($pkg_config --cflags libzstd)" > - zstd_libs="$($pkg_config --libs libzstd)" > - zstd="yes" > - else > - if test "$zstd" = "yes" ; then > - feature_not_found "libzstd" "Install libzstd devel" > - fi > - zstd="no" > - fi > -fi > - > -########################################## > -# libseccomp check > - > -if test "$seccomp" != "no" ; then > - libseccomp_minver="2.3.0" > - if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then > - seccomp_cflags="$($pkg_config --cflags libseccomp)" > - seccomp_libs="$($pkg_config --libs libseccomp)" > - seccomp="yes" > - else > - if test "$seccomp" = "yes" ; then > - feature_not_found "libseccomp" \ > - "Install libseccomp devel >= $libseccomp_minver" > - fi > - seccomp="no" > - fi > -fi > -########################################## > -# xen probe > - > -if test "$xen" != "no" ; then > - # Check whether Xen library path is specified via --extra-ldflags to avoid > - # overriding this setting with pkg-config output. If not, try pkg-config > - # to obtain all needed flags. > - > - if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ > - $pkg_config --exists xencontrol ; then > - xen_ctrl_version="$(printf '%d%02d%02d' \ > - $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" > - xen=yes > - xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab" > - xen_pc="$xen_pc xenevtchn xendevicemodel" > - if $pkg_config --exists xentoolcore; then > - xen_pc="$xen_pc xentoolcore" > - fi > - QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)" > - xen_cflags="$($pkg_config --cflags $xen_pc)" > - xen_libs="$($pkg_config --libs $xen_pc)" > - else > - > - xen_libs="-lxenstore -lxenctrl -lxenguest" > - xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" > - > - # First we test whether Xen headers and libraries are available. > - # If no, we are done and there is no Xen support. > - # If yes, more tests are run to detect the Xen version. > - > - # Xen (any) > - cat > $TMPC < -#include > -int main(void) { > - return 0; > -} > -EOF > - if ! compile_prog "" "$xen_libs" ; then > - # Xen not found > - if test "$xen" = "yes" ; then > - feature_not_found "xen" "Install xen devel" > - fi > - xen=no > - > - # Xen unstable > - elif > - cat > $TMPC < -#undef XC_WANT_COMPAT_DEVICEMODEL_API > -#define __XEN_TOOLS__ > -#include > -#include > -int main(void) { > - xendevicemodel_handle *xd; > - xenforeignmemory_handle *xfmem; > - > - xd = xendevicemodel_open(0, 0); > - xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); > - > - xfmem = xenforeignmemory_open(0, 0); > - xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); > - > - return 0; > -} > -EOF > - compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" > - then > - xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" > - xen_ctrl_version=41100 > - xen=yes > - elif > - cat > $TMPC < -#undef XC_WANT_COMPAT_MAP_FOREIGN_API > -#include > -#include > -int main(void) { > - xenforeignmemory_handle *xfmem; > - > - xfmem = xenforeignmemory_open(0, 0); > - xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); > - xentoolcore_restrict_all(0); > - > - return 0; > -} > -EOF > - compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" > - then > - xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" > - xen_ctrl_version=41000 > - xen=yes > - elif > - cat > $TMPC < -#undef XC_WANT_COMPAT_DEVICEMODEL_API > -#define __XEN_TOOLS__ > -#include > -int main(void) { > - xendevicemodel_handle *xd; > - > - xd = xendevicemodel_open(0, 0); > - xendevicemodel_close(xd); > - > - return 0; > -} > -EOF > - compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" > - then > - xen_stable_libs="-lxendevicemodel $xen_stable_libs" > - xen_ctrl_version=40900 > - xen=yes > - elif > - cat > $TMPC < -/* > - * If we have stable libs the we don't want the libxc compat > - * layers, regardless of what CFLAGS we may have been given. > - * > - * Also, check if xengnttab_grant_copy_segment_t is defined and > - * grant copy operation is implemented. > - */ > -#undef XC_WANT_COMPAT_EVTCHN_API > -#undef XC_WANT_COMPAT_GNTTAB_API > -#undef XC_WANT_COMPAT_MAP_FOREIGN_API > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#if !defined(HVM_MAX_VCPUS) > -# error HVM_MAX_VCPUS not defined > -#endif > -int main(void) { > - xc_interface *xc = NULL; > - xenforeignmemory_handle *xfmem; > - xenevtchn_handle *xe; > - xengnttab_handle *xg; > - xengnttab_grant_copy_segment_t* seg = NULL; > - > - xs_daemon_open(); > - > - xc = xc_interface_open(0, 0, 0); > - xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); > - xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); > - xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); > - xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); > - > - xfmem = xenforeignmemory_open(0, 0); > - xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); > - > - xe = xenevtchn_open(0, 0); > - xenevtchn_fd(xe); > - > - xg = xengnttab_open(0, 0); > - xengnttab_grant_copy(xg, 0, seg); > - > - return 0; > -} > -EOF > - compile_prog "" "$xen_libs $xen_stable_libs" > - then > - xen_ctrl_version=40800 > - xen=yes > - elif > - cat > $TMPC < -/* > - * If we have stable libs the we don't want the libxc compat > - * layers, regardless of what CFLAGS we may have been given. > - */ > -#undef XC_WANT_COMPAT_EVTCHN_API > -#undef XC_WANT_COMPAT_GNTTAB_API > -#undef XC_WANT_COMPAT_MAP_FOREIGN_API > -#include > -#include > -#include > -#include > -#include > -#include > -#include > -#if !defined(HVM_MAX_VCPUS) > -# error HVM_MAX_VCPUS not defined > -#endif > -int main(void) { > - xc_interface *xc = NULL; > - xenforeignmemory_handle *xfmem; > - xenevtchn_handle *xe; > - xengnttab_handle *xg; > - > - xs_daemon_open(); > - > - xc = xc_interface_open(0, 0, 0); > - xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); > - xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); > - xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); > - xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); > - > - xfmem = xenforeignmemory_open(0, 0); > - xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); > - > - xe = xenevtchn_open(0, 0); > - xenevtchn_fd(xe); > - > - xg = xengnttab_open(0, 0); > - xengnttab_map_grant_ref(xg, 0, 0, 0); > - > - return 0; > -} > -EOF > - compile_prog "" "$xen_libs $xen_stable_libs" > - then > - xen_ctrl_version=40701 > - xen=yes > - > - # Xen 4.6 > - elif > - cat > $TMPC < -#include > -#include > -#include > -#include > -#if !defined(HVM_MAX_VCPUS) > -# error HVM_MAX_VCPUS not defined > -#endif > -int main(void) { > - xc_interface *xc; > - xs_daemon_open(); > - xc = xc_interface_open(0, 0, 0); > - xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); > - xc_gnttab_open(NULL, 0); > - xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); > - xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); > - xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); > - xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); > - return 0; > -} > -EOF > - compile_prog "" "$xen_libs" > - then > - xen_ctrl_version=40600 > - xen=yes > - > - # Xen 4.5 > - elif > - cat > $TMPC < -#include > -#include > -#include > -#include > -#if !defined(HVM_MAX_VCPUS) > -# error HVM_MAX_VCPUS not defined > -#endif > -int main(void) { > - xc_interface *xc; > - xs_daemon_open(); > - xc = xc_interface_open(0, 0, 0); > - xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); > - xc_gnttab_open(NULL, 0); > - xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); > - xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); > - xc_hvm_create_ioreq_server(xc, 0, 0, NULL); > - return 0; > -} > -EOF > - compile_prog "" "$xen_libs" > - then > - xen_ctrl_version=40500 > - xen=yes > - > - elif > - cat > $TMPC < -#include > -#include > -#include > -#include > -#if !defined(HVM_MAX_VCPUS) > -# error HVM_MAX_VCPUS not defined > -#endif > -int main(void) { > - xc_interface *xc; > - xs_daemon_open(); > - xc = xc_interface_open(0, 0, 0); > - xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); > - xc_gnttab_open(NULL, 0); > - xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); > - xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); > - return 0; > -} > -EOF > - compile_prog "" "$xen_libs" > - then > - xen_ctrl_version=40200 > - xen=yes > - > - else > - if test "$xen" = "yes" ; then > - feature_not_found "xen (unsupported version)" \ > - "Install a supported xen (xen 4.2 or newer)" > - fi > - xen=no > - fi > - > - if test "$xen" = yes; then > - if test $xen_ctrl_version -ge 40701 ; then > - xen_libs="$xen_libs $xen_stable_libs " > - fi > - fi > - fi > -fi > - > -if test "$xen_pci_passthrough" != "no"; then > - if test "$xen" = "yes" && test "$linux" = "yes"; then > - xen_pci_passthrough=yes > - else > - if test "$xen_pci_passthrough" = "yes"; then > - error_exit "User requested feature Xen PCI Passthrough" \ > - " but this feature requires /sys from Linux" > - fi > - xen_pci_passthrough=no > - fi > -fi > - > -########################################## > -# Windows Hypervisor Platform accelerator (WHPX) check > -if test "$whpx" != "no" ; then > - if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then > - whpx="yes" > - else > - if test "$whpx" = "yes"; then > - feature_not_found "WinHvPlatform" "WinHvEmulation is not installed" > - fi > - whpx="no" > - fi > -fi > - > -########################################## > -# gettext probe > -if test "$gettext" != "false" ; then > - if has xgettext; then > - gettext=true > - else > - if test "$gettext" = "true" ; then > - feature_not_found "gettext" "Install xgettext binary" > - fi > - gettext=false > - fi > -fi > - > -########################################## > -# Sparse probe > -if test "$sparse" != "no" ; then > - if has sparse; then > - sparse=yes > - else > - if test "$sparse" = "yes" ; then > - feature_not_found "sparse" "Install sparse binary" > - fi > - sparse=no > - fi > -fi > - > -########################################## > -# X11 probe > -if $pkg_config --exists "x11"; then > - have_x11=yes > - x11_cflags=$($pkg_config --cflags x11) > - x11_libs=$($pkg_config --libs x11) > -fi > - > -########################################## > -# GTK probe > - > -if test "$gtk" != "no"; then > - gtkpackage="gtk+-3.0" > - gtkx11package="gtk+-x11-3.0" > - gtkversion="3.22.0" > - if $pkg_config --exists "$gtkpackage >= $gtkversion"; then > - gtk_cflags=$($pkg_config --cflags $gtkpackage) > - gtk_libs=$($pkg_config --libs $gtkpackage) > - gtk_version=$($pkg_config --modversion $gtkpackage) > - if $pkg_config --exists "$gtkx11package >= $gtkversion"; then > - need_x11=yes > - gtk_cflags="$gtk_cflags $x11_cflags" > - gtk_libs="$gtk_libs $x11_libs" > - fi > - gtk="yes" > - elif test "$gtk" = "yes"; then > - feature_not_found "gtk" "Install gtk3-devel" > - else > - gtk="no" > - fi > -fi > - > - > -########################################## > -# GNUTLS probe > - > -if test "$gnutls" != "no"; then > - pass="no" > - if $pkg_config --exists "gnutls >= 3.1.18"; then > - gnutls_cflags=$($pkg_config --cflags gnutls) > - gnutls_libs=$($pkg_config --libs gnutls) > - # Packaging for the static libraries is not always correct. > - # At least ubuntu 18.04 ships only shared libraries. > - write_c_skeleton > - if compile_prog "" "$gnutls_libs" ; then > - LIBS="$gnutls_libs $LIBS" > - QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags" > - pass="yes" > - fi > - fi > - if test "$pass" = "no" && test "$gnutls" = "yes"; then > - feature_not_found "gnutls" "Install gnutls devel >= 3.1.18" > - else > - gnutls="$pass" > - fi > -fi > - > - > -# If user didn't give a --disable/enable-gcrypt flag, > -# then mark as disabled if user requested nettle > -# explicitly > -if test -z "$gcrypt" > -then > - if test "$nettle" = "yes" > - then > - gcrypt="no" > - fi > -fi > - > -# If user didn't give a --disable/enable-nettle flag, > -# then mark as disabled if user requested gcrypt > -# explicitly > -if test -z "$nettle" > -then > - if test "$gcrypt" = "yes" > - then > - nettle="no" > - fi > -fi > - > -has_libgcrypt() { > - if ! has "libgcrypt-config" > - then > - return 1 > - fi > - > - if test -n "$cross_prefix" > - then > - host=$(libgcrypt-config --host) > - if test "$host-" != $cross_prefix > - then > - return 1 > - fi > - fi > - > - maj=`libgcrypt-config --version | awk -F . '{print $1}'` > - min=`libgcrypt-config --version | awk -F . '{print $2}'` > - > - if test $maj != 1 || test $min -lt 5 > - then > - return 1 > - fi > - > - return 0 > -} > - > - > -if test "$nettle" != "no"; then > - pass="no" > - if $pkg_config --exists "nettle >= 2.7.1"; then > - nettle_cflags=$($pkg_config --cflags nettle) > - nettle_libs=$($pkg_config --libs nettle) > - nettle_version=$($pkg_config --modversion nettle) > - # Link test to make sure the given libraries work (e.g for static). > - write_c_skeleton > - if compile_prog "" "$nettle_libs" ; then > - LIBS="$nettle_libs $LIBS" > - QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags" > - if test -z "$gcrypt"; then > - gcrypt="no" > - fi > - pass="yes" > - fi > - fi > - if test "$pass" = "yes" > - then > - cat > $TMPC << EOF > -#include > -int main(void) { > - return 0; > -} > -EOF > - if compile_prog "$nettle_cflags" "$nettle_libs" ; then > - nettle_xts=yes > - qemu_private_xts=no > - fi > - fi > - if test "$pass" = "no" && test "$nettle" = "yes"; then > - feature_not_found "nettle" "Install nettle devel >= 2.7.1" > - else > - nettle="$pass" > - fi > -fi > - > -if test "$gcrypt" != "no"; then > - pass="no" > - if has_libgcrypt; then > - gcrypt_cflags=$(libgcrypt-config --cflags) > - gcrypt_libs=$(libgcrypt-config --libs) > - # Debian has removed -lgpg-error from libgcrypt-config > - # as it "spreads unnecessary dependencies" which in > - # turn breaks static builds... > - if test "$static" = "yes" > - then > - gcrypt_libs="$gcrypt_libs -lgpg-error" > - fi > - > - # Link test to make sure the given libraries work (e.g for static). > - write_c_skeleton > - if compile_prog "" "$gcrypt_libs" ; then > - LIBS="$gcrypt_libs $LIBS" > - QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags" > - pass="yes" > - fi > - fi > - if test "$pass" = "yes"; then > - gcrypt="yes" > - cat > $TMPC << EOF > -#include > -int main(void) { > - gcry_mac_hd_t handle; > - gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, > - GCRY_MAC_FLAG_SECURE, NULL); > - return 0; > -} > -EOF > - if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then > - gcrypt_hmac=yes > - fi > - cat > $TMPC << EOF > -#include > -int main(void) { > - gcry_cipher_hd_t handle; > - gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0); > - return 0; > -} > -EOF > - if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then > - gcrypt_xts=yes > - qemu_private_xts=no > - fi > - elif test "$gcrypt" = "yes"; then > - feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0" > - else > - gcrypt="no" > - fi > -fi > - > - > -if test "$gcrypt" = "yes" && test "$nettle" = "yes" > -then > - error_exit "Only one of gcrypt & nettle can be enabled" > -fi > - > -########################################## > -# libtasn1 - only for the TLS creds/session test suite > - > -tasn1=yes > -tasn1_cflags="" > -tasn1_libs="" > -if $pkg_config --exists "libtasn1"; then > - tasn1_cflags=$($pkg_config --cflags libtasn1) > - tasn1_libs=$($pkg_config --libs libtasn1) > -else > - tasn1=no > -fi > - > - > -########################################## > -# PAM probe > - > -if test "$auth_pam" != "no"; then > - cat > $TMPC < -#include > -#include > -int main(void) { > - const char *service_name = "qemu"; > - const char *user = "frank"; > - const struct pam_conv pam_conv = { 0 }; > - pam_handle_t *pamh = NULL; > - pam_start(service_name, user, &pam_conv, &pamh); > - return 0; > -} > -EOF > - if compile_prog "" "-lpam" ; then > - auth_pam=yes > - else > - if test "$auth_pam" = "yes"; then > - feature_not_found "PAM" "Install PAM development package" > - else > - auth_pam=no > - fi > - fi > -fi > - > -########################################## > -# getifaddrs (for tests/test-io-channel-socket ) > - > -have_ifaddrs_h=yes > -if ! check_include "ifaddrs.h" ; then > - have_ifaddrs_h=no > -fi > - > -######################################### > -# libdrm check > -have_drm_h=no > -if check_include "libdrm/drm.h" ; then > - have_drm_h=yes > -fi > - > -######################################### > -# sys/signal.h check > -have_sys_signal_h=no > -if check_include "sys/signal.h" ; then > - have_sys_signal_h=yes > -fi > - > -########################################## > -# VTE probe > - > -if test "$vte" != "no"; then > - vteminversion="0.32.0" > - if $pkg_config --exists "vte-2.91"; then > - vtepackage="vte-2.91" > - else > - vtepackage="vte-2.90" > - fi > - if $pkg_config --exists "$vtepackage >= $vteminversion"; then > - vte_cflags=$($pkg_config --cflags $vtepackage) > - vte_libs=$($pkg_config --libs $vtepackage) > - vteversion=$($pkg_config --modversion $vtepackage) > - vte="yes" > - elif test "$vte" = "yes"; then > - feature_not_found "vte" "Install libvte-2.90/2.91 devel" > - else > - vte="no" > - fi > -fi > - > -########################################## > -# RDMA needs OpenFabrics libraries > -if test "$rdma" != "no" ; then > - cat > $TMPC < -#include > -int main(void) { return 0; } > -EOF > - rdma_libs="-lrdmacm -libverbs -libumad" > - if compile_prog "" "$rdma_libs" ; then > - rdma="yes" > - else > - if test "$rdma" = "yes" ; then > - error_exit \ > - " OpenFabrics librdmacm/libibverbs/libibumad not present." \ > - " Your options:" \ > - " (1) Fast: Install infiniband packages (devel) from your distro." \ > - " (2) Cleanest: Install libraries from www.openfabrics.org" \ > - " (3) Also: Install softiwarp if you don't have RDMA hardware" > - fi > - rdma="no" > - fi > -fi > - > -########################################## > -# PVRDMA detection > - > -cat > $TMPC < -#include > - > -int > -main(void) > -{ > - char buf = 0; > - void *addr = &buf; > - addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); > - > - return 0; > -} > -EOF > - > -if test "$rdma" = "yes" ; then > - case "$pvrdma" in > - "") > - if compile_prog "" ""; then > - pvrdma="yes" > - else > - pvrdma="no" > - fi > - ;; > - "yes") > - if ! compile_prog "" ""; then > - error_exit "PVRDMA is not supported since mremap is not implemented" > - fi > - pvrdma="yes" > - ;; > - "no") > - pvrdma="no" > - ;; > - esac > -else > - if test "$pvrdma" = "yes" ; then > - error_exit "PVRDMA requires rdma suppport" > - fi > - pvrdma="no" > -fi > - > -# Let's see if enhanced reg_mr is supported > -if test "$pvrdma" = "yes" ; then > - > -cat > $TMPC < -#include > - > -int > -main(void) > -{ > - struct ibv_mr *mr; > - struct ibv_pd *pd = NULL; > - size_t length = 10; > - uint64_t iova = 0; > - int access = 0; > - void *addr = NULL; > - > - mr = ibv_reg_mr_iova(pd, addr, length, iova, access); > - > - ibv_dereg_mr(mr); > - > - return 0; > -} > -EOF > - if ! compile_prog "" "-libverbs"; then > - QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" > - fi > -fi > - > -########################################## > -# xfsctl() probe, used for file-posix.c > -if test "$xfs" != "no" ; then > - cat > $TMPC << EOF > -#include /* NULL */ > -#include > -int main(void) > -{ > - xfsctl(NULL, 0, 0, NULL); > - return 0; > -} > -EOF > - if compile_prog "" "" ; then > - xfs="yes" > - else > - if test "$xfs" = "yes" ; then > - feature_not_found "xfs" "Instal xfsprogs/xfslibs devel" > - fi > - xfs=no > - fi > -fi > - > -########################################## > -# vde libraries probe > -if test "$vde" != "no" ; then > - vde_libs="-lvdeplug" > - cat > $TMPC << EOF > -#include > -int main(void) > -{ > - struct vde_open_args a = {0, 0, 0}; > - char s[] = ""; > - vde_open(s, s, &a); > - return 0; > -} > -EOF > - if compile_prog "" "$vde_libs" ; then > - vde=yes > - else > - if test "$vde" = "yes" ; then > - feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" > - fi > - vde=no > - fi > -fi > - > -########################################## > -# netmap support probe > -# Apart from looking for netmap headers, we make sure that the host API version > -# supports the netmap backend (>=11). The upper bound (15) is meant to simulate > -# a minor/major version number. Minor new features will be marked with values up > -# to 15, and if something happens that requires a change to the backend we will > -# move above 15, submit the backend fixes and modify this two bounds. > -if test "$netmap" != "no" ; then > - cat > $TMPC << EOF > -#include > -#include > -#include > -#include > -#if (NETMAP_API < 11) || (NETMAP_API > 15) > -#error > -#endif > -int main(void) { return 0; } > -EOF > - if compile_prog "" "" ; then > - netmap=yes > - else > - if test "$netmap" = "yes" ; then > - feature_not_found "netmap" > - fi > - netmap=no > - fi > -fi > - > -########################################## > -# libcap-ng library probe > -if test "$cap_ng" != "no" ; then > - cap_libs="-lcap-ng" > - cat > $TMPC << EOF > -#include > -int main(void) > -{ > - capng_capability_to_name(CAPNG_EFFECTIVE); > - return 0; > -} > -EOF > - if compile_prog "" "$cap_libs" ; then > - cap_ng=yes > - else > - if test "$cap_ng" = "yes" ; then > - feature_not_found "cap_ng" "Install libcap-ng devel" > - fi > - cap_ng=no > - fi > -fi > - > -########################################## > -# Sound support libraries probe > - > -audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') > -for drv in $audio_drv_list; do > - case $drv in > - alsa | try-alsa) > - if $pkg_config alsa --exists; then > - alsa_libs=$($pkg_config alsa --libs) > - alsa_cflags=$($pkg_config alsa --cflags) > - alsa=yes > - if test "$drv" = "try-alsa"; then > - audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/') > - fi > - else > - if test "$drv" = "try-alsa"; then > - audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//') > - else > - error_exit "$drv check failed" \ > - "Make sure to have the $drv libs and headers installed." > - fi > - fi > - ;; > - > - pa | try-pa) > - if $pkg_config libpulse --exists; then > - libpulse=yes > - pulse_libs=$($pkg_config libpulse --libs) > - pulse_cflags=$($pkg_config libpulse --cflags) > - if test "$drv" = "try-pa"; then > - audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/') > - fi > - else > - if test "$drv" = "try-pa"; then > - audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//') > - else > - error_exit "$drv check failed" \ > - "Make sure to have the $drv libs and headers installed." > - fi > - fi > - ;; > - > - sdl) > - if test "$sdl" = "no"; then > - error_exit "sdl not found or disabled, can not use sdl audio driver" > - fi > - ;; > - > - try-sdl) > - if test "$sdl" = "no"; then > - audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//') > - else > - audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/') > - fi > - ;; > - > - coreaudio) > - coreaudio_libs="-framework CoreAudio" > - ;; > - > - dsound) > - dsound_libs="-lole32 -ldxguid" > - audio_win_int="yes" > - ;; > - > - oss) > - oss_libs="$oss_lib" > - ;; > - > - jack | try-jack) > - if $pkg_config jack --exists; then > - libjack=yes > - jack_libs=$($pkg_config jack --libs) > - if test "$drv" = "try-jack"; then > - audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/') > - fi > - else > - if test "$drv" = "try-jack"; then > - audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//') > - else > - error_exit "$drv check failed" \ > - "Make sure to have the $drv libs and headers installed." > - fi > - fi > - ;; > - > - *) > - echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { > - error_exit "Unknown driver '$drv' selected" \ > - "Possible drivers are: $audio_possible_drivers" > - } > - ;; > - esac > -done > - > -########################################## > -# BrlAPI probe > - > -if test "$brlapi" != "no" ; then > - brlapi_libs="-lbrlapi" > - cat > $TMPC << EOF > -#include > -#include > -int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } > -EOF > - if compile_prog "" "$brlapi_libs" ; then > - brlapi=yes > - else > - if test "$brlapi" = "yes" ; then > - feature_not_found "brlapi" "Install brlapi devel" > - fi > - brlapi=no > - fi > -fi > - > -########################################## > -# iconv probe > -if test "$iconv" != "no" ; then > - cat > $TMPC << EOF > -#include > -int main(void) { > - iconv_t conv = iconv_open("WCHAR_T", "UCS-2"); > - return conv != (iconv_t) -1; > -} > -EOF > - iconv_prefix_list="/usr/local:/usr" > - iconv_lib_list=":-liconv" > - IFS=: > - for iconv_prefix in $iconv_prefix_list; do > - IFS=: > - iconv_cflags="-I$iconv_prefix/include" > - iconv_ldflags="-L$iconv_prefix/lib" > - for iconv_link in $iconv_lib_list; do > - unset IFS > - iconv_lib="$iconv_ldflags $iconv_link" > - echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log > - if compile_prog "$iconv_cflags" "$iconv_lib" ; then > - iconv_found=yes > - break > - fi > - done > - if test "$iconv_found" = yes ; then > - break > - fi > - done > - if test "$iconv_found" = "yes" ; then > - iconv=yes > - else > - if test "$iconv" = "yes" ; then > - feature_not_found "iconv" "Install iconv devel" > - fi > - iconv=no > - fi > -fi > - > -########################################## > -# curses probe > -if test "$iconv" = "no" ; then > - # curses will need iconv > - curses=no > -fi > -if test "$curses" != "no" ; then > - if test "$mingw32" = "yes" ; then > - curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):" > - curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses" > - else > - curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:" > - curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw" > - fi > - curses_found=no > - cat > $TMPC << EOF > -#include > -#include > -#include > -#include > -int main(void) { > - const char *codeset; > - wchar_t wch = L'w'; > - setlocale(LC_ALL, ""); > - resize_term(0, 0); > - addwstr(L"wide chars\n"); > - addnwstr(&wch, 1); > - add_wch(WACS_DEGREE); > - codeset = nl_langinfo(CODESET); > - return codeset != 0; > -} > -EOF > - IFS=: > - for curses_inc in $curses_inc_list; do > - # Make sure we get the wide character prototypes > - curses_inc="-DNCURSES_WIDECHAR $curses_inc" > - IFS=: > - for curses_lib in $curses_lib_list; do > - unset IFS > - if compile_prog "$curses_inc" "$curses_lib" ; then > - curses_found=yes > - break > - fi > - done > - if test "$curses_found" = yes ; then > - break > - fi > - done > - unset IFS > - if test "$curses_found" = "yes" ; then > - curses=yes > - else > - if test "$curses" = "yes" ; then > - feature_not_found "curses" "Install ncurses devel" > - fi > - curses=no > - fi > -fi > - > -########################################## > -# curl probe > -if test "$curl" != "no" ; then > - if $pkg_config libcurl --exists; then > - curlconfig="$pkg_config libcurl" > - else > - curlconfig=curl-config > - fi > - cat > $TMPC << EOF > -#include > -int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } > -EOF > - curl_cflags=$($curlconfig --cflags 2>/dev/null) > - curl_libs=$($curlconfig --libs 2>/dev/null) > - if compile_prog "$curl_cflags" "$curl_libs" ; then > - curl=yes > - else > - if test "$curl" = "yes" ; then > - feature_not_found "curl" "Install libcurl devel" > - fi > - curl=no > - fi > -fi # test "$curl" > - > -########################################## > -# glib support probe > - > -glib_req_ver=2.48 > -glib_modules=gthread-2.0 > -if test "$modules" = yes; then > - glib_modules="$glib_modules gmodule-export-2.0" > -fi > -if test "$plugins" = yes; then > - glib_modules="$glib_modules gmodule-2.0" > -fi > - > -# This workaround is required due to a bug in pkg-config file for glib as it > -# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static > - > -if test "$static" = yes && test "$mingw32" = yes; then > - QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS" > -fi > - > -for i in $glib_modules; do > - if $pkg_config --atleast-version=$glib_req_ver $i; then > - glib_cflags=$($pkg_config --cflags $i) > - glib_libs=$($pkg_config --libs $i) > - QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS" > - LIBS="$glib_libs $LIBS" > - else > - error_exit "glib-$glib_req_ver $i is required to compile QEMU" > - fi > -done > - > -if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then > - gio=yes > - gio_cflags=$($pkg_config --cflags gio-2.0) > - gio_libs=$($pkg_config --libs gio-2.0) > - gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) > - if [ ! -x "$gdbus_codegen" ]; then > - gdbus_codegen= > - fi > -else > - gio=no > -fi > - > -if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then > - gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" > - gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" > -fi > - > -# Sanity check that the current size_t matches the > -# size that glib thinks it should be. This catches > -# problems on multi-arch where people try to build > -# 32-bit QEMU while pointing at 64-bit glib headers > -cat > $TMPC < -#include > -#include > - > -#define QEMU_BUILD_BUG_ON(x) \ > - typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); > - > -int main(void) { > - QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); > - return 0; > -} > -EOF > - > -if ! compile_prog "$CFLAGS" "$LIBS" ; then > - error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ > - "You probably need to set PKG_CONFIG_LIBDIR"\ > - "to point to the right pkg-config files for your"\ > - "build target" > -fi > - > -# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage > -cat > $TMPC << EOF > -#include > -int main(void) { return 0; } > -EOF > -if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then > - if cc_has_warning_flag "-Wno-unknown-attributes"; then > - glib_cflags="-Wno-unknown-attributes $glib_cflags" > - QEMU_CFLAGS="-Wno-unknown-attributes $CFLAGS" > - fi > -fi > - > -# Silence clang warnings triggered by glib < 2.57.2 > -cat > $TMPC << EOF > -#include > -typedef struct Foo { > - int i; > -} Foo; > -static void foo_free(Foo *f) > -{ > - g_free(f); > -} > -G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); > -int main(void) { return 0; } > -EOF > -if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then > - if cc_has_warning_flag "-Wno-unused-function"; then > - glib_cflags="$glib_cflags -Wno-unused-function" > - CFLAGS="$CFLAGS -Wno-unused-function" > - fi > -fi > - > -########################################## > -# SHA command probe for modules > -if test "$modules" = yes; then > - shacmd_probe="sha1sum sha1 shasum" > - for c in $shacmd_probe; do > - if has $c; then > - shacmd="$c" > - break > - fi > - done > - if test "$shacmd" = ""; then > - error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" > - fi > -fi > - > -########################################## > -# libmpathpersist probe > - > -if test "$mpath" != "no" ; then > - # probe for the new API > - cat > $TMPC < -#include > -#include > -unsigned mpath_mx_alloc_len = 1024; > -int logsink; > -static struct config *multipath_conf; > -extern struct udev *udev; > -extern struct config *get_multipath_config(void); > -extern void put_multipath_config(struct config *conf); > -struct udev *udev; > -struct config *get_multipath_config(void) { return multipath_conf; } > -void put_multipath_config(struct config *conf) { } > - > -int main(void) { > - udev = udev_new(); > - multipath_conf = mpath_lib_init(); > - return 0; > -} > -EOF > - if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then > - mpathpersist=yes > - mpathpersist_new_api=yes > - else > - # probe for the old API > - cat > $TMPC < -#include > -#include > -unsigned mpath_mx_alloc_len = 1024; > -int logsink; > -int main(void) { > - struct udev *udev = udev_new(); > - mpath_lib_init(udev); > - return 0; > -} > -EOF > - if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then > - mpathpersist=yes > - mpathpersist_new_api=no > - else > - mpathpersist=no > - fi > - fi > -else > - mpathpersist=no > -fi > - > -########################################## > -# pthread probe > -PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" > - > -pthread=no > -cat > $TMPC << EOF > -#include > -static void *f(void *p) { return NULL; } > -int main(void) { > - pthread_t thread; > - pthread_create(&thread, 0, f, 0); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - pthread=yes > -else > - for pthread_lib in $PTHREADLIBS_LIST; do > - if compile_prog "" "$pthread_lib" ; then > - pthread=yes > - found=no > - for lib_entry in $LIBS; do > - if test "$lib_entry" = "$pthread_lib"; then > - found=yes > - break > - fi > - done > - if test "$found" = "no"; then > - LIBS="$pthread_lib $LIBS" > - fi > - PTHREAD_LIB="$pthread_lib" > - break > - fi > - done > -fi > - > -if test "$mingw32" != yes && test "$pthread" = no; then > - error_exit "pthread check failed" \ > - "Make sure to have the pthread libs and headers installed." > -fi > - > -# check for pthread_setname_np with thread id > -pthread_setname_np_w_tid=no > -cat > $TMPC << EOF > -#include > - > -static void *f(void *p) { return NULL; } > -int main(void) > -{ > - pthread_t thread; > - pthread_create(&thread, 0, f, 0); > - pthread_setname_np(thread, "QEMU"); > - return 0; > -} > -EOF > -if compile_prog "" "$pthread_lib" ; then > - pthread_setname_np_w_tid=yes > -fi > - > -# check for pthread_setname_np without thread id > -pthread_setname_np_wo_tid=no > -cat > $TMPC << EOF > -#include > - > -static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; } > -int main(void) > -{ > - pthread_t thread; > - pthread_create(&thread, 0, f, 0); > - return 0; > -} > -EOF > -if compile_prog "" "$pthread_lib" ; then > - pthread_setname_np_wo_tid=yes > -fi > - > -########################################## > -# rbd probe > -if test "$rbd" != "no" ; then > - cat > $TMPC < -#include > -#include > -int main(void) { > - rados_t cluster; > - rados_create(&cluster, NULL); > - return 0; > -} > -EOF > - rbd_libs="-lrbd -lrados" > - if compile_prog "" "$rbd_libs" ; then > - rbd=yes > - else > - if test "$rbd" = "yes" ; then > - feature_not_found "rados block device" "Install librbd/ceph devel" > - fi > - rbd=no > - fi > -fi > - > -########################################## > -# libssh probe > -if test "$libssh" != "no" ; then > - if $pkg_config --exists libssh; then > - libssh_cflags=$($pkg_config libssh --cflags) > - libssh_libs=$($pkg_config libssh --libs) > - libssh=yes > - else > - if test "$libssh" = "yes" ; then > - error_exit "libssh required for --enable-libssh" > - fi > - libssh=no > - fi > -fi > - > -########################################## > -# Check for libssh 0.8 > -# This is done like this instead of using the LIBSSH_VERSION_* and > -# SSH_VERSION_* macros because some distributions in the past shipped > -# snapshots of the future 0.8 from Git, and those snapshots did not > -# have updated version numbers (still referring to 0.7.0). > - > -if test "$libssh" = "yes"; then > - cat > $TMPC < -#include > -int main(void) { return ssh_get_server_publickey(NULL, NULL); } > -EOF > - if compile_prog "$libssh_cflags" "$libssh_libs"; then > - libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" > - fi > -fi > - > -########################################## > -# linux-aio probe > - > -if test "$linux_aio" != "no" ; then > - cat > $TMPC < -#include > -#include > -#include > -int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } > -EOF > - if compile_prog "" "-laio" ; then > - linux_aio=yes > - else > - if test "$linux_aio" = "yes" ; then > - feature_not_found "linux AIO" "Install libaio devel" > - fi > - linux_aio=no > - fi > -fi > -########################################## > -# linux-io-uring probe > - > -if test "$linux_io_uring" != "no" ; then > - if $pkg_config liburing; then > - linux_io_uring_cflags=$($pkg_config --cflags liburing) > - linux_io_uring_libs=$($pkg_config --libs liburing) > - linux_io_uring=yes > - > - # io_uring is used in libqemuutil.a where per-file -libs variables are not > - # seen by programs linking the archive. It's not ideal, but just add the > - # library dependency globally. > - LIBS="$linux_io_uring_libs $LIBS" > - else > - if test "$linux_io_uring" = "yes" ; then > - feature_not_found "linux io_uring" "Install liburing devel" > - fi > - linux_io_uring=no > - fi > -fi > - > -########################################## > -# TPM emulation is only on POSIX > - > -if test "$tpm" = ""; then > - if test "$mingw32" = "yes"; then > - tpm=no > - else > - tpm=yes > - fi > -elif test "$tpm" = "yes"; then > - if test "$mingw32" = "yes" ; then > - error_exit "TPM emulation only available on POSIX systems" > - fi > -fi > - > -########################################## > -# attr probe > - > -libattr_libs= > -if test "$attr" != "no" ; then > - cat > $TMPC < -#include > -#include > -#ifdef CONFIG_LIBATTR > -#include > -#else > -#include > -#endif > -int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } > -EOF > - if compile_prog "" "" ; then > - attr=yes > - # Older distros have , and need -lattr: > - elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then > - attr=yes > - libattr_libs="-lattr" > - LIBS="$libattr_libs $LIBS" > - libattr=yes > - else > - if test "$attr" = "yes" ; then > - feature_not_found "ATTR" "Install libc6 or libattr devel" > - fi > - attr=no > - fi > -fi > - > -########################################## > -# iovec probe > -cat > $TMPC < -#include > -#include > -#include > -int main(void) { return sizeof(struct iovec); } > -EOF > -iovec=no > -if compile_prog "" "" ; then > - iovec=yes > -fi > - > -########################################## > -# preadv probe > -cat > $TMPC < -#include > -#include > -#include > -int main(void) { return preadv(0, 0, 0, 0); } > -EOF > -preadv=no > -if compile_prog "" "" ; then > - preadv=yes > -fi > - > -########################################## > -# fdt probe > -# fdt support is mandatory for at least some target architectures, > -# so insist on it if we're building those system emulators. > -fdt_required=no > -for target in $target_list; do > - case $target in > - aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu) > - fdt_required=yes > - ;; > - esac > -done > - > -if test "$fdt_required" = "yes"; then > - if test "$fdt" = "no"; then > - error_exit "fdt disabled but some requested targets require it." \ > - "You can turn off fdt only if you also disable all the system emulation" \ > - "targets which need it (by specifying a cut down --target-list)." > - fi > - fdt=yes > -elif test "$fdt" != "yes" ; then > - fdt=no > -fi > - > -# fdt is only required when building softmmu targets > -if test -z "$fdt" -a "$softmmu" != "yes" ; then > - fdt="no" > -fi > - > -if test "$fdt" != "no" ; then > - fdt_libs="-lfdt" > - # explicitly check for libfdt_env.h as it is missing in some stable installs > - # and test for required functions to make sure we are on a version >= 1.4.2 > - cat > $TMPC << EOF > -#include > -#include > -int main(void) { fdt_check_full(NULL, 0); return 0; } > -EOF > - if compile_prog "" "$fdt_libs" ; then > - # system DTC is good - use it > - fdt=system > - else > - # have GIT checkout, so activate dtc submodule > - if test -e "${source_path}/.git" ; then > - git_submodules="${git_submodules} dtc" > - fi > - if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then > - fdt=git > - mkdir -p dtc > - fdt_cflags="-I${source_path}/dtc/libfdt" > - fdt_ldflags="-L${build_path}/dtc/libfdt" > - fdt_libs="$fdt_libs" > - elif test "$fdt" = "yes" ; then > - # Not a git build & no libfdt found, prompt for system install > - error_exit "DTC (libfdt) version >= 1.4.2 not present." \ > - "Please install the DTC (libfdt) devel package" > - else > - # don't have and don't want > - fdt_libs= > - fdt=no > - fi > - fi > -fi > - > -########################################## > -# opengl probe (for sdl2, gtk, milkymist-tmu2) > - > -gbm="no" > -if $pkg_config gbm; then > - gbm_cflags="$($pkg_config --cflags gbm)" > - gbm_libs="$($pkg_config --libs gbm)" > - gbm="yes" > -fi > - > -if test "$opengl" != "no" ; then > - opengl_pkgs="epoxy gbm" > - if $pkg_config $opengl_pkgs; then > - opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" > - opengl_libs="$($pkg_config --libs $opengl_pkgs)" > - opengl=yes > - if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then > - gtk_gl="yes" > - fi > - QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" > - else > - if test "$opengl" = "yes" ; then > - feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" > - fi > - opengl_cflags="" > - opengl_libs="" > - opengl=no > - fi > -fi > - > -if test "$opengl" = "yes"; then > - cat > $TMPC << EOF > -#include > -#ifndef EGL_MESA_image_dma_buf_export > -# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) > -#endif > -int main(void) { return 0; } > -EOF > - if compile_prog "" "" ; then > - opengl_dmabuf=yes > - fi > -fi > - > -if test "$opengl" = "yes" && test "$have_x11" = "yes"; then > - for target in $target_list; do > - case $target in > - lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL > - need_x11=yes > - ;; > - esac > - done > -fi > - > -########################################## > -# libxml2 probe > -if test "$libxml2" != "no" ; then > - if $pkg_config --exists libxml-2.0; then > - libxml2="yes" > - libxml2_cflags=$($pkg_config --cflags libxml-2.0) > - libxml2_libs=$($pkg_config --libs libxml-2.0) > - else > - if test "$libxml2" = "yes"; then > - feature_not_found "libxml2" "Install libxml2 devel" > - fi > - libxml2="no" > - fi > -fi > - > -########################################## > -# glusterfs probe > -if test "$glusterfs" != "no" ; then > - if $pkg_config --atleast-version=3 glusterfs-api; then > - glusterfs="yes" > - glusterfs_cflags=$($pkg_config --cflags glusterfs-api) > - glusterfs_libs=$($pkg_config --libs glusterfs-api) > - if $pkg_config --atleast-version=4 glusterfs-api; then > - glusterfs_xlator_opt="yes" > - fi > - if $pkg_config --atleast-version=5 glusterfs-api; then > - glusterfs_discard="yes" > - fi > - if $pkg_config --atleast-version=6 glusterfs-api; then > - glusterfs_fallocate="yes" > - glusterfs_zerofill="yes" > - fi > - cat > $TMPC << EOF > -#include > - > -int > -main(void) > -{ > - /* new glfs_ftruncate() passes two additional args */ > - return glfs_ftruncate(NULL, 0, NULL, NULL); > -} > -EOF > - if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then > - glusterfs_ftruncate_has_stat="yes" > - fi > - cat > $TMPC << EOF > -#include > - > -/* new glfs_io_cbk() passes two additional glfs_stat structs */ > -static void > -glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) > -{} > - > -int > -main(void) > -{ > - glfs_io_cbk iocb = &glusterfs_iocb; > - iocb(NULL, 0 , NULL, NULL, NULL); > - return 0; > -} > -EOF > - if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then > - glusterfs_iocb_has_stat="yes" > - fi > - else > - if test "$glusterfs" = "yes" ; then > - feature_not_found "GlusterFS backend support" \ > - "Install glusterfs-api devel >= 3" > - fi > - glusterfs="no" > - fi > -fi > - > -# Check for inotify functions when we are building linux-user > -# emulator. This is done because older glibc versions don't > -# have syscall stubs for these implemented. In that case we > -# don't provide them even if kernel supports them. > -# > -inotify=no > -cat > $TMPC << EOF > -#include > - > -int > -main(void) > -{ > - /* try to start inotify */ > - return inotify_init(); > -} > -EOF > -if compile_prog "" "" ; then > - inotify=yes > -fi > - > -inotify1=no > -cat > $TMPC << EOF > -#include > - > -int > -main(void) > -{ > - /* try to start inotify */ > - return inotify_init1(0); > -} > -EOF > -if compile_prog "" "" ; then > - inotify1=yes > -fi > - > -# check if pipe2 is there > -pipe2=no > -cat > $TMPC << EOF > -#include > -#include > - > -int main(void) > -{ > - int pipefd[2]; > - return pipe2(pipefd, O_CLOEXEC); > -} > -EOF > -if compile_prog "" "" ; then > - pipe2=yes > -fi > - > -# check if accept4 is there > -accept4=no > -cat > $TMPC << EOF > -#include > -#include > - > -int main(void) > -{ > - accept4(0, NULL, NULL, SOCK_CLOEXEC); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - accept4=yes > -fi > - > -# check if tee/splice is there. vmsplice was added same time. > -splice=no > -cat > $TMPC << EOF > -#include > -#include > -#include > - > -int main(void) > -{ > - int len, fd = 0; > - len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); > - splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - splice=yes > -fi > - > -########################################## > -# libnuma probe > - > -if test "$numa" != "no" ; then > - cat > $TMPC << EOF > -#include > -int main(void) { return numa_available(); } > -EOF > - > - if compile_prog "" "-lnuma" ; then > - numa=yes > - numa_libs="-lnuma" > - else > - if test "$numa" = "yes" ; then > - feature_not_found "numa" "install numactl devel" > - fi > - numa=no > - fi > -fi > - > -if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then > - echo "ERROR: tcmalloc && jemalloc can't be used at the same time" > - exit 1 > -fi > - > -# Even if malloc_trim() is available, these non-libc memory allocators > -# do not support it. > -if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then > - if test "$malloc_trim" = "yes" ; then > - echo "Disabling malloc_trim with non-libc memory allocator" > - fi > - malloc_trim="no" > -fi > - > -####################################### > -# malloc_trim > - > -if test "$malloc_trim" != "no" ; then > - cat > $TMPC << EOF > -#include > -int main(void) { malloc_trim(0); return 0; } > -EOF > - if compile_prog "" "" ; then > - malloc_trim="yes" > - else > - malloc_trim="no" > - fi > -fi > - > -########################################## > -# tcmalloc probe > - > -if test "$tcmalloc" = "yes" ; then > - cat > $TMPC << EOF > -#include > -int main(void) { > - void *tmp = malloc(1); > - if (tmp != NULL) { > - return 0; > - } > - return 1; > -} > -EOF > - > - if compile_prog "" "-ltcmalloc" ; then > - LIBS="-ltcmalloc $LIBS" > - else > - feature_not_found "tcmalloc" "install gperftools devel" > - fi > -fi > - > -########################################## > -# jemalloc probe > - > -if test "$jemalloc" = "yes" ; then > - cat > $TMPC << EOF > -#include > -int main(void) { > - void *tmp = malloc(1); > - if (tmp != NULL) { > - return 0; > - } > - return 1; > -} > -EOF > - > - if compile_prog "" "-ljemalloc" ; then > - LIBS="-ljemalloc $LIBS" > - else > - feature_not_found "jemalloc" "install jemalloc devel" > - fi > -fi > - > -########################################## > -# signalfd probe > -signalfd="no" > -cat > $TMPC << EOF > -#include > -#include > -#include > -int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } > -EOF > - > -if compile_prog "" "" ; then > - signalfd=yes > -fi > - > -# check if optreset global is declared by > -optreset="no" > -cat > $TMPC << EOF > -#include > -int main(void) { return optreset; } > -EOF > - > -if compile_prog "" "" ; then > - optreset=yes > -fi > - > -# check if eventfd is supported > -eventfd=no > -cat > $TMPC << EOF > -#include > - > -int main(void) > -{ > - return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); > -} > -EOF > -if compile_prog "" "" ; then > - eventfd=yes > -fi > - > -# check if memfd is supported > -memfd=no > -cat > $TMPC << EOF > -#include > - > -int main(void) > -{ > - return memfd_create("foo", MFD_ALLOW_SEALING); > -} > -EOF > -if compile_prog "" "" ; then > - memfd=yes > -fi > - > -# check for usbfs > -have_usbfs=no > -if test "$linux_user" = "yes"; then > - cat > $TMPC << EOF > -#include > - > -#ifndef USBDEVFS_GET_CAPABILITIES > -#error "USBDEVFS_GET_CAPABILITIES undefined" > -#endif > - > -#ifndef USBDEVFS_DISCONNECT_CLAIM > -#error "USBDEVFS_DISCONNECT_CLAIM undefined" > -#endif > - > -int main(void) > -{ > - return 0; > -} > -EOF > - if compile_prog "" ""; then > - have_usbfs=yes > - fi > -fi > - > -# check for fallocate > -fallocate=no > -cat > $TMPC << EOF > -#include > - > -int main(void) > -{ > - fallocate(0, 0, 0, 0); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - fallocate=yes > -fi > - > -# check for fallocate hole punching > -fallocate_punch_hole=no > -cat > $TMPC << EOF > -#include > -#include > - > -int main(void) > -{ > - fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - fallocate_punch_hole=yes > -fi > - > -# check that fallocate supports range zeroing inside the file > -fallocate_zero_range=no > -cat > $TMPC << EOF > -#include > -#include > - > -int main(void) > -{ > - fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - fallocate_zero_range=yes > -fi > - > -# check for posix_fallocate > -posix_fallocate=no > -cat > $TMPC << EOF > -#include > - > -int main(void) > -{ > - posix_fallocate(0, 0, 0); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - posix_fallocate=yes > -fi > - > -# check for sync_file_range > -sync_file_range=no > -cat > $TMPC << EOF > -#include > - > -int main(void) > -{ > - sync_file_range(0, 0, 0, 0); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - sync_file_range=yes > -fi > - > -# check for linux/fiemap.h and FS_IOC_FIEMAP > -fiemap=no > -cat > $TMPC << EOF > -#include > -#include > -#include > - > -int main(void) > -{ > - ioctl(0, FS_IOC_FIEMAP, 0); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - fiemap=yes > -fi > - > -# check for dup3 > -dup3=no > -cat > $TMPC << EOF > -#include > - > -int main(void) > -{ > - dup3(0, 0, 0); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - dup3=yes > -fi > - > -# check for ppoll support > -ppoll=no > -cat > $TMPC << EOF > -#include > - > -int main(void) > -{ > - struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; > - ppoll(&pfd, 1, 0, 0); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - ppoll=yes > -fi > - > -# check for prctl(PR_SET_TIMERSLACK , ... ) support > -prctl_pr_set_timerslack=no > -cat > $TMPC << EOF > -#include > - > -int main(void) > -{ > - prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - prctl_pr_set_timerslack=yes > -fi > - > -# check for epoll support > -epoll=no > -cat > $TMPC << EOF > -#include > - > -int main(void) > -{ > - epoll_create(0); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - epoll=yes > -fi > - > -# epoll_create1 is a later addition > -# so we must check separately for its presence > -epoll_create1=no > -cat > $TMPC << EOF > -#include > - > -int main(void) > -{ > - /* Note that we use epoll_create1 as a value, not as > - * a function being called. This is necessary so that on > - * old SPARC glibc versions where the function was present in > - * the library but not declared in the header file we will > - * fail the configure check. (Otherwise we will get a compiler > - * warning but not an error, and will proceed to fail the > - * qemu compile where we compile with -Werror.) > - */ > - return (int)(uintptr_t)&epoll_create1; > -} > -EOF > -if compile_prog "" "" ; then > - epoll_create1=yes > -fi > - > -# check for sendfile support > -sendfile=no > -cat > $TMPC << EOF > -#include > - > -int main(void) > -{ > - return sendfile(0, 0, 0, 0); > -} > -EOF > -if compile_prog "" "" ; then > - sendfile=yes > -fi > - > -# check for timerfd support (glibc 2.8 and newer) > -timerfd=no > -cat > $TMPC << EOF > -#include > - > -int main(void) > -{ > - return(timerfd_create(CLOCK_REALTIME, 0)); > -} > -EOF > -if compile_prog "" "" ; then > - timerfd=yes > -fi > - > -# check for setns and unshare support > -setns=no > -cat > $TMPC << EOF > -#include > - > -int main(void) > -{ > - int ret; > - ret = setns(0, 0); > - ret = unshare(0); > - return ret; > -} > -EOF > -if compile_prog "" "" ; then > - setns=yes > -fi > - > -# clock_adjtime probe > -clock_adjtime=no > -cat > $TMPC < -#include > - > -int main(void) > -{ > - return clock_adjtime(0, 0); > -} > -EOF > -clock_adjtime=no > -if compile_prog "" "" ; then > - clock_adjtime=yes > -fi > - > -# syncfs probe > -syncfs=no > -cat > $TMPC < -#include > - > -int main(void) > -{ > - return syncfs(0); > -} > -EOF > -syncfs=no > -if compile_prog "" "" ; then > - syncfs=yes > -fi > - > -# check for kcov support (kernel must be 4.4+, compiled with certain options) > -kcov=no > -if check_include sys/kcov.h ; then > - kcov=yes > -fi > - > -# If we're making warnings fatal, apply this to Sphinx runs as well > -sphinx_werror="" > -if test "$werror" = "yes"; then > - sphinx_werror="-W" > -fi > - > -# Check we have a new enough version of sphinx-build > -has_sphinx_build() { > - # This is a bit awkward but works: create a trivial document and > - # try to run it with our configuration file (which enforces a > - # version requirement). This will fail if either > - # sphinx-build doesn't exist at all or if it is too old. > - mkdir -p "$TMPDIR1/sphinx" > - touch "$TMPDIR1/sphinx/index.rst" > - "$sphinx_build" $sphinx_werror -c "$source_path/docs" \ > - -b html "$TMPDIR1/sphinx" \ > - "$TMPDIR1/sphinx/out" >> config.log 2>&1 > -} > - > -# Check if tools are available to build documentation. > -if test "$docs" != "no" ; then > - if has_sphinx_build; then > - sphinx_ok=yes > - else > - sphinx_ok=no > - fi > - if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then > - docs=yes > - else > - if test "$docs" = "yes" ; then > - if has $sphinx_build && test "$sphinx_ok" != "yes"; then > - echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2 > - fi > - feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx" > - fi > - docs=no > - fi > -fi > - > -# Search for bswap_32 function > -byteswap_h=no > -cat > $TMPC << EOF > -#include > -int main(void) { return bswap_32(0); } > -EOF > -if compile_prog "" "" ; then > - byteswap_h=yes > -fi > - > -# Search for bswap32 function > -bswap_h=no > -cat > $TMPC << EOF > -#include > -#include > -#include > -int main(void) { return bswap32(0); } > -EOF > -if compile_prog "" "" ; then > - bswap_h=yes > -fi > - > -########################################## > -# Do we have libiscsi >= 1.9.0 > -if test "$libiscsi" != "no" ; then > - if $pkg_config --atleast-version=1.9.0 libiscsi; then > - libiscsi="yes" > - libiscsi_cflags=$($pkg_config --cflags libiscsi) > - libiscsi_libs=$($pkg_config --libs libiscsi) > - else > - if test "$libiscsi" = "yes" ; then > - feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" > - fi > - libiscsi="no" > - fi > -fi > - > -########################################## > -# Do we need libm > -cat > $TMPC << EOF > -#include > -int main(int argc, char **argv) { return isnan(sin((double)argc)); } > -EOF > -if compile_prog "" "" ; then > - : > -elif compile_prog "" "-lm" ; then > - LIBS="-lm $LIBS" > -else > - error_exit "libm check failed" > -fi > - > -########################################## > -# Do we need librt > -# uClibc provides 2 versions of clock_gettime(), one with realtime > -# support and one without. This means that the clock_gettime() don't > -# need -lrt. We still need it for timer_create() so we check for this > -# function in addition. > -cat > $TMPC < -#include > -#include > -int main(void) { > - timer_create(CLOCK_REALTIME, NULL, NULL); > - return clock_gettime(CLOCK_REALTIME, NULL); > -} > -EOF > - > -if compile_prog "" "" ; then > - : > -# we need pthread for static linking. use previous pthread test result > -elif compile_prog "" "$pthread_lib -lrt" ; then > - LIBS="$LIBS -lrt" > -fi > - > -# Check whether we need to link libutil for openpty() > -cat > $TMPC << EOF > -extern int openpty(int *am, int *as, char *name, void *termp, void *winp); > -int main(void) { return openpty(0, 0, 0, 0, 0); } > -EOF > - > -have_openpty="no" > -if compile_prog "" "" ; then > - have_openpty="yes" > -else > - if compile_prog "" "-lutil" ; then > - libs_tools="-lutil $libs_tools" > - have_openpty="yes" > - fi > -fi > - > -########################################## > -# spice probe > -if test "$spice" != "no" ; then > - cat > $TMPC << EOF > -#include > -int main(void) { spice_server_new(); return 0; } > -EOF > - spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) > - spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) > - if $pkg_config --atleast-version=0.12.5 spice-server && \ > - $pkg_config --atleast-version=0.12.3 spice-protocol && \ > - compile_prog "$spice_cflags" "$spice_libs" ; then > - spice="yes" > - QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" > - else > - if test "$spice" = "yes" ; then > - feature_not_found "spice" \ > - "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" > - fi > - spice="no" > - fi > -fi > - > -# check for smartcard support > -if test "$smartcard" != "no"; then > - if $pkg_config --atleast-version=2.5.1 libcacard; then > - libcacard_cflags=$($pkg_config --cflags libcacard) > - libcacard_libs=$($pkg_config --libs libcacard) > - smartcard="yes" > - else > - if test "$smartcard" = "yes"; then > - feature_not_found "smartcard" "Install libcacard devel" > - fi > - smartcard="no" > - fi > -fi > - > -# check for libusb > -if test "$libusb" != "no" ; then > - if $pkg_config --atleast-version=1.0.13 libusb-1.0; then > - libusb="yes" > - libusb_cflags=$($pkg_config --cflags libusb-1.0) > - libusb_libs=$($pkg_config --libs libusb-1.0) > - else > - if test "$libusb" = "yes"; then > - feature_not_found "libusb" "Install libusb devel >= 1.0.13" > - fi > - libusb="no" > - fi > -fi > - > -# check for usbredirparser for usb network redirection support > -if test "$usb_redir" != "no" ; then > - if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then > - usb_redir="yes" > - usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) > - usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) > - else > - if test "$usb_redir" = "yes"; then > - feature_not_found "usb-redir" "Install usbredir devel" > - fi > - usb_redir="no" > - fi > -fi > - > -########################################## > -# check if we have VSS SDK headers for win > - > -if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ > - test "$vss_win32_sdk" != "no" ; then > - case "$vss_win32_sdk" in > - "") vss_win32_include="-isystem $source_path" ;; > - *\ *) # The SDK is installed in "Program Files" by default, but we cannot > - # handle path with spaces. So we symlink the headers into ".sdk/vss". > - vss_win32_include="-isystem $source_path/.sdk/vss" > - symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" > - ;; > - *) vss_win32_include="-isystem $vss_win32_sdk" > - esac > - cat > $TMPC << EOF > -#define __MIDL_user_allocate_free_DEFINED__ > -#include > -int main(void) { return VSS_CTX_BACKUP; } > -EOF > - if compile_prog "$vss_win32_include" "" ; then > - guest_agent_with_vss="yes" > - QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" > - libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" > - qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" > - else > - if test "$vss_win32_sdk" != "" ; then > - echo "ERROR: Please download and install Microsoft VSS SDK:" > - echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" > - echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" > - echo "ERROR: scripts/extract-vsssdk-headers setup.exe" > - echo "ERROR: The headers are extracted in the directory \`inc'." > - feature_not_found "VSS support" > - fi > - guest_agent_with_vss="no" > - fi > -fi > - > -########################################## > -# lookup Windows platform SDK (if not specified) > -# The SDK is needed only to build .tlb (type library) file of guest agent > -# VSS provider from the source. It is usually unnecessary because the > -# pre-compiled .tlb file is included. > - > -if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ > - test "$guest_agent_with_vss" = "yes" ; then > - if test -z "$win_sdk"; then > - programfiles="$PROGRAMFILES" > - test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" > - if test -n "$programfiles"; then > - win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null > - else > - feature_not_found "Windows SDK" > - fi > - elif test "$win_sdk" = "no"; then > - win_sdk="" > - fi > -fi > - > -########################################## > -# check if mingw environment provides a recent ntddscsi.h > -if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then > - cat > $TMPC << EOF > -#include > -#include > -int main(void) { > -#if !defined(IOCTL_SCSI_GET_ADDRESS) > -#error Missing required ioctl definitions > -#endif > - SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; > - return addr.Lun; > -} > -EOF > - if compile_prog "" "" ; then > - guest_agent_ntddscsi=yes > - libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" > - fi > -fi > - > -########################################## > -# virgl renderer probe > - > -if test "$virglrenderer" != "no" ; then > - cat > $TMPC << EOF > -#include > -int main(void) { virgl_renderer_poll(); return 0; } > -EOF > - virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) > - virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) > - virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) > - if $pkg_config virglrenderer >/dev/null 2>&1 && \ > - compile_prog "$virgl_cflags" "$virgl_libs" ; then > - virglrenderer="yes" > - else > - if test "$virglrenderer" = "yes" ; then > - feature_not_found "virglrenderer" > - fi > - virglrenderer="no" > - fi > -fi > - > -########################################## > -# capstone > - > -case "$capstone" in > - "" | yes) > - if $pkg_config capstone; then > - capstone=system > - elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then > - capstone=git > - elif test -e "${source_path}/capstone/Makefile" ; then > - capstone=internal > - elif test -z "$capstone" ; then > - capstone=no > - else > - feature_not_found "capstone" "Install capstone devel or git submodule" > - fi > - ;; > - > - system) > - if ! $pkg_config capstone; then > - feature_not_found "capstone" "Install capstone devel" > - fi > - ;; > -esac > - > -case "$capstone" in > - git | internal) > - if test "$capstone" = git; then > - git_submodules="${git_submodules} capstone" > - fi > - mkdir -p capstone > - QEMU_CFLAGS="$QEMU_CFLAGS -I${source_path}/capstone/include" > - if test "$mingw32" = "yes"; then > - LIBCAPSTONE=capstone.lib > - else > - LIBCAPSTONE=libcapstone.a > - fi > - capstone_libs="-L${build_path}/capstone -lcapstone" > - capstone_cflags="-I${source_path}/capstone/include" > - ;; > - > - system) > - capstone_libs="$($pkg_config --libs capstone)" > - capstone_cflags="$($pkg_config --cflags capstone)" > - QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" > - ;; > - > - no) > - ;; > - *) > - error_exit "Unknown state for capstone: $capstone" > - ;; > -esac > - > -########################################## > -# check if we have fdatasync > - > -fdatasync=no > -cat > $TMPC << EOF > -#include > -int main(void) { > -#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 > -return fdatasync(0); > -#else > -#error Not supported > -#endif > -} > -EOF > -if compile_prog "" "" ; then > - fdatasync=yes > -fi > - > -########################################## > -# check if we have madvise > - > -madvise=no > -cat > $TMPC << EOF > -#include > -#include > -#include > -int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } > -EOF > -if compile_prog "" "" ; then > - madvise=yes > -fi > - > -########################################## > -# check if we have posix_madvise > - > -posix_madvise=no > -cat > $TMPC << EOF > -#include > -#include > -int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } > -EOF > -if compile_prog "" "" ; then > - posix_madvise=yes > -fi > - > -########################################## > -# check if we have posix_memalign() > - > -posix_memalign=no > -cat > $TMPC << EOF > -#include > -int main(void) { > - void *p; > - return posix_memalign(&p, 8, 8); > -} > -EOF > -if compile_prog "" "" ; then > - posix_memalign=yes > -fi > - > -########################################## > -# check if we have posix_syslog > - > -posix_syslog=no > -cat > $TMPC << EOF > -#include > -int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } > -EOF > -if compile_prog "" "" ; then > - posix_syslog=yes > -fi > - > -########################################## > -# check if we have sem_timedwait > - > -sem_timedwait=no > -cat > $TMPC << EOF > -#include > -int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } > -EOF > -if compile_prog "" "" ; then > - sem_timedwait=yes > -fi > - > -########################################## > -# check if we have strchrnul > - > -strchrnul=no > -cat > $TMPC << EOF > -#include > -int main(void); > -// Use a haystack that the compiler shouldn't be able to constant fold > -char *haystack = (char*)&main; > -int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } > -EOF > -if compile_prog "" "" ; then > - strchrnul=yes > -fi > - > -######################################### > -# check if we have st_atim > - > -st_atim=no > -cat > $TMPC << EOF > -#include > -#include > -int main(void) { return offsetof(struct stat, st_atim); } > -EOF > -if compile_prog "" "" ; then > - st_atim=yes > -fi > - > -########################################## > -# check if trace backend exists > - > -$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null > -if test "$?" -ne 0 ; then > - error_exit "invalid trace backends" \ > - "Please choose supported trace backends." > -fi > - > -########################################## > -# For 'ust' backend, test if ust headers are present > -if have_backend "ust"; then > - cat > $TMPC << EOF > -#include > -int main(void) { return 0; } > -EOF > - if compile_prog "" "-Wl,--no-as-needed -ldl" ; then > - if $pkg_config lttng-ust --exists; then > - lttng_ust_libs=$($pkg_config --libs lttng-ust) > - else > - lttng_ust_libs="-llttng-ust -ldl" > - fi > - if $pkg_config liburcu-bp --exists; then > - urcu_bp_libs=$($pkg_config --libs liburcu-bp) > - else > - urcu_bp_libs="-lurcu-bp" > - fi > - > - LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" > - else > - error_exit "Trace backend 'ust' missing lttng-ust header files" > - fi > -fi > - > -########################################## > -# For 'dtrace' backend, test if 'dtrace' command is present > -if have_backend "dtrace"; then > - if ! has 'dtrace' ; then > - error_exit "dtrace command is not found in PATH $PATH" > - fi > - trace_backend_stap="no" > - if has 'stap' ; then > - trace_backend_stap="yes" > - fi > -fi > - > -########################################## > -# check and set a backend for coroutine > - > -# We prefer ucontext, but it's not always possible. The fallback > -# is sigcontext. On Windows the only valid backend is the Windows > -# specific one. > - > -ucontext_works=no > -if test "$darwin" != "yes"; then > - cat > $TMPC << EOF > -#include > -#ifdef __stub_makecontext > -#error Ignoring glibc stub makecontext which will always fail > -#endif > -int main(void) { makecontext(0, 0, 0); return 0; } > -EOF > - if compile_prog "" "" ; then > - ucontext_works=yes > - fi > -fi > - > -if test "$coroutine" = ""; then > - if test "$mingw32" = "yes"; then > - coroutine=win32 > - elif test "$ucontext_works" = "yes"; then > - coroutine=ucontext > - else > - coroutine=sigaltstack > - fi > -else > - case $coroutine in > - windows) > - if test "$mingw32" != "yes"; then > - error_exit "'windows' coroutine backend only valid for Windows" > - fi > - # Unfortunately the user visible backend name doesn't match the > - # coroutine-*.c filename for this case, so we have to adjust it here. > - coroutine=win32 > - ;; > - ucontext) > - if test "$ucontext_works" != "yes"; then > - feature_not_found "ucontext" > - fi > - ;; > - sigaltstack) > - if test "$mingw32" = "yes"; then > - error_exit "only the 'windows' coroutine backend is valid for Windows" > - fi > - ;; > - *) > - error_exit "unknown coroutine backend $coroutine" > - ;; > - esac > -fi > - > -if test "$coroutine_pool" = ""; then > - coroutine_pool=yes > -fi > - > -if test "$debug_stack_usage" = "yes"; then > - if test "$coroutine_pool" = "yes"; then > - echo "WARN: disabling coroutine pool for stack usage debugging" > - coroutine_pool=no > - fi > -fi > - > -################################################## > -# SafeStack > - > - > -if test "$safe_stack" = "yes"; then > -cat > $TMPC << EOF > -int main(int argc, char *argv[]) > -{ > -#if ! __has_feature(safe_stack) > -#error SafeStack Disabled > -#endif > - return 0; > -} > -EOF > - flag="-fsanitize=safe-stack" > - # Check that safe-stack is supported and enabled. > - if compile_prog "-Werror $flag" "$flag"; then > - # Flag needed both at compilation and at linking > - QEMU_CFLAGS="$QEMU_CFLAGS $flag" > - QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" > - else > - error_exit "SafeStack not supported by your compiler" > - fi > - if test "$coroutine" != "ucontext"; then > - error_exit "SafeStack is only supported by the coroutine backend ucontext" > - fi > -else > -cat > $TMPC << EOF > -int main(int argc, char *argv[]) > -{ > -#if defined(__has_feature) > -#if __has_feature(safe_stack) > -#error SafeStack Enabled > -#endif > -#endif > - return 0; > -} > -EOF > -if test "$safe_stack" = "no"; then > - # Make sure that safe-stack is disabled > - if ! compile_prog "-Werror" ""; then > - # SafeStack was already enabled, try to explicitly remove the feature > - flag="-fno-sanitize=safe-stack" > - if ! compile_prog "-Werror $flag" "$flag"; then > - error_exit "Configure cannot disable SafeStack" > - fi > - QEMU_CFLAGS="$QEMU_CFLAGS $flag" > - QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" > - fi > -else # "$safe_stack" = "" > - # Set safe_stack to yes or no based on pre-existing flags > - if compile_prog "-Werror" ""; then > - safe_stack="no" > - else > - safe_stack="yes" > - if test "$coroutine" != "ucontext"; then > - error_exit "SafeStack is only supported by the coroutine backend ucontext" > - fi > - fi > -fi > -fi > - > -########################################## > -# check if we have open_by_handle_at > - > -open_by_handle_at=no > -cat > $TMPC << EOF > -#include > -#if !defined(AT_EMPTY_PATH) > -# error missing definition > -#else > -int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } > -#endif > -EOF > -if compile_prog "" "" ; then > - open_by_handle_at=yes > -fi > - > -######################################## > -# check if we have linux/magic.h > - > -linux_magic_h=no > -cat > $TMPC << EOF > -#include > -int main(void) { > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - linux_magic_h=yes > -fi > - > -######################################## > -# check if we have valgrind/valgrind.h > - > -valgrind_h=no > -cat > $TMPC << EOF > -#include > -int main(void) { > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - valgrind_h=yes > -fi > - > -######################################## > -# check if environ is declared > - > -has_environ=no > -cat > $TMPC << EOF > -#include > -int main(void) { > - environ = 0; > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - has_environ=yes > -fi > - > -######################################## > -# check if cpuid.h is usable. > - > -cat > $TMPC << EOF > -#include > -int main(void) { > - unsigned a, b, c, d; > - int max = __get_cpuid_max(0, 0); > - > - if (max >= 1) { > - __cpuid(1, a, b, c, d); > - } > - > - if (max >= 7) { > - __cpuid_count(7, 0, a, b, c, d); > - } > - > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - cpuid_h=yes > -fi > - > -########################################## > -# avx2 optimization requirement check > -# > -# There is no point enabling this if cpuid.h is not usable, > -# since we won't be able to select the new routines. > - > -if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then > - cat > $TMPC << EOF > -#pragma GCC push_options > -#pragma GCC target("avx2") > -#include > -#include > -static int bar(void *a) { > - __m256i x = *(__m256i *)a; > - return _mm256_testz_si256(x, x); > -} > -int main(int argc, char *argv[]) { return bar(argv[0]); } > -EOF > - if compile_object "" ; then > - avx2_opt="yes" > - else > - avx2_opt="no" > - fi > -fi > - > -########################################## > -# avx512f optimization requirement check > -# > -# There is no point enabling this if cpuid.h is not usable, > -# since we won't be able to select the new routines. > -# by default, it is turned off. > -# if user explicitly want to enable it, check environment > - > -if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then > - cat > $TMPC << EOF > -#pragma GCC push_options > -#pragma GCC target("avx512f") > -#include > -#include > -static int bar(void *a) { > - __m512i x = *(__m512i *)a; > - return _mm512_test_epi64_mask(x, x); > -} > -int main(int argc, char *argv[]) > -{ > - return bar(argv[0]); > -} > -EOF > - if ! compile_object "" ; then > - avx512f_opt="no" > - fi > -else > - avx512f_opt="no" > -fi > - > -######################################## > -# check if __[u]int128_t is usable. > - > -int128=no > -cat > $TMPC << EOF > -__int128_t a; > -__uint128_t b; > -int main (void) { > - a = a + b; > - b = a * b; > - a = a * a; > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - int128=yes > -fi > - > -######################################### > -# See if 128-bit atomic operations are supported. > - > -atomic128=no > -if test "$int128" = "yes"; then > - cat > $TMPC << EOF > -int main(void) > -{ > - unsigned __int128 x = 0, y = 0; > - y = __atomic_load_16(&x, 0); > - __atomic_store_16(&x, y, 0); > - __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); > - return 0; > -} > -EOF > - if compile_prog "" "" ; then > - atomic128=yes > - fi > -fi > - > -cmpxchg128=no > -if test "$int128" = yes && test "$atomic128" = no; then > - cat > $TMPC << EOF > -int main(void) > -{ > - unsigned __int128 x = 0, y = 0; > - __sync_val_compare_and_swap_16(&x, y, x); > - return 0; > -} > -EOF > - if compile_prog "" "" ; then > - cmpxchg128=yes > - fi > -fi > - > -######################################### > -# See if 64-bit atomic operations are supported. > -# Note that without __atomic builtins, we can only > -# assume atomic loads/stores max at pointer size. > - > -cat > $TMPC << EOF > -#include > -int main(void) > -{ > - uint64_t x = 0, y = 0; > -#ifdef __ATOMIC_RELAXED > - y = __atomic_load_8(&x, 0); > - __atomic_store_8(&x, y, 0); > - __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); > - __atomic_exchange_8(&x, y, 0); > - __atomic_fetch_add_8(&x, y, 0); > -#else > - typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; > - __sync_lock_test_and_set(&x, y); > - __sync_val_compare_and_swap(&x, y, 0); > - __sync_fetch_and_add(&x, y); > -#endif > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - atomic64=yes > -fi > - > -######################################### > -# See if --dynamic-list is supported by the linker > -ld_dynamic_list="no" > -if test "$static" = "no" ; then > - cat > $TMPTXT < -{ > - foo; > -}; > -EOF > - > - cat > $TMPC < -#include > -void foo(void); > - > -void foo(void) > -{ > - printf("foo\n"); > -} > - > -int main(void) > -{ > - foo(); > - return 0; > -} > -EOF > - > - if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then > - ld_dynamic_list="yes" > - fi > -fi > - > -######################################### > -# See if -exported_symbols_list is supported by the linker > - > -ld_exported_symbols_list="no" > -if test "$static" = "no" ; then > - cat > $TMPTXT < - _foo > -EOF > - > - if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then > - ld_exported_symbols_list="yes" > - fi > -fi > - > -if test "$plugins" = "yes" && > - test "$ld_dynamic_list" = "no" && > - test "$ld_exported_symbols_list" = "no" ; then > - error_exit \ > - "Plugin support requires dynamic linking and specifying a set of symbols " \ > - "that are exported to plugins. Unfortunately your linker doesn't " \ > - "support the flag (--dynamic-list or -exported_symbols_list) used " \ > - "for this purpose. You can't build with --static." > -fi > - > -######################################## > -# See if __attribute__((alias)) is supported. > -# This false for Xcode 9, but has been remedied for Xcode 10. > -# Unfortunately, travis uses Xcode 9 by default. > - > -attralias=no > -cat > $TMPC << EOF > -int x = 1; > -extern const int y __attribute__((alias("x"))); > -int main(void) { return 0; } > -EOF > -if compile_prog "" "" ; then > - attralias=yes > -fi > - > -######################################## > -# check if getauxval is available. > - > -getauxval=no > -cat > $TMPC << EOF > -#include > -int main(void) { > - return getauxval(AT_HWCAP) == 0; > -} > -EOF > -if compile_prog "" "" ; then > - getauxval=yes > -fi > - > -######################################## > -# check if ccache is interfering with > -# semantic analysis of macros > - > -unset CCACHE_CPP2 > -ccache_cpp2=no > -cat > $TMPC << EOF > -static const int Z = 1; > -#define fn() ({ Z; }) > -#define TAUT(X) ((X) == Z) > -#define PAREN(X, Y) (X == Y) > -#define ID(X) (X) > -int main(int argc, char *argv[]) > -{ > - int x = 0, y = 0; > - x = ID(x); > - x = fn(); > - fn(); > - if (PAREN(x, y)) return 0; > - if (TAUT(Z)) return 0; > - return 0; > -} > -EOF > - > -if ! compile_object "-Werror"; then > - ccache_cpp2=yes > -fi > - > -################################################# > -# clang does not support glibc + FORTIFY_SOURCE. > - > -if test "$fortify_source" != "no"; then > - if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then > - fortify_source="no"; > - elif test -n "$cxx" && has $cxx && > - echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then > - fortify_source="no"; > - else > - fortify_source="yes" > - fi > -fi > - > -############################################### > -# Check if copy_file_range is provided by glibc > -have_copy_file_range=no > -cat > $TMPC << EOF > -#include > -int main(void) { > - copy_file_range(0, NULL, 0, NULL, 0, 0); > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - have_copy_file_range=yes > -fi > - > -########################################## > -# check if struct fsxattr is available via linux/fs.h > - > -have_fsxattr=no > -cat > $TMPC << EOF > -#include > -struct fsxattr foo; > -int main(void) { > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - have_fsxattr=yes > -fi > - > -########################################## > -# check for usable membarrier system call > -if test "$membarrier" = "yes"; then > - have_membarrier=no > - if test "$mingw32" = "yes" ; then > - have_membarrier=yes > - elif test "$linux" = "yes" ; then > - cat > $TMPC << EOF > - #include > - #include > - #include > - #include > - int main(void) { > - syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); > - syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); > - exit(0); > - } > -EOF > - if compile_prog "" "" ; then > - have_membarrier=yes > - fi > - fi > - if test "$have_membarrier" = "no"; then > - feature_not_found "membarrier" "membarrier system call not available" > - fi > -else > - # Do not enable it by default even for Mingw32, because it doesn't > - # work on Wine. > - membarrier=no > -fi > - > -########################################## > -# check if rtnetlink.h exists and is useful > -have_rtnetlink=no > -cat > $TMPC << EOF > -#include > -int main(void) { > - return IFLA_PROTO_DOWN; > -} > -EOF > -if compile_prog "" "" ; then > - have_rtnetlink=yes > -fi > - > -########################################## > -# check for usable AF_VSOCK environment > -have_af_vsock=no > -cat > $TMPC << EOF > -#include > -#include > -#include > -#if !defined(AF_VSOCK) > -# error missing AF_VSOCK flag > -#endif > -#include > -int main(void) { > - int sock, ret; > - struct sockaddr_vm svm; > - socklen_t len = sizeof(svm); > - sock = socket(AF_VSOCK, SOCK_STREAM, 0); > - ret = getpeername(sock, (struct sockaddr *)&svm, &len); > - if ((ret == -1) && (errno == ENOTCONN)) { > - return 0; > - } > - return -1; > -} > -EOF > -if compile_prog "" "" ; then > - have_af_vsock=yes > -fi > - > -########################################## > -# check for usable AF_ALG environment > -have_afalg=no > -cat > $TMPC << EOF > -#include > -#include > -#include > -#include > -int main(void) { > - int sock; > - sock = socket(AF_ALG, SOCK_SEQPACKET, 0); > - return sock; > -} > -EOF > -if compile_prog "" "" ; then > - have_afalg=yes > -fi > -if test "$crypto_afalg" = "yes" > -then > - if test "$have_afalg" != "yes" > - then > - error_exit "AF_ALG requested but could not be detected" > - fi > -fi > - > - > -################################################# > -# Check to see if we have the Hypervisor framework > -if [ "$darwin" = "yes" ] ; then > - cat > $TMPC << EOF > -#include > -int main() { return 0;} > -EOF > - if ! compile_object ""; then > - hvf='no' > - else > - hvf='yes' > - QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS" > - fi > -fi > - > -########################################## > -# check for sysmacros.h > - > -have_sysmacros=no > -cat > $TMPC << EOF > -#include > -int main(void) { > - return makedev(0, 0); > -} > -EOF > -if compile_prog "" "" ; then > - have_sysmacros=yes > -fi > - > -########################################## > -# check for _Static_assert() > - > -have_static_assert=no > -cat > $TMPC << EOF > -_Static_assert(1, "success"); > -int main(void) { > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - have_static_assert=yes > -fi > - > -########################################## > -# check for utmpx.h, it is missing e.g. on OpenBSD > - > -have_utmpx=no > -cat > $TMPC << EOF > -#include > -struct utmpx user_info; > -int main(void) { > - return 0; > -} > -EOF > -if compile_prog "" "" ; then > - have_utmpx=yes > -fi > - > -########################################## > -# check for getrandom() > - > -have_getrandom=no > -cat > $TMPC << EOF > -#include > -int main(void) { > - return getrandom(0, 0, GRND_NONBLOCK); > -} > -EOF > -if compile_prog "" "" ; then > - have_getrandom=yes > -fi > - > -########################################## > -# checks for sanitizers > - > -have_asan=no > -have_ubsan=no > -have_asan_iface_h=no > -have_asan_iface_fiber=no > - > -if test "$sanitizers" = "yes" ; then > - write_c_skeleton > - if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then > - have_asan=yes > - fi > - > - # we could use a simple skeleton for flags checks, but this also > - # detect the static linking issue of ubsan, see also: > - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 > - cat > $TMPC << EOF > -#include > -int main(void) { > - void *tmp = malloc(10); > - if (tmp != NULL) { > - return *(int *)(tmp + 2); > - } > - return 1; > -} > -EOF > - if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then > - have_ubsan=yes > - fi > - > - if check_include "sanitizer/asan_interface.h" ; then > - have_asan_iface_h=yes > - fi > - > - cat > $TMPC << EOF > -#include > -int main(void) { > - __sanitizer_start_switch_fiber(0, 0, 0); > - return 0; > -} > -EOF > - if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then > - have_asan_iface_fiber=yes > - fi > -fi > - > -########################################## > -# checks for fuzzer > -if test "$fuzzing" = "yes" ; then > - write_c_fuzzer_skeleton > - if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then > - have_fuzzer=yes > - else > - error_exit "Your compiler doesn't support -fsanitize=fuzzer" > - exit 1 > - fi > -fi > - > -# Thread sanitizer is, for now, much noisier than the other sanitizers; > -# keep it separate until that is not the case. > -if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then > - error_exit "TSAN is not supported with other sanitiziers." > -fi > -have_tsan=no > -have_tsan_iface_fiber=no > -if test "$tsan" = "yes" ; then > - write_c_skeleton > - if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then > - have_tsan=yes > - fi > - cat > $TMPC << EOF > -#include > -int main(void) { > - __tsan_create_fiber(0); > - return 0; > -} > -EOF > - if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then > - have_tsan_iface_fiber=yes > - fi > -fi > - > -########################################## > -# check for libpmem > - > -if test "$libpmem" != "no"; then > - if $pkg_config --exists "libpmem"; then > - libpmem="yes" > - libpmem_libs=$($pkg_config --libs libpmem) > - libpmem_cflags=$($pkg_config --cflags libpmem) > - QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" > - else > - if test "$libpmem" = "yes" ; then > - feature_not_found "libpmem" "Install nvml or pmdk" > - fi > - libpmem="no" > - fi > -fi > - > -########################################## > -# check for libdaxctl > - > -if test "$libdaxctl" != "no"; then > - if $pkg_config --atleast-version=57 "libdaxctl"; then > - libdaxctl="yes" > - libdaxctl_libs=$($pkg_config --libs libdaxctl) > - libdaxctl_cflags=$($pkg_config --cflags libdaxctl) > - QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags" > - else > - if test "$libdaxctl" = "yes" ; then > - feature_not_found "libdaxctl" "Install libdaxctl" > - fi > - libdaxctl="no" > - fi > -fi > - > -########################################## > -# check for slirp > - > -# slirp is only required when building softmmu targets > -if test -z "$slirp" -a "$softmmu" != "yes" ; then > - slirp="no" > -fi > - > -case "$slirp" in > - "" | yes) > - if $pkg_config slirp; then > - slirp=system > - elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then > - slirp=git > - elif test -e "${source_path}/slirp/Makefile" ; then > - slirp=internal > - elif test -z "$slirp" ; then > - slirp=no > - else > - feature_not_found "slirp" "Install slirp devel or git submodule" > - fi > - ;; > - > - system) > - if ! $pkg_config slirp; then > - feature_not_found "slirp" "Install slirp devel" > - fi > - ;; > -esac > - > -case "$slirp" in > - git | internal) > - if test "$slirp" = git; then > - git_submodules="${git_submodules} slirp" > - fi > - mkdir -p slirp > - slirp_cflags="-I${source_path}/slirp/src -I${build_path}/slirp/src" > - slirp_libs="-L${build_path}/slirp -lslirp" > - if test "$mingw32" = "yes" ; then > - slirp_libs="$slirp_libs -lws2_32 -liphlpapi" > - fi > - ;; > - > - system) > - slirp_version=$($pkg_config --modversion slirp 2>/dev/null) > - slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) > - slirp_libs=$($pkg_config --libs slirp 2>/dev/null) > - ;; > - > - no) > - ;; > - *) > - error_exit "Unknown state for slirp: $slirp" > - ;; > -esac > - > -########################################## > -# check for usable __NR_keyctl syscall > - > -if test "$linux" = "yes" ; then > - > - have_keyring=no > - cat > $TMPC << EOF > -#include > -#include > -#include > -#include > -int main(void) { > - return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); > -} > -EOF > - if compile_prog "" "" ; then > - have_keyring=yes > - fi > -fi > -if test "$secret_keyring" != "no" > -then > - if test "$have_keyring" = "yes" > - then > - secret_keyring=yes > - else > - if test "$secret_keyring" = "yes" > - then > - error_exit "syscall __NR_keyctl requested, \ > -but not implemented on your system" > - else > - secret_keyring=no > - fi > - fi > -fi > - > -########################################## > -# check for usable keyutils.h > - > -if test "$linux" = "yes" ; then > - > - have_keyutils=no > - cat > $TMPC << EOF > -#include > -#include > -#include > -#include > -#include > -int main(void) { > - return request_key("user", NULL, NULL, 0); > -} > -EOF > - if compile_prog "" "-lkeyutils"; then > - have_keyutils=yes > - fi > -fi > - > - > -########################################## > -# End of CC checks > -# After here, no more $cc or $ld runs > - > -write_c_skeleton > - > -if test "$gcov" = "yes" ; then > - : > -elif test "$fortify_source" = "yes" ; then > - QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" > - debug=no > -fi > -if test "$debug_info" = "yes"; then > - CFLAGS="-g $CFLAGS" > - LDFLAGS="-g $LDFLAGS" > -fi > -if test "$debug" = "no"; then > - CFLAGS="-O2 $CFLAGS" > -fi > - > -case "$ARCH" in > -alpha) > - # Ensure there's only a single GP > - QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" > -;; > -esac > - > -if test "$gprof" = "yes" ; then > - QEMU_CFLAGS="-p $QEMU_CFLAGS" > - QEMU_LDFLAGS="-p $QEMU_LDFLAGS" > -fi > - > -if test "$have_asan" = "yes"; then > - QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" > - QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" > - if test "$have_asan_iface_h" = "no" ; then > - echo "ASAN build enabled, but ASAN header missing." \ > - "Without code annotation, the report may be inferior." > - elif test "$have_asan_iface_fiber" = "no" ; then > - echo "ASAN build enabled, but ASAN header is too old." \ > - "Without code annotation, the report may be inferior." > - fi > -fi > -if test "$have_tsan" = "yes" ; then > - if test "$have_tsan_iface_fiber" = "yes" ; then > - QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" > - QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" > - else > - error_exit "Cannot enable TSAN due to missing fiber annotation interface." > - fi > -elif test "$tsan" = "yes" ; then > - error_exit "Cannot enable TSAN due to missing sanitize thread interface." > -fi > -if test "$have_ubsan" = "yes"; then > - QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" > - QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" > -fi > - > -########################################## > -# Do we have libnfs > -if test "$libnfs" != "no" ; then > - if $pkg_config --atleast-version=1.9.3 libnfs; then > - libnfs="yes" > - libnfs_libs=$($pkg_config --libs libnfs) > - else > - if test "$libnfs" = "yes" ; then > - feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" > - fi > - libnfs="no" > - fi > -fi > - > -########################################## > -# Do we have libudev > -if test "$libudev" != "no" ; then > - if $pkg_config libudev && test "$static" != "yes"; then > - libudev="yes" > - libudev_libs=$($pkg_config --libs libudev) > - else > - libudev="no" > - fi > -fi > - > -# Now we've finished running tests it's OK to add -Werror to the compiler flags > -if test "$werror" = "yes"; then > - QEMU_CFLAGS="-Werror $QEMU_CFLAGS" > -fi > - > -# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. > -if test "$solaris" = "no" && test "$tsan" = "no"; then > - if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then > - QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" > - fi > -fi > - > -# test if pod2man has --utf8 option > -if pod2man --help | grep -q utf8; then > - POD2MAN="pod2man --utf8" > -else > - POD2MAN="pod2man" > -fi > - > -# Use ASLR, no-SEH and DEP if available > -if test "$mingw32" = "yes" ; then > - for flag in --dynamicbase --no-seh --nxcompat; do > - if ld_has $flag ; then > - QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" > - fi > - done > -fi > - > -# Disable OpenBSD W^X if available > -if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then > - cat > $TMPC < - int main(void) { return 0; } > -EOF > - wx_ldflags="-Wl,-z,wxneeded" > - if compile_prog "" "$wx_ldflags"; then > - QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags" > - fi > -fi > - > -qemu_confdir="$sysconfdir/$qemu_suffix" > -qemu_moddir="$libdir/$qemu_suffix" > -qemu_datadir="$datadir/$qemu_suffix" > -qemu_docdir="$docdir/$qemu_suffix" > -qemu_localedir="$datadir/locale" > -qemu_icondir="$datadir/icons" > -qemu_desktopdir="$datadir/applications" > - > -# We can only support ivshmem if we have eventfd > -if [ "$eventfd" = "yes" ]; then > - ivshmem=yes > -fi > - > -if test "$softmmu" = yes ; then > - if test "$linux" = yes; then > - if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then > - virtfs=yes > - else > - if test "$virtfs" = yes; then > - error_exit "VirtFS requires libcap-ng devel and libattr devel" > - fi > - virtfs=no > - fi > - if test "$mpath" != no && test "$mpathpersist" = yes ; then > - mpath=yes > - else > - if test "$mpath" = yes; then > - error_exit "Multipath requires libmpathpersist devel" > - fi > - mpath=no > - fi > - else > - if test "$virtfs" = yes; then > - error_exit "VirtFS is supported only on Linux" > - fi > - virtfs=no > - if test "$mpath" = yes; then > - error_exit "Multipath is supported only on Linux" > - fi > - mpath=no > - fi > -fi > - > -# Probe for guest agent support/options > - > -if [ "$guest_agent" != "no" ]; then > - if [ "$softmmu" = no -a "$want_tools" = no ] ; then > - guest_agent=no > - elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then > - guest_agent=yes > - elif [ "$guest_agent" != yes ]; then > - guest_agent=no > - else > - error_exit "Guest agent is not supported on this platform" > - fi > -fi > - > -# Guest agent Window MSI package > - > -if test "$guest_agent" != yes; then > - if test "$guest_agent_msi" = yes; then > - error_exit "MSI guest agent package requires guest agent enabled" > - fi > - guest_agent_msi=no > -elif test "$mingw32" != "yes"; then > - if test "$guest_agent_msi" = "yes"; then > - error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" > - fi > - guest_agent_msi=no > -elif ! has wixl; then > - if test "$guest_agent_msi" = "yes"; then > - error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" > - fi > - guest_agent_msi=no > -else > - # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't > - # disabled explicitly > - if test "$guest_agent_msi" != "no"; then > - guest_agent_msi=yes > - fi > -fi > - > -if test "$guest_agent_msi" = "yes"; then > - if test "$guest_agent_with_vss" = "yes"; then > - QEMU_GA_MSI_WITH_VSS="-D InstallVss" > - fi > - > - if test "$QEMU_GA_MANUFACTURER" = ""; then > - QEMU_GA_MANUFACTURER=QEMU > - fi > - > - if test "$QEMU_GA_DISTRO" = ""; then > - QEMU_GA_DISTRO=Linux > - fi > - > - if test "$QEMU_GA_VERSION" = ""; then > - QEMU_GA_VERSION=$(cat $source_path/VERSION) > - fi > - > - QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" > - > - case "$cpu" in > - x86_64) > - QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" > - ;; > - i386) > - QEMU_GA_MSI_ARCH="-D Arch=32" > - ;; > - *) > - error_exit "CPU $cpu not supported for building installation package" > - ;; > - esac > -fi > - > -# Mac OS X ships with a broken assembler > -roms= > -if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ > - test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ > - test "$softmmu" = yes ; then > - # Different host OS linkers have different ideas about the name of the ELF > - # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd > - # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. > - for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do > - if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then > - ld_i386_emulation="$emu" > - roms="optionrom" > - break > - fi > - done > -fi > - > -# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 > -if test "$cpu" = "s390x" ; then > - write_c_skeleton > - if compile_prog "-march=z900" ""; then > - roms="$roms s390-ccw" > - # SLOF is required for building the s390-ccw firmware on s390x, > - # since it is using the libnet code from SLOF for network booting. > - if test -e "${source_path}/.git" ; then > - git_submodules="${git_submodules} roms/SLOF" > - fi > - fi > -fi > - > -if test $git_update = 'yes' ; then > - (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules") > - > - if test "$fdt" = "git" ; then > - if [ "$pwd_is_source_path" != "y" ] ; then > - symlink "$source_path/dtc/Makefile" "dtc/Makefile" > - fi > - fi > -fi > - > -# Check that the C++ compiler exists and works with the C compiler. > -# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. > -if has $cxx; then > - cat > $TMPC < -int c_function(void); > -int main(void) { return c_function(); } > -EOF > - > - compile_object > - > - cat > $TMPCXX < -extern "C" { > - int c_function(void); > -} > -int c_function(void) { return 42; } > -EOF > - > - update_cxxflags > - > - if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then > - # C++ compiler $cxx works ok with C compiler $cc > - : > - else > - echo "C++ compiler $cxx does not work with C compiler $cc" > - echo "Disabling C++ specific optional code" > - cxx= > - fi > -else > - echo "No C++ compiler available; disabling C++ specific optional code" > - cxx= > -fi > - > -echo_version() { > - if test "$1" = "yes" ; then > - echo "($2)" > - fi > -} > - > -# prepend ftd flags after all config tests are done > -QEMU_CFLAGS="$fdt_cflags $QEMU_CFLAGS" > -QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" > - > -config_host_mak="config-host.mak" > - > -echo "# Automatically generated by configure - do not modify" >config-all-disas.mak > - > -echo "# Automatically generated by configure - do not modify" > $config_host_mak > -echo >> $config_host_mak > - > -echo all: >> $config_host_mak > -echo "prefix=$prefix" >> $config_host_mak > -echo "bindir=$bindir" >> $config_host_mak > -echo "libdir=$libdir" >> $config_host_mak > -echo "libexecdir=$libexecdir" >> $config_host_mak > -echo "includedir=$includedir" >> $config_host_mak > -echo "sysconfdir=$sysconfdir" >> $config_host_mak > -echo "qemu_confdir=$qemu_confdir" >> $config_host_mak > -echo "qemu_datadir=$qemu_datadir" >> $config_host_mak > -echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak > -echo "qemu_moddir=$qemu_moddir" >> $config_host_mak > -if test "$mingw32" = "no" ; then > - echo "qemu_localstatedir=$local_statedir" >> $config_host_mak > -fi > -echo "qemu_helperdir=$libexecdir" >> $config_host_mak > -echo "qemu_localedir=$qemu_localedir" >> $config_host_mak > -echo "qemu_icondir=$qemu_icondir" >> $config_host_mak > -echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak > -echo "GIT=$git" >> $config_host_mak > -echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak > -echo "GIT_UPDATE=$git_update" >> $config_host_mak > - > -echo "ARCH=$ARCH" >> $config_host_mak > - > -if test "$default_devices" = "yes" ; then > - echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak > -else > - echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak > -fi > -if test "$debug_tcg" = "yes" ; then > - echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak > -fi > -if test "$strip_opt" = "yes" ; then > - echo "STRIP=${strip}" >> $config_host_mak > -fi > -if test "$bigendian" = "yes" ; then > - echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak > -fi > -if test "$mingw32" = "yes" ; then > - echo "CONFIG_WIN32=y" >> $config_host_mak > - rc_version=$(cat $source_path/VERSION) > - version_major=${rc_version%%.*} > - rc_version=${rc_version#*.} > - version_minor=${rc_version%%.*} > - rc_version=${rc_version#*.} > - version_subminor=${rc_version%%.*} > - version_micro=0 > - echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak > - echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak > - if test "$guest_agent_with_vss" = "yes" ; then > - echo "CONFIG_QGA_VSS=y" >> $config_host_mak > - echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak > - echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak > - fi > - if test "$guest_agent_ntddscsi" = "yes" ; then > - echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak > - fi > - if test "$guest_agent_msi" = "yes"; then > - echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak > - echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak > - echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak > - echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak > - echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak > - echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak > - echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak > - fi > -else > - echo "CONFIG_POSIX=y" >> $config_host_mak > -fi > - > -if test "$linux" = "yes" ; then > - echo "CONFIG_LINUX=y" >> $config_host_mak > -fi > - > -if test "$darwin" = "yes" ; then > - echo "CONFIG_DARWIN=y" >> $config_host_mak > -fi > - > -if test "$solaris" = "yes" ; then > - echo "CONFIG_SOLARIS=y" >> $config_host_mak > -fi > -if test "$haiku" = "yes" ; then > - echo "CONFIG_HAIKU=y" >> $config_host_mak > -fi > -if test "$static" = "yes" ; then > - echo "CONFIG_STATIC=y" >> $config_host_mak > -fi > -if test "$profiler" = "yes" ; then > - echo "CONFIG_PROFILER=y" >> $config_host_mak > -fi > -if test "$want_tools" = "yes" ; then > - echo "CONFIG_TOOLS=y" >> $config_host_mak > -fi > -if test "$guest_agent" = "yes" ; then > - echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak > -fi > -if test "$slirp" != "no"; then > - echo "CONFIG_SLIRP=y" >> $config_host_mak > - echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak > - echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak > - echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak > -fi > -subdirs= > -if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then > - subdirs="$subdirs slirp" > -fi > -if test "$vde" = "yes" ; then > - echo "CONFIG_VDE=y" >> $config_host_mak > - echo "VDE_LIBS=$vde_libs" >> $config_host_mak > -fi > -if test "$netmap" = "yes" ; then > - echo "CONFIG_NETMAP=y" >> $config_host_mak > -fi > -if test "$l2tpv3" = "yes" ; then > - echo "CONFIG_L2TPV3=y" >> $config_host_mak > -fi > -if test "$gprof" = "yes" ; then > - echo "CONFIG_GPROF=y" >> $config_host_mak > -fi > -if test "$cap_ng" = "yes" ; then > - echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak > - echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak > -fi > -echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak > -for drv in $audio_drv_list; do > - def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') > - echo "$def=y" >> $config_host_mak > -done > -if test "$alsa" = "yes" ; then > - echo "CONFIG_ALSA=y" >> $config_host_mak > -fi > -echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak > -echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak > -if test "$libpulse" = "yes" ; then > - echo "CONFIG_LIBPULSE=y" >> $config_host_mak > -fi > -echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak > -echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak > -echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak > -echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak > -echo "OSS_LIBS=$oss_libs" >> $config_host_mak > -if test "$libjack" = "yes" ; then > - echo "CONFIG_LIBJACK=y" >> $config_host_mak > -fi > -echo "JACK_LIBS=$jack_libs" >> $config_host_mak > -if test "$audio_win_int" = "yes" ; then > - echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak > -fi > -echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak > -echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak > -if test "$xfs" = "yes" ; then > - echo "CONFIG_XFS=y" >> $config_host_mak > -fi > -qemu_version=$(head $source_path/VERSION) > -echo "PKGVERSION=$pkgversion" >>$config_host_mak > -echo "SRC_PATH=$source_path" >> $config_host_mak > -echo "TARGET_DIRS=$target_list" >> $config_host_mak > -if [ "$docs" = "yes" ] ; then > - echo "BUILD_DOCS=yes" >> $config_host_mak > -fi > -if test "$modules" = "yes"; then > - # $shacmd can generate a hash started with digit, which the compiler doesn't > - # like as an symbol. So prefix it with an underscore > - echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak > - echo "CONFIG_MODULES=y" >> $config_host_mak > -fi > -if test "$module_upgrades" = "yes"; then > - echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak > -fi > -if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then > - echo "CONFIG_X11=y" >> $config_host_mak > - echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak > - echo "X11_LIBS=$x11_libs" >> $config_host_mak > -fi > -if test "$cocoa" = "yes" ; then > - echo "CONFIG_COCOA=y" >> $config_host_mak > -fi > -if test "$iconv" = "yes" ; then > - echo "CONFIG_ICONV=y" >> $config_host_mak > - echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak > - echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak > -fi > -if test "$curses" = "yes" ; then > - echo "CONFIG_CURSES=y" >> $config_host_mak > - echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak > - echo "CURSES_LIBS=$curses_lib" >> $config_host_mak > -fi > -if test "$pipe2" = "yes" ; then > - echo "CONFIG_PIPE2=y" >> $config_host_mak > -fi > -if test "$accept4" = "yes" ; then > - echo "CONFIG_ACCEPT4=y" >> $config_host_mak > -fi > -if test "$splice" = "yes" ; then > - echo "CONFIG_SPLICE=y" >> $config_host_mak > -fi > -if test "$eventfd" = "yes" ; then > - echo "CONFIG_EVENTFD=y" >> $config_host_mak > -fi > -if test "$memfd" = "yes" ; then > - echo "CONFIG_MEMFD=y" >> $config_host_mak > -fi > -if test "$have_usbfs" = "yes" ; then > - echo "CONFIG_USBFS=y" >> $config_host_mak > -fi > -if test "$fallocate" = "yes" ; then > - echo "CONFIG_FALLOCATE=y" >> $config_host_mak > -fi > -if test "$fallocate_punch_hole" = "yes" ; then > - echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak > -fi > -if test "$fallocate_zero_range" = "yes" ; then > - echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak > -fi > -if test "$posix_fallocate" = "yes" ; then > - echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak > -fi > -if test "$sync_file_range" = "yes" ; then > - echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak > -fi > -if test "$fiemap" = "yes" ; then > - echo "CONFIG_FIEMAP=y" >> $config_host_mak > -fi > -if test "$dup3" = "yes" ; then > - echo "CONFIG_DUP3=y" >> $config_host_mak > -fi > -if test "$ppoll" = "yes" ; then > - echo "CONFIG_PPOLL=y" >> $config_host_mak > -fi > -if test "$prctl_pr_set_timerslack" = "yes" ; then > - echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak > -fi > -if test "$epoll" = "yes" ; then > - echo "CONFIG_EPOLL=y" >> $config_host_mak > -fi > -if test "$epoll_create1" = "yes" ; then > - echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak > -fi > -if test "$sendfile" = "yes" ; then > - echo "CONFIG_SENDFILE=y" >> $config_host_mak > -fi > -if test "$timerfd" = "yes" ; then > - echo "CONFIG_TIMERFD=y" >> $config_host_mak > -fi > -if test "$setns" = "yes" ; then > - echo "CONFIG_SETNS=y" >> $config_host_mak > -fi > -if test "$clock_adjtime" = "yes" ; then > - echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak > -fi > -if test "$syncfs" = "yes" ; then > - echo "CONFIG_SYNCFS=y" >> $config_host_mak > -fi > -if test "$kcov" = "yes" ; then > - echo "CONFIG_KCOV=y" >> $config_host_mak > -fi > -if test "$inotify" = "yes" ; then > - echo "CONFIG_INOTIFY=y" >> $config_host_mak > -fi > -if test "$inotify1" = "yes" ; then > - echo "CONFIG_INOTIFY1=y" >> $config_host_mak > -fi > -if test "$sem_timedwait" = "yes" ; then > - echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak > -fi > -if test "$strchrnul" = "yes" ; then > - echo "HAVE_STRCHRNUL=y" >> $config_host_mak > -fi > -if test "$st_atim" = "yes" ; then > - echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak > -fi > -if test "$byteswap_h" = "yes" ; then > - echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak > -fi > -if test "$bswap_h" = "yes" ; then > - echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak > -fi > -if test "$curl" = "yes" ; then > - echo "CONFIG_CURL=y" >> $config_host_mak > - echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak > - echo "CURL_LIBS=$curl_libs" >> $config_host_mak > -fi > -if test "$brlapi" = "yes" ; then > - echo "CONFIG_BRLAPI=y" >> $config_host_mak > - echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak > -fi > -if test "$gtk" = "yes" ; then > - echo "CONFIG_GTK=y" >> $config_host_mak > - echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak > - echo "GTK_LIBS=$gtk_libs" >> $config_host_mak > - if test "$gtk_gl" = "yes" ; then > - echo "CONFIG_GTK_GL=y" >> $config_host_mak > - fi > -fi > -if test "$gio" = "yes" ; then > - echo "CONFIG_GIO=y" >> $config_host_mak > - echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak > - echo "GIO_LIBS=$gio_libs" >> $config_host_mak > - echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak > -fi > -echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak > -if test "$gnutls" = "yes" ; then > - echo "CONFIG_GNUTLS=y" >> $config_host_mak > - echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak > - echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak > -fi > -if test "$gcrypt" = "yes" ; then > - echo "CONFIG_GCRYPT=y" >> $config_host_mak > - if test "$gcrypt_hmac" = "yes" ; then > - echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak > - fi > -fi > -if test "$nettle" = "yes" ; then > - echo "CONFIG_NETTLE=y" >> $config_host_mak > - echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak > - echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak > - echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak > -fi > -if test "$qemu_private_xts" = "yes" ; then > - echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak > -fi > -if test "$tasn1" = "yes" ; then > - echo "CONFIG_TASN1=y" >> $config_host_mak > -fi > -if test "$auth_pam" = "yes" ; then > - echo "CONFIG_AUTH_PAM=y" >> $config_host_mak > -fi > -if test "$have_ifaddrs_h" = "yes" ; then > - echo "HAVE_IFADDRS_H=y" >> $config_host_mak > -fi > -if test "$have_drm_h" = "yes" ; then > - echo "HAVE_DRM_H=y" >> $config_host_mak > -fi > -if test "$have_broken_size_max" = "yes" ; then > - echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak > -fi > -if test "$have_openpty" = "yes" ; then > - echo "HAVE_OPENPTY=y" >> $config_host_mak > -fi > -if test "$have_sys_signal_h" = "yes" ; then > - echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak > -fi > - > -# Work around a system header bug with some kernel/XFS header > -# versions where they both try to define 'struct fsxattr': > -# xfs headers will not try to redefine structs from linux headers > -# if this macro is set. > -if test "$have_fsxattr" = "yes" ; then > - echo "HAVE_FSXATTR=y" >> $config_host_mak > -fi > -if test "$have_copy_file_range" = "yes" ; then > - echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak > -fi > -if test "$vte" = "yes" ; then > - echo "CONFIG_VTE=y" >> $config_host_mak > - echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak > - echo "VTE_LIBS=$vte_libs" >> $config_host_mak > -fi > -if test "$virglrenderer" = "yes" ; then > - echo "CONFIG_VIRGL=y" >> $config_host_mak > - echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak > - echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak > -fi > -if test "$xen" = "yes" ; then > - echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak > - echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak > - echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak > - echo "XEN_LIBS=$xen_libs" >> $config_host_mak > -fi > -if test "$linux_aio" = "yes" ; then > - echo "CONFIG_LINUX_AIO=y" >> $config_host_mak > -fi > -if test "$linux_io_uring" = "yes" ; then > - echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak > - echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak > - echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak > -fi > -if test "$attr" = "yes" ; then > - echo "CONFIG_ATTR=y" >> $config_host_mak > - echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak > -fi > -if test "$libattr" = "yes" ; then > - echo "CONFIG_LIBATTR=y" >> $config_host_mak > -fi > -if test "$virtfs" = "yes" ; then > - echo "CONFIG_VIRTFS=y" >> $config_host_mak > -fi > -if test "$mpath" = "yes" ; then > - echo "CONFIG_MPATH=y" >> $config_host_mak > - if test "$mpathpersist_new_api" = "yes"; then > - echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak > - fi > -fi > -if test "$vhost_scsi" = "yes" ; then > - echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak > -fi > -if test "$vhost_net" = "yes" ; then > - echo "CONFIG_VHOST_NET=y" >> $config_host_mak > -fi > -if test "$vhost_net_user" = "yes" ; then > - echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak > -fi > -if test "$vhost_net_vdpa" = "yes" ; then > - echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak > -fi > -if test "$vhost_crypto" = "yes" ; then > - echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak > -fi > -if test "$vhost_vsock" = "yes" ; then > - echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak > - if test "$vhost_user" = "yes" ; then > - echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak > - fi > -fi > -if test "$vhost_kernel" = "yes" ; then > - echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak > -fi > -if test "$vhost_user" = "yes" ; then > - echo "CONFIG_VHOST_USER=y" >> $config_host_mak > -fi > -if test "$vhost_vdpa" = "yes" ; then > - echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak > -fi > -if test "$vhost_user_fs" = "yes" ; then > - echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak > -fi > -if test "$blobs" = "yes" ; then > - echo "INSTALL_BLOBS=yes" >> $config_host_mak > -fi > -if test "$iovec" = "yes" ; then > - echo "CONFIG_IOVEC=y" >> $config_host_mak > -fi > -if test "$preadv" = "yes" ; then > - echo "CONFIG_PREADV=y" >> $config_host_mak > -fi > -if test "$fdt" != "no" ; then > - echo "CONFIG_FDT=y" >> $config_host_mak > - echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak > - echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak > -fi > -if test "$membarrier" = "yes" ; then > - echo "CONFIG_MEMBARRIER=y" >> $config_host_mak > -fi > -if test "$signalfd" = "yes" ; then > - echo "CONFIG_SIGNALFD=y" >> $config_host_mak > -fi > -if test "$optreset" = "yes" ; then > - echo "HAVE_OPTRESET=y" >> $config_host_mak > -fi > -if test "$tcg" = "yes"; then > - echo "CONFIG_TCG=y" >> $config_host_mak > - if test "$tcg_interpreter" = "yes" ; then > - echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak > - fi > -fi > -if test "$fdatasync" = "yes" ; then > - echo "CONFIG_FDATASYNC=y" >> $config_host_mak > -fi > -if test "$madvise" = "yes" ; then > - echo "CONFIG_MADVISE=y" >> $config_host_mak > -fi > -if test "$posix_madvise" = "yes" ; then > - echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak > -fi > -if test "$posix_memalign" = "yes" ; then > - echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak > -fi > -if test "$spice" = "yes" ; then > - echo "CONFIG_SPICE=y" >> $config_host_mak > - echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak > - echo "SPICE_LIBS=$spice_libs" >> $config_host_mak > -fi > - > -if test "$smartcard" = "yes" ; then > - echo "CONFIG_SMARTCARD=y" >> $config_host_mak > - echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak > - echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak > -fi > - > -if test "$libusb" = "yes" ; then > - echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak > - echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak > - echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak > -fi > - > -if test "$usb_redir" = "yes" ; then > - echo "CONFIG_USB_REDIR=y" >> $config_host_mak > - echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak > - echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak > -fi > - > -if test "$opengl" = "yes" ; then > - echo "CONFIG_OPENGL=y" >> $config_host_mak > - echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak > - if test "$opengl_dmabuf" = "yes" ; then > - echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak > - fi > -fi > - > -if test "$gbm" = "yes" ; then > - echo "CONFIG_GBM=y" >> $config_host_mak > - echo "GBM_LIBS=$gbm_libs" >> $config_host_mak > - echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak > -fi > - > - > -if test "$malloc_trim" = "yes" ; then > - echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak > -fi > - > -if test "$avx2_opt" = "yes" ; then > - echo "CONFIG_AVX2_OPT=y" >> $config_host_mak > -fi > - > -if test "$avx512f_opt" = "yes" ; then > - echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak > -fi > - > -if test "$lzo" = "yes" ; then > - echo "CONFIG_LZO=y" >> $config_host_mak > - echo "LZO_LIBS=$lzo_libs" >> $config_host_mak > -fi > - > -if test "$snappy" = "yes" ; then > - echo "CONFIG_SNAPPY=y" >> $config_host_mak > - echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak > -fi > - > -if test "$bzip2" = "yes" ; then > - echo "CONFIG_BZIP2=y" >> $config_host_mak > - echo "BZIP2_LIBS=-lbz2" >> $config_host_mak > -fi > - > -if test "$lzfse" = "yes" ; then > - echo "CONFIG_LZFSE=y" >> $config_host_mak > - echo "LZFSE_LIBS=-llzfse" >> $config_host_mak > -fi > - > -if test "$zstd" = "yes" ; then > - echo "CONFIG_ZSTD=y" >> $config_host_mak > - echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak > - echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak > -fi > - > -if test "$libiscsi" = "yes" ; then > - echo "CONFIG_LIBISCSI=y" >> $config_host_mak > - echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak > - echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak > -fi > - > -if test "$libnfs" = "yes" ; then > - echo "CONFIG_LIBNFS=y" >> $config_host_mak > - echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak > -fi > - > -if test "$seccomp" = "yes"; then > - echo "CONFIG_SECCOMP=y" >> $config_host_mak > - echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak > - echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak > -fi > - > -# XXX: suppress that > -if [ "$bsd" = "yes" ] ; then > - echo "CONFIG_BSD=y" >> $config_host_mak > -fi > - > -if test "$localtime_r" = "yes" ; then > - echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak > -fi > -if test "$qom_cast_debug" = "yes" ; then > - echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak > -fi > -if test "$rbd" = "yes" ; then > - echo "CONFIG_RBD=y" >> $config_host_mak > - echo "RBD_LIBS=$rbd_libs" >> $config_host_mak > -fi > - > -echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak > -if test "$coroutine_pool" = "yes" ; then > - echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak > -else > - echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak > -fi > - > -if test "$debug_stack_usage" = "yes" ; then > - echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak > -fi > - > -if test "$crypto_afalg" = "yes" ; then > - echo "CONFIG_AF_ALG=y" >> $config_host_mak > -fi > - > -if test "$open_by_handle_at" = "yes" ; then > - echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak > -fi > - > -if test "$linux_magic_h" = "yes" ; then > - echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak > -fi > - > -if test "$valgrind_h" = "yes" ; then > - echo "CONFIG_VALGRIND_H=y" >> $config_host_mak > -fi > - > -if test "$have_asan_iface_fiber" = "yes" ; then > - echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak > -fi > - > -if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then > - echo "CONFIG_TSAN=y" >> $config_host_mak > -fi > - > -if test "$has_environ" = "yes" ; then > - echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak > -fi > - > -if test "$cpuid_h" = "yes" ; then > - echo "CONFIG_CPUID_H=y" >> $config_host_mak > -fi > - > -if test "$int128" = "yes" ; then > - echo "CONFIG_INT128=y" >> $config_host_mak > -fi > - > -if test "$atomic128" = "yes" ; then > - echo "CONFIG_ATOMIC128=y" >> $config_host_mak > -fi > - > -if test "$cmpxchg128" = "yes" ; then > - echo "CONFIG_CMPXCHG128=y" >> $config_host_mak > -fi > - > -if test "$atomic64" = "yes" ; then > - echo "CONFIG_ATOMIC64=y" >> $config_host_mak > -fi > - > -if test "$attralias" = "yes" ; then > - echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak > -fi > - > -if test "$getauxval" = "yes" ; then > - echo "CONFIG_GETAUXVAL=y" >> $config_host_mak > -fi > - > -if test "$glusterfs" = "yes" ; then > - echo "CONFIG_GLUSTERFS=y" >> $config_host_mak > - echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak > - echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak > -fi > - > -if test "$glusterfs_xlator_opt" = "yes" ; then > - echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak > -fi > - > -if test "$glusterfs_discard" = "yes" ; then > - echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak > -fi > - > -if test "$glusterfs_fallocate" = "yes" ; then > - echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak > -fi > - > -if test "$glusterfs_zerofill" = "yes" ; then > - echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak > -fi > - > -if test "$glusterfs_ftruncate_has_stat" = "yes" ; then > - echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak > -fi > - > -if test "$glusterfs_iocb_has_stat" = "yes" ; then > - echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak > -fi > - > -if test "$libssh" = "yes" ; then > - echo "CONFIG_LIBSSH=y" >> $config_host_mak > - echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak > - echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak > -fi > - > -if test "$live_block_migration" = "yes" ; then > - echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak > -fi > - > -if test "$tpm" = "yes"; then > - echo 'CONFIG_TPM=y' >> $config_host_mak > -fi > - > -echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak > -if have_backend "nop"; then > - echo "CONFIG_TRACE_NOP=y" >> $config_host_mak > -fi > -if have_backend "simple"; then > - echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak > - # Set the appropriate trace file. > - trace_file="\"$trace_file-\" FMT_pid" > -fi > -if have_backend "log"; then > - echo "CONFIG_TRACE_LOG=y" >> $config_host_mak > -fi > -if have_backend "ust"; then > - echo "CONFIG_TRACE_UST=y" >> $config_host_mak > - echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak > - echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak > -fi > -if have_backend "dtrace"; then > - echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak > - if test "$trace_backend_stap" = "yes" ; then > - echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak > - fi > -fi > -if have_backend "ftrace"; then > - if test "$linux" = "yes" ; then > - echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak > - else > - feature_not_found "ftrace(trace backend)" "ftrace requires Linux" > - fi > -fi > -if have_backend "syslog"; then > - if test "$posix_syslog" = "yes" ; then > - echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak > - else > - feature_not_found "syslog(trace backend)" "syslog not available" > - fi > -fi > -echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak > - > -if test "$rdma" = "yes" ; then > - echo "CONFIG_RDMA=y" >> $config_host_mak > - echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak > -fi > - > -if test "$pvrdma" = "yes" ; then > - echo "CONFIG_PVRDMA=y" >> $config_host_mak > -fi > - > -if test "$have_rtnetlink" = "yes" ; then > - echo "CONFIG_RTNETLINK=y" >> $config_host_mak > -fi > - > -if test "$libxml2" = "yes" ; then > - echo "CONFIG_LIBXML2=y" >> $config_host_mak > - echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak > - echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak > -fi > - > -if test "$replication" = "yes" ; then > - echo "CONFIG_REPLICATION=y" >> $config_host_mak > -fi > - > -if test "$have_af_vsock" = "yes" ; then > - echo "CONFIG_AF_VSOCK=y" >> $config_host_mak > -fi > - > -if test "$have_sysmacros" = "yes" ; then > - echo "CONFIG_SYSMACROS=y" >> $config_host_mak > -fi > - > -if test "$have_static_assert" = "yes" ; then > - echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak > -fi > - > -if test "$have_utmpx" = "yes" ; then > - echo "HAVE_UTMPX=y" >> $config_host_mak > -fi > -if test "$have_getrandom" = "yes" ; then > - echo "CONFIG_GETRANDOM=y" >> $config_host_mak > -fi > -if test "$ivshmem" = "yes" ; then > - echo "CONFIG_IVSHMEM=y" >> $config_host_mak > -fi > -if test "$capstone" != "no" ; then > - echo "CONFIG_CAPSTONE=y" >> $config_host_mak > - echo "CAPSTONE_CFLAGS=$capstone_cflags" >> $config_host_mak > - echo "CAPSTONE_LIBS=$capstone_libs" >> $config_host_mak > -fi > -if test "$debug_mutex" = "yes" ; then > - echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak > -fi > - > -# Hold two types of flag: > -# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on > -# a thread we have a handle to > -# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular > -# platform > -if test "$pthread_setname_np_w_tid" = "yes" ; then > - echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak > - echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak > -elif test "$pthread_setname_np_wo_tid" = "yes" ; then > - echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak > - echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak > -fi > - > -if test "$libpmem" = "yes" ; then > - echo "CONFIG_LIBPMEM=y" >> $config_host_mak > - echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak > - echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak > -fi > - > -if test "$libdaxctl" = "yes" ; then > - echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak > - echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak > -fi > - > -if test "$bochs" = "yes" ; then > - echo "CONFIG_BOCHS=y" >> $config_host_mak > -fi > -if test "$cloop" = "yes" ; then > - echo "CONFIG_CLOOP=y" >> $config_host_mak > -fi > -if test "$dmg" = "yes" ; then > - echo "CONFIG_DMG=y" >> $config_host_mak > -fi > -if test "$qcow1" = "yes" ; then > - echo "CONFIG_QCOW1=y" >> $config_host_mak > -fi > -if test "$vdi" = "yes" ; then > - echo "CONFIG_VDI=y" >> $config_host_mak > -fi > -if test "$vvfat" = "yes" ; then > - echo "CONFIG_VVFAT=y" >> $config_host_mak > -fi > -if test "$qed" = "yes" ; then > - echo "CONFIG_QED=y" >> $config_host_mak > -fi > -if test "$parallels" = "yes" ; then > - echo "CONFIG_PARALLELS=y" >> $config_host_mak > -fi > -if test "$sheepdog" = "yes" ; then > - echo "CONFIG_SHEEPDOG=y" >> $config_host_mak > -fi > -if test "$pty_h" = "yes" ; then > - echo "HAVE_PTY_H=y" >> $config_host_mak > -fi > -if test "$have_mlockall" = "yes" ; then > - echo "HAVE_MLOCKALL=y" >> $config_host_mak > -fi > -if test "$fuzzing" = "yes" ; then > - QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link" > -fi > - > -if test "$plugins" = "yes" ; then > - echo "CONFIG_PLUGIN=y" >> $config_host_mak > - LIBS="-ldl $LIBS" > - # Copy the export object list to the build dir > - if test "$ld_dynamic_list" = "yes" ; then > - echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak > - ld_symbols=qemu-plugins-ld.symbols > - cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols > - elif test "$ld_exported_symbols_list" = "yes" ; then > - echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak > - ld64_symbols=qemu-plugins-ld64.symbols > - echo "# Automatically generated by configure - do not modify" > $ld64_symbols > - grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ > - sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols > - else > - error_exit \ > - "If \$plugins=yes, either \$ld_dynamic_list or " \ > - "\$ld_exported_symbols_list should have been set to 'yes'." > - fi > -fi > - > -if test -n "$gdb_bin" ; then > - echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak > -fi > - > -if test "$secret_keyring" = "yes" ; then > - echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak > - if test "$have_keyutils" = "yes" ; then > - echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak > - fi > -fi > - > -if test "$tcg_interpreter" = "yes"; then > - QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES" > -elif test "$ARCH" = "sparc64" ; then > - QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES" > -elif test "$ARCH" = "s390x" ; then > - QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES" > -elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then > - QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES" > -elif test "$ARCH" = "ppc64" ; then > - QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES" > -elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then > - QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES" > -else > - QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES" > -fi > - > -echo "ROMS=$roms" >> $config_host_mak > -echo "MAKE=$make" >> $config_host_mak > -echo "INSTALL=$install" >> $config_host_mak > -echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak > -echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak > -echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak > -echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak > -echo "PYTHON=$python" >> $config_host_mak > -echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak > -echo "GENISOIMAGE=$genisoimage" >> $config_host_mak > -echo "MESON=$meson" >> $config_host_mak > -echo "CC=$cc" >> $config_host_mak > -if $iasl -h > /dev/null 2>&1; then > - echo "CONFIG_IASL=$iasl" >> $config_host_mak > -fi > -echo "CXX=$cxx" >> $config_host_mak > -echo "OBJCC=$objcc" >> $config_host_mak > -echo "AR=$ar" >> $config_host_mak > -echo "ARFLAGS=$ARFLAGS" >> $config_host_mak > -echo "AS=$as" >> $config_host_mak > -echo "CCAS=$ccas" >> $config_host_mak > -echo "CPP=$cpp" >> $config_host_mak > -echo "OBJCOPY=$objcopy" >> $config_host_mak > -echo "LD=$ld" >> $config_host_mak > -echo "RANLIB=$ranlib" >> $config_host_mak > -echo "NM=$nm" >> $config_host_mak > -echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak > -echo "WINDRES=$windres" >> $config_host_mak > -echo "CFLAGS=$CFLAGS" >> $config_host_mak > -echo "CXXFLAGS=$CXXFLAGS" >> $config_host_mak > -echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak > -echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak > -echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak > -echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak > -echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak > -echo "GLIB_LIBS=$glib_libs" >> $config_host_mak > -if test "$sparse" = "yes" ; then > - echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak > -fi > -echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak > -echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak > -echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak > -echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak > -echo "LIBS+=$LIBS" >> $config_host_mak > -echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak > -echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak > -echo "EXESUF=$EXESUF" >> $config_host_mak > -echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak > -echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak > -echo "LIBS_QGA=$libs_qga" >> $config_host_mak > -echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak > -echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak > -echo "POD2MAN=$POD2MAN" >> $config_host_mak > -if test "$gcov" = "yes" ; then > - echo "CONFIG_GCOV=y" >> $config_host_mak > -fi > - > -if test "$libudev" != "no"; then > - echo "CONFIG_LIBUDEV=y" >> $config_host_mak > - echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak > -fi > -if test "$fuzzing" != "no"; then > - echo "CONFIG_FUZZ=y" >> $config_host_mak > -fi > - > -if test "$edk2_blobs" = "yes" ; then > - echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak > -fi > - > -if test "$rng_none" = "yes"; then > - echo "CONFIG_RNG_NONE=y" >> $config_host_mak > -fi > - > -# use included Linux headers > -if test "$linux" = "yes" ; then > - mkdir -p linux-headers > - case "$cpu" in > - i386|x86_64|x32) > - linux_arch=x86 > - ;; > - ppc|ppc64|ppc64le) > - linux_arch=powerpc > - ;; > - s390x) > - linux_arch=s390 > - ;; > - aarch64) > - linux_arch=arm64 > - ;; > - mips64) > - linux_arch=mips > - ;; > - *) > - # For most CPUs the kernel architecture name and QEMU CPU name match. > - linux_arch="$cpu" > - ;; > - esac > - # For non-KVM architectures we will not have asm headers > - if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then > - symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm > - fi > -fi > - > -for target in $target_list; do > -target_dir="$target" > -config_target_mak=$target_dir/config-target.mak > -target_name=$(echo $target | cut -d '-' -f 1) > -target_aligned_only="no" > -case "$target_name" in > - alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb) > - target_aligned_only="yes" > - ;; > -esac > -target_bigendian="no" > -case "$target_name" in > - armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) > - target_bigendian="yes" > - ;; > -esac > -target_softmmu="no" > -target_user_only="no" > -target_linux_user="no" > -target_bsd_user="no" > -case "$target" in > - ${target_name}-softmmu) > - target_softmmu="yes" > - ;; > - ${target_name}-linux-user) > - target_user_only="yes" > - target_linux_user="yes" > - ;; > - ${target_name}-bsd-user) > - target_user_only="yes" > - target_bsd_user="yes" > - ;; > - *) > - error_exit "Target '$target' not recognised" > - exit 1 > - ;; > -esac > - > -mkdir -p $target_dir > -echo "# Automatically generated by configure - do not modify" > $config_target_mak > - > -bflt="no" > -mttcg="no" > -interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") > -gdb_xml_files="" > - > -TARGET_ARCH="$target_name" > -TARGET_BASE_ARCH="" > -TARGET_ABI_DIR="" > -TARGET_SYSTBL_ABI="" > -TARGET_SYSTBL="" > - > -case "$target_name" in > - i386) > - mttcg="yes" > - gdb_xml_files="i386-32bit.xml" > - TARGET_SYSTBL_ABI=i386 > - TARGET_SYSTBL=syscall_32.tbl > - ;; > - x86_64) > - TARGET_BASE_ARCH=i386 > - TARGET_SYSTBL_ABI=common,64 > - TARGET_SYSTBL=syscall_64.tbl > - mttcg="yes" > - gdb_xml_files="i386-64bit.xml" > - ;; > - alpha) > - mttcg="yes" > - TARGET_SYSTBL_ABI=common > - ;; > - arm|armeb) > - TARGET_ARCH=arm > - TARGET_SYSTBL_ABI=common,oabi > - bflt="yes" > - mttcg="yes" > - gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml" > - ;; > - aarch64|aarch64_be) > - TARGET_ARCH=aarch64 > - TARGET_BASE_ARCH=arm > - bflt="yes" > - mttcg="yes" > - 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" > - ;; > - avr) > - gdb_xml_files="avr-cpu.xml" > - target_compiler=$cross_cc_avr > - ;; > - cris) > - ;; > - hppa) > - mttcg="yes" > - TARGET_SYSTBL_ABI=common,32 > - ;; > - lm32) > - ;; > - m68k) > - bflt="yes" > - gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml" > - TARGET_SYSTBL_ABI=common > - ;; > - microblaze|microblazeel) > - TARGET_ARCH=microblaze > - TARGET_SYSTBL_ABI=common > - mttcg="yes" > - bflt="yes" > - echo "TARGET_ABI32=y" >> $config_target_mak > - ;; > - mips|mipsel) > - mttcg="yes" > - TARGET_ARCH=mips > - echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak > - TARGET_SYSTBL_ABI=o32 > - TARGET_SYSTBL=syscall_o32.tbl > - ;; > - mipsn32|mipsn32el) > - mttcg="yes" > - TARGET_ARCH=mips64 > - TARGET_BASE_ARCH=mips > - echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak > - echo "TARGET_ABI32=y" >> $config_target_mak > - TARGET_SYSTBL_ABI=n32 > - TARGET_SYSTBL=syscall_n32.tbl > - ;; > - mips64|mips64el) > - mttcg="no" > - TARGET_ARCH=mips64 > - TARGET_BASE_ARCH=mips > - echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak > - TARGET_SYSTBL_ABI=n64 > - TARGET_SYSTBL=syscall_n64.tbl > - ;; > - moxie) > - ;; > - nios2) > - ;; > - or1k) > - TARGET_ARCH=openrisc > - TARGET_BASE_ARCH=openrisc > - ;; > - ppc) > - gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" > - TARGET_SYSTBL_ABI=common,nospu,32 > - ;; > - ppc64) > - TARGET_BASE_ARCH=ppc > - TARGET_ABI_DIR=ppc > - TARGET_SYSTBL_ABI=common,nospu,64 > - mttcg=yes > - gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" > - ;; > - ppc64le) > - TARGET_ARCH=ppc64 > - TARGET_BASE_ARCH=ppc > - TARGET_ABI_DIR=ppc > - TARGET_SYSTBL_ABI=common,nospu,64 > - mttcg=yes > - gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" > - ;; > - ppc64abi32) > - TARGET_ARCH=ppc64 > - TARGET_BASE_ARCH=ppc > - TARGET_ABI_DIR=ppc > - TARGET_SYSTBL_ABI=common,nospu,32 > - echo "TARGET_ABI32=y" >> $config_target_mak > - gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" > - ;; > - riscv32) > - TARGET_BASE_ARCH=riscv > - TARGET_ABI_DIR=riscv > - mttcg=yes > - gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml" > - ;; > - riscv64) > - TARGET_BASE_ARCH=riscv > - TARGET_ABI_DIR=riscv > - mttcg=yes > - gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml" > - ;; > - rx) > - TARGET_ARCH=rx > - bflt="yes" > - target_compiler=$cross_cc_rx > - gdb_xml_files="rx-core.xml" > - ;; > - sh4|sh4eb) > - TARGET_ARCH=sh4 > - TARGET_SYSTBL_ABI=common > - bflt="yes" > - ;; > - sparc) > - TARGET_SYSTBL_ABI=common,32 > - ;; > - sparc64) > - TARGET_BASE_ARCH=sparc > - TARGET_SYSTBL_ABI=common,64 > - ;; > - sparc32plus) > - TARGET_ARCH=sparc64 > - TARGET_BASE_ARCH=sparc > - TARGET_ABI_DIR=sparc > - TARGET_SYSTBL_ABI=common,32 > - echo "TARGET_ABI32=y" >> $config_target_mak > - ;; > - s390x) > - TARGET_SYSTBL_ABI=common,64 > - mttcg=yes > - gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" > - ;; > - tilegx) > - ;; > - tricore) > - ;; > - unicore32) > - ;; > - xtensa|xtensaeb) > - TARGET_ARCH=xtensa > - TARGET_SYSTBL_ABI=common > - bflt="yes" > - mttcg="yes" > - ;; > - *) > - error_exit "Unsupported target CPU" > - ;; > -esac > -# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH > -if [ "$TARGET_BASE_ARCH" = "" ]; then > - TARGET_BASE_ARCH=$TARGET_ARCH > -fi > -if [ "$TARGET_SYSTBL_ABI" != "" ] && [ "$TARGET_SYSTBL" = "" ]; then > - TARGET_SYSTBL=syscall.tbl > -fi > - > -upper() { > - echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' > -} > - > -target_arch_name="$(upper $TARGET_ARCH)" > -echo "TARGET_$target_arch_name=y" >> $config_target_mak > -echo "TARGET_NAME=$target_name" >> $config_target_mak > -echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak > -if [ "$TARGET_ABI_DIR" = "" ]; then > - TARGET_ABI_DIR=$TARGET_ARCH > -fi > -echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak > -if [ "$HOST_VARIANT_DIR" != "" ]; then > - echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak > -fi > -if [ "$TARGET_SYSTBL_ABI" != "" ]; then > - echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak > - echo "TARGET_SYSTBL=$TARGET_SYSTBL" >> $config_target_mak > -fi > - > -if supported_xen_target $target; then > - echo "CONFIG_XEN=y" >> $config_target_mak > - if test "$xen_pci_passthrough" = yes; then > - echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" > - fi > -fi > -if supported_kvm_target $target; then > - echo "CONFIG_KVM=y" >> $config_target_mak > -fi > -if supported_hax_target $target; then > - echo "CONFIG_HAX=y" >> $config_target_mak > -fi > -if supported_hvf_target $target; then > - echo "CONFIG_HVF=y" >> $config_target_mak > -fi > -if supported_whpx_target $target; then > - echo "CONFIG_WHPX=y" >> $config_target_mak > -fi > -if test "$target_aligned_only" = "yes" ; then > - echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak > -fi > -if test "$target_bigendian" = "yes" ; then > - echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak > -fi > -if test "$target_softmmu" = "yes" ; then > - echo "CONFIG_SOFTMMU=y" >> $config_target_mak > - if test "$mttcg" = "yes" ; then > - echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak > - fi > -fi > -if test "$target_user_only" = "yes" ; then > - echo "CONFIG_USER_ONLY=y" >> $config_target_mak > - echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak > - symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" > -else > - symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" > -fi > -if test "$target_linux_user" = "yes" ; then > - echo "CONFIG_LINUX_USER=y" >> $config_target_mak > -fi > -list="" > -if test ! -z "$gdb_xml_files" ; then > - for x in $gdb_xml_files; do > - list="$list gdb-xml/$x" > - done > - echo "TARGET_XML_FILES=$list" >> $config_target_mak > -fi > - > -if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then > - echo "TARGET_HAS_BFLT=y" >> $config_target_mak > -fi > -if test "$target_bsd_user" = "yes" ; then > - echo "CONFIG_BSD_USER=y" >> $config_target_mak > -fi > - > - > -# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets > - > -disas_config() { > - echo "CONFIG_${1}_DIS=y" >> $config_target_mak > - echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak > -} > - > -for i in $ARCH $TARGET_BASE_ARCH ; do > - case "$i" in > - alpha) > - disas_config "ALPHA" > - ;; > - aarch64) > - if test -n "${cxx}"; then > - disas_config "ARM_A64" > - fi > - ;; > - arm) > - disas_config "ARM" > - if test -n "${cxx}"; then > - disas_config "ARM_A64" > - fi > - ;; > - avr) > - disas_config "AVR" > - ;; > - cris) > - disas_config "CRIS" > - ;; > - hppa) > - disas_config "HPPA" > - ;; > - i386|x86_64|x32) > - disas_config "I386" > - ;; > - lm32) > - disas_config "LM32" > - ;; > - m68k) > - disas_config "M68K" > - ;; > - microblaze*) > - disas_config "MICROBLAZE" > - ;; > - mips*) > - disas_config "MIPS" > - if test -n "${cxx}"; then > - disas_config "NANOMIPS" > - fi > - ;; > - moxie*) > - disas_config "MOXIE" > - ;; > - nios2) > - disas_config "NIOS2" > - ;; > - or1k) > - disas_config "OPENRISC" > - ;; > - ppc*) > - disas_config "PPC" > - ;; > - riscv*) > - disas_config "RISCV" > - ;; > - rx) > - disas_config "RX" > - ;; > - s390*) > - disas_config "S390" > - ;; > - sh4) > - disas_config "SH4" > - ;; > - sparc*) > - disas_config "SPARC" > - ;; > - xtensa*) > - disas_config "XTENSA" > - ;; > - esac > -done > -if test "$tcg_interpreter" = "yes" ; then > - disas_config "TCI" > -fi > - > -done # for target in $targets > - > -if [ "$fdt" = "git" ]; then > - subdirs="$subdirs dtc" > -fi > -if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then > - subdirs="$subdirs capstone" > -fi > -echo "SUBDIRS=$subdirs" >> $config_host_mak > -if test -n "$LIBCAPSTONE"; then > - echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak > -fi > - > -if test "$numa" = "yes"; then > - echo "CONFIG_NUMA=y" >> $config_host_mak > - echo "NUMA_LIBS=$numa_libs" >> $config_host_mak > -fi > - > -if test "$ccache_cpp2" = "yes"; then > - echo "export CCACHE_CPP2=y" >> $config_host_mak > -fi > - > -if test "$safe_stack" = "yes"; then > - echo "CONFIG_SAFESTACK=y" >> $config_host_mak > -fi > - > -# If we're using a separate build tree, set it up now. > -# DIRS are directories which we simply mkdir in the build tree; > -# LINKS are things to symlink back into the source tree > -# (these can be both files and directories). > -# Caution: do not add files or directories here using wildcards. This > -# will result in problems later if a new file matching the wildcard is > -# added to the source tree -- nothing will cause configure to be rerun > -# so the build tree will be missing the link back to the new file, and > -# tests might fail. Prefer to keep the relevant files in their own > -# directory and symlink the directory instead. > -DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" > -DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" > -DIRS="$DIRS docs docs/interop fsdev scsi" > -DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" > -DIRS="$DIRS roms/seabios" > -LINKS="Makefile" > -LINKS="$LINKS tests/tcg/lm32/Makefile" > -LINKS="$LINKS tests/tcg/Makefile.target" > -LINKS="$LINKS pc-bios/optionrom/Makefile" > -LINKS="$LINKS pc-bios/s390-ccw/Makefile" > -LINKS="$LINKS roms/seabios/Makefile" > -LINKS="$LINKS pc-bios/qemu-icon.bmp" > -LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit > -LINKS="$LINKS tests/acceptance tests/data" > -LINKS="$LINKS tests/qemu-iotests/check" > -LINKS="$LINKS python" > -for bios_file in \ > - $source_path/pc-bios/*.bin \ > - $source_path/pc-bios/*.elf \ > - $source_path/pc-bios/*.lid \ > - $source_path/pc-bios/*.rom \ > - $source_path/pc-bios/*.dtb \ > - $source_path/pc-bios/*.img \ > - $source_path/pc-bios/openbios-* \ > - $source_path/pc-bios/u-boot.* \ > - $source_path/pc-bios/edk2-*.fd.bz2 \ > - $source_path/pc-bios/palcode-* > -do > - LINKS="$LINKS pc-bios/$(basename $bios_file)" > -done > -mkdir -p $DIRS > -for f in $LINKS ; do > - if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then > - symlink "$source_path/$f" "$f" > - fi > -done > - > -(for i in $cross_cc_vars; do > - export $i > -done > -export target_list source_path use_containers > -$source_path/tests/tcg/configure.sh) > - > -# temporary config to build submodules > -for rom in seabios; do > - config_mak=roms/$rom/config.mak > - echo "# Automatically generated by configure - do not modify" > $config_mak > - echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak > - echo "AS=$as" >> $config_mak > - echo "CCAS=$ccas" >> $config_mak > - echo "CC=$cc" >> $config_mak > - echo "BCC=bcc" >> $config_mak > - echo "CPP=$cpp" >> $config_mak > - echo "OBJCOPY=objcopy" >> $config_mak > - echo "IASL=$iasl" >> $config_mak > - echo "LD=$ld" >> $config_mak > - echo "RANLIB=$ranlib" >> $config_mak > -done > - > -# set up qemu-iotests in this build directory > -iotests_common_env="tests/qemu-iotests/common.env" > - > -echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" > -echo >> "$iotests_common_env" > -echo "export PYTHON='$python'" >> "$iotests_common_env" > - > -if test "$skip_meson" = no; then > -cross="config-meson.cross.new" > -meson_quote() { > - echo "['$(echo $* | sed "s/ /','/g")']" > -} > - > -echo "# Automatically generated by configure - do not modify" > $cross > -echo "[properties]" >> $cross > -test -z "$cxx" && echo "link_language = 'c'" >> $cross > -echo "[binaries]" >> $cross > -echo "c = $(meson_quote $cc)" >> $cross > -test -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross > -echo "ar = $(meson_quote $ar)" >> $cross > -echo "nm = $(meson_quote $nm)" >> $cross > -echo "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross > -echo "ranlib = $(meson_quote $ranlib)" >> $cross > -echo "strip = $(meson_quote $strip)" >> $cross > -echo "windres = $(meson_quote $windres)" >> $cross > -if test -n "$cross_prefix"; then > - cross_arg="--cross-file config-meson.cross" > - # Hack: Meson expects an absolute path for the *build* machine > - # for the prefix, so add a slash in front of a Windows path that > - # includes a drive letter. > - # > - # See https://github.com/mesonbuild/meson/issues/7577. > - echo "[host_machine]" >> $cross > - if test "$mingw32" = "yes" ; then > - echo "system = 'windows'" >> $cross > - case $prefix in > - ?:*) pre_prefix=/ ;; > - esac > - fi > - case "$ARCH" in > - i386|x86_64) > - echo "cpu_family = 'x86'" >> $cross > - ;; > - ppc64le) > - echo "cpu_family = 'ppc64'" >> $cross > - ;; > - *) > - echo "cpu_family = '$ARCH'" >> $cross > - ;; > - esac > - echo "cpu = '$cpu'" >> $cross > - if test "$bigendian" = "yes" ; then > - echo "endian = 'big'" >> $cross > - else > - echo "endian = 'little'" >> $cross > - fi > -else > - cross_arg="--native-file config-meson.cross" > -fi > -mv $cross config-meson.cross > - > -rm -rf meson-private meson-info meson-logs > -NINJA=${ninja:-${build_path}/ninjatool} $meson setup \ > - --prefix "${pre_prefix}$prefix" \ > - --libdir "${pre_prefix}$libdir" \ > - --libexecdir "${pre_prefix}$libexecdir" \ > - --bindir "${pre_prefix}$bindir" \ > - --includedir "${pre_prefix}$includedir" \ > - --datadir "${pre_prefix}$datadir" \ > - --mandir "${pre_prefix}$mandir" \ > - --sysconfdir "${pre_prefix}$sysconfdir" \ > - --localstatedir "${pre_prefix}$local_statedir" \ > - -Ddocdir="${pre_prefix}$docdir" \ > - -Dqemu_suffix="$qemu_suffix" \ > - -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ > - -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ > - -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ > - -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ > - -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ > - -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ > - -Dsdl=$sdl -Dsdl_image=$sdl_image \ > - -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \ > - -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f\ > - $cross_arg \ > - "$build_path" "$source_path" > - > -if test "$?" -ne 0 ; then > - error_exit "meson setup failed" > -fi > -touch ninjatool.stamp > -fi > - > -# Save the configure command line for later reuse. > -cat <config.status > -#!/bin/sh > -# Generated by configure. > -# Run this file to recreate the current configuration. > -# Compiler output produced by configure, useful for debugging > -# configure, is in config.log if it exists. > -EOD > - > -preserve_env() { > - envname=$1 > - > - eval envval=\$$envname > - > - if test -n "$envval" > - then > - echo "$envname='$envval'" >> config.status > - echo "export $envname" >> config.status > - else > - echo "unset $envname" >> config.status > - fi > -} > - > -# Preserve various env variables that influence what > -# features/build target configure will detect > -preserve_env AR > -preserve_env AS > -preserve_env CC > -preserve_env CPP > -preserve_env CXX > -preserve_env INSTALL > -preserve_env LD > -preserve_env LD_LIBRARY_PATH > -preserve_env LIBTOOL > -preserve_env MAKE > -preserve_env NM > -preserve_env OBJCOPY > -preserve_env PATH > -preserve_env PKG_CONFIG > -preserve_env PKG_CONFIG_LIBDIR > -preserve_env PKG_CONFIG_PATH > -preserve_env PYTHON > -preserve_env SDL2_CONFIG > -preserve_env SMBD > -preserve_env STRIP > -preserve_env WINDRES > - > -printf "exec" >>config.status > -for i in "$0" "$@"; do > - test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status > -done > -echo ' "$@"' >>config.status > -chmod +x config.status > - > -rm -r "$TMPDIR1" > +#!/bin/sh > +# > +# qemu configure script (c) 2003 Fabrice Bellard > +# > + > +# Unset some variables known to interfere with behavior of common tools, > +# just as autoconf does. > +CLICOLOR_FORCE= GREP_OPTIONS= > +unset CLICOLOR_FORCE GREP_OPTIONS > + > +# Don't allow CCACHE, if present, to use cached results of compile tests! > +export CCACHE_RECACHE=yes > + > +# make source path absolute > +source_path=$(cd "$(dirname -- "$0")"; pwd) > +build_path=$PWD > +if [ "$MSYSTEM" = "MINGW64" -o "$MSYSTEM" = "MINGW32" ]; then > +source_path=$(cd "$(dirname -- "$0")"; pwd -W) > +build_path=`pwd -W` > +fi > + > +if test "$build_path" = "$source_path" > +then > + echo "Using './build' as the directory for build output" > + > + MARKER=build/auto-created-by-configure > + > + if test -e build > + then > + if test -f $MARKER > + then > + rm -rf build > + else > + echo "ERROR: ./build dir already exists and was not previously created by configure" > + exit 1 > + fi > + fi > + > + mkdir build > + touch $MARKER > + > + cat > GNUmakefile <<'EOF' > +# This file is auto-generated by configure to support in-source tree > +# 'make' command invocation > + > +ifeq ($(MAKECMDGOALS),) > +recurse: all > +endif > + > +.NOTPARALLEL: % > +%: force > + @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...' > + @$(MAKE) -C build -f Makefile $(MAKECMDGOALS) > + @if test "$(MAKECMDGOALS)" = "distclean" && \ > + test -e build/auto-created-by-configure ; \ > + then \ > + rm -rf build GNUmakefile ; \ > + fi > +force: ; > +.PHONY: force > +GNUmakefile: ; > + > +EOF > + cd build > + exec $source_path/configure "$@" > +fi > + > +# Temporary directory used for files created while > +# configure runs. Since it is in the build directory > +# we can safely blow away any previous version of it > +# (and we need not jump through hoops to try to delete > +# it when configure exits.) > +TMPDIR1="config-temp" > +rm -rf "${TMPDIR1}" > +mkdir -p "${TMPDIR1}" > +if [ $? -ne 0 ]; then > + echo "ERROR: failed to create temporary directory" > + exit 1 > +fi > + > +TMPB="qemu-conf" > +TMPC="${TMPDIR1}/${TMPB}.c" > +TMPO="${TMPDIR1}/${TMPB}.o" > +TMPCXX="${TMPDIR1}/${TMPB}.cxx" > +TMPE="${TMPDIR1}/${TMPB}.exe" > +TMPTXT="${TMPDIR1}/${TMPB}.txt" > + > +rm -f config.log > + > +# Print a helpful header at the top of config.log > +echo "# QEMU configure log $(date)" >> config.log > +printf "# Configured with:" >> config.log > +printf " '%s'" "$0" "$@" >> config.log > +echo >> config.log > +echo "#" >> config.log > + > +print_error() { > + (echo > + echo "ERROR: $1" > + while test -n "$2"; do > + echo " $2" > + shift > + done > + echo) >&2 > +} > + > +error_exit() { > + print_error "$@" > + exit 1 > +} > + > +do_compiler() { > + # Run the compiler, capturing its output to the log. First argument > + # is compiler binary to execute. > + local compiler="$1" > + shift > + if test -n "$BASH_VERSION"; then eval ' > + echo >>config.log " > +funcs: ${FUNCNAME[*]} > +lines: ${BASH_LINENO[*]}" > + '; fi > + echo $compiler "$@" >> config.log > + $compiler "$@" >> config.log 2>&1 || return $? > + # Test passed. If this is an --enable-werror build, rerun > + # the test with -Werror and bail out if it fails. This > + # makes warning-generating-errors in configure test code > + # obvious to developers. > + if test "$werror" != "yes"; then > + return 0 > + fi > + # Don't bother rerunning the compile if we were already using -Werror > + case "$*" in > + *-Werror*) > + return 0 > + ;; > + esac > + echo $compiler -Werror "$@" >> config.log > + $compiler -Werror "$@" >> config.log 2>&1 && return $? > + error_exit "configure test passed without -Werror but failed with -Werror." \ > + "This is probably a bug in the configure script. The failing command" \ > + "will be at the bottom of config.log." \ > + "You can run configure with --disable-werror to bypass this check." > +} > + > +do_cc() { > + do_compiler "$cc" "$@" > +} > + > +do_cxx() { > + do_compiler "$cxx" "$@" > +} > + > +# Append $2 to the variable named $1, with space separation > +add_to() { > + eval $1=\${$1:+\"\$$1 \"}\$2 > +} > + > +update_cxxflags() { > + # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those > + # options which some versions of GCC's C++ compiler complain about > + # because they only make sense for C programs. > + QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS" > + CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/) > + for arg in $QEMU_CFLAGS; do > + case $arg in > + -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\ > + -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls) > + ;; > + *) > + QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg > + ;; > + esac > + done > +} > + > +compile_object() { > + local_cflags="$1" > + do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC > +} > + > +compile_prog() { > + local_cflags="$1" > + local_ldflags="$2" > + do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags > +} > + > +# symbolically link $1 to $2. Portable version of "ln -sf". > +symlink() { > + rm -rf "$2" > + mkdir -p "$(dirname "$2")" > + ln -s "$1" "$2" > +} > + > +# check whether a command is available to this shell (may be either an > +# executable or a builtin) > +has() { > + type "$1" >/dev/null 2>&1 > +} > + > +# search for an executable in PATH > +path_of() { > + local_command="$1" > + local_ifs="$IFS" > + local_dir="" > + > + # pathname has a dir component? > + if [ "${local_command#*/}" != "$local_command" ]; then > + if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then > + echo "$local_command" > + return 0 > + fi > + fi > + if [ -z "$local_command" ]; then > + return 1 > + fi > + > + IFS=: > + for local_dir in $PATH; do > + if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then > + echo "$local_dir/$local_command" > + IFS="${local_ifs:-$(printf ' \t\n')}" > + return 0 > + fi > + done > + # not found > + IFS="${local_ifs:-$(printf ' \t\n')}" > + return 1 > +} > + > +version_ge () { > + local_ver1=`echo $1 | tr . ' '` > + local_ver2=`echo $2 | tr . ' '` > + while true; do > + set x $local_ver1 > + local_first=${2-0} > + # 'shift 2' if $2 is set, or 'shift' if $2 is not set > + shift ${2:+2} > + local_ver1=$* > + set x $local_ver2 > + # the second argument finished, the first must be greater or equal > + test $# = 1 && return 0 > + test $local_first -lt $2 && return 1 > + test $local_first -gt $2 && return 0 > + shift ${2:+2} > + local_ver2=$* > + done > +} > + > +have_backend () { > + echo "$trace_backends" | grep "$1" >/dev/null > +} > + > +glob() { > + eval test -z '"${1#'"$2"'}"' > +} > + > +supported_hax_target() { > + test "$hax" = "yes" || return 1 > + glob "$1" "*-softmmu" || return 1 > + case "${1%-softmmu}" in > + i386|x86_64) > + return 0 > + ;; > + esac > + return 1 > +} > + > +supported_kvm_target() { > + test "$kvm" = "yes" || return 1 > + glob "$1" "*-softmmu" || return 1 > + case "${1%-softmmu}:$cpu" in > + arm:arm | aarch64:aarch64 | \ > + i386:i386 | i386:x86_64 | i386:x32 | \ > + x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \ > + mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \ > + ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \ > + s390x:s390x) > + return 0 > + ;; > + esac > + return 1 > +} > + > +supported_xen_target() { > + test "$xen" = "yes" || return 1 > + glob "$1" "*-softmmu" || return 1 > + # Only i386 and x86_64 provide the xenpv machine. > + case "${1%-softmmu}" in > + i386|x86_64) > + return 0 > + ;; > + esac > + return 1 > +} > + > +supported_hvf_target() { > + test "$hvf" = "yes" || return 1 > + glob "$1" "*-softmmu" || return 1 > + case "${1%-softmmu}" in > + x86_64) > + return 0 > + ;; > + esac > + return 1 > +} > + > +supported_whpx_target() { > + test "$whpx" = "yes" || return 1 > + glob "$1" "*-softmmu" || return 1 > + case "${1%-softmmu}" in > + i386|x86_64) > + return 0 > + ;; > + esac > + return 1 > +} > + > +supported_target() { > + case "$1" in > + *-softmmu) > + ;; > + *-linux-user) > + if test "$linux" != "yes"; then > + print_error "Target '$target' is only available on a Linux host" > + return 1 > + fi > + ;; > + *-bsd-user) > + if test "$bsd" != "yes"; then > + print_error "Target '$target' is only available on a BSD host" > + return 1 > + fi > + ;; > + *) > + print_error "Invalid target name '$target'" > + return 1 > + ;; > + esac > + test "$tcg" = "yes" && return 0 > + supported_kvm_target "$1" && return 0 > + supported_xen_target "$1" && return 0 > + supported_hax_target "$1" && return 0 > + supported_hvf_target "$1" && return 0 > + supported_whpx_target "$1" && return 0 > + print_error "TCG disabled, but hardware accelerator not available for '$target'" > + return 1 > +} > + > + > +ld_has() { > + $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1 > +} > + > +check_valid_build_path="[[:space:]:]" > +if [ "$MSYSTEM" = "MINGW64" -o "$MSYSTEM" = "MINGW32" ]; then > +check_valid_build_path="[[:space:]]" > +fi > + > +if printf %s\\n "$source_path" "$build_path" | grep -q "$check_valid_build_path"; > +then > + error_exit "main directory cannot contain spaces nor colons" > +fi > + > +# default parameters > +cpu="" > +iasl="iasl" > +interp_prefix="/usr/gnemul/qemu-%M" > +static="no" > +cross_prefix="" > +audio_drv_list="" > +block_drv_rw_whitelist="" > +block_drv_ro_whitelist="" > +host_cc="cc" > +libs_tools="" > +audio_win_int="" > +libs_qga="" > +debug_info="yes" > +stack_protector="" > +safe_stack="" > +use_containers="yes" > +gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb") > + > +if test -e "$source_path/.git" > +then > + git_update=yes > + git_submodules="ui/keycodemapdb" > + git_submodules="$git_submodules tests/fp/berkeley-testfloat-3" > + git_submodules="$git_submodules tests/fp/berkeley-softfloat-3" > +else > + git_update=no > + git_submodules="" > + > + if ! test -f "$source_path/ui/keycodemapdb/README" > + then > + echo > + echo "ERROR: missing file $source_path/ui/keycodemapdb/README" > + echo > + echo "This is not a GIT checkout but module content appears to" > + echo "be missing. Do not use 'git archive' or GitHub download links" > + echo "to acquire QEMU source archives. Non-GIT builds are only" > + echo "supported with source archives linked from:" > + echo > + echo " https://www.qemu.org/download/#source" > + echo > + echo "Developers working with GIT can use scripts/archive-source.sh" > + echo "if they need to create valid source archives." > + echo > + exit 1 > + fi > +fi > +git="git" > + > +# Don't accept a target_list environment variable. > +unset target_list > +unset target_list_exclude > + > +# Default value for a variable defining feature "foo". > +# * foo="no" feature will only be used if --enable-foo arg is given > +# * foo="" feature will be searched for, and if found, will be used > +# unless --disable-foo is given > +# * foo="yes" this value will only be set by --enable-foo flag. > +# feature will searched for, > +# if not found, configure exits with error > +# > +# Always add --enable-foo and --disable-foo command line args. > +# Distributions want to ensure that several features are compiled in, and it > +# is impossible without a --enable-foo that exits if a feature is not found. > + > +brlapi="" > +curl="" > +curses="" > +docs="" > +fdt="" > +netmap="no" > +sdl="auto" > +sdl_image="auto" > +virtfs="" > +mpath="" > +vnc="enabled" > +sparse="no" > +vde="" > +vnc_sasl="auto" > +vnc_jpeg="auto" > +vnc_png="auto" > +xkbcommon="auto" > +xen="" > +xen_ctrl_version="" > +xen_pci_passthrough="" > +linux_aio="" > +linux_io_uring="" > +cap_ng="" > +attr="" > +libattr="" > +xfs="" > +tcg="yes" > +membarrier="" > +vhost_net="" > +vhost_crypto="" > +vhost_scsi="" > +vhost_vsock="" > +vhost_user="" > +vhost_user_fs="" > +kvm="no" > +hax="no" > +hvf="no" > +whpx="no" > +rdma="" > +pvrdma="" > +gprof="no" > +debug_tcg="no" > +debug="no" > +sanitizers="no" > +tsan="no" > +fortify_source="" > +strip_opt="yes" > +tcg_interpreter="no" > +bigendian="no" > +mingw32="no" > +gcov="no" > +EXESUF="" > +HOST_DSOSUF=".so" > +LDFLAGS_SHARED="-shared" > +modules="no" > +module_upgrades="no" > +prefix="/usr/local" > +qemu_suffix="qemu" > +slirp="" > +oss_lib="" > +bsd="no" > +linux="no" > +solaris="no" > +profiler="no" > +cocoa="no" > +softmmu="yes" > +linux_user="no" > +bsd_user="no" > +blobs="yes" > +edk2_blobs="no" > +pkgversion="" > +pie="" > +qom_cast_debug="yes" > +trace_backends="log" > +trace_file="trace" > +spice="" > +rbd="" > +smartcard="" > +u2f="auto" > +libusb="" > +usb_redir="" > +opengl="" > +opengl_dmabuf="no" > +cpuid_h="no" > +avx2_opt="" > +capstone="" > +lzo="" > +snappy="" > +bzip2="" > +lzfse="" > +zstd="" > +guest_agent="" > +guest_agent_with_vss="no" > +guest_agent_ntddscsi="no" > +guest_agent_msi="" > +vss_win32_sdk="" > +win_sdk="no" > +want_tools="" > +libiscsi="" > +libnfs="" > +coroutine="" > +coroutine_pool="" > +debug_stack_usage="no" > +crypto_afalg="no" > +seccomp="" > +glusterfs="" > +glusterfs_xlator_opt="no" > +glusterfs_discard="no" > +glusterfs_fallocate="no" > +glusterfs_zerofill="no" > +glusterfs_ftruncate_has_stat="no" > +glusterfs_iocb_has_stat="no" > +gtk="" > +gtk_gl="no" > +tls_priority="NORMAL" > +gnutls="" > +nettle="" > +nettle_xts="no" > +gcrypt="" > +gcrypt_hmac="no" > +gcrypt_xts="no" > +qemu_private_xts="yes" > +auth_pam="" > +vte="" > +virglrenderer="" > +tpm="" > +libssh="" > +live_block_migration="yes" > +numa="" > +tcmalloc="no" > +jemalloc="no" > +replication="yes" > +bochs="yes" > +cloop="yes" > +dmg="yes" > +qcow1="yes" > +vdi="yes" > +vvfat="yes" > +qed="yes" > +parallels="yes" > +sheepdog="yes" > +libxml2="" > +debug_mutex="no" > +libpmem="" > +default_devices="yes" > +plugins="no" > +fuzzing="no" > +rng_none="no" > +secret_keyring="" > +libdaxctl="" > +meson="" > +ninja="" > +skip_meson=no > +gettext="" > + > +bogus_os="no" > +malloc_trim="" > + > +# parse CC options first > +for opt do > + optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') > + case "$opt" in > + --cross-prefix=*) cross_prefix="$optarg" > + ;; > + --cc=*) CC="$optarg" > + ;; > + --cxx=*) CXX="$optarg" > + ;; > + --cpu=*) cpu="$optarg" > + ;; > + --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg" > + QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" > + ;; > + --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg" > + ;; > + --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg" > + EXTRA_LDFLAGS="$optarg" > + ;; > + --enable-debug-info) debug_info="yes" > + ;; > + --disable-debug-info) debug_info="no" > + ;; > + --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option" > + ;; > + --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*} > + eval "cross_cc_cflags_${cc_arch}=\$optarg" > + cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}" > + ;; > + --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*} > + cc_archs="$cc_archs $cc_arch" > + eval "cross_cc_${cc_arch}=\$optarg" > + cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}" > + ;; > + esac > +done > +# OS specific > +# Using uname is really, really broken. Once we have the right set of checks > +# we can eliminate its usage altogether. > + > +# Preferred compiler: > +# ${CC} (if set) > +# ${cross_prefix}gcc (if cross-prefix specified) > +# system compiler > +if test -z "${CC}${cross_prefix}"; then > + cc="$host_cc" > +else > + cc="${CC-${cross_prefix}gcc}" > +fi > + > +if test -z "${CXX}${cross_prefix}"; then > + cxx="c++" > +else > + cxx="${CXX-${cross_prefix}g++}" > +fi > + > +ar="${AR-${cross_prefix}ar}" > +as="${AS-${cross_prefix}as}" > +ccas="${CCAS-$cc}" > +cpp="${CPP-$cc -E}" > +objcopy="${OBJCOPY-${cross_prefix}objcopy}" > +ld="${LD-${cross_prefix}ld}" > +ranlib="${RANLIB-${cross_prefix}ranlib}" > +nm="${NM-${cross_prefix}nm}" > +strip="${STRIP-${cross_prefix}strip}" > +windres="${WINDRES-${cross_prefix}windres}" > +pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}" > +query_pkg_config() { > + "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" > +} > +pkg_config=query_pkg_config > +sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}" > + > +# If the user hasn't specified ARFLAGS, default to 'rv', just as make does. > +ARFLAGS="${ARFLAGS-rv}" > + > +# default flags for all hosts > +# We use -fwrapv to tell the compiler that we require a C dialect where > +# left shift of signed integers is well defined and has the expected > +# 2s-complement style results. (Both clang and gcc agree that it > +# provides these semantics.) > +QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS" > +QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS" > +QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS" > +QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS" > +QEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include" > +QEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl" > +CFLAGS="-std=gnu99 -Wall" > + > + > +# running configure in the source tree? > +# we know that's the case if configure is there. > +if test -f "./configure"; then > + pwd_is_source_path="y" > +else > + pwd_is_source_path="n" > +fi > + > +check_define() { > +cat > $TMPC < +#if !defined($1) > +#error $1 not defined > +#endif > +int main(void) { return 0; } > +EOF > + compile_object > +} > + > +check_include() { > +cat > $TMPC < +#include <$1> > +int main(void) { return 0; } > +EOF > + compile_object > +} > + > +write_c_skeleton() { > + cat > $TMPC < +int main(void) { return 0; } > +EOF > +} > + > +write_c_fuzzer_skeleton() { > + cat > $TMPC < +#include > +#include > +int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size); > +int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; } > +EOF > +} > + > +if check_define __linux__ ; then > + targetos="Linux" > +elif check_define _WIN32 ; then > + targetos='MINGW32' > +elif check_define __OpenBSD__ ; then > + targetos='OpenBSD' > +elif check_define __sun__ ; then > + targetos='SunOS' > +elif check_define __HAIKU__ ; then > + targetos='Haiku' > +elif check_define __FreeBSD__ ; then > + targetos='FreeBSD' > +elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then > + targetos='GNU/kFreeBSD' > +elif check_define __DragonFly__ ; then > + targetos='DragonFly' > +elif check_define __NetBSD__; then > + targetos='NetBSD' > +elif check_define __APPLE__; then > + targetos='Darwin' > +else > + # This is a fatal error, but don't report it yet, because we > + # might be going to just print the --help text, or it might > + # be the result of a missing compiler. > + targetos='bogus' > + bogus_os='yes' > +fi > + > +# Some host OSes need non-standard checks for which CPU to use. > +# Note that these checks are broken for cross-compilation: if you're > +# cross-compiling to one of these OSes then you'll need to specify > +# the correct CPU with the --cpu option. > +case $targetos in > +Darwin) > + # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can > + # run 64-bit userspace code. > + # If the user didn't specify a CPU explicitly and the kernel says this is > + # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code. > + if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then > + cpu="x86_64" > + fi > + ;; > +SunOS) > + # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo > + if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then > + cpu="x86_64" > + fi > +esac > + > +if test ! -z "$cpu" ; then > + # command line argument > + : > +elif check_define __i386__ ; then > + cpu="i386" > +elif check_define __x86_64__ ; then > + if check_define __ILP32__ ; then > + cpu="x32" > + else > + cpu="x86_64" > + fi > +elif check_define __sparc__ ; then > + if check_define __arch64__ ; then > + cpu="sparc64" > + else > + cpu="sparc" > + fi > +elif check_define _ARCH_PPC ; then > + if check_define _ARCH_PPC64 ; then > + if check_define _LITTLE_ENDIAN ; then > + cpu="ppc64le" > + else > + cpu="ppc64" > + fi > + else > + cpu="ppc" > + fi > +elif check_define __mips__ ; then > + cpu="mips" > +elif check_define __s390__ ; then > + if check_define __s390x__ ; then > + cpu="s390x" > + else > + cpu="s390" > + fi > +elif check_define __riscv ; then > + if check_define _LP64 ; then > + cpu="riscv64" > + else > + cpu="riscv32" > + fi > +elif check_define __arm__ ; then > + cpu="arm" > +elif check_define __aarch64__ ; then > + cpu="aarch64" > +else > + cpu=$(uname -m) > +fi > + > +ARCH= > +# Normalise host CPU name and set ARCH. > +# Note that this case should only have supported host CPUs, not guests. > +case "$cpu" in > + ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64) > + ;; > + ppc64le) > + ARCH="ppc64" > + ;; > + i386|i486|i586|i686|i86pc|BePC) > + cpu="i386" > + ;; > + x86_64|amd64) > + cpu="x86_64" > + ;; > + armv*b|armv*l|arm) > + cpu="arm" > + ;; > + aarch64) > + cpu="aarch64" > + ;; > + mips*) > + cpu="mips" > + ;; > + sparc|sun4[cdmuv]) > + cpu="sparc" > + ;; > + *) > + # This will result in either an error or falling back to TCI later > + ARCH=unknown > + ;; > +esac > +if test -z "$ARCH"; then > + ARCH="$cpu" > +fi > + > +# OS specific > + > +# host *BSD for user mode > +HOST_VARIANT_DIR="" > + > +case $targetos in > +MINGW32*) > + mingw32="yes" > + hax="yes" > + vhost_user="no" > + audio_possible_drivers="dsound sdl" > + if check_include dsound.h; then > + audio_drv_list="dsound" > + else > + audio_drv_list="" > + fi > + supported_os="yes" > + pie="no" > +;; > +GNU/kFreeBSD) > + bsd="yes" > + audio_drv_list="oss try-sdl" > + audio_possible_drivers="oss sdl pa" > +;; > +FreeBSD) > + bsd="yes" > + make="${MAKE-gmake}" > + audio_drv_list="oss try-sdl" > + audio_possible_drivers="oss sdl pa" > + # needed for kinfo_getvmmap(3) in libutil.h > + LIBS="-lutil $LIBS" > + netmap="" # enable netmap autodetect > + HOST_VARIANT_DIR="freebsd" > +;; > +DragonFly) > + bsd="yes" > + make="${MAKE-gmake}" > + audio_drv_list="oss try-sdl" > + audio_possible_drivers="oss sdl pa" > + HOST_VARIANT_DIR="dragonfly" > +;; > +NetBSD) > + bsd="yes" > + hax="yes" > + make="${MAKE-gmake}" > + audio_drv_list="oss try-sdl" > + audio_possible_drivers="oss sdl" > + oss_lib="-lossaudio" > + HOST_VARIANT_DIR="netbsd" > +;; > +OpenBSD) > + bsd="yes" > + make="${MAKE-gmake}" > + audio_drv_list="try-sdl" > + audio_possible_drivers="sdl" > + HOST_VARIANT_DIR="openbsd" > +;; > +Darwin) > + bsd="yes" > + darwin="yes" > + hax="yes" > + hvf="yes" > + LDFLAGS_SHARED="-bundle -undefined dynamic_lookup" > + if [ "$cpu" = "x86_64" ] ; then > + QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS" > + QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS" > + fi > + cocoa="yes" > + audio_drv_list="coreaudio try-sdl" > + audio_possible_drivers="coreaudio sdl" > + QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS" > + # Disable attempts to use ObjectiveC features in os/object.h since they > + # won't work when we're compiling with gcc as a C compiler. > + QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS" > + HOST_VARIANT_DIR="darwin" > +;; > +SunOS) > + solaris="yes" > + make="${MAKE-gmake}" > + install="${INSTALL-ginstall}" > + smbd="${SMBD-/usr/sfw/sbin/smbd}" > + if test -f /usr/include/sys/soundcard.h ; then > + audio_drv_list="oss try-sdl" > + fi > + audio_possible_drivers="oss sdl" > +# needed for CMSG_ macros in sys/socket.h > + QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS" > +# needed for TIOCWIN* defines in termios.h > + QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS" > + solarisnetlibs="-lsocket -lnsl -lresolv" > + LIBS="$solarisnetlibs $LIBS" > +;; > +Haiku) > + haiku="yes" > + QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS" > + LIBS="-lposix_error_mapper -lnetwork -lbsd $LIBS" > +;; > +Linux) > + audio_drv_list="try-pa oss" > + audio_possible_drivers="oss alsa sdl pa" > + linux="yes" > + linux_user="yes" > + kvm="yes" > + QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I${build_path}/linux-headers $QEMU_INCLUDES" > + libudev="yes" > +;; > +esac > + > +if [ "$bsd" = "yes" ] ; then > + if [ "$darwin" != "yes" ] ; then > + bsd_user="yes" > + fi > +fi > + > +: ${make=${MAKE-make}} > +: ${install=${INSTALL-install}} > +# We prefer python 3.x. A bare 'python' is traditionally > +# python 2.x, but some distros have it as python 3.x, so > +# we check that too > +python= > +explicit_python=no > +for binary in "${PYTHON-python3}" python > +do > + if has "$binary" > + then > + python=$(command -v "$binary") > + break > + fi > +done > + > +sphinx_build= > +for binary in sphinx-build-3 sphinx-build > +do > + if has "$binary" > + then > + sphinx_build=$(command -v "$binary") > + break > + fi > +done > + > +# Check for ancillary tools used in testing > +genisoimage= > +for binary in genisoimage mkisofs > +do > + if has $binary > + then > + genisoimage=$(command -v "$binary") > + break > + fi > +done > + > +: ${smbd=${SMBD-/usr/sbin/smbd}} > + > +# Default objcc to clang if available, otherwise use CC > +if has clang; then > + objcc=clang > +else > + objcc="$cc" > +fi > + > +if test "$mingw32" = "yes" ; then > + EXESUF=".exe" > + HOST_DSOSUF=".dll" > + # MinGW needs -mthreads for TLS and macro _MT. > + CFLAGS="-mthreads $CFLAGS" > + LIBS="-lwinmm -lws2_32 $LIBS" > + write_c_skeleton; > + if compile_prog "" "-liberty" ; then > + LIBS="-liberty $LIBS" > + fi > + prefix="c:/Program Files/QEMU" > + qemu_suffix="" > + libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga" > +fi > + > +werror="" > + > +for opt do > + optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') > + case "$opt" in > + --help|-h) show_help=yes > + ;; > + --version|-V) exec cat $source_path/VERSION > + ;; > + --prefix=*) prefix="$optarg" > + ;; > + --interp-prefix=*) interp_prefix="$optarg" > + ;; > + --cross-prefix=*) > + ;; > + --cc=*) > + ;; > + --host-cc=*) host_cc="$optarg" > + ;; > + --cxx=*) > + ;; > + --iasl=*) iasl="$optarg" > + ;; > + --objcc=*) objcc="$optarg" > + ;; > + --make=*) make="$optarg" > + ;; > + --install=*) install="$optarg" > + ;; > + --python=*) python="$optarg" ; explicit_python=yes > + ;; > + --sphinx-build=*) sphinx_build="$optarg" > + ;; > + --skip-meson) skip_meson=yes > + ;; > + --meson=*) meson="$optarg" > + ;; > + --ninja=*) ninja="$optarg" > + ;; > + --smbd=*) smbd="$optarg" > + ;; > + --extra-cflags=*) > + ;; > + --extra-cxxflags=*) > + ;; > + --extra-ldflags=*) > + ;; > + --enable-debug-info) > + ;; > + --disable-debug-info) > + ;; > + --cross-cc-*) > + ;; > + --enable-modules) > + modules="yes" > + ;; > + --disable-modules) > + modules="no" > + ;; > + --disable-module-upgrades) module_upgrades="no" > + ;; > + --enable-module-upgrades) module_upgrades="yes" > + ;; > + --cpu=*) > + ;; > + --target-list=*) target_list="$optarg" > + if test "$target_list_exclude"; then > + error_exit "Can't mix --target-list with --target-list-exclude" > + fi > + ;; > + --target-list-exclude=*) target_list_exclude="$optarg" > + if test "$target_list"; then > + error_exit "Can't mix --target-list-exclude with --target-list" > + fi > + ;; > + --enable-trace-backends=*) trace_backends="$optarg" > + ;; > + # XXX: backwards compatibility > + --enable-trace-backend=*) trace_backends="$optarg" > + ;; > + --with-trace-file=*) trace_file="$optarg" > + ;; > + --with-default-devices) default_devices="yes" > + ;; > + --without-default-devices) default_devices="no" > + ;; > + --enable-gprof) gprof="yes" > + ;; > + --enable-gcov) gcov="yes" > + ;; > + --static) > + static="yes" > + QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS" > + ;; > + --mandir=*) mandir="$optarg" > + ;; > + --bindir=*) bindir="$optarg" > + ;; > + --libdir=*) libdir="$optarg" > + ;; > + --libexecdir=*) libexecdir="$optarg" > + ;; > + --includedir=*) includedir="$optarg" > + ;; > + --datadir=*) datadir="$optarg" > + ;; > + --with-suffix=*) qemu_suffix="$optarg" > + ;; > + --docdir=*) qemu_docdir="$optarg" > + ;; > + --sysconfdir=*) sysconfdir="$optarg" > + ;; > + --localstatedir=*) local_statedir="$optarg" > + ;; > + --firmwarepath=*) firmwarepath="$optarg" > + ;; > + --host=*|--build=*|\ > + --disable-dependency-tracking|\ > + --sbindir=*|--sharedstatedir=*|\ > + --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\ > + --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*) > + # These switches are silently ignored, for compatibility with > + # autoconf-generated configure scripts. This allows QEMU's > + # configure to be used by RPM and similar macros that set > + # lots of directory switches by default. > + ;; > + --disable-sdl) sdl="disabled" > + ;; > + --enable-sdl) sdl="enabled" > + ;; > + --disable-sdl-image) sdl_image="disabled" > + ;; > + --enable-sdl-image) sdl_image="enabled" > + ;; > + --disable-qom-cast-debug) qom_cast_debug="no" > + ;; > + --enable-qom-cast-debug) qom_cast_debug="yes" > + ;; > + --disable-virtfs) virtfs="no" > + ;; > + --enable-virtfs) virtfs="yes" > + ;; > + --disable-mpath) mpath="no" > + ;; > + --enable-mpath) mpath="yes" > + ;; > + --disable-vnc) vnc="disabled" > + ;; > + --enable-vnc) vnc="enabled" > + ;; > + --disable-gettext) gettext="false" > + ;; > + --enable-gettext) gettext="true" > + ;; > + --oss-lib=*) oss_lib="$optarg" > + ;; > + --audio-drv-list=*) audio_drv_list="$optarg" > + ;; > + --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') > + ;; > + --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g') > + ;; > + --enable-debug-tcg) debug_tcg="yes" > + ;; > + --disable-debug-tcg) debug_tcg="no" > + ;; > + --enable-debug) > + # Enable debugging options that aren't excessively noisy > + debug_tcg="yes" > + debug_mutex="yes" > + debug="yes" > + strip_opt="no" > + fortify_source="no" > + ;; > + --enable-sanitizers) sanitizers="yes" > + ;; > + --disable-sanitizers) sanitizers="no" > + ;; > + --enable-tsan) tsan="yes" > + ;; > + --disable-tsan) tsan="no" > + ;; > + --enable-sparse) sparse="yes" > + ;; > + --disable-sparse) sparse="no" > + ;; > + --disable-strip) strip_opt="no" > + ;; > + --disable-vnc-sasl) vnc_sasl="disabled" > + ;; > + --enable-vnc-sasl) vnc_sasl="enabled" > + ;; > + --disable-vnc-jpeg) vnc_jpeg="disabled" > + ;; > + --enable-vnc-jpeg) vnc_jpeg="enabled" > + ;; > + --disable-vnc-png) vnc_png="disabled" > + ;; > + --enable-vnc-png) vnc_png="enabled" > + ;; > + --disable-slirp) slirp="no" > + ;; > + --enable-slirp=git) slirp="git" > + ;; > + --enable-slirp=system) slirp="system" > + ;; > + --disable-vde) vde="no" > + ;; > + --enable-vde) vde="yes" > + ;; > + --disable-netmap) netmap="no" > + ;; > + --enable-netmap) netmap="yes" > + ;; > + --disable-xen) xen="no" > + ;; > + --enable-xen) xen="yes" > + ;; > + --disable-xen-pci-passthrough) xen_pci_passthrough="no" > + ;; > + --enable-xen-pci-passthrough) xen_pci_passthrough="yes" > + ;; > + --disable-brlapi) brlapi="no" > + ;; > + --enable-brlapi) brlapi="yes" > + ;; > + --disable-kvm) kvm="no" > + ;; > + --enable-kvm) kvm="yes" > + ;; > + --disable-hax) hax="no" > + ;; > + --enable-hax) hax="yes" > + ;; > + --disable-hvf) hvf="no" > + ;; > + --enable-hvf) hvf="yes" > + ;; > + --disable-whpx) whpx="no" > + ;; > + --enable-whpx) whpx="yes" > + ;; > + --disable-tcg-interpreter) tcg_interpreter="no" > + ;; > + --enable-tcg-interpreter) tcg_interpreter="yes" > + ;; > + --disable-cap-ng) cap_ng="no" > + ;; > + --enable-cap-ng) cap_ng="yes" > + ;; > + --disable-tcg) tcg="no" > + ;; > + --enable-tcg) tcg="yes" > + ;; > + --disable-malloc-trim) malloc_trim="no" > + ;; > + --enable-malloc-trim) malloc_trim="yes" > + ;; > + --disable-spice) spice="no" > + ;; > + --enable-spice) spice="yes" > + ;; > + --disable-libiscsi) libiscsi="no" > + ;; > + --enable-libiscsi) libiscsi="yes" > + ;; > + --disable-libnfs) libnfs="no" > + ;; > + --enable-libnfs) libnfs="yes" > + ;; > + --enable-profiler) profiler="yes" > + ;; > + --disable-cocoa) cocoa="no" > + ;; > + --enable-cocoa) > + cocoa="yes" ; > + audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)" > + ;; > + --disable-system) softmmu="no" > + ;; > + --enable-system) softmmu="yes" > + ;; > + --disable-user) > + linux_user="no" ; > + bsd_user="no" ; > + ;; > + --enable-user) ;; > + --disable-linux-user) linux_user="no" > + ;; > + --enable-linux-user) linux_user="yes" > + ;; > + --disable-bsd-user) bsd_user="no" > + ;; > + --enable-bsd-user) bsd_user="yes" > + ;; > + --enable-pie) pie="yes" > + ;; > + --disable-pie) pie="no" > + ;; > + --enable-werror) werror="yes" > + ;; > + --disable-werror) werror="no" > + ;; > + --enable-stack-protector) stack_protector="yes" > + ;; > + --disable-stack-protector) stack_protector="no" > + ;; > + --enable-safe-stack) safe_stack="yes" > + ;; > + --disable-safe-stack) safe_stack="no" > + ;; > + --disable-curses) curses="no" > + ;; > + --enable-curses) curses="yes" > + ;; > + --disable-iconv) iconv="no" > + ;; > + --enable-iconv) iconv="yes" > + ;; > + --disable-curl) curl="no" > + ;; > + --enable-curl) curl="yes" > + ;; > + --disable-fdt) fdt="no" > + ;; > + --enable-fdt) fdt="yes" > + ;; > + --disable-linux-aio) linux_aio="no" > + ;; > + --enable-linux-aio) linux_aio="yes" > + ;; > + --disable-linux-io-uring) linux_io_uring="no" > + ;; > + --enable-linux-io-uring) linux_io_uring="yes" > + ;; > + --disable-attr) attr="no" > + ;; > + --enable-attr) attr="yes" > + ;; > + --disable-membarrier) membarrier="no" > + ;; > + --enable-membarrier) membarrier="yes" > + ;; > + --disable-blobs) blobs="no" > + ;; > + --with-pkgversion=*) pkgversion="$optarg" > + ;; > + --with-coroutine=*) coroutine="$optarg" > + ;; > + --disable-coroutine-pool) coroutine_pool="no" > + ;; > + --enable-coroutine-pool) coroutine_pool="yes" > + ;; > + --enable-debug-stack-usage) debug_stack_usage="yes" > + ;; > + --enable-crypto-afalg) crypto_afalg="yes" > + ;; > + --disable-crypto-afalg) crypto_afalg="no" > + ;; > + --disable-docs) docs="no" > + ;; > + --enable-docs) docs="yes" > + ;; > + --disable-vhost-net) vhost_net="no" > + ;; > + --enable-vhost-net) vhost_net="yes" > + ;; > + --disable-vhost-crypto) vhost_crypto="no" > + ;; > + --enable-vhost-crypto) vhost_crypto="yes" > + ;; > + --disable-vhost-scsi) vhost_scsi="no" > + ;; > + --enable-vhost-scsi) vhost_scsi="yes" > + ;; > + --disable-vhost-vsock) vhost_vsock="no" > + ;; > + --enable-vhost-vsock) vhost_vsock="yes" > + ;; > + --disable-vhost-user-fs) vhost_user_fs="no" > + ;; > + --enable-vhost-user-fs) vhost_user_fs="yes" > + ;; > + --disable-opengl) opengl="no" > + ;; > + --enable-opengl) opengl="yes" > + ;; > + --disable-rbd) rbd="no" > + ;; > + --enable-rbd) rbd="yes" > + ;; > + --disable-xfsctl) xfs="no" > + ;; > + --enable-xfsctl) xfs="yes" > + ;; > + --disable-smartcard) smartcard="no" > + ;; > + --enable-smartcard) smartcard="yes" > + ;; > + --disable-u2f) u2f="disabled" > + ;; > + --enable-u2f) u2f="enabled" > + ;; > + --disable-libusb) libusb="no" > + ;; > + --enable-libusb) libusb="yes" > + ;; > + --disable-usb-redir) usb_redir="no" > + ;; > + --enable-usb-redir) usb_redir="yes" > + ;; > + --disable-zlib-test) > + ;; > + --disable-lzo) lzo="no" > + ;; > + --enable-lzo) lzo="yes" > + ;; > + --disable-snappy) snappy="no" > + ;; > + --enable-snappy) snappy="yes" > + ;; > + --disable-bzip2) bzip2="no" > + ;; > + --enable-bzip2) bzip2="yes" > + ;; > + --enable-lzfse) lzfse="yes" > + ;; > + --disable-lzfse) lzfse="no" > + ;; > + --disable-zstd) zstd="no" > + ;; > + --enable-zstd) zstd="yes" > + ;; > + --enable-guest-agent) guest_agent="yes" > + ;; > + --disable-guest-agent) guest_agent="no" > + ;; > + --enable-guest-agent-msi) guest_agent_msi="yes" > + ;; > + --disable-guest-agent-msi) guest_agent_msi="no" > + ;; > + --with-vss-sdk) vss_win32_sdk="" > + ;; > + --with-vss-sdk=*) vss_win32_sdk="$optarg" > + ;; > + --without-vss-sdk) vss_win32_sdk="no" > + ;; > + --with-win-sdk) win_sdk="" > + ;; > + --with-win-sdk=*) win_sdk="$optarg" > + ;; > + --without-win-sdk) win_sdk="no" > + ;; > + --enable-tools) want_tools="yes" > + ;; > + --disable-tools) want_tools="no" > + ;; > + --enable-seccomp) seccomp="yes" > + ;; > + --disable-seccomp) seccomp="no" > + ;; > + --disable-glusterfs) glusterfs="no" > + ;; > + --disable-avx2) avx2_opt="no" > + ;; > + --enable-avx2) avx2_opt="yes" > + ;; > + --disable-avx512f) avx512f_opt="no" > + ;; > + --enable-avx512f) avx512f_opt="yes" > + ;; > + > + --enable-glusterfs) glusterfs="yes" > + ;; > + --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane) > + echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2 > + ;; > + --enable-vhdx|--disable-vhdx) > + echo "$0: $opt is obsolete, VHDX driver is always built" >&2 > + ;; > + --enable-uuid|--disable-uuid) > + echo "$0: $opt is obsolete, UUID support is always built" >&2 > + ;; > + --disable-gtk) gtk="no" > + ;; > + --enable-gtk) gtk="yes" > + ;; > + --tls-priority=*) tls_priority="$optarg" > + ;; > + --disable-gnutls) gnutls="no" > + ;; > + --enable-gnutls) gnutls="yes" > + ;; > + --disable-nettle) nettle="no" > + ;; > + --enable-nettle) nettle="yes" > + ;; > + --disable-gcrypt) gcrypt="no" > + ;; > + --enable-gcrypt) gcrypt="yes" > + ;; > + --disable-auth-pam) auth_pam="no" > + ;; > + --enable-auth-pam) auth_pam="yes" > + ;; > + --enable-rdma) rdma="yes" > + ;; > + --disable-rdma) rdma="no" > + ;; > + --enable-pvrdma) pvrdma="yes" > + ;; > + --disable-pvrdma) pvrdma="no" > + ;; > + --disable-vte) vte="no" > + ;; > + --enable-vte) vte="yes" > + ;; > + --disable-virglrenderer) virglrenderer="no" > + ;; > + --enable-virglrenderer) virglrenderer="yes" > + ;; > + --disable-tpm) tpm="no" > + ;; > + --enable-tpm) tpm="yes" > + ;; > + --disable-libssh) libssh="no" > + ;; > + --enable-libssh) libssh="yes" > + ;; > + --disable-live-block-migration) live_block_migration="no" > + ;; > + --enable-live-block-migration) live_block_migration="yes" > + ;; > + --disable-numa) numa="no" > + ;; > + --enable-numa) numa="yes" > + ;; > + --disable-libxml2) libxml2="no" > + ;; > + --enable-libxml2) libxml2="yes" > + ;; > + --disable-tcmalloc) tcmalloc="no" > + ;; > + --enable-tcmalloc) tcmalloc="yes" > + ;; > + --disable-jemalloc) jemalloc="no" > + ;; > + --enable-jemalloc) jemalloc="yes" > + ;; > + --disable-replication) replication="no" > + ;; > + --enable-replication) replication="yes" > + ;; > + --disable-bochs) bochs="no" > + ;; > + --enable-bochs) bochs="yes" > + ;; > + --disable-cloop) cloop="no" > + ;; > + --enable-cloop) cloop="yes" > + ;; > + --disable-dmg) dmg="no" > + ;; > + --enable-dmg) dmg="yes" > + ;; > + --disable-qcow1) qcow1="no" > + ;; > + --enable-qcow1) qcow1="yes" > + ;; > + --disable-vdi) vdi="no" > + ;; > + --enable-vdi) vdi="yes" > + ;; > + --disable-vvfat) vvfat="no" > + ;; > + --enable-vvfat) vvfat="yes" > + ;; > + --disable-qed) qed="no" > + ;; > + --enable-qed) qed="yes" > + ;; > + --disable-parallels) parallels="no" > + ;; > + --enable-parallels) parallels="yes" > + ;; > + --disable-sheepdog) sheepdog="no" > + ;; > + --enable-sheepdog) sheepdog="yes" > + ;; > + --disable-vhost-user) vhost_user="no" > + ;; > + --enable-vhost-user) vhost_user="yes" > + ;; > + --disable-vhost-vdpa) vhost_vdpa="no" > + ;; > + --enable-vhost-vdpa) vhost_vdpa="yes" > + ;; > + --disable-vhost-kernel) vhost_kernel="no" > + ;; > + --enable-vhost-kernel) vhost_kernel="yes" > + ;; > + --disable-capstone) capstone="no" > + ;; > + --enable-capstone) capstone="yes" > + ;; > + --enable-capstone=git) capstone="git" > + ;; > + --enable-capstone=system) capstone="system" > + ;; > + --with-git=*) git="$optarg" > + ;; > + --enable-git-update) git_update=yes > + ;; > + --disable-git-update) git_update=no > + ;; > + --enable-debug-mutex) debug_mutex=yes > + ;; > + --disable-debug-mutex) debug_mutex=no > + ;; > + --enable-libpmem) libpmem=yes > + ;; > + --disable-libpmem) libpmem=no > + ;; > + --enable-xkbcommon) xkbcommon="enabled" > + ;; > + --disable-xkbcommon) xkbcommon="disabled" > + ;; > + --enable-plugins) plugins="yes" > + ;; > + --disable-plugins) plugins="no" > + ;; > + --enable-containers) use_containers="yes" > + ;; > + --disable-containers) use_containers="no" > + ;; > + --enable-fuzzing) fuzzing=yes > + ;; > + --disable-fuzzing) fuzzing=no > + ;; > + --gdb=*) gdb_bin="$optarg" > + ;; > + --enable-rng-none) rng_none=yes > + ;; > + --disable-rng-none) rng_none=no > + ;; > + --enable-keyring) secret_keyring="yes" > + ;; > + --disable-keyring) secret_keyring="no" > + ;; > + --enable-libdaxctl) libdaxctl=yes > + ;; > + --disable-libdaxctl) libdaxctl=no > + ;; > + *) > + echo "ERROR: unknown option $opt" > + echo "Try '$0 --help' for more information" > + exit 1 > + ;; > + esac > +done > + > +firmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}" > +libdir="${libdir:-$prefix/lib}" > +libexecdir="${libexecdir:-$prefix/libexec}" > +includedir="${includedir:-$prefix/include}" > + > +if test "$mingw32" = "yes" ; then > + mandir="$prefix" > + datadir="$prefix" > + docdir="$prefix" > + bindir="$prefix" > + sysconfdir="$prefix" > + local_statedir= > +else > + mandir="${mandir:-$prefix/share/man}" > + datadir="${datadir:-$prefix/share}" > + docdir="${docdir:-$prefix/share/doc}" > + bindir="${bindir:-$prefix/bin}" > + sysconfdir="${sysconfdir:-$prefix/etc}" > + local_statedir="${local_statedir:-$prefix/var}" > +fi > + > +case "$cpu" in > + ppc) > + CPU_CFLAGS="-m32" > + QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" > + ;; > + ppc64) > + CPU_CFLAGS="-m64" > + QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" > + ;; > + sparc) > + CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" > + QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS" > + ;; > + sparc64) > + CPU_CFLAGS="-m64 -mcpu=ultrasparc" > + QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" > + ;; > + s390) > + CPU_CFLAGS="-m31" > + QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS" > + ;; > + s390x) > + CPU_CFLAGS="-m64" > + QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" > + ;; > + i386) > + CPU_CFLAGS="-m32" > + QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS" > + ;; > + x86_64) > + # ??? Only extremely old AMD cpus do not have cmpxchg16b. > + # If we truly care, we should simply detect this case at > + # runtime and generate the fallback to serial emulation. > + CPU_CFLAGS="-m64 -mcx16" > + QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS" > + ;; > + x32) > + CPU_CFLAGS="-mx32" > + QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS" > + ;; > + # No special flags required for other host CPUs > +esac > + > +eval "cross_cc_${cpu}=\$host_cc" > +cross_cc_vars="$cross_cc_vars cross_cc_${cpu}" > +QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS" > + > +# For user-mode emulation the host arch has to be one we explicitly > +# support, even if we're using TCI. > +if [ "$ARCH" = "unknown" ]; then > + bsd_user="no" > + linux_user="no" > +fi > + > +if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then > + tcg="no" > +fi > + > +default_target_list="" > + > +mak_wilds="" > + > +if [ "$softmmu" = "yes" ]; then > + mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak" > +fi > +if [ "$linux_user" = "yes" ]; then > + mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak" > +fi > +if [ "$bsd_user" = "yes" ]; then > + mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak" > +fi > + > +if test -z "$target_list_exclude"; then > + for config in $mak_wilds; do > + default_target_list="${default_target_list} $(basename "$config" .mak)" > + done > +else > + exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g') > + for config in $mak_wilds; do > + target="$(basename "$config" .mak)" > + exclude="no" > + for excl in $exclude_list; do > + if test "$excl" = "$target"; then > + exclude="yes" > + break; > + fi > + done > + if test "$exclude" = "no"; then > + default_target_list="${default_target_list} $target" > + fi > + done > +fi > + > +# Enumerate public trace backends for --help output > +trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/')) > + > +if test x"$show_help" = x"yes" ; then > +cat << EOF > + > +Usage: configure [options] > +Options: [defaults in brackets after descriptions] > + > +Standard options: > + --help print this message > + --prefix=PREFIX install in PREFIX [$prefix] > + --interp-prefix=PREFIX where to find shared libraries, etc. > + use %M for cpu name [$interp_prefix] > + --target-list=LIST set target list (default: build everything) > +$(echo Available targets: $default_target_list | \ > + fold -s -w 53 | sed -e 's/^/ /') > + --target-list-exclude=LIST exclude a set of targets from the default target-list > + > +Advanced options (experts only): > + --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix] > + --cc=CC use C compiler CC [$cc] > + --iasl=IASL use ACPI compiler IASL [$iasl] > + --host-cc=CC use C compiler CC [$host_cc] for code run at > + build time > + --cxx=CXX use C++ compiler CXX [$cxx] > + --objcc=OBJCC use Objective-C compiler OBJCC [$objcc] > + --extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS > + --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS > + --extra-ldflags=LDFLAGS append extra linker flags LDFLAGS > + --cross-cc-ARCH=CC use compiler when building ARCH guest test cases > + --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests > + --make=MAKE use specified make [$make] > + --install=INSTALL use specified install [$install] > + --python=PYTHON use specified python [$python] > + --sphinx-build=SPHINX use specified sphinx-build [$sphinx_build] > + --meson=MESON use specified meson [$meson] > + --ninja=NINJA use specified ninja [$ninja] > + --smbd=SMBD use specified smbd [$smbd] > + --with-git=GIT use specified git [$git] > + --static enable static build [$static] > + --mandir=PATH install man pages in PATH > + --datadir=PATH install firmware in PATH/$qemu_suffix > + --docdir=PATH install documentation in PATH/$qemu_suffix > + --bindir=PATH install binaries in PATH > + --libdir=PATH install libraries in PATH > + --libexecdir=PATH install helper binaries in PATH > + --sysconfdir=PATH install config in PATH/$qemu_suffix > + --localstatedir=PATH install local state in PATH (set at runtime on win32) > + --firmwarepath=PATH search PATH for firmware files > + --efi-aarch64=PATH PATH of efi file to use for aarch64 VMs. > + --with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix] > + --with-pkgversion=VERS use specified string as sub-version of the package > + --enable-debug enable common debug build options > + --enable-sanitizers enable default sanitizers > + --enable-tsan enable thread sanitizer > + --disable-strip disable stripping binaries > + --disable-werror disable compilation abort on warning > + --disable-stack-protector disable compiler-provided stack protection > + --audio-drv-list=LIST set audio drivers list: > + Available drivers: $audio_possible_drivers > + --block-drv-whitelist=L Same as --block-drv-rw-whitelist=L > + --block-drv-rw-whitelist=L > + set block driver read-write whitelist > + (affects only QEMU, not qemu-img) > + --block-drv-ro-whitelist=L > + set block driver read-only whitelist > + (affects only QEMU, not qemu-img) > + --enable-trace-backends=B Set trace backend > + Available backends: $trace_backend_list > + --with-trace-file=NAME Full PATH,NAME of file to store traces > + Default:trace- > + --disable-slirp disable SLIRP userspace network connectivity > + --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI) > + --enable-malloc-trim enable libc malloc_trim() for memory optimization > + --oss-lib path to OSS library > + --cpu=CPU Build for host CPU [$cpu] > + --with-coroutine=BACKEND coroutine backend. Supported options: > + ucontext, sigaltstack, windows > + --enable-gcov enable test coverage analysis with gcov > + --disable-blobs disable installing provided firmware blobs > + --with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent > + --with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb) > + --tls-priority default TLS protocol/cipher priority string > + --enable-gprof QEMU profiling with gprof > + --enable-profiler profiler support > + --enable-debug-stack-usage > + track the maximum stack usage of stacks created by qemu_alloc_stack > + --enable-plugins > + enable plugins via shared library loading > + --disable-containers don't use containers for cross-building > + --gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin] > + > +Optional features, enabled with --enable-FEATURE and > +disabled with --disable-FEATURE, default is enabled if available: > + > + system all system emulation targets > + user supported user emulation targets > + linux-user all linux usermode emulation targets > + bsd-user all BSD usermode emulation targets > + docs build documentation > + guest-agent build the QEMU Guest Agent > + guest-agent-msi build guest agent Windows MSI installation package > + pie Position Independent Executables > + modules modules support (non-Windows) > + module-upgrades try to load modules from alternate paths for upgrades > + debug-tcg TCG debugging (default is disabled) > + debug-info debugging information > + sparse sparse checker > + safe-stack SafeStack Stack Smash Protection. Depends on > + clang/llvm >= 3.7 and requires coroutine backend ucontext. > + > + gnutls GNUTLS cryptography support > + nettle nettle cryptography support > + gcrypt libgcrypt cryptography support > + auth-pam PAM access control > + sdl SDL UI > + sdl-image SDL Image support for icons > + gtk gtk UI > + vte vte support for the gtk UI > + curses curses UI > + iconv font glyph conversion support > + vnc VNC UI support > + vnc-sasl SASL encryption for VNC server > + vnc-jpeg JPEG lossy compression for VNC server > + vnc-png PNG compression for VNC server > + cocoa Cocoa UI (Mac OS X only) > + virtfs VirtFS > + mpath Multipath persistent reservation passthrough > + xen xen backend driver support > + xen-pci-passthrough PCI passthrough support for Xen > + brlapi BrlAPI (Braile) > + curl curl connectivity > + membarrier membarrier system call (for Linux 4.14+ or Windows) > + fdt fdt device tree > + kvm KVM acceleration support > + hax HAX acceleration support > + hvf Hypervisor.framework acceleration support > + whpx Windows Hypervisor Platform acceleration support > + rdma Enable RDMA-based migration > + pvrdma Enable PVRDMA support > + vde support for vde network > + netmap support for netmap network > + linux-aio Linux AIO support > + linux-io-uring Linux io_uring support > + cap-ng libcap-ng support > + attr attr and xattr support > + vhost-net vhost-net kernel acceleration support > + vhost-vsock virtio sockets device support > + vhost-scsi vhost-scsi kernel target support > + vhost-crypto vhost-user-crypto backend support > + vhost-kernel vhost kernel backend support > + vhost-user vhost-user backend support > + vhost-vdpa vhost-vdpa kernel backend support > + spice spice > + rbd rados block device (rbd) > + libiscsi iscsi support > + libnfs nfs support > + smartcard smartcard support (libcacard) > + u2f U2F support (u2f-emu) > + libusb libusb (for usb passthrough) > + live-block-migration Block migration in the main migration stream > + usb-redir usb network redirection support > + lzo support of lzo compression library > + snappy support of snappy compression library > + bzip2 support of bzip2 compression library > + (for reading bzip2-compressed dmg images) > + lzfse support of lzfse compression library > + (for reading lzfse-compressed dmg images) > + zstd support for zstd compression library > + (for migration compression and qcow2 cluster compression) > + seccomp seccomp support > + coroutine-pool coroutine freelist (better performance) > + glusterfs GlusterFS backend > + tpm TPM support > + libssh ssh block device support > + numa libnuma support > + libxml2 for Parallels image format > + tcmalloc tcmalloc support > + jemalloc jemalloc support > + avx2 AVX2 optimization support > + avx512f AVX512F optimization support > + replication replication support > + opengl opengl support > + virglrenderer virgl rendering support > + xfsctl xfsctl support > + qom-cast-debug cast debugging support > + tools build qemu-io, qemu-nbd and qemu-img tools > + bochs bochs image format support > + cloop cloop image format support > + dmg dmg image format support > + qcow1 qcow v1 image format support > + vdi vdi image format support > + vvfat vvfat image format support > + qed qed image format support > + parallels parallels image format support > + sheepdog sheepdog block driver support > + crypto-afalg Linux AF_ALG crypto backend driver > + capstone capstone disassembler support > + debug-mutex mutex debugging support > + libpmem libpmem support > + xkbcommon xkbcommon support > + rng-none dummy RNG, avoid using /dev/(u)random and getrandom() > + libdaxctl libdaxctl support > + > +NOTE: The object files are built at the place where configure is launched > +EOF > +exit 0 > +fi > + > +# Remove old dependency files to make sure that they get properly regenerated > +rm -f */config-devices.mak.d > + > +if test -z "$python" > +then > + error_exit "Python not found. Use --python=/path/to/python" > +fi > + > +# Note that if the Python conditional here evaluates True we will exit > +# with status 1 which is a shell 'false' value. > +if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then > + error_exit "Cannot use '$python', Python >= 3.5 is required." \ > + "Use --python=/path/to/python to specify a supported Python." > +fi > + > +# Preserve python version since some functionality is dependent on it > +python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null) > + > +# Suppress writing compiled files > +python="$python -B" > + > +if test -z "$meson"; then > + if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.1; then > + meson=meson > + elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then > + meson=git > + elif test -e "${source_path}/meson/meson.py" ; then > + meson=internal > + else > + if test "$explicit_python" = yes; then > + error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found." > + else > + error_exit "Meson not found. Use --meson=/path/to/meson" > + fi > + fi > +else > + # Meson uses its own Python interpreter to invoke other Python scripts, > + # but the user wants to use the one they specified with --python. > + # > + # We do not want to override the distro Python interpreter (and sometimes > + # cannot: for example in Homebrew /usr/bin/meson is a bash script), so > + # just require --meson=git|internal together with --python. > + if test "$explicit_python" = yes; then > + case "$meson" in > + git | internal) ;; > + *) error_exit "--python requires using QEMU's embedded Meson distribution." ;; > + esac > + fi > +fi > + > +if test "$meson" = git; then > + git_submodules="${git_submodules} meson" > +fi > + > +case "$meson" in > + git | internal) > + if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then > + error_exit "Python setuptools not found" > + fi > + meson="$python ${source_path}/meson/meson.py" > + ;; > + *) meson=$(command -v meson) ;; > +esac > + > +# Probe for ninja (used for compdb) > + > +if test -z "$ninja"; then > + for c in ninja ninja-build samu; do > + if has $c; then > + ninja=$(command -v "$c") > + break > + fi > + done > +fi > + > +# Check that the C compiler works. Doing this here before testing > +# the host CPU ensures that we had a valid CC to autodetect the > +# $cpu var (and we should bail right here if that's not the case). > +# It also allows the help message to be printed without a CC. > +write_c_skeleton; > +if compile_object ; then > + : C compiler works ok > +else > + error_exit "\"$cc\" either does not exist or does not work" > +fi > +if ! compile_prog ; then > + error_exit "\"$cc\" cannot build an executable (is your linker broken?)" > +fi > + > +# Now we have handled --enable-tcg-interpreter and know we're not just > +# printing the help message, bail out if the host CPU isn't supported. > +if test "$ARCH" = "unknown"; then > + if test "$tcg_interpreter" = "yes" ; then > + echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)" > + else > + error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter" > + fi > +fi > + > +# Consult white-list to determine whether to enable werror > +# by default. Only enable by default for git builds > +if test -z "$werror" ; then > + if test -e "$source_path/.git" && \ > + { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then > + werror="yes" > + else > + werror="no" > + fi > +fi > + > +if test "$bogus_os" = "yes"; then > + # Now that we know that we're not printing the help and that > + # the compiler works (so the results of the check_defines we used > + # to identify the OS are reliable), if we didn't recognize the > + # host OS we should stop now. > + error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')" > +fi > + > +# Check whether the compiler matches our minimum requirements: > +cat > $TMPC << EOF > +#if defined(__clang_major__) && defined(__clang_minor__) > +# ifdef __apple_build_version__ > +# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1) > +# error You need at least XCode Clang v5.1 to compile QEMU > +# endif > +# else > +# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4) > +# error You need at least Clang v3.4 to compile QEMU > +# endif > +# endif > +#elif defined(__GNUC__) && defined(__GNUC_MINOR__) > +# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8) > +# error You need at least GCC v4.8 to compile QEMU > +# endif > +#else > +# error You either need GCC or Clang to compiler QEMU > +#endif > +int main (void) { return 0; } > +EOF > +if ! compile_prog "" "" ; then > + error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)" > +fi > + > +# Accumulate -Wfoo and -Wno-bar separately. > +# We will list all of the enable flags first, and the disable flags second. > +# Note that we do not add -Werror, because that would enable it for all > +# configure tests. If a configure test failed due to -Werror this would > +# just silently disable some features, so it's too error prone. > + > +warn_flags= > +add_to warn_flags -Wold-style-declaration > +add_to warn_flags -Wold-style-definition > +add_to warn_flags -Wtype-limits > +add_to warn_flags -Wformat-security > +add_to warn_flags -Wformat-y2k > +add_to warn_flags -Winit-self > +add_to warn_flags -Wignored-qualifiers > +add_to warn_flags -Wempty-body > +add_to warn_flags -Wnested-externs > +add_to warn_flags -Wendif-labels > +add_to warn_flags -Wexpansion-to-defined > + > +nowarn_flags= > +add_to nowarn_flags -Wno-initializer-overrides > +add_to nowarn_flags -Wno-missing-include-dirs > +add_to nowarn_flags -Wno-shift-negative-value > +add_to nowarn_flags -Wno-string-plus-int > +add_to nowarn_flags -Wno-typedef-redefinition > +add_to nowarn_flags -Wno-tautological-type-limit-compare > +add_to nowarn_flags -Wno-psabi > + > +gcc_flags="$warn_flags $nowarn_flags" > + > +cc_has_warning_flag() { > + write_c_skeleton; > + > + # Use the positive sense of the flag when testing for -Wno-wombat > + # support (gcc will happily accept the -Wno- form of unknown > + # warning options). > + optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')" > + compile_prog "-Werror $optflag" "" > +} > + > +for flag in $gcc_flags; do > + if cc_has_warning_flag $flag ; then > + QEMU_CFLAGS="$QEMU_CFLAGS $flag" > + fi > +done > + > +if test "$stack_protector" != "no"; then > + cat > $TMPC << EOF > +int main(int argc, char *argv[]) > +{ > + char arr[64], *p = arr, *c = argv[0]; > + while (*c) { > + *p++ = *c++; > + } > + return 0; > +} > +EOF > + gcc_flags="-fstack-protector-strong -fstack-protector-all" > + sp_on=0 > + for flag in $gcc_flags; do > + # We need to check both a compile and a link, since some compiler > + # setups fail only on a .c->.o compile and some only at link time > + if compile_object "-Werror $flag" && > + compile_prog "-Werror $flag" ""; then > + QEMU_CFLAGS="$QEMU_CFLAGS $flag" > + QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" > + sp_on=1 > + break > + fi > + done > + if test "$stack_protector" = yes; then > + if test $sp_on = 0; then > + error_exit "Stack protector not supported" > + fi > + fi > +fi > + > +# Disable -Wmissing-braces on older compilers that warn even for > +# the "universal" C zero initializer {0}. > +cat > $TMPC << EOF > +struct { > + int a[2]; > +} x = {0}; > +EOF > +if compile_object "-Werror" "" ; then > + : > +else > + QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces" > +fi > + > +# Our module code doesn't support Windows > +if test "$modules" = "yes" && test "$mingw32" = "yes" ; then > + error_exit "Modules are not available for Windows" > +fi > + > +# module_upgrades is only reasonable if modules are enabled > +if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then > + error_exit "Can't enable module-upgrades as Modules are not enabled" > +fi > + > +# Static linking is not possible with modules or PIE > +if test "$static" = "yes" ; then > + if test "$modules" = "yes" ; then > + error_exit "static and modules are mutually incompatible" > + fi > +fi > + > +# Unconditional check for compiler __thread support > + cat > $TMPC << EOF > +static __thread int tls_var; > +int main(void) { return tls_var; } > +EOF > + > +if ! compile_prog "-Werror" "" ; then > + error_exit "Your compiler does not support the __thread specifier for " \ > + "Thread-Local Storage (TLS). Please upgrade to a version that does." > +fi > + > +cat > $TMPC << EOF > + > +#ifdef __linux__ > +# define THREAD __thread > +#else > +# define THREAD > +#endif > +static THREAD int tls_var; > +int main(void) { return tls_var; } > +EOF > + > +# Check we support --no-pie first; we will need this for building ROMs. > +if compile_prog "-Werror -fno-pie" "-no-pie"; then > + CFLAGS_NOPIE="-fno-pie" > + LDFLAGS_NOPIE="-no-pie" > +fi > + > +if test "$static" = "yes"; then > + if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then > + CFLAGS="-fPIE -DPIE $CFLAGS" > + QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS" > + pie="yes" > + elif test "$pie" = "yes"; then > + error_exit "-static-pie not available due to missing toolchain support" > + else > + QEMU_LDFLAGS="-static $QEMU_LDFLAGS" > + pie="no" > + fi > +elif test "$pie" = "no"; then > + CFLAGS="$CFLAGS_NOPIE $CFLAGS" > + LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS" > +elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then > + CFLAGS="-fPIE -DPIE $CFLAGS" > + LDFLAGS="-pie $LDFLAGS" > + pie="yes" > +elif test "$pie" = "yes"; then > + error_exit "PIE not available due to missing toolchain support" > +else > + echo "Disabling PIE due to missing toolchain support" > + pie="no" > +fi > + > +# Detect support for PT_GNU_RELRO + DT_BIND_NOW. > +# The combination is known as "full relro", because .got.plt is read-only too. > +if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then > + QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS" > +fi > + > +########################################## > +# __sync_fetch_and_and requires at least -march=i486. Many toolchains > +# use i686 as default anyway, but for those that don't, an explicit > +# specification is necessary > + > +if test "$cpu" = "i386"; then > + cat > $TMPC << EOF > +static int sfaa(int *ptr) > +{ > + return __sync_fetch_and_and(ptr, 0); > +} > + > +int main(void) > +{ > + int val = 42; > + val = __sync_val_compare_and_swap(&val, 0, 1); > + sfaa(&val); > + return val; > +} > +EOF > + if ! compile_prog "" "" ; then > + QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS" > + fi > +fi > + > +######################################### > +# Solaris specific configure tool chain decisions > + > +if test "$solaris" = "yes" ; then > + if has $install; then > + : > + else > + error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \ > + "install fileutils from www.blastwave.org using pkg-get -i fileutils" \ > + "to get ginstall which is used by default (which lives in /opt/csw/bin)" > + fi > + if test "$(path_of $install)" = "/usr/sbin/install" ; then > + error_exit "Solaris /usr/sbin/install is not an appropriate install program." \ > + "try ginstall from the GNU fileutils available from www.blastwave.org" \ > + "using pkg-get -i fileutils, or use --install=/usr/ucb/install" > + fi > + if has ar; then > + : > + else > + if test -f /usr/ccs/bin/ar ; then > + error_exit "No path includes ar" \ > + "Add /usr/ccs/bin to your path and rerun configure" > + fi > + error_exit "No path includes ar" > + fi > +fi > + > +if test -z "${target_list+xxx}" ; then > + for target in $default_target_list; do > + supported_target $target 2>/dev/null && \ > + target_list="$target_list $target" > + done > + target_list="${target_list# }" > +else > + target_list=$(echo "$target_list" | sed -e 's/,/ /g') > + for target in $target_list; do > + # Check that we recognised the target name; this allows a more > + # friendly error message than if we let it fall through. > + case " $default_target_list " in > + *" $target "*) > + ;; > + *) > + error_exit "Unknown target name '$target'" > + ;; > + esac > + supported_target $target || exit 1 > + done > +fi > + > +# see if system emulation was really requested > +case " $target_list " in > + *"-softmmu "*) softmmu=yes > + ;; > + *) softmmu=no > + ;; > +esac > + > +for target in $target_list; do > + case "$target" in > + arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu) > + edk2_blobs="yes" > + ;; > + esac > +done > +# The EDK2 binaries are compressed with bzip2 > +if test "$edk2_blobs" = "yes" && ! has bzip2; then > + error_exit "The bzip2 program is required for building QEMU" > +fi > + > +feature_not_found() { > + feature=$1 > + remedy=$2 > + > + error_exit "User requested feature $feature" \ > + "configure was not able to find it." \ > + "$remedy" > +} > + > +# --- > +# big/little endian test > +cat > $TMPC << EOF > +short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, }; > +short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, }; > +extern int foo(short *, short *); > +int main(int argc, char *argv[]) { > + return foo(big_endian, little_endian); > +} > +EOF > + > +if compile_object ; then > + if strings -a $TMPO | grep -q BiGeNdIaN ; then > + bigendian="yes" > + elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then > + bigendian="no" > + else > + echo big/little test failed > + fi > +else > + echo big/little test failed > +fi > + > +########################################## > +# system tools > +if test -z "$want_tools"; then > + if test "$softmmu" = "no"; then > + want_tools=no > + else > + want_tools=yes > + fi > +fi > + > +########################################## > +# cocoa implies not SDL or GTK > +# (the cocoa UI code currently assumes it is always the active UI > +# and doesn't interact well with other UI frontend code) > +if test "$cocoa" = "yes"; then > + if test "$sdl" = "yes"; then > + error_exit "Cocoa and SDL UIs cannot both be enabled at once" > + fi > + if test "$gtk" = "yes"; then > + error_exit "Cocoa and GTK UIs cannot both be enabled at once" > + fi > + gtk=no > + sdl=disabled > +fi > + > +# Some versions of Mac OS X incorrectly define SIZE_MAX > +cat > $TMPC << EOF > +#include > +#include > +int main(int argc, char *argv[]) { > + return printf("%zu", SIZE_MAX); > +} > +EOF > +have_broken_size_max=no > +if ! compile_object -Werror ; then > + have_broken_size_max=yes > +fi > + > +########################################## > +# L2TPV3 probe > + > +cat > $TMPC < +#include > +#include > +int main(void) { return sizeof(struct mmsghdr); } > +EOF > +if compile_prog "" "" ; then > + l2tpv3=yes > +else > + l2tpv3=no > +fi > + > +if check_include "pty.h" ; then > + pty_h=yes > +else > + pty_h=no > +fi > + > +cat > $TMPC < +#include > +int main(int argc, char *argv[]) { > + return mlockall(MCL_FUTURE); > +} > +EOF > +if compile_prog "" "" ; then > + have_mlockall=yes > +else > + have_mlockall=no > +fi > + > +######################################### > +# vhost interdependencies and host support > + > +# vhost backends > +test "$vhost_user" = "" && vhost_user=yes > +if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then > + error_exit "vhost-user isn't available on win32" > +fi > +test "$vhost_vdpa" = "" && vhost_vdpa=$linux > +if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then > + error_exit "vhost-vdpa is only available on Linux" > +fi > +test "$vhost_kernel" = "" && vhost_kernel=$linux > +if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then > + error_exit "vhost-kernel is only available on Linux" > +fi > + > +# vhost-kernel devices > +test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel > +if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then > + error_exit "--enable-vhost-scsi requires --enable-vhost-kernel" > +fi > +test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel > +if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then > + error_exit "--enable-vhost-vsock requires --enable-vhost-kernel" > +fi > + > +# vhost-user backends > +test "$vhost_net_user" = "" && vhost_net_user=$vhost_user > +if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then > + error_exit "--enable-vhost-net-user requires --enable-vhost-user" > +fi > +test "$vhost_crypto" = "" && vhost_crypto=$vhost_user > +if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then > + error_exit "--enable-vhost-crypto requires --enable-vhost-user" > +fi > +test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user > +if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then > + error_exit "--enable-vhost-user-fs requires --enable-vhost-user" > +fi > +#vhost-vdpa backends > +test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa > +if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then > + error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa" > +fi > + > +# OR the vhost-kernel and vhost-user values for simplicity > +if test "$vhost_net" = ""; then > + test "$vhost_net_user" = "yes" && vhost_net=yes > + test "$vhost_kernel" = "yes" && vhost_net=yes > +fi > + > +########################################## > +# MinGW / Mingw-w64 localtime_r/gmtime_r check > + > +if test "$mingw32" = "yes"; then > + # Some versions of MinGW / Mingw-w64 lack localtime_r > + # and gmtime_r entirely. > + # > + # Some versions of Mingw-w64 define a macro for > + # localtime_r/gmtime_r. > + # > + # Some versions of Mingw-w64 will define functions > + # for localtime_r/gmtime_r, but only if you have > + # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun > + # though, unistd.h and pthread.h both define > + # that for you. > + # > + # So this #undef localtime_r and #include > + # are not in fact redundant. > +cat > $TMPC << EOF > +#include > +#include > +#undef localtime_r > +int main(void) { localtime_r(NULL, NULL); return 0; } > +EOF > + if compile_prog "" "" ; then > + localtime_r="yes" > + else > + localtime_r="no" > + fi > +fi > + > +########################################## > +# pkg-config probe > + > +if ! has "$pkg_config_exe"; then > + error_exit "pkg-config binary '$pkg_config_exe' not found" > +fi > + > +########################################## > +# NPTL probe > + > +if test "$linux_user" = "yes"; then > + cat > $TMPC < +#include > +#include > +int main(void) { > +#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT) > +#error bork > +#endif > + return 0; > +} > +EOF > + if ! compile_object ; then > + feature_not_found "nptl" "Install glibc and linux kernel headers." > + fi > +fi > + > +########################################## > +# lzo check > + > +if test "$lzo" != "no" ; then > + cat > $TMPC << EOF > +#include > +int main(void) { lzo_version(); return 0; } > +EOF > + if compile_prog "" "-llzo2" ; then > + lzo_libs="-llzo2" > + lzo="yes" > + else > + if test "$lzo" = "yes"; then > + feature_not_found "liblzo2" "Install liblzo2 devel" > + fi > + lzo="no" > + fi > +fi > + > +########################################## > +# snappy check > + > +if test "$snappy" != "no" ; then > + cat > $TMPC << EOF > +#include > +int main(void) { snappy_max_compressed_length(4096); return 0; } > +EOF > + if compile_prog "" "-lsnappy" ; then > + snappy_libs='-lsnappy' > + snappy="yes" > + else > + if test "$snappy" = "yes"; then > + feature_not_found "libsnappy" "Install libsnappy devel" > + fi > + snappy="no" > + fi > +fi > + > +########################################## > +# bzip2 check > + > +if test "$bzip2" != "no" ; then > + cat > $TMPC << EOF > +#include > +int main(void) { BZ2_bzlibVersion(); return 0; } > +EOF > + if compile_prog "" "-lbz2" ; then > + bzip2="yes" > + else > + if test "$bzip2" = "yes"; then > + feature_not_found "libbzip2" "Install libbzip2 devel" > + fi > + bzip2="no" > + fi > +fi > + > +########################################## > +# lzfse check > + > +if test "$lzfse" != "no" ; then > + cat > $TMPC << EOF > +#include > +int main(void) { lzfse_decode_scratch_size(); return 0; } > +EOF > + if compile_prog "" "-llzfse" ; then > + lzfse="yes" > + else > + if test "$lzfse" = "yes"; then > + feature_not_found "lzfse" "Install lzfse devel" > + fi > + lzfse="no" > + fi > +fi > + > +########################################## > +# zstd check > + > +if test "$zstd" != "no" ; then > + libzstd_minver="1.4.0" > + if $pkg_config --atleast-version=$libzstd_minver libzstd ; then > + zstd_cflags="$($pkg_config --cflags libzstd)" > + zstd_libs="$($pkg_config --libs libzstd)" > + zstd="yes" > + else > + if test "$zstd" = "yes" ; then > + feature_not_found "libzstd" "Install libzstd devel" > + fi > + zstd="no" > + fi > +fi > + > +########################################## > +# libseccomp check > + > +if test "$seccomp" != "no" ; then > + libseccomp_minver="2.3.0" > + if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then > + seccomp_cflags="$($pkg_config --cflags libseccomp)" > + seccomp_libs="$($pkg_config --libs libseccomp)" > + seccomp="yes" > + else > + if test "$seccomp" = "yes" ; then > + feature_not_found "libseccomp" \ > + "Install libseccomp devel >= $libseccomp_minver" > + fi > + seccomp="no" > + fi > +fi > +########################################## > +# xen probe > + > +if test "$xen" != "no" ; then > + # Check whether Xen library path is specified via --extra-ldflags to avoid > + # overriding this setting with pkg-config output. If not, try pkg-config > + # to obtain all needed flags. > + > + if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \ > + $pkg_config --exists xencontrol ; then > + xen_ctrl_version="$(printf '%d%02d%02d' \ > + $($pkg_config --modversion xencontrol | sed 's/\./ /g') )" > + xen=yes > + xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab" > + xen_pc="$xen_pc xenevtchn xendevicemodel" > + if $pkg_config --exists xentoolcore; then > + xen_pc="$xen_pc xentoolcore" > + fi > + QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)" > + xen_cflags="$($pkg_config --cflags $xen_pc)" > + xen_libs="$($pkg_config --libs $xen_pc)" > + else > + > + xen_libs="-lxenstore -lxenctrl -lxenguest" > + xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn" > + > + # First we test whether Xen headers and libraries are available. > + # If no, we are done and there is no Xen support. > + # If yes, more tests are run to detect the Xen version. > + > + # Xen (any) > + cat > $TMPC < +#include > +int main(void) { > + return 0; > +} > +EOF > + if ! compile_prog "" "$xen_libs" ; then > + # Xen not found > + if test "$xen" = "yes" ; then > + feature_not_found "xen" "Install xen devel" > + fi > + xen=no > + > + # Xen unstable > + elif > + cat > $TMPC < +#undef XC_WANT_COMPAT_DEVICEMODEL_API > +#define __XEN_TOOLS__ > +#include > +#include > +int main(void) { > + xendevicemodel_handle *xd; > + xenforeignmemory_handle *xfmem; > + > + xd = xendevicemodel_open(0, 0); > + xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0); > + > + xfmem = xenforeignmemory_open(0, 0); > + xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0); > + > + return 0; > +} > +EOF > + compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" > + then > + xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" > + xen_ctrl_version=41100 > + xen=yes > + elif > + cat > $TMPC < +#undef XC_WANT_COMPAT_MAP_FOREIGN_API > +#include > +#include > +int main(void) { > + xenforeignmemory_handle *xfmem; > + > + xfmem = xenforeignmemory_open(0, 0); > + xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0); > + xentoolcore_restrict_all(0); > + > + return 0; > +} > +EOF > + compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore" > + then > + xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore" > + xen_ctrl_version=41000 > + xen=yes > + elif > + cat > $TMPC < +#undef XC_WANT_COMPAT_DEVICEMODEL_API > +#define __XEN_TOOLS__ > +#include > +int main(void) { > + xendevicemodel_handle *xd; > + > + xd = xendevicemodel_open(0, 0); > + xendevicemodel_close(xd); > + > + return 0; > +} > +EOF > + compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs" > + then > + xen_stable_libs="-lxendevicemodel $xen_stable_libs" > + xen_ctrl_version=40900 > + xen=yes > + elif > + cat > $TMPC < +/* > + * If we have stable libs the we don't want the libxc compat > + * layers, regardless of what CFLAGS we may have been given. > + * > + * Also, check if xengnttab_grant_copy_segment_t is defined and > + * grant copy operation is implemented. > + */ > +#undef XC_WANT_COMPAT_EVTCHN_API > +#undef XC_WANT_COMPAT_GNTTAB_API > +#undef XC_WANT_COMPAT_MAP_FOREIGN_API > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#if !defined(HVM_MAX_VCPUS) > +# error HVM_MAX_VCPUS not defined > +#endif > +int main(void) { > + xc_interface *xc = NULL; > + xenforeignmemory_handle *xfmem; > + xenevtchn_handle *xe; > + xengnttab_handle *xg; > + xengnttab_grant_copy_segment_t* seg = NULL; > + > + xs_daemon_open(); > + > + xc = xc_interface_open(0, 0, 0); > + xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); > + xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); > + xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); > + xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); > + > + xfmem = xenforeignmemory_open(0, 0); > + xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); > + > + xe = xenevtchn_open(0, 0); > + xenevtchn_fd(xe); > + > + xg = xengnttab_open(0, 0); > + xengnttab_grant_copy(xg, 0, seg); > + > + return 0; > +} > +EOF > + compile_prog "" "$xen_libs $xen_stable_libs" > + then > + xen_ctrl_version=40800 > + xen=yes > + elif > + cat > $TMPC < +/* > + * If we have stable libs the we don't want the libxc compat > + * layers, regardless of what CFLAGS we may have been given. > + */ > +#undef XC_WANT_COMPAT_EVTCHN_API > +#undef XC_WANT_COMPAT_GNTTAB_API > +#undef XC_WANT_COMPAT_MAP_FOREIGN_API > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#if !defined(HVM_MAX_VCPUS) > +# error HVM_MAX_VCPUS not defined > +#endif > +int main(void) { > + xc_interface *xc = NULL; > + xenforeignmemory_handle *xfmem; > + xenevtchn_handle *xe; > + xengnttab_handle *xg; > + > + xs_daemon_open(); > + > + xc = xc_interface_open(0, 0, 0); > + xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); > + xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); > + xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); > + xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); > + > + xfmem = xenforeignmemory_open(0, 0); > + xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0); > + > + xe = xenevtchn_open(0, 0); > + xenevtchn_fd(xe); > + > + xg = xengnttab_open(0, 0); > + xengnttab_map_grant_ref(xg, 0, 0, 0); > + > + return 0; > +} > +EOF > + compile_prog "" "$xen_libs $xen_stable_libs" > + then > + xen_ctrl_version=40701 > + xen=yes > + > + # Xen 4.6 > + elif > + cat > $TMPC < +#include > +#include > +#include > +#include > +#if !defined(HVM_MAX_VCPUS) > +# error HVM_MAX_VCPUS not defined > +#endif > +int main(void) { > + xc_interface *xc; > + xs_daemon_open(); > + xc = xc_interface_open(0, 0, 0); > + xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); > + xc_gnttab_open(NULL, 0); > + xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); > + xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); > + xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL); > + xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0); > + return 0; > +} > +EOF > + compile_prog "" "$xen_libs" > + then > + xen_ctrl_version=40600 > + xen=yes > + > + # Xen 4.5 > + elif > + cat > $TMPC < +#include > +#include > +#include > +#include > +#if !defined(HVM_MAX_VCPUS) > +# error HVM_MAX_VCPUS not defined > +#endif > +int main(void) { > + xc_interface *xc; > + xs_daemon_open(); > + xc = xc_interface_open(0, 0, 0); > + xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); > + xc_gnttab_open(NULL, 0); > + xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); > + xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); > + xc_hvm_create_ioreq_server(xc, 0, 0, NULL); > + return 0; > +} > +EOF > + compile_prog "" "$xen_libs" > + then > + xen_ctrl_version=40500 > + xen=yes > + > + elif > + cat > $TMPC < +#include > +#include > +#include > +#include > +#if !defined(HVM_MAX_VCPUS) > +# error HVM_MAX_VCPUS not defined > +#endif > +int main(void) { > + xc_interface *xc; > + xs_daemon_open(); > + xc = xc_interface_open(0, 0, 0); > + xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0); > + xc_gnttab_open(NULL, 0); > + xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0); > + xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000); > + return 0; > +} > +EOF > + compile_prog "" "$xen_libs" > + then > + xen_ctrl_version=40200 > + xen=yes > + > + else > + if test "$xen" = "yes" ; then > + feature_not_found "xen (unsupported version)" \ > + "Install a supported xen (xen 4.2 or newer)" > + fi > + xen=no > + fi > + > + if test "$xen" = yes; then > + if test $xen_ctrl_version -ge 40701 ; then > + xen_libs="$xen_libs $xen_stable_libs " > + fi > + fi > + fi > +fi > + > +if test "$xen_pci_passthrough" != "no"; then > + if test "$xen" = "yes" && test "$linux" = "yes"; then > + xen_pci_passthrough=yes > + else > + if test "$xen_pci_passthrough" = "yes"; then > + error_exit "User requested feature Xen PCI Passthrough" \ > + " but this feature requires /sys from Linux" > + fi > + xen_pci_passthrough=no > + fi > +fi > + > +########################################## > +# Windows Hypervisor Platform accelerator (WHPX) check > +if test "$whpx" != "no" ; then > + if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then > + whpx="yes" > + else > + if test "$whpx" = "yes"; then > + feature_not_found "WinHvPlatform" "WinHvEmulation is not installed" > + fi > + whpx="no" > + fi > +fi > + > +########################################## > +# gettext probe > +if test "$gettext" != "false" ; then > + if has xgettext; then > + gettext=true > + else > + if test "$gettext" = "true" ; then > + feature_not_found "gettext" "Install xgettext binary" > + fi > + gettext=false > + fi > +fi > + > +########################################## > +# Sparse probe > +if test "$sparse" != "no" ; then > + if has sparse; then > + sparse=yes > + else > + if test "$sparse" = "yes" ; then > + feature_not_found "sparse" "Install sparse binary" > + fi > + sparse=no > + fi > +fi > + > +########################################## > +# X11 probe > +if $pkg_config --exists "x11"; then > + have_x11=yes > + x11_cflags=$($pkg_config --cflags x11) > + x11_libs=$($pkg_config --libs x11) > +fi > + > +########################################## > +# GTK probe > + > +if test "$gtk" != "no"; then > + gtkpackage="gtk+-3.0" > + gtkx11package="gtk+-x11-3.0" > + gtkversion="3.22.0" > + if $pkg_config --exists "$gtkpackage >= $gtkversion"; then > + gtk_cflags=$($pkg_config --cflags $gtkpackage) > + gtk_libs=$($pkg_config --libs $gtkpackage) > + gtk_version=$($pkg_config --modversion $gtkpackage) > + if $pkg_config --exists "$gtkx11package >= $gtkversion"; then > + need_x11=yes > + gtk_cflags="$gtk_cflags $x11_cflags" > + gtk_libs="$gtk_libs $x11_libs" > + fi > + gtk="yes" > + elif test "$gtk" = "yes"; then > + feature_not_found "gtk" "Install gtk3-devel" > + else > + gtk="no" > + fi > +fi > + > + > +########################################## > +# GNUTLS probe > + > +if test "$gnutls" != "no"; then > + pass="no" > + if $pkg_config --exists "gnutls >= 3.1.18"; then > + gnutls_cflags=$($pkg_config --cflags gnutls) > + gnutls_libs=$($pkg_config --libs gnutls) > + # Packaging for the static libraries is not always correct. > + # At least ubuntu 18.04 ships only shared libraries. > + write_c_skeleton > + if compile_prog "" "$gnutls_libs" ; then > + LIBS="$gnutls_libs $LIBS" > + QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags" > + pass="yes" > + fi > + fi > + if test "$pass" = "no" && test "$gnutls" = "yes"; then > + feature_not_found "gnutls" "Install gnutls devel >= 3.1.18" > + else > + gnutls="$pass" > + fi > +fi > + > + > +# If user didn't give a --disable/enable-gcrypt flag, > +# then mark as disabled if user requested nettle > +# explicitly > +if test -z "$gcrypt" > +then > + if test "$nettle" = "yes" > + then > + gcrypt="no" > + fi > +fi > + > +# If user didn't give a --disable/enable-nettle flag, > +# then mark as disabled if user requested gcrypt > +# explicitly > +if test -z "$nettle" > +then > + if test "$gcrypt" = "yes" > + then > + nettle="no" > + fi > +fi > + > +has_libgcrypt() { > + if ! has "libgcrypt-config" > + then > + return 1 > + fi > + > + if test -n "$cross_prefix" > + then > + host=$(libgcrypt-config --host) > + if test "$host-" != $cross_prefix > + then > + return 1 > + fi > + fi > + > + maj=`libgcrypt-config --version | awk -F . '{print $1}'` > + min=`libgcrypt-config --version | awk -F . '{print $2}'` > + > + if test $maj != 1 || test $min -lt 5 > + then > + return 1 > + fi > + > + return 0 > +} > + > + > +if test "$nettle" != "no"; then > + pass="no" > + if $pkg_config --exists "nettle >= 2.7.1"; then > + nettle_cflags=$($pkg_config --cflags nettle) > + nettle_libs=$($pkg_config --libs nettle) > + nettle_version=$($pkg_config --modversion nettle) > + # Link test to make sure the given libraries work (e.g for static). > + write_c_skeleton > + if compile_prog "" "$nettle_libs" ; then > + LIBS="$nettle_libs $LIBS" > + QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags" > + if test -z "$gcrypt"; then > + gcrypt="no" > + fi > + pass="yes" > + fi > + fi > + if test "$pass" = "yes" > + then > + cat > $TMPC << EOF > +#include > +int main(void) { > + return 0; > +} > +EOF > + if compile_prog "$nettle_cflags" "$nettle_libs" ; then > + nettle_xts=yes > + qemu_private_xts=no > + fi > + fi > + if test "$pass" = "no" && test "$nettle" = "yes"; then > + feature_not_found "nettle" "Install nettle devel >= 2.7.1" > + else > + nettle="$pass" > + fi > +fi > + > +if test "$gcrypt" != "no"; then > + pass="no" > + if has_libgcrypt; then > + gcrypt_cflags=$(libgcrypt-config --cflags) > + gcrypt_libs=$(libgcrypt-config --libs) > + # Debian has removed -lgpg-error from libgcrypt-config > + # as it "spreads unnecessary dependencies" which in > + # turn breaks static builds... > + if test "$static" = "yes" > + then > + gcrypt_libs="$gcrypt_libs -lgpg-error" > + fi > + > + # Link test to make sure the given libraries work (e.g for static). > + write_c_skeleton > + if compile_prog "" "$gcrypt_libs" ; then > + LIBS="$gcrypt_libs $LIBS" > + QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags" > + pass="yes" > + fi > + fi > + if test "$pass" = "yes"; then > + gcrypt="yes" > + cat > $TMPC << EOF > +#include > +int main(void) { > + gcry_mac_hd_t handle; > + gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5, > + GCRY_MAC_FLAG_SECURE, NULL); > + return 0; > +} > +EOF > + if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then > + gcrypt_hmac=yes > + fi > + cat > $TMPC << EOF > +#include > +int main(void) { > + gcry_cipher_hd_t handle; > + gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0); > + return 0; > +} > +EOF > + if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then > + gcrypt_xts=yes > + qemu_private_xts=no > + fi > + elif test "$gcrypt" = "yes"; then > + feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0" > + else > + gcrypt="no" > + fi > +fi > + > + > +if test "$gcrypt" = "yes" && test "$nettle" = "yes" > +then > + error_exit "Only one of gcrypt & nettle can be enabled" > +fi > + > +########################################## > +# libtasn1 - only for the TLS creds/session test suite > + > +tasn1=yes > +tasn1_cflags="" > +tasn1_libs="" > +if $pkg_config --exists "libtasn1"; then > + tasn1_cflags=$($pkg_config --cflags libtasn1) > + tasn1_libs=$($pkg_config --libs libtasn1) > +else > + tasn1=no > +fi > + > + > +########################################## > +# PAM probe > + > +if test "$auth_pam" != "no"; then > + cat > $TMPC < +#include > +#include > +int main(void) { > + const char *service_name = "qemu"; > + const char *user = "frank"; > + const struct pam_conv pam_conv = { 0 }; > + pam_handle_t *pamh = NULL; > + pam_start(service_name, user, &pam_conv, &pamh); > + return 0; > +} > +EOF > + if compile_prog "" "-lpam" ; then > + auth_pam=yes > + else > + if test "$auth_pam" = "yes"; then > + feature_not_found "PAM" "Install PAM development package" > + else > + auth_pam=no > + fi > + fi > +fi > + > +########################################## > +# getifaddrs (for tests/test-io-channel-socket ) > + > +have_ifaddrs_h=yes > +if ! check_include "ifaddrs.h" ; then > + have_ifaddrs_h=no > +fi > + > +######################################### > +# libdrm check > +have_drm_h=no > +if check_include "libdrm/drm.h" ; then > + have_drm_h=yes > +fi > + > +######################################### > +# sys/signal.h check > +have_sys_signal_h=no > +if check_include "sys/signal.h" ; then > + have_sys_signal_h=yes > +fi > + > +########################################## > +# VTE probe > + > +if test "$vte" != "no"; then > + vteminversion="0.32.0" > + if $pkg_config --exists "vte-2.91"; then > + vtepackage="vte-2.91" > + else > + vtepackage="vte-2.90" > + fi > + if $pkg_config --exists "$vtepackage >= $vteminversion"; then > + vte_cflags=$($pkg_config --cflags $vtepackage) > + vte_libs=$($pkg_config --libs $vtepackage) > + vteversion=$($pkg_config --modversion $vtepackage) > + vte="yes" > + elif test "$vte" = "yes"; then > + feature_not_found "vte" "Install libvte-2.90/2.91 devel" > + else > + vte="no" > + fi > +fi > + > +########################################## > +# RDMA needs OpenFabrics libraries > +if test "$rdma" != "no" ; then > + cat > $TMPC < +#include > +int main(void) { return 0; } > +EOF > + rdma_libs="-lrdmacm -libverbs -libumad" > + if compile_prog "" "$rdma_libs" ; then > + rdma="yes" > + else > + if test "$rdma" = "yes" ; then > + error_exit \ > + " OpenFabrics librdmacm/libibverbs/libibumad not present." \ > + " Your options:" \ > + " (1) Fast: Install infiniband packages (devel) from your distro." \ > + " (2) Cleanest: Install libraries from www.openfabrics.org" \ > + " (3) Also: Install softiwarp if you don't have RDMA hardware" > + fi > + rdma="no" > + fi > +fi > + > +########################################## > +# PVRDMA detection > + > +cat > $TMPC < +#include > + > +int > +main(void) > +{ > + char buf = 0; > + void *addr = &buf; > + addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED); > + > + return 0; > +} > +EOF > + > +if test "$rdma" = "yes" ; then > + case "$pvrdma" in > + "") > + if compile_prog "" ""; then > + pvrdma="yes" > + else > + pvrdma="no" > + fi > + ;; > + "yes") > + if ! compile_prog "" ""; then > + error_exit "PVRDMA is not supported since mremap is not implemented" > + fi > + pvrdma="yes" > + ;; > + "no") > + pvrdma="no" > + ;; > + esac > +else > + if test "$pvrdma" = "yes" ; then > + error_exit "PVRDMA requires rdma suppport" > + fi > + pvrdma="no" > +fi > + > +# Let's see if enhanced reg_mr is supported > +if test "$pvrdma" = "yes" ; then > + > +cat > $TMPC < +#include > + > +int > +main(void) > +{ > + struct ibv_mr *mr; > + struct ibv_pd *pd = NULL; > + size_t length = 10; > + uint64_t iova = 0; > + int access = 0; > + void *addr = NULL; > + > + mr = ibv_reg_mr_iova(pd, addr, length, iova, access); > + > + ibv_dereg_mr(mr); > + > + return 0; > +} > +EOF > + if ! compile_prog "" "-libverbs"; then > + QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR" > + fi > +fi > + > +########################################## > +# xfsctl() probe, used for file-posix.c > +if test "$xfs" != "no" ; then > + cat > $TMPC << EOF > +#include /* NULL */ > +#include > +int main(void) > +{ > + xfsctl(NULL, 0, 0, NULL); > + return 0; > +} > +EOF > + if compile_prog "" "" ; then > + xfs="yes" > + else > + if test "$xfs" = "yes" ; then > + feature_not_found "xfs" "Instal xfsprogs/xfslibs devel" > + fi > + xfs=no > + fi > +fi > + > +########################################## > +# vde libraries probe > +if test "$vde" != "no" ; then > + vde_libs="-lvdeplug" > + cat > $TMPC << EOF > +#include > +int main(void) > +{ > + struct vde_open_args a = {0, 0, 0}; > + char s[] = ""; > + vde_open(s, s, &a); > + return 0; > +} > +EOF > + if compile_prog "" "$vde_libs" ; then > + vde=yes > + else > + if test "$vde" = "yes" ; then > + feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel" > + fi > + vde=no > + fi > +fi > + > +########################################## > +# netmap support probe > +# Apart from looking for netmap headers, we make sure that the host API version > +# supports the netmap backend (>=11). The upper bound (15) is meant to simulate > +# a minor/major version number. Minor new features will be marked with values up > +# to 15, and if something happens that requires a change to the backend we will > +# move above 15, submit the backend fixes and modify this two bounds. > +if test "$netmap" != "no" ; then > + cat > $TMPC << EOF > +#include > +#include > +#include > +#include > +#if (NETMAP_API < 11) || (NETMAP_API > 15) > +#error > +#endif > +int main(void) { return 0; } > +EOF > + if compile_prog "" "" ; then > + netmap=yes > + else > + if test "$netmap" = "yes" ; then > + feature_not_found "netmap" > + fi > + netmap=no > + fi > +fi > + > +########################################## > +# libcap-ng library probe > +if test "$cap_ng" != "no" ; then > + cap_libs="-lcap-ng" > + cat > $TMPC << EOF > +#include > +int main(void) > +{ > + capng_capability_to_name(CAPNG_EFFECTIVE); > + return 0; > +} > +EOF > + if compile_prog "" "$cap_libs" ; then > + cap_ng=yes > + else > + if test "$cap_ng" = "yes" ; then > + feature_not_found "cap_ng" "Install libcap-ng devel" > + fi > + cap_ng=no > + fi > +fi > + > +########################################## > +# Sound support libraries probe > + > +audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g') > +for drv in $audio_drv_list; do > + case $drv in > + alsa | try-alsa) > + if $pkg_config alsa --exists; then > + alsa_libs=$($pkg_config alsa --libs) > + alsa_cflags=$($pkg_config alsa --cflags) > + alsa=yes > + if test "$drv" = "try-alsa"; then > + audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/') > + fi > + else > + if test "$drv" = "try-alsa"; then > + audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//') > + else > + error_exit "$drv check failed" \ > + "Make sure to have the $drv libs and headers installed." > + fi > + fi > + ;; > + > + pa | try-pa) > + if $pkg_config libpulse --exists; then > + libpulse=yes > + pulse_libs=$($pkg_config libpulse --libs) > + pulse_cflags=$($pkg_config libpulse --cflags) > + if test "$drv" = "try-pa"; then > + audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/') > + fi > + else > + if test "$drv" = "try-pa"; then > + audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//') > + else > + error_exit "$drv check failed" \ > + "Make sure to have the $drv libs and headers installed." > + fi > + fi > + ;; > + > + sdl) > + if test "$sdl" = "no"; then > + error_exit "sdl not found or disabled, can not use sdl audio driver" > + fi > + ;; > + > + try-sdl) > + if test "$sdl" = "no"; then > + audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//') > + else > + audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/') > + fi > + ;; > + > + coreaudio) > + coreaudio_libs="-framework CoreAudio" > + ;; > + > + dsound) > + dsound_libs="-lole32 -ldxguid" > + audio_win_int="yes" > + ;; > + > + oss) > + oss_libs="$oss_lib" > + ;; > + > + jack | try-jack) > + if $pkg_config jack --exists; then > + libjack=yes > + jack_libs=$($pkg_config jack --libs) > + if test "$drv" = "try-jack"; then > + audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/') > + fi > + else > + if test "$drv" = "try-jack"; then > + audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//') > + else > + error_exit "$drv check failed" \ > + "Make sure to have the $drv libs and headers installed." > + fi > + fi > + ;; > + > + *) > + echo "$audio_possible_drivers" | grep -q "\<$drv\>" || { > + error_exit "Unknown driver '$drv' selected" \ > + "Possible drivers are: $audio_possible_drivers" > + } > + ;; > + esac > +done > + > +########################################## > +# BrlAPI probe > + > +if test "$brlapi" != "no" ; then > + brlapi_libs="-lbrlapi" > + cat > $TMPC << EOF > +#include > +#include > +int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); } > +EOF > + if compile_prog "" "$brlapi_libs" ; then > + brlapi=yes > + else > + if test "$brlapi" = "yes" ; then > + feature_not_found "brlapi" "Install brlapi devel" > + fi > + brlapi=no > + fi > +fi > + > +########################################## > +# iconv probe > +if test "$iconv" != "no" ; then > + cat > $TMPC << EOF > +#include > +int main(void) { > + iconv_t conv = iconv_open("WCHAR_T", "UCS-2"); > + return conv != (iconv_t) -1; > +} > +EOF > + iconv_prefix_list="/usr/local:/usr" > + iconv_lib_list=":-liconv" > + IFS=: > + for iconv_prefix in $iconv_prefix_list; do > + IFS=: > + iconv_cflags="-I$iconv_prefix/include" > + iconv_ldflags="-L$iconv_prefix/lib" > + for iconv_link in $iconv_lib_list; do > + unset IFS > + iconv_lib="$iconv_ldflags $iconv_link" > + echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log > + if compile_prog "$iconv_cflags" "$iconv_lib" ; then > + iconv_found=yes > + break > + fi > + done > + if test "$iconv_found" = yes ; then > + break > + fi > + done > + if test "$iconv_found" = "yes" ; then > + iconv=yes > + else > + if test "$iconv" = "yes" ; then > + feature_not_found "iconv" "Install iconv devel" > + fi > + iconv=no > + fi > +fi > + > +########################################## > +# curses probe > +if test "$iconv" = "no" ; then > + # curses will need iconv > + curses=no > +fi > +if test "$curses" != "no" ; then > + if test "$mingw32" = "yes" ; then > + curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):" > + curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses" > + else > + curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:" > + curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw" > + fi > + curses_found=no > + cat > $TMPC << EOF > +#include > +#include > +#include > +#include > +int main(void) { > + const char *codeset; > + wchar_t wch = L'w'; > + setlocale(LC_ALL, ""); > + resize_term(0, 0); > + addwstr(L"wide chars\n"); > + addnwstr(&wch, 1); > + add_wch(WACS_DEGREE); > + codeset = nl_langinfo(CODESET); > + return codeset != 0; > +} > +EOF > + IFS=: > + for curses_inc in $curses_inc_list; do > + # Make sure we get the wide character prototypes > + curses_inc="-DNCURSES_WIDECHAR $curses_inc" > + IFS=: > + for curses_lib in $curses_lib_list; do > + unset IFS > + if compile_prog "$curses_inc" "$curses_lib" ; then > + curses_found=yes > + break > + fi > + done > + if test "$curses_found" = yes ; then > + break > + fi > + done > + unset IFS > + if test "$curses_found" = "yes" ; then > + curses=yes > + else > + if test "$curses" = "yes" ; then > + feature_not_found "curses" "Install ncurses devel" > + fi > + curses=no > + fi > +fi > + > +########################################## > +# curl probe > +if test "$curl" != "no" ; then > + if $pkg_config libcurl --exists; then > + curlconfig="$pkg_config libcurl" > + else > + curlconfig=curl-config > + fi > + cat > $TMPC << EOF > +#include > +int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; } > +EOF > + curl_cflags=$($curlconfig --cflags 2>/dev/null) > + curl_libs=$($curlconfig --libs 2>/dev/null) > + if compile_prog "$curl_cflags" "$curl_libs" ; then > + curl=yes > + else > + if test "$curl" = "yes" ; then > + feature_not_found "curl" "Install libcurl devel" > + fi > + curl=no > + fi > +fi # test "$curl" > + > +########################################## > +# glib support probe > + > +glib_req_ver=2.48 > +glib_modules=gthread-2.0 > +if test "$modules" = yes; then > + glib_modules="$glib_modules gmodule-export-2.0" > +fi > +if test "$plugins" = yes; then > + glib_modules="$glib_modules gmodule-2.0" > +fi > + > +# This workaround is required due to a bug in pkg-config file for glib as it > +# doesn't define GLIB_STATIC_COMPILATION for pkg-config --static > + > +if test "$static" = yes && test "$mingw32" = yes; then > + QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS" > +fi > + > +for i in $glib_modules; do > + if $pkg_config --atleast-version=$glib_req_ver $i; then > + glib_cflags=$($pkg_config --cflags $i) > + glib_libs=$($pkg_config --libs $i) > + QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS" > + LIBS="$glib_libs $LIBS" > + else > + error_exit "glib-$glib_req_ver $i is required to compile QEMU" > + fi > +done > + > +if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then > + gio=yes > + gio_cflags=$($pkg_config --cflags gio-2.0) > + gio_libs=$($pkg_config --libs gio-2.0) > + gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0) > + if [ ! -x "$gdbus_codegen" ]; then > + gdbus_codegen= > + fi > +else > + gio=no > +fi > + > +if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then > + gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)" > + gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)" > +fi > + > +# Sanity check that the current size_t matches the > +# size that glib thinks it should be. This catches > +# problems on multi-arch where people try to build > +# 32-bit QEMU while pointing at 64-bit glib headers > +cat > $TMPC < +#include > +#include > + > +#define QEMU_BUILD_BUG_ON(x) \ > + typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused)); > + > +int main(void) { > + QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T); > + return 0; > +} > +EOF > + > +if ! compile_prog "$CFLAGS" "$LIBS" ; then > + error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\ > + "You probably need to set PKG_CONFIG_LIBDIR"\ > + "to point to the right pkg-config files for your"\ > + "build target" > +fi > + > +# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage > +cat > $TMPC << EOF > +#include > +int main(void) { return 0; } > +EOF > +if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then > + if cc_has_warning_flag "-Wno-unknown-attributes"; then > + glib_cflags="-Wno-unknown-attributes $glib_cflags" > + QEMU_CFLAGS="-Wno-unknown-attributes $CFLAGS" > + fi > +fi > + > +# Silence clang warnings triggered by glib < 2.57.2 > +cat > $TMPC << EOF > +#include > +typedef struct Foo { > + int i; > +} Foo; > +static void foo_free(Foo *f) > +{ > + g_free(f); > +} > +G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free); > +int main(void) { return 0; } > +EOF > +if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then > + if cc_has_warning_flag "-Wno-unused-function"; then > + glib_cflags="$glib_cflags -Wno-unused-function" > + CFLAGS="$CFLAGS -Wno-unused-function" > + fi > +fi > + > +########################################## > +# SHA command probe for modules > +if test "$modules" = yes; then > + shacmd_probe="sha1sum sha1 shasum" > + for c in $shacmd_probe; do > + if has $c; then > + shacmd="$c" > + break > + fi > + done > + if test "$shacmd" = ""; then > + error_exit "one of the checksum commands is required to enable modules: $shacmd_probe" > + fi > +fi > + > +########################################## > +# libmpathpersist probe > + > +if test "$mpath" != "no" ; then > + # probe for the new API > + cat > $TMPC < +#include > +#include > +unsigned mpath_mx_alloc_len = 1024; > +int logsink; > +static struct config *multipath_conf; > +extern struct udev *udev; > +extern struct config *get_multipath_config(void); > +extern void put_multipath_config(struct config *conf); > +struct udev *udev; > +struct config *get_multipath_config(void) { return multipath_conf; } > +void put_multipath_config(struct config *conf) { } > + > +int main(void) { > + udev = udev_new(); > + multipath_conf = mpath_lib_init(); > + return 0; > +} > +EOF > + if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then > + mpathpersist=yes > + mpathpersist_new_api=yes > + else > + # probe for the old API > + cat > $TMPC < +#include > +#include > +unsigned mpath_mx_alloc_len = 1024; > +int logsink; > +int main(void) { > + struct udev *udev = udev_new(); > + mpath_lib_init(udev); > + return 0; > +} > +EOF > + if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then > + mpathpersist=yes > + mpathpersist_new_api=no > + else > + mpathpersist=no > + fi > + fi > +else > + mpathpersist=no > +fi > + > +########################################## > +# pthread probe > +PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2" > + > +pthread=no > +cat > $TMPC << EOF > +#include > +static void *f(void *p) { return NULL; } > +int main(void) { > + pthread_t thread; > + pthread_create(&thread, 0, f, 0); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + pthread=yes > +else > + for pthread_lib in $PTHREADLIBS_LIST; do > + if compile_prog "" "$pthread_lib" ; then > + pthread=yes > + found=no > + for lib_entry in $LIBS; do > + if test "$lib_entry" = "$pthread_lib"; then > + found=yes > + break > + fi > + done > + if test "$found" = "no"; then > + LIBS="$pthread_lib $LIBS" > + fi > + PTHREAD_LIB="$pthread_lib" > + break > + fi > + done > +fi > + > +if test "$mingw32" != yes && test "$pthread" = no; then > + error_exit "pthread check failed" \ > + "Make sure to have the pthread libs and headers installed." > +fi > + > +# check for pthread_setname_np with thread id > +pthread_setname_np_w_tid=no > +cat > $TMPC << EOF > +#include > + > +static void *f(void *p) { return NULL; } > +int main(void) > +{ > + pthread_t thread; > + pthread_create(&thread, 0, f, 0); > + pthread_setname_np(thread, "QEMU"); > + return 0; > +} > +EOF > +if compile_prog "" "$pthread_lib" ; then > + pthread_setname_np_w_tid=yes > +fi > + > +# check for pthread_setname_np without thread id > +pthread_setname_np_wo_tid=no > +cat > $TMPC << EOF > +#include > + > +static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; } > +int main(void) > +{ > + pthread_t thread; > + pthread_create(&thread, 0, f, 0); > + return 0; > +} > +EOF > +if compile_prog "" "$pthread_lib" ; then > + pthread_setname_np_wo_tid=yes > +fi > + > +########################################## > +# rbd probe > +if test "$rbd" != "no" ; then > + cat > $TMPC < +#include > +#include > +int main(void) { > + rados_t cluster; > + rados_create(&cluster, NULL); > + return 0; > +} > +EOF > + rbd_libs="-lrbd -lrados" > + if compile_prog "" "$rbd_libs" ; then > + rbd=yes > + else > + if test "$rbd" = "yes" ; then > + feature_not_found "rados block device" "Install librbd/ceph devel" > + fi > + rbd=no > + fi > +fi > + > +########################################## > +# libssh probe > +if test "$libssh" != "no" ; then > + if $pkg_config --exists libssh; then > + libssh_cflags=$($pkg_config libssh --cflags) > + libssh_libs=$($pkg_config libssh --libs) > + libssh=yes > + else > + if test "$libssh" = "yes" ; then > + error_exit "libssh required for --enable-libssh" > + fi > + libssh=no > + fi > +fi > + > +########################################## > +# Check for libssh 0.8 > +# This is done like this instead of using the LIBSSH_VERSION_* and > +# SSH_VERSION_* macros because some distributions in the past shipped > +# snapshots of the future 0.8 from Git, and those snapshots did not > +# have updated version numbers (still referring to 0.7.0). > + > +if test "$libssh" = "yes"; then > + cat > $TMPC < +#include > +int main(void) { return ssh_get_server_publickey(NULL, NULL); } > +EOF > + if compile_prog "$libssh_cflags" "$libssh_libs"; then > + libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags" > + fi > +fi > + > +########################################## > +# linux-aio probe > + > +if test "$linux_aio" != "no" ; then > + cat > $TMPC < +#include > +#include > +#include > +int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; } > +EOF > + if compile_prog "" "-laio" ; then > + linux_aio=yes > + else > + if test "$linux_aio" = "yes" ; then > + feature_not_found "linux AIO" "Install libaio devel" > + fi > + linux_aio=no > + fi > +fi > +########################################## > +# linux-io-uring probe > + > +if test "$linux_io_uring" != "no" ; then > + if $pkg_config liburing; then > + linux_io_uring_cflags=$($pkg_config --cflags liburing) > + linux_io_uring_libs=$($pkg_config --libs liburing) > + linux_io_uring=yes > + > + # io_uring is used in libqemuutil.a where per-file -libs variables are not > + # seen by programs linking the archive. It's not ideal, but just add the > + # library dependency globally. > + LIBS="$linux_io_uring_libs $LIBS" > + else > + if test "$linux_io_uring" = "yes" ; then > + feature_not_found "linux io_uring" "Install liburing devel" > + fi > + linux_io_uring=no > + fi > +fi > + > +########################################## > +# TPM emulation is only on POSIX > + > +if test "$tpm" = ""; then > + if test "$mingw32" = "yes"; then > + tpm=no > + else > + tpm=yes > + fi > +elif test "$tpm" = "yes"; then > + if test "$mingw32" = "yes" ; then > + error_exit "TPM emulation only available on POSIX systems" > + fi > +fi > + > +########################################## > +# attr probe > + > +libattr_libs= > +if test "$attr" != "no" ; then > + cat > $TMPC < +#include > +#include > +#ifdef CONFIG_LIBATTR > +#include > +#else > +#include > +#endif > +int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; } > +EOF > + if compile_prog "" "" ; then > + attr=yes > + # Older distros have , and need -lattr: > + elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then > + attr=yes > + libattr_libs="-lattr" > + LIBS="$libattr_libs $LIBS" > + libattr=yes > + else > + if test "$attr" = "yes" ; then > + feature_not_found "ATTR" "Install libc6 or libattr devel" > + fi > + attr=no > + fi > +fi > + > +########################################## > +# iovec probe > +cat > $TMPC < +#include > +#include > +#include > +int main(void) { return sizeof(struct iovec); } > +EOF > +iovec=no > +if compile_prog "" "" ; then > + iovec=yes > +fi > + > +########################################## > +# preadv probe > +cat > $TMPC < +#include > +#include > +#include > +int main(void) { return preadv(0, 0, 0, 0); } > +EOF > +preadv=no > +if compile_prog "" "" ; then > + preadv=yes > +fi > + > +########################################## > +# fdt probe > +# fdt support is mandatory for at least some target architectures, > +# so insist on it if we're building those system emulators. > +fdt_required=no > +for target in $target_list; do > + case $target in > + aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu) > + fdt_required=yes > + ;; > + esac > +done > + > +if test "$fdt_required" = "yes"; then > + if test "$fdt" = "no"; then > + error_exit "fdt disabled but some requested targets require it." \ > + "You can turn off fdt only if you also disable all the system emulation" \ > + "targets which need it (by specifying a cut down --target-list)." > + fi > + fdt=yes > +elif test "$fdt" != "yes" ; then > + fdt=no > +fi > + > +# fdt is only required when building softmmu targets > +if test -z "$fdt" -a "$softmmu" != "yes" ; then > + fdt="no" > +fi > + > +if test "$fdt" != "no" ; then > + fdt_libs="-lfdt" > + # explicitly check for libfdt_env.h as it is missing in some stable installs > + # and test for required functions to make sure we are on a version >= 1.4.2 > + cat > $TMPC << EOF > +#include > +#include > +int main(void) { fdt_check_full(NULL, 0); return 0; } > +EOF > + if compile_prog "" "$fdt_libs" ; then > + # system DTC is good - use it > + fdt=system > + else > + # have GIT checkout, so activate dtc submodule > + if test -e "${source_path}/.git" ; then > + git_submodules="${git_submodules} dtc" > + fi > + if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then > + fdt=git > + mkdir -p dtc > + fdt_cflags="-I${source_path}/dtc/libfdt" > + fdt_ldflags="-L${build_path}/dtc/libfdt" > + fdt_libs="$fdt_libs" > + elif test "$fdt" = "yes" ; then > + # Not a git build & no libfdt found, prompt for system install > + error_exit "DTC (libfdt) version >= 1.4.2 not present." \ > + "Please install the DTC (libfdt) devel package" > + else > + # don't have and don't want > + fdt_libs= > + fdt=no > + fi > + fi > +fi > + > +########################################## > +# opengl probe (for sdl2, gtk, milkymist-tmu2) > + > +gbm="no" > +if $pkg_config gbm; then > + gbm_cflags="$($pkg_config --cflags gbm)" > + gbm_libs="$($pkg_config --libs gbm)" > + gbm="yes" > +fi > + > +if test "$opengl" != "no" ; then > + opengl_pkgs="epoxy gbm" > + if $pkg_config $opengl_pkgs; then > + opengl_cflags="$($pkg_config --cflags $opengl_pkgs)" > + opengl_libs="$($pkg_config --libs $opengl_pkgs)" > + opengl=yes > + if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then > + gtk_gl="yes" > + fi > + QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags" > + else > + if test "$opengl" = "yes" ; then > + feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs" > + fi > + opengl_cflags="" > + opengl_libs="" > + opengl=no > + fi > +fi > + > +if test "$opengl" = "yes"; then > + cat > $TMPC << EOF > +#include > +#ifndef EGL_MESA_image_dma_buf_export > +# error mesa/epoxy lacks support for dmabufs (mesa 10.6+) > +#endif > +int main(void) { return 0; } > +EOF > + if compile_prog "" "" ; then > + opengl_dmabuf=yes > + fi > +fi > + > +if test "$opengl" = "yes" && test "$have_x11" = "yes"; then > + for target in $target_list; do > + case $target in > + lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL > + need_x11=yes > + ;; > + esac > + done > +fi > + > +########################################## > +# libxml2 probe > +if test "$libxml2" != "no" ; then > + if $pkg_config --exists libxml-2.0; then > + libxml2="yes" > + libxml2_cflags=$($pkg_config --cflags libxml-2.0) > + libxml2_libs=$($pkg_config --libs libxml-2.0) > + else > + if test "$libxml2" = "yes"; then > + feature_not_found "libxml2" "Install libxml2 devel" > + fi > + libxml2="no" > + fi > +fi > + > +########################################## > +# glusterfs probe > +if test "$glusterfs" != "no" ; then > + if $pkg_config --atleast-version=3 glusterfs-api; then > + glusterfs="yes" > + glusterfs_cflags=$($pkg_config --cflags glusterfs-api) > + glusterfs_libs=$($pkg_config --libs glusterfs-api) > + if $pkg_config --atleast-version=4 glusterfs-api; then > + glusterfs_xlator_opt="yes" > + fi > + if $pkg_config --atleast-version=5 glusterfs-api; then > + glusterfs_discard="yes" > + fi > + if $pkg_config --atleast-version=6 glusterfs-api; then > + glusterfs_fallocate="yes" > + glusterfs_zerofill="yes" > + fi > + cat > $TMPC << EOF > +#include > + > +int > +main(void) > +{ > + /* new glfs_ftruncate() passes two additional args */ > + return glfs_ftruncate(NULL, 0, NULL, NULL); > +} > +EOF > + if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then > + glusterfs_ftruncate_has_stat="yes" > + fi > + cat > $TMPC << EOF > +#include > + > +/* new glfs_io_cbk() passes two additional glfs_stat structs */ > +static void > +glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data) > +{} > + > +int > +main(void) > +{ > + glfs_io_cbk iocb = &glusterfs_iocb; > + iocb(NULL, 0 , NULL, NULL, NULL); > + return 0; > +} > +EOF > + if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then > + glusterfs_iocb_has_stat="yes" > + fi > + else > + if test "$glusterfs" = "yes" ; then > + feature_not_found "GlusterFS backend support" \ > + "Install glusterfs-api devel >= 3" > + fi > + glusterfs="no" > + fi > +fi > + > +# Check for inotify functions when we are building linux-user > +# emulator. This is done because older glibc versions don't > +# have syscall stubs for these implemented. In that case we > +# don't provide them even if kernel supports them. > +# > +inotify=no > +cat > $TMPC << EOF > +#include > + > +int > +main(void) > +{ > + /* try to start inotify */ > + return inotify_init(); > +} > +EOF > +if compile_prog "" "" ; then > + inotify=yes > +fi > + > +inotify1=no > +cat > $TMPC << EOF > +#include > + > +int > +main(void) > +{ > + /* try to start inotify */ > + return inotify_init1(0); > +} > +EOF > +if compile_prog "" "" ; then > + inotify1=yes > +fi > + > +# check if pipe2 is there > +pipe2=no > +cat > $TMPC << EOF > +#include > +#include > + > +int main(void) > +{ > + int pipefd[2]; > + return pipe2(pipefd, O_CLOEXEC); > +} > +EOF > +if compile_prog "" "" ; then > + pipe2=yes > +fi > + > +# check if accept4 is there > +accept4=no > +cat > $TMPC << EOF > +#include > +#include > + > +int main(void) > +{ > + accept4(0, NULL, NULL, SOCK_CLOEXEC); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + accept4=yes > +fi > + > +# check if tee/splice is there. vmsplice was added same time. > +splice=no > +cat > $TMPC << EOF > +#include > +#include > +#include > + > +int main(void) > +{ > + int len, fd = 0; > + len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); > + splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + splice=yes > +fi > + > +########################################## > +# libnuma probe > + > +if test "$numa" != "no" ; then > + cat > $TMPC << EOF > +#include > +int main(void) { return numa_available(); } > +EOF > + > + if compile_prog "" "-lnuma" ; then > + numa=yes > + numa_libs="-lnuma" > + else > + if test "$numa" = "yes" ; then > + feature_not_found "numa" "install numactl devel" > + fi > + numa=no > + fi > +fi > + > +if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then > + echo "ERROR: tcmalloc && jemalloc can't be used at the same time" > + exit 1 > +fi > + > +# Even if malloc_trim() is available, these non-libc memory allocators > +# do not support it. > +if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then > + if test "$malloc_trim" = "yes" ; then > + echo "Disabling malloc_trim with non-libc memory allocator" > + fi > + malloc_trim="no" > +fi > + > +####################################### > +# malloc_trim > + > +if test "$malloc_trim" != "no" ; then > + cat > $TMPC << EOF > +#include > +int main(void) { malloc_trim(0); return 0; } > +EOF > + if compile_prog "" "" ; then > + malloc_trim="yes" > + else > + malloc_trim="no" > + fi > +fi > + > +########################################## > +# tcmalloc probe > + > +if test "$tcmalloc" = "yes" ; then > + cat > $TMPC << EOF > +#include > +int main(void) { > + void *tmp = malloc(1); > + if (tmp != NULL) { > + return 0; > + } > + return 1; > +} > +EOF > + > + if compile_prog "" "-ltcmalloc" ; then > + LIBS="-ltcmalloc $LIBS" > + else > + feature_not_found "tcmalloc" "install gperftools devel" > + fi > +fi > + > +########################################## > +# jemalloc probe > + > +if test "$jemalloc" = "yes" ; then > + cat > $TMPC << EOF > +#include > +int main(void) { > + void *tmp = malloc(1); > + if (tmp != NULL) { > + return 0; > + } > + return 1; > +} > +EOF > + > + if compile_prog "" "-ljemalloc" ; then > + LIBS="-ljemalloc $LIBS" > + else > + feature_not_found "jemalloc" "install jemalloc devel" > + fi > +fi > + > +########################################## > +# signalfd probe > +signalfd="no" > +cat > $TMPC << EOF > +#include > +#include > +#include > +int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); } > +EOF > + > +if compile_prog "" "" ; then > + signalfd=yes > +fi > + > +# check if optreset global is declared by > +optreset="no" > +cat > $TMPC << EOF > +#include > +int main(void) { return optreset; } > +EOF > + > +if compile_prog "" "" ; then > + optreset=yes > +fi > + > +# check if eventfd is supported > +eventfd=no > +cat > $TMPC << EOF > +#include > + > +int main(void) > +{ > + return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); > +} > +EOF > +if compile_prog "" "" ; then > + eventfd=yes > +fi > + > +# check if memfd is supported > +memfd=no > +cat > $TMPC << EOF > +#include > + > +int main(void) > +{ > + return memfd_create("foo", MFD_ALLOW_SEALING); > +} > +EOF > +if compile_prog "" "" ; then > + memfd=yes > +fi > + > +# check for usbfs > +have_usbfs=no > +if test "$linux_user" = "yes"; then > + cat > $TMPC << EOF > +#include > + > +#ifndef USBDEVFS_GET_CAPABILITIES > +#error "USBDEVFS_GET_CAPABILITIES undefined" > +#endif > + > +#ifndef USBDEVFS_DISCONNECT_CLAIM > +#error "USBDEVFS_DISCONNECT_CLAIM undefined" > +#endif > + > +int main(void) > +{ > + return 0; > +} > +EOF > + if compile_prog "" ""; then > + have_usbfs=yes > + fi > +fi > + > +# check for fallocate > +fallocate=no > +cat > $TMPC << EOF > +#include > + > +int main(void) > +{ > + fallocate(0, 0, 0, 0); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + fallocate=yes > +fi > + > +# check for fallocate hole punching > +fallocate_punch_hole=no > +cat > $TMPC << EOF > +#include > +#include > + > +int main(void) > +{ > + fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + fallocate_punch_hole=yes > +fi > + > +# check that fallocate supports range zeroing inside the file > +fallocate_zero_range=no > +cat > $TMPC << EOF > +#include > +#include > + > +int main(void) > +{ > + fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + fallocate_zero_range=yes > +fi > + > +# check for posix_fallocate > +posix_fallocate=no > +cat > $TMPC << EOF > +#include > + > +int main(void) > +{ > + posix_fallocate(0, 0, 0); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + posix_fallocate=yes > +fi > + > +# check for sync_file_range > +sync_file_range=no > +cat > $TMPC << EOF > +#include > + > +int main(void) > +{ > + sync_file_range(0, 0, 0, 0); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + sync_file_range=yes > +fi > + > +# check for linux/fiemap.h and FS_IOC_FIEMAP > +fiemap=no > +cat > $TMPC << EOF > +#include > +#include > +#include > + > +int main(void) > +{ > + ioctl(0, FS_IOC_FIEMAP, 0); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + fiemap=yes > +fi > + > +# check for dup3 > +dup3=no > +cat > $TMPC << EOF > +#include > + > +int main(void) > +{ > + dup3(0, 0, 0); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + dup3=yes > +fi > + > +# check for ppoll support > +ppoll=no > +cat > $TMPC << EOF > +#include > + > +int main(void) > +{ > + struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 }; > + ppoll(&pfd, 1, 0, 0); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + ppoll=yes > +fi > + > +# check for prctl(PR_SET_TIMERSLACK , ... ) support > +prctl_pr_set_timerslack=no > +cat > $TMPC << EOF > +#include > + > +int main(void) > +{ > + prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + prctl_pr_set_timerslack=yes > +fi > + > +# check for epoll support > +epoll=no > +cat > $TMPC << EOF > +#include > + > +int main(void) > +{ > + epoll_create(0); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + epoll=yes > +fi > + > +# epoll_create1 is a later addition > +# so we must check separately for its presence > +epoll_create1=no > +cat > $TMPC << EOF > +#include > + > +int main(void) > +{ > + /* Note that we use epoll_create1 as a value, not as > + * a function being called. This is necessary so that on > + * old SPARC glibc versions where the function was present in > + * the library but not declared in the header file we will > + * fail the configure check. (Otherwise we will get a compiler > + * warning but not an error, and will proceed to fail the > + * qemu compile where we compile with -Werror.) > + */ > + return (int)(uintptr_t)&epoll_create1; > +} > +EOF > +if compile_prog "" "" ; then > + epoll_create1=yes > +fi > + > +# check for sendfile support > +sendfile=no > +cat > $TMPC << EOF > +#include > + > +int main(void) > +{ > + return sendfile(0, 0, 0, 0); > +} > +EOF > +if compile_prog "" "" ; then > + sendfile=yes > +fi > + > +# check for timerfd support (glibc 2.8 and newer) > +timerfd=no > +cat > $TMPC << EOF > +#include > + > +int main(void) > +{ > + return(timerfd_create(CLOCK_REALTIME, 0)); > +} > +EOF > +if compile_prog "" "" ; then > + timerfd=yes > +fi > + > +# check for setns and unshare support > +setns=no > +cat > $TMPC << EOF > +#include > + > +int main(void) > +{ > + int ret; > + ret = setns(0, 0); > + ret = unshare(0); > + return ret; > +} > +EOF > +if compile_prog "" "" ; then > + setns=yes > +fi > + > +# clock_adjtime probe > +clock_adjtime=no > +cat > $TMPC < +#include > + > +int main(void) > +{ > + return clock_adjtime(0, 0); > +} > +EOF > +clock_adjtime=no > +if compile_prog "" "" ; then > + clock_adjtime=yes > +fi > + > +# syncfs probe > +syncfs=no > +cat > $TMPC < +#include > + > +int main(void) > +{ > + return syncfs(0); > +} > +EOF > +syncfs=no > +if compile_prog "" "" ; then > + syncfs=yes > +fi > + > +# check for kcov support (kernel must be 4.4+, compiled with certain options) > +kcov=no > +if check_include sys/kcov.h ; then > + kcov=yes > +fi > + > +# If we're making warnings fatal, apply this to Sphinx runs as well > +sphinx_werror="" > +if test "$werror" = "yes"; then > + sphinx_werror="-W" > +fi > + > +# Check we have a new enough version of sphinx-build > +has_sphinx_build() { > + # This is a bit awkward but works: create a trivial document and > + # try to run it with our configuration file (which enforces a > + # version requirement). This will fail if either > + # sphinx-build doesn't exist at all or if it is too old. > + mkdir -p "$TMPDIR1/sphinx" > + touch "$TMPDIR1/sphinx/index.rst" > + "$sphinx_build" $sphinx_werror -c "$source_path/docs" \ > + -b html "$TMPDIR1/sphinx" \ > + "$TMPDIR1/sphinx/out" >> config.log 2>&1 > +} > + > +# Check if tools are available to build documentation. > +if test "$docs" != "no" ; then > + if has_sphinx_build; then > + sphinx_ok=yes > + else > + sphinx_ok=no > + fi > + if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then > + docs=yes > + else > + if test "$docs" = "yes" ; then > + if has $sphinx_build && test "$sphinx_ok" != "yes"; then > + echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2 > + fi > + feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx" > + fi > + docs=no > + fi > +fi > + > +# Search for bswap_32 function > +byteswap_h=no > +cat > $TMPC << EOF > +#include > +int main(void) { return bswap_32(0); } > +EOF > +if compile_prog "" "" ; then > + byteswap_h=yes > +fi > + > +# Search for bswap32 function > +bswap_h=no > +cat > $TMPC << EOF > +#include > +#include > +#include > +int main(void) { return bswap32(0); } > +EOF > +if compile_prog "" "" ; then > + bswap_h=yes > +fi > + > +########################################## > +# Do we have libiscsi >= 1.9.0 > +if test "$libiscsi" != "no" ; then > + if $pkg_config --atleast-version=1.9.0 libiscsi; then > + libiscsi="yes" > + libiscsi_cflags=$($pkg_config --cflags libiscsi) > + libiscsi_libs=$($pkg_config --libs libiscsi) > + else > + if test "$libiscsi" = "yes" ; then > + feature_not_found "libiscsi" "Install libiscsi >= 1.9.0" > + fi > + libiscsi="no" > + fi > +fi > + > +########################################## > +# Do we need libm > +cat > $TMPC << EOF > +#include > +int main(int argc, char **argv) { return isnan(sin((double)argc)); } > +EOF > +if compile_prog "" "" ; then > + : > +elif compile_prog "" "-lm" ; then > + LIBS="-lm $LIBS" > +else > + error_exit "libm check failed" > +fi > + > +########################################## > +# Do we need librt > +# uClibc provides 2 versions of clock_gettime(), one with realtime > +# support and one without. This means that the clock_gettime() don't > +# need -lrt. We still need it for timer_create() so we check for this > +# function in addition. > +cat > $TMPC < +#include > +#include > +int main(void) { > + timer_create(CLOCK_REALTIME, NULL, NULL); > + return clock_gettime(CLOCK_REALTIME, NULL); > +} > +EOF > + > +if compile_prog "" "" ; then > + : > +# we need pthread for static linking. use previous pthread test result > +elif compile_prog "" "$pthread_lib -lrt" ; then > + LIBS="$LIBS -lrt" > +fi > + > +# Check whether we need to link libutil for openpty() > +cat > $TMPC << EOF > +extern int openpty(int *am, int *as, char *name, void *termp, void *winp); > +int main(void) { return openpty(0, 0, 0, 0, 0); } > +EOF > + > +have_openpty="no" > +if compile_prog "" "" ; then > + have_openpty="yes" > +else > + if compile_prog "" "-lutil" ; then > + libs_tools="-lutil $libs_tools" > + have_openpty="yes" > + fi > +fi > + > +########################################## > +# spice probe > +if test "$spice" != "no" ; then > + cat > $TMPC << EOF > +#include > +int main(void) { spice_server_new(); return 0; } > +EOF > + spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null) > + spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null) > + if $pkg_config --atleast-version=0.12.5 spice-server && \ > + $pkg_config --atleast-version=0.12.3 spice-protocol && \ > + compile_prog "$spice_cflags" "$spice_libs" ; then > + spice="yes" > + QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags" > + else > + if test "$spice" = "yes" ; then > + feature_not_found "spice" \ > + "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel" > + fi > + spice="no" > + fi > +fi > + > +# check for smartcard support > +if test "$smartcard" != "no"; then > + if $pkg_config --atleast-version=2.5.1 libcacard; then > + libcacard_cflags=$($pkg_config --cflags libcacard) > + libcacard_libs=$($pkg_config --libs libcacard) > + smartcard="yes" > + else > + if test "$smartcard" = "yes"; then > + feature_not_found "smartcard" "Install libcacard devel" > + fi > + smartcard="no" > + fi > +fi > + > +# check for libusb > +if test "$libusb" != "no" ; then > + if $pkg_config --atleast-version=1.0.13 libusb-1.0; then > + libusb="yes" > + libusb_cflags=$($pkg_config --cflags libusb-1.0) > + libusb_libs=$($pkg_config --libs libusb-1.0) > + else > + if test "$libusb" = "yes"; then > + feature_not_found "libusb" "Install libusb devel >= 1.0.13" > + fi > + libusb="no" > + fi > +fi > + > +# check for usbredirparser for usb network redirection support > +if test "$usb_redir" != "no" ; then > + if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then > + usb_redir="yes" > + usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5) > + usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5) > + else > + if test "$usb_redir" = "yes"; then > + feature_not_found "usb-redir" "Install usbredir devel" > + fi > + usb_redir="no" > + fi > +fi > + > +########################################## > +# check if we have VSS SDK headers for win > + > +if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ > + test "$vss_win32_sdk" != "no" ; then > + case "$vss_win32_sdk" in > + "") vss_win32_include="-isystem $source_path" ;; > + *\ *) # The SDK is installed in "Program Files" by default, but we cannot > + # handle path with spaces. So we symlink the headers into ".sdk/vss". > + vss_win32_include="-isystem $source_path/.sdk/vss" > + symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc" > + ;; > + *) vss_win32_include="-isystem $vss_win32_sdk" > + esac > + cat > $TMPC << EOF > +#define __MIDL_user_allocate_free_DEFINED__ > +#include > +int main(void) { return VSS_CTX_BACKUP; } > +EOF > + if compile_prog "$vss_win32_include" "" ; then > + guest_agent_with_vss="yes" > + QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include" > + libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga" > + qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb" > + else > + if test "$vss_win32_sdk" != "" ; then > + echo "ERROR: Please download and install Microsoft VSS SDK:" > + echo "ERROR: http://www.microsoft.com/en-us/download/details.aspx?id=23490" > + echo "ERROR: On POSIX-systems, you can extract the SDK headers by:" > + echo "ERROR: scripts/extract-vsssdk-headers setup.exe" > + echo "ERROR: The headers are extracted in the directory \`inc'." > + feature_not_found "VSS support" > + fi > + guest_agent_with_vss="no" > + fi > +fi > + > +########################################## > +# lookup Windows platform SDK (if not specified) > +# The SDK is needed only to build .tlb (type library) file of guest agent > +# VSS provider from the source. It is usually unnecessary because the > +# pre-compiled .tlb file is included. > + > +if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \ > + test "$guest_agent_with_vss" = "yes" ; then > + if test -z "$win_sdk"; then > + programfiles="$PROGRAMFILES" > + test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432" > + if test -n "$programfiles"; then > + win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null > + else > + feature_not_found "Windows SDK" > + fi > + elif test "$win_sdk" = "no"; then > + win_sdk="" > + fi > +fi > + > +########################################## > +# check if mingw environment provides a recent ntddscsi.h > +if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then > + cat > $TMPC << EOF > +#include > +#include > +int main(void) { > +#if !defined(IOCTL_SCSI_GET_ADDRESS) > +#error Missing required ioctl definitions > +#endif > + SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 }; > + return addr.Lun; > +} > +EOF > + if compile_prog "" "" ; then > + guest_agent_ntddscsi=yes > + libs_qga="-lsetupapi -lcfgmgr32 $libs_qga" > + fi > +fi > + > +########################################## > +# virgl renderer probe > + > +if test "$virglrenderer" != "no" ; then > + cat > $TMPC << EOF > +#include > +int main(void) { virgl_renderer_poll(); return 0; } > +EOF > + virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null) > + virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null) > + virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null) > + if $pkg_config virglrenderer >/dev/null 2>&1 && \ > + compile_prog "$virgl_cflags" "$virgl_libs" ; then > + virglrenderer="yes" > + else > + if test "$virglrenderer" = "yes" ; then > + feature_not_found "virglrenderer" > + fi > + virglrenderer="no" > + fi > +fi > + > +########################################## > +# capstone > + > +case "$capstone" in > + "" | yes) > + if $pkg_config capstone; then > + capstone=system > + elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then > + capstone=git > + elif test -e "${source_path}/capstone/Makefile" ; then > + capstone=internal > + elif test -z "$capstone" ; then > + capstone=no > + else > + feature_not_found "capstone" "Install capstone devel or git submodule" > + fi > + ;; > + > + system) > + if ! $pkg_config capstone; then > + feature_not_found "capstone" "Install capstone devel" > + fi > + ;; > +esac > + > +case "$capstone" in > + git | internal) > + if test "$capstone" = git; then > + git_submodules="${git_submodules} capstone" > + fi > + mkdir -p capstone > + QEMU_CFLAGS="$QEMU_CFLAGS -I${source_path}/capstone/include -I${source_path}/capstone/include/capstone" > + if test "$mingw32" = "yes"; then > + LIBCAPSTONE=capstone.lib > + else > + LIBCAPSTONE=libcapstone.a > + fi > + capstone_libs="-L${build_path}/capstone -lcapstone" > + capstone_cflags="-I${source_path}/capstone/include -I${source_path}/capstone/include/capstone" > + ;; > + > + system) > + capstone_libs="$($pkg_config --libs capstone)" > + capstone_cflags="$($pkg_config --cflags capstone)" > + QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)" > + ;; > + > + no) > + ;; > + *) > + error_exit "Unknown state for capstone: $capstone" > + ;; > +esac > + > +########################################## > +# check if we have fdatasync > + > +fdatasync=no > +cat > $TMPC << EOF > +#include > +int main(void) { > +#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 > +return fdatasync(0); > +#else > +#error Not supported > +#endif > +} > +EOF > +if compile_prog "" "" ; then > + fdatasync=yes > +fi > + > +########################################## > +# check if we have madvise > + > +madvise=no > +cat > $TMPC << EOF > +#include > +#include > +#include > +int main(void) { return madvise(NULL, 0, MADV_DONTNEED); } > +EOF > +if compile_prog "" "" ; then > + madvise=yes > +fi > + > +########################################## > +# check if we have posix_madvise > + > +posix_madvise=no > +cat > $TMPC << EOF > +#include > +#include > +int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); } > +EOF > +if compile_prog "" "" ; then > + posix_madvise=yes > +fi > + > +########################################## > +# check if we have posix_memalign() > + > +posix_memalign=no > +cat > $TMPC << EOF > +#include > +int main(void) { > + void *p; > + return posix_memalign(&p, 8, 8); > +} > +EOF > +if compile_prog "" "" ; then > + posix_memalign=yes > +fi > + > +########################################## > +# check if we have posix_syslog > + > +posix_syslog=no > +cat > $TMPC << EOF > +#include > +int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; } > +EOF > +if compile_prog "" "" ; then > + posix_syslog=yes > +fi > + > +########################################## > +# check if we have sem_timedwait > + > +sem_timedwait=no > +cat > $TMPC << EOF > +#include > +int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); } > +EOF > +if compile_prog "" "" ; then > + sem_timedwait=yes > +fi > + > +########################################## > +# check if we have strchrnul > + > +strchrnul=no > +cat > $TMPC << EOF > +#include > +int main(void); > +// Use a haystack that the compiler shouldn't be able to constant fold > +char *haystack = (char*)&main; > +int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; } > +EOF > +if compile_prog "" "" ; then > + strchrnul=yes > +fi > + > +######################################### > +# check if we have st_atim > + > +st_atim=no > +cat > $TMPC << EOF > +#include > +#include > +int main(void) { return offsetof(struct stat, st_atim); } > +EOF > +if compile_prog "" "" ; then > + st_atim=yes > +fi > + > +########################################## > +# check if trace backend exists > + > +$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null > +if test "$?" -ne 0 ; then > + error_exit "invalid trace backends" \ > + "Please choose supported trace backends." > +fi > + > +########################################## > +# For 'ust' backend, test if ust headers are present > +if have_backend "ust"; then > + cat > $TMPC << EOF > +#include > +int main(void) { return 0; } > +EOF > + if compile_prog "" "-Wl,--no-as-needed -ldl" ; then > + if $pkg_config lttng-ust --exists; then > + lttng_ust_libs=$($pkg_config --libs lttng-ust) > + else > + lttng_ust_libs="-llttng-ust -ldl" > + fi > + if $pkg_config liburcu-bp --exists; then > + urcu_bp_libs=$($pkg_config --libs liburcu-bp) > + else > + urcu_bp_libs="-lurcu-bp" > + fi > + > + LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS" > + else > + error_exit "Trace backend 'ust' missing lttng-ust header files" > + fi > +fi > + > +########################################## > +# For 'dtrace' backend, test if 'dtrace' command is present > +if have_backend "dtrace"; then > + if ! has 'dtrace' ; then > + error_exit "dtrace command is not found in PATH $PATH" > + fi > + trace_backend_stap="no" > + if has 'stap' ; then > + trace_backend_stap="yes" > + fi > +fi > + > +########################################## > +# check and set a backend for coroutine > + > +# We prefer ucontext, but it's not always possible. The fallback > +# is sigcontext. On Windows the only valid backend is the Windows > +# specific one. > + > +ucontext_works=no > +if test "$darwin" != "yes"; then > + cat > $TMPC << EOF > +#include > +#ifdef __stub_makecontext > +#error Ignoring glibc stub makecontext which will always fail > +#endif > +int main(void) { makecontext(0, 0, 0); return 0; } > +EOF > + if compile_prog "" "" ; then > + ucontext_works=yes > + fi > +fi > + > +if test "$coroutine" = ""; then > + if test "$mingw32" = "yes"; then > + coroutine=win32 > + elif test "$ucontext_works" = "yes"; then > + coroutine=ucontext > + else > + coroutine=sigaltstack > + fi > +else > + case $coroutine in > + windows) > + if test "$mingw32" != "yes"; then > + error_exit "'windows' coroutine backend only valid for Windows" > + fi > + # Unfortunately the user visible backend name doesn't match the > + # coroutine-*.c filename for this case, so we have to adjust it here. > + coroutine=win32 > + ;; > + ucontext) > + if test "$ucontext_works" != "yes"; then > + feature_not_found "ucontext" > + fi > + ;; > + sigaltstack) > + if test "$mingw32" = "yes"; then > + error_exit "only the 'windows' coroutine backend is valid for Windows" > + fi > + ;; > + *) > + error_exit "unknown coroutine backend $coroutine" > + ;; > + esac > +fi > + > +if test "$coroutine_pool" = ""; then > + coroutine_pool=yes > +fi > + > +if test "$debug_stack_usage" = "yes"; then > + if test "$coroutine_pool" = "yes"; then > + echo "WARN: disabling coroutine pool for stack usage debugging" > + coroutine_pool=no > + fi > +fi > + > +################################################## > +# SafeStack > + > + > +if test "$safe_stack" = "yes"; then > +cat > $TMPC << EOF > +int main(int argc, char *argv[]) > +{ > +#if ! __has_feature(safe_stack) > +#error SafeStack Disabled > +#endif > + return 0; > +} > +EOF > + flag="-fsanitize=safe-stack" > + # Check that safe-stack is supported and enabled. > + if compile_prog "-Werror $flag" "$flag"; then > + # Flag needed both at compilation and at linking > + QEMU_CFLAGS="$QEMU_CFLAGS $flag" > + QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" > + else > + error_exit "SafeStack not supported by your compiler" > + fi > + if test "$coroutine" != "ucontext"; then > + error_exit "SafeStack is only supported by the coroutine backend ucontext" > + fi > +else > +cat > $TMPC << EOF > +int main(int argc, char *argv[]) > +{ > +#if defined(__has_feature) > +#if __has_feature(safe_stack) > +#error SafeStack Enabled > +#endif > +#endif > + return 0; > +} > +EOF > +if test "$safe_stack" = "no"; then > + # Make sure that safe-stack is disabled > + if ! compile_prog "-Werror" ""; then > + # SafeStack was already enabled, try to explicitly remove the feature > + flag="-fno-sanitize=safe-stack" > + if ! compile_prog "-Werror $flag" "$flag"; then > + error_exit "Configure cannot disable SafeStack" > + fi > + QEMU_CFLAGS="$QEMU_CFLAGS $flag" > + QEMU_LDFLAGS="$QEMU_LDFLAGS $flag" > + fi > +else # "$safe_stack" = "" > + # Set safe_stack to yes or no based on pre-existing flags > + if compile_prog "-Werror" ""; then > + safe_stack="no" > + else > + safe_stack="yes" > + if test "$coroutine" != "ucontext"; then > + error_exit "SafeStack is only supported by the coroutine backend ucontext" > + fi > + fi > +fi > +fi > + > +########################################## > +# check if we have open_by_handle_at > + > +open_by_handle_at=no > +cat > $TMPC << EOF > +#include > +#if !defined(AT_EMPTY_PATH) > +# error missing definition > +#else > +int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); } > +#endif > +EOF > +if compile_prog "" "" ; then > + open_by_handle_at=yes > +fi > + > +######################################## > +# check if we have linux/magic.h > + > +linux_magic_h=no > +cat > $TMPC << EOF > +#include > +int main(void) { > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + linux_magic_h=yes > +fi > + > +######################################## > +# check if we have valgrind/valgrind.h > + > +valgrind_h=no > +cat > $TMPC << EOF > +#include > +int main(void) { > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + valgrind_h=yes > +fi > + > +######################################## > +# check if environ is declared > + > +has_environ=no > +cat > $TMPC << EOF > +#include > +int main(void) { > + environ = 0; > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + has_environ=yes > +fi > + > +######################################## > +# check if cpuid.h is usable. > + > +cat > $TMPC << EOF > +#include > +int main(void) { > + unsigned a, b, c, d; > + int max = __get_cpuid_max(0, 0); > + > + if (max >= 1) { > + __cpuid(1, a, b, c, d); > + } > + > + if (max >= 7) { > + __cpuid_count(7, 0, a, b, c, d); > + } > + > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + cpuid_h=yes > +fi > + > +########################################## > +# avx2 optimization requirement check > +# > +# There is no point enabling this if cpuid.h is not usable, > +# since we won't be able to select the new routines. > + > +if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then > + cat > $TMPC << EOF > +#pragma GCC push_options > +#pragma GCC target("avx2") > +#include > +#include > +static int bar(void *a) { > + __m256i x = *(__m256i *)a; > + return _mm256_testz_si256(x, x); > +} > +int main(int argc, char *argv[]) { return bar(argv[0]); } > +EOF > + if compile_object "" ; then > + avx2_opt="yes" > + else > + avx2_opt="no" > + fi > +fi > + > +########################################## > +# avx512f optimization requirement check > +# > +# There is no point enabling this if cpuid.h is not usable, > +# since we won't be able to select the new routines. > +# by default, it is turned off. > +# if user explicitly want to enable it, check environment > + > +if test "$cpuid_h" = "yes" && test "$avx512f_opt" = "yes"; then > + cat > $TMPC << EOF > +#pragma GCC push_options > +#pragma GCC target("avx512f") > +#include > +#include > +static int bar(void *a) { > + __m512i x = *(__m512i *)a; > + return _mm512_test_epi64_mask(x, x); > +} > +int main(int argc, char *argv[]) > +{ > + return bar(argv[0]); > +} > +EOF > + if ! compile_object "" ; then > + avx512f_opt="no" > + fi > +else > + avx512f_opt="no" > +fi > + > +######################################## > +# check if __[u]int128_t is usable. > + > +int128=no > +cat > $TMPC << EOF > +__int128_t a; > +__uint128_t b; > +int main (void) { > + a = a + b; > + b = a * b; > + a = a * a; > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + int128=yes > +fi > + > +######################################### > +# See if 128-bit atomic operations are supported. > + > +atomic128=no > +if test "$int128" = "yes"; then > + cat > $TMPC << EOF > +int main(void) > +{ > + unsigned __int128 x = 0, y = 0; > + y = __atomic_load_16(&x, 0); > + __atomic_store_16(&x, y, 0); > + __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); > + return 0; > +} > +EOF > + if compile_prog "" "" ; then > + atomic128=yes > + fi > +fi > + > +cmpxchg128=no > +if test "$int128" = yes && test "$atomic128" = no; then > + cat > $TMPC << EOF > +int main(void) > +{ > + unsigned __int128 x = 0, y = 0; > + __sync_val_compare_and_swap_16(&x, y, x); > + return 0; > +} > +EOF > + if compile_prog "" "" ; then > + cmpxchg128=yes > + fi > +fi > + > +######################################### > +# See if 64-bit atomic operations are supported. > +# Note that without __atomic builtins, we can only > +# assume atomic loads/stores max at pointer size. > + > +cat > $TMPC << EOF > +#include > +int main(void) > +{ > + uint64_t x = 0, y = 0; > +#ifdef __ATOMIC_RELAXED > + y = __atomic_load_8(&x, 0); > + __atomic_store_8(&x, y, 0); > + __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0); > + __atomic_exchange_8(&x, y, 0); > + __atomic_fetch_add_8(&x, y, 0); > +#else > + typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1]; > + __sync_lock_test_and_set(&x, y); > + __sync_val_compare_and_swap(&x, y, 0); > + __sync_fetch_and_add(&x, y); > +#endif > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + atomic64=yes > +fi > + > +######################################### > +# See if --dynamic-list is supported by the linker > +ld_dynamic_list="no" > +if test "$static" = "no" ; then > + cat > $TMPTXT < +{ > + foo; > +}; > +EOF > + > + cat > $TMPC < +#include > +void foo(void); > + > +void foo(void) > +{ > + printf("foo\n"); > +} > + > +int main(void) > +{ > + foo(); > + return 0; > +} > +EOF > + > + if compile_prog "" "-Wl,--dynamic-list=$TMPTXT" ; then > + ld_dynamic_list="yes" > + fi > +fi > + > +######################################### > +# See if -exported_symbols_list is supported by the linker > + > +ld_exported_symbols_list="no" > +if test "$static" = "no" ; then > + cat > $TMPTXT < + _foo > +EOF > + > + if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then > + ld_exported_symbols_list="yes" > + fi > +fi > + > +if test "$plugins" = "yes" && > + test "$ld_dynamic_list" = "no" && > + test "$ld_exported_symbols_list" = "no" ; then > + error_exit \ > + "Plugin support requires dynamic linking and specifying a set of symbols " \ > + "that are exported to plugins. Unfortunately your linker doesn't " \ > + "support the flag (--dynamic-list or -exported_symbols_list) used " \ > + "for this purpose. You can't build with --static." > +fi > + > +######################################## > +# See if __attribute__((alias)) is supported. > +# This false for Xcode 9, but has been remedied for Xcode 10. > +# Unfortunately, travis uses Xcode 9 by default. > + > +attralias=no > +cat > $TMPC << EOF > +int x = 1; > +extern const int y __attribute__((alias("x"))); > +int main(void) { return 0; } > +EOF > +if compile_prog "" "" ; then > + attralias=yes > +fi > + > +######################################## > +# check if getauxval is available. > + > +getauxval=no > +cat > $TMPC << EOF > +#include > +int main(void) { > + return getauxval(AT_HWCAP) == 0; > +} > +EOF > +if compile_prog "" "" ; then > + getauxval=yes > +fi > + > +######################################## > +# check if ccache is interfering with > +# semantic analysis of macros > + > +unset CCACHE_CPP2 > +ccache_cpp2=no > +cat > $TMPC << EOF > +static const int Z = 1; > +#define fn() ({ Z; }) > +#define TAUT(X) ((X) == Z) > +#define PAREN(X, Y) (X == Y) > +#define ID(X) (X) > +int main(int argc, char *argv[]) > +{ > + int x = 0, y = 0; > + x = ID(x); > + x = fn(); > + fn(); > + if (PAREN(x, y)) return 0; > + if (TAUT(Z)) return 0; > + return 0; > +} > +EOF > + > +if ! compile_object "-Werror"; then > + ccache_cpp2=yes > +fi > + > +################################################# > +# clang does not support glibc + FORTIFY_SOURCE. > + > +if test "$fortify_source" != "no"; then > + if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then > + fortify_source="no"; > + elif test -n "$cxx" && has $cxx && > + echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then > + fortify_source="no"; > + else > + fortify_source="yes" > + fi > +fi > + > +############################################### > +# Check if copy_file_range is provided by glibc > +have_copy_file_range=no > +cat > $TMPC << EOF > +#include > +int main(void) { > + copy_file_range(0, NULL, 0, NULL, 0, 0); > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + have_copy_file_range=yes > +fi > + > +########################################## > +# check if struct fsxattr is available via linux/fs.h > + > +have_fsxattr=no > +cat > $TMPC << EOF > +#include > +struct fsxattr foo; > +int main(void) { > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + have_fsxattr=yes > +fi > + > +########################################## > +# check for usable membarrier system call > +if test "$membarrier" = "yes"; then > + have_membarrier=no > + if test "$mingw32" = "yes" ; then > + have_membarrier=yes > + elif test "$linux" = "yes" ; then > + cat > $TMPC << EOF > + #include > + #include > + #include > + #include > + int main(void) { > + syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0); > + syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0); > + exit(0); > + } > +EOF > + if compile_prog "" "" ; then > + have_membarrier=yes > + fi > + fi > + if test "$have_membarrier" = "no"; then > + feature_not_found "membarrier" "membarrier system call not available" > + fi > +else > + # Do not enable it by default even for Mingw32, because it doesn't > + # work on Wine. > + membarrier=no > +fi > + > +########################################## > +# check if rtnetlink.h exists and is useful > +have_rtnetlink=no > +cat > $TMPC << EOF > +#include > +int main(void) { > + return IFLA_PROTO_DOWN; > +} > +EOF > +if compile_prog "" "" ; then > + have_rtnetlink=yes > +fi > + > +########################################## > +# check for usable AF_VSOCK environment > +have_af_vsock=no > +cat > $TMPC << EOF > +#include > +#include > +#include > +#if !defined(AF_VSOCK) > +# error missing AF_VSOCK flag > +#endif > +#include > +int main(void) { > + int sock, ret; > + struct sockaddr_vm svm; > + socklen_t len = sizeof(svm); > + sock = socket(AF_VSOCK, SOCK_STREAM, 0); > + ret = getpeername(sock, (struct sockaddr *)&svm, &len); > + if ((ret == -1) && (errno == ENOTCONN)) { > + return 0; > + } > + return -1; > +} > +EOF > +if compile_prog "" "" ; then > + have_af_vsock=yes > +fi > + > +########################################## > +# check for usable AF_ALG environment > +have_afalg=no > +cat > $TMPC << EOF > +#include > +#include > +#include > +#include > +int main(void) { > + int sock; > + sock = socket(AF_ALG, SOCK_SEQPACKET, 0); > + return sock; > +} > +EOF > +if compile_prog "" "" ; then > + have_afalg=yes > +fi > +if test "$crypto_afalg" = "yes" > +then > + if test "$have_afalg" != "yes" > + then > + error_exit "AF_ALG requested but could not be detected" > + fi > +fi > + > + > +################################################# > +# Check to see if we have the Hypervisor framework > +if [ "$darwin" = "yes" ] ; then > + cat > $TMPC << EOF > +#include > +int main() { return 0;} > +EOF > + if ! compile_object ""; then > + hvf='no' > + else > + hvf='yes' > + QEMU_LDFLAGS="-framework Hypervisor $QEMU_LDFLAGS" > + fi > +fi > + > +########################################## > +# check for sysmacros.h > + > +have_sysmacros=no > +cat > $TMPC << EOF > +#include > +int main(void) { > + return makedev(0, 0); > +} > +EOF > +if compile_prog "" "" ; then > + have_sysmacros=yes > +fi > + > +########################################## > +# check for _Static_assert() > + > +have_static_assert=no > +cat > $TMPC << EOF > +_Static_assert(1, "success"); > +int main(void) { > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + have_static_assert=yes > +fi > + > +########################################## > +# check for utmpx.h, it is missing e.g. on OpenBSD > + > +have_utmpx=no > +cat > $TMPC << EOF > +#include > +struct utmpx user_info; > +int main(void) { > + return 0; > +} > +EOF > +if compile_prog "" "" ; then > + have_utmpx=yes > +fi > + > +########################################## > +# check for getrandom() > + > +have_getrandom=no > +cat > $TMPC << EOF > +#include > +int main(void) { > + return getrandom(0, 0, GRND_NONBLOCK); > +} > +EOF > +if compile_prog "" "" ; then > + have_getrandom=yes > +fi > + > +########################################## > +# checks for sanitizers > + > +have_asan=no > +have_ubsan=no > +have_asan_iface_h=no > +have_asan_iface_fiber=no > + > +if test "$sanitizers" = "yes" ; then > + write_c_skeleton > + if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then > + have_asan=yes > + fi > + > + # we could use a simple skeleton for flags checks, but this also > + # detect the static linking issue of ubsan, see also: > + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285 > + cat > $TMPC << EOF > +#include > +int main(void) { > + void *tmp = malloc(10); > + if (tmp != NULL) { > + return *(int *)(tmp + 2); > + } > + return 1; > +} > +EOF > + if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then > + have_ubsan=yes > + fi > + > + if check_include "sanitizer/asan_interface.h" ; then > + have_asan_iface_h=yes > + fi > + > + cat > $TMPC << EOF > +#include > +int main(void) { > + __sanitizer_start_switch_fiber(0, 0, 0); > + return 0; > +} > +EOF > + if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then > + have_asan_iface_fiber=yes > + fi > +fi > + > +########################################## > +# checks for fuzzer > +if test "$fuzzing" = "yes" ; then > + write_c_fuzzer_skeleton > + if compile_prog "$CPU_CFLAGS -Werror -fsanitize=fuzzer" ""; then > + have_fuzzer=yes > + else > + error_exit "Your compiler doesn't support -fsanitize=fuzzer" > + exit 1 > + fi > +fi > + > +# Thread sanitizer is, for now, much noisier than the other sanitizers; > +# keep it separate until that is not the case. > +if test "$tsan" = "yes" && test "$sanitizers" = "yes"; then > + error_exit "TSAN is not supported with other sanitiziers." > +fi > +have_tsan=no > +have_tsan_iface_fiber=no > +if test "$tsan" = "yes" ; then > + write_c_skeleton > + if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then > + have_tsan=yes > + fi > + cat > $TMPC << EOF > +#include > +int main(void) { > + __tsan_create_fiber(0); > + return 0; > +} > +EOF > + if compile_prog "$CPU_CFLAGS -Werror -fsanitize=thread" "" ; then > + have_tsan_iface_fiber=yes > + fi > +fi > + > +########################################## > +# check for libpmem > + > +if test "$libpmem" != "no"; then > + if $pkg_config --exists "libpmem"; then > + libpmem="yes" > + libpmem_libs=$($pkg_config --libs libpmem) > + libpmem_cflags=$($pkg_config --cflags libpmem) > + QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags" > + else > + if test "$libpmem" = "yes" ; then > + feature_not_found "libpmem" "Install nvml or pmdk" > + fi > + libpmem="no" > + fi > +fi > + > +########################################## > +# check for libdaxctl > + > +if test "$libdaxctl" != "no"; then > + if $pkg_config --atleast-version=57 "libdaxctl"; then > + libdaxctl="yes" > + libdaxctl_libs=$($pkg_config --libs libdaxctl) > + libdaxctl_cflags=$($pkg_config --cflags libdaxctl) > + QEMU_CFLAGS="$QEMU_CFLAGS $libdaxctl_cflags" > + else > + if test "$libdaxctl" = "yes" ; then > + feature_not_found "libdaxctl" "Install libdaxctl" > + fi > + libdaxctl="no" > + fi > +fi > + > +########################################## > +# check for slirp > + > +# slirp is only required when building softmmu targets > +if test -z "$slirp" -a "$softmmu" != "yes" ; then > + slirp="no" > +fi > + > +case "$slirp" in > + "" | yes) > + if $pkg_config slirp; then > + slirp=system > + elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then > + slirp=git > + elif test -e "${source_path}/slirp/Makefile" ; then > + slirp=internal > + elif test -z "$slirp" ; then > + slirp=no > + else > + feature_not_found "slirp" "Install slirp devel or git submodule" > + fi > + ;; > + > + system) > + if ! $pkg_config slirp; then > + feature_not_found "slirp" "Install slirp devel" > + fi > + ;; > +esac > + > +case "$slirp" in > + git | internal) > + if test "$slirp" = git; then > + git_submodules="${git_submodules} slirp" > + fi > + mkdir -p slirp > + slirp_cflags="-I${source_path}/slirp/src -I${build_path}/slirp/src" > + slirp_libs="-L${build_path}/slirp -lslirp" > + if test "$mingw32" = "yes" ; then > + slirp_libs="$slirp_libs -lws2_32 -liphlpapi" > + fi > + ;; > + > + system) > + slirp_version=$($pkg_config --modversion slirp 2>/dev/null) > + slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null) > + slirp_libs=$($pkg_config --libs slirp 2>/dev/null) > + ;; > + > + no) > + ;; > + *) > + error_exit "Unknown state for slirp: $slirp" > + ;; > +esac > + > +########################################## > +# check for usable __NR_keyctl syscall > + > +if test "$linux" = "yes" ; then > + > + have_keyring=no > + cat > $TMPC << EOF > +#include > +#include > +#include > +#include > +int main(void) { > + return syscall(__NR_keyctl, KEYCTL_READ, 0, NULL, NULL, 0); > +} > +EOF > + if compile_prog "" "" ; then > + have_keyring=yes > + fi > +fi > +if test "$secret_keyring" != "no" > +then > + if test "$have_keyring" = "yes" > + then > + secret_keyring=yes > + else > + if test "$secret_keyring" = "yes" > + then > + error_exit "syscall __NR_keyctl requested, \ > +but not implemented on your system" > + else > + secret_keyring=no > + fi > + fi > +fi > + > +########################################## > +# check for usable keyutils.h > + > +if test "$linux" = "yes" ; then > + > + have_keyutils=no > + cat > $TMPC << EOF > +#include > +#include > +#include > +#include > +#include > +int main(void) { > + return request_key("user", NULL, NULL, 0); > +} > +EOF > + if compile_prog "" "-lkeyutils"; then > + have_keyutils=yes > + fi > +fi > + > + > +########################################## > +# End of CC checks > +# After here, no more $cc or $ld runs > + > +write_c_skeleton > + > +if test "$gcov" = "yes" ; then > + : > +elif test "$fortify_source" = "yes" ; then > + QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS" > + debug=no > +fi > +if test "$debug_info" = "yes"; then > + CFLAGS="-g $CFLAGS" > + LDFLAGS="-g $LDFLAGS" > +fi > +if test "$debug" = "no"; then > + CFLAGS="-O2 $CFLAGS" > +fi > + > +case "$ARCH" in > +alpha) > + # Ensure there's only a single GP > + QEMU_CFLAGS="-msmall-data $QEMU_CFLAGS" > +;; > +esac > + > +if test "$gprof" = "yes" ; then > + QEMU_CFLAGS="-p $QEMU_CFLAGS" > + QEMU_LDFLAGS="-p $QEMU_LDFLAGS" > +fi > + > +if test "$have_asan" = "yes"; then > + QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS" > + QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS" > + if test "$have_asan_iface_h" = "no" ; then > + echo "ASAN build enabled, but ASAN header missing." \ > + "Without code annotation, the report may be inferior." > + elif test "$have_asan_iface_fiber" = "no" ; then > + echo "ASAN build enabled, but ASAN header is too old." \ > + "Without code annotation, the report may be inferior." > + fi > +fi > +if test "$have_tsan" = "yes" ; then > + if test "$have_tsan_iface_fiber" = "yes" ; then > + QEMU_CFLAGS="-fsanitize=thread $QEMU_CFLAGS" > + QEMU_LDFLAGS="-fsanitize=thread $QEMU_LDFLAGS" > + else > + error_exit "Cannot enable TSAN due to missing fiber annotation interface." > + fi > +elif test "$tsan" = "yes" ; then > + error_exit "Cannot enable TSAN due to missing sanitize thread interface." > +fi > +if test "$have_ubsan" = "yes"; then > + QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS" > + QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS" > +fi > + > +########################################## > +# Do we have libnfs > +if test "$libnfs" != "no" ; then > + if $pkg_config --atleast-version=1.9.3 libnfs; then > + libnfs="yes" > + libnfs_libs=$($pkg_config --libs libnfs) > + else > + if test "$libnfs" = "yes" ; then > + feature_not_found "libnfs" "Install libnfs devel >= 1.9.3" > + fi > + libnfs="no" > + fi > +fi > + > +########################################## > +# Do we have libudev > +if test "$libudev" != "no" ; then > + if $pkg_config libudev && test "$static" != "yes"; then > + libudev="yes" > + libudev_libs=$($pkg_config --libs libudev) > + else > + libudev="no" > + fi > +fi > + > +# Now we've finished running tests it's OK to add -Werror to the compiler flags > +if test "$werror" = "yes"; then > + QEMU_CFLAGS="-Werror $QEMU_CFLAGS" > +fi > + > +# Exclude --warn-common with TSan to suppress warnings from the TSan libraries. > +if test "$solaris" = "no" && test "$tsan" = "no"; then > + if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then > + QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS" > + fi > +fi > + > +# test if pod2man has --utf8 option > +if pod2man --help | grep -q utf8; then > + POD2MAN="pod2man --utf8" > +else > + POD2MAN="pod2man" > +fi > + > +# Use ASLR, no-SEH and DEP if available > +if test "$mingw32" = "yes" ; then > + for flag in --dynamicbase --no-seh --nxcompat; do > + if ld_has $flag ; then > + QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS" > + fi > + done > +fi > + > +# Disable OpenBSD W^X if available > +if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then > + cat > $TMPC < + int main(void) { return 0; } > +EOF > + wx_ldflags="-Wl,-z,wxneeded" > + if compile_prog "" "$wx_ldflags"; then > + QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags" > + fi > +fi > + > +qemu_confdir="$sysconfdir/$qemu_suffix" > +qemu_moddir="$libdir/$qemu_suffix" > +qemu_datadir="$datadir/$qemu_suffix" > +qemu_docdir="$docdir/$qemu_suffix" > +qemu_localedir="$datadir/locale" > +qemu_icondir="$datadir/icons" > +qemu_desktopdir="$datadir/applications" > + > +# We can only support ivshmem if we have eventfd > +if [ "$eventfd" = "yes" ]; then > + ivshmem=yes > +fi > + > +if test "$softmmu" = yes ; then > + if test "$linux" = yes; then > + if test "$virtfs" != no && test "$cap_ng" = yes && test "$attr" = yes ; then > + virtfs=yes > + else > + if test "$virtfs" = yes; then > + error_exit "VirtFS requires libcap-ng devel and libattr devel" > + fi > + virtfs=no > + fi > + if test "$mpath" != no && test "$mpathpersist" = yes ; then > + mpath=yes > + else > + if test "$mpath" = yes; then > + error_exit "Multipath requires libmpathpersist devel" > + fi > + mpath=no > + fi > + else > + if test "$virtfs" = yes; then > + error_exit "VirtFS is supported only on Linux" > + fi > + virtfs=no > + if test "$mpath" = yes; then > + error_exit "Multipath is supported only on Linux" > + fi > + mpath=no > + fi > +fi > + > +# Probe for guest agent support/options > + > +if [ "$guest_agent" != "no" ]; then > + if [ "$softmmu" = no -a "$want_tools" = no ] ; then > + guest_agent=no > + elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then > + guest_agent=yes > + elif [ "$guest_agent" != yes ]; then > + guest_agent=no > + else > + error_exit "Guest agent is not supported on this platform" > + fi > +fi > + > +# Guest agent Window MSI package > + > +if test "$guest_agent" != yes; then > + if test "$guest_agent_msi" = yes; then > + error_exit "MSI guest agent package requires guest agent enabled" > + fi > + guest_agent_msi=no > +elif test "$mingw32" != "yes"; then > + if test "$guest_agent_msi" = "yes"; then > + error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation" > + fi > + guest_agent_msi=no > +elif ! has wixl; then > + if test "$guest_agent_msi" = "yes"; then > + error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )" > + fi > + guest_agent_msi=no > +else > + # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't > + # disabled explicitly > + if test "$guest_agent_msi" != "no"; then > + guest_agent_msi=yes > + fi > +fi > + > +if test "$guest_agent_msi" = "yes"; then > + if test "$guest_agent_with_vss" = "yes"; then > + QEMU_GA_MSI_WITH_VSS="-D InstallVss" > + fi > + > + if test "$QEMU_GA_MANUFACTURER" = ""; then > + QEMU_GA_MANUFACTURER=QEMU > + fi > + > + if test "$QEMU_GA_DISTRO" = ""; then > + QEMU_GA_DISTRO=Linux > + fi > + > + if test "$QEMU_GA_VERSION" = ""; then > + QEMU_GA_VERSION=$(cat $source_path/VERSION) > + fi > + > + QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin" > + > + case "$cpu" in > + x86_64) > + QEMU_GA_MSI_ARCH="-a x64 -D Arch=64" > + ;; > + i386) > + QEMU_GA_MSI_ARCH="-D Arch=32" > + ;; > + *) > + error_exit "CPU $cpu not supported for building installation package" > + ;; > + esac > +fi > + > +# Mac OS X ships with a broken assembler > +roms= > +if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \ > + test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \ > + test "$softmmu" = yes ; then > + # Different host OS linkers have different ideas about the name of the ELF > + # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd > + # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe. > + for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do > + if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then > + ld_i386_emulation="$emu" > + roms="optionrom" > + break > + fi > + done > +fi > + > +# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 > +if test "$cpu" = "s390x" ; then > + write_c_skeleton > + if compile_prog "-march=z900" ""; then > + roms="$roms s390-ccw" > + # SLOF is required for building the s390-ccw firmware on s390x, > + # since it is using the libnet code from SLOF for network booting. > + if test -e "${source_path}/.git" ; then > + git_submodules="${git_submodules} roms/SLOF" > + fi > + fi > +fi > + > +if test $git_update = 'yes' ; then > + (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules") > + > + if test "$fdt" = "git" ; then > + if [ "$pwd_is_source_path" != "y" ] ; then > + symlink "$source_path/dtc/Makefile" "dtc/Makefile" > + fi > + fi > +fi > + > +# Check that the C++ compiler exists and works with the C compiler. > +# All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added. > +if has $cxx; then > + cat > $TMPC < +int c_function(void); > +int main(void) { return c_function(); } > +EOF > + > + compile_object > + > + cat > $TMPCXX < +extern "C" { > + int c_function(void); > +} > +int c_function(void) { return 42; } > +EOF > + > + update_cxxflags > + > + if do_cxx $CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then > + # C++ compiler $cxx works ok with C compiler $cc > + : > + else > + echo "C++ compiler $cxx does not work with C compiler $cc" > + echo "Disabling C++ specific optional code" > + cxx= > + fi > +else > + echo "No C++ compiler available; disabling C++ specific optional code" > + cxx= > +fi > + > +echo_version() { > + if test "$1" = "yes" ; then > + echo "($2)" > + fi > +} > + > +# prepend ftd flags after all config tests are done > +QEMU_CFLAGS="$fdt_cflags $QEMU_CFLAGS" > +QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS" > + > +config_host_mak="config-host.mak" > + > +echo "# Automatically generated by configure - do not modify" >config-all-disas.mak > + > +echo "# Automatically generated by configure - do not modify" > $config_host_mak > +echo >> $config_host_mak > + > +echo all: >> $config_host_mak > +echo "prefix=$prefix" >> $config_host_mak > +echo "bindir=$bindir" >> $config_host_mak > +echo "libdir=$libdir" >> $config_host_mak > +echo "libexecdir=$libexecdir" >> $config_host_mak > +echo "includedir=$includedir" >> $config_host_mak > +echo "sysconfdir=$sysconfdir" >> $config_host_mak > +echo "qemu_confdir=$qemu_confdir" >> $config_host_mak > +echo "qemu_datadir=$qemu_datadir" >> $config_host_mak > +echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak > +echo "qemu_moddir=$qemu_moddir" >> $config_host_mak > +if test "$mingw32" = "no" ; then > + echo "qemu_localstatedir=$local_statedir" >> $config_host_mak > +fi > +echo "qemu_helperdir=$libexecdir" >> $config_host_mak > +echo "qemu_localedir=$qemu_localedir" >> $config_host_mak > +echo "qemu_icondir=$qemu_icondir" >> $config_host_mak > +echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak > +echo "GIT=$git" >> $config_host_mak > +echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak > +echo "GIT_UPDATE=$git_update" >> $config_host_mak > + > +echo "ARCH=$ARCH" >> $config_host_mak > + > +if test "$default_devices" = "yes" ; then > + echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak > +else > + echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak > +fi > +if test "$debug_tcg" = "yes" ; then > + echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak > +fi > +if test "$strip_opt" = "yes" ; then > + echo "STRIP=${strip}" >> $config_host_mak > +fi > +if test "$bigendian" = "yes" ; then > + echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak > +fi > +if test "$mingw32" = "yes" ; then > + echo "CONFIG_WIN32=y" >> $config_host_mak > + rc_version=$(cat $source_path/VERSION) > + version_major=${rc_version%%.*} > + rc_version=${rc_version#*.} > + version_minor=${rc_version%%.*} > + rc_version=${rc_version#*.} > + version_subminor=${rc_version%%.*} > + version_micro=0 > + echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak > + echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak > + if test "$guest_agent_with_vss" = "yes" ; then > + echo "CONFIG_QGA_VSS=y" >> $config_host_mak > + echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak > + echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak > + fi > + if test "$guest_agent_ntddscsi" = "yes" ; then > + echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak > + fi > + if test "$guest_agent_msi" = "yes"; then > + echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak > + echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak > + echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak > + echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak > + echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak > + echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak > + echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak > + fi > +else > + echo "CONFIG_POSIX=y" >> $config_host_mak > +fi > + > +if test "$linux" = "yes" ; then > + echo "CONFIG_LINUX=y" >> $config_host_mak > +fi > + > +if test "$darwin" = "yes" ; then > + echo "CONFIG_DARWIN=y" >> $config_host_mak > +fi > + > +if test "$solaris" = "yes" ; then > + echo "CONFIG_SOLARIS=y" >> $config_host_mak > +fi > +if test "$haiku" = "yes" ; then > + echo "CONFIG_HAIKU=y" >> $config_host_mak > +fi > +if test "$static" = "yes" ; then > + echo "CONFIG_STATIC=y" >> $config_host_mak > +fi > +if test "$profiler" = "yes" ; then > + echo "CONFIG_PROFILER=y" >> $config_host_mak > +fi > +if test "$want_tools" = "yes" ; then > + echo "CONFIG_TOOLS=y" >> $config_host_mak > +fi > +if test "$guest_agent" = "yes" ; then > + echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak > +fi > +if test "$slirp" != "no"; then > + echo "CONFIG_SLIRP=y" >> $config_host_mak > + echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak > + echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak > + echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak > +fi > +subdirs= > +if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then > + subdirs="$subdirs slirp" > +fi > +if test "$vde" = "yes" ; then > + echo "CONFIG_VDE=y" >> $config_host_mak > + echo "VDE_LIBS=$vde_libs" >> $config_host_mak > +fi > +if test "$netmap" = "yes" ; then > + echo "CONFIG_NETMAP=y" >> $config_host_mak > +fi > +if test "$l2tpv3" = "yes" ; then > + echo "CONFIG_L2TPV3=y" >> $config_host_mak > +fi > +if test "$gprof" = "yes" ; then > + echo "CONFIG_GPROF=y" >> $config_host_mak > +fi > +if test "$cap_ng" = "yes" ; then > + echo "CONFIG_LIBCAP_NG=y" >> $config_host_mak > + echo "LIBCAP_NG_LIBS=$cap_libs" >> $config_host_mak > +fi > +echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak > +for drv in $audio_drv_list; do > + def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]') > + echo "$def=y" >> $config_host_mak > +done > +if test "$alsa" = "yes" ; then > + echo "CONFIG_ALSA=y" >> $config_host_mak > +fi > +echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak > +echo "ALSA_CFLAGS=$alsa_cflags" >> $config_host_mak > +if test "$libpulse" = "yes" ; then > + echo "CONFIG_LIBPULSE=y" >> $config_host_mak > +fi > +echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak > +echo "PULSE_CFLAGS=$pulse_cflags" >> $config_host_mak > +echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak > +echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak > +echo "OSS_LIBS=$oss_libs" >> $config_host_mak > +if test "$libjack" = "yes" ; then > + echo "CONFIG_LIBJACK=y" >> $config_host_mak > +fi > +echo "JACK_LIBS=$jack_libs" >> $config_host_mak > +if test "$audio_win_int" = "yes" ; then > + echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak > +fi > +echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak > +echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak > +if test "$xfs" = "yes" ; then > + echo "CONFIG_XFS=y" >> $config_host_mak > +fi > +qemu_version=$(head $source_path/VERSION) > +echo "PKGVERSION=$pkgversion" >>$config_host_mak > +echo "SRC_PATH=$source_path" >> $config_host_mak > +echo "TARGET_DIRS=$target_list" >> $config_host_mak > +if [ "$docs" = "yes" ] ; then > + echo "BUILD_DOCS=yes" >> $config_host_mak > +fi > +if test "$modules" = "yes"; then > + # $shacmd can generate a hash started with digit, which the compiler doesn't > + # like as an symbol. So prefix it with an underscore > + echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak > + echo "CONFIG_MODULES=y" >> $config_host_mak > +fi > +if test "$module_upgrades" = "yes"; then > + echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak > +fi > +if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then > + echo "CONFIG_X11=y" >> $config_host_mak > + echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak > + echo "X11_LIBS=$x11_libs" >> $config_host_mak > +fi > +if test "$cocoa" = "yes" ; then > + echo "CONFIG_COCOA=y" >> $config_host_mak > +fi > +if test "$iconv" = "yes" ; then > + echo "CONFIG_ICONV=y" >> $config_host_mak > + echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak > + echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak > +fi > +if test "$curses" = "yes" ; then > + echo "CONFIG_CURSES=y" >> $config_host_mak > + echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak > + echo "CURSES_LIBS=$curses_lib" >> $config_host_mak > +fi > +if test "$pipe2" = "yes" ; then > + echo "CONFIG_PIPE2=y" >> $config_host_mak > +fi > +if test "$accept4" = "yes" ; then > + echo "CONFIG_ACCEPT4=y" >> $config_host_mak > +fi > +if test "$splice" = "yes" ; then > + echo "CONFIG_SPLICE=y" >> $config_host_mak > +fi > +if test "$eventfd" = "yes" ; then > + echo "CONFIG_EVENTFD=y" >> $config_host_mak > +fi > +if test "$memfd" = "yes" ; then > + echo "CONFIG_MEMFD=y" >> $config_host_mak > +fi > +if test "$have_usbfs" = "yes" ; then > + echo "CONFIG_USBFS=y" >> $config_host_mak > +fi > +if test "$fallocate" = "yes" ; then > + echo "CONFIG_FALLOCATE=y" >> $config_host_mak > +fi > +if test "$fallocate_punch_hole" = "yes" ; then > + echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak > +fi > +if test "$fallocate_zero_range" = "yes" ; then > + echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak > +fi > +if test "$posix_fallocate" = "yes" ; then > + echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak > +fi > +if test "$sync_file_range" = "yes" ; then > + echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak > +fi > +if test "$fiemap" = "yes" ; then > + echo "CONFIG_FIEMAP=y" >> $config_host_mak > +fi > +if test "$dup3" = "yes" ; then > + echo "CONFIG_DUP3=y" >> $config_host_mak > +fi > +if test "$ppoll" = "yes" ; then > + echo "CONFIG_PPOLL=y" >> $config_host_mak > +fi > +if test "$prctl_pr_set_timerslack" = "yes" ; then > + echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak > +fi > +if test "$epoll" = "yes" ; then > + echo "CONFIG_EPOLL=y" >> $config_host_mak > +fi > +if test "$epoll_create1" = "yes" ; then > + echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak > +fi > +if test "$sendfile" = "yes" ; then > + echo "CONFIG_SENDFILE=y" >> $config_host_mak > +fi > +if test "$timerfd" = "yes" ; then > + echo "CONFIG_TIMERFD=y" >> $config_host_mak > +fi > +if test "$setns" = "yes" ; then > + echo "CONFIG_SETNS=y" >> $config_host_mak > +fi > +if test "$clock_adjtime" = "yes" ; then > + echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak > +fi > +if test "$syncfs" = "yes" ; then > + echo "CONFIG_SYNCFS=y" >> $config_host_mak > +fi > +if test "$kcov" = "yes" ; then > + echo "CONFIG_KCOV=y" >> $config_host_mak > +fi > +if test "$inotify" = "yes" ; then > + echo "CONFIG_INOTIFY=y" >> $config_host_mak > +fi > +if test "$inotify1" = "yes" ; then > + echo "CONFIG_INOTIFY1=y" >> $config_host_mak > +fi > +if test "$sem_timedwait" = "yes" ; then > + echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak > +fi > +if test "$strchrnul" = "yes" ; then > + echo "HAVE_STRCHRNUL=y" >> $config_host_mak > +fi > +if test "$st_atim" = "yes" ; then > + echo "HAVE_STRUCT_STAT_ST_ATIM=y" >> $config_host_mak > +fi > +if test "$byteswap_h" = "yes" ; then > + echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak > +fi > +if test "$bswap_h" = "yes" ; then > + echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak > +fi > +if test "$curl" = "yes" ; then > + echo "CONFIG_CURL=y" >> $config_host_mak > + echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak > + echo "CURL_LIBS=$curl_libs" >> $config_host_mak > +fi > +if test "$brlapi" = "yes" ; then > + echo "CONFIG_BRLAPI=y" >> $config_host_mak > + echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak > +fi > +if test "$gtk" = "yes" ; then > + echo "CONFIG_GTK=y" >> $config_host_mak > + echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak > + echo "GTK_LIBS=$gtk_libs" >> $config_host_mak > + if test "$gtk_gl" = "yes" ; then > + echo "CONFIG_GTK_GL=y" >> $config_host_mak > + fi > +fi > +if test "$gio" = "yes" ; then > + echo "CONFIG_GIO=y" >> $config_host_mak > + echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak > + echo "GIO_LIBS=$gio_libs" >> $config_host_mak > + echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak > +fi > +echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak > +if test "$gnutls" = "yes" ; then > + echo "CONFIG_GNUTLS=y" >> $config_host_mak > + echo "GNUTLS_CFLAGS=$gnutls_cflags" >> $config_host_mak > + echo "GNUTLS_LIBS=$gnutls_libs" >> $config_host_mak > +fi > +if test "$gcrypt" = "yes" ; then > + echo "CONFIG_GCRYPT=y" >> $config_host_mak > + if test "$gcrypt_hmac" = "yes" ; then > + echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak > + fi > +fi > +if test "$nettle" = "yes" ; then > + echo "CONFIG_NETTLE=y" >> $config_host_mak > + echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak > + echo "NETTLE_CFLAGS=$nettle_cflags" >> $config_host_mak > + echo "NETTLE_LIBS=$nettle_libs" >> $config_host_mak > +fi > +if test "$qemu_private_xts" = "yes" ; then > + echo "CONFIG_QEMU_PRIVATE_XTS=y" >> $config_host_mak > +fi > +if test "$tasn1" = "yes" ; then > + echo "CONFIG_TASN1=y" >> $config_host_mak > +fi > +if test "$auth_pam" = "yes" ; then > + echo "CONFIG_AUTH_PAM=y" >> $config_host_mak > +fi > +if test "$have_ifaddrs_h" = "yes" ; then > + echo "HAVE_IFADDRS_H=y" >> $config_host_mak > +fi > +if test "$have_drm_h" = "yes" ; then > + echo "HAVE_DRM_H=y" >> $config_host_mak > +fi > +if test "$have_broken_size_max" = "yes" ; then > + echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak > +fi > +if test "$have_openpty" = "yes" ; then > + echo "HAVE_OPENPTY=y" >> $config_host_mak > +fi > +if test "$have_sys_signal_h" = "yes" ; then > + echo "HAVE_SYS_SIGNAL_H=y" >> $config_host_mak > +fi > + > +# Work around a system header bug with some kernel/XFS header > +# versions where they both try to define 'struct fsxattr': > +# xfs headers will not try to redefine structs from linux headers > +# if this macro is set. > +if test "$have_fsxattr" = "yes" ; then > + echo "HAVE_FSXATTR=y" >> $config_host_mak > +fi > +if test "$have_copy_file_range" = "yes" ; then > + echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak > +fi > +if test "$vte" = "yes" ; then > + echo "CONFIG_VTE=y" >> $config_host_mak > + echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak > + echo "VTE_LIBS=$vte_libs" >> $config_host_mak > +fi > +if test "$virglrenderer" = "yes" ; then > + echo "CONFIG_VIRGL=y" >> $config_host_mak > + echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak > + echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak > +fi > +if test "$xen" = "yes" ; then > + echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak > + echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak > + echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak > + echo "XEN_LIBS=$xen_libs" >> $config_host_mak > +fi > +if test "$linux_aio" = "yes" ; then > + echo "CONFIG_LINUX_AIO=y" >> $config_host_mak > +fi > +if test "$linux_io_uring" = "yes" ; then > + echo "CONFIG_LINUX_IO_URING=y" >> $config_host_mak > + echo "LINUX_IO_URING_CFLAGS=$linux_io_uring_cflags" >> $config_host_mak > + echo "LINUX_IO_URING_LIBS=$linux_io_uring_libs" >> $config_host_mak > +fi > +if test "$attr" = "yes" ; then > + echo "CONFIG_ATTR=y" >> $config_host_mak > + echo "LIBATTR_LIBS=$libattr_libs" >> $config_host_mak > +fi > +if test "$libattr" = "yes" ; then > + echo "CONFIG_LIBATTR=y" >> $config_host_mak > +fi > +if test "$virtfs" = "yes" ; then > + echo "CONFIG_VIRTFS=y" >> $config_host_mak > +fi > +if test "$mpath" = "yes" ; then > + echo "CONFIG_MPATH=y" >> $config_host_mak > + if test "$mpathpersist_new_api" = "yes"; then > + echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak > + fi > +fi > +if test "$vhost_scsi" = "yes" ; then > + echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak > +fi > +if test "$vhost_net" = "yes" ; then > + echo "CONFIG_VHOST_NET=y" >> $config_host_mak > +fi > +if test "$vhost_net_user" = "yes" ; then > + echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak > +fi > +if test "$vhost_net_vdpa" = "yes" ; then > + echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak > +fi > +if test "$vhost_crypto" = "yes" ; then > + echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak > +fi > +if test "$vhost_vsock" = "yes" ; then > + echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak > + if test "$vhost_user" = "yes" ; then > + echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak > + fi > +fi > +if test "$vhost_kernel" = "yes" ; then > + echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak > +fi > +if test "$vhost_user" = "yes" ; then > + echo "CONFIG_VHOST_USER=y" >> $config_host_mak > +fi > +if test "$vhost_vdpa" = "yes" ; then > + echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak > +fi > +if test "$vhost_user_fs" = "yes" ; then > + echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak > +fi > +if test "$blobs" = "yes" ; then > + echo "INSTALL_BLOBS=yes" >> $config_host_mak > +fi > +if test "$iovec" = "yes" ; then > + echo "CONFIG_IOVEC=y" >> $config_host_mak > +fi > +if test "$preadv" = "yes" ; then > + echo "CONFIG_PREADV=y" >> $config_host_mak > +fi > +if test "$fdt" != "no" ; then > + echo "CONFIG_FDT=y" >> $config_host_mak > + echo "FDT_CFLAGS=$fdt_cflags" >> $config_host_mak > + echo "FDT_LIBS=$fdt_ldflags $fdt_libs" >> $config_host_mak > +fi > +if test "$membarrier" = "yes" ; then > + echo "CONFIG_MEMBARRIER=y" >> $config_host_mak > +fi > +if test "$signalfd" = "yes" ; then > + echo "CONFIG_SIGNALFD=y" >> $config_host_mak > +fi > +if test "$optreset" = "yes" ; then > + echo "HAVE_OPTRESET=y" >> $config_host_mak > +fi > +if test "$tcg" = "yes"; then > + echo "CONFIG_TCG=y" >> $config_host_mak > + if test "$tcg_interpreter" = "yes" ; then > + echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak > + fi > +fi > +if test "$fdatasync" = "yes" ; then > + echo "CONFIG_FDATASYNC=y" >> $config_host_mak > +fi > +if test "$madvise" = "yes" ; then > + echo "CONFIG_MADVISE=y" >> $config_host_mak > +fi > +if test "$posix_madvise" = "yes" ; then > + echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak > +fi > +if test "$posix_memalign" = "yes" ; then > + echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak > +fi > +if test "$spice" = "yes" ; then > + echo "CONFIG_SPICE=y" >> $config_host_mak > + echo "SPICE_CFLAGS=$spice_cflags" >> $config_host_mak > + echo "SPICE_LIBS=$spice_libs" >> $config_host_mak > +fi > + > +if test "$smartcard" = "yes" ; then > + echo "CONFIG_SMARTCARD=y" >> $config_host_mak > + echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak > + echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak > +fi > + > +if test "$libusb" = "yes" ; then > + echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak > + echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak > + echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak > +fi > + > +if test "$usb_redir" = "yes" ; then > + echo "CONFIG_USB_REDIR=y" >> $config_host_mak > + echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak > + echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak > +fi > + > +if test "$opengl" = "yes" ; then > + echo "CONFIG_OPENGL=y" >> $config_host_mak > + echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak > + if test "$opengl_dmabuf" = "yes" ; then > + echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak > + fi > +fi > + > +if test "$gbm" = "yes" ; then > + echo "CONFIG_GBM=y" >> $config_host_mak > + echo "GBM_LIBS=$gbm_libs" >> $config_host_mak > + echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak > +fi > + > + > +if test "$malloc_trim" = "yes" ; then > + echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak > +fi > + > +if test "$avx2_opt" = "yes" ; then > + echo "CONFIG_AVX2_OPT=y" >> $config_host_mak > +fi > + > +if test "$avx512f_opt" = "yes" ; then > + echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak > +fi > + > +if test "$lzo" = "yes" ; then > + echo "CONFIG_LZO=y" >> $config_host_mak > + echo "LZO_LIBS=$lzo_libs" >> $config_host_mak > +fi > + > +if test "$snappy" = "yes" ; then > + echo "CONFIG_SNAPPY=y" >> $config_host_mak > + echo "SNAPPY_LIBS=$snappy_libs" >> $config_host_mak > +fi > + > +if test "$bzip2" = "yes" ; then > + echo "CONFIG_BZIP2=y" >> $config_host_mak > + echo "BZIP2_LIBS=-lbz2" >> $config_host_mak > +fi > + > +if test "$lzfse" = "yes" ; then > + echo "CONFIG_LZFSE=y" >> $config_host_mak > + echo "LZFSE_LIBS=-llzfse" >> $config_host_mak > +fi > + > +if test "$zstd" = "yes" ; then > + echo "CONFIG_ZSTD=y" >> $config_host_mak > + echo "ZSTD_CFLAGS=$zstd_cflags" >> $config_host_mak > + echo "ZSTD_LIBS=$zstd_libs" >> $config_host_mak > +fi > + > +if test "$libiscsi" = "yes" ; then > + echo "CONFIG_LIBISCSI=y" >> $config_host_mak > + echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak > + echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak > +fi > + > +if test "$libnfs" = "yes" ; then > + echo "CONFIG_LIBNFS=y" >> $config_host_mak > + echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak > +fi > + > +if test "$seccomp" = "yes"; then > + echo "CONFIG_SECCOMP=y" >> $config_host_mak > + echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak > + echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak > +fi > + > +# XXX: suppress that > +if [ "$bsd" = "yes" ] ; then > + echo "CONFIG_BSD=y" >> $config_host_mak > +fi > + > +if test "$localtime_r" = "yes" ; then > + echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak > +fi > +if test "$qom_cast_debug" = "yes" ; then > + echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak > +fi > +if test "$rbd" = "yes" ; then > + echo "CONFIG_RBD=y" >> $config_host_mak > + echo "RBD_LIBS=$rbd_libs" >> $config_host_mak > +fi > + > +echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak > +if test "$coroutine_pool" = "yes" ; then > + echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak > +else > + echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak > +fi > + > +if test "$debug_stack_usage" = "yes" ; then > + echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak > +fi > + > +if test "$crypto_afalg" = "yes" ; then > + echo "CONFIG_AF_ALG=y" >> $config_host_mak > +fi > + > +if test "$open_by_handle_at" = "yes" ; then > + echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak > +fi > + > +if test "$linux_magic_h" = "yes" ; then > + echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak > +fi > + > +if test "$valgrind_h" = "yes" ; then > + echo "CONFIG_VALGRIND_H=y" >> $config_host_mak > +fi > + > +if test "$have_asan_iface_fiber" = "yes" ; then > + echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak > +fi > + > +if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then > + echo "CONFIG_TSAN=y" >> $config_host_mak > +fi > + > +if test "$has_environ" = "yes" ; then > + echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak > +fi > + > +if test "$cpuid_h" = "yes" ; then > + echo "CONFIG_CPUID_H=y" >> $config_host_mak > +fi > + > +if test "$int128" = "yes" ; then > + echo "CONFIG_INT128=y" >> $config_host_mak > +fi > + > +if test "$atomic128" = "yes" ; then > + echo "CONFIG_ATOMIC128=y" >> $config_host_mak > +fi > + > +if test "$cmpxchg128" = "yes" ; then > + echo "CONFIG_CMPXCHG128=y" >> $config_host_mak > +fi > + > +if test "$atomic64" = "yes" ; then > + echo "CONFIG_ATOMIC64=y" >> $config_host_mak > +fi > + > +if test "$attralias" = "yes" ; then > + echo "CONFIG_ATTRIBUTE_ALIAS=y" >> $config_host_mak > +fi > + > +if test "$getauxval" = "yes" ; then > + echo "CONFIG_GETAUXVAL=y" >> $config_host_mak > +fi > + > +if test "$glusterfs" = "yes" ; then > + echo "CONFIG_GLUSTERFS=y" >> $config_host_mak > + echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak > + echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak > +fi > + > +if test "$glusterfs_xlator_opt" = "yes" ; then > + echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak > +fi > + > +if test "$glusterfs_discard" = "yes" ; then > + echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak > +fi > + > +if test "$glusterfs_fallocate" = "yes" ; then > + echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak > +fi > + > +if test "$glusterfs_zerofill" = "yes" ; then > + echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak > +fi > + > +if test "$glusterfs_ftruncate_has_stat" = "yes" ; then > + echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak > +fi > + > +if test "$glusterfs_iocb_has_stat" = "yes" ; then > + echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak > +fi > + > +if test "$libssh" = "yes" ; then > + echo "CONFIG_LIBSSH=y" >> $config_host_mak > + echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak > + echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak > +fi > + > +if test "$live_block_migration" = "yes" ; then > + echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak > +fi > + > +if test "$tpm" = "yes"; then > + echo 'CONFIG_TPM=y' >> $config_host_mak > +fi > + > +echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak > +if have_backend "nop"; then > + echo "CONFIG_TRACE_NOP=y" >> $config_host_mak > +fi > +if have_backend "simple"; then > + echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak > + # Set the appropriate trace file. > + trace_file="\"$trace_file-\" FMT_pid" > +fi > +if have_backend "log"; then > + echo "CONFIG_TRACE_LOG=y" >> $config_host_mak > +fi > +if have_backend "ust"; then > + echo "CONFIG_TRACE_UST=y" >> $config_host_mak > + echo "LTTNG_UST_LIBS=$lttng_ust_libs" >> $config_host_mak > + echo "URCU_BP_LIBS=$urcu_bp_libs" >> $config_host_mak > +fi > +if have_backend "dtrace"; then > + echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak > + if test "$trace_backend_stap" = "yes" ; then > + echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak > + fi > +fi > +if have_backend "ftrace"; then > + if test "$linux" = "yes" ; then > + echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak > + else > + feature_not_found "ftrace(trace backend)" "ftrace requires Linux" > + fi > +fi > +if have_backend "syslog"; then > + if test "$posix_syslog" = "yes" ; then > + echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak > + else > + feature_not_found "syslog(trace backend)" "syslog not available" > + fi > +fi > +echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak > + > +if test "$rdma" = "yes" ; then > + echo "CONFIG_RDMA=y" >> $config_host_mak > + echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak > +fi > + > +if test "$pvrdma" = "yes" ; then > + echo "CONFIG_PVRDMA=y" >> $config_host_mak > +fi > + > +if test "$have_rtnetlink" = "yes" ; then > + echo "CONFIG_RTNETLINK=y" >> $config_host_mak > +fi > + > +if test "$libxml2" = "yes" ; then > + echo "CONFIG_LIBXML2=y" >> $config_host_mak > + echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak > + echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak > +fi > + > +if test "$replication" = "yes" ; then > + echo "CONFIG_REPLICATION=y" >> $config_host_mak > +fi > + > +if test "$have_af_vsock" = "yes" ; then > + echo "CONFIG_AF_VSOCK=y" >> $config_host_mak > +fi > + > +if test "$have_sysmacros" = "yes" ; then > + echo "CONFIG_SYSMACROS=y" >> $config_host_mak > +fi > + > +if test "$have_static_assert" = "yes" ; then > + echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak > +fi > + > +if test "$have_utmpx" = "yes" ; then > + echo "HAVE_UTMPX=y" >> $config_host_mak > +fi > +if test "$have_getrandom" = "yes" ; then > + echo "CONFIG_GETRANDOM=y" >> $config_host_mak > +fi > +if test "$ivshmem" = "yes" ; then > + echo "CONFIG_IVSHMEM=y" >> $config_host_mak > +fi > +if test "$capstone" != "no" ; then > + echo "CONFIG_CAPSTONE=y" >> $config_host_mak > + echo "CAPSTONE_CFLAGS=$capstone_cflags" >> $config_host_mak > + echo "CAPSTONE_LIBS=$capstone_libs" >> $config_host_mak > +fi > +if test "$debug_mutex" = "yes" ; then > + echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak > +fi > + > +# Hold two types of flag: > +# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on > +# a thread we have a handle to > +# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular > +# platform > +if test "$pthread_setname_np_w_tid" = "yes" ; then > + echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak > + echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak > +elif test "$pthread_setname_np_wo_tid" = "yes" ; then > + echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak > + echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak > +fi > + > +if test "$libpmem" = "yes" ; then > + echo "CONFIG_LIBPMEM=y" >> $config_host_mak > + echo "LIBPMEM_LIBS=$libpmem_libs" >> $config_host_mak > + echo "LIBPMEM_CFLAGS=$libpmem_cflags" >> $config_host_mak > +fi > + > +if test "$libdaxctl" = "yes" ; then > + echo "CONFIG_LIBDAXCTL=y" >> $config_host_mak > + echo "LIBDAXCTL_LIBS=$libdaxctl_libs" >> $config_host_mak > +fi > + > +if test "$bochs" = "yes" ; then > + echo "CONFIG_BOCHS=y" >> $config_host_mak > +fi > +if test "$cloop" = "yes" ; then > + echo "CONFIG_CLOOP=y" >> $config_host_mak > +fi > +if test "$dmg" = "yes" ; then > + echo "CONFIG_DMG=y" >> $config_host_mak > +fi > +if test "$qcow1" = "yes" ; then > + echo "CONFIG_QCOW1=y" >> $config_host_mak > +fi > +if test "$vdi" = "yes" ; then > + echo "CONFIG_VDI=y" >> $config_host_mak > +fi > +if test "$vvfat" = "yes" ; then > + echo "CONFIG_VVFAT=y" >> $config_host_mak > +fi > +if test "$qed" = "yes" ; then > + echo "CONFIG_QED=y" >> $config_host_mak > +fi > +if test "$parallels" = "yes" ; then > + echo "CONFIG_PARALLELS=y" >> $config_host_mak > +fi > +if test "$sheepdog" = "yes" ; then > + echo "CONFIG_SHEEPDOG=y" >> $config_host_mak > +fi > +if test "$pty_h" = "yes" ; then > + echo "HAVE_PTY_H=y" >> $config_host_mak > +fi > +if test "$have_mlockall" = "yes" ; then > + echo "HAVE_MLOCKALL=y" >> $config_host_mak > +fi > +if test "$fuzzing" = "yes" ; then > + QEMU_CFLAGS="$QEMU_CFLAGS -fsanitize=fuzzer-no-link" > +fi > + > +if test "$plugins" = "yes" ; then > + echo "CONFIG_PLUGIN=y" >> $config_host_mak > + LIBS="-ldl $LIBS" > + # Copy the export object list to the build dir > + if test "$ld_dynamic_list" = "yes" ; then > + echo "CONFIG_HAS_LD_DYNAMIC_LIST=yes" >> $config_host_mak > + ld_symbols=qemu-plugins-ld.symbols > + cp "$source_path/plugins/qemu-plugins.symbols" $ld_symbols > + elif test "$ld_exported_symbols_list" = "yes" ; then > + echo "CONFIG_HAS_LD_EXPORTED_SYMBOLS_LIST=yes" >> $config_host_mak > + ld64_symbols=qemu-plugins-ld64.symbols > + echo "# Automatically generated by configure - do not modify" > $ld64_symbols > + grep 'qemu_' "$source_path/plugins/qemu-plugins.symbols" | sed 's/;//g' | \ > + sed -E 's/^[[:space:]]*(.*)/_\1/' >> $ld64_symbols > + else > + error_exit \ > + "If \$plugins=yes, either \$ld_dynamic_list or " \ > + "\$ld_exported_symbols_list should have been set to 'yes'." > + fi > +fi > + > +if test -n "$gdb_bin" ; then > + echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak > +fi > + > +if test "$secret_keyring" = "yes" ; then > + echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak > + if test "$have_keyutils" = "yes" ; then > + echo "CONFIG_TEST_SECRET_KEYRING=y" >> $config_host_mak > + fi > +fi > + > +if test "$tcg_interpreter" = "yes"; then > + QEMU_INCLUDES="-iquote ${source_path}/tcg/tci $QEMU_INCLUDES" > +elif test "$ARCH" = "sparc64" ; then > + QEMU_INCLUDES="-iquote ${source_path}/tcg/sparc $QEMU_INCLUDES" > +elif test "$ARCH" = "s390x" ; then > + QEMU_INCLUDES="-iquote ${source_path}/tcg/s390 $QEMU_INCLUDES" > +elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then > + QEMU_INCLUDES="-iquote ${source_path}/tcg/i386 $QEMU_INCLUDES" > +elif test "$ARCH" = "ppc64" ; then > + QEMU_INCLUDES="-iquote ${source_path}/tcg/ppc $QEMU_INCLUDES" > +elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then > + QEMU_INCLUDES="-I${source_path}/tcg/riscv $QEMU_INCLUDES" > +else > + QEMU_INCLUDES="-iquote ${source_path}/tcg/${ARCH} $QEMU_INCLUDES" > +fi > + > +echo "ROMS=$roms" >> $config_host_mak > +echo "MAKE=$make" >> $config_host_mak > +echo "INSTALL=$install" >> $config_host_mak > +echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak > +echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak > +echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak > +echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak > +echo "PYTHON=$python" >> $config_host_mak > +echo "SPHINX_BUILD=$sphinx_build" >> $config_host_mak > +echo "GENISOIMAGE=$genisoimage" >> $config_host_mak > +echo "MESON=$meson" >> $config_host_mak > +echo "CC=$cc" >> $config_host_mak > +if $iasl -h > /dev/null 2>&1; then > + echo "CONFIG_IASL=$iasl" >> $config_host_mak > +fi > +echo "CXX=$cxx" >> $config_host_mak > +echo "OBJCC=$objcc" >> $config_host_mak > +echo "AR=$ar" >> $config_host_mak > +echo "ARFLAGS=$ARFLAGS" >> $config_host_mak > +echo "AS=$as" >> $config_host_mak > +echo "CCAS=$ccas" >> $config_host_mak > +echo "CPP=$cpp" >> $config_host_mak > +echo "OBJCOPY=$objcopy" >> $config_host_mak > +echo "LD=$ld" >> $config_host_mak > +echo "RANLIB=$ranlib" >> $config_host_mak > +echo "NM=$nm" >> $config_host_mak > +echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak > +echo "WINDRES=$windres" >> $config_host_mak > +echo "CFLAGS=$CFLAGS" >> $config_host_mak > +echo "CXXFLAGS=$CXXFLAGS" >> $config_host_mak > +echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak > +echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak > +echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak > +echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak > +echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak > +echo "GLIB_LIBS=$glib_libs" >> $config_host_mak > +if test "$sparse" = "yes" ; then > + echo "SPARSE_CFLAGS = -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak > +fi > +echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak > +echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak > +echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak > +echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak > +echo "LIBS+=$LIBS" >> $config_host_mak > +echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak > +echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak > +echo "EXESUF=$EXESUF" >> $config_host_mak > +echo "HOST_DSOSUF=$HOST_DSOSUF" >> $config_host_mak > +echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak > +echo "LIBS_QGA=$libs_qga" >> $config_host_mak > +echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak > +echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak > +echo "POD2MAN=$POD2MAN" >> $config_host_mak > +if test "$gcov" = "yes" ; then > + echo "CONFIG_GCOV=y" >> $config_host_mak > +fi > + > +if test "$libudev" != "no"; then > + echo "CONFIG_LIBUDEV=y" >> $config_host_mak > + echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak > +fi > +if test "$fuzzing" != "no"; then > + echo "CONFIG_FUZZ=y" >> $config_host_mak > +fi > + > +if test "$edk2_blobs" = "yes" ; then > + echo "DECOMPRESS_EDK2_BLOBS=y" >> $config_host_mak > +fi > + > +if test "$rng_none" = "yes"; then > + echo "CONFIG_RNG_NONE=y" >> $config_host_mak > +fi > + > +# use included Linux headers > +if test "$linux" = "yes" ; then > + mkdir -p linux-headers > + case "$cpu" in > + i386|x86_64|x32) > + linux_arch=x86 > + ;; > + ppc|ppc64|ppc64le) > + linux_arch=powerpc > + ;; > + s390x) > + linux_arch=s390 > + ;; > + aarch64) > + linux_arch=arm64 > + ;; > + mips64) > + linux_arch=mips > + ;; > + *) > + # For most CPUs the kernel architecture name and QEMU CPU name match. > + linux_arch="$cpu" > + ;; > + esac > + # For non-KVM architectures we will not have asm headers > + if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then > + symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm > + fi > +fi > + > +for target in $target_list; do > +target_dir="$target" > +config_target_mak=$target_dir/config-target.mak > +target_name=$(echo $target | cut -d '-' -f 1) > +target_aligned_only="no" > +case "$target_name" in > + alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb) > + target_aligned_only="yes" > + ;; > +esac > +target_bigendian="no" > +case "$target_name" in > + armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb) > + target_bigendian="yes" > + ;; > +esac > +target_softmmu="no" > +target_user_only="no" > +target_linux_user="no" > +target_bsd_user="no" > +case "$target" in > + ${target_name}-softmmu) > + target_softmmu="yes" > + ;; > + ${target_name}-linux-user) > + target_user_only="yes" > + target_linux_user="yes" > + ;; > + ${target_name}-bsd-user) > + target_user_only="yes" > + target_bsd_user="yes" > + ;; > + *) > + error_exit "Target '$target' not recognised" > + exit 1 > + ;; > +esac > + > +mkdir -p $target_dir > +echo "# Automatically generated by configure - do not modify" > $config_target_mak > + > +bflt="no" > +mttcg="no" > +interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g") > +gdb_xml_files="" > + > +TARGET_ARCH="$target_name" > +TARGET_BASE_ARCH="" > +TARGET_ABI_DIR="" > +TARGET_SYSTBL_ABI="" > +TARGET_SYSTBL="" > + > +case "$target_name" in > + i386) > + mttcg="yes" > + gdb_xml_files="i386-32bit.xml" > + TARGET_SYSTBL_ABI=i386 > + TARGET_SYSTBL=syscall_32.tbl > + ;; > + x86_64) > + TARGET_BASE_ARCH=i386 > + TARGET_SYSTBL_ABI=common,64 > + TARGET_SYSTBL=syscall_64.tbl > + mttcg="yes" > + gdb_xml_files="i386-64bit.xml" > + ;; > + alpha) > + mttcg="yes" > + TARGET_SYSTBL_ABI=common > + ;; > + arm|armeb) > + TARGET_ARCH=arm > + TARGET_SYSTBL_ABI=common,oabi > + bflt="yes" > + mttcg="yes" > + gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml arm-m-profile.xml" > + ;; > + aarch64|aarch64_be) > + TARGET_ARCH=aarch64 > + TARGET_BASE_ARCH=arm > + bflt="yes" > + mttcg="yes" > + 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" > + ;; > + avr) > + gdb_xml_files="avr-cpu.xml" > + target_compiler=$cross_cc_avr > + ;; > + cris) > + ;; > + hppa) > + mttcg="yes" > + TARGET_SYSTBL_ABI=common,32 > + ;; > + lm32) > + ;; > + m68k) > + bflt="yes" > + gdb_xml_files="cf-core.xml cf-fp.xml m68k-core.xml m68k-fp.xml" > + TARGET_SYSTBL_ABI=common > + ;; > + microblaze|microblazeel) > + TARGET_ARCH=microblaze > + TARGET_SYSTBL_ABI=common > + mttcg="yes" > + bflt="yes" > + echo "TARGET_ABI32=y" >> $config_target_mak > + ;; > + mips|mipsel) > + mttcg="yes" > + TARGET_ARCH=mips > + echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak > + TARGET_SYSTBL_ABI=o32 > + TARGET_SYSTBL=syscall_o32.tbl > + ;; > + mipsn32|mipsn32el) > + mttcg="yes" > + TARGET_ARCH=mips64 > + TARGET_BASE_ARCH=mips > + echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak > + echo "TARGET_ABI32=y" >> $config_target_mak > + TARGET_SYSTBL_ABI=n32 > + TARGET_SYSTBL=syscall_n32.tbl > + ;; > + mips64|mips64el) > + mttcg="no" > + TARGET_ARCH=mips64 > + TARGET_BASE_ARCH=mips > + echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak > + TARGET_SYSTBL_ABI=n64 > + TARGET_SYSTBL=syscall_n64.tbl > + ;; > + moxie) > + ;; > + nios2) > + ;; > + or1k) > + TARGET_ARCH=openrisc > + TARGET_BASE_ARCH=openrisc > + ;; > + ppc) > + gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml" > + TARGET_SYSTBL_ABI=common,nospu,32 > + ;; > + ppc64) > + TARGET_BASE_ARCH=ppc > + TARGET_ABI_DIR=ppc > + TARGET_SYSTBL_ABI=common,nospu,64 > + mttcg=yes > + gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" > + ;; > + ppc64le) > + TARGET_ARCH=ppc64 > + TARGET_BASE_ARCH=ppc > + TARGET_ABI_DIR=ppc > + TARGET_SYSTBL_ABI=common,nospu,64 > + mttcg=yes > + gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" > + ;; > + ppc64abi32) > + TARGET_ARCH=ppc64 > + TARGET_BASE_ARCH=ppc > + TARGET_ABI_DIR=ppc > + TARGET_SYSTBL_ABI=common,nospu,32 > + echo "TARGET_ABI32=y" >> $config_target_mak > + gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml" > + ;; > + riscv32) > + TARGET_BASE_ARCH=riscv > + TARGET_ABI_DIR=riscv > + mttcg=yes > + gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-32bit-csr.xml riscv-32bit-virtual.xml" > + ;; > + riscv64) > + TARGET_BASE_ARCH=riscv > + TARGET_ABI_DIR=riscv > + mttcg=yes > + gdb_xml_files="riscv-64bit-cpu.xml riscv-32bit-fpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml riscv-64bit-virtual.xml" > + ;; > + rx) > + TARGET_ARCH=rx > + bflt="yes" > + target_compiler=$cross_cc_rx > + gdb_xml_files="rx-core.xml" > + ;; > + sh4|sh4eb) > + TARGET_ARCH=sh4 > + TARGET_SYSTBL_ABI=common > + bflt="yes" > + ;; > + sparc) > + TARGET_SYSTBL_ABI=common,32 > + ;; > + sparc64) > + TARGET_BASE_ARCH=sparc > + TARGET_SYSTBL_ABI=common,64 > + ;; > + sparc32plus) > + TARGET_ARCH=sparc64 > + TARGET_BASE_ARCH=sparc > + TARGET_ABI_DIR=sparc > + TARGET_SYSTBL_ABI=common,32 > + echo "TARGET_ABI32=y" >> $config_target_mak > + ;; > + s390x) > + TARGET_SYSTBL_ABI=common,64 > + mttcg=yes > + gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml" > + ;; > + tilegx) > + ;; > + tricore) > + ;; > + unicore32) > + ;; > + xtensa|xtensaeb) > + TARGET_ARCH=xtensa > + TARGET_SYSTBL_ABI=common > + bflt="yes" > + mttcg="yes" > + ;; > + *) > + error_exit "Unsupported target CPU" > + ;; > +esac > +# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH > +if [ "$TARGET_BASE_ARCH" = "" ]; then > + TARGET_BASE_ARCH=$TARGET_ARCH > +fi > +if [ "$TARGET_SYSTBL_ABI" != "" ] && [ "$TARGET_SYSTBL" = "" ]; then > + TARGET_SYSTBL=syscall.tbl > +fi > + > +upper() { > + echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]' > +} > + > +target_arch_name="$(upper $TARGET_ARCH)" > +echo "TARGET_$target_arch_name=y" >> $config_target_mak > +echo "TARGET_NAME=$target_name" >> $config_target_mak > +echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak > +if [ "$TARGET_ABI_DIR" = "" ]; then > + TARGET_ABI_DIR=$TARGET_ARCH > +fi > +echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak > +if [ "$HOST_VARIANT_DIR" != "" ]; then > + echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak > +fi > +if [ "$TARGET_SYSTBL_ABI" != "" ]; then > + echo "TARGET_SYSTBL_ABI=$TARGET_SYSTBL_ABI" >> $config_target_mak > + echo "TARGET_SYSTBL=$TARGET_SYSTBL" >> $config_target_mak > +fi > + > +if supported_xen_target $target; then > + echo "CONFIG_XEN=y" >> $config_target_mak > + if test "$xen_pci_passthrough" = yes; then > + echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak" > + fi > +fi > +if supported_kvm_target $target; then > + echo "CONFIG_KVM=y" >> $config_target_mak > +fi > +if supported_hax_target $target; then > + echo "CONFIG_HAX=y" >> $config_target_mak > +fi > +if supported_hvf_target $target; then > + echo "CONFIG_HVF=y" >> $config_target_mak > +fi > +if supported_whpx_target $target; then > + echo "CONFIG_WHPX=y" >> $config_target_mak > +fi > +if test "$target_aligned_only" = "yes" ; then > + echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak > +fi > +if test "$target_bigendian" = "yes" ; then > + echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak > +fi > +if test "$target_softmmu" = "yes" ; then > + echo "CONFIG_SOFTMMU=y" >> $config_target_mak > + if test "$mttcg" = "yes" ; then > + echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak > + fi > +fi > +if test "$target_user_only" = "yes" ; then > + echo "CONFIG_USER_ONLY=y" >> $config_target_mak > + echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak > + symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" > +else > + symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" > +fi > +if test "$target_linux_user" = "yes" ; then > + echo "CONFIG_LINUX_USER=y" >> $config_target_mak > +fi > +list="" > +if test ! -z "$gdb_xml_files" ; then > + for x in $gdb_xml_files; do > + list="$list gdb-xml/$x" > + done > + echo "TARGET_XML_FILES=$list" >> $config_target_mak > +fi > + > +if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then > + echo "TARGET_HAS_BFLT=y" >> $config_target_mak > +fi > +if test "$target_bsd_user" = "yes" ; then > + echo "CONFIG_BSD_USER=y" >> $config_target_mak > +fi > + > + > +# generate QEMU_CFLAGS/QEMU_LDFLAGS for targets > + > +disas_config() { > + echo "CONFIG_${1}_DIS=y" >> $config_target_mak > + echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak > +} > + > +for i in $ARCH $TARGET_BASE_ARCH ; do > + case "$i" in > + alpha) > + disas_config "ALPHA" > + ;; > + aarch64) > + if test -n "${cxx}"; then > + disas_config "ARM_A64" > + fi > + ;; > + arm) > + disas_config "ARM" > + if test -n "${cxx}"; then > + disas_config "ARM_A64" > + fi > + ;; > + avr) > + disas_config "AVR" > + ;; > + cris) > + disas_config "CRIS" > + ;; > + hppa) > + disas_config "HPPA" > + ;; > + i386|x86_64|x32) > + disas_config "I386" > + ;; > + lm32) > + disas_config "LM32" > + ;; > + m68k) > + disas_config "M68K" > + ;; > + microblaze*) > + disas_config "MICROBLAZE" > + ;; > + mips*) > + disas_config "MIPS" > + if test -n "${cxx}"; then > + disas_config "NANOMIPS" > + fi > + ;; > + moxie*) > + disas_config "MOXIE" > + ;; > + nios2) > + disas_config "NIOS2" > + ;; > + or1k) > + disas_config "OPENRISC" > + ;; > + ppc*) > + disas_config "PPC" > + ;; > + riscv*) > + disas_config "RISCV" > + ;; > + rx) > + disas_config "RX" > + ;; > + s390*) > + disas_config "S390" > + ;; > + sh4) > + disas_config "SH4" > + ;; > + sparc*) > + disas_config "SPARC" > + ;; > + xtensa*) > + disas_config "XTENSA" > + ;; > + esac > +done > +if test "$tcg_interpreter" = "yes" ; then > + disas_config "TCI" > +fi > + > +done # for target in $targets > + > +if [ "$fdt" = "git" ]; then > + subdirs="$subdirs dtc" > +fi > +if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then > + subdirs="$subdirs capstone" > +fi > +echo "SUBDIRS=$subdirs" >> $config_host_mak > +if test -n "$LIBCAPSTONE"; then > + echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak > +fi > + > +if test "$numa" = "yes"; then > + echo "CONFIG_NUMA=y" >> $config_host_mak > + echo "NUMA_LIBS=$numa_libs" >> $config_host_mak > +fi > + > +if test "$ccache_cpp2" = "yes"; then > + echo "export CCACHE_CPP2=y" >> $config_host_mak > +fi > + > +if test "$safe_stack" = "yes"; then > + echo "CONFIG_SAFESTACK=y" >> $config_host_mak > +fi > + > +# If we're using a separate build tree, set it up now. > +# DIRS are directories which we simply mkdir in the build tree; > +# LINKS are things to symlink back into the source tree > +# (these can be both files and directories). > +# Caution: do not add files or directories here using wildcards. This > +# will result in problems later if a new file matching the wildcard is > +# added to the source tree -- nothing will cause configure to be rerun > +# so the build tree will be missing the link back to the new file, and > +# tests might fail. Prefer to keep the relevant files in their own > +# directory and symlink the directory instead. > +DIRS="tests tests/tcg tests/tcg/lm32 tests/qapi-schema tests/qtest/libqos" > +DIRS="$DIRS tests/qtest tests/qemu-iotests tests/vm tests/fp tests/qgraph" > +DIRS="$DIRS docs docs/interop fsdev scsi" > +DIRS="$DIRS pc-bios/optionrom pc-bios/s390-ccw" > +DIRS="$DIRS roms/seabios" > +LINKS="Makefile" > +LINKS="$LINKS tests/tcg/lm32/Makefile" > +LINKS="$LINKS tests/tcg/Makefile.target" > +LINKS="$LINKS pc-bios/optionrom/Makefile" > +LINKS="$LINKS pc-bios/s390-ccw/Makefile" > +LINKS="$LINKS roms/seabios/Makefile" > +LINKS="$LINKS pc-bios/qemu-icon.bmp" > +LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit > +LINKS="$LINKS tests/acceptance tests/data" > +LINKS="$LINKS tests/qemu-iotests/check" > +LINKS="$LINKS python" > +for bios_file in \ > + $source_path/pc-bios/*.bin \ > + $source_path/pc-bios/*.elf \ > + $source_path/pc-bios/*.lid \ > + $source_path/pc-bios/*.rom \ > + $source_path/pc-bios/*.dtb \ > + $source_path/pc-bios/*.img \ > + $source_path/pc-bios/openbios-* \ > + $source_path/pc-bios/u-boot.* \ > + $source_path/pc-bios/edk2-*.fd.bz2 \ > + $source_path/pc-bios/palcode-* > +do > + LINKS="$LINKS pc-bios/$(basename $bios_file)" > +done > +mkdir -p $DIRS > +for f in $LINKS ; do > + if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then > + symlink "$source_path/$f" "$f" > + fi > +done > + > +(for i in $cross_cc_vars; do > + export $i > +done > +export target_list source_path use_containers > +$source_path/tests/tcg/configure.sh) > + > +# temporary config to build submodules > +for rom in seabios; do > + config_mak=roms/$rom/config.mak > + echo "# Automatically generated by configure - do not modify" > $config_mak > + echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak > + echo "AS=$as" >> $config_mak > + echo "CCAS=$ccas" >> $config_mak > + echo "CC=$cc" >> $config_mak > + echo "BCC=bcc" >> $config_mak > + echo "CPP=$cpp" >> $config_mak > + echo "OBJCOPY=objcopy" >> $config_mak > + echo "IASL=$iasl" >> $config_mak > + echo "LD=$ld" >> $config_mak > + echo "RANLIB=$ranlib" >> $config_mak > +done > + > +# set up qemu-iotests in this build directory > +iotests_common_env="tests/qemu-iotests/common.env" > + > +echo "# Automatically generated by configure - do not modify" > "$iotests_common_env" > +echo >> "$iotests_common_env" > +echo "export PYTHON='$python'" >> "$iotests_common_env" > + > +if test "$skip_meson" = no; then > +cross="config-meson.cross.new" > +meson_quote() { > + echo "['$(echo $* | sed "s/ /','/g")']" > +} > + > +echo "# Automatically generated by configure - do not modify" > $cross > +echo "[properties]" >> $cross > +test -z "$cxx" && echo "link_language = 'c'" >> $cross > +echo "[binaries]" >> $cross > +echo "c = $(meson_quote $cc)" >> $cross > +test -n "$cxx" && echo "cpp = $(meson_quote $cxx)" >> $cross > +echo "ar = $(meson_quote $ar)" >> $cross > +echo "nm = $(meson_quote $nm)" >> $cross > +echo "pkgconfig = $(meson_quote $pkg_config_exe)" >> $cross > +echo "ranlib = $(meson_quote $ranlib)" >> $cross > +echo "strip = $(meson_quote $strip)" >> $cross > +echo "windres = $(meson_quote $windres)" >> $cross > +if test -n "$cross_prefix"; then > + cross_arg="--cross-file config-meson.cross" > + # Hack: Meson expects an absolute path for the *build* machine > + # for the prefix, so add a slash in front of a Windows path that > + # includes a drive letter. > + # > + # See https://github.com/mesonbuild/meson/issues/7577. > + echo "[host_machine]" >> $cross > + if test "$mingw32" = "yes" ; then > + echo "system = 'windows'" >> $cross > + case $prefix in > + ?:*) pre_prefix=/ ;; > + esac > + fi > + case "$ARCH" in > + i386|x86_64) > + echo "cpu_family = 'x86'" >> $cross > + ;; > + ppc64le) > + echo "cpu_family = 'ppc64'" >> $cross > + ;; > + *) > + echo "cpu_family = '$ARCH'" >> $cross > + ;; > + esac > + echo "cpu = '$cpu'" >> $cross > + if test "$bigendian" = "yes" ; then > + echo "endian = 'big'" >> $cross > + else > + echo "endian = 'little'" >> $cross > + fi > +else > + cross_arg="--native-file config-meson.cross" > +fi > +mv $cross config-meson.cross > + > +rm -rf meson-private meson-info meson-logs > +NINJA=${ninja:-${build_path}/ninjatool} $meson setup \ > + --prefix "${pre_prefix}$prefix" \ > + --libdir "${pre_prefix}$libdir" \ > + --libexecdir "${pre_prefix}$libexecdir" \ > + --bindir "${pre_prefix}$bindir" \ > + --includedir "${pre_prefix}$includedir" \ > + --datadir "${pre_prefix}$datadir" \ > + --mandir "${pre_prefix}$mandir" \ > + --sysconfdir "${pre_prefix}$sysconfdir" \ > + --localstatedir "${pre_prefix}$local_statedir" \ > + -Ddocdir="${pre_prefix}$docdir" \ > + -Dqemu_suffix="$qemu_suffix" \ > + -Doptimization=$(if test "$debug" = yes; then echo 0; else echo 2; fi) \ > + -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo false; fi) \ > + -Dwerror=$(if test "$werror" = yes; then echo true; else echo false; fi) \ > + -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo false; fi) \ > + -Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \ > + -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \ > + -Dsdl=$sdl -Dsdl_image=$sdl_image \ > + -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg -Dvnc_png=$vnc_png \ > + -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f\ > + $cross_arg \ > + "$build_path" "$source_path" > + > +if test "$?" -ne 0 ; then > + error_exit "meson setup failed" > +fi > +touch ninjatool.stamp > +fi > + > +# Save the configure command line for later reuse. > +cat <config.status > +#!/bin/sh > +# Generated by configure. > +# Run this file to recreate the current configuration. > +# Compiler output produced by configure, useful for debugging > +# configure, is in config.log if it exists. > +EOD > + > +preserve_env() { > + envname=$1 > + > + eval envval=\$$envname > + > + if test -n "$envval" > + then > + echo "$envname='$envval'" >> config.status > + echo "export $envname" >> config.status > + else > + echo "unset $envname" >> config.status > + fi > +} > + > +# Preserve various env variables that influence what > +# features/build target configure will detect > +preserve_env AR > +preserve_env AS > +preserve_env CC > +preserve_env CPP > +preserve_env CXX > +preserve_env INSTALL > +preserve_env LD > +preserve_env LD_LIBRARY_PATH > +preserve_env LIBTOOL > +preserve_env MAKE > +preserve_env NM > +preserve_env OBJCOPY > +preserve_env PATH > +preserve_env PKG_CONFIG > +preserve_env PKG_CONFIG_LIBDIR > +preserve_env PKG_CONFIG_PATH > +preserve_env PYTHON > +preserve_env SDL2_CONFIG > +preserve_env SMBD > +preserve_env STRIP > +preserve_env WINDRES > + > +printf "exec" >>config.status > +for i in "$0" "$@"; do > + test "$i" = --skip-meson || printf " '%s'" "$i" >>config.status > +done > +echo ' "$@"' >>config.status > +chmod +x config.status > + > +rm -r "$TMPDIR1" > -- > 2.28.0.windows.1 > > Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|