2003-03-07 07:23:54 +08:00
|
|
|
#!/bin/sh
|
|
|
|
#
|
2003-03-24 04:17:16 +08:00
|
|
|
# qemu configure script (c) 2003 Fabrice Bellard
|
2003-03-07 07:23:54 +08:00
|
|
|
#
|
2014-05-24 00:07:24 +08:00
|
|
|
|
2014-05-28 18:39:17 +08:00
|
|
|
# Unset some variables known to interfere with behavior of common tools,
|
|
|
|
# just as autoconf does.
|
|
|
|
CLICOLOR_FORCE= GREP_OPTIONS=
|
|
|
|
unset CLICOLOR_FORCE GREP_OPTIONS
|
|
|
|
|
2015-10-29 01:56:40 +08:00
|
|
|
# Don't allow CCACHE, if present, to use cached results of compile tests!
|
|
|
|
export CCACHE_RECACHE=yes
|
|
|
|
|
2020-08-21 18:22:04 +08:00
|
|
|
# make source path absolute
|
|
|
|
source_path=$(cd "$(dirname -- "$0")"; pwd)
|
|
|
|
|
|
|
|
if test "$PWD" = "$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
|
|
|
|
|
2014-05-24 00:07:24 +08:00
|
|
|
# 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
|
2003-03-07 07:23:54 +08:00
|
|
|
fi
|
|
|
|
|
2014-05-24 00:07:24 +08:00
|
|
|
TMPB="qemu-conf"
|
|
|
|
TMPC="${TMPDIR1}/${TMPB}.c"
|
2014-01-03 10:12:46 +08:00
|
|
|
TMPO="${TMPDIR1}/${TMPB}.o"
|
2014-02-26 02:27:49 +08:00
|
|
|
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
|
2014-05-24 00:07:24 +08:00
|
|
|
TMPE="${TMPDIR1}/${TMPB}.exe"
|
2018-10-22 01:56:29 +08:00
|
|
|
TMPTXT="${TMPDIR1}/${TMPB}.txt"
|
2003-03-07 07:23:54 +08:00
|
|
|
|
2010-04-23 19:44:10 +08:00
|
|
|
rm -f config.log
|
2008-11-30 04:09:56 +08:00
|
|
|
|
2011-11-24 01:26:44 +08:00
|
|
|
# Print a helpful header at the top of config.log
|
|
|
|
echo "# QEMU configure log $(date)" >> config.log
|
2012-03-07 20:16:29 +08:00
|
|
|
printf "# Configured with:" >> config.log
|
|
|
|
printf " '%s'" "$0" "$@" >> config.log
|
|
|
|
echo >> config.log
|
2011-11-24 01:26:44 +08:00
|
|
|
echo "#" >> config.log
|
|
|
|
|
2020-09-08 19:20:45 +08:00
|
|
|
quote_sh() {
|
|
|
|
printf "%s" "$1" | sed "s,','\\\\'',g; s,.*,'&',"
|
|
|
|
}
|
|
|
|
|
2017-07-03 22:58:28 +08:00
|
|
|
print_error() {
|
|
|
|
(echo
|
2013-04-08 19:11:26 +08:00
|
|
|
echo "ERROR: $1"
|
|
|
|
while test -n "$2"; do
|
|
|
|
echo " $2"
|
|
|
|
shift
|
|
|
|
done
|
2017-07-03 22:58:28 +08:00
|
|
|
echo) >&2
|
|
|
|
}
|
|
|
|
|
|
|
|
error_exit() {
|
|
|
|
print_error "$@"
|
2013-04-08 19:11:26 +08:00
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2014-02-26 02:27:49 +08:00
|
|
|
do_compiler() {
|
|
|
|
# Run the compiler, capturing its output to the log. First argument
|
|
|
|
# is compiler binary to execute.
|
2020-07-18 21:19:10 +08:00
|
|
|
compiler="$1"
|
2014-02-26 02:27:49 +08:00
|
|
|
shift
|
2017-09-25 23:41:03 +08:00
|
|
|
if test -n "$BASH_VERSION"; then eval '
|
|
|
|
echo >>config.log "
|
|
|
|
funcs: ${FUNCNAME[*]}
|
|
|
|
lines: ${BASH_LINENO[*]}"
|
|
|
|
'; fi
|
2014-02-26 02:27:49 +08:00
|
|
|
echo $compiler "$@" >> config.log
|
|
|
|
$compiler "$@" >> config.log 2>&1 || return $?
|
2012-07-18 22:10:28 +08:00
|
|
|
# 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
|
2014-02-26 02:27:49 +08:00
|
|
|
echo $compiler -Werror "$@" >> config.log
|
|
|
|
$compiler -Werror "$@" >> config.log 2>&1 && return $?
|
2013-04-08 19:11:26 +08:00
|
|
|
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."
|
2012-07-18 22:10:28 +08:00
|
|
|
}
|
|
|
|
|
2014-02-26 02:27:49 +08:00
|
|
|
do_cc() {
|
2021-09-29 23:14:43 +08:00
|
|
|
do_compiler "$cc" $CPU_CFLAGS "$@"
|
2014-02-26 02:27:49 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
do_cxx() {
|
2021-09-29 23:14:43 +08:00
|
|
|
do_compiler "$cxx" $CPU_CFLAGS "$@"
|
2014-02-26 02:27:49 +08:00
|
|
|
}
|
|
|
|
|
2020-06-18 04:13:06 +08:00
|
|
|
# Append $2 to the variable named $1, with space separation
|
|
|
|
add_to() {
|
|
|
|
eval $1=\${$1:+\"\$$1 \"}\$2
|
|
|
|
}
|
|
|
|
|
2014-02-26 02:27:49 +08:00
|
|
|
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.
|
2021-11-08 15:58:23 +08:00
|
|
|
QEMU_CXXFLAGS="-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
|
2021-06-15 07:31:36 +08:00
|
|
|
CONFIGURE_CXXFLAGS=$(echo "$CONFIGURE_CFLAGS" | sed s/-std=gnu11/-std=gnu++11/)
|
2014-02-26 02:27:49 +08:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2009-08-03 20:46:03 +08:00
|
|
|
compile_object() {
|
2015-03-26 06:57:39 +08:00
|
|
|
local_cflags="$1"
|
2021-11-05 17:09:26 +08:00
|
|
|
do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
|
2009-08-03 20:46:03 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
compile_prog() {
|
|
|
|
local_cflags="$1"
|
|
|
|
local_ldflags="$2"
|
2021-11-05 17:09:26 +08:00
|
|
|
do_cc $CFLAGS $EXTRA_CFLAGS $CONFIGURE_CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC \
|
|
|
|
$LDFLAGS $EXTRA_LDFLAGS $CONFIGURE_LDFLAGS $QEMU_LDFLAGS $local_ldflags
|
2009-08-03 20:46:03 +08:00
|
|
|
}
|
|
|
|
|
2010-12-23 18:43:58 +08:00
|
|
|
# symbolically link $1 to $2. Portable version of "ln -sf".
|
|
|
|
symlink() {
|
2012-03-19 20:20:47 +08:00
|
|
|
rm -rf "$2"
|
2012-06-06 16:57:00 +08:00
|
|
|
mkdir -p "$(dirname "$2")"
|
2012-03-19 20:20:47 +08:00
|
|
|
ln -s "$1" "$2"
|
2010-12-23 18:43:58 +08:00
|
|
|
}
|
|
|
|
|
2010-01-29 05:26:51 +08:00
|
|
|
# check whether a command is available to this shell (may be either an
|
|
|
|
# executable or a builtin)
|
|
|
|
has() {
|
|
|
|
type "$1" >/dev/null 2>&1
|
|
|
|
}
|
|
|
|
|
2019-08-21 15:21:16 +08:00
|
|
|
version_ge () {
|
2021-02-02 21:39:52 +08:00
|
|
|
local_ver1=$(expr "$1" : '\([0-9.]*\)' | tr . ' ')
|
|
|
|
local_ver2=$(echo "$2" | tr . ' ')
|
2019-08-21 15:21:16 +08:00
|
|
|
while true; do
|
|
|
|
set x $local_ver1
|
|
|
|
local_first=${2-0}
|
2020-08-22 04:35:58 +08:00
|
|
|
# 'shift 2' if $2 is set, or 'shift' if $2 is not set
|
|
|
|
shift ${2:+2}
|
2019-08-21 15:21:16 +08:00
|
|
|
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
|
2020-08-22 04:35:58 +08:00
|
|
|
shift ${2:+2}
|
2019-08-21 15:21:16 +08:00
|
|
|
local_ver2=$*
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2012-09-17 17:59:41 +08:00
|
|
|
glob() {
|
|
|
|
eval test -z '"${1#'"$2"'}"'
|
|
|
|
}
|
|
|
|
|
2017-08-23 18:16:23 +08:00
|
|
|
ld_has() {
|
|
|
|
$ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
|
|
|
|
}
|
|
|
|
|
2019-05-26 22:47:47 +08:00
|
|
|
if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
|
|
|
|
then
|
|
|
|
error_exit "main directory cannot contain spaces nor colons"
|
|
|
|
fi
|
|
|
|
|
2019-05-26 22:47:46 +08:00
|
|
|
# default parameters
|
2009-08-03 20:45:55 +08:00
|
|
|
cpu=""
|
2013-07-24 23:56:03 +08:00
|
|
|
iasl="iasl"
|
2003-10-01 04:54:24 +08:00
|
|
|
interp_prefix="/usr/gnemul/qemu-%M"
|
2003-06-10 03:53:12 +08:00
|
|
|
static="no"
|
2021-01-26 09:24:48 +08:00
|
|
|
cross_compile="no"
|
2003-03-07 07:23:54 +08:00
|
|
|
cross_prefix=""
|
2021-10-07 21:06:09 +08:00
|
|
|
audio_drv_list="default"
|
2013-05-29 19:35:40 +08:00
|
|
|
block_drv_rw_whitelist=""
|
|
|
|
block_drv_ro_whitelist=""
|
2021-07-10 00:41:41 +08:00
|
|
|
block_drv_whitelist_tools="no"
|
2012-12-07 23:39:13 +08:00
|
|
|
host_cc="cc"
|
2011-08-12 04:38:12 +08:00
|
|
|
libs_qga=""
|
2012-02-08 20:54:13 +08:00
|
|
|
debug_info="yes"
|
2020-12-05 07:06:11 +08:00
|
|
|
lto="false"
|
2014-03-29 00:19:02 +08:00
|
|
|
stack_protector=""
|
2020-05-30 04:51:21 +08:00
|
|
|
safe_stack=""
|
2019-11-28 23:35:24 +08:00
|
|
|
use_containers="yes"
|
2020-05-01 03:01:14 +08:00
|
|
|
gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
|
2008-12-30 01:14:15 +08:00
|
|
|
|
2017-09-29 18:11:58 +08:00
|
|
|
if test -e "$source_path/.git"
|
|
|
|
then
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-20 01:20:46 +08:00
|
|
|
git_submodules_action="update"
|
2017-09-29 18:11:58 +08:00
|
|
|
else
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-20 01:20:46 +08:00
|
|
|
git_submodules_action="ignore"
|
2017-09-29 18:11:58 +08:00
|
|
|
fi
|
2021-05-12 15:21:56 +08:00
|
|
|
|
|
|
|
git_submodules="ui/keycodemapdb"
|
2017-10-20 22:02:43 +08:00
|
|
|
git="git"
|
2008-12-30 01:14:15 +08:00
|
|
|
|
2012-09-27 04:04:38 +08:00
|
|
|
# Don't accept a target_list environment variable.
|
|
|
|
unset target_list
|
2019-03-19 19:59:12 +08:00
|
|
|
unset target_list_exclude
|
2010-12-23 18:43:50 +08:00
|
|
|
|
|
|
|
# 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.
|
|
|
|
|
2020-12-11 03:04:13 +08:00
|
|
|
default_feature=""
|
|
|
|
# parse CC options second
|
|
|
|
for opt do
|
|
|
|
optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
|
|
|
|
case "$opt" in
|
|
|
|
--without-default-features)
|
|
|
|
default_feature="no"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2021-11-05 17:09:26 +08:00
|
|
|
EXTRA_CFLAGS=""
|
|
|
|
EXTRA_CXXFLAGS=""
|
|
|
|
EXTRA_LDFLAGS=""
|
|
|
|
|
2020-12-11 03:04:13 +08:00
|
|
|
xen_ctrl_version="$default_feature"
|
|
|
|
xfs="$default_feature"
|
|
|
|
membarrier="$default_feature"
|
2021-07-13 17:31:55 +08:00
|
|
|
vhost_kernel="$default_feature"
|
2020-12-11 03:04:13 +08:00
|
|
|
vhost_net="$default_feature"
|
|
|
|
vhost_crypto="$default_feature"
|
|
|
|
vhost_scsi="$default_feature"
|
|
|
|
vhost_vsock="$default_feature"
|
2020-11-11 01:11:21 +08:00
|
|
|
vhost_user="no"
|
2020-12-11 03:04:13 +08:00
|
|
|
vhost_user_fs="$default_feature"
|
2021-07-13 17:31:55 +08:00
|
|
|
vhost_vdpa="$default_feature"
|
2020-12-11 03:04:13 +08:00
|
|
|
rdma="$default_feature"
|
|
|
|
pvrdma="$default_feature"
|
2010-12-23 18:43:50 +08:00
|
|
|
gprof="no"
|
|
|
|
debug_tcg="no"
|
|
|
|
debug="no"
|
2018-01-16 23:11:51 +08:00
|
|
|
sanitizers="no"
|
2020-06-13 03:02:23 +08:00
|
|
|
tsan="no"
|
2020-12-11 03:04:13 +08:00
|
|
|
fortify_source="$default_feature"
|
2010-12-23 18:43:50 +08:00
|
|
|
strip_opt="yes"
|
|
|
|
mingw32="no"
|
2012-05-02 02:45:39 +08:00
|
|
|
gcov="no"
|
2021-03-31 16:18:45 +08:00
|
|
|
EXESUF=""
|
2014-02-10 14:48:56 +08:00
|
|
|
modules="no"
|
2020-03-10 22:58:06 +08:00
|
|
|
module_upgrades="no"
|
2010-12-23 18:43:50 +08:00
|
|
|
prefix="/usr/local"
|
2020-08-26 19:04:13 +08:00
|
|
|
qemu_suffix="qemu"
|
2010-12-23 18:43:50 +08:00
|
|
|
bsd="no"
|
|
|
|
linux="no"
|
|
|
|
solaris="no"
|
|
|
|
profiler="no"
|
|
|
|
softmmu="yes"
|
|
|
|
linux_user="no"
|
|
|
|
bsd_user="no"
|
|
|
|
pkgversion=""
|
2011-11-16 02:12:17 +08:00
|
|
|
pie=""
|
2013-05-10 20:16:40 +08:00
|
|
|
qom_cast_debug="yes"
|
2016-01-07 21:55:31 +08:00
|
|
|
trace_backends="log"
|
2010-12-23 18:43:50 +08:00
|
|
|
trace_file="trace"
|
2020-12-11 03:04:13 +08:00
|
|
|
opengl="$default_feature"
|
2017-07-19 12:40:18 +08:00
|
|
|
cpuid_h="no"
|
2020-12-11 03:04:13 +08:00
|
|
|
avx2_opt="$default_feature"
|
|
|
|
guest_agent="$default_feature"
|
2013-08-07 23:40:03 +08:00
|
|
|
guest_agent_with_vss="no"
|
2015-07-08 07:10:09 +08:00
|
|
|
guest_agent_ntddscsi="no"
|
2020-12-11 03:04:13 +08:00
|
|
|
vss_win32_sdk="$default_feature"
|
2013-08-07 23:40:03 +08:00
|
|
|
win_sdk="no"
|
2020-12-11 03:04:13 +08:00
|
|
|
want_tools="$default_feature"
|
2012-02-28 19:25:50 +08:00
|
|
|
coroutine=""
|
2020-12-11 03:04:13 +08:00
|
|
|
coroutine_pool="$default_feature"
|
2016-09-27 17:58:45 +08:00
|
|
|
debug_stack_usage="no"
|
2017-07-15 02:04:05 +08:00
|
|
|
crypto_afalg="no"
|
2016-06-06 17:05:06 +08:00
|
|
|
tls_priority="NORMAL"
|
2020-12-11 03:04:13 +08:00
|
|
|
tpm="$default_feature"
|
|
|
|
live_block_migration=${default_feature:-yes}
|
|
|
|
numa="$default_feature"
|
|
|
|
replication=${default_feature:-yes}
|
|
|
|
bochs=${default_feature:-yes}
|
|
|
|
cloop=${default_feature:-yes}
|
|
|
|
dmg=${default_feature:-yes}
|
|
|
|
qcow1=${default_feature:-yes}
|
|
|
|
vdi=${default_feature:-yes}
|
|
|
|
vvfat=${default_feature:-yes}
|
|
|
|
qed=${default_feature:-yes}
|
|
|
|
parallels=${default_feature:-yes}
|
2018-06-13 20:23:08 +08:00
|
|
|
debug_mutex="no"
|
2021-07-09 22:29:57 +08:00
|
|
|
plugins="$default_feature"
|
2020-05-20 21:20:23 +08:00
|
|
|
rng_none="no"
|
2020-12-11 03:04:13 +08:00
|
|
|
secret_keyring="$default_feature"
|
2019-06-10 18:05:14 +08:00
|
|
|
meson=""
|
2021-10-07 21:08:29 +08:00
|
|
|
meson_args=""
|
2020-08-26 14:04:15 +08:00
|
|
|
ninja=""
|
2021-10-07 21:08:29 +08:00
|
|
|
gio="$default_feature"
|
2019-06-10 18:05:14 +08:00
|
|
|
skip_meson=no
|
2021-03-16 02:03:41 +08:00
|
|
|
slirp_smbd="$default_feature"
|
2010-12-23 18:43:50 +08:00
|
|
|
|
2021-10-07 21:08:29 +08:00
|
|
|
# The following Meson options are handled manually (still they
|
|
|
|
# are included in the automatically generated help message)
|
|
|
|
|
|
|
|
# 1. Track which submodules are needed
|
|
|
|
capstone="auto"
|
|
|
|
fdt="auto"
|
|
|
|
slirp="auto"
|
|
|
|
|
|
|
|
# 2. Support --with/--without option
|
|
|
|
default_devices="true"
|
|
|
|
|
|
|
|
# 3. Automatically enable/disable other options
|
|
|
|
tcg="enabled"
|
|
|
|
cfi="false"
|
|
|
|
|
|
|
|
# 4. Detection partly done in configure
|
|
|
|
xen=${default_feature:+disabled}
|
2017-03-21 22:31:57 +08:00
|
|
|
|
2020-12-11 03:04:13 +08:00
|
|
|
# parse CC options second
|
2008-12-30 01:14:15 +08:00
|
|
|
for opt do
|
2016-05-16 21:10:20 +08:00
|
|
|
optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
|
2008-12-30 01:14:15 +08:00
|
|
|
case "$opt" in
|
|
|
|
--cross-prefix=*) cross_prefix="$optarg"
|
2021-01-26 09:24:48 +08:00
|
|
|
cross_compile="yes"
|
2008-12-30 01:14:15 +08:00
|
|
|
;;
|
2010-12-23 18:43:48 +08:00
|
|
|
--cc=*) CC="$optarg"
|
2008-12-30 01:14:15 +08:00
|
|
|
;;
|
2013-08-07 23:39:36 +08:00
|
|
|
--cxx=*) CXX="$optarg"
|
|
|
|
;;
|
2009-08-03 20:45:55 +08:00
|
|
|
--cpu=*) cpu="$optarg"
|
|
|
|
;;
|
2021-11-05 17:09:26 +08:00
|
|
|
--extra-cflags=*)
|
|
|
|
EXTRA_CFLAGS="$EXTRA_CFLAGS $optarg"
|
|
|
|
EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
|
|
|
|
;;
|
|
|
|
--extra-cxxflags=*) EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $optarg"
|
2017-06-06 21:07:47 +08:00
|
|
|
;;
|
2021-11-05 17:09:26 +08:00
|
|
|
--extra-ldflags=*) EXTRA_LDFLAGS="$EXTRA_LDFLAGS $optarg"
|
2009-08-03 20:46:02 +08:00
|
|
|
;;
|
2012-02-08 20:54:13 +08:00
|
|
|
--enable-debug-info) debug_info="yes"
|
|
|
|
;;
|
|
|
|
--disable-debug-info) debug_info="no"
|
|
|
|
;;
|
2018-04-05 03:27:05 +08:00
|
|
|
--cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
|
|
|
|
;;
|
2018-04-13 18:07:58 +08:00
|
|
|
--cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
|
|
|
|
eval "cross_cc_cflags_${cc_arch}=\$optarg"
|
2019-08-07 22:35:23 +08:00
|
|
|
cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
|
2018-04-13 18:07:58 +08:00
|
|
|
;;
|
2018-04-05 03:27:05 +08:00
|
|
|
--cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
|
2019-08-07 22:35:23 +08:00
|
|
|
cc_archs="$cc_archs $cc_arch"
|
2018-04-05 03:27:05 +08:00
|
|
|
eval "cross_cc_${cc_arch}=\$optarg"
|
2019-08-07 22:35:23 +08:00
|
|
|
cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
|
2018-04-05 03:27:05 +08:00
|
|
|
;;
|
2008-12-30 01:14:15 +08:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
# OS specific
|
|
|
|
# Using uname is really, really broken. Once we have the right set of checks
|
2012-02-27 01:46:12 +08:00
|
|
|
# we can eliminate its usage altogether.
|
2008-12-30 01:14:15 +08:00
|
|
|
|
2012-12-07 23:39:13 +08:00
|
|
|
# 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
|
|
|
|
|
2013-08-07 23:39:36 +08:00
|
|
|
if test -z "${CXX}${cross_prefix}"; then
|
|
|
|
cxx="c++"
|
|
|
|
else
|
|
|
|
cxx="${CXX-${cross_prefix}g++}"
|
|
|
|
fi
|
|
|
|
|
2011-08-05 06:10:08 +08:00
|
|
|
ar="${AR-${cross_prefix}ar}"
|
2016-07-08 12:49:36 +08:00
|
|
|
as="${AS-${cross_prefix}as}"
|
2016-06-24 01:39:18 +08:00
|
|
|
ccas="${CCAS-$cc}"
|
2013-01-05 18:10:27 +08:00
|
|
|
cpp="${CPP-$cc -E}"
|
2011-08-05 06:10:08 +08:00
|
|
|
objcopy="${OBJCOPY-${cross_prefix}objcopy}"
|
|
|
|
ld="${LD-${cross_prefix}ld}"
|
2017-11-08 09:10:46 +08:00
|
|
|
ranlib="${RANLIB-${cross_prefix}ranlib}"
|
2014-09-19 03:55:08 +08:00
|
|
|
nm="${NM-${cross_prefix}nm}"
|
2011-08-05 06:10:08 +08:00
|
|
|
strip="${STRIP-${cross_prefix}strip}"
|
|
|
|
windres="${WINDRES-${cross_prefix}windres}"
|
2012-02-01 03:03:45 +08:00
|
|
|
pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
|
|
|
|
query_pkg_config() {
|
|
|
|
"${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
|
|
|
|
}
|
|
|
|
pkg_config=query_pkg_config
|
ui/sdl2 : initial port to SDL 2.0 (v2.0)
I've ported the SDL1.2 code over, and rewritten it to use the SDL2 interface.
The biggest changes were in the input handling, where SDL2 has done a major
overhaul, and I've had to include a generated translation file to get from
SDL2 codes back to qemu compatible ones. I'm still not sure how the keyboard
layout code works in qemu, so there may be further work if someone can point
me a test case that works with SDL1.2 and doesn't with SDL2.
Some SDL env vars we used to set are no longer used by SDL2,
Windows, OSX support is untested,
I don't think we can link to SDL1.2 and SDL2 at the same time, so I felt
using --with-sdlabi=2.0 to select the new code should be fine, like how
gtk does it.
v1.1: fix keys in text console
v1.2: fix shutdown, cleanups a bit of code, support ARGB cursor
v2.0: merge the SDL multihead patch into this, g_new the number of consoles
needed, wrap DCL inside per-console structure.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Fixes & improvements by kraxel:
* baum build fix
* remove text console logic
* adapt to new input core
* codestyle fixups
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2013-12-10 12:05:51 +08:00
|
|
|
sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
|
2008-12-30 01:14:15 +08:00
|
|
|
|
2009-11-11 19:50:09 +08:00
|
|
|
# default flags for all hosts
|
2016-09-12 21:10:08 +08:00
|
|
|
# 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.)
|
2021-11-08 15:58:23 +08:00
|
|
|
QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv"
|
2020-02-03 22:22:17 +08:00
|
|
|
QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
|
2013-02-23 04:08:51 +08:00
|
|
|
QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
|
2009-11-11 19:50:09 +08:00
|
|
|
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
|
2020-09-23 17:26:15 +08:00
|
|
|
|
2021-11-08 15:58:23 +08:00
|
|
|
QEMU_LDFLAGS=
|
|
|
|
|
2020-09-23 17:26:15 +08:00
|
|
|
# Flags that are needed during configure but later taken care of by Meson
|
2021-06-15 07:31:36 +08:00
|
|
|
CONFIGURE_CFLAGS="-std=gnu11 -Wall"
|
2020-09-23 17:26:15 +08:00
|
|
|
CONFIGURE_LDFLAGS=
|
2020-02-03 22:22:17 +08:00
|
|
|
|
2009-11-11 19:50:09 +08:00
|
|
|
|
2008-12-30 01:14:15 +08:00
|
|
|
check_define() {
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#if !defined($1)
|
2011-11-24 01:26:43 +08:00
|
|
|
#error $1 not defined
|
2008-12-30 01:14:15 +08:00
|
|
|
#endif
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
2009-08-03 20:46:03 +08:00
|
|
|
compile_object
|
2008-12-30 01:14:15 +08:00
|
|
|
}
|
|
|
|
|
2015-06-10 15:07:35 +08:00
|
|
|
check_include() {
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <$1>
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
|
|
|
compile_object
|
|
|
|
}
|
|
|
|
|
2015-03-26 06:57:37 +08:00
|
|
|
write_c_skeleton() {
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
2012-08-14 22:35:34 +08:00
|
|
|
if check_define __linux__ ; then
|
2021-11-08 21:47:54 +08:00
|
|
|
targetos=linux
|
2012-08-14 22:35:34 +08:00
|
|
|
elif check_define _WIN32 ; then
|
2021-11-08 21:47:54 +08:00
|
|
|
targetos=windows
|
2012-08-14 22:35:34 +08:00
|
|
|
elif check_define __OpenBSD__ ; then
|
2021-11-08 21:47:54 +08:00
|
|
|
targetos=openbsd
|
2012-08-14 22:35:34 +08:00
|
|
|
elif check_define __sun__ ; then
|
2021-11-08 21:47:54 +08:00
|
|
|
targetos=sunos
|
2012-08-14 22:35:34 +08:00
|
|
|
elif check_define __HAIKU__ ; then
|
2021-11-08 21:47:54 +08:00
|
|
|
targetos=haiku
|
2017-07-13 23:15:32 +08:00
|
|
|
elif check_define __FreeBSD__ ; then
|
2021-11-08 21:47:54 +08:00
|
|
|
targetos=freebsd
|
2017-07-13 23:15:32 +08:00
|
|
|
elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
|
2021-11-08 21:47:54 +08:00
|
|
|
targetos=gnu/kfreebsd
|
2017-07-13 23:15:32 +08:00
|
|
|
elif check_define __DragonFly__ ; then
|
2021-11-08 21:47:54 +08:00
|
|
|
targetos=dragonfly
|
2017-07-13 23:15:32 +08:00
|
|
|
elif check_define __NetBSD__; then
|
2021-11-08 21:47:54 +08:00
|
|
|
targetos=netbsd
|
2017-07-13 23:15:32 +08:00
|
|
|
elif check_define __APPLE__; then
|
2021-11-08 21:47:54 +08:00
|
|
|
targetos=darwin
|
2012-08-14 22:35:34 +08:00
|
|
|
else
|
2017-07-13 23:15:32 +08:00
|
|
|
# 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.
|
2021-11-08 21:47:54 +08:00
|
|
|
targetos=bogus
|
2012-08-14 22:35:34 +08:00
|
|
|
fi
|
|
|
|
|
2021-11-09 05:52:35 +08:00
|
|
|
# OS specific
|
|
|
|
|
2012-08-14 22:35:34 +08:00
|
|
|
case $targetos in
|
2021-11-09 05:52:35 +08:00
|
|
|
windows)
|
|
|
|
mingw32="yes"
|
|
|
|
plugins="no"
|
|
|
|
pie="no"
|
|
|
|
;;
|
|
|
|
gnu/kfreebsd)
|
|
|
|
bsd="yes"
|
|
|
|
;;
|
|
|
|
freebsd)
|
|
|
|
bsd="yes"
|
|
|
|
bsd_user="yes"
|
|
|
|
make="${MAKE-gmake}"
|
|
|
|
# needed for kinfo_getvmmap(3) in libutil.h
|
|
|
|
;;
|
|
|
|
dragonfly)
|
|
|
|
bsd="yes"
|
|
|
|
make="${MAKE-gmake}"
|
|
|
|
;;
|
|
|
|
netbsd)
|
|
|
|
bsd="yes"
|
|
|
|
make="${MAKE-gmake}"
|
|
|
|
;;
|
|
|
|
openbsd)
|
|
|
|
bsd="yes"
|
|
|
|
make="${MAKE-gmake}"
|
|
|
|
;;
|
|
|
|
darwin)
|
|
|
|
bsd="yes"
|
|
|
|
darwin="yes"
|
|
|
|
# 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"
|
|
|
|
;;
|
2021-11-08 21:47:54 +08:00
|
|
|
sunos)
|
2021-11-09 05:52:35 +08:00
|
|
|
solaris="yes"
|
|
|
|
make="${MAKE-gmake}"
|
|
|
|
smbd="${SMBD-/usr/sfw/sbin/smbd}"
|
|
|
|
# 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"
|
2016-05-16 21:10:20 +08:00
|
|
|
# $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
|
2021-11-09 05:52:35 +08:00
|
|
|
# Note that this check is 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.
|
2012-08-14 22:35:34 +08:00
|
|
|
if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
|
|
|
|
cpu="x86_64"
|
|
|
|
fi
|
2021-11-09 05:52:35 +08:00
|
|
|
;;
|
|
|
|
haiku)
|
|
|
|
pie="no"
|
|
|
|
QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -D_BSD_SOURCE -fPIC $QEMU_CFLAGS"
|
|
|
|
;;
|
|
|
|
linux)
|
|
|
|
linux="yes"
|
|
|
|
linux_user="yes"
|
|
|
|
vhost_user=${default_feature:-yes}
|
|
|
|
;;
|
2012-08-14 22:35:34 +08:00
|
|
|
esac
|
|
|
|
|
2009-08-03 20:45:55 +08:00
|
|
|
if test ! -z "$cpu" ; then
|
|
|
|
# command line argument
|
|
|
|
:
|
|
|
|
elif check_define __i386__ ; then
|
2008-12-30 01:14:15 +08:00
|
|
|
cpu="i386"
|
|
|
|
elif check_define __x86_64__ ; then
|
2013-08-21 03:20:05 +08:00
|
|
|
if check_define __ILP32__ ; then
|
|
|
|
cpu="x32"
|
|
|
|
else
|
|
|
|
cpu="x86_64"
|
|
|
|
fi
|
2009-01-01 00:55:26 +08:00
|
|
|
elif check_define __sparc__ ; then
|
|
|
|
if check_define __arch64__ ; then
|
|
|
|
cpu="sparc64"
|
|
|
|
else
|
|
|
|
cpu="sparc"
|
|
|
|
fi
|
2009-01-15 02:39:52 +08:00
|
|
|
elif check_define _ARCH_PPC ; then
|
|
|
|
if check_define _ARCH_PPC64 ; then
|
2019-05-02 06:38:18 +08:00
|
|
|
if check_define _LITTLE_ENDIAN ; then
|
|
|
|
cpu="ppc64le"
|
|
|
|
else
|
|
|
|
cpu="ppc64"
|
|
|
|
fi
|
2009-01-15 02:39:52 +08:00
|
|
|
else
|
|
|
|
cpu="ppc"
|
|
|
|
fi
|
2009-10-17 20:17:47 +08:00
|
|
|
elif check_define __mips__ ; then
|
|
|
|
cpu="mips"
|
2010-06-13 18:28:21 +08:00
|
|
|
elif check_define __s390__ ; then
|
|
|
|
if check_define __s390x__ ; then
|
|
|
|
cpu="s390x"
|
|
|
|
else
|
|
|
|
cpu="s390"
|
|
|
|
fi
|
2018-12-20 03:20:19 +08:00
|
|
|
elif check_define __riscv ; then
|
2021-09-18 02:08:09 +08:00
|
|
|
cpu="riscv"
|
2011-11-30 17:57:48 +08:00
|
|
|
elif check_define __arm__ ; then
|
|
|
|
cpu="arm"
|
2013-06-12 23:20:23 +08:00
|
|
|
elif check_define __aarch64__ ; then
|
|
|
|
cpu="aarch64"
|
2021-12-21 13:41:04 +08:00
|
|
|
elif check_define __loongarch64 ; then
|
|
|
|
cpu="loongarch64"
|
2008-12-30 01:14:15 +08:00
|
|
|
else
|
2016-05-16 21:10:20 +08:00
|
|
|
cpu=$(uname -m)
|
2008-12-30 01:14:15 +08:00
|
|
|
fi
|
|
|
|
|
2021-11-08 21:18:17 +08:00
|
|
|
# Normalise host CPU name, set multilib cflags
|
2011-12-24 21:07:25 +08:00
|
|
|
# Note that this case should only have supported host CPUs, not guests.
|
2003-03-07 07:23:54 +08:00
|
|
|
case "$cpu" in
|
2021-11-09 16:23:56 +08:00
|
|
|
armv*b|armv*l|arm)
|
|
|
|
cpu="arm" ;;
|
|
|
|
|
2003-03-07 07:23:54 +08:00
|
|
|
i386|i486|i586|i686|i86pc|BePC)
|
2003-08-11 05:36:04 +08:00
|
|
|
cpu="i386"
|
2021-11-09 16:23:56 +08:00
|
|
|
CPU_CFLAGS="-m32" ;;
|
|
|
|
x32)
|
2021-11-09 16:36:10 +08:00
|
|
|
cpu="x86_64"
|
2021-11-09 16:23:56 +08:00
|
|
|
CPU_CFLAGS="-mx32" ;;
|
2008-04-12 06:04:22 +08:00
|
|
|
x86_64|amd64)
|
|
|
|
cpu="x86_64"
|
2021-11-09 16:23:56 +08:00
|
|
|
# ??? 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" ;;
|
|
|
|
|
2009-10-17 20:17:47 +08:00
|
|
|
mips*)
|
2021-11-09 16:23:56 +08:00
|
|
|
cpu="mips" ;;
|
|
|
|
|
|
|
|
ppc)
|
|
|
|
CPU_CFLAGS="-m32" ;;
|
|
|
|
ppc64)
|
2021-11-09 16:18:20 +08:00
|
|
|
CPU_CFLAGS="-m64 -mbig" ;;
|
2021-11-09 16:23:56 +08:00
|
|
|
ppc64le)
|
2021-11-09 16:18:20 +08:00
|
|
|
cpu="ppc64"
|
|
|
|
CPU_CFLAGS="-m64 -mlittle" ;;
|
2021-11-09 16:23:56 +08:00
|
|
|
|
|
|
|
s390)
|
2021-11-08 21:18:17 +08:00
|
|
|
CPU_CFLAGS="-m31" ;;
|
2021-11-09 16:23:56 +08:00
|
|
|
s390x)
|
|
|
|
CPU_CFLAGS="-m64" ;;
|
|
|
|
|
2007-04-17 02:27:06 +08:00
|
|
|
sparc|sun4[cdmuv])
|
2003-05-14 02:59:59 +08:00
|
|
|
cpu="sparc"
|
2021-11-09 16:23:56 +08:00
|
|
|
CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc" ;;
|
|
|
|
sparc64)
|
|
|
|
CPU_CFLAGS="-m64 -mcpu=ultrasparc" ;;
|
2003-03-07 07:23:54 +08:00
|
|
|
esac
|
2009-08-13 00:20:24 +08:00
|
|
|
|
2010-12-23 18:43:49 +08:00
|
|
|
: ${make=${MAKE-make}}
|
2020-09-01 18:38:04 +08:00
|
|
|
|
2019-03-28 01:07:01 +08:00
|
|
|
# We prefer python 3.x. A bare 'python' is traditionally
|
|
|
|
# python 2.x, but some distros have it as python 3.x, so
|
2019-10-17 06:42:37 +08:00
|
|
|
# we check that too
|
2019-03-28 01:07:01 +08:00
|
|
|
python=
|
2019-08-21 15:21:16 +08:00
|
|
|
explicit_python=no
|
2019-10-17 06:42:37 +08:00
|
|
|
for binary in "${PYTHON-python3}" python
|
2019-03-28 01:07:01 +08:00
|
|
|
do
|
|
|
|
if has "$binary"
|
|
|
|
then
|
2019-06-10 18:03:44 +08:00
|
|
|
python=$(command -v "$binary")
|
2019-03-28 01:07:01 +08:00
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
2020-02-15 01:18:41 +08:00
|
|
|
|
|
|
|
|
2020-03-03 23:06:20 +08:00
|
|
|
# Check for ancillary tools used in testing
|
|
|
|
genisoimage=
|
2020-05-19 21:22:48 +08:00
|
|
|
for binary in genisoimage mkisofs
|
2020-03-03 23:06:20 +08:00
|
|
|
do
|
|
|
|
if has $binary
|
|
|
|
then
|
|
|
|
genisoimage=$(command -v "$binary")
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2012-08-12 05:34:40 +08:00
|
|
|
# Default objcc to clang if available, otherwise use CC
|
|
|
|
if has clang; then
|
|
|
|
objcc=clang
|
|
|
|
else
|
|
|
|
objcc="$cc"
|
|
|
|
fi
|
|
|
|
|
2009-08-03 20:46:07 +08:00
|
|
|
if test "$mingw32" = "yes" ; then
|
|
|
|
EXESUF=".exe"
|
2015-11-26 19:13:12 +08:00
|
|
|
# MinGW needs -mthreads for TLS and macro _MT.
|
2020-09-23 17:26:15 +08:00
|
|
|
CONFIGURE_CFLAGS="-mthreads $CONFIGURE_CFLAGS"
|
2015-03-26 06:57:37 +08:00
|
|
|
write_c_skeleton;
|
2020-08-18 18:17:01 +08:00
|
|
|
prefix="/qemu"
|
2020-08-26 19:04:12 +08:00
|
|
|
qemu_suffix=""
|
2017-08-22 21:55:04 +08:00
|
|
|
libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
|
2009-08-03 20:46:07 +08:00
|
|
|
fi
|
|
|
|
|
2009-06-12 02:28:25 +08:00
|
|
|
werror=""
|
2007-11-12 04:17:03 +08:00
|
|
|
|
2021-10-07 21:08:28 +08:00
|
|
|
. $source_path/scripts/meson-buildoptions.sh
|
|
|
|
|
|
|
|
meson_options=
|
|
|
|
meson_option_parse() {
|
|
|
|
meson_options="$meson_options $(_meson_option_parse "$@")"
|
|
|
|
if test $? -eq 1; then
|
|
|
|
echo "ERROR: unknown option $1"
|
|
|
|
echo "Try '$0 --help' for more information"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2003-03-07 07:23:54 +08:00
|
|
|
for opt do
|
2016-05-16 21:10:20 +08:00
|
|
|
optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
|
2003-03-07 07:23:54 +08:00
|
|
|
case "$opt" in
|
2005-12-19 03:14:49 +08:00
|
|
|
--help|-h) show_help=yes
|
|
|
|
;;
|
2011-04-07 13:12:28 +08:00
|
|
|
--version|-V) exec cat $source_path/VERSION
|
|
|
|
;;
|
2006-04-16 21:28:56 +08:00
|
|
|
--prefix=*) prefix="$optarg"
|
2003-03-07 07:23:54 +08:00
|
|
|
;;
|
2006-04-16 21:28:56 +08:00
|
|
|
--interp-prefix=*) interp_prefix="$optarg"
|
2003-04-11 08:16:16 +08:00
|
|
|
;;
|
2008-12-30 01:14:15 +08:00
|
|
|
--cross-prefix=*)
|
2003-03-07 07:23:54 +08:00
|
|
|
;;
|
2008-12-30 01:14:15 +08:00
|
|
|
--cc=*)
|
2003-03-07 07:23:54 +08:00
|
|
|
;;
|
2006-04-16 21:28:56 +08:00
|
|
|
--host-cc=*) host_cc="$optarg"
|
2005-07-23 22:27:54 +08:00
|
|
|
;;
|
2013-08-07 23:39:36 +08:00
|
|
|
--cxx=*)
|
|
|
|
;;
|
2013-11-24 17:38:05 +08:00
|
|
|
--iasl=*) iasl="$optarg"
|
|
|
|
;;
|
2012-08-12 05:34:40 +08:00
|
|
|
--objcc=*) objcc="$optarg"
|
|
|
|
;;
|
2006-04-16 21:28:56 +08:00
|
|
|
--make=*) make="$optarg"
|
2003-03-07 07:23:54 +08:00
|
|
|
;;
|
2020-09-01 18:38:04 +08:00
|
|
|
--install=*)
|
2006-04-17 21:57:12 +08:00
|
|
|
;;
|
2019-08-21 15:21:16 +08:00
|
|
|
--python=*) python="$optarg" ; explicit_python=yes
|
2011-07-23 05:08:09 +08:00
|
|
|
;;
|
2020-02-14 01:56:18 +08:00
|
|
|
--sphinx-build=*) sphinx_build="$optarg"
|
|
|
|
;;
|
2019-06-10 18:05:14 +08:00
|
|
|
--skip-meson) skip_meson=yes
|
|
|
|
;;
|
|
|
|
--meson=*) meson="$optarg"
|
|
|
|
;;
|
2020-08-26 14:04:15 +08:00
|
|
|
--ninja=*) ninja="$optarg"
|
|
|
|
;;
|
2011-09-03 04:53:28 +08:00
|
|
|
--smbd=*) smbd="$optarg"
|
|
|
|
;;
|
2009-08-03 20:46:02 +08:00
|
|
|
--extra-cflags=*)
|
2003-03-07 07:23:54 +08:00
|
|
|
;;
|
2017-06-06 21:07:47 +08:00
|
|
|
--extra-cxxflags=*)
|
|
|
|
;;
|
2009-08-03 20:46:02 +08:00
|
|
|
--extra-ldflags=*)
|
2003-03-07 07:23:54 +08:00
|
|
|
;;
|
2012-02-08 20:54:13 +08:00
|
|
|
--enable-debug-info)
|
|
|
|
;;
|
|
|
|
--disable-debug-info)
|
|
|
|
;;
|
2018-04-05 03:27:05 +08:00
|
|
|
--cross-cc-*)
|
|
|
|
;;
|
2014-02-10 14:48:56 +08:00
|
|
|
--enable-modules)
|
|
|
|
modules="yes"
|
2015-11-02 22:06:23 +08:00
|
|
|
;;
|
|
|
|
--disable-modules)
|
|
|
|
modules="no"
|
2014-02-10 14:48:56 +08:00
|
|
|
;;
|
2020-03-10 22:58:06 +08:00
|
|
|
--disable-module-upgrades) module_upgrades="no"
|
|
|
|
;;
|
|
|
|
--enable-module-upgrades) module_upgrades="yes"
|
|
|
|
;;
|
2009-08-03 20:45:55 +08:00
|
|
|
--cpu=*)
|
2003-03-07 07:23:54 +08:00
|
|
|
;;
|
2006-04-16 21:28:56 +08:00
|
|
|
--target-list=*) target_list="$optarg"
|
2019-03-19 19:59:12 +08:00
|
|
|
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
|
2003-06-16 04:25:43 +08:00
|
|
|
;;
|
2010-12-23 18:44:02 +08:00
|
|
|
--with-trace-file=*) trace_file="$optarg"
|
2010-07-13 16:26:32 +08:00
|
|
|
;;
|
2020-11-20 15:38:22 +08:00
|
|
|
--with-default-devices) default_devices="true"
|
2019-01-23 14:56:17 +08:00
|
|
|
;;
|
2020-11-20 15:38:22 +08:00
|
|
|
--without-default-devices) default_devices="false"
|
2019-01-23 14:56:17 +08:00
|
|
|
;;
|
2021-07-07 21:17:44 +08:00
|
|
|
--with-devices-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --with-devices-FOO option"
|
|
|
|
;;
|
|
|
|
--with-devices-*) device_arch=${opt#--with-devices-};
|
|
|
|
device_arch=${device_arch%%=*}
|
|
|
|
cf=$source_path/configs/devices/$device_arch-softmmu/$optarg.mak
|
|
|
|
if test -f "$cf"; then
|
|
|
|
device_archs="$device_archs $device_arch"
|
|
|
|
eval "devices_${device_arch}=\$optarg"
|
|
|
|
else
|
|
|
|
error_exit "File $cf does not exist"
|
|
|
|
fi
|
|
|
|
;;
|
2020-12-11 03:04:13 +08:00
|
|
|
--without-default-features) # processed above
|
|
|
|
;;
|
2003-03-07 07:23:54 +08:00
|
|
|
--enable-gprof) gprof="yes"
|
|
|
|
;;
|
2012-05-02 02:45:39 +08:00
|
|
|
--enable-gcov) gcov="yes"
|
|
|
|
;;
|
2010-01-31 19:23:45 +08:00
|
|
|
--static)
|
|
|
|
static="yes"
|
2012-02-01 03:03:45 +08:00
|
|
|
QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
|
2003-06-10 03:53:12 +08:00
|
|
|
;;
|
2010-05-26 22:08:26 +08:00
|
|
|
--mandir=*) mandir="$optarg"
|
|
|
|
;;
|
|
|
|
--bindir=*) bindir="$optarg"
|
|
|
|
;;
|
2011-05-15 17:08:59 +08:00
|
|
|
--libdir=*) libdir="$optarg"
|
|
|
|
;;
|
2012-06-07 05:11:00 +08:00
|
|
|
--libexecdir=*) libexecdir="$optarg"
|
|
|
|
;;
|
2011-06-27 17:58:20 +08:00
|
|
|
--includedir=*) includedir="$optarg"
|
|
|
|
;;
|
2012-04-19 03:55:49 +08:00
|
|
|
--datadir=*) datadir="$optarg"
|
2010-05-26 22:08:26 +08:00
|
|
|
;;
|
2020-08-26 19:04:12 +08:00
|
|
|
--with-suffix=*) qemu_suffix="$optarg"
|
2012-04-19 03:55:50 +08:00
|
|
|
;;
|
2020-10-16 03:07:42 +08:00
|
|
|
--docdir=*) docdir="$optarg"
|
2010-05-26 22:08:26 +08:00
|
|
|
;;
|
2020-10-16 16:35:10 +08:00
|
|
|
--localedir=*) localedir="$optarg"
|
|
|
|
;;
|
2010-03-08 21:09:48 +08:00
|
|
|
--sysconfdir=*) sysconfdir="$optarg"
|
2010-01-22 00:30:29 +08:00
|
|
|
;;
|
2012-10-04 05:35:57 +08:00
|
|
|
--localstatedir=*) local_statedir="$optarg"
|
|
|
|
;;
|
2017-09-14 19:42:36 +08:00
|
|
|
--firmwarepath=*) firmwarepath="$optarg"
|
|
|
|
;;
|
2018-04-18 15:50:44 +08:00
|
|
|
--host=*|--build=*|\
|
|
|
|
--disable-dependency-tracking|\
|
2012-10-04 05:35:57 +08:00
|
|
|
--sbindir=*|--sharedstatedir=*|\
|
2020-10-16 16:35:10 +08:00
|
|
|
--oldincludedir=*|--datarootdir=*|--infodir=*|\
|
2011-11-24 20:11:31 +08:00
|
|
|
--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.
|
|
|
|
;;
|
2013-05-10 20:16:40 +08:00
|
|
|
--disable-qom-cast-debug) qom_cast_debug="no"
|
|
|
|
;;
|
|
|
|
--enable-qom-cast-debug) qom_cast_debug="yes"
|
|
|
|
;;
|
2008-06-26 05:04:05 +08:00
|
|
|
--audio-drv-list=*) audio_drv_list="$optarg"
|
2004-11-15 03:57:29 +08:00
|
|
|
;;
|
2016-05-16 21:10:20 +08:00
|
|
|
--block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
|
2013-05-29 19:35:40 +08:00
|
|
|
;;
|
2016-05-16 21:10:20 +08:00
|
|
|
--block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
|
2009-10-28 01:41:44 +08:00
|
|
|
;;
|
2021-07-10 00:41:41 +08:00
|
|
|
--enable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="yes"
|
|
|
|
;;
|
|
|
|
--disable-block-drv-whitelist-in-tools) block_drv_whitelist_tools="no"
|
|
|
|
;;
|
2009-04-14 02:45:38 +08:00
|
|
|
--enable-debug-tcg) debug_tcg="yes"
|
|
|
|
;;
|
|
|
|
--disable-debug-tcg) debug_tcg="no"
|
|
|
|
;;
|
2009-06-04 18:39:04 +08:00
|
|
|
--enable-debug)
|
|
|
|
# Enable debugging options that aren't excessively noisy
|
|
|
|
debug_tcg="yes"
|
2018-04-25 10:54:59 +08:00
|
|
|
debug_mutex="yes"
|
2009-06-04 18:39:04 +08:00
|
|
|
debug="yes"
|
|
|
|
strip_opt="no"
|
2015-11-04 04:43:42 +08:00
|
|
|
fortify_source="no"
|
2009-06-04 18:39:04 +08:00
|
|
|
;;
|
2018-01-16 23:11:51 +08:00
|
|
|
--enable-sanitizers) sanitizers="yes"
|
|
|
|
;;
|
|
|
|
--disable-sanitizers) sanitizers="no"
|
|
|
|
;;
|
2020-06-13 03:02:23 +08:00
|
|
|
--enable-tsan) tsan="yes"
|
|
|
|
;;
|
|
|
|
--disable-tsan) tsan="no"
|
|
|
|
;;
|
2009-04-06 01:41:02 +08:00
|
|
|
--disable-strip) strip_opt="no"
|
|
|
|
;;
|
2020-10-05 17:31:15 +08:00
|
|
|
--disable-slirp) slirp="disabled"
|
2005-10-31 02:58:22 +08:00
|
|
|
;;
|
2020-11-20 18:19:38 +08:00
|
|
|
--enable-slirp) slirp="enabled"
|
|
|
|
;;
|
2020-10-05 17:31:15 +08:00
|
|
|
--enable-slirp=git) slirp="internal"
|
2019-04-24 19:00:41 +08:00
|
|
|
;;
|
2021-10-07 21:08:27 +08:00
|
|
|
--enable-slirp=*) slirp="$optarg"
|
2019-02-13 00:25:23 +08:00
|
|
|
;;
|
2020-09-18 16:57:25 +08:00
|
|
|
--disable-xen) xen="disabled"
|
2009-04-22 23:19:10 +08:00
|
|
|
;;
|
2020-09-18 16:57:25 +08:00
|
|
|
--enable-xen) xen="enabled"
|
2009-08-13 00:29:55 +08:00
|
|
|
;;
|
2020-09-18 16:57:25 +08:00
|
|
|
--disable-tcg) tcg="disabled"
|
2021-07-09 22:29:54 +08:00
|
|
|
plugins="no"
|
2017-07-03 22:59:07 +08:00
|
|
|
;;
|
2020-09-18 16:57:25 +08:00
|
|
|
--enable-tcg) tcg="enabled"
|
2017-07-03 22:59:07 +08:00
|
|
|
;;
|
2006-02-09 06:39:17 +08:00
|
|
|
--enable-profiler) profiler="yes"
|
|
|
|
;;
|
2006-03-20 00:31:11 +08:00
|
|
|
--disable-system) softmmu="no"
|
2006-03-19 22:54:16 +08:00
|
|
|
;;
|
2006-03-20 00:31:11 +08:00
|
|
|
--enable-system) softmmu="yes"
|
2006-03-19 22:54:16 +08:00
|
|
|
;;
|
2009-07-30 18:14:59 +08:00
|
|
|
--disable-user)
|
|
|
|
linux_user="no" ;
|
|
|
|
bsd_user="no" ;
|
|
|
|
;;
|
|
|
|
--enable-user) ;;
|
2007-01-19 04:06:33 +08:00
|
|
|
--disable-linux-user) linux_user="no"
|
2006-03-19 22:54:16 +08:00
|
|
|
;;
|
2007-01-19 04:06:33 +08:00
|
|
|
--enable-linux-user) linux_user="yes"
|
|
|
|
;;
|
2008-10-27 04:33:16 +08:00
|
|
|
--disable-bsd-user) bsd_user="no"
|
|
|
|
;;
|
|
|
|
--enable-bsd-user) bsd_user="yes"
|
|
|
|
;;
|
2011-11-16 02:12:17 +08:00
|
|
|
--enable-pie) pie="yes"
|
2009-09-12 07:17:55 +08:00
|
|
|
;;
|
2011-11-16 02:12:17 +08:00
|
|
|
--disable-pie) pie="no"
|
2009-09-12 07:17:55 +08:00
|
|
|
;;
|
2007-11-12 04:17:03 +08:00
|
|
|
--enable-werror) werror="yes"
|
|
|
|
;;
|
|
|
|
--disable-werror) werror="no"
|
|
|
|
;;
|
2020-12-05 07:06:11 +08:00
|
|
|
--enable-lto) lto="true"
|
|
|
|
;;
|
|
|
|
--disable-lto) lto="false"
|
|
|
|
;;
|
2014-03-29 00:19:02 +08:00
|
|
|
--enable-stack-protector) stack_protector="yes"
|
|
|
|
;;
|
|
|
|
--disable-stack-protector) stack_protector="no"
|
|
|
|
;;
|
2020-05-30 04:51:21 +08:00
|
|
|
--enable-safe-stack) safe_stack="yes"
|
|
|
|
;;
|
|
|
|
--disable-safe-stack) safe_stack="no"
|
|
|
|
;;
|
2020-12-05 07:06:14 +08:00
|
|
|
--enable-cfi)
|
|
|
|
cfi="true";
|
|
|
|
lto="true";
|
|
|
|
;;
|
|
|
|
--disable-cfi) cfi="false"
|
|
|
|
;;
|
2020-10-05 17:31:15 +08:00
|
|
|
--disable-fdt) fdt="disabled"
|
2009-08-13 00:29:54 +08:00
|
|
|
;;
|
2020-10-05 17:31:15 +08:00
|
|
|
--enable-fdt) fdt="enabled"
|
|
|
|
;;
|
|
|
|
--enable-fdt=git) fdt="internal"
|
|
|
|
;;
|
2021-10-07 21:08:27 +08:00
|
|
|
--enable-fdt=*) fdt="$optarg"
|
2009-08-13 00:29:54 +08:00
|
|
|
;;
|
2018-02-16 17:05:23 +08:00
|
|
|
--disable-membarrier) membarrier="no"
|
|
|
|
;;
|
|
|
|
--enable-membarrier) membarrier="yes"
|
|
|
|
;;
|
2018-02-15 19:06:47 +08:00
|
|
|
--with-pkgversion=*) pkgversion="$optarg"
|
2009-04-08 07:17:49 +08:00
|
|
|
;;
|
2012-02-28 19:25:50 +08:00
|
|
|
--with-coroutine=*) coroutine="$optarg"
|
|
|
|
;;
|
2013-09-11 22:42:35 +08:00
|
|
|
--disable-coroutine-pool) coroutine_pool="no"
|
|
|
|
;;
|
|
|
|
--enable-coroutine-pool) coroutine_pool="yes"
|
|
|
|
;;
|
2016-09-27 17:58:45 +08:00
|
|
|
--enable-debug-stack-usage) debug_stack_usage="yes"
|
|
|
|
;;
|
2017-07-15 02:04:05 +08:00
|
|
|
--enable-crypto-afalg) crypto_afalg="yes"
|
|
|
|
;;
|
|
|
|
--disable-crypto-afalg) crypto_afalg="no"
|
|
|
|
;;
|
2010-03-17 19:08:17 +08:00
|
|
|
--disable-vhost-net) vhost_net="no"
|
|
|
|
;;
|
|
|
|
--enable-vhost-net) vhost_net="yes"
|
|
|
|
;;
|
2018-03-01 21:46:28 +08:00
|
|
|
--disable-vhost-crypto) vhost_crypto="no"
|
|
|
|
;;
|
2019-02-15 01:35:53 +08:00
|
|
|
--enable-vhost-crypto) vhost_crypto="yes"
|
2018-03-01 21:46:28 +08:00
|
|
|
;;
|
vhost-scsi: new device supporting the tcm_vhost Linux kernel module
The WWPN specified in configfs is passed to "-device vhost-scsi-pci".
The tgpt field of the SET_ENDPOINT ioctl is obsolete now, so it is not
available from the QEMU command-line. Instead, I hardcode it to zero.
Changes in Patch-v2:
- Add vhost_scsi_get_features() in order to determine feature bits
supports by host kernel (mst + nab)
- Re-enable usage of DEFINE_VIRTIO_COMMON_FEATURES, and allow
EVENT_IDX to be disabled by host in vhost_scsi_get_features()
- Drop unused hotplug bit in DEFINE_VHOST_SCSI_PROPERTIES
Changes in Patch-v1:
- Set event_idx=off by default (nab, thanks asias)
- Disable hotplug feature bit for v3.9 tcm_vhost kernel code, need to
re-enable in v3.10 (nab)
- Update to latest qemu.git/master HEAD
Changes in WIP-V3:
- Drop ioeventfd vhost_scsi_properties (asias, thanks stefanha)
- Add CONFIG_VHOST_SCSI (asias, thanks stefanha)
- Add hotplug feature bit
Changes in WIP-V2:
- Add backend guest masking support (nab)
- Bump ABI_VERSION to 1 (nab)
- Set up set_guest_notifiers (asias)
- Set up vs->dev.vq_index (asias)
- Drop vs->vs.vdev.{set,clear}_vhost_endpoint (asias)
- Drop VIRTIO_CONFIG_S_DRIVER check in vhost_scsi_set_status (asias)
Howto:
Use the latest seabios, at least commit b44a7be17b
git clone git://git.seabios.org/seabios.git
make
cp out/bios.bin /usr/share/qemu/bios.bin
qemu -device vhost-scsi-pci,wwpn=naa.6001405bd4e8476d,event_idx=off
...
Cc: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Asias He <asias@redhat.com>
[ Rebase on top of VirtIOSCSICommon patch, fix bugs in feature
negotiation and irqfd masking - Paolo ]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2013-03-29 09:08:16 +08:00
|
|
|
--disable-vhost-scsi) vhost_scsi="no"
|
|
|
|
;;
|
|
|
|
--enable-vhost-scsi) vhost_scsi="yes"
|
|
|
|
;;
|
2016-08-16 20:27:22 +08:00
|
|
|
--disable-vhost-vsock) vhost_vsock="no"
|
|
|
|
;;
|
|
|
|
--enable-vhost-vsock) vhost_vsock="yes"
|
|
|
|
;;
|
2019-09-30 18:51:34 +08:00
|
|
|
--disable-vhost-user-fs) vhost_user_fs="no"
|
|
|
|
;;
|
|
|
|
--enable-vhost-user-fs) vhost_user_fs="yes"
|
|
|
|
;;
|
2014-11-20 16:49:44 +08:00
|
|
|
--disable-opengl) opengl="no"
|
2011-03-08 06:32:39 +08:00
|
|
|
;;
|
2014-11-20 16:49:44 +08:00
|
|
|
--enable-opengl) opengl="yes"
|
2011-03-08 06:32:39 +08:00
|
|
|
;;
|
2012-01-25 01:42:40 +08:00
|
|
|
--disable-xfsctl) xfs="no"
|
|
|
|
;;
|
|
|
|
--enable-xfsctl) xfs="yes"
|
|
|
|
;;
|
2020-08-29 01:33:54 +08:00
|
|
|
--disable-zlib-test)
|
2011-07-26 17:30:40 +08:00
|
|
|
;;
|
2011-08-02 03:52:57 +08:00
|
|
|
--enable-guest-agent) guest_agent="yes"
|
|
|
|
;;
|
|
|
|
--disable-guest-agent) guest_agent="no"
|
|
|
|
;;
|
2013-08-07 23:40:03 +08:00
|
|
|
--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"
|
|
|
|
;;
|
2012-09-10 19:26:29 +08:00
|
|
|
--enable-tools) want_tools="yes"
|
|
|
|
;;
|
|
|
|
--disable-tools) want_tools="no"
|
|
|
|
;;
|
2018-10-20 04:38:59 +08:00
|
|
|
--disable-avx2) avx2_opt="no"
|
|
|
|
;;
|
|
|
|
--enable-avx2) avx2_opt="yes"
|
|
|
|
;;
|
2020-02-29 20:34:34 +08:00
|
|
|
--disable-avx512f) avx512f_opt="no"
|
|
|
|
;;
|
|
|
|
--enable-avx512f) avx512f_opt="yes"
|
|
|
|
;;
|
2014-09-10 14:17:51 +08:00
|
|
|
--disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
|
|
|
|
echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
|
2012-11-14 22:04:15 +08:00
|
|
|
;;
|
2016-09-21 12:27:16 +08:00
|
|
|
--enable-vhdx|--disable-vhdx)
|
|
|
|
echo "$0: $opt is obsolete, VHDX driver is always built" >&2
|
|
|
|
;;
|
2016-09-21 12:27:21 +08:00
|
|
|
--enable-uuid|--disable-uuid)
|
|
|
|
echo "$0: $opt is obsolete, UUID support is always built" >&2
|
|
|
|
;;
|
2016-06-06 17:05:06 +08:00
|
|
|
--tls-priority=*) tls_priority="$optarg"
|
|
|
|
;;
|
2013-07-22 22:01:54 +08:00
|
|
|
--enable-rdma) rdma="yes"
|
|
|
|
;;
|
|
|
|
--disable-rdma) rdma="no"
|
|
|
|
;;
|
2018-08-16 23:16:37 +08:00
|
|
|
--enable-pvrdma) pvrdma="yes"
|
|
|
|
;;
|
|
|
|
--disable-pvrdma) pvrdma="no"
|
|
|
|
;;
|
2014-06-17 03:32:47 +08:00
|
|
|
--disable-tpm) tpm="no"
|
|
|
|
;;
|
2013-02-28 01:47:52 +08:00
|
|
|
--enable-tpm) tpm="yes"
|
|
|
|
;;
|
2017-05-15 22:05:29 +08:00
|
|
|
--disable-live-block-migration) live_block_migration="no"
|
|
|
|
;;
|
|
|
|
--enable-live-block-migration) live_block_migration="yes"
|
|
|
|
;;
|
2014-05-14 17:43:28 +08:00
|
|
|
--disable-numa) numa="no"
|
|
|
|
;;
|
|
|
|
--enable-numa) numa="yes"
|
|
|
|
;;
|
2016-07-27 15:01:48 +08:00
|
|
|
--disable-replication) replication="no"
|
|
|
|
;;
|
|
|
|
--enable-replication) replication="yes"
|
|
|
|
;;
|
2018-11-07 14:36:44 +08:00
|
|
|
--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"
|
|
|
|
;;
|
2017-08-03 17:07:46 +08:00
|
|
|
--disable-vhost-user) vhost_user="no"
|
|
|
|
;;
|
2019-02-15 01:35:53 +08:00
|
|
|
--enable-vhost-user) vhost_user="yes"
|
|
|
|
;;
|
2020-07-01 22:55:37 +08:00
|
|
|
--disable-vhost-vdpa) vhost_vdpa="no"
|
|
|
|
;;
|
|
|
|
--enable-vhost-vdpa) vhost_vdpa="yes"
|
|
|
|
;;
|
2019-02-15 01:35:53 +08:00
|
|
|
--disable-vhost-kernel) vhost_kernel="no"
|
|
|
|
;;
|
|
|
|
--enable-vhost-kernel) vhost_kernel="yes"
|
2017-08-03 17:07:46 +08:00
|
|
|
;;
|
2020-09-14 03:19:25 +08:00
|
|
|
--disable-capstone) capstone="disabled"
|
2017-09-15 00:41:12 +08:00
|
|
|
;;
|
2020-09-14 03:19:25 +08:00
|
|
|
--enable-capstone) capstone="enabled"
|
2017-09-15 00:41:12 +08:00
|
|
|
;;
|
2020-09-14 03:19:25 +08:00
|
|
|
--enable-capstone=git) capstone="internal"
|
2017-09-29 00:01:23 +08:00
|
|
|
;;
|
2021-10-07 21:08:27 +08:00
|
|
|
--enable-capstone=*) capstone="$optarg"
|
2017-09-29 00:01:23 +08:00
|
|
|
;;
|
2017-10-20 22:02:43 +08:00
|
|
|
--with-git=*) git="$optarg"
|
|
|
|
;;
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-20 01:20:46 +08:00
|
|
|
--with-git-submodules=*)
|
|
|
|
git_submodules_action="$optarg"
|
2017-10-26 20:52:26 +08:00
|
|
|
;;
|
2018-06-13 20:23:08 +08:00
|
|
|
--enable-debug-mutex) debug_mutex=yes
|
|
|
|
;;
|
|
|
|
--disable-debug-mutex) debug_mutex=no
|
|
|
|
;;
|
2021-07-09 22:29:56 +08:00
|
|
|
--enable-plugins) if test "$mingw32" = "yes"; then
|
|
|
|
error_exit "TCG plugins not currently supported on Windows platforms"
|
|
|
|
else
|
|
|
|
plugins="yes"
|
|
|
|
fi
|
2019-06-13 21:52:25 +08:00
|
|
|
;;
|
|
|
|
--disable-plugins) plugins="no"
|
|
|
|
;;
|
2019-11-28 23:35:24 +08:00
|
|
|
--enable-containers) use_containers="yes"
|
|
|
|
;;
|
|
|
|
--disable-containers) use_containers="no"
|
|
|
|
;;
|
2020-03-17 01:21:48 +08:00
|
|
|
--gdb=*) gdb_bin="$optarg"
|
|
|
|
;;
|
2020-05-20 21:20:23 +08:00
|
|
|
--enable-rng-none) rng_none=yes
|
|
|
|
;;
|
|
|
|
--disable-rng-none) rng_none=no
|
|
|
|
;;
|
2020-05-25 19:19:12 +08:00
|
|
|
--enable-keyring) secret_keyring="yes"
|
|
|
|
;;
|
|
|
|
--disable-keyring) secret_keyring="no"
|
|
|
|
;;
|
2021-03-12 23:14:40 +08:00
|
|
|
--enable-gio) gio=yes
|
|
|
|
;;
|
|
|
|
--disable-gio) gio=no
|
|
|
|
;;
|
2021-03-16 02:03:41 +08:00
|
|
|
--enable-slirp-smbd) slirp_smbd=yes
|
|
|
|
;;
|
|
|
|
--disable-slirp-smbd) slirp_smbd=no
|
|
|
|
;;
|
2021-10-07 21:08:29 +08:00
|
|
|
# backwards compatibility options
|
|
|
|
--enable-trace-backend=*) meson_option_parse "--enable-trace-backends=$optarg" "$optarg"
|
|
|
|
;;
|
|
|
|
--disable-blobs) meson_option_parse --disable-install-blobs ""
|
|
|
|
;;
|
|
|
|
--enable-tcmalloc) meson_option_parse --enable-malloc=tcmalloc tcmalloc
|
|
|
|
;;
|
|
|
|
--enable-jemalloc) meson_option_parse --enable-malloc=jemalloc jemalloc
|
|
|
|
;;
|
|
|
|
# everything else has the same name in configure and meson
|
2021-10-07 21:08:28 +08:00
|
|
|
--enable-* | --disable-*) meson_option_parse "$opt" "$optarg"
|
|
|
|
;;
|
2014-04-18 14:55:36 +08:00
|
|
|
*)
|
|
|
|
echo "ERROR: unknown option $opt"
|
|
|
|
echo "Try '$0 --help' for more information"
|
|
|
|
exit 1
|
2007-11-17 18:24:32 +08:00
|
|
|
;;
|
2003-03-07 07:23:54 +08:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
2021-07-09 22:29:54 +08:00
|
|
|
# test for any invalid configuration combinations
|
|
|
|
if test "$plugins" = "yes" -a "$tcg" = "disabled"; then
|
|
|
|
error_exit "Can't enable plugins on non-TCG builds"
|
|
|
|
fi
|
|
|
|
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-20 01:20:46 +08:00
|
|
|
case $git_submodules_action in
|
|
|
|
update|validate)
|
|
|
|
if test ! -e "$source_path/.git"; then
|
|
|
|
echo "ERROR: cannot $git_submodules_action git submodules without .git"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
ignore)
|
2021-05-12 15:18:55 +08:00
|
|
|
if ! test -f "$source_path/ui/keycodemapdb/README"
|
|
|
|
then
|
|
|
|
echo
|
|
|
|
echo "ERROR: missing GIT submodules"
|
|
|
|
echo
|
|
|
|
if test -e "$source_path/.git"; then
|
|
|
|
echo "--with-git-submodules=ignore specified but submodules were not"
|
|
|
|
echo "checked out. Please initialize and update submodules."
|
|
|
|
else
|
|
|
|
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."
|
|
|
|
fi
|
|
|
|
echo
|
|
|
|
exit 1
|
|
|
|
fi
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-20 01:20:46 +08:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2019-07-11 23:13:39 +08:00
|
|
|
libdir="${libdir:-$prefix/lib}"
|
|
|
|
libexecdir="${libexecdir:-$prefix/libexec}"
|
|
|
|
includedir="${includedir:-$prefix/include}"
|
|
|
|
|
|
|
|
if test "$mingw32" = "yes" ; then
|
2021-01-13 05:02:39 +08:00
|
|
|
bindir="${bindir:-$prefix}"
|
2019-07-11 23:13:39 +08:00
|
|
|
else
|
|
|
|
bindir="${bindir:-$prefix/bin}"
|
|
|
|
fi
|
2021-01-13 05:02:39 +08:00
|
|
|
mandir="${mandir:-$prefix/share/man}"
|
|
|
|
datadir="${datadir:-$prefix/share}"
|
|
|
|
docdir="${docdir:-$prefix/share/doc}"
|
|
|
|
sysconfdir="${sysconfdir:-$prefix/etc}"
|
|
|
|
local_statedir="${local_statedir:-$prefix/var}"
|
2020-10-16 15:19:14 +08:00
|
|
|
firmwarepath="${firmwarepath:-$datadir/qemu-firmware}"
|
|
|
|
localedir="${localedir:-$datadir/locale}"
|
2019-07-11 23:13:39 +08:00
|
|
|
|
2021-09-18 00:23:22 +08:00
|
|
|
if eval test -z "\${cross_cc_$cpu}"; then
|
|
|
|
eval "cross_cc_${cpu}=\$cc"
|
|
|
|
cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
|
|
|
|
fi
|
2013-04-18 12:46:14 +08:00
|
|
|
|
2016-06-13 18:32:24 +08:00
|
|
|
# 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
|
|
|
|
|
2011-05-03 21:50:13 +08:00
|
|
|
default_target_list=""
|
2021-05-03 16:40:34 +08:00
|
|
|
deprecated_targets_list=ppc64abi32-linux-user
|
2020-09-21 16:37:49 +08:00
|
|
|
deprecated_features=""
|
2013-05-20 23:16:15 +08:00
|
|
|
mak_wilds=""
|
|
|
|
|
|
|
|
if [ "$softmmu" = "yes" ]; then
|
2021-07-07 21:17:43 +08:00
|
|
|
mak_wilds="${mak_wilds} $source_path/configs/targets/*-softmmu.mak"
|
2011-05-03 21:50:13 +08:00
|
|
|
fi
|
2013-05-20 23:16:15 +08:00
|
|
|
if [ "$linux_user" = "yes" ]; then
|
2021-07-07 21:17:43 +08:00
|
|
|
mak_wilds="${mak_wilds} $source_path/configs/targets/*-linux-user.mak"
|
2011-05-03 21:50:13 +08:00
|
|
|
fi
|
2013-05-20 23:16:15 +08:00
|
|
|
if [ "$bsd_user" = "yes" ]; then
|
2021-07-07 21:17:43 +08:00
|
|
|
mak_wilds="${mak_wilds} $source_path/configs/targets/*-bsd-user.mak"
|
2011-05-03 21:50:13 +08:00
|
|
|
fi
|
|
|
|
|
2020-09-15 21:43:13 +08:00
|
|
|
# If the user doesn't explicitly specify a deprecated target we will
|
|
|
|
# skip it.
|
|
|
|
if test -z "$target_list"; then
|
|
|
|
if test -z "$target_list_exclude"; then
|
|
|
|
target_list_exclude="$deprecated_targets_list"
|
|
|
|
else
|
|
|
|
target_list_exclude="$target_list_exclude,$deprecated_targets_list"
|
|
|
|
fi
|
2020-09-09 19:27:37 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
for config in $mak_wilds; do
|
|
|
|
target="$(basename "$config" .mak)"
|
2020-09-15 21:43:14 +08:00
|
|
|
if echo "$target_list_exclude" | grep -vq "$target"; then
|
2020-09-09 19:27:37 +08:00
|
|
|
default_target_list="${default_target_list} $target"
|
|
|
|
fi
|
|
|
|
done
|
2013-05-20 23:16:15 +08:00
|
|
|
|
2006-04-08 22:26:41 +08:00
|
|
|
if test x"$show_help" = x"yes" ; then
|
|
|
|
cat << EOF
|
|
|
|
|
|
|
|
Usage: configure [options]
|
|
|
|
Options: [defaults in brackets after descriptions]
|
|
|
|
|
2013-12-19 05:09:39 +08:00
|
|
|
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]
|
2020-10-30 04:14:49 +08:00
|
|
|
--target-list=LIST set target list (default: build all non-deprecated)
|
2013-12-19 05:09:39 +08:00
|
|
|
$(echo Available targets: $default_target_list | \
|
|
|
|
fold -s -w 53 | sed -e 's/^/ /')
|
2020-10-30 04:14:49 +08:00
|
|
|
$(echo Deprecated targets: $deprecated_targets_list | \
|
|
|
|
fold -s -w 53 | sed -e 's/^/ /')
|
2019-03-19 19:59:12 +08:00
|
|
|
--target-list-exclude=LIST exclude a set of targets from the default target-list
|
2013-12-19 05:09:39 +08:00
|
|
|
|
|
|
|
Advanced options (experts only):
|
2021-01-26 09:24:48 +08:00
|
|
|
--cross-prefix=PREFIX use PREFIX for compile tools, PREFIX can be blank [$cross_prefix]
|
2013-12-19 05:09:39 +08:00
|
|
|
--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]
|
2021-11-05 17:09:26 +08:00
|
|
|
--extra-cflags=CFLAGS append extra C compiler flags CFLAGS
|
|
|
|
--extra-cxxflags=CXXFLAGS append extra C++ compiler flags CXXFLAGS
|
2013-12-19 05:09:39 +08:00
|
|
|
--extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
|
2018-04-05 03:27:05 +08:00
|
|
|
--cross-cc-ARCH=CC use compiler when building ARCH guest test cases
|
2018-04-13 18:07:58 +08:00
|
|
|
--cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
|
2013-12-19 05:09:39 +08:00
|
|
|
--make=MAKE use specified make [$make]
|
|
|
|
--python=PYTHON use specified python [$python]
|
2020-02-14 01:56:18 +08:00
|
|
|
--sphinx-build=SPHINX use specified sphinx-build [$sphinx_build]
|
2019-06-10 18:05:14 +08:00
|
|
|
--meson=MESON use specified meson [$meson]
|
2020-08-26 14:04:15 +08:00
|
|
|
--ninja=NINJA use specified ninja [$ninja]
|
2013-12-19 05:09:39 +08:00
|
|
|
--smbd=SMBD use specified smbd [$smbd]
|
2018-03-27 23:09:30 +08:00
|
|
|
--with-git=GIT use specified git [$git]
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-20 01:20:46 +08:00
|
|
|
--with-git-submodules=update update git submodules (default if .git dir exists)
|
|
|
|
--with-git-submodules=validate fail if git submodules are not up to date
|
|
|
|
--with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
|
2013-12-19 05:09:39 +08:00
|
|
|
--static enable static build [$static]
|
|
|
|
--mandir=PATH install man pages in PATH
|
2020-08-26 19:04:13 +08:00
|
|
|
--datadir=PATH install firmware in PATH/$qemu_suffix
|
2020-10-16 16:35:10 +08:00
|
|
|
--localedir=PATH install translation in PATH/$qemu_suffix
|
2020-08-26 19:04:13 +08:00
|
|
|
--docdir=PATH install documentation in PATH/$qemu_suffix
|
2013-12-19 05:09:39 +08:00
|
|
|
--bindir=PATH install binaries in PATH
|
|
|
|
--libdir=PATH install libraries in PATH
|
2018-03-27 23:09:30 +08:00
|
|
|
--libexecdir=PATH install helper binaries in PATH
|
2020-08-26 19:04:13 +08:00
|
|
|
--sysconfdir=PATH install config in PATH/$qemu_suffix
|
2013-12-19 05:09:39 +08:00
|
|
|
--localstatedir=PATH install local state in PATH (set at runtime on win32)
|
2017-09-14 19:42:36 +08:00
|
|
|
--firmwarepath=PATH search PATH for firmware files
|
2020-07-01 21:56:21 +08:00
|
|
|
--efi-aarch64=PATH PATH of efi file to use for aarch64 VMs.
|
2020-08-26 19:04:14 +08:00
|
|
|
--with-suffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
|
2018-03-27 23:09:30 +08:00
|
|
|
--with-pkgversion=VERS use specified string as sub-version of the package
|
2020-12-14 18:34:47 +08:00
|
|
|
--without-default-features default all --enable-* options to "disabled"
|
|
|
|
--without-default-devices do not include any device that is not needed to
|
|
|
|
start the emulator (only use if you are including
|
2021-07-07 21:17:44 +08:00
|
|
|
desired devices in configs/devices/)
|
|
|
|
--with-devices-ARCH=NAME override default configs/devices
|
2013-12-19 05:09:39 +08:00
|
|
|
--enable-debug enable common debug build options
|
2018-01-16 23:11:51 +08:00
|
|
|
--enable-sanitizers enable default sanitizers
|
2020-06-13 03:02:23 +08:00
|
|
|
--enable-tsan enable thread sanitizer
|
2013-12-19 05:09:39 +08:00
|
|
|
--disable-strip disable stripping binaries
|
|
|
|
--disable-werror disable compilation abort on warning
|
2014-03-29 00:19:02 +08:00
|
|
|
--disable-stack-protector disable compiler-provided stack protection
|
2021-11-02 21:56:22 +08:00
|
|
|
--audio-drv-list=LIST set audio drivers to try if -audiodev is not used
|
2013-12-19 05:09:39 +08:00
|
|
|
--block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
|
|
|
|
--block-drv-rw-whitelist=L
|
|
|
|
set block driver read-write whitelist
|
2021-07-10 00:41:41 +08:00
|
|
|
(by default affects only QEMU, not tools like qemu-img)
|
2013-12-19 05:09:39 +08:00
|
|
|
--block-drv-ro-whitelist=L
|
|
|
|
set block driver read-only whitelist
|
2021-07-10 00:41:41 +08:00
|
|
|
(by default affects only QEMU, not tools like qemu-img)
|
|
|
|
--enable-block-drv-whitelist-in-tools
|
|
|
|
use block whitelist also in tools instead of only QEMU
|
2013-12-19 05:09:39 +08:00
|
|
|
--with-trace-file=NAME Full PATH,NAME of file to store traces
|
|
|
|
Default:trace-<pid>
|
2015-06-18 03:19:26 +08:00
|
|
|
--cpu=CPU Build for host CPU [$cpu]
|
2013-12-19 05:09:39 +08:00
|
|
|
--with-coroutine=BACKEND coroutine backend. Supported options:
|
2017-04-28 20:24:44 +08:00
|
|
|
ucontext, sigaltstack, windows
|
2013-12-19 05:09:39 +08:00
|
|
|
--enable-gcov enable test coverage analysis with gcov
|
2015-06-18 03:19:26 +08:00
|
|
|
--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)
|
2016-06-06 17:05:06 +08:00
|
|
|
--tls-priority default TLS protocol/cipher priority string
|
2017-03-10 18:14:05 +08:00
|
|
|
--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
|
2019-06-13 21:52:25 +08:00
|
|
|
--enable-plugins
|
|
|
|
enable plugins via shared library loading
|
2019-11-28 23:35:24 +08:00
|
|
|
--disable-containers don't use containers for cross-building
|
2020-03-17 01:21:48 +08:00
|
|
|
--gdb=GDB-path gdb to use for gdbstub tests [$gdb_bin]
|
2021-10-07 21:08:28 +08:00
|
|
|
EOF
|
|
|
|
meson_options_help
|
|
|
|
cat << EOF
|
2015-06-18 03:19:26 +08:00
|
|
|
system all system emulation targets
|
|
|
|
user supported user emulation targets
|
|
|
|
linux-user all linux usermode emulation targets
|
|
|
|
bsd-user all BSD usermode emulation targets
|
|
|
|
guest-agent build the QEMU Guest Agent
|
|
|
|
pie Position Independent Executables
|
2019-07-18 20:04:13 +08:00
|
|
|
modules modules support (non-Windows)
|
2020-03-10 22:58:06 +08:00
|
|
|
module-upgrades try to load modules from alternate paths for upgrades
|
2015-06-18 03:19:26 +08:00
|
|
|
debug-tcg TCG debugging (default is disabled)
|
|
|
|
debug-info debugging information
|
2020-12-05 07:06:11 +08:00
|
|
|
lto Enable Link-Time Optimization.
|
2020-05-30 04:51:21 +08:00
|
|
|
safe-stack SafeStack Stack Smash Protection. Depends on
|
|
|
|
clang/llvm >= 3.7 and requires coroutine backend ucontext.
|
2018-02-16 17:05:23 +08:00
|
|
|
membarrier membarrier system call (for Linux 4.14+ or Windows)
|
2018-08-16 23:16:37 +08:00
|
|
|
rdma Enable RDMA-based migration
|
|
|
|
pvrdma Enable PVRDMA support
|
2019-02-15 01:35:53 +08:00
|
|
|
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
|
2020-07-01 22:55:37 +08:00
|
|
|
vhost-vdpa vhost-vdpa kernel backend support
|
2017-05-15 22:05:29 +08:00
|
|
|
live-block-migration Block migration in the main migration stream
|
2015-06-18 03:19:26 +08:00
|
|
|
coroutine-pool coroutine freelist (better performance)
|
|
|
|
tpm TPM support
|
|
|
|
numa libnuma support
|
2018-10-20 04:38:59 +08:00
|
|
|
avx2 AVX2 optimization support
|
2020-02-29 20:34:34 +08:00
|
|
|
avx512f AVX512F optimization support
|
2016-07-27 15:01:48 +08:00
|
|
|
replication replication support
|
2017-03-10 18:14:05 +08:00
|
|
|
opengl opengl support
|
|
|
|
xfsctl xfsctl support
|
|
|
|
qom-cast-debug cast debugging support
|
2019-02-08 03:36:03 +08:00
|
|
|
tools build qemu-io, qemu-nbd and qemu-img tools
|
2018-11-07 14:36:44 +08:00
|
|
|
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
|
2017-07-15 02:04:05 +08:00
|
|
|
crypto-afalg Linux AF_ALG crypto backend driver
|
2018-06-13 20:23:08 +08:00
|
|
|
debug-mutex mutex debugging support
|
2020-05-20 21:20:23 +08:00
|
|
|
rng-none dummy RNG, avoid using /dev/(u)random and getrandom()
|
2021-03-12 23:14:40 +08:00
|
|
|
gio libgio support
|
2021-03-16 02:03:41 +08:00
|
|
|
slirp-smbd use smbd (at path --smbd=*) in slirp networking
|
2013-12-19 05:09:39 +08:00
|
|
|
|
|
|
|
NOTE: The object files are built at the place where configure is launched
|
2006-04-08 22:26:41 +08:00
|
|
|
EOF
|
2014-04-18 14:55:36 +08:00
|
|
|
exit 0
|
2006-04-08 22:26:41 +08:00
|
|
|
fi
|
|
|
|
|
2019-03-11 18:20:34 +08:00
|
|
|
# Remove old dependency files to make sure that they get properly regenerated
|
2019-05-10 16:11:59 +08:00
|
|
|
rm -f */config-devices.mak.d
|
2019-03-11 18:20:34 +08:00
|
|
|
|
2019-03-28 01:07:01 +08:00
|
|
|
if test -z "$python"
|
|
|
|
then
|
|
|
|
error_exit "Python not found. Use --python=/path/to/python"
|
2017-03-28 21:44:18 +08:00
|
|
|
fi
|
2020-08-26 04:27:55 +08:00
|
|
|
if ! has "$make"
|
|
|
|
then
|
|
|
|
error_exit "GNU make ($make) not found"
|
|
|
|
fi
|
2017-03-28 21:44:18 +08:00
|
|
|
|
|
|
|
# Note that if the Python conditional here evaluates True we will exit
|
|
|
|
# with status 1 which is a shell 'false' value.
|
2020-09-25 23:40:27 +08:00
|
|
|
if ! $python -c 'import sys; sys.exit(sys.version_info < (3,6))'; then
|
|
|
|
error_exit "Cannot use '$python', Python >= 3.6 is required." \
|
2017-03-28 21:44:18 +08:00
|
|
|
"Use --python=/path/to/python to specify a supported Python."
|
|
|
|
fi
|
|
|
|
|
2018-11-09 23:07:07 +08:00
|
|
|
# Preserve python version since some functionality is dependent on it
|
2019-08-26 23:58:32 +08:00
|
|
|
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)
|
2018-11-09 23:07:07 +08:00
|
|
|
|
2017-03-28 21:44:18 +08:00
|
|
|
# Suppress writing compiled files
|
|
|
|
python="$python -B"
|
|
|
|
|
2019-08-21 15:21:16 +08:00
|
|
|
if test -z "$meson"; then
|
2021-10-27 21:18:48 +08:00
|
|
|
if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.59.3; then
|
2019-08-21 15:21:16 +08:00
|
|
|
meson=meson
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-20 01:20:46 +08:00
|
|
|
elif test $git_submodules_action != 'ignore' ; then
|
2019-08-21 15:21:16 +08:00
|
|
|
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
|
2019-06-10 18:05:14 +08:00
|
|
|
fi
|
|
|
|
|
2019-08-21 15:21:16 +08:00
|
|
|
if test "$meson" = git; then
|
|
|
|
git_submodules="${git_submodules} meson"
|
2019-06-10 18:05:14 +08:00
|
|
|
fi
|
2019-08-21 15:21:16 +08:00
|
|
|
|
|
|
|
case "$meson" in
|
|
|
|
git | internal)
|
|
|
|
meson="$python ${source_path}/meson/meson.py"
|
|
|
|
;;
|
2020-09-04 22:00:26 +08:00
|
|
|
*) meson=$(command -v "$meson") ;;
|
2019-08-21 15:21:16 +08:00
|
|
|
esac
|
|
|
|
|
2020-08-13 21:28:11 +08:00
|
|
|
# Probe for ninja
|
2020-08-26 14:04:15 +08:00
|
|
|
|
|
|
|
if test -z "$ninja"; then
|
|
|
|
for c in ninja ninja-build samu; do
|
|
|
|
if has $c; then
|
|
|
|
ninja=$(command -v "$c")
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
2020-08-13 21:28:11 +08:00
|
|
|
if test -z "$ninja"; then
|
|
|
|
error_exit "Cannot find Ninja"
|
|
|
|
fi
|
2020-08-26 14:04:15 +08:00
|
|
|
fi
|
2019-06-10 18:05:14 +08:00
|
|
|
|
2017-11-02 17:09:06 +08:00
|
|
|
# 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
|
|
|
|
|
2014-02-26 02:27:49 +08:00
|
|
|
# Consult white-list to determine whether to enable werror
|
|
|
|
# by default. Only enable by default for git builds
|
|
|
|
if test -z "$werror" ; then
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-20 01:20:46 +08:00
|
|
|
if test "$git_submodules_action" != "ignore" && \
|
2019-02-05 10:39:37 +08:00
|
|
|
{ test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
|
2014-02-26 02:27:49 +08:00
|
|
|
werror="yes"
|
|
|
|
else
|
|
|
|
werror="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2020-11-20 17:34:10 +08:00
|
|
|
if test "$targetos" = "bogus"; then
|
2017-03-28 21:01:52 +08:00
|
|
|
# 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.
|
2017-07-13 23:15:32 +08:00
|
|
|
error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
|
2017-03-28 21:01:52 +08:00
|
|
|
fi
|
|
|
|
|
configure: Add a test for the minimum compiler version
So far we only had implicit requirements for the minimum compiler version,
e.g. we require at least GCC 4.1 for the support of atomics. However,
such old compiler versions are not tested anymore by the developers, so
they are not really supported anymore. Since we recently declared explicitly
what platforms we intend to support, we can also get more explicit on the
compiler version now. The supported distributions use the following version
of GCC:
RHEL-7: 4.8.5
Debian (Stretch): 6.3.0
Debian (Jessie): 4.8.4
OpenBSD (ports): 4.9.4
FreeBSD (ports): 8.2.0
OpenSUSE Leap 15: 7.3.1
Ubuntu (Xenial): 5.3.1
macOS (Homebrew): 8.2.0
So we can safely assume GCC 4.8 these days. For Clang, the situation is
a little bit more ambiguous, since it is sometimes not available in the
main distros but rather third party repositories. At least Debian Jessie
uses version 3.5, and EPEL7 for RHEL7 uses 3.4, so let's use 3.4 as
minimum Clang version now - we still can adjust this later if necessary.
Unfortunately Apple uses different version numbers for the Clang that is
included in their Xcode suite, so we need to check the version numbers
for Xcode separately. Xcode 5.1 seems to be the first one that has been
shipped with LLVM 3.4, so use this version as the minimum there.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2018-12-03 17:12:32 +08:00
|
|
|
# Check whether the compiler matches our minimum requirements:
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#if defined(__clang_major__) && defined(__clang_minor__)
|
|
|
|
# ifdef __apple_build_version__
|
2021-05-14 20:04:15 +08:00
|
|
|
# if __clang_major__ < 10 || (__clang_major__ == 10 && __clang_minor__ < 0)
|
|
|
|
# error You need at least XCode Clang v10.0 to compile QEMU
|
configure: Add a test for the minimum compiler version
So far we only had implicit requirements for the minimum compiler version,
e.g. we require at least GCC 4.1 for the support of atomics. However,
such old compiler versions are not tested anymore by the developers, so
they are not really supported anymore. Since we recently declared explicitly
what platforms we intend to support, we can also get more explicit on the
compiler version now. The supported distributions use the following version
of GCC:
RHEL-7: 4.8.5
Debian (Stretch): 6.3.0
Debian (Jessie): 4.8.4
OpenBSD (ports): 4.9.4
FreeBSD (ports): 8.2.0
OpenSUSE Leap 15: 7.3.1
Ubuntu (Xenial): 5.3.1
macOS (Homebrew): 8.2.0
So we can safely assume GCC 4.8 these days. For Clang, the situation is
a little bit more ambiguous, since it is sometimes not available in the
main distros but rather third party repositories. At least Debian Jessie
uses version 3.5, and EPEL7 for RHEL7 uses 3.4, so let's use 3.4 as
minimum Clang version now - we still can adjust this later if necessary.
Unfortunately Apple uses different version numbers for the Clang that is
included in their Xcode suite, so we need to check the version numbers
for Xcode separately. Xcode 5.1 seems to be the first one that has been
shipped with LLVM 3.4, so use this version as the minimum there.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2018-12-03 17:12:32 +08:00
|
|
|
# endif
|
|
|
|
# else
|
2021-05-14 20:04:15 +08:00
|
|
|
# if __clang_major__ < 6 || (__clang_major__ == 6 && __clang_minor__ < 0)
|
|
|
|
# error You need at least Clang v6.0 to compile QEMU
|
configure: Add a test for the minimum compiler version
So far we only had implicit requirements for the minimum compiler version,
e.g. we require at least GCC 4.1 for the support of atomics. However,
such old compiler versions are not tested anymore by the developers, so
they are not really supported anymore. Since we recently declared explicitly
what platforms we intend to support, we can also get more explicit on the
compiler version now. The supported distributions use the following version
of GCC:
RHEL-7: 4.8.5
Debian (Stretch): 6.3.0
Debian (Jessie): 4.8.4
OpenBSD (ports): 4.9.4
FreeBSD (ports): 8.2.0
OpenSUSE Leap 15: 7.3.1
Ubuntu (Xenial): 5.3.1
macOS (Homebrew): 8.2.0
So we can safely assume GCC 4.8 these days. For Clang, the situation is
a little bit more ambiguous, since it is sometimes not available in the
main distros but rather third party repositories. At least Debian Jessie
uses version 3.5, and EPEL7 for RHEL7 uses 3.4, so let's use 3.4 as
minimum Clang version now - we still can adjust this later if necessary.
Unfortunately Apple uses different version numbers for the Clang that is
included in their Xcode suite, so we need to check the version numbers
for Xcode separately. Xcode 5.1 seems to be the first one that has been
shipped with LLVM 3.4, so use this version as the minimum there.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2018-12-03 17:12:32 +08:00
|
|
|
# endif
|
|
|
|
# endif
|
|
|
|
#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
|
2021-10-01 23:30:03 +08:00
|
|
|
# if __GNUC__ < 7 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4)
|
|
|
|
# error You need at least GCC v7.4.0 to compile QEMU
|
configure: Add a test for the minimum compiler version
So far we only had implicit requirements for the minimum compiler version,
e.g. we require at least GCC 4.1 for the support of atomics. However,
such old compiler versions are not tested anymore by the developers, so
they are not really supported anymore. Since we recently declared explicitly
what platforms we intend to support, we can also get more explicit on the
compiler version now. The supported distributions use the following version
of GCC:
RHEL-7: 4.8.5
Debian (Stretch): 6.3.0
Debian (Jessie): 4.8.4
OpenBSD (ports): 4.9.4
FreeBSD (ports): 8.2.0
OpenSUSE Leap 15: 7.3.1
Ubuntu (Xenial): 5.3.1
macOS (Homebrew): 8.2.0
So we can safely assume GCC 4.8 these days. For Clang, the situation is
a little bit more ambiguous, since it is sometimes not available in the
main distros but rather third party repositories. At least Debian Jessie
uses version 3.5, and EPEL7 for RHEL7 uses 3.4, so let's use 3.4 as
minimum Clang version now - we still can adjust this later if necessary.
Unfortunately Apple uses different version numbers for the Clang that is
included in their Xcode suite, so we need to check the version numbers
for Xcode separately. Xcode 5.1 seems to be the first one that has been
shipped with LLVM 3.4, so use this version as the minimum there.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2018-12-03 17:12:32 +08:00
|
|
|
# endif
|
|
|
|
#else
|
|
|
|
# error You either need GCC or Clang to compiler QEMU
|
|
|
|
#endif
|
|
|
|
int main (void) { return 0; }
|
|
|
|
EOF
|
|
|
|
if ! compile_prog "" "" ; then
|
2021-10-01 23:30:03 +08:00
|
|
|
error_exit "You need at least GCC v7.4 or Clang v6.0 (or XCode Clang v10.0)"
|
configure: Add a test for the minimum compiler version
So far we only had implicit requirements for the minimum compiler version,
e.g. we require at least GCC 4.1 for the support of atomics. However,
such old compiler versions are not tested anymore by the developers, so
they are not really supported anymore. Since we recently declared explicitly
what platforms we intend to support, we can also get more explicit on the
compiler version now. The supported distributions use the following version
of GCC:
RHEL-7: 4.8.5
Debian (Stretch): 6.3.0
Debian (Jessie): 4.8.4
OpenBSD (ports): 4.9.4
FreeBSD (ports): 8.2.0
OpenSUSE Leap 15: 7.3.1
Ubuntu (Xenial): 5.3.1
macOS (Homebrew): 8.2.0
So we can safely assume GCC 4.8 these days. For Clang, the situation is
a little bit more ambiguous, since it is sometimes not available in the
main distros but rather third party repositories. At least Debian Jessie
uses version 3.5, and EPEL7 for RHEL7 uses 3.4, so let's use 3.4 as
minimum Clang version now - we still can adjust this later if necessary.
Unfortunately Apple uses different version numbers for the Clang that is
included in their Xcode suite, so we need to check the version numbers
for Xcode separately. Xcode 5.1 seems to be the first one that has been
shipped with LLVM 3.4, so use this version as the minimum there.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2018-12-03 17:12:32 +08:00
|
|
|
fi
|
|
|
|
|
2020-06-18 04:13:06 +08:00
|
|
|
# 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
|
2020-12-11 23:24:26 +08:00
|
|
|
add_to warn_flags -Wimplicit-fallthrough=2
|
2020-06-18 04:13:06 +08:00
|
|
|
|
|
|
|
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
|
2020-06-18 04:13:07 +08:00
|
|
|
add_to nowarn_flags -Wno-tautological-type-limit-compare
|
2020-06-18 04:13:08 +08:00
|
|
|
add_to nowarn_flags -Wno-psabi
|
2020-06-18 04:13:06 +08:00
|
|
|
|
|
|
|
gcc_flags="$warn_flags $nowarn_flags"
|
2015-03-26 06:57:37 +08:00
|
|
|
|
|
|
|
cc_has_warning_flag() {
|
|
|
|
write_c_skeleton;
|
|
|
|
|
2012-10-28 05:19:07 +08:00
|
|
|
# Use the positive sense of the flag when testing for -Wno-wombat
|
|
|
|
# support (gcc will happily accept the -Wno- form of unknown
|
|
|
|
# warning options).
|
2015-03-26 06:57:37 +08:00
|
|
|
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"
|
2010-12-23 18:43:52 +08:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2014-07-02 16:05:24 +08:00
|
|
|
if test "$stack_protector" != "no"; then
|
2015-11-12 22:04:28 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
char arr[64], *p = arr, *c = argv[0];
|
|
|
|
while (*c) {
|
|
|
|
*p++ = *c++;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2014-03-29 00:19:02 +08:00
|
|
|
gcc_flags="-fstack-protector-strong -fstack-protector-all"
|
2014-07-02 16:05:24 +08:00
|
|
|
sp_on=0
|
2014-03-29 00:19:02 +08:00
|
|
|
for flag in $gcc_flags; do
|
2014-04-12 00:13:52 +08:00
|
|
|
# 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
|
2020-02-03 22:22:17 +08:00
|
|
|
if compile_object "-Werror $flag" &&
|
2014-04-12 00:13:52 +08:00
|
|
|
compile_prog "-Werror $flag" ""; then
|
2014-03-29 00:19:02 +08:00
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $flag"
|
build-sys: clean up flags included in the linker command line
Some of the CFLAGS that are discovered during configure, for example
compiler warnings, are being included on the linker command line because
QEMU_CFLAGS is added to it. Other flags, such as the -m32, appear twice
because they are included in both QEMU_CFLAGS and LDFLAGS. All this
leads to confusion with respect to what goes in which Makefile variables
(and we have plenty).
So, introduce QEMU_LDFLAGS for flags discovered by configure, following
the lead of QEMU_CFLAGS, and stop adding to it:
1) options that are already in CFLAGS, for example "-g"
2) duplicate options
At the same time, options that _are_ needed by both compiler and linker
must now be added to both QEMU_CFLAGS and QEMU_LDFLAGS, which is clearer.
This is mostly -fsanitize options. For now, --extra-cflags has this behavior
(but --extra-cxxflags does not).
Meson will not include CFLAGS on the linker command line, do the same in our
build system as well.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2019-12-11 22:34:27 +08:00
|
|
|
QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
|
2014-07-02 16:05:24 +08:00
|
|
|
sp_on=1
|
2014-03-29 00:19:02 +08:00
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
2014-07-02 16:05:24 +08:00
|
|
|
if test "$stack_protector" = yes; then
|
|
|
|
if test $sp_on = 0; then
|
|
|
|
error_exit "Stack protector not supported"
|
|
|
|
fi
|
|
|
|
fi
|
2013-02-26 06:31:12 +08:00
|
|
|
fi
|
|
|
|
|
2017-10-20 18:11:32 +08:00
|
|
|
# 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
|
|
|
|
|
2019-07-18 20:04:13 +08:00
|
|
|
# Our module code doesn't support Windows
|
|
|
|
if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
|
|
|
|
error_exit "Modules are not available for Windows"
|
|
|
|
fi
|
|
|
|
|
2020-03-10 22:58:06 +08:00
|
|
|
# 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
|
|
|
|
|
2021-07-09 22:29:55 +08:00
|
|
|
# Static linking is not possible with plugins, modules or PIE
|
2011-11-16 02:12:17 +08:00
|
|
|
if test "$static" = "yes" ; then
|
2014-02-26 00:36:55 +08:00
|
|
|
if test "$modules" = "yes" ; then
|
|
|
|
error_exit "static and modules are mutually incompatible"
|
|
|
|
fi
|
2021-07-09 22:29:55 +08:00
|
|
|
if test "$plugins" = "yes"; then
|
|
|
|
error_exit "static and plugins are mutually incompatible"
|
2021-07-09 22:29:57 +08:00
|
|
|
else
|
|
|
|
plugins="no"
|
2021-07-09 22:29:55 +08:00
|
|
|
fi
|
2011-11-16 02:12:17 +08:00
|
|
|
fi
|
|
|
|
|
2019-12-18 07:54:56 +08:00
|
|
|
cat > $TMPC << EOF
|
2011-11-23 17:24:25 +08:00
|
|
|
|
|
|
|
#ifdef __linux__
|
|
|
|
# define THREAD __thread
|
|
|
|
#else
|
|
|
|
# define THREAD
|
|
|
|
#endif
|
|
|
|
static THREAD int tls_var;
|
|
|
|
int main(void) { return tls_var; }
|
2011-11-16 02:12:17 +08:00
|
|
|
EOF
|
2019-08-16 03:41:51 +08:00
|
|
|
|
2021-08-06 03:25:45 +08:00
|
|
|
# Check we support -fno-pie and -no-pie first; we will need the former for
|
|
|
|
# building ROMs, and both for everything if --disable-pie is passed.
|
2019-12-18 07:54:56 +08:00
|
|
|
if compile_prog "-Werror -fno-pie" "-no-pie"; then
|
|
|
|
CFLAGS_NOPIE="-fno-pie"
|
2021-08-06 03:25:45 +08:00
|
|
|
LDFLAGS_NOPIE="-no-pie"
|
2019-12-18 07:54:56 +08:00
|
|
|
fi
|
|
|
|
|
2019-12-18 09:30:14 +08:00
|
|
|
if test "$static" = "yes"; then
|
2020-04-04 03:11:50 +08:00
|
|
|
if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
|
2020-09-23 17:26:15 +08:00
|
|
|
CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
|
2019-12-18 09:30:14 +08:00
|
|
|
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
|
2020-09-23 17:26:15 +08:00
|
|
|
CONFIGURE_CFLAGS="$CFLAGS_NOPIE $CONFIGURE_CFLAGS"
|
2021-08-06 03:25:45 +08:00
|
|
|
CONFIGURE_LDFLAGS="$LDFLAGS_NOPIE $CONFIGURE_LDFLAGS"
|
2020-04-04 03:11:50 +08:00
|
|
|
elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
|
2020-09-23 17:26:15 +08:00
|
|
|
CONFIGURE_CFLAGS="-fPIE -DPIE $CONFIGURE_CFLAGS"
|
|
|
|
CONFIGURE_LDFLAGS="-pie $CONFIGURE_LDFLAGS"
|
2019-12-18 09:15:01 +08:00
|
|
|
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"
|
2011-11-16 02:12:17 +08:00
|
|
|
fi
|
|
|
|
|
2019-12-18 08:00:39 +08:00
|
|
|
# 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
|
|
|
|
|
2013-04-17 22:26:47 +08:00
|
|
|
##########################################
|
|
|
|
# __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;
|
2013-05-12 03:46:58 +08:00
|
|
|
val = __sync_val_compare_and_swap(&val, 0, 1);
|
2013-04-17 22:26:47 +08:00
|
|
|
sfaa(&val);
|
|
|
|
return val;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if ! compile_prog "" "" ; then
|
|
|
|
QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2021-05-12 12:58:21 +08:00
|
|
|
if test "$tcg" = "enabled"; then
|
|
|
|
git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
|
|
|
|
git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
|
|
|
|
fi
|
|
|
|
|
2012-09-27 04:04:38 +08:00
|
|
|
if test -z "${target_list+xxx}" ; then
|
2020-09-21 16:37:49 +08:00
|
|
|
default_targets=yes
|
2017-07-03 22:58:28 +08:00
|
|
|
for target in $default_target_list; do
|
2020-09-21 16:37:49 +08:00
|
|
|
target_list="$target_list $target"
|
2017-07-03 22:58:28 +08:00
|
|
|
done
|
|
|
|
target_list="${target_list# }"
|
2012-09-14 21:17:03 +08:00
|
|
|
else
|
2020-09-21 16:37:49 +08:00
|
|
|
default_targets=no
|
2016-05-16 21:10:20 +08:00
|
|
|
target_list=$(echo "$target_list" | sed -e 's/,/ /g')
|
2017-07-03 22:58:28 +08:00
|
|
|
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
|
|
|
|
done
|
2012-09-14 21:17:03 +08:00
|
|
|
fi
|
2013-05-20 23:16:16 +08:00
|
|
|
|
2020-09-21 16:37:49 +08:00
|
|
|
for target in $target_list; do
|
|
|
|
# if a deprecated target is enabled we note it here
|
|
|
|
if echo "$deprecated_targets_list" | grep -q "$target"; then
|
|
|
|
add_to deprecated_features $target
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2010-05-26 22:08:17 +08:00
|
|
|
# see if system emulation was really requested
|
|
|
|
case " $target_list " in
|
|
|
|
*"-softmmu "*) softmmu=yes
|
|
|
|
;;
|
|
|
|
*) softmmu=no
|
|
|
|
;;
|
|
|
|
esac
|
2005-01-11 07:18:50 +08:00
|
|
|
|
2009-08-13 00:20:25 +08:00
|
|
|
feature_not_found() {
|
|
|
|
feature=$1
|
2014-01-24 09:39:10 +08:00
|
|
|
remedy=$2
|
2009-08-13 00:20:25 +08:00
|
|
|
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "User requested feature $feature" \
|
2014-01-24 09:39:10 +08:00
|
|
|
"configure was not able to find it." \
|
|
|
|
"$remedy"
|
2009-08-13 00:20:25 +08:00
|
|
|
}
|
|
|
|
|
2003-03-07 07:23:54 +08:00
|
|
|
# ---
|
|
|
|
# big/little endian test
|
|
|
|
cat > $TMPC << EOF
|
2021-07-15 16:39:28 +08:00
|
|
|
#include <stdio.h>
|
2013-07-01 11:30:18 +08:00
|
|
|
short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
|
|
|
|
short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
|
2021-07-15 16:39:28 +08:00
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
|
|
|
return printf("%s %s\n", (char *)big_endian, (char *)little_endian);
|
2003-03-07 07:23:54 +08:00
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
2021-07-15 16:39:28 +08:00
|
|
|
if compile_prog ; then
|
|
|
|
if strings -a $TMPE | grep -q BiGeNdIaN ; then
|
2013-07-01 11:30:18 +08:00
|
|
|
bigendian="yes"
|
2021-07-15 16:39:28 +08:00
|
|
|
elif strings -a $TMPE | grep -q LiTtLeEnDiAn ; then
|
2013-07-01 11:30:18 +08:00
|
|
|
bigendian="no"
|
|
|
|
else
|
|
|
|
echo big/little test failed
|
2021-07-15 16:39:28 +08:00
|
|
|
exit 1
|
2011-11-30 17:57:48 +08:00
|
|
|
fi
|
2013-07-01 11:30:18 +08:00
|
|
|
else
|
|
|
|
echo big/little test failed
|
2021-07-15 16:39:28 +08:00
|
|
|
exit 1
|
2003-03-07 07:23:54 +08:00
|
|
|
fi
|
|
|
|
|
2020-02-17 21:33:27 +08:00
|
|
|
##########################################
|
|
|
|
# system tools
|
|
|
|
if test -z "$want_tools"; then
|
|
|
|
if test "$softmmu" = "no"; then
|
|
|
|
want_tools=no
|
|
|
|
else
|
|
|
|
want_tools=yes
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2019-02-15 01:35:53 +08:00
|
|
|
#########################################
|
|
|
|
# vhost interdependencies and host support
|
|
|
|
|
|
|
|
# vhost backends
|
2020-11-11 01:11:21 +08:00
|
|
|
if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
|
|
|
|
error_exit "vhost-user is only available on Linux"
|
2019-02-15 01:35:53 +08:00
|
|
|
fi
|
2020-07-01 22:55:37 +08:00
|
|
|
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
|
2019-02-15 01:35:53 +08:00
|
|
|
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
|
2019-09-30 18:51:34 +08:00
|
|
|
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
|
2020-07-01 22:55:37 +08:00
|
|
|
#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
|
2019-02-15 01:35:53 +08:00
|
|
|
|
2020-09-25 05:00:23 +08:00
|
|
|
# OR the vhost-kernel, vhost-vdpa and vhost-user values for simplicity
|
2019-02-15 01:35:53 +08:00
|
|
|
if test "$vhost_net" = ""; then
|
|
|
|
test "$vhost_net_user" = "yes" && vhost_net=yes
|
2020-09-25 05:00:23 +08:00
|
|
|
test "$vhost_net_vdpa" = "yes" && vhost_net=yes
|
2019-02-15 01:35:53 +08:00
|
|
|
test "$vhost_kernel" = "yes" && vhost_net=yes
|
|
|
|
fi
|
|
|
|
|
2012-12-16 18:29:45 +08:00
|
|
|
##########################################
|
|
|
|
# pkg-config probe
|
|
|
|
|
|
|
|
if ! has "$pkg_config_exe"; then
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "pkg-config binary '$pkg_config_exe' not found"
|
2012-12-16 18:29:45 +08:00
|
|
|
fi
|
|
|
|
|
2009-04-22 23:19:10 +08:00
|
|
|
##########################################
|
|
|
|
# xen probe
|
|
|
|
|
2020-09-18 16:57:25 +08:00
|
|
|
if test "$xen" != "disabled" ; then
|
2017-03-27 15:42:45 +08:00
|
|
|
# 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') )"
|
2020-09-18 16:57:25 +08:00
|
|
|
xen=enabled
|
2020-07-27 22:00:48 +08:00
|
|
|
xen_pc="xencontrol xenstore xenforeignmemory xengnttab"
|
2017-03-27 15:42:45 +08:00
|
|
|
xen_pc="$xen_pc xenevtchn xendevicemodel"
|
2017-09-25 23:01:48 +08:00
|
|
|
if $pkg_config --exists xentoolcore; then
|
|
|
|
xen_pc="$xen_pc xentoolcore"
|
|
|
|
fi
|
2019-08-15 19:15:32 +08:00
|
|
|
xen_cflags="$($pkg_config --cflags $xen_pc)"
|
|
|
|
xen_libs="$($pkg_config --libs $xen_pc)"
|
2017-03-27 15:42:45 +08:00
|
|
|
else
|
2011-02-26 00:20:34 +08:00
|
|
|
|
2020-07-27 22:00:48 +08:00
|
|
|
xen_libs="-lxenstore -lxenctrl"
|
2017-05-11 19:35:42 +08:00
|
|
|
xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
|
2011-12-17 16:27:39 +08:00
|
|
|
|
2017-03-27 15:42:45 +08:00
|
|
|
# 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 <<EOF
|
2009-04-22 23:19:10 +08:00
|
|
|
#include <xenctrl.h>
|
2011-12-17 16:27:39 +08:00
|
|
|
int main(void) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2017-03-27 15:42:45 +08:00
|
|
|
if ! compile_prog "" "$xen_libs" ; then
|
|
|
|
# Xen not found
|
2020-09-18 16:57:25 +08:00
|
|
|
if test "$xen" = "enabled" ; then
|
2017-03-27 15:42:45 +08:00
|
|
|
feature_not_found "xen" "Install xen devel"
|
|
|
|
fi
|
2020-09-18 16:57:25 +08:00
|
|
|
xen=disabled
|
2011-12-17 16:27:39 +08:00
|
|
|
|
2017-03-27 15:42:45 +08:00
|
|
|
# Xen unstable
|
|
|
|
elif
|
|
|
|
cat > $TMPC <<EOF &&
|
2017-10-23 17:27:27 +08:00
|
|
|
#undef XC_WANT_COMPAT_DEVICEMODEL_API
|
|
|
|
#define __XEN_TOOLS__
|
|
|
|
#include <xendevicemodel.h>
|
2018-05-16 00:40:53 +08:00
|
|
|
#include <xenforeignmemory.h>
|
2017-10-23 17:27:27 +08:00
|
|
|
int main(void) {
|
|
|
|
xendevicemodel_handle *xd;
|
2018-05-16 00:40:53 +08:00
|
|
|
xenforeignmemory_handle *xfmem;
|
2017-10-23 17:27:27 +08:00
|
|
|
|
|
|
|
xd = xendevicemodel_open(0, 0);
|
|
|
|
xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
|
|
|
|
|
2018-05-16 00:40:53 +08:00
|
|
|
xfmem = xenforeignmemory_open(0, 0);
|
|
|
|
xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
|
|
|
|
|
2017-10-23 17:27:27 +08:00
|
|
|
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
|
2020-09-18 16:57:25 +08:00
|
|
|
xen=enabled
|
2017-10-23 17:27:27 +08:00
|
|
|
elif
|
|
|
|
cat > $TMPC <<EOF &&
|
2017-07-11 06:40:02 +08:00
|
|
|
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
|
|
|
|
#include <xenforeignmemory.h>
|
2017-09-25 23:01:48 +08:00
|
|
|
#include <xentoolcore.h>
|
2017-07-11 06:40:02 +08:00
|
|
|
int main(void) {
|
|
|
|
xenforeignmemory_handle *xfmem;
|
|
|
|
|
|
|
|
xfmem = xenforeignmemory_open(0, 0);
|
|
|
|
xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
|
2017-09-25 23:01:48 +08:00
|
|
|
xentoolcore_restrict_all(0);
|
2017-07-11 06:40:02 +08:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2017-09-25 23:01:48 +08:00
|
|
|
compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
|
2017-07-11 06:40:02 +08:00
|
|
|
then
|
2017-09-25 23:01:48 +08:00
|
|
|
xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
|
2017-07-11 06:40:02 +08:00
|
|
|
xen_ctrl_version=41000
|
2020-09-18 16:57:25 +08:00
|
|
|
xen=enabled
|
2017-07-11 06:40:02 +08:00
|
|
|
elif
|
|
|
|
cat > $TMPC <<EOF &&
|
2017-03-07 18:55:33 +08:00
|
|
|
#undef XC_WANT_COMPAT_DEVICEMODEL_API
|
|
|
|
#define __XEN_TOOLS__
|
|
|
|
#include <xendevicemodel.h>
|
|
|
|
int main(void) {
|
|
|
|
xendevicemodel_handle *xd;
|
|
|
|
|
|
|
|
xd = xendevicemodel_open(0, 0);
|
|
|
|
xendevicemodel_close(xd);
|
2011-12-17 16:27:39 +08:00
|
|
|
|
2017-03-07 18:55:33 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2017-03-27 15:42:45 +08:00
|
|
|
compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
|
|
|
|
then
|
|
|
|
xen_stable_libs="-lxendevicemodel $xen_stable_libs"
|
|
|
|
xen_ctrl_version=40900
|
2020-09-18 16:57:25 +08:00
|
|
|
xen=enabled
|
2017-03-27 15:42:45 +08:00
|
|
|
elif
|
|
|
|
cat > $TMPC <<EOF &&
|
2016-09-15 03:10:03 +08:00
|
|
|
/*
|
|
|
|
* 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 <xenctrl.h>
|
|
|
|
#include <xenstore.h>
|
|
|
|
#include <xenevtchn.h>
|
|
|
|
#include <xengnttab.h>
|
|
|
|
#include <xenforeignmemory.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <xen/hvm/hvm_info_table.h>
|
|
|
|
#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
|
2017-03-27 15:42:45 +08:00
|
|
|
compile_prog "" "$xen_libs $xen_stable_libs"
|
|
|
|
then
|
|
|
|
xen_ctrl_version=40800
|
2020-09-18 16:57:25 +08:00
|
|
|
xen=enabled
|
2017-03-27 15:42:45 +08:00
|
|
|
elif
|
|
|
|
cat > $TMPC <<EOF &&
|
2016-01-15 21:23:42 +08:00
|
|
|
/*
|
|
|
|
* 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 <xenctrl.h>
|
|
|
|
#include <xenstore.h>
|
|
|
|
#include <xenevtchn.h>
|
|
|
|
#include <xengnttab.h>
|
|
|
|
#include <xenforeignmemory.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <xen/hvm/hvm_info_table.h>
|
|
|
|
#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
|
2017-03-27 15:42:45 +08:00
|
|
|
compile_prog "" "$xen_libs $xen_stable_libs"
|
|
|
|
then
|
|
|
|
xen_ctrl_version=40701
|
2020-09-18 16:57:25 +08:00
|
|
|
xen=enabled
|
2017-03-27 15:42:45 +08:00
|
|
|
|
|
|
|
# Xen 4.6
|
|
|
|
elif
|
|
|
|
cat > $TMPC <<EOF &&
|
2015-11-14 01:38:06 +08:00
|
|
|
#include <xenctrl.h>
|
2012-06-21 19:44:35 +08:00
|
|
|
#include <xenstore.h>
|
2011-02-26 00:20:34 +08:00
|
|
|
#include <stdint.h>
|
|
|
|
#include <xen/hvm/hvm_info_table.h>
|
|
|
|
#if !defined(HVM_MAX_VCPUS)
|
|
|
|
# error HVM_MAX_VCPUS not defined
|
|
|
|
#endif
|
2015-07-24 17:38:28 +08:00
|
|
|
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);
|
2015-06-30 00:51:05 +08:00
|
|
|
xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
|
2015-07-24 17:38:28 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2017-03-27 15:42:45 +08:00
|
|
|
compile_prog "" "$xen_libs"
|
|
|
|
then
|
|
|
|
xen_ctrl_version=40600
|
2020-09-18 16:57:25 +08:00
|
|
|
xen=enabled
|
2017-03-27 15:42:45 +08:00
|
|
|
|
|
|
|
# Xen 4.5
|
|
|
|
elif
|
|
|
|
cat > $TMPC <<EOF &&
|
2015-07-24 17:38:28 +08:00
|
|
|
#include <xenctrl.h>
|
|
|
|
#include <xenstore.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <xen/hvm/hvm_info_table.h>
|
|
|
|
#if !defined(HVM_MAX_VCPUS)
|
|
|
|
# error HVM_MAX_VCPUS not defined
|
|
|
|
#endif
|
2015-01-20 19:06:19 +08:00
|
|
|
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
|
2017-03-27 15:42:45 +08:00
|
|
|
compile_prog "" "$xen_libs"
|
|
|
|
then
|
|
|
|
xen_ctrl_version=40500
|
2020-09-18 16:57:25 +08:00
|
|
|
xen=enabled
|
2015-01-20 19:06:19 +08:00
|
|
|
|
2017-03-27 15:42:45 +08:00
|
|
|
elif
|
|
|
|
cat > $TMPC <<EOF &&
|
2015-01-20 19:06:19 +08:00
|
|
|
#include <xenctrl.h>
|
|
|
|
#include <xenstore.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <xen/hvm/hvm_info_table.h>
|
|
|
|
#if !defined(HVM_MAX_VCPUS)
|
|
|
|
# error HVM_MAX_VCPUS not defined
|
|
|
|
#endif
|
2012-04-18 01:04:18 +08:00
|
|
|
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
|
2017-03-27 15:42:45 +08:00
|
|
|
compile_prog "" "$xen_libs"
|
|
|
|
then
|
|
|
|
xen_ctrl_version=40200
|
2020-09-18 16:57:25 +08:00
|
|
|
xen=enabled
|
2012-04-18 01:04:18 +08:00
|
|
|
|
2017-03-27 15:42:45 +08:00
|
|
|
else
|
2020-09-18 16:57:25 +08:00
|
|
|
if test "$xen" = "enabled" ; then
|
2017-03-27 15:42:45 +08:00
|
|
|
feature_not_found "xen (unsupported version)" \
|
|
|
|
"Install a supported xen (xen 4.2 or newer)"
|
|
|
|
fi
|
2020-09-18 16:57:25 +08:00
|
|
|
xen=disabled
|
2009-08-13 00:29:55 +08:00
|
|
|
fi
|
2011-02-26 00:20:34 +08:00
|
|
|
|
2020-09-18 16:57:25 +08:00
|
|
|
if test "$xen" = enabled; then
|
2017-03-27 15:42:45 +08:00
|
|
|
if test $xen_ctrl_version -ge 40701 ; then
|
2019-08-15 19:15:32 +08:00
|
|
|
xen_libs="$xen_libs $xen_stable_libs "
|
2017-03-27 15:42:45 +08:00
|
|
|
fi
|
2016-01-15 21:23:42 +08:00
|
|
|
fi
|
2011-02-26 00:20:34 +08:00
|
|
|
fi
|
2009-04-22 23:19:10 +08:00
|
|
|
fi
|
|
|
|
|
2013-07-22 22:01:54 +08:00
|
|
|
##########################################
|
|
|
|
# RDMA needs OpenFabrics libraries
|
|
|
|
if test "$rdma" != "no" ; then
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <rdma/rdma_cma.h>
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
2018-02-09 21:23:18 +08:00
|
|
|
rdma_libs="-lrdmacm -libverbs -libumad"
|
2013-07-22 22:01:54 +08:00
|
|
|
if compile_prog "" "$rdma_libs" ; then
|
|
|
|
rdma="yes"
|
|
|
|
else
|
|
|
|
if test "$rdma" = "yes" ; then
|
|
|
|
error_exit \
|
2018-02-09 21:23:18 +08:00
|
|
|
" OpenFabrics librdmacm/libibverbs/libibumad not present." \
|
2013-07-22 22:01:54 +08:00
|
|
|
" Your options:" \
|
2018-02-09 21:23:18 +08:00
|
|
|
" (1) Fast: Install infiniband packages (devel) from your distro." \
|
2013-07-22 22:01:54 +08:00
|
|
|
" (2) Cleanest: Install libraries from www.openfabrics.org" \
|
|
|
|
" (3) Also: Install softiwarp if you don't have RDMA hardware"
|
|
|
|
fi
|
|
|
|
rdma="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-08-16 23:16:37 +08:00
|
|
|
##########################################
|
|
|
|
# PVRDMA detection
|
|
|
|
|
|
|
|
cat > $TMPC <<EOF &&
|
|
|
|
#include <sys/mman.h>
|
|
|
|
|
|
|
|
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
|
2014-02-22 05:21:15 +08:00
|
|
|
|
2019-08-18 21:21:06 +08:00
|
|
|
# Let's see if enhanced reg_mr is supported
|
|
|
|
if test "$pvrdma" = "yes" ; then
|
|
|
|
|
|
|
|
cat > $TMPC <<EOF &&
|
|
|
|
#include <infiniband/verbs.h>
|
|
|
|
|
|
|
|
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
|
|
|
|
|
2009-10-02 02:10:37 +08:00
|
|
|
##########################################
|
2016-12-03 03:48:54 +08:00
|
|
|
# xfsctl() probe, used for file-posix.c
|
2010-12-17 18:41:15 +08:00
|
|
|
if test "$xfs" != "no" ; then
|
|
|
|
cat > $TMPC << EOF
|
2011-12-17 16:27:36 +08:00
|
|
|
#include <stddef.h> /* NULL */
|
2010-12-17 18:41:15 +08:00
|
|
|
#include <xfs/xfs.h>
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
xfsctl(NULL, 0, 0, NULL);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
xfs="yes"
|
|
|
|
else
|
|
|
|
if test "$xfs" = "yes" ; then
|
2020-09-17 15:50:20 +08:00
|
|
|
feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
|
2010-12-17 18:41:15 +08:00
|
|
|
fi
|
|
|
|
xfs=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2021-07-09 22:29:57 +08:00
|
|
|
##########################################
|
|
|
|
# plugin linker support probe
|
|
|
|
|
|
|
|
if test "$plugins" != "no"; then
|
|
|
|
|
|
|
|
#########################################
|
|
|
|
# See if --dynamic-list is supported by the linker
|
|
|
|
|
|
|
|
ld_dynamic_list="no"
|
|
|
|
cat > $TMPTXT <<EOF
|
|
|
|
{
|
|
|
|
foo;
|
|
|
|
};
|
|
|
|
EOF
|
|
|
|
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <stdio.h>
|
|
|
|
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
|
|
|
|
|
|
|
|
#########################################
|
|
|
|
# See if -exported_symbols_list is supported by the linker
|
|
|
|
|
|
|
|
ld_exported_symbols_list="no"
|
|
|
|
cat > $TMPTXT <<EOF
|
|
|
|
_foo
|
|
|
|
EOF
|
|
|
|
|
|
|
|
if compile_prog "" "-Wl,-exported_symbols_list,$TMPTXT" ; then
|
|
|
|
ld_exported_symbols_list="yes"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$ld_dynamic_list" = "no" &&
|
|
|
|
test "$ld_exported_symbols_list" = "no" ; then
|
|
|
|
if test "$plugins" = "yes"; 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."
|
|
|
|
else
|
|
|
|
plugins="no"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
plugins="yes"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2011-07-20 03:50:29 +08:00
|
|
|
##########################################
|
|
|
|
# glib support probe
|
2012-04-05 19:01:54 +08:00
|
|
|
|
2021-05-14 20:04:13 +08:00
|
|
|
glib_req_ver=2.56
|
2014-02-26 00:36:55 +08:00
|
|
|
glib_modules=gthread-2.0
|
|
|
|
if test "$modules" = yes; then
|
2018-03-08 16:53:00 +08:00
|
|
|
glib_modules="$glib_modules gmodule-export-2.0"
|
plugins: do not limit exported symbols if modules are active
On Mac --enable-modules and --enable-plugins are currently incompatible, because the
Apple -Wl,-exported_symbols_list command line options prevents the export of any
symbols needed by the modules. On x86 -Wl,--dynamic-list does not have this effect,
but only because the -Wl,--export-dynamic option provided by gmodule-2.0.pc overrides
it. On Apple there is no -Wl,--export-dynamic, because it is the default, and thus
no override.
Either way, when modules are active there is no reason to include the plugin_ldflags.
While at it, avoid the useless -Wl,--export-dynamic when --enable-plugins is
specified but --enable-modules is not; this way, the GNU and Apple configurations
are more similar.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/516
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
[AJB: fix noexport to no-export]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20210811100550.54714-1-pbonzini@redhat.com>
Cc: qemu-stable@nongnu.org
2021-08-11 18:05:50 +08:00
|
|
|
elif test "$plugins" = "yes"; then
|
|
|
|
glib_modules="$glib_modules gmodule-no-export-2.0"
|
2017-08-31 06:39:53 +08:00
|
|
|
fi
|
2014-02-10 14:48:57 +08:00
|
|
|
|
2014-02-26 00:36:55 +08:00
|
|
|
for i in $glib_modules; do
|
2014-02-10 14:48:57 +08:00
|
|
|
if $pkg_config --atleast-version=$glib_req_ver $i; then
|
2016-05-16 21:10:20 +08:00
|
|
|
glib_cflags=$($pkg_config --cflags $i)
|
|
|
|
glib_libs=$($pkg_config --libs $i)
|
2014-02-10 14:48:57 +08:00
|
|
|
else
|
|
|
|
error_exit "glib-$glib_req_ver $i is required to compile QEMU"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2020-09-01 20:41:17 +08:00
|
|
|
# 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
|
|
|
|
glib_cflags="-DGLIB_STATIC_COMPILATION $glib_cflags"
|
|
|
|
fi
|
|
|
|
|
2021-03-12 23:14:40 +08:00
|
|
|
if ! test "$gio" = "no"; then
|
|
|
|
pass=no
|
|
|
|
if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
|
|
|
|
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)
|
2021-05-05 22:15:34 +08:00
|
|
|
if ! has "$gdbus_codegen"; then
|
2021-03-12 23:14:40 +08:00
|
|
|
gdbus_codegen=
|
|
|
|
fi
|
|
|
|
# Check that the libraries actually work -- Ubuntu 18.04 ships
|
|
|
|
# with pkg-config --static --libs data for gio-2.0 that is missing
|
|
|
|
# -lblkid and will give a link error.
|
|
|
|
cat > $TMPC <<EOF
|
2020-11-17 20:56:33 +08:00
|
|
|
#include <gio/gio.h>
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
g_dbus_proxy_new_sync(0, 0, 0, 0, 0, 0, 0, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2021-03-12 23:14:40 +08:00
|
|
|
if compile_prog "$gio_cflags" "$gio_libs" ; then
|
|
|
|
pass=yes
|
|
|
|
else
|
|
|
|
pass=no
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$pass" = "yes" &&
|
|
|
|
$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
|
2020-11-03 00:52:17 +08:00
|
|
|
fi
|
2019-02-21 19:07:00 +08:00
|
|
|
|
2021-03-12 23:14:40 +08:00
|
|
|
if test "$pass" = "no"; then
|
|
|
|
if test "$gio" = "yes"; then
|
|
|
|
feature_not_found "gio" "Install libgio >= 2.0"
|
|
|
|
else
|
|
|
|
gio=no
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
gio=yes
|
|
|
|
fi
|
2019-09-27 15:34:42 +08:00
|
|
|
fi
|
|
|
|
|
2016-01-27 17:00:45 +08:00
|
|
|
# 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 <<EOF
|
|
|
|
#include <glib.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
#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
|
|
|
|
|
2020-09-01 20:41:17 +08:00
|
|
|
if ! compile_prog "$glib_cflags" "$glib_libs" ; then
|
2016-01-27 17:00:45 +08:00
|
|
|
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
|
|
|
|
|
2020-03-18 01:55:34 +08:00
|
|
|
# Silence clang warnings triggered by glib < 2.57.2
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <glib.h>
|
|
|
|
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"
|
2020-09-23 17:26:15 +08:00
|
|
|
CONFIGURE_CFLAGS="$CONFIGURE_CFLAGS -Wno-unused-function"
|
2020-03-18 01:55:34 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2014-02-10 14:48:57 +08:00
|
|
|
##########################################
|
|
|
|
# SHA command probe for modules
|
|
|
|
if test "$modules" = yes; then
|
|
|
|
shacmd_probe="sha1sum sha1 shasum"
|
|
|
|
for c in $shacmd_probe; do
|
2014-12-04 14:18:16 +08:00
|
|
|
if has $c; then
|
2014-02-10 14:48:57 +08:00
|
|
|
shacmd="$c"
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
if test "$shacmd" = ""; then
|
|
|
|
error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
|
|
|
|
fi
|
2011-07-20 03:50:29 +08:00
|
|
|
fi
|
|
|
|
|
2013-03-18 23:37:50 +08:00
|
|
|
##########################################
|
2019-01-23 14:56:07 +08:00
|
|
|
# TPM emulation is only on POSIX
|
2013-03-18 23:37:50 +08:00
|
|
|
|
2019-01-23 14:56:07 +08:00
|
|
|
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
|
2013-03-18 23:37:50 +08:00
|
|
|
fi
|
|
|
|
|
2008-12-16 18:43:48 +08:00
|
|
|
##########################################
|
|
|
|
# fdt probe
|
2019-06-21 21:05:44 +08:00
|
|
|
|
2020-10-05 17:31:15 +08:00
|
|
|
case "$fdt" in
|
|
|
|
auto | enabled | internal)
|
|
|
|
# Simpler to always update submodule, even if not needed.
|
2021-05-12 15:21:56 +08:00
|
|
|
git_submodules="${git_submodules} dtc"
|
2020-10-05 17:31:15 +08:00
|
|
|
;;
|
|
|
|
esac
|
2008-12-16 18:43:48 +08:00
|
|
|
|
2011-03-08 06:32:39 +08:00
|
|
|
##########################################
|
2021-05-03 16:40:33 +08:00
|
|
|
# opengl probe (for sdl2, gtk)
|
2015-03-16 17:03:53 +08:00
|
|
|
|
2014-11-20 16:49:44 +08:00
|
|
|
if test "$opengl" != "no" ; then
|
2021-02-23 14:03:07 +08:00
|
|
|
epoxy=no
|
|
|
|
if $pkg_config epoxy; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <epoxy/egl.h>
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
epoxy=yes
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$epoxy" = "yes" ; then
|
|
|
|
opengl_cflags="$($pkg_config --cflags epoxy)"
|
|
|
|
opengl_libs="$($pkg_config --libs epoxy)"
|
2014-11-20 16:49:44 +08:00
|
|
|
opengl=yes
|
2011-03-08 06:32:39 +08:00
|
|
|
else
|
2014-11-20 16:49:44 +08:00
|
|
|
if test "$opengl" = "yes" ; then
|
2021-02-23 14:03:07 +08:00
|
|
|
feature_not_found "opengl" "Please install epoxy with EGL"
|
2011-03-08 06:32:39 +08:00
|
|
|
fi
|
2015-01-10 03:08:49 +08:00
|
|
|
opengl_cflags=""
|
2014-11-20 16:49:44 +08:00
|
|
|
opengl_libs=""
|
|
|
|
opengl=no
|
2011-03-08 06:32:39 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2014-05-14 17:43:28 +08:00
|
|
|
##########################################
|
|
|
|
# libnuma probe
|
|
|
|
|
|
|
|
if test "$numa" != "no" ; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <numa.h>
|
|
|
|
int main(void) { return numa_available(); }
|
|
|
|
EOF
|
|
|
|
|
|
|
|
if compile_prog "" "-lnuma" ; then
|
|
|
|
numa=yes
|
2019-07-24 23:23:16 +08:00
|
|
|
numa_libs="-lnuma"
|
2014-05-14 17:43:28 +08:00
|
|
|
else
|
|
|
|
if test "$numa" = "yes" ; then
|
|
|
|
feature_not_found "numa" "install numactl devel"
|
|
|
|
fi
|
|
|
|
numa=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-10-09 00:35:19 +08:00
|
|
|
# check for usbfs
|
|
|
|
have_usbfs=no
|
|
|
|
if test "$linux_user" = "yes"; then
|
2019-02-14 05:18:27 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <linux/usbdevice_fs.h>
|
|
|
|
|
|
|
|
#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
|
2018-10-09 00:35:19 +08:00
|
|
|
have_usbfs=yes
|
|
|
|
fi
|
|
|
|
fi
|
2015-10-09 23:17:16 +08:00
|
|
|
|
2013-08-07 23:40:03 +08:00
|
|
|
##########################################
|
|
|
|
# check if we have VSS SDK headers for win
|
|
|
|
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
|
|
|
|
test "$vss_win32_sdk" != "no" ; then
|
2013-08-07 23:40:03 +08:00
|
|
|
case "$vss_win32_sdk" in
|
configure: mark qemu-ga VSS includes as system headers
As of e4650c81, we do w32 builds with -Werror enabled. Unfortunately
for cases where we enable VSS support in qemu-ga, we still have
warnings generated by VSS includes that ship as part of the Microsoft
VSS SDK.
We can selectively address a number of these warnings using
#pragma GCC diagnostic ignored ...
but at least one of these:
warning: ‘typedef’ was ignored in this declaration
resulting from declarations of the form:
typedef struct Blah { ... };
does not provide a specific command-line/pragma option to disable
warnings of the sort.
To allow VSS builds to succeed, the next-best option is disabling
these warnings on a per-file basis. pragmas like #pragma GCC
system_header can be used to declare subsequent includes/declarations
as being exempt from normal warnings, but this must be done within
a header file.
Since we don't control the VSS SDK, we'd need to rely on a
intermediate header include to accomplish this, and
since different objects in the VSS link target rely on different
headers from the VSS SDK, this would become somewhat of a rat's nest
(though not totally unmanageable).
The next step up in granularity is just marking the entire VSS
SDK include path as system headers via -isystem. This is a bit more
heavy-handed, but since this SDK hasn't changed since 2005, there's
likely little to be gained from selectively disabling warnings
anyway, so we implement that approach here.
This fixes the -Werror failures in both the configure test and the
qga build due to shared reliance on $vss_win32_include. For the
same reason, this also enforces a new dependency on -isystem support
in the C/C++ compiler when building QGA with VSS enabled.
Cc: Thomas Huth <thuth@redhat.com>
Cc: Stefan Weil <sw@weilnetz.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2016-06-29 06:31:49 +08:00
|
|
|
"") vss_win32_include="-isystem $source_path" ;;
|
2013-08-07 23:40:03 +08:00
|
|
|
*\ *) # The SDK is installed in "Program Files" by default, but we cannot
|
|
|
|
# handle path with spaces. So we symlink the headers into ".sdk/vss".
|
configure: mark qemu-ga VSS includes as system headers
As of e4650c81, we do w32 builds with -Werror enabled. Unfortunately
for cases where we enable VSS support in qemu-ga, we still have
warnings generated by VSS includes that ship as part of the Microsoft
VSS SDK.
We can selectively address a number of these warnings using
#pragma GCC diagnostic ignored ...
but at least one of these:
warning: ‘typedef’ was ignored in this declaration
resulting from declarations of the form:
typedef struct Blah { ... };
does not provide a specific command-line/pragma option to disable
warnings of the sort.
To allow VSS builds to succeed, the next-best option is disabling
these warnings on a per-file basis. pragmas like #pragma GCC
system_header can be used to declare subsequent includes/declarations
as being exempt from normal warnings, but this must be done within
a header file.
Since we don't control the VSS SDK, we'd need to rely on a
intermediate header include to accomplish this, and
since different objects in the VSS link target rely on different
headers from the VSS SDK, this would become somewhat of a rat's nest
(though not totally unmanageable).
The next step up in granularity is just marking the entire VSS
SDK include path as system headers via -isystem. This is a bit more
heavy-handed, but since this SDK hasn't changed since 2005, there's
likely little to be gained from selectively disabling warnings
anyway, so we implement that approach here.
This fixes the -Werror failures in both the configure test and the
qga build due to shared reliance on $vss_win32_include. For the
same reason, this also enforces a new dependency on -isystem support
in the C/C++ compiler when building QGA with VSS enabled.
Cc: Thomas Huth <thuth@redhat.com>
Cc: Stefan Weil <sw@weilnetz.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2016-06-29 06:31:49 +08:00
|
|
|
vss_win32_include="-isystem $source_path/.sdk/vss"
|
2013-08-07 23:40:03 +08:00
|
|
|
symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
|
|
|
|
;;
|
configure: mark qemu-ga VSS includes as system headers
As of e4650c81, we do w32 builds with -Werror enabled. Unfortunately
for cases where we enable VSS support in qemu-ga, we still have
warnings generated by VSS includes that ship as part of the Microsoft
VSS SDK.
We can selectively address a number of these warnings using
#pragma GCC diagnostic ignored ...
but at least one of these:
warning: ‘typedef’ was ignored in this declaration
resulting from declarations of the form:
typedef struct Blah { ... };
does not provide a specific command-line/pragma option to disable
warnings of the sort.
To allow VSS builds to succeed, the next-best option is disabling
these warnings on a per-file basis. pragmas like #pragma GCC
system_header can be used to declare subsequent includes/declarations
as being exempt from normal warnings, but this must be done within
a header file.
Since we don't control the VSS SDK, we'd need to rely on a
intermediate header include to accomplish this, and
since different objects in the VSS link target rely on different
headers from the VSS SDK, this would become somewhat of a rat's nest
(though not totally unmanageable).
The next step up in granularity is just marking the entire VSS
SDK include path as system headers via -isystem. This is a bit more
heavy-handed, but since this SDK hasn't changed since 2005, there's
likely little to be gained from selectively disabling warnings
anyway, so we implement that approach here.
This fixes the -Werror failures in both the configure test and the
qga build due to shared reliance on $vss_win32_include. For the
same reason, this also enforces a new dependency on -isystem support
in the C/C++ compiler when building QGA with VSS enabled.
Cc: Thomas Huth <thuth@redhat.com>
Cc: Stefan Weil <sw@weilnetz.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2016-06-29 06:31:49 +08:00
|
|
|
*) vss_win32_include="-isystem $vss_win32_sdk"
|
2013-08-07 23:40:03 +08:00
|
|
|
esac
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#define __MIDL_user_allocate_free_DEFINED__
|
|
|
|
#include <inc/win2003/vss.h>
|
|
|
|
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"
|
2016-09-21 12:27:21 +08:00
|
|
|
libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
|
2015-08-27 05:19:41 +08:00
|
|
|
qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
|
2013-08-07 23:40:03 +08:00
|
|
|
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.
|
|
|
|
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
|
|
|
|
test "$guest_agent_with_vss" = "yes" ; then
|
2013-08-07 23:40:03 +08:00
|
|
|
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
|
|
|
|
|
2015-07-08 07:10:09 +08:00
|
|
|
##########################################
|
|
|
|
# check if mingw environment provides a recent ntddscsi.h
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
|
2015-07-08 07:10:09 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <windows.h>
|
|
|
|
#include <ntddscsi.h>
|
|
|
|
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
|
2019-01-29 06:30:56 +08:00
|
|
|
libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
|
2015-07-08 07:10:09 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2017-09-15 00:41:12 +08:00
|
|
|
##########################################
|
|
|
|
# capstone
|
|
|
|
|
2017-09-29 00:01:23 +08:00
|
|
|
case "$capstone" in
|
2020-09-14 03:19:25 +08:00
|
|
|
auto | enabled | internal)
|
|
|
|
# Simpler to always update submodule, even if not needed.
|
2021-05-12 15:21:56 +08:00
|
|
|
git_submodules="${git_submodules} capstone"
|
2017-09-29 00:01:23 +08:00
|
|
|
;;
|
|
|
|
esac
|
2017-09-15 00:41:12 +08:00
|
|
|
|
2011-07-11 20:57:43 +08:00
|
|
|
##########################################
|
2012-02-28 19:25:50 +08:00
|
|
|
# check and set a backend for coroutine
|
2011-06-10 01:41:06 +08:00
|
|
|
|
2013-04-08 19:11:27 +08:00
|
|
|
# We prefer ucontext, but it's not always possible. The fallback
|
2017-04-28 20:24:44 +08:00
|
|
|
# is sigcontext. On Windows the only valid backend is the Windows
|
|
|
|
# specific one.
|
2013-04-08 19:11:27 +08:00
|
|
|
|
|
|
|
ucontext_works=no
|
|
|
|
if test "$darwin" != "yes"; then
|
|
|
|
cat > $TMPC << EOF
|
2011-06-10 01:41:06 +08:00
|
|
|
#include <ucontext.h>
|
2012-02-24 00:20:05 +08:00
|
|
|
#ifdef __stub_makecontext
|
|
|
|
#error Ignoring glibc stub makecontext which will always fail
|
|
|
|
#endif
|
2011-12-17 16:27:29 +08:00
|
|
|
int main(void) { makecontext(0, 0, 0); return 0; }
|
2011-06-10 01:41:06 +08:00
|
|
|
EOF
|
2013-04-08 19:11:27 +08:00
|
|
|
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
|
2011-06-10 01:41:06 +08:00
|
|
|
fi
|
2012-02-28 19:25:50 +08:00
|
|
|
else
|
2013-04-08 19:11:27 +08:00
|
|
|
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
|
|
|
|
;;
|
2017-04-28 20:24:44 +08:00
|
|
|
sigaltstack)
|
2013-04-08 19:11:27 +08:00
|
|
|
if test "$mingw32" = "yes"; then
|
|
|
|
error_exit "only the 'windows' coroutine backend is valid for Windows"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
error_exit "unknown coroutine backend $coroutine"
|
|
|
|
;;
|
|
|
|
esac
|
2011-06-10 01:41:06 +08:00
|
|
|
fi
|
|
|
|
|
2013-09-11 22:42:35 +08:00
|
|
|
if test "$coroutine_pool" = ""; then
|
2017-04-28 20:24:44 +08:00
|
|
|
coroutine_pool=yes
|
2013-09-11 22:42:35 +08:00
|
|
|
fi
|
|
|
|
|
2016-09-27 17:58:45 +08:00
|
|
|
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
|
|
|
|
|
2020-05-30 04:51:21 +08:00
|
|
|
##################################################
|
|
|
|
# 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
|
2016-09-27 17:58:45 +08:00
|
|
|
|
2012-12-29 06:17:02 +08:00
|
|
|
########################################
|
|
|
|
# check if cpuid.h is usable.
|
|
|
|
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <cpuid.h>
|
|
|
|
int main(void) {
|
2014-02-21 03:42:53 +08:00
|
|
|
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;
|
2012-12-29 06:17:02 +08:00
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
cpuid_h=yes
|
|
|
|
fi
|
|
|
|
|
2017-07-19 12:40:18 +08:00
|
|
|
##########################################
|
|
|
|
# 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.
|
|
|
|
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
|
2017-07-19 12:40:18 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#pragma GCC push_options
|
|
|
|
#pragma GCC target("avx2")
|
|
|
|
#include <cpuid.h>
|
|
|
|
#include <immintrin.h>
|
|
|
|
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
|
2021-07-20 04:01:12 +08:00
|
|
|
if compile_object "-Werror" ; then
|
2017-07-19 12:40:18 +08:00
|
|
|
avx2_opt="yes"
|
2018-10-20 04:38:59 +08:00
|
|
|
else
|
|
|
|
avx2_opt="no"
|
2017-07-19 12:40:18 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2020-02-29 20:34:34 +08:00
|
|
|
##########################################
|
|
|
|
# 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 <cpuid.h>
|
|
|
|
#include <immintrin.h>
|
|
|
|
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
|
2021-07-20 04:01:12 +08:00
|
|
|
if ! compile_object "-Werror" ; then
|
2020-02-29 20:34:34 +08:00
|
|
|
avx512f_opt="no"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
avx512f_opt="no"
|
|
|
|
fi
|
|
|
|
|
2013-02-17 04:46:59 +08:00
|
|
|
########################################
|
|
|
|
# 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;
|
2013-06-21 21:01:31 +08:00
|
|
|
a = a * a;
|
2013-02-17 04:46:59 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
int128=yes
|
|
|
|
fi
|
2012-12-29 06:17:02 +08:00
|
|
|
|
2016-06-30 12:10:59 +08:00
|
|
|
#########################################
|
|
|
|
# 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;
|
configure: Don't use the __atomic_*_16 functions for testing 128-bit support
The test for 128-bit atomics is causing trouble with FreeBSD 12.2 and
--enable-werror:
cc -Werror -fPIE -DPIE -std=gnu99 -Wall -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -o config-temp/qemu-conf.exe config-temp/qemu-conf.c -pie -Wl,-z,relro -Wl,-z,now -m64 -fstack-protector-strong
config-temp/qemu-conf.c:4:7: error: implicit declaration of function '__atomic_load_16' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
y = __atomic_load_16(&x, 0);
^
config-temp/qemu-conf.c:5:3: error: implicit declaration of function '__atomic_store_16' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
__atomic_store_16(&x, y, 0);
^
config-temp/qemu-conf.c:5:3: note: did you mean '__atomic_load_16'?
config-temp/qemu-conf.c:4:7: note: '__atomic_load_16' declared here
y = __atomic_load_16(&x, 0);
^
config-temp/qemu-conf.c:6:3: error: implicit declaration of function '__atomic_compare_exchange_16' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
__atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
^
3 errors generated.
Looking for they way we are using atomic functions in QEMU, we are not
using these functions with the _16 suffix anyway. Switch to the same
functions that we use in the include/qemu/atomic.h header.
Signed-off-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20210317110512.583747-2-thuth@redhat.com>
Message-Id: <20210323165308.15244-12-alex.bennee@linaro.org>
2021-03-24 00:52:57 +08:00
|
|
|
y = __atomic_load(&x, 0);
|
|
|
|
__atomic_store(&x, y, 0);
|
|
|
|
__atomic_compare_exchange(&x, &y, x, 0, 0, 0);
|
2016-06-30 12:10:59 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
atomic128=yes
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-08-16 07:31:47 +08:00
|
|
|
cmpxchg128=no
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$int128" = yes && test "$atomic128" = no; then
|
2018-08-16 07:31:47 +08:00
|
|
|
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
|
|
|
|
|
2015-03-26 06:57:39 +08:00
|
|
|
########################################
|
|
|
|
# check if ccache is interfering with
|
|
|
|
# semantic analysis of macros
|
|
|
|
|
2015-10-29 01:56:40 +08:00
|
|
|
unset CCACHE_CPP2
|
2015-03-26 06:57:39 +08:00
|
|
|
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
|
|
|
|
|
2015-11-04 04:43:42 +08:00
|
|
|
#################################################
|
|
|
|
# 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";
|
2017-06-26 23:25:24 +08:00
|
|
|
elif test -n "$cxx" && has $cxx &&
|
2015-11-13 00:29:49 +08:00
|
|
|
echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
|
2015-11-04 04:43:42 +08:00
|
|
|
fortify_source="no";
|
|
|
|
else
|
|
|
|
fortify_source="yes"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-02-16 17:05:23 +08:00
|
|
|
##########################################
|
|
|
|
# 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 <linux/membarrier.h>
|
|
|
|
#include <sys/syscall.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
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
|
|
|
|
|
2017-07-15 02:04:05 +08:00
|
|
|
##########################################
|
|
|
|
# check for usable AF_ALG environment
|
2020-02-03 23:55:34 +08:00
|
|
|
have_afalg=no
|
2017-07-15 02:04:05 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <errno.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/socket.h>
|
|
|
|
#include <linux/if_alg.h>
|
|
|
|
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
|
|
|
|
|
|
|
|
|
2018-01-16 23:11:51 +08:00
|
|
|
##########################################
|
|
|
|
# checks for sanitizers
|
|
|
|
|
|
|
|
have_asan=no
|
|
|
|
have_ubsan=no
|
2018-01-16 23:11:52 +08:00
|
|
|
have_asan_iface_h=no
|
|
|
|
have_asan_iface_fiber=no
|
2018-01-16 23:11:51 +08:00
|
|
|
|
|
|
|
if test "$sanitizers" = "yes" ; then
|
2018-02-16 05:25:47 +08:00
|
|
|
write_c_skeleton
|
2018-01-16 23:11:51 +08:00
|
|
|
if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
|
|
|
|
have_asan=yes
|
|
|
|
fi
|
2018-02-16 05:25:47 +08:00
|
|
|
|
|
|
|
# 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 <stdlib.h>
|
|
|
|
int main(void) {
|
|
|
|
void *tmp = malloc(10);
|
2020-05-25 06:12:04 +08:00
|
|
|
if (tmp != NULL) {
|
|
|
|
return *(int *)(tmp + 2);
|
|
|
|
}
|
2020-07-08 01:13:25 +08:00
|
|
|
return 1;
|
2018-02-16 05:25:47 +08:00
|
|
|
}
|
|
|
|
EOF
|
2018-01-16 23:11:51 +08:00
|
|
|
if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
|
|
|
|
have_ubsan=yes
|
|
|
|
fi
|
2018-01-16 23:11:52 +08:00
|
|
|
|
|
|
|
if check_include "sanitizer/asan_interface.h" ; then
|
|
|
|
have_asan_iface_h=yes
|
|
|
|
fi
|
|
|
|
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sanitizer/asan_interface.h>
|
|
|
|
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
|
2018-01-16 23:11:51 +08:00
|
|
|
fi
|
|
|
|
|
2020-06-13 03:02:23 +08:00
|
|
|
# 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 <sanitizer/tsan_interface.h>
|
|
|
|
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
|
|
|
|
|
2019-02-13 00:25:23 +08:00
|
|
|
##########################################
|
|
|
|
# check for slirp
|
|
|
|
|
|
|
|
case "$slirp" in
|
2020-10-05 17:31:15 +08:00
|
|
|
auto | enabled | internal)
|
|
|
|
# Simpler to always update submodule, even if not needed.
|
2021-05-12 15:21:56 +08:00
|
|
|
git_submodules="${git_submodules} slirp"
|
2019-02-13 00:25:23 +08:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2021-03-16 02:03:41 +08:00
|
|
|
# Check for slirp smbd dupport
|
|
|
|
: ${smbd=${SMBD-/usr/sbin/smbd}}
|
|
|
|
if test "$slirp_smbd" != "no" ; then
|
|
|
|
if test "$mingw32" = "yes" ; then
|
|
|
|
if test "$slirp_smbd" = "yes" ; then
|
|
|
|
error_exit "Host smbd not supported on this platform."
|
|
|
|
fi
|
|
|
|
slirp_smbd=no
|
|
|
|
else
|
|
|
|
slirp_smbd=yes
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2020-05-25 19:19:12 +08:00
|
|
|
##########################################
|
|
|
|
# check for usable __NR_keyctl syscall
|
|
|
|
|
|
|
|
if test "$linux" = "yes" ; then
|
|
|
|
|
|
|
|
have_keyring=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <errno.h>
|
|
|
|
#include <asm/unistd.h>
|
|
|
|
#include <linux/keyctl.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
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
|
2020-07-01 21:56:15 +08:00
|
|
|
if test "$have_keyring" = "yes"
|
2020-05-25 19:19:12 +08:00
|
|
|
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
|
|
|
|
|
2010-05-23 04:11:33 +08:00
|
|
|
##########################################
|
2009-08-03 20:45:59 +08:00
|
|
|
# End of CC checks
|
|
|
|
# After here, no more $cc or $ld runs
|
|
|
|
|
2018-01-16 23:11:52 +08:00
|
|
|
write_c_skeleton
|
|
|
|
|
2012-05-02 02:45:39 +08:00
|
|
|
if test "$gcov" = "yes" ; then
|
2019-10-04 21:35:16 +08:00
|
|
|
:
|
2015-11-04 04:43:42 +08:00
|
|
|
elif test "$fortify_source" = "yes" ; then
|
2020-02-03 22:22:17 +08:00
|
|
|
QEMU_CFLAGS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $QEMU_CFLAGS"
|
|
|
|
debug=no
|
|
|
|
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
|
2009-09-30 07:10:55 +08:00
|
|
|
|
2018-01-16 23:11:51 +08:00
|
|
|
if test "$have_asan" = "yes"; then
|
build-sys: clean up flags included in the linker command line
Some of the CFLAGS that are discovered during configure, for example
compiler warnings, are being included on the linker command line because
QEMU_CFLAGS is added to it. Other flags, such as the -m32, appear twice
because they are included in both QEMU_CFLAGS and LDFLAGS. All this
leads to confusion with respect to what goes in which Makefile variables
(and we have plenty).
So, introduce QEMU_LDFLAGS for flags discovered by configure, following
the lead of QEMU_CFLAGS, and stop adding to it:
1) options that are already in CFLAGS, for example "-g"
2) duplicate options
At the same time, options that _are_ needed by both compiler and linker
must now be added to both QEMU_CFLAGS and QEMU_LDFLAGS, which is clearer.
This is mostly -fsanitize options. For now, --extra-cflags has this behavior
(but --extra-cxxflags does not).
Meson will not include CFLAGS on the linker command line, do the same in our
build system as well.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2019-12-11 22:34:27 +08:00
|
|
|
QEMU_CFLAGS="-fsanitize=address $QEMU_CFLAGS"
|
|
|
|
QEMU_LDFLAGS="-fsanitize=address $QEMU_LDFLAGS"
|
2018-01-16 23:11:52 +08:00
|
|
|
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
|
2018-01-16 23:11:51 +08:00
|
|
|
fi
|
2020-06-13 03:02:23 +08:00
|
|
|
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
|
2018-01-16 23:11:51 +08:00
|
|
|
if test "$have_ubsan" = "yes"; then
|
build-sys: clean up flags included in the linker command line
Some of the CFLAGS that are discovered during configure, for example
compiler warnings, are being included on the linker command line because
QEMU_CFLAGS is added to it. Other flags, such as the -m32, appear twice
because they are included in both QEMU_CFLAGS and LDFLAGS. All this
leads to confusion with respect to what goes in which Makefile variables
(and we have plenty).
So, introduce QEMU_LDFLAGS for flags discovered by configure, following
the lead of QEMU_CFLAGS, and stop adding to it:
1) options that are already in CFLAGS, for example "-g"
2) duplicate options
At the same time, options that _are_ needed by both compiler and linker
must now be added to both QEMU_CFLAGS and QEMU_LDFLAGS, which is clearer.
This is mostly -fsanitize options. For now, --extra-cflags has this behavior
(but --extra-cxxflags does not).
Meson will not include CFLAGS on the linker command line, do the same in our
build system as well.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2019-12-11 22:34:27 +08:00
|
|
|
QEMU_CFLAGS="-fsanitize=undefined $QEMU_CFLAGS"
|
|
|
|
QEMU_LDFLAGS="-fsanitize=undefined $QEMU_LDFLAGS"
|
2018-01-16 23:11:51 +08:00
|
|
|
fi
|
|
|
|
|
2018-10-23 19:23:10 +08:00
|
|
|
##########################################
|
|
|
|
|
2020-06-13 03:02:23 +08:00
|
|
|
# Exclude --warn-common with TSan to suppress warnings from the TSan libraries.
|
|
|
|
if test "$solaris" = "no" && test "$tsan" = "no"; then
|
2009-08-03 20:45:59 +08:00
|
|
|
if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
|
build-sys: clean up flags included in the linker command line
Some of the CFLAGS that are discovered during configure, for example
compiler warnings, are being included on the linker command line because
QEMU_CFLAGS is added to it. Other flags, such as the -m32, appear twice
because they are included in both QEMU_CFLAGS and LDFLAGS. All this
leads to confusion with respect to what goes in which Makefile variables
(and we have plenty).
So, introduce QEMU_LDFLAGS for flags discovered by configure, following
the lead of QEMU_CFLAGS, and stop adding to it:
1) options that are already in CFLAGS, for example "-g"
2) duplicate options
At the same time, options that _are_ needed by both compiler and linker
must now be added to both QEMU_CFLAGS and QEMU_LDFLAGS, which is clearer.
This is mostly -fsanitize options. For now, --extra-cflags has this behavior
(but --extra-cxxflags does not).
Meson will not include CFLAGS on the linker command line, do the same in our
build system as well.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2019-12-11 22:34:27 +08:00
|
|
|
QEMU_LDFLAGS="-Wl,--warn-common $QEMU_LDFLAGS"
|
2009-08-03 20:45:59 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2010-09-19 16:36:34 +08:00
|
|
|
# Use ASLR, no-SEH and DEP if available
|
|
|
|
if test "$mingw32" = "yes" ; then
|
2020-10-05 21:34:34 +08:00
|
|
|
flags="--no-seh --nxcompat"
|
|
|
|
|
|
|
|
# Disable ASLR for debug builds to allow debugging with gdb
|
|
|
|
if test "$debug" = "no" ; then
|
|
|
|
flags="--dynamicbase $flags"
|
|
|
|
fi
|
|
|
|
|
|
|
|
for flag in $flags; do
|
2017-08-23 18:16:23 +08:00
|
|
|
if ld_has $flag ; then
|
build-sys: clean up flags included in the linker command line
Some of the CFLAGS that are discovered during configure, for example
compiler warnings, are being included on the linker command line because
QEMU_CFLAGS is added to it. Other flags, such as the -m32, appear twice
because they are included in both QEMU_CFLAGS and LDFLAGS. All this
leads to confusion with respect to what goes in which Makefile variables
(and we have plenty).
So, introduce QEMU_LDFLAGS for flags discovered by configure, following
the lead of QEMU_CFLAGS, and stop adding to it:
1) options that are already in CFLAGS, for example "-g"
2) duplicate options
At the same time, options that _are_ needed by both compiler and linker
must now be added to both QEMU_CFLAGS and QEMU_LDFLAGS, which is clearer.
This is mostly -fsanitize options. For now, --extra-cflags has this behavior
(but --extra-cxxflags does not).
Meson will not include CFLAGS on the linker command line, do the same in our
build system as well.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2019-12-11 22:34:27 +08:00
|
|
|
QEMU_LDFLAGS="-Wl,$flag $QEMU_LDFLAGS"
|
2010-09-19 16:36:34 +08:00
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
2015-08-26 23:49:13 +08:00
|
|
|
# Probe for guest agent support/options
|
|
|
|
|
2013-07-31 18:22:07 +08:00
|
|
|
if [ "$guest_agent" != "no" ]; then
|
2019-04-01 22:12:20 +08:00
|
|
|
if [ "$softmmu" = no -a "$want_tools" = no ] ; then
|
|
|
|
guest_agent=no
|
|
|
|
elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
|
2013-07-31 18:22:07 +08:00
|
|
|
guest_agent=yes
|
|
|
|
elif [ "$guest_agent" != yes ]; then
|
|
|
|
guest_agent=no
|
|
|
|
else
|
|
|
|
error_exit "Guest agent is not supported on this platform"
|
2010-05-26 22:08:29 +08:00
|
|
|
fi
|
2012-05-29 17:40:24 +08:00
|
|
|
fi
|
2010-05-26 22:08:29 +08:00
|
|
|
|
2021-01-21 18:49:04 +08:00
|
|
|
# Guest agent Windows MSI package
|
2015-08-26 23:49:13 +08:00
|
|
|
|
2021-01-21 18:49:04 +08:00
|
|
|
if test "$QEMU_GA_MANUFACTURER" = ""; then
|
|
|
|
QEMU_GA_MANUFACTURER=QEMU
|
2015-08-26 23:49:13 +08:00
|
|
|
fi
|
2021-01-21 18:49:04 +08:00
|
|
|
if test "$QEMU_GA_DISTRO" = ""; then
|
|
|
|
QEMU_GA_DISTRO=Linux
|
2015-08-26 23:49:13 +08:00
|
|
|
fi
|
2021-01-21 18:49:04 +08:00
|
|
|
if test "$QEMU_GA_VERSION" = ""; then
|
|
|
|
QEMU_GA_VERSION=$(cat $source_path/VERSION)
|
|
|
|
fi
|
|
|
|
|
|
|
|
QEMU_GA_MSI_MINGW_DLL_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
|
2015-08-26 23:49:13 +08:00
|
|
|
|
2010-05-26 22:08:29 +08:00
|
|
|
# Mac OS X ships with a broken assembler
|
|
|
|
roms=
|
2019-02-05 10:39:37 +08:00
|
|
|
if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
|
2021-11-08 21:47:54 +08:00
|
|
|
test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
|
|
|
|
test "$targetos" != "haiku" && test "$softmmu" = yes ; then
|
2016-08-09 00:11:28 +08:00
|
|
|
# Different host OS linkers have different ideas about the name of the ELF
|
2017-11-08 07:46:11 +08:00
|
|
|
# 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
|
2016-08-09 00:11:28 +08:00
|
|
|
if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
|
|
|
|
ld_i386_emulation="$emu"
|
|
|
|
roms="optionrom"
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
2010-05-26 22:08:29 +08:00
|
|
|
fi
|
|
|
|
|
2019-01-14 20:52:26 +08:00
|
|
|
# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
|
2021-05-02 19:22:21 +08:00
|
|
|
# or -march=z10 (which is the lowest architecture level that Clang supports)
|
2013-04-23 09:23:03 +08:00
|
|
|
if test "$cpu" = "s390x" ; then
|
2019-01-14 20:52:26 +08:00
|
|
|
write_c_skeleton
|
2021-05-02 19:22:21 +08:00
|
|
|
compile_prog "-march=z900" ""
|
|
|
|
has_z900=$?
|
2021-05-25 22:20:32 +08:00
|
|
|
if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float -Werror"; then
|
2021-05-02 19:22:21 +08:00
|
|
|
if [ $has_z900 != 0 ]; then
|
|
|
|
echo "WARNING: Your compiler does not support the z900!"
|
|
|
|
echo " The s390-ccw bios will only work with guest CPUs >= z10."
|
|
|
|
fi
|
2019-01-14 20:52:26 +08:00
|
|
|
roms="$roms s390-ccw"
|
2020-06-15 15:49:19 +08:00
|
|
|
# SLOF is required for building the s390-ccw firmware on s390x,
|
|
|
|
# since it is using the libnet code from SLOF for network booting.
|
2021-05-12 15:21:56 +08:00
|
|
|
git_submodules="${git_submodules} roms/SLOF"
|
2019-01-14 20:52:26 +08:00
|
|
|
fi
|
2013-04-23 09:23:03 +08:00
|
|
|
fi
|
|
|
|
|
2017-06-06 21:07:47 +08:00
|
|
|
# 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 <<EOF
|
|
|
|
int c_function(void);
|
|
|
|
int main(void) { return c_function(); }
|
|
|
|
EOF
|
|
|
|
|
|
|
|
compile_object
|
|
|
|
|
|
|
|
cat > $TMPCXX <<EOF
|
|
|
|
extern "C" {
|
|
|
|
int c_function(void);
|
|
|
|
}
|
|
|
|
int c_function(void) { return 42; }
|
|
|
|
EOF
|
|
|
|
|
|
|
|
update_cxxflags
|
|
|
|
|
2021-11-05 17:09:26 +08:00
|
|
|
if do_cxx $CXXFLAGS $EXTRA_CXXFLAGS $CONFIGURE_CXXFLAGS $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $QEMU_LDFLAGS; then
|
2017-06-06 21:07:47 +08:00
|
|
|
# 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
|
|
|
|
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-20 01:20:46 +08:00
|
|
|
if !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
|
|
|
|
exit 1
|
2020-09-03 01:00:49 +08:00
|
|
|
fi
|
|
|
|
|
2009-07-17 00:34:18 +08:00
|
|
|
config_host_mak="config-host.mak"
|
|
|
|
|
|
|
|
echo "# Automatically generated by configure - do not modify" > $config_host_mak
|
|
|
|
echo >> $config_host_mak
|
|
|
|
|
2010-10-21 16:18:35 +08:00
|
|
|
echo all: >> $config_host_mak
|
2017-10-20 22:02:43 +08:00
|
|
|
echo "GIT=$git" >> $config_host_mak
|
2017-09-29 18:11:56 +08:00
|
|
|
echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
|
configure: replace --enable/disable-git-update with --with-git-submodules
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2021-01-20 01:20:46 +08:00
|
|
|
echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
|
2009-07-27 22:12:49 +08:00
|
|
|
|
2009-04-14 02:45:38 +08:00
|
|
|
if test "$debug_tcg" = "yes" ; then
|
2009-07-27 22:13:25 +08:00
|
|
|
echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
|
2009-04-14 02:45:38 +08:00
|
|
|
fi
|
2009-04-06 01:41:02 +08:00
|
|
|
if test "$strip_opt" = "yes" ; then
|
2010-08-05 08:21:34 +08:00
|
|
|
echo "STRIP=${strip}" >> $config_host_mak
|
2009-04-06 01:41:02 +08:00
|
|
|
fi
|
2004-04-01 07:37:16 +08:00
|
|
|
if test "$mingw32" = "yes" ; then
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "CONFIG_WIN32=y" >> $config_host_mak
|
2013-08-07 23:40:03 +08:00
|
|
|
if test "$guest_agent_with_vss" = "yes" ; then
|
|
|
|
echo "CONFIG_QGA_VSS=y" >> $config_host_mak
|
2015-08-27 05:19:41 +08:00
|
|
|
echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
|
2013-08-07 23:40:03 +08:00
|
|
|
echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
|
|
|
|
fi
|
2015-07-08 07:10:09 +08:00
|
|
|
if test "$guest_agent_ntddscsi" = "yes" ; then
|
2018-10-23 19:23:16 +08:00
|
|
|
echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
|
2015-07-08 07:10:09 +08:00
|
|
|
fi
|
2021-01-21 18:49:04 +08:00
|
|
|
echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $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
|
2007-02-28 05:04:49 +08:00
|
|
|
else
|
2009-07-27 22:13:07 +08:00
|
|
|
echo "CONFIG_POSIX=y" >> $config_host_mak
|
2009-10-23 00:49:11 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$linux" = "yes" ; then
|
|
|
|
echo "CONFIG_LINUX=y" >> $config_host_mak
|
2004-04-01 07:37:16 +08:00
|
|
|
fi
|
2008-08-16 02:33:42 +08:00
|
|
|
|
2004-07-06 05:25:26 +08:00
|
|
|
if test "$darwin" = "yes" ; then
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "CONFIG_DARWIN=y" >> $config_host_mak
|
2004-07-06 05:25:26 +08:00
|
|
|
fi
|
2008-11-18 09:42:22 +08:00
|
|
|
|
2006-04-26 06:36:06 +08:00
|
|
|
if test "$solaris" = "yes" ; then
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "CONFIG_SOLARIS=y" >> $config_host_mak
|
2006-04-26 06:36:06 +08:00
|
|
|
fi
|
2003-08-11 05:36:04 +08:00
|
|
|
if test "$static" = "yes" ; then
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "CONFIG_STATIC=y" >> $config_host_mak
|
2003-03-07 07:23:54 +08:00
|
|
|
fi
|
2011-07-30 04:40:45 +08:00
|
|
|
if test "$profiler" = "yes" ; then
|
2009-07-27 22:13:25 +08:00
|
|
|
echo "CONFIG_PROFILER=y" >> $config_host_mak
|
2006-02-09 06:39:17 +08:00
|
|
|
fi
|
2019-07-18 18:24:29 +08:00
|
|
|
if test "$want_tools" = "yes" ; then
|
|
|
|
echo "CONFIG_TOOLS=y" >> $config_host_mak
|
|
|
|
fi
|
2019-07-18 19:19:02 +08:00
|
|
|
if test "$guest_agent" = "yes" ; then
|
|
|
|
echo "CONFIG_GUEST_AGENT=y" >> $config_host_mak
|
|
|
|
fi
|
2021-03-16 02:03:41 +08:00
|
|
|
if test "$slirp_smbd" = "yes" ; then
|
|
|
|
echo "CONFIG_SLIRP_SMBD=y" >> $config_host_mak
|
|
|
|
echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
|
|
|
|
fi
|
2020-02-05 00:11:04 +08:00
|
|
|
if test "$gprof" = "yes" ; then
|
|
|
|
echo "CONFIG_GPROF=y" >> $config_host_mak
|
|
|
|
fi
|
2013-05-29 19:35:40 +08:00
|
|
|
echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
|
|
|
|
echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
|
2021-07-10 00:41:41 +08:00
|
|
|
if test "$block_drv_whitelist_tools" = "yes" ; then
|
|
|
|
echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
|
|
|
|
fi
|
2010-12-17 18:41:15 +08:00
|
|
|
if test "$xfs" = "yes" ; then
|
|
|
|
echo "CONFIG_XFS=y" >> $config_host_mak
|
|
|
|
fi
|
2016-05-16 21:10:20 +08:00
|
|
|
qemu_version=$(head $source_path/VERSION)
|
2009-07-27 22:13:25 +08:00
|
|
|
echo "PKGVERSION=$pkgversion" >>$config_host_mak
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "SRC_PATH=$source_path" >> $config_host_mak
|
2018-07-04 14:30:11 +08:00
|
|
|
echo "TARGET_DIRS=$target_list" >> $config_host_mak
|
2014-02-10 14:48:56 +08:00
|
|
|
if test "$modules" = "yes"; then
|
2014-02-10 14:48:57 +08:00
|
|
|
# $shacmd can generate a hash started with digit, which the compiler doesn't
|
|
|
|
# like as an symbol. So prefix it with an underscore
|
2016-05-16 21:10:20 +08:00
|
|
|
echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
|
2014-02-10 14:48:56 +08:00
|
|
|
echo "CONFIG_MODULES=y" >> $config_host_mak
|
|
|
|
fi
|
2020-03-10 22:58:06 +08:00
|
|
|
if test "$module_upgrades" = "yes"; then
|
|
|
|
echo "CONFIG_MODULE_UPGRADES=y" >> $config_host_mak
|
|
|
|
fi
|
2018-10-09 00:35:19 +08:00
|
|
|
if test "$have_usbfs" = "yes" ; then
|
|
|
|
echo "CONFIG_USBFS=y" >> $config_host_mak
|
|
|
|
fi
|
2019-02-21 19:07:00 +08:00
|
|
|
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
|
2021-05-05 22:15:34 +08:00
|
|
|
fi
|
|
|
|
if test "$gdbus_codegen" != "" ; then
|
2019-09-27 15:34:42 +08:00
|
|
|
echo "GDBUS_CODEGEN=$gdbus_codegen" >> $config_host_mak
|
2019-02-21 19:07:00 +08:00
|
|
|
fi
|
2016-06-06 17:05:06 +08:00
|
|
|
echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
|
2016-04-30 01:15:23 +08:00
|
|
|
|
2020-09-18 16:57:25 +08:00
|
|
|
if test "$xen" = "enabled" ; then
|
2011-06-22 04:59:07 +08:00
|
|
|
echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
|
2011-02-26 00:20:34 +08:00
|
|
|
echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
|
2019-08-15 19:15:32 +08:00
|
|
|
echo "XEN_CFLAGS=$xen_cflags" >> $config_host_mak
|
|
|
|
echo "XEN_LIBS=$xen_libs" >> $config_host_mak
|
2009-04-22 23:19:10 +08:00
|
|
|
fi
|
vhost-scsi: new device supporting the tcm_vhost Linux kernel module
The WWPN specified in configfs is passed to "-device vhost-scsi-pci".
The tgpt field of the SET_ENDPOINT ioctl is obsolete now, so it is not
available from the QEMU command-line. Instead, I hardcode it to zero.
Changes in Patch-v2:
- Add vhost_scsi_get_features() in order to determine feature bits
supports by host kernel (mst + nab)
- Re-enable usage of DEFINE_VIRTIO_COMMON_FEATURES, and allow
EVENT_IDX to be disabled by host in vhost_scsi_get_features()
- Drop unused hotplug bit in DEFINE_VHOST_SCSI_PROPERTIES
Changes in Patch-v1:
- Set event_idx=off by default (nab, thanks asias)
- Disable hotplug feature bit for v3.9 tcm_vhost kernel code, need to
re-enable in v3.10 (nab)
- Update to latest qemu.git/master HEAD
Changes in WIP-V3:
- Drop ioeventfd vhost_scsi_properties (asias, thanks stefanha)
- Add CONFIG_VHOST_SCSI (asias, thanks stefanha)
- Add hotplug feature bit
Changes in WIP-V2:
- Add backend guest masking support (nab)
- Bump ABI_VERSION to 1 (nab)
- Set up set_guest_notifiers (asias)
- Set up vs->dev.vq_index (asias)
- Drop vs->vs.vdev.{set,clear}_vhost_endpoint (asias)
- Drop VIRTIO_CONFIG_S_DRIVER check in vhost_scsi_set_status (asias)
Howto:
Use the latest seabios, at least commit b44a7be17b
git clone git://git.seabios.org/seabios.git
make
cp out/bios.bin /usr/share/qemu/bios.bin
qemu -device vhost-scsi-pci,wwpn=naa.6001405bd4e8476d,event_idx=off
...
Cc: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Asias He <asias@redhat.com>
[ Rebase on top of VirtIOSCSICommon patch, fix bugs in feature
negotiation and irqfd masking - Paolo ]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2013-03-29 09:08:16 +08:00
|
|
|
if test "$vhost_scsi" = "yes" ; then
|
|
|
|
echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
|
|
|
|
fi
|
2019-02-15 01:35:52 +08:00
|
|
|
if test "$vhost_net" = "yes" ; then
|
|
|
|
echo "CONFIG_VHOST_NET=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
if test "$vhost_net_user" = "yes" ; then
|
2019-02-15 01:35:49 +08:00
|
|
|
echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
|
2014-06-10 18:02:16 +08:00
|
|
|
fi
|
2020-07-01 22:55:37 +08:00
|
|
|
if test "$vhost_net_vdpa" = "yes" ; then
|
|
|
|
echo "CONFIG_VHOST_NET_VDPA=y" >> $config_host_mak
|
|
|
|
fi
|
2018-03-01 21:46:28 +08:00
|
|
|
if test "$vhost_crypto" = "yes" ; then
|
|
|
|
echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
|
|
|
|
fi
|
2016-08-16 20:27:22 +08:00
|
|
|
if test "$vhost_vsock" = "yes" ; then
|
|
|
|
echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
|
2020-05-22 20:25:11 +08:00
|
|
|
if test "$vhost_user" = "yes" ; then
|
|
|
|
echo "CONFIG_VHOST_USER_VSOCK=y" >> $config_host_mak
|
|
|
|
fi
|
2016-08-16 20:27:22 +08:00
|
|
|
fi
|
2019-02-15 01:35:53 +08:00
|
|
|
if test "$vhost_kernel" = "yes" ; then
|
|
|
|
echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
|
|
|
|
fi
|
2017-08-03 17:07:46 +08:00
|
|
|
if test "$vhost_user" = "yes" ; then
|
|
|
|
echo "CONFIG_VHOST_USER=y" >> $config_host_mak
|
|
|
|
fi
|
2020-07-01 22:55:37 +08:00
|
|
|
if test "$vhost_vdpa" = "yes" ; then
|
|
|
|
echo "CONFIG_VHOST_VDPA=y" >> $config_host_mak
|
|
|
|
fi
|
2019-09-30 18:51:34 +08:00
|
|
|
if test "$vhost_user_fs" = "yes" ; then
|
|
|
|
echo "CONFIG_VHOST_USER_FS=y" >> $config_host_mak
|
|
|
|
fi
|
2018-02-16 17:05:23 +08:00
|
|
|
if test "$membarrier" = "yes" ; then
|
|
|
|
echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
|
|
|
|
fi
|
2021-02-08 10:15:04 +08:00
|
|
|
if test "$tcg" = "enabled" -a "$tcg_interpreter" = "true" ; then
|
|
|
|
echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
|
|
|
|
fi
|
2021-05-19 13:39:32 +08:00
|
|
|
|
2014-11-20 16:49:44 +08:00
|
|
|
if test "$opengl" = "yes" ; then
|
|
|
|
echo "CONFIG_OPENGL=y" >> $config_host_mak
|
2020-09-01 20:41:17 +08:00
|
|
|
echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
|
2014-11-20 16:49:44 +08:00
|
|
|
echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
|
2011-03-08 06:32:39 +08:00
|
|
|
fi
|
|
|
|
|
2016-03-08 13:53:16 +08:00
|
|
|
if test "$avx2_opt" = "yes" ; then
|
|
|
|
echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2020-02-29 20:34:34 +08:00
|
|
|
if test "$avx512f_opt" = "yes" ; then
|
|
|
|
echo "CONFIG_AVX512F_OPT=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2004-07-06 05:25:26 +08:00
|
|
|
# XXX: suppress that
|
2004-05-13 03:32:15 +08:00
|
|
|
if [ "$bsd" = "yes" ] ; then
|
2009-07-27 22:13:25 +08:00
|
|
|
echo "CONFIG_BSD=y" >> $config_host_mak
|
2004-05-13 03:32:15 +08:00
|
|
|
fi
|
|
|
|
|
2013-05-10 20:16:40 +08:00
|
|
|
if test "$qom_cast_debug" = "yes" ; then
|
|
|
|
echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
|
|
|
|
fi
|
2011-06-10 01:41:06 +08:00
|
|
|
|
2013-04-08 19:11:27 +08:00
|
|
|
echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
|
2013-09-11 22:42:35 +08:00
|
|
|
if test "$coroutine_pool" = "yes" ; then
|
|
|
|
echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
|
|
|
|
else
|
|
|
|
echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
|
|
|
|
fi
|
2009-12-10 02:59:36 +08:00
|
|
|
|
2016-09-27 17:58:45 +08:00
|
|
|
if test "$debug_stack_usage" = "yes" ; then
|
|
|
|
echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2017-07-15 02:04:05 +08:00
|
|
|
if test "$crypto_afalg" = "yes" ; then
|
|
|
|
echo "CONFIG_AF_ALG=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2018-01-16 23:11:52 +08:00
|
|
|
if test "$have_asan_iface_fiber" = "yes" ; then
|
|
|
|
echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2020-06-13 03:02:23 +08:00
|
|
|
if test "$have_tsan" = "yes" && test "$have_tsan_iface_fiber" = "yes" ; then
|
|
|
|
echo "CONFIG_TSAN=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2012-12-29 06:17:02 +08:00
|
|
|
if test "$cpuid_h" = "yes" ; then
|
|
|
|
echo "CONFIG_CPUID_H=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2013-02-17 04:46:59 +08:00
|
|
|
if test "$int128" = "yes" ; then
|
|
|
|
echo "CONFIG_INT128=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2016-06-30 12:10:59 +08:00
|
|
|
if test "$atomic128" = "yes" ; then
|
|
|
|
echo "CONFIG_ATOMIC128=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2018-08-16 07:31:47 +08:00
|
|
|
if test "$cmpxchg128" = "yes" ; then
|
|
|
|
echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2017-05-15 22:05:29 +08:00
|
|
|
if test "$live_block_migration" = "yes" ; then
|
|
|
|
echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2013-03-18 23:37:50 +08:00
|
|
|
if test "$tpm" = "yes"; then
|
2019-07-12 01:08:36 +08:00
|
|
|
echo 'CONFIG_TPM=y' >> $config_host_mak
|
2013-03-18 23:37:50 +08:00
|
|
|
fi
|
|
|
|
|
2013-07-22 22:01:54 +08:00
|
|
|
if test "$rdma" = "yes" ; then
|
|
|
|
echo "CONFIG_RDMA=y" >> $config_host_mak
|
2017-09-07 16:42:30 +08:00
|
|
|
echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
|
2013-07-22 22:01:54 +08:00
|
|
|
fi
|
|
|
|
|
2018-08-16 23:16:37 +08:00
|
|
|
if test "$pvrdma" = "yes" ; then
|
|
|
|
echo "CONFIG_PVRDMA=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2016-07-27 15:01:48 +08:00
|
|
|
if test "$replication" = "yes" ; then
|
|
|
|
echo "CONFIG_REPLICATION=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2018-06-13 20:23:08 +08:00
|
|
|
if test "$debug_mutex" = "yes" ; then
|
|
|
|
echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
|
|
|
|
fi
|
2017-07-14 16:33:44 +08:00
|
|
|
|
2018-11-07 14:36:44 +08:00
|
|
|
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
|
|
|
|
|
2019-06-13 21:52:25 +08:00
|
|
|
if test "$plugins" = "yes" ; then
|
|
|
|
echo "CONFIG_PLUGIN=y" >> $config_host_mak
|
2018-10-22 01:56:29 +08:00
|
|
|
# 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
|
2019-06-13 21:52:25 +08:00
|
|
|
fi
|
|
|
|
|
2021-01-09 06:42:39 +08:00
|
|
|
if test -n "$gdb_bin"; then
|
|
|
|
gdb_version=$($gdb_bin --version | head -n 1)
|
2021-02-02 21:39:53 +08:00
|
|
|
if version_ge ${gdb_version##* } 9.1; then
|
2021-01-09 06:42:39 +08:00
|
|
|
echo "HAVE_GDB_BIN=$gdb_bin" >> $config_host_mak
|
|
|
|
fi
|
2020-03-17 01:21:48 +08:00
|
|
|
fi
|
|
|
|
|
2020-05-25 19:19:12 +08:00
|
|
|
if test "$secret_keyring" = "yes" ; then
|
|
|
|
echo "CONFIG_SECRET_KEYRING=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "ROMS=$roms" >> $config_host_mak
|
2009-07-27 22:12:49 +08:00
|
|
|
echo "MAKE=$make" >> $config_host_mak
|
2011-07-23 05:08:09 +08:00
|
|
|
echo "PYTHON=$python" >> $config_host_mak
|
2020-03-03 23:06:20 +08:00
|
|
|
echo "GENISOIMAGE=$genisoimage" >> $config_host_mak
|
2019-06-10 18:05:14 +08:00
|
|
|
echo "MESON=$meson" >> $config_host_mak
|
2020-08-13 21:28:11 +08:00
|
|
|
echo "NINJA=$ninja" >> $config_host_mak
|
2009-07-27 22:12:49 +08:00
|
|
|
echo "CC=$cc" >> $config_host_mak
|
2021-05-12 18:20:35 +08:00
|
|
|
echo "HOST_CC=$host_cc" >> $config_host_mak
|
2013-07-24 23:56:03 +08:00
|
|
|
if $iasl -h > /dev/null 2>&1; then
|
2020-08-05 00:14:26 +08:00
|
|
|
echo "CONFIG_IASL=$iasl" >> $config_host_mak
|
2013-07-24 23:56:03 +08:00
|
|
|
fi
|
2009-07-27 22:12:49 +08:00
|
|
|
echo "AR=$ar" >> $config_host_mak
|
2016-07-08 12:49:36 +08:00
|
|
|
echo "AS=$as" >> $config_host_mak
|
2016-06-24 01:39:18 +08:00
|
|
|
echo "CCAS=$ccas" >> $config_host_mak
|
2013-01-05 18:10:27 +08:00
|
|
|
echo "CPP=$cpp" >> $config_host_mak
|
2009-07-27 22:12:49 +08:00
|
|
|
echo "OBJCOPY=$objcopy" >> $config_host_mak
|
|
|
|
echo "LD=$ld" >> $config_host_mak
|
2013-12-11 08:49:08 +08:00
|
|
|
echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
|
2009-08-03 20:46:21 +08:00
|
|
|
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
|
2017-06-06 21:07:47 +08:00
|
|
|
echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
|
2020-08-19 20:44:56 +08:00
|
|
|
echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
|
|
|
|
echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
|
2021-10-09 21:37:40 +08:00
|
|
|
echo "GLIB_VERSION=$(pkg-config --modversion glib-2.0)" >> $config_host_mak
|
2018-04-16 07:05:19 +08:00
|
|
|
echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
|
2016-08-09 00:11:28 +08:00
|
|
|
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
|
2009-07-27 22:12:49 +08:00
|
|
|
echo "EXESUF=$EXESUF" >> $config_host_mak
|
2019-07-18 19:19:02 +08:00
|
|
|
echo "LIBS_QGA=$libs_qga" >> $config_host_mak
|
2009-07-27 22:12:49 +08:00
|
|
|
|
2020-05-20 21:20:23 +08:00
|
|
|
if test "$rng_none" = "yes"; then
|
|
|
|
echo "CONFIG_RNG_NONE=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2011-11-30 19:59:04 +08:00
|
|
|
# use included Linux headers
|
|
|
|
if test "$linux" = "yes" ; then
|
2012-06-14 23:14:33 +08:00
|
|
|
mkdir -p linux-headers
|
2011-11-30 19:59:04 +08:00
|
|
|
case "$cpu" in
|
2021-11-09 16:36:10 +08:00
|
|
|
i386|x86_64)
|
2012-08-03 20:51:25 +08:00
|
|
|
linux_arch=x86
|
2011-11-30 19:59:04 +08:00
|
|
|
;;
|
2021-11-09 16:18:20 +08:00
|
|
|
ppc|ppc64)
|
2012-08-03 20:51:25 +08:00
|
|
|
linux_arch=powerpc
|
2011-11-30 19:59:04 +08:00
|
|
|
;;
|
|
|
|
s390x)
|
2012-08-03 20:51:25 +08:00
|
|
|
linux_arch=s390
|
|
|
|
;;
|
2013-06-12 23:20:23 +08:00
|
|
|
aarch64)
|
|
|
|
linux_arch=arm64
|
|
|
|
;;
|
2021-12-21 13:41:04 +08:00
|
|
|
loongarch*)
|
|
|
|
linux_arch=loongarch
|
|
|
|
;;
|
2014-06-18 06:10:36 +08:00
|
|
|
mips64)
|
|
|
|
linux_arch=mips
|
|
|
|
;;
|
2012-08-03 20:51:25 +08:00
|
|
|
*)
|
|
|
|
# For most CPUs the kernel architecture name and QEMU CPU name match.
|
|
|
|
linux_arch="$cpu"
|
2011-11-30 19:59:04 +08:00
|
|
|
;;
|
|
|
|
esac
|
2012-08-03 20:51:25 +08:00
|
|
|
# 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
|
2011-11-30 19:59:04 +08:00
|
|
|
fi
|
|
|
|
|
2005-10-31 02:58:22 +08:00
|
|
|
for target in $target_list; do
|
2020-09-21 16:37:49 +08:00
|
|
|
target_dir="$target"
|
2021-11-09 22:45:04 +08:00
|
|
|
target_name=$(echo $target | cut -d '-' -f 1)$EXESUF
|
2020-09-21 16:37:49 +08:00
|
|
|
mkdir -p $target_dir
|
|
|
|
case $target in
|
|
|
|
*-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
|
|
|
|
*) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;
|
|
|
|
esac
|
|
|
|
done
|
2003-03-07 07:23:54 +08:00
|
|
|
|
2020-09-18 18:37:21 +08:00
|
|
|
echo "CONFIG_QEMU_INTERP_PREFIX=$interp_prefix" | sed 's/%M/@0@/' >> $config_host_mak
|
2020-09-21 16:37:49 +08:00
|
|
|
if test "$default_targets" = "yes"; then
|
|
|
|
echo "CONFIG_DEFAULT_TARGETS=y" >> $config_host_mak
|
|
|
|
fi
|
2013-04-18 12:47:31 +08:00
|
|
|
|
2014-05-14 17:43:28 +08:00
|
|
|
if test "$numa" = "yes"; then
|
|
|
|
echo "CONFIG_NUMA=y" >> $config_host_mak
|
2019-07-24 23:23:16 +08:00
|
|
|
echo "NUMA_LIBS=$numa_libs" >> $config_host_mak
|
2014-05-14 17:43:28 +08:00
|
|
|
fi
|
|
|
|
|
2015-03-26 06:57:39 +08:00
|
|
|
if test "$ccache_cpp2" = "yes"; then
|
|
|
|
echo "export CCACHE_CPP2=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2020-05-30 04:51:21 +08:00
|
|
|
if test "$safe_stack" = "yes"; then
|
|
|
|
echo "CONFIG_SAFESTACK=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2018-11-02 19:52:38 +08:00
|
|
|
# If we're using a separate build tree, set it up now.
|
|
|
|
# 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.
|
2020-08-27 18:26:17 +08:00
|
|
|
# UNLINK is used to remove symlinks from older development versions
|
|
|
|
# that might get into the way when doing "git update" without doing
|
|
|
|
# a "make distclean" in between.
|
2019-08-07 22:35:23 +08:00
|
|
|
LINKS="Makefile"
|
2020-08-06 20:08:31 +08:00
|
|
|
LINKS="$LINKS tests/tcg/Makefile.target"
|
2020-08-24 15:40:57 +08:00
|
|
|
LINKS="$LINKS pc-bios/optionrom/Makefile"
|
2018-11-02 19:52:38 +08:00
|
|
|
LINKS="$LINKS pc-bios/s390-ccw/Makefile"
|
2020-06-22 21:12:40 +08:00
|
|
|
LINKS="$LINKS roms/seabios/Makefile"
|
2018-11-02 19:52:38 +08:00
|
|
|
LINKS="$LINKS pc-bios/qemu-icon.bmp"
|
|
|
|
LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
|
2021-11-05 23:53:54 +08:00
|
|
|
LINKS="$LINKS tests/avocado tests/data"
|
2018-11-02 19:52:39 +08:00
|
|
|
LINKS="$LINKS tests/qemu-iotests/check"
|
2019-02-07 00:29:01 +08:00
|
|
|
LINKS="$LINKS python"
|
2020-09-09 19:27:41 +08:00
|
|
|
LINKS="$LINKS contrib/plugins/Makefile "
|
2020-08-27 18:26:17 +08:00
|
|
|
UNLINK="pc-bios/keymaps"
|
2011-06-25 02:58:37 +08:00
|
|
|
for bios_file in \
|
|
|
|
$source_path/pc-bios/*.bin \
|
2020-06-22 13:09:32 +08:00
|
|
|
$source_path/pc-bios/*.elf \
|
2016-10-26 10:18:03 +08:00
|
|
|
$source_path/pc-bios/*.lid \
|
2011-06-25 02:58:37 +08:00
|
|
|
$source_path/pc-bios/*.rom \
|
|
|
|
$source_path/pc-bios/*.dtb \
|
2013-04-29 12:52:06 +08:00
|
|
|
$source_path/pc-bios/*.img \
|
2011-06-25 02:58:37 +08:00
|
|
|
$source_path/pc-bios/openbios-* \
|
2014-01-20 07:25:40 +08:00
|
|
|
$source_path/pc-bios/u-boot.* \
|
2021-09-01 00:50:20 +08:00
|
|
|
$source_path/pc-bios/palcode-* \
|
|
|
|
$source_path/pc-bios/qemu_vga.ndrv
|
|
|
|
|
2011-06-25 02:58:37 +08:00
|
|
|
do
|
2018-11-02 19:52:38 +08:00
|
|
|
LINKS="$LINKS pc-bios/$(basename $bios_file)"
|
2010-12-23 18:43:59 +08:00
|
|
|
done
|
2018-11-02 19:52:38 +08:00
|
|
|
for f in $LINKS ; do
|
2020-09-01 15:23:47 +08:00
|
|
|
if [ -e "$source_path/$f" ]; then
|
2021-10-13 19:56:24 +08:00
|
|
|
mkdir -p `dirname ./$f`
|
2011-06-04 00:10:40 +08:00
|
|
|
symlink "$source_path/$f" "$f"
|
|
|
|
fi
|
2010-12-23 18:43:59 +08:00
|
|
|
done
|
2020-08-27 18:26:17 +08:00
|
|
|
for f in $UNLINK ; do
|
|
|
|
if [ -L "$f" ]; then
|
|
|
|
rm -f "$f"
|
|
|
|
fi
|
|
|
|
done
|
2009-05-19 23:17:58 +08:00
|
|
|
|
2019-08-07 22:35:23 +08:00
|
|
|
(for i in $cross_cc_vars; do
|
|
|
|
export $i
|
|
|
|
done
|
2021-12-25 04:08:18 +08:00
|
|
|
export target_list source_path use_containers cpu
|
2019-08-07 22:35:23 +08:00
|
|
|
$source_path/tests/tcg/configure.sh)
|
|
|
|
|
2009-09-04 23:13:29 +08:00
|
|
|
# temporary config to build submodules
|
2020-06-22 21:12:40 +08:00
|
|
|
for rom in seabios; do
|
2009-09-04 23:13:29 +08:00
|
|
|
config_mak=roms/$rom/config.mak
|
2010-03-02 05:20:29 +08:00
|
|
|
echo "# Automatically generated by configure - do not modify" > $config_mak
|
2009-09-04 23:13:29 +08:00
|
|
|
echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
|
2016-07-08 12:49:36 +08:00
|
|
|
echo "AS=$as" >> $config_mak
|
2016-06-24 01:39:18 +08:00
|
|
|
echo "CCAS=$ccas" >> $config_mak
|
2009-09-04 23:13:29 +08:00
|
|
|
echo "CC=$cc" >> $config_mak
|
|
|
|
echo "BCC=bcc" >> $config_mak
|
2013-01-05 18:10:27 +08:00
|
|
|
echo "CPP=$cpp" >> $config_mak
|
2009-09-04 23:13:29 +08:00
|
|
|
echo "OBJCOPY=objcopy" >> $config_mak
|
2013-07-24 23:56:03 +08:00
|
|
|
echo "IASL=$iasl" >> $config_mak
|
2009-09-04 23:13:29 +08:00
|
|
|
echo "LD=$ld" >> $config_mak
|
2017-11-08 09:10:46 +08:00
|
|
|
echo "RANLIB=$ranlib" >> $config_mak
|
2009-09-04 23:13:29 +08:00
|
|
|
done
|
|
|
|
|
2021-09-15 18:56:34 +08:00
|
|
|
config_mak=pc-bios/optionrom/config.mak
|
|
|
|
echo "# Automatically generated by configure - do not modify" > $config_mak
|
|
|
|
echo "TOPSRC_DIR=$source_path" >> $config_mak
|
|
|
|
|
2019-06-10 18:05:14 +08:00
|
|
|
if test "$skip_meson" = no; then
|
2021-03-16 15:19:34 +08:00
|
|
|
cross="config-meson.cross.new"
|
|
|
|
meson_quote() {
|
2021-11-05 17:07:37 +08:00
|
|
|
test $# = 0 && return
|
2020-09-23 17:26:17 +08:00
|
|
|
echo "'$(echo $* | sed "s/ /','/g")'"
|
2021-03-16 15:19:34 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
echo "# Automatically generated by configure - do not modify" > $cross
|
|
|
|
echo "[properties]" >> $cross
|
2021-07-07 21:17:44 +08:00
|
|
|
|
|
|
|
# unroll any custom device configs
|
2021-07-21 07:26:38 +08:00
|
|
|
for a in $device_archs; do
|
|
|
|
eval "c=\$devices_${a}"
|
|
|
|
echo "${a}-softmmu = '$c'" >> $cross
|
|
|
|
done
|
2021-07-07 21:17:44 +08:00
|
|
|
|
2021-03-16 15:19:34 +08:00
|
|
|
test -z "$cxx" && echo "link_language = 'c'" >> $cross
|
|
|
|
echo "[built-in options]" >> $cross
|
2021-11-05 17:09:26 +08:00
|
|
|
echo "c_args = [$(meson_quote $CFLAGS $EXTRA_CFLAGS)]" >> $cross
|
|
|
|
echo "cpp_args = [$(meson_quote $CXXFLAGS $EXTRA_CXXFLAGS)]" >> $cross
|
|
|
|
echo "c_link_args = [$(meson_quote $CFLAGS $LDFLAGS $EXTRA_CFLAGS $EXTRA_LDFLAGS)]" >> $cross
|
|
|
|
echo "cpp_link_args = [$(meson_quote $CXXFLAGS $LDFLAGS $EXTRA_CXXFLAGS $EXTRA_LDFLAGS)]" >> $cross
|
2021-03-16 15:19:34 +08:00
|
|
|
echo "[binaries]" >> $cross
|
2021-09-29 23:14:43 +08:00
|
|
|
echo "c = [$(meson_quote $cc $CPU_CFLAGS)]" >> $cross
|
|
|
|
test -n "$cxx" && echo "cpp = [$(meson_quote $cxx $CPU_CFLAGS)]" >> $cross
|
|
|
|
test -n "$objcc" && echo "objc = [$(meson_quote $objcc $CPU_CFLAGS)]" >> $cross
|
2021-03-16 15:19:34 +08:00
|
|
|
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
|
|
|
|
if has $sdl2_config; then
|
|
|
|
echo "sdl2-config = [$(meson_quote $sdl2_config)]" >> $cross
|
|
|
|
fi
|
|
|
|
echo "strip = [$(meson_quote $strip)]" >> $cross
|
|
|
|
echo "windres = [$(meson_quote $windres)]" >> $cross
|
|
|
|
if test "$cross_compile" = "yes"; then
|
2019-07-13 05:47:54 +08:00
|
|
|
cross_arg="--cross-file config-meson.cross"
|
|
|
|
echo "[host_machine]" >> $cross
|
2021-11-08 21:47:54 +08:00
|
|
|
echo "system = '$targetos'" >> $cross
|
2021-11-08 21:18:17 +08:00
|
|
|
case "$cpu" in
|
2021-01-26 09:24:54 +08:00
|
|
|
i386)
|
2019-07-13 05:47:54 +08:00
|
|
|
echo "cpu_family = 'x86'" >> $cross
|
|
|
|
;;
|
|
|
|
*)
|
2021-11-08 21:18:17 +08:00
|
|
|
echo "cpu_family = '$cpu'" >> $cross
|
2019-07-13 05:47:54 +08:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
echo "cpu = '$cpu'" >> $cross
|
|
|
|
if test "$bigendian" = "yes" ; then
|
|
|
|
echo "endian = 'big'" >> $cross
|
|
|
|
else
|
|
|
|
echo "endian = 'little'" >> $cross
|
|
|
|
fi
|
2021-03-16 15:19:34 +08:00
|
|
|
else
|
2019-07-13 05:47:54 +08:00
|
|
|
cross_arg="--native-file config-meson.cross"
|
2021-03-16 15:19:34 +08:00
|
|
|
fi
|
|
|
|
mv $cross config-meson.cross
|
2019-07-13 05:47:54 +08:00
|
|
|
|
2021-03-16 15:19:34 +08:00
|
|
|
rm -rf meson-private meson-info meson-logs
|
2021-10-07 21:08:28 +08:00
|
|
|
run_meson() {
|
|
|
|
NINJA=$ninja $meson setup \
|
2020-08-18 18:17:01 +08:00
|
|
|
--prefix "$prefix" \
|
|
|
|
--libdir "$libdir" \
|
|
|
|
--libexecdir "$libexecdir" \
|
|
|
|
--bindir "$bindir" \
|
|
|
|
--includedir "$includedir" \
|
|
|
|
--datadir "$datadir" \
|
|
|
|
--mandir "$mandir" \
|
|
|
|
--sysconfdir "$sysconfdir" \
|
2020-10-16 15:19:14 +08:00
|
|
|
--localedir "$localedir" \
|
2020-08-18 18:17:01 +08:00
|
|
|
--localstatedir "$local_statedir" \
|
2021-10-07 21:08:29 +08:00
|
|
|
-Daudio_drv_list=$audio_drv_list \
|
|
|
|
-Ddefault_devices=$default_devices \
|
2020-08-18 18:17:01 +08:00
|
|
|
-Ddocdir="$docdir" \
|
2020-10-16 15:19:14 +08:00
|
|
|
-Dqemu_firmwarepath="$firmwarepath" \
|
2020-08-26 19:04:15 +08:00
|
|
|
-Dqemu_suffix="$qemu_suffix" \
|
2021-10-07 21:08:29 +08:00
|
|
|
-Dsphinx_build="$sphinx_build" \
|
|
|
|
-Dtrace_file="$trace_file" \
|
2019-06-10 18:05:14 +08:00
|
|
|
-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) \
|
2019-09-17 19:39:36 +08:00
|
|
|
-Db_pie=$(if test "$pie" = yes; then echo true; else echo false; fi) \
|
2019-10-04 21:35:16 +08:00
|
|
|
-Db_coverage=$(if test "$gcov" = yes; then echo true; else echo false; fi) \
|
2021-10-07 21:08:29 +08:00
|
|
|
-Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
|
|
|
|
-Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
|
2021-10-07 21:08:12 +08:00
|
|
|
$(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
|
2021-07-13 17:31:52 +08:00
|
|
|
$(if test "$default_feature" = no; then echo "-Dauto_features=disabled"; fi) \
|
2021-10-07 21:08:28 +08:00
|
|
|
"$@" $cross_arg "$PWD" "$source_path"
|
|
|
|
}
|
|
|
|
eval run_meson $meson_options
|
2021-03-16 15:19:34 +08:00
|
|
|
if test "$?" -ne 0 ; then
|
|
|
|
error_exit "meson setup failed"
|
|
|
|
fi
|
2021-03-16 15:27:40 +08:00
|
|
|
else
|
|
|
|
if test -f meson-private/cmd_line.txt; then
|
|
|
|
# Adjust old command line options whose type was changed
|
|
|
|
# Avoids having to use "setup --wipe" when Meson is upgraded
|
|
|
|
perl -i -ne '
|
|
|
|
s/^gettext = true$/gettext = auto/;
|
|
|
|
s/^gettext = false$/gettext = disabled/;
|
2021-02-09 21:59:26 +08:00
|
|
|
/^b_staticpic/ && next;
|
2021-03-16 15:27:40 +08:00
|
|
|
print;' meson-private/cmd_line.txt
|
|
|
|
fi
|
2019-06-10 18:05:14 +08:00
|
|
|
fi
|
|
|
|
|
2020-09-09 19:27:37 +08:00
|
|
|
if test -n "${deprecated_features}"; then
|
|
|
|
echo "Warning, deprecated features enabled."
|
2021-07-23 14:58:28 +08:00
|
|
|
echo "Please see docs/about/deprecated.rst"
|
2020-09-09 19:27:37 +08:00
|
|
|
echo " features: ${deprecated_features}"
|
|
|
|
fi
|
|
|
|
|
2021-04-14 19:20:04 +08:00
|
|
|
# Create list of config switches that should be poisoned in common code...
|
|
|
|
# but filter out CONFIG_TCG and CONFIG_USER_ONLY which are special.
|
2021-05-19 19:38:40 +08:00
|
|
|
target_configs_h=$(ls *-config-devices.h *-config-target.h 2>/dev/null)
|
|
|
|
if test -n "$target_configs_h" ; then
|
|
|
|
sed -n -e '/CONFIG_TCG/d' -e '/CONFIG_USER_ONLY/d' \
|
|
|
|
-e '/^#define / { s///; s/ .*//; s/^/#pragma GCC poison /p; }' \
|
|
|
|
$target_configs_h | sort -u > config-poison.h
|
|
|
|
else
|
|
|
|
:> config-poison.h
|
|
|
|
fi
|
2021-04-14 19:20:04 +08:00
|
|
|
|
2014-03-09 23:37:49 +08:00
|
|
|
# Save the configure command line for later reuse.
|
|
|
|
cat <<EOD >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
|
configure: preserve various environment variables in config.status
The config.status script is auto-generated by configure upon
completion. The intention is that config.status can be later invoked by
the developer directly, or by make indirectly, to re-detect the same
environment that configure originally used.
The current config.status script, however, only contains a record of the
command line arguments to configure. Various environment variables have
an effect on what configure will find. In particular PKG_CONFIG_LIBDIR &
PKG_CONFIG_PATH vars will affect what libraries pkg-config finds. The
PATH var will affect what toolchain binaries and XXXX-config scripts are
found. The LD_LIBRARY_PATH var will affect what libraries are
found. Most commands have env variables that will override the name/path
of the default version configure finds.
All these key env variables should be recorded in the config.status script.
Autoconf would also preserve CFLAGS, LDFLAGS, LIBS, CPPFLAGS, but QEMU
deals with those differently, expecting extra flags to be set using
configure args, rather than env variables. At the end of the script we
also don't have the original values of those env vars, as we modify them
during configure.
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <20180904123603.10016-1-berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-09-04 20:36:03 +08:00
|
|
|
|
|
|
|
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
|
2021-11-05 17:08:43 +08:00
|
|
|
preserve_env CFLAGS
|
configure: preserve various environment variables in config.status
The config.status script is auto-generated by configure upon
completion. The intention is that config.status can be later invoked by
the developer directly, or by make indirectly, to re-detect the same
environment that configure originally used.
The current config.status script, however, only contains a record of the
command line arguments to configure. Various environment variables have
an effect on what configure will find. In particular PKG_CONFIG_LIBDIR &
PKG_CONFIG_PATH vars will affect what libraries pkg-config finds. The
PATH var will affect what toolchain binaries and XXXX-config scripts are
found. The LD_LIBRARY_PATH var will affect what libraries are
found. Most commands have env variables that will override the name/path
of the default version configure finds.
All these key env variables should be recorded in the config.status script.
Autoconf would also preserve CFLAGS, LDFLAGS, LIBS, CPPFLAGS, but QEMU
deals with those differently, expecting extra flags to be set using
configure args, rather than env variables. At the end of the script we
also don't have the original values of those env vars, as we modify them
during configure.
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <20180904123603.10016-1-berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-09-04 20:36:03 +08:00
|
|
|
preserve_env CXX
|
2021-11-05 17:08:43 +08:00
|
|
|
preserve_env CXXFLAGS
|
configure: preserve various environment variables in config.status
The config.status script is auto-generated by configure upon
completion. The intention is that config.status can be later invoked by
the developer directly, or by make indirectly, to re-detect the same
environment that configure originally used.
The current config.status script, however, only contains a record of the
command line arguments to configure. Various environment variables have
an effect on what configure will find. In particular PKG_CONFIG_LIBDIR &
PKG_CONFIG_PATH vars will affect what libraries pkg-config finds. The
PATH var will affect what toolchain binaries and XXXX-config scripts are
found. The LD_LIBRARY_PATH var will affect what libraries are
found. Most commands have env variables that will override the name/path
of the default version configure finds.
All these key env variables should be recorded in the config.status script.
Autoconf would also preserve CFLAGS, LDFLAGS, LIBS, CPPFLAGS, but QEMU
deals with those differently, expecting extra flags to be set using
configure args, rather than env variables. At the end of the script we
also don't have the original values of those env vars, as we modify them
during configure.
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <20180904123603.10016-1-berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-09-04 20:36:03 +08:00
|
|
|
preserve_env INSTALL
|
|
|
|
preserve_env LD
|
2021-11-05 17:08:43 +08:00
|
|
|
preserve_env LDFLAGS
|
configure: preserve various environment variables in config.status
The config.status script is auto-generated by configure upon
completion. The intention is that config.status can be later invoked by
the developer directly, or by make indirectly, to re-detect the same
environment that configure originally used.
The current config.status script, however, only contains a record of the
command line arguments to configure. Various environment variables have
an effect on what configure will find. In particular PKG_CONFIG_LIBDIR &
PKG_CONFIG_PATH vars will affect what libraries pkg-config finds. The
PATH var will affect what toolchain binaries and XXXX-config scripts are
found. The LD_LIBRARY_PATH var will affect what libraries are
found. Most commands have env variables that will override the name/path
of the default version configure finds.
All these key env variables should be recorded in the config.status script.
Autoconf would also preserve CFLAGS, LDFLAGS, LIBS, CPPFLAGS, but QEMU
deals with those differently, expecting extra flags to be set using
configure args, rather than env variables. At the end of the script we
also don't have the original values of those env vars, as we modify them
during configure.
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <20180904123603.10016-1-berrange@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-09-04 20:36:03 +08:00
|
|
|
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
|
|
|
|
|
2014-03-09 23:37:49 +08:00
|
|
|
printf "exec" >>config.status
|
2019-06-10 18:05:14 +08:00
|
|
|
for i in "$0" "$@"; do
|
2020-09-08 19:20:45 +08:00
|
|
|
test "$i" = --skip-meson || printf " %s" "$(quote_sh "$i")" >>config.status
|
2019-06-10 18:05:14 +08:00
|
|
|
done
|
2016-01-12 19:58:48 +08:00
|
|
|
echo ' "$@"' >>config.status
|
2014-03-09 23:37:49 +08:00
|
|
|
chmod +x config.status
|
|
|
|
|
2014-05-24 00:07:24 +08:00
|
|
|
rm -r "$TMPDIR1"
|