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
|
|
|
|
|
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"
|
2016-06-06 19:02:50 +08:00
|
|
|
TMPMO="${TMPDIR1}/${TMPB}.mo"
|
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
|
|
|
|
|
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.
|
|
|
|
local compiler="$1"
|
|
|
|
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() {
|
|
|
|
do_compiler "$cc" "$@"
|
|
|
|
}
|
|
|
|
|
|
|
|
do_cxx() {
|
|
|
|
do_compiler "$cxx" "$@"
|
|
|
|
}
|
|
|
|
|
|
|
|
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.
|
2017-06-06 21:07:47 +08:00
|
|
|
QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
|
|
|
|
|
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)
|
|
|
|
;;
|
2019-01-07 18:25:22 +08:00
|
|
|
-std=gnu99)
|
|
|
|
QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
|
|
|
|
;;
|
2014-02-26 02:27:49 +08:00
|
|
|
*)
|
|
|
|
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"
|
|
|
|
do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
|
2009-08-03 20:46:03 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
compile_prog() {
|
|
|
|
local_cflags="$1"
|
|
|
|
local_ldflags="$2"
|
2012-07-18 22:10:28 +08:00
|
|
|
do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $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
|
|
|
|
}
|
|
|
|
|
|
|
|
# search for an executable in PATH
|
|
|
|
path_of() {
|
|
|
|
local_command="$1"
|
|
|
|
local_ifs="$IFS"
|
|
|
|
local_dir=""
|
|
|
|
|
|
|
|
# pathname has a dir component?
|
|
|
|
if [ "${local_command#*/}" != "$local_command" ]; then
|
|
|
|
if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
|
|
|
|
echo "$local_command"
|
|
|
|
return 0
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
if [ -z "$local_command" ]; then
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
IFS=:
|
|
|
|
for local_dir in $PATH; do
|
|
|
|
if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
|
|
|
|
echo "$local_dir/$local_command"
|
|
|
|
IFS="${local_ifs:-$(printf ' \t\n')}"
|
|
|
|
return 0
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
# not found
|
|
|
|
IFS="${local_ifs:-$(printf ' \t\n')}"
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
2014-05-27 21:02:14 +08:00
|
|
|
have_backend () {
|
|
|
|
echo "$trace_backends" | grep "$1" >/dev/null
|
|
|
|
}
|
|
|
|
|
2012-09-17 17:59:41 +08:00
|
|
|
glob() {
|
|
|
|
eval test -z '"${1#'"$2"'}"'
|
|
|
|
}
|
|
|
|
|
|
|
|
supported_hax_target() {
|
|
|
|
test "$hax" = "yes" || return 1
|
|
|
|
glob "$1" "*-softmmu" || return 1
|
|
|
|
case "${1%-softmmu}" in
|
|
|
|
i386|x86_64)
|
|
|
|
return 0
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
|
|
|
supported_kvm_target() {
|
|
|
|
test "$kvm" = "yes" || return 1
|
|
|
|
glob "$1" "*-softmmu" || return 1
|
|
|
|
case "${1%-softmmu}:$cpu" in
|
|
|
|
arm:arm | aarch64:aarch64 | \
|
|
|
|
i386:i386 | i386:x86_64 | i386:x32 | \
|
|
|
|
x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
|
|
|
|
mips:mips | mipsel:mips | \
|
2019-05-02 06:38:18 +08:00
|
|
|
ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
|
2012-09-17 17:59:41 +08:00
|
|
|
s390x:s390x)
|
|
|
|
return 0
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
|
|
|
supported_xen_target() {
|
|
|
|
test "$xen" = "yes" || return 1
|
|
|
|
glob "$1" "*-softmmu" || return 1
|
2017-07-11 18:00:49 +08:00
|
|
|
# Only i386 and x86_64 provide the xenpv machine.
|
|
|
|
case "${1%-softmmu}" in
|
|
|
|
i386|x86_64)
|
2012-09-17 17:59:41 +08:00
|
|
|
return 0
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
i386: hvf: add code base from Google's QEMU repository
This file begins tracking the files that will be the code base for HVF
support in QEMU. This code base is part of Google's QEMU version of
their Android emulator, and can be found at
https://android.googlesource.com/platform/external/qemu/+/emu-master-dev
This code is based on Veertu Inc's vdhh (Veertu Desktop Hosted
Hypervisor), found at https://github.com/veertuinc/vdhh. Everything is
appropriately licensed under GPL v2-or-later, except for the code inside
x86_task.c and x86_task.h, which, deriving from KVM (the Linux kernel),
is licensed GPL v2-only.
This code base already implements a very great deal of functionality,
although Google's version removed from Vertuu's the support for APIC
page and hyperv-related stuff. According to the Android Emulator Release
Notes, Revision 26.1.3 (August 2017), "Hypervisor.framework is now
enabled by default on macOS for 32-bit x86 images to improve performance
and macOS compatibility", although we better use with caution for, as the
same Revision warns us, "If you experience issues with it specifically,
please file a bug report...". The code hasn't seen much update in the
last 5 months, so I think that we can further develop the code with
occasional visiting Google's repository to see if there has been any
update.
On top of Google's code, the following changes were made:
- add code to the configure script to support the --enable-hvf argument.
If the OS is Darwin, it checks for presence of HVF in the system. The
patch also adds strings related to HVF in the file qemu-options.hx.
QEMU will only support the modern syntax style '-M accel=hvf' no enable
hvf; the legacy '-enable-hvf' will not be supported.
- fix styling issues
- add glue code to cpus.c
- move HVFX86EmulatorState field to CPUX86State, changing the
the emulation functions to have a parameter with signature 'CPUX86State *'
instead of 'CPUState *' so we don't have to get the 'env'.
Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-2-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-3-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-5-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-6-Sergio.G.DelReal@gmail.com>
Message-Id: <20170905035457.3753-7-Sergio.G.DelReal@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-09-13 17:05:09 +08:00
|
|
|
supported_hvf_target() {
|
|
|
|
test "$hvf" = "yes" || return 1
|
|
|
|
glob "$1" "*-softmmu" || return 1
|
|
|
|
case "${1%-softmmu}" in
|
|
|
|
x86_64)
|
|
|
|
return 0
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
2018-01-23 05:07:46 +08:00
|
|
|
supported_whpx_target() {
|
|
|
|
test "$whpx" = "yes" || return 1
|
|
|
|
glob "$1" "*-softmmu" || return 1
|
|
|
|
case "${1%-softmmu}" in
|
|
|
|
i386|x86_64)
|
|
|
|
return 0
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
return 1
|
|
|
|
}
|
|
|
|
|
2017-07-03 22:58:28 +08:00
|
|
|
supported_target() {
|
|
|
|
case "$1" in
|
|
|
|
*-softmmu)
|
|
|
|
;;
|
|
|
|
*-linux-user)
|
|
|
|
if test "$linux" != "yes"; then
|
|
|
|
print_error "Target '$target' is only available on a Linux host"
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
*-bsd-user)
|
|
|
|
if test "$bsd" != "yes"; then
|
|
|
|
print_error "Target '$target' is only available on a BSD host"
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
print_error "Invalid target name '$target'"
|
|
|
|
return 1
|
|
|
|
;;
|
|
|
|
esac
|
2017-07-03 22:59:07 +08:00
|
|
|
test "$tcg" = "yes" && return 0
|
|
|
|
supported_kvm_target "$1" && return 0
|
|
|
|
supported_xen_target "$1" && return 0
|
|
|
|
supported_hax_target "$1" && return 0
|
i386: hvf: add code base from Google's QEMU repository
This file begins tracking the files that will be the code base for HVF
support in QEMU. This code base is part of Google's QEMU version of
their Android emulator, and can be found at
https://android.googlesource.com/platform/external/qemu/+/emu-master-dev
This code is based on Veertu Inc's vdhh (Veertu Desktop Hosted
Hypervisor), found at https://github.com/veertuinc/vdhh. Everything is
appropriately licensed under GPL v2-or-later, except for the code inside
x86_task.c and x86_task.h, which, deriving from KVM (the Linux kernel),
is licensed GPL v2-only.
This code base already implements a very great deal of functionality,
although Google's version removed from Vertuu's the support for APIC
page and hyperv-related stuff. According to the Android Emulator Release
Notes, Revision 26.1.3 (August 2017), "Hypervisor.framework is now
enabled by default on macOS for 32-bit x86 images to improve performance
and macOS compatibility", although we better use with caution for, as the
same Revision warns us, "If you experience issues with it specifically,
please file a bug report...". The code hasn't seen much update in the
last 5 months, so I think that we can further develop the code with
occasional visiting Google's repository to see if there has been any
update.
On top of Google's code, the following changes were made:
- add code to the configure script to support the --enable-hvf argument.
If the OS is Darwin, it checks for presence of HVF in the system. The
patch also adds strings related to HVF in the file qemu-options.hx.
QEMU will only support the modern syntax style '-M accel=hvf' no enable
hvf; the legacy '-enable-hvf' will not be supported.
- fix styling issues
- add glue code to cpus.c
- move HVFX86EmulatorState field to CPUX86State, changing the
the emulation functions to have a parameter with signature 'CPUX86State *'
instead of 'CPUState *' so we don't have to get the 'env'.
Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-2-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-3-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-5-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-6-Sergio.G.DelReal@gmail.com>
Message-Id: <20170905035457.3753-7-Sergio.G.DelReal@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-09-13 17:05:09 +08:00
|
|
|
supported_hvf_target "$1" && return 0
|
2018-01-23 05:07:46 +08:00
|
|
|
supported_whpx_target "$1" && return 0
|
2017-07-03 22:59:07 +08:00
|
|
|
print_error "TCG disabled, but hardware accelerator not available for '$target'"
|
|
|
|
return 1
|
2017-07-03 22:58:28 +08:00
|
|
|
}
|
|
|
|
|
2017-08-23 18:16:23 +08:00
|
|
|
|
|
|
|
ld_has() {
|
|
|
|
$ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
|
|
|
|
}
|
|
|
|
|
2019-04-30 00:35:57 +08:00
|
|
|
# make source path absolute
|
2019-05-26 22:47:46 +08:00
|
|
|
source_path=$(cd "$(dirname -- "$0")"; pwd)
|
|
|
|
|
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"
|
2003-03-07 07:23:54 +08:00
|
|
|
cross_prefix=""
|
2008-06-26 05:04:05 +08:00
|
|
|
audio_drv_list=""
|
2013-05-29 19:35:40 +08:00
|
|
|
block_drv_rw_whitelist=""
|
|
|
|
block_drv_ro_whitelist=""
|
2012-12-07 23:39:13 +08:00
|
|
|
host_cc="cc"
|
2019-05-16 17:51:34 +08:00
|
|
|
libs_cpu=""
|
2009-08-03 20:46:26 +08:00
|
|
|
libs_softmmu=""
|
2009-08-03 20:47:06 +08:00
|
|
|
libs_tools=""
|
2009-08-03 20:46:59 +08:00
|
|
|
audio_pt_int=""
|
2009-10-10 05:13:41 +08:00
|
|
|
audio_win_int=""
|
2011-08-12 04:38:12 +08:00
|
|
|
libs_qga=""
|
2012-02-08 20:54:13 +08:00
|
|
|
debug_info="yes"
|
2014-03-29 00:19:02 +08:00
|
|
|
stack_protector=""
|
2008-12-30 01:14:15 +08:00
|
|
|
|
2017-09-29 18:11:58 +08:00
|
|
|
if test -e "$source_path/.git"
|
|
|
|
then
|
2017-10-26 20:52:26 +08:00
|
|
|
git_update=yes
|
2017-09-29 18:11:58 +08:00
|
|
|
git_submodules="ui/keycodemapdb"
|
2018-03-09 10:09:40 +08:00
|
|
|
git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
|
|
|
|
git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
|
2017-09-29 18:11:58 +08:00
|
|
|
else
|
2017-10-26 20:52:26 +08:00
|
|
|
git_update=no
|
2017-09-29 18:11:58 +08:00
|
|
|
git_submodules=""
|
2018-04-19 01:11:51 +08:00
|
|
|
|
|
|
|
if ! test -f "$source_path/ui/keycodemapdb/README"
|
|
|
|
then
|
|
|
|
echo
|
|
|
|
echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
|
|
|
|
echo
|
|
|
|
echo "This is not a GIT checkout but module content appears to"
|
|
|
|
echo "be missing. Do not use 'git archive' or GitHub download links"
|
|
|
|
echo "to acquire QEMU source archives. Non-GIT builds are only"
|
|
|
|
echo "supported with source archives linked from:"
|
|
|
|
echo
|
|
|
|
echo " https://www.qemu.org/download/"
|
|
|
|
echo
|
|
|
|
echo "Developers working with GIT can use scripts/archive-source.sh"
|
|
|
|
echo "if they need to create valid source archives."
|
|
|
|
echo
|
|
|
|
exit 1
|
|
|
|
fi
|
2017-09-29 18:11:58 +08:00
|
|
|
fi
|
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.
|
|
|
|
|
|
|
|
bluez=""
|
|
|
|
brlapi=""
|
|
|
|
curl=""
|
|
|
|
curses=""
|
|
|
|
docs=""
|
|
|
|
fdt=""
|
2013-11-06 18:44:06 +08:00
|
|
|
netmap="no"
|
2010-12-23 18:43:50 +08:00
|
|
|
sdl=""
|
2019-01-10 20:00:47 +08:00
|
|
|
sdl_image=""
|
2012-02-24 16:30:42 +08:00
|
|
|
virtfs=""
|
2017-08-22 12:50:55 +08:00
|
|
|
mpath=""
|
2011-03-16 20:33:36 +08:00
|
|
|
vnc="yes"
|
2010-12-23 18:43:50 +08:00
|
|
|
sparse="no"
|
|
|
|
vde=""
|
|
|
|
vnc_sasl=""
|
|
|
|
vnc_jpeg=""
|
|
|
|
vnc_png=""
|
2017-10-05 23:33:28 +08:00
|
|
|
xkbcommon=""
|
2010-12-23 18:43:50 +08:00
|
|
|
xen=""
|
2011-02-26 00:20:34 +08:00
|
|
|
xen_ctrl_version=""
|
2012-06-21 23:32:59 +08:00
|
|
|
xen_pci_passthrough=""
|
2010-12-23 18:43:50 +08:00
|
|
|
linux_aio=""
|
2012-01-26 22:42:26 +08:00
|
|
|
cap_ng=""
|
2010-12-23 18:43:50 +08:00
|
|
|
attr=""
|
2011-11-09 20:44:52 +08:00
|
|
|
libattr=""
|
2010-12-23 18:43:50 +08:00
|
|
|
xfs=""
|
2017-07-03 22:59:07 +08:00
|
|
|
tcg="yes"
|
2018-02-16 17:05:23 +08:00
|
|
|
membarrier=""
|
2019-02-15 01:35:53 +08:00
|
|
|
vhost_net=""
|
|
|
|
vhost_crypto=""
|
|
|
|
vhost_scsi=""
|
|
|
|
vhost_vsock=""
|
2017-08-03 17:07:46 +08:00
|
|
|
vhost_user=""
|
2011-07-27 11:11:26 +08:00
|
|
|
kvm="no"
|
2017-01-10 18:59:57 +08:00
|
|
|
hax="no"
|
i386: hvf: add code base from Google's QEMU repository
This file begins tracking the files that will be the code base for HVF
support in QEMU. This code base is part of Google's QEMU version of
their Android emulator, and can be found at
https://android.googlesource.com/platform/external/qemu/+/emu-master-dev
This code is based on Veertu Inc's vdhh (Veertu Desktop Hosted
Hypervisor), found at https://github.com/veertuinc/vdhh. Everything is
appropriately licensed under GPL v2-or-later, except for the code inside
x86_task.c and x86_task.h, which, deriving from KVM (the Linux kernel),
is licensed GPL v2-only.
This code base already implements a very great deal of functionality,
although Google's version removed from Vertuu's the support for APIC
page and hyperv-related stuff. According to the Android Emulator Release
Notes, Revision 26.1.3 (August 2017), "Hypervisor.framework is now
enabled by default on macOS for 32-bit x86 images to improve performance
and macOS compatibility", although we better use with caution for, as the
same Revision warns us, "If you experience issues with it specifically,
please file a bug report...". The code hasn't seen much update in the
last 5 months, so I think that we can further develop the code with
occasional visiting Google's repository to see if there has been any
update.
On top of Google's code, the following changes were made:
- add code to the configure script to support the --enable-hvf argument.
If the OS is Darwin, it checks for presence of HVF in the system. The
patch also adds strings related to HVF in the file qemu-options.hx.
QEMU will only support the modern syntax style '-M accel=hvf' no enable
hvf; the legacy '-enable-hvf' will not be supported.
- fix styling issues
- add glue code to cpus.c
- move HVFX86EmulatorState field to CPUX86State, changing the
the emulation functions to have a parameter with signature 'CPUX86State *'
instead of 'CPUState *' so we don't have to get the 'env'.
Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-2-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-3-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-5-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-6-Sergio.G.DelReal@gmail.com>
Message-Id: <20170905035457.3753-7-Sergio.G.DelReal@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-09-13 17:05:09 +08:00
|
|
|
hvf="no"
|
2018-01-23 05:07:46 +08:00
|
|
|
whpx="no"
|
2013-07-22 22:01:54 +08:00
|
|
|
rdma=""
|
2018-08-16 23:16:37 +08:00
|
|
|
pvrdma=""
|
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"
|
2015-11-04 04:43:42 +08:00
|
|
|
fortify_source=""
|
2010-12-23 18:43:50 +08:00
|
|
|
strip_opt="yes"
|
2011-10-19 13:07:18 +08:00
|
|
|
tcg_interpreter="no"
|
2010-12-23 18:43:50 +08:00
|
|
|
bigendian="no"
|
|
|
|
mingw32="no"
|
2012-05-02 02:45:39 +08:00
|
|
|
gcov="no"
|
|
|
|
gcov_tool="gcov"
|
2010-12-23 18:43:50 +08:00
|
|
|
EXESUF=""
|
2014-02-10 14:48:56 +08:00
|
|
|
DSOSUF=".so"
|
|
|
|
LDFLAGS_SHARED="-shared"
|
|
|
|
modules="no"
|
2010-12-23 18:43:50 +08:00
|
|
|
prefix="/usr/local"
|
|
|
|
mandir="\${prefix}/share/man"
|
2012-04-19 03:55:49 +08:00
|
|
|
datadir="\${prefix}/share"
|
2017-09-14 19:42:36 +08:00
|
|
|
firmwarepath="\${prefix}/share/qemu-firmware"
|
2012-04-19 03:55:38 +08:00
|
|
|
qemu_docdir="\${prefix}/share/doc/qemu"
|
2010-12-23 18:43:50 +08:00
|
|
|
bindir="\${prefix}/bin"
|
2011-05-15 17:08:59 +08:00
|
|
|
libdir="\${prefix}/lib"
|
2012-06-07 05:11:00 +08:00
|
|
|
libexecdir="\${prefix}/libexec"
|
2011-06-27 17:58:20 +08:00
|
|
|
includedir="\${prefix}/include"
|
2010-12-23 18:43:50 +08:00
|
|
|
sysconfdir="\${prefix}/etc"
|
2012-10-04 05:35:57 +08:00
|
|
|
local_statedir="\${prefix}/var"
|
2010-12-23 18:43:50 +08:00
|
|
|
confsuffix="/qemu"
|
2019-02-13 00:25:23 +08:00
|
|
|
slirp=""
|
2010-12-23 18:43:50 +08:00
|
|
|
oss_lib=""
|
|
|
|
bsd="no"
|
|
|
|
linux="no"
|
|
|
|
solaris="no"
|
|
|
|
profiler="no"
|
|
|
|
cocoa="no"
|
|
|
|
softmmu="yes"
|
|
|
|
linux_user="no"
|
|
|
|
bsd_user="no"
|
|
|
|
blobs="yes"
|
|
|
|
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"
|
|
|
|
spice=""
|
|
|
|
rbd=""
|
2015-08-30 17:48:40 +08:00
|
|
|
smartcard=""
|
2012-11-30 23:02:11 +08:00
|
|
|
libusb=""
|
2011-07-19 17:04:10 +08:00
|
|
|
usb_redir=""
|
2014-11-20 16:49:44 +08:00
|
|
|
opengl=""
|
2015-12-03 19:56:34 +08:00
|
|
|
opengl_dmabuf="no"
|
2017-07-19 12:40:18 +08:00
|
|
|
cpuid_h="no"
|
2018-10-20 04:38:59 +08:00
|
|
|
avx2_opt=""
|
2011-07-26 17:30:40 +08:00
|
|
|
zlib="yes"
|
2017-09-15 00:41:12 +08:00
|
|
|
capstone=""
|
2014-04-29 14:21:16 +08:00
|
|
|
lzo=""
|
|
|
|
snappy=""
|
2015-01-07 01:48:14 +08:00
|
|
|
bzip2=""
|
2018-11-05 23:08:04 +08:00
|
|
|
lzfse=""
|
2013-07-31 18:22:07 +08:00
|
|
|
guest_agent=""
|
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"
|
2015-05-06 19:57:40 +08:00
|
|
|
guest_agent_msi=""
|
2013-08-07 23:40:03 +08:00
|
|
|
vss_win32_sdk=""
|
|
|
|
win_sdk="no"
|
2012-09-10 19:26:29 +08:00
|
|
|
want_tools="yes"
|
2011-10-25 16:24:24 +08:00
|
|
|
libiscsi=""
|
2014-02-03 17:26:13 +08:00
|
|
|
libnfs=""
|
2012-02-28 19:25:50 +08:00
|
|
|
coroutine=""
|
2013-09-11 22:42:35 +08:00
|
|
|
coroutine_pool=""
|
2016-09-27 17:58:45 +08:00
|
|
|
debug_stack_usage="no"
|
2017-07-15 02:04:05 +08:00
|
|
|
crypto_afalg="no"
|
2012-08-15 05:44:05 +08:00
|
|
|
seccomp=""
|
2012-09-24 17:12:45 +08:00
|
|
|
glusterfs=""
|
2016-04-05 22:40:09 +08:00
|
|
|
glusterfs_xlator_opt="no"
|
2013-07-17 00:17:42 +08:00
|
|
|
glusterfs_discard="no"
|
2017-05-28 14:31:14 +08:00
|
|
|
glusterfs_fallocate="no"
|
2013-12-21 17:21:25 +08:00
|
|
|
glusterfs_zerofill="no"
|
2019-03-05 23:46:33 +08:00
|
|
|
glusterfs_ftruncate_has_stat="no"
|
2019-03-05 23:46:34 +08:00
|
|
|
glusterfs_iocb_has_stat="no"
|
2013-02-20 21:43:20 +08:00
|
|
|
gtk=""
|
2015-05-26 18:26:21 +08:00
|
|
|
gtk_gl="no"
|
2016-06-06 17:05:06 +08:00
|
|
|
tls_priority="NORMAL"
|
2015-07-02 01:10:29 +08:00
|
|
|
gnutls=""
|
2015-10-16 23:36:53 +08:00
|
|
|
nettle=""
|
|
|
|
gcrypt=""
|
2016-12-13 18:42:55 +08:00
|
|
|
gcrypt_hmac="no"
|
authz: add QAuthZPAM object type for authorizing using PAM
Add an authorization backend that talks to PAM to check whether the user
identity is allowed. This only uses the PAM account validation facility,
which is essentially just a check to see if the provided username is permitted
access. It doesn't use the authentication or session parts of PAM, since
that's dealt with by the relevant part of QEMU (eg VNC server).
Consider starting QEMU with a VNC server and telling it to use TLS with
x509 client certificates and configuring it to use an PAM to validate
the x509 distinguished name. In this example we're telling it to use PAM
for the QAuthZ impl with a service name of "qemu-vnc"
$ qemu-system-x86_64 \
-object tls-creds-x509,id=tls0,dir=/home/berrange/security/qemutls,\
endpoint=server,verify-peer=yes \
-object authz-pam,id=authz0,service=qemu-vnc \
-vnc :1,tls-creds=tls0,tls-authz=authz0
This requires an /etc/pam/qemu-vnc file to be created with the auth
rules. A very simple file based whitelist can be setup using
$ cat > /etc/pam/qemu-vnc <<EOF
account requisite pam_listfile.so item=user sense=allow file=/etc/qemu/vnc.allow
EOF
The /etc/qemu/vnc.allow file simply contains one username per line. Any
username not in the file is denied. The usernames in this example are
the x509 distinguished name from the client's x509 cert.
$ cat > /etc/qemu/vnc.allow <<EOF
CN=laptop.berrange.com,O=Berrange Home,L=London,ST=London,C=GB
EOF
More interesting would be to configure PAM to use an LDAP backend, so
that the QEMU authorization check data can be centralized instead of
requiring each compute host to have file maintained.
The main limitation with this PAM module is that the rules apply to all
QEMU instances on the host. Setting up different rules per VM, would
require creating a separate PAM service name & config file for every
guest. An alternative approach for the future might be to not pass in
the plain username to PAM, but instead combine the VM name or UUID with
the username. This requires further consideration though.
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-07-27 21:13:56 +08:00
|
|
|
auth_pam=""
|
2014-02-19 14:04:34 +08:00
|
|
|
vte=""
|
2014-07-11 18:51:43 +08:00
|
|
|
virglrenderer=""
|
2019-01-23 14:56:07 +08:00
|
|
|
tpm=""
|
2019-06-21 04:08:40 +08:00
|
|
|
libssh=""
|
2017-05-15 22:05:29 +08:00
|
|
|
live_block_migration="yes"
|
2014-05-14 17:43:28 +08:00
|
|
|
numa=""
|
2015-03-26 11:03:12 +08:00
|
|
|
tcmalloc="no"
|
2015-06-19 18:56:58 +08:00
|
|
|
jemalloc="no"
|
2016-07-27 15:01:48 +08:00
|
|
|
replication="yes"
|
block/vxhs.c: Add support for a new block device type called "vxhs"
Source code for the qnio library that this code loads can be downloaded from:
https://github.com/VeritasHyperScale/libqnio.git
Sample command line using JSON syntax:
./x86_64-softmmu/qemu-system-x86_64 -name instance-00000008 -S -vnc 0.0.0.0:0
-k en-us -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
-msg timestamp=on
'json:{"driver":"vxhs","vdisk-id":"c3e9095a-a5ee-4dce-afeb-2a59fb387410",
"server":{"host":"172.172.17.4","port":"9999"}}'
Sample command line using URI syntax:
qemu-img convert -f raw -O raw -n
/var/lib/nova/instances/_base/0c5eacd5ebea5ed914b6a3e7b18f1ce734c386ad
vxhs://192.168.0.1:9999/c6718f6b-0401-441d-a8c3-1f0064d75ee0
Sample command line using TLS credentials (run in secure mode):
./qemu-io --object
tls-creds-x509,id=tls0,dir=/etc/pki/qemu/vxhs,endpoint=client -c 'read
-v 66000 2.5k' 'json:{"server.host": "127.0.0.1", "server.port": "9999",
"vdisk-id": "/test.raw", "driver": "vxhs", "tls-creds":"tls0"}'
[Jeff: Modified trace-events with the correct string formatting]
Signed-off-by: Ashish Mittal <Ashish.Mittal@veritas.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Signed-off-by: Jeff Cody <jcody@redhat.com>
Message-id: 1491277689-24949-2-git-send-email-Ashish.Mittal@veritas.com
2017-04-04 11:48:08 +08:00
|
|
|
vxhs=""
|
2018-11-07 14:36:44 +08:00
|
|
|
bochs="yes"
|
|
|
|
cloop="yes"
|
|
|
|
dmg="yes"
|
|
|
|
qcow1="yes"
|
|
|
|
vdi="yes"
|
|
|
|
vvfat="yes"
|
|
|
|
qed="yes"
|
|
|
|
parallels="yes"
|
|
|
|
sheepdog="yes"
|
2018-01-12 17:01:19 +08:00
|
|
|
libxml2=""
|
2018-04-04 21:24:39 +08:00
|
|
|
docker="no"
|
2018-06-13 20:23:08 +08:00
|
|
|
debug_mutex="no"
|
2018-07-18 15:47:59 +08:00
|
|
|
libpmem=""
|
2019-01-23 14:56:17 +08:00
|
|
|
default_devices="yes"
|
2010-12-23 18:43:50 +08:00
|
|
|
|
2018-04-05 03:27:05 +08:00
|
|
|
# cross compilers defaults, can be overridden with --cross-cc-ARCH
|
|
|
|
cross_cc_aarch64="aarch64-linux-gnu-gcc"
|
2018-04-13 18:07:58 +08:00
|
|
|
cross_cc_aarch64_be="$cross_cc_aarch64"
|
|
|
|
cross_cc_cflags_aarch64_be="-mbig-endian"
|
2018-04-05 03:27:05 +08:00
|
|
|
cross_cc_arm="arm-linux-gnueabihf-gcc"
|
2018-04-13 18:07:58 +08:00
|
|
|
cross_cc_cflags_armeb="-mbig-endian"
|
2018-04-10 19:19:40 +08:00
|
|
|
cross_cc_i386="i386-pc-linux-gnu-gcc"
|
|
|
|
cross_cc_cflags_i386=""
|
2019-05-02 06:38:18 +08:00
|
|
|
cross_cc_ppc="powerpc-linux-gnu-gcc"
|
|
|
|
cross_cc_cflags_ppc="-m32"
|
|
|
|
cross_cc_ppc64="powerpc-linux-gnu-gcc"
|
|
|
|
cross_cc_cflags_ppc64="-m64"
|
|
|
|
cross_cc_ppc64le="powerpc64le-linux-gnu-gcc"
|
2018-04-05 03:27:05 +08:00
|
|
|
|
|
|
|
enabled_cross_compilers=""
|
|
|
|
|
2017-03-21 22:31:57 +08:00
|
|
|
supported_cpu="no"
|
|
|
|
supported_os="no"
|
2017-03-28 21:01:52 +08:00
|
|
|
bogus_os="no"
|
2017-12-20 21:16:46 +08:00
|
|
|
malloc_trim=""
|
2017-03-21 22:31:57 +08:00
|
|
|
|
2008-12-30 01:14:15 +08:00
|
|
|
# parse CC options first
|
|
|
|
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"
|
|
|
|
;;
|
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"
|
|
|
|
;;
|
2015-06-03 16:56:37 +08:00
|
|
|
--extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
|
2009-08-03 20:46:02 +08:00
|
|
|
;;
|
2017-06-06 21:07:47 +08:00
|
|
|
--extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
|
|
|
|
;;
|
2015-06-03 21:22:41 +08:00
|
|
|
--extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
|
2013-01-04 17:15:53 +08:00
|
|
|
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"
|
|
|
|
;;
|
2018-04-05 03:27:05 +08:00
|
|
|
--cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
|
|
|
|
eval "cross_cc_${cc_arch}=\$optarg"
|
|
|
|
;;
|
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
|
|
|
|
2013-10-22 04:03:06 +08:00
|
|
|
# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
|
|
|
|
ARFLAGS="${ARFLAGS-rv}"
|
|
|
|
|
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.)
|
2019-01-07 18:25:22 +08:00
|
|
|
QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
|
2011-05-18 05:08:43 +08:00
|
|
|
QEMU_CFLAGS="-Wall -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"
|
2018-03-21 23:22:07 +08:00
|
|
|
QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
|
2012-02-08 20:54:13 +08:00
|
|
|
if test "$debug_info" = "yes"; then
|
|
|
|
CFLAGS="-g $CFLAGS"
|
|
|
|
LDFLAGS="-g $LDFLAGS"
|
|
|
|
fi
|
2009-11-11 19:50:09 +08:00
|
|
|
|
2014-04-28 20:09:01 +08:00
|
|
|
# running configure in the source tree?
|
|
|
|
# we know that's the case if configure is there.
|
|
|
|
if test -f "./configure"; then
|
|
|
|
pwd_is_source_path="y"
|
|
|
|
else
|
|
|
|
pwd_is_source_path="n"
|
|
|
|
fi
|
|
|
|
|
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
|
|
|
|
targetos="Linux"
|
|
|
|
elif check_define _WIN32 ; then
|
|
|
|
targetos='MINGW32'
|
|
|
|
elif check_define __OpenBSD__ ; then
|
|
|
|
targetos='OpenBSD'
|
|
|
|
elif check_define __sun__ ; then
|
|
|
|
targetos='SunOS'
|
|
|
|
elif check_define __HAIKU__ ; then
|
|
|
|
targetos='Haiku'
|
2017-07-13 23:15:32 +08:00
|
|
|
elif check_define __FreeBSD__ ; then
|
|
|
|
targetos='FreeBSD'
|
|
|
|
elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
|
|
|
|
targetos='GNU/kFreeBSD'
|
|
|
|
elif check_define __DragonFly__ ; then
|
|
|
|
targetos='DragonFly'
|
|
|
|
elif check_define __NetBSD__; then
|
|
|
|
targetos='NetBSD'
|
|
|
|
elif check_define __APPLE__; then
|
|
|
|
targetos='Darwin'
|
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.
|
|
|
|
targetos='bogus'
|
|
|
|
bogus_os='yes'
|
2012-08-14 22:35:34 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
# Some host OSes need non-standard checks for which CPU to use.
|
|
|
|
# Note that these checks are broken for cross-compilation: if you're
|
|
|
|
# cross-compiling to one of these OSes then you'll need to specify
|
|
|
|
# the correct CPU with the --cpu option.
|
|
|
|
case $targetos in
|
|
|
|
Darwin)
|
|
|
|
# on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
|
|
|
|
# run 64-bit userspace code.
|
|
|
|
# If the user didn't specify a CPU explicitly and the kernel says this is
|
|
|
|
# 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
|
|
|
|
if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
|
|
|
|
cpu="x86_64"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
SunOS)
|
2016-05-16 21:10:20 +08:00
|
|
|
# $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
|
2012-08-14 22:35:34 +08:00
|
|
|
if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
|
|
|
|
cpu="x86_64"
|
|
|
|
fi
|
|
|
|
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
|
|
|
|
if check_define _LP64 ; then
|
|
|
|
cpu="riscv64"
|
|
|
|
else
|
|
|
|
cpu="riscv32"
|
|
|
|
fi
|
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"
|
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
|
|
|
|
|
2011-12-24 21:07:25 +08:00
|
|
|
ARCH=
|
|
|
|
# Normalise host CPU name and set ARCH.
|
|
|
|
# Note that this case should only have supported host CPUs, not guests.
|
2003-03-07 07:23:54 +08:00
|
|
|
case "$cpu" in
|
2018-12-20 03:20:19 +08:00
|
|
|
ppc|ppc64|s390|s390x|sparc64|x32|riscv32|riscv64)
|
2017-03-21 22:31:57 +08:00
|
|
|
supported_cpu="yes"
|
2018-04-05 03:27:05 +08:00
|
|
|
eval "cross_cc_${cpu}=\$host_cc"
|
2017-03-21 22:31:57 +08:00
|
|
|
;;
|
2019-05-02 06:38:18 +08:00
|
|
|
ppc64le)
|
|
|
|
ARCH="ppc64"
|
|
|
|
supported_cpu="yes"
|
|
|
|
cross_cc_ppc64le=$host_cc
|
|
|
|
;;
|
2003-03-07 07:23:54 +08:00
|
|
|
i386|i486|i586|i686|i86pc|BePC)
|
2003-08-11 05:36:04 +08:00
|
|
|
cpu="i386"
|
2017-03-21 22:31:57 +08:00
|
|
|
supported_cpu="yes"
|
2018-04-05 03:27:05 +08:00
|
|
|
cross_cc_i386=$host_cc
|
2003-03-07 07:23:54 +08:00
|
|
|
;;
|
2008-04-12 06:04:22 +08:00
|
|
|
x86_64|amd64)
|
|
|
|
cpu="x86_64"
|
2017-03-21 22:31:57 +08:00
|
|
|
supported_cpu="yes"
|
2018-04-05 03:27:05 +08:00
|
|
|
cross_cc_x86_64=$host_cc
|
2008-04-12 06:04:22 +08:00
|
|
|
;;
|
2011-11-30 17:57:48 +08:00
|
|
|
armv*b|armv*l|arm)
|
|
|
|
cpu="arm"
|
2017-03-21 22:31:57 +08:00
|
|
|
supported_cpu="yes"
|
2018-04-05 03:27:05 +08:00
|
|
|
cross_cc_arm=$host_cc
|
2003-03-07 07:23:54 +08:00
|
|
|
;;
|
2013-06-12 23:20:23 +08:00
|
|
|
aarch64)
|
|
|
|
cpu="aarch64"
|
2017-03-21 22:31:57 +08:00
|
|
|
supported_cpu="yes"
|
2018-04-05 03:27:05 +08:00
|
|
|
cross_cc_aarch64=$host_cc
|
2013-06-12 23:20:23 +08:00
|
|
|
;;
|
2009-10-17 20:17:47 +08:00
|
|
|
mips*)
|
|
|
|
cpu="mips"
|
2017-03-21 22:31:57 +08:00
|
|
|
supported_cpu="yes"
|
2018-04-05 03:27:05 +08:00
|
|
|
cross_cc_mips=$host_cc
|
2009-10-17 20:17:47 +08:00
|
|
|
;;
|
2007-04-17 02:27:06 +08:00
|
|
|
sparc|sun4[cdmuv])
|
2003-05-14 02:59:59 +08:00
|
|
|
cpu="sparc"
|
2017-03-28 18:58:38 +08:00
|
|
|
supported_cpu="yes"
|
2018-04-05 03:27:05 +08:00
|
|
|
cross_cc_sparc=$host_cc
|
2003-05-14 02:59:59 +08:00
|
|
|
;;
|
2003-03-07 07:23:54 +08:00
|
|
|
*)
|
2011-12-24 21:07:25 +08:00
|
|
|
# This will result in either an error or falling back to TCI later
|
|
|
|
ARCH=unknown
|
2003-03-07 07:23:54 +08:00
|
|
|
;;
|
|
|
|
esac
|
2011-12-24 21:07:25 +08:00
|
|
|
if test -z "$ARCH"; then
|
|
|
|
ARCH="$cpu"
|
|
|
|
fi
|
2009-08-13 00:20:24 +08:00
|
|
|
|
2003-03-07 07:23:54 +08:00
|
|
|
# OS specific
|
2009-08-03 20:46:13 +08:00
|
|
|
|
2014-06-09 00:57:22 +08:00
|
|
|
# host *BSD for user mode
|
|
|
|
HOST_VARIANT_DIR=""
|
|
|
|
|
2003-03-07 07:23:54 +08:00
|
|
|
case $targetos in
|
2004-04-01 07:37:16 +08:00
|
|
|
MINGW32*)
|
2009-08-03 20:46:13 +08:00
|
|
|
mingw32="yes"
|
2017-01-10 18:59:57 +08:00
|
|
|
hax="yes"
|
2019-02-15 01:35:53 +08:00
|
|
|
vhost_user="no"
|
2015-06-04 05:03:46 +08:00
|
|
|
audio_possible_drivers="dsound sdl"
|
2015-06-10 15:07:35 +08:00
|
|
|
if check_include dsound.h; then
|
|
|
|
audio_drv_list="dsound"
|
|
|
|
else
|
|
|
|
audio_drv_list=""
|
|
|
|
fi
|
2017-03-21 22:31:57 +08:00
|
|
|
supported_os="yes"
|
2004-04-01 07:37:16 +08:00
|
|
|
;;
|
2007-06-24 00:03:36 +08:00
|
|
|
GNU/kFreeBSD)
|
2009-11-30 01:00:41 +08:00
|
|
|
bsd="yes"
|
2019-01-24 19:20:55 +08:00
|
|
|
audio_drv_list="oss try-sdl"
|
2015-06-04 05:03:44 +08:00
|
|
|
audio_possible_drivers="oss sdl pa"
|
2007-06-24 00:03:36 +08:00
|
|
|
;;
|
2004-05-13 03:32:15 +08:00
|
|
|
FreeBSD)
|
2009-08-03 20:46:13 +08:00
|
|
|
bsd="yes"
|
2010-12-23 18:43:49 +08:00
|
|
|
make="${MAKE-gmake}"
|
2019-01-24 19:20:55 +08:00
|
|
|
audio_drv_list="oss try-sdl"
|
2015-06-04 05:03:44 +08:00
|
|
|
audio_possible_drivers="oss sdl pa"
|
2010-03-26 05:32:16 +08:00
|
|
|
# needed for kinfo_getvmmap(3) in libutil.h
|
|
|
|
LIBS="-lutil $LIBS"
|
2016-11-22 09:32:45 +08:00
|
|
|
# needed for kinfo_getproc
|
|
|
|
libs_qga="-lutil $libs_qga"
|
2013-11-06 18:44:06 +08:00
|
|
|
netmap="" # enable netmap autodetect
|
2014-06-09 00:57:22 +08:00
|
|
|
HOST_VARIANT_DIR="freebsd"
|
2017-03-21 22:31:57 +08:00
|
|
|
supported_os="yes"
|
2004-05-13 03:32:15 +08:00
|
|
|
;;
|
2009-03-08 04:06:23 +08:00
|
|
|
DragonFly)
|
2009-08-03 20:46:13 +08:00
|
|
|
bsd="yes"
|
2010-12-23 18:43:49 +08:00
|
|
|
make="${MAKE-gmake}"
|
2019-01-24 19:20:55 +08:00
|
|
|
audio_drv_list="oss try-sdl"
|
2015-06-04 05:03:44 +08:00
|
|
|
audio_possible_drivers="oss sdl pa"
|
2014-06-09 00:57:22 +08:00
|
|
|
HOST_VARIANT_DIR="dragonfly"
|
2009-03-08 04:06:23 +08:00
|
|
|
;;
|
2004-05-13 03:32:15 +08:00
|
|
|
NetBSD)
|
2009-08-03 20:46:13 +08:00
|
|
|
bsd="yes"
|
2019-02-08 07:37:04 +08:00
|
|
|
hax="yes"
|
2010-12-23 18:43:49 +08:00
|
|
|
make="${MAKE-gmake}"
|
2019-01-24 19:20:55 +08:00
|
|
|
audio_drv_list="oss try-sdl"
|
2015-06-04 05:03:44 +08:00
|
|
|
audio_possible_drivers="oss sdl"
|
2009-08-03 20:46:13 +08:00
|
|
|
oss_lib="-lossaudio"
|
2014-06-09 00:57:22 +08:00
|
|
|
HOST_VARIANT_DIR="netbsd"
|
2017-05-13 10:21:43 +08:00
|
|
|
supported_os="yes"
|
2004-05-13 03:32:15 +08:00
|
|
|
;;
|
|
|
|
OpenBSD)
|
2009-08-03 20:46:13 +08:00
|
|
|
bsd="yes"
|
2010-12-23 18:43:49 +08:00
|
|
|
make="${MAKE-gmake}"
|
2019-01-24 19:20:52 +08:00
|
|
|
audio_drv_list="try-sdl"
|
2015-06-04 05:03:44 +08:00
|
|
|
audio_possible_drivers="sdl"
|
2014-06-09 00:57:22 +08:00
|
|
|
HOST_VARIANT_DIR="openbsd"
|
2018-02-17 00:46:20 +08:00
|
|
|
supported_os="yes"
|
2004-05-13 03:32:15 +08:00
|
|
|
;;
|
2004-07-06 05:25:26 +08:00
|
|
|
Darwin)
|
2009-08-03 20:46:13 +08:00
|
|
|
bsd="yes"
|
|
|
|
darwin="yes"
|
2017-01-10 18:59:57 +08:00
|
|
|
hax="yes"
|
i386: hvf: add code base from Google's QEMU repository
This file begins tracking the files that will be the code base for HVF
support in QEMU. This code base is part of Google's QEMU version of
their Android emulator, and can be found at
https://android.googlesource.com/platform/external/qemu/+/emu-master-dev
This code is based on Veertu Inc's vdhh (Veertu Desktop Hosted
Hypervisor), found at https://github.com/veertuinc/vdhh. Everything is
appropriately licensed under GPL v2-or-later, except for the code inside
x86_task.c and x86_task.h, which, deriving from KVM (the Linux kernel),
is licensed GPL v2-only.
This code base already implements a very great deal of functionality,
although Google's version removed from Vertuu's the support for APIC
page and hyperv-related stuff. According to the Android Emulator Release
Notes, Revision 26.1.3 (August 2017), "Hypervisor.framework is now
enabled by default on macOS for 32-bit x86 images to improve performance
and macOS compatibility", although we better use with caution for, as the
same Revision warns us, "If you experience issues with it specifically,
please file a bug report...". The code hasn't seen much update in the
last 5 months, so I think that we can further develop the code with
occasional visiting Google's repository to see if there has been any
update.
On top of Google's code, the following changes were made:
- add code to the configure script to support the --enable-hvf argument.
If the OS is Darwin, it checks for presence of HVF in the system. The
patch also adds strings related to HVF in the file qemu-options.hx.
QEMU will only support the modern syntax style '-M accel=hvf' no enable
hvf; the legacy '-enable-hvf' will not be supported.
- fix styling issues
- add glue code to cpus.c
- move HVFX86EmulatorState field to CPUX86State, changing the
the emulation functions to have a parameter with signature 'CPUX86State *'
instead of 'CPUState *' so we don't have to get the 'env'.
Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-2-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-3-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-5-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-6-Sergio.G.DelReal@gmail.com>
Message-Id: <20170905035457.3753-7-Sergio.G.DelReal@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-09-13 17:05:09 +08:00
|
|
|
hvf="yes"
|
2014-02-10 14:48:56 +08:00
|
|
|
LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
|
2009-08-03 20:46:13 +08:00
|
|
|
if [ "$cpu" = "x86_64" ] ; then
|
2009-08-03 20:46:21 +08:00
|
|
|
QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
|
2009-08-03 20:46:01 +08:00
|
|
|
LDFLAGS="-arch x86_64 $LDFLAGS"
|
2009-08-03 20:46:13 +08:00
|
|
|
fi
|
|
|
|
cocoa="yes"
|
2019-01-24 19:20:55 +08:00
|
|
|
audio_drv_list="coreaudio try-sdl"
|
2015-06-04 05:03:45 +08:00
|
|
|
audio_possible_drivers="coreaudio sdl"
|
2009-08-03 20:46:13 +08:00
|
|
|
LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
|
2009-08-03 20:47:09 +08:00
|
|
|
libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
|
2012-08-12 05:34:39 +08:00
|
|
|
# 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"
|
2014-06-09 00:57:22 +08:00
|
|
|
HOST_VARIANT_DIR="darwin"
|
2017-03-21 22:31:57 +08:00
|
|
|
supported_os="yes"
|
2004-07-06 05:25:26 +08:00
|
|
|
;;
|
2006-04-26 06:36:06 +08:00
|
|
|
SunOS)
|
2009-08-03 20:46:13 +08:00
|
|
|
solaris="yes"
|
2010-12-23 18:43:49 +08:00
|
|
|
make="${MAKE-gmake}"
|
|
|
|
install="${INSTALL-ginstall}"
|
2011-09-03 04:53:28 +08:00
|
|
|
smbd="${SMBD-/usr/sfw/sbin/smbd}"
|
2009-08-03 20:46:13 +08:00
|
|
|
if test -f /usr/include/sys/soundcard.h ; then
|
2019-01-24 19:20:55 +08:00
|
|
|
audio_drv_list="oss try-sdl"
|
2009-08-03 20:46:13 +08:00
|
|
|
fi
|
|
|
|
audio_possible_drivers="oss sdl"
|
2009-09-12 20:36:04 +08:00
|
|
|
# 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"
|
2009-08-03 20:46:21 +08:00
|
|
|
QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
|
2012-05-01 00:00:55 +08:00
|
|
|
solarisnetlibs="-lsocket -lnsl -lresolv"
|
|
|
|
LIBS="$solarisnetlibs $LIBS"
|
|
|
|
libs_qga="$solarisnetlibs $libs_qga"
|
2007-02-11 08:31:33 +08:00
|
|
|
;;
|
2010-09-20 06:50:43 +08:00
|
|
|
Haiku)
|
|
|
|
haiku="yes"
|
|
|
|
QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
|
|
|
|
LIBS="-lposix_error_mapper -lnetwork $LIBS"
|
|
|
|
;;
|
2017-03-21 22:31:57 +08:00
|
|
|
Linux)
|
2019-02-19 20:42:57 +08:00
|
|
|
audio_drv_list="try-pa oss"
|
2015-06-04 05:03:44 +08:00
|
|
|
audio_possible_drivers="oss alsa sdl pa"
|
2009-08-03 20:46:13 +08:00
|
|
|
linux="yes"
|
|
|
|
linux_user="yes"
|
2011-06-23 16:05:12 +08:00
|
|
|
kvm="yes"
|
2018-11-17 04:33:03 +08:00
|
|
|
QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
|
2017-03-21 22:31:57 +08:00
|
|
|
supported_os="yes"
|
2018-10-23 19:23:10 +08:00
|
|
|
libudev="yes"
|
2017-03-21 22:31:57 +08:00
|
|
|
;;
|
2003-03-07 07:23:54 +08:00
|
|
|
esac
|
|
|
|
|
2004-05-13 03:32:15 +08:00
|
|
|
if [ "$bsd" = "yes" ] ; then
|
2006-04-16 21:28:56 +08:00
|
|
|
if [ "$darwin" != "yes" ] ; then
|
2012-04-26 17:57:39 +08:00
|
|
|
bsd_user="yes"
|
2004-07-06 05:25:26 +08:00
|
|
|
fi
|
2004-05-13 03:32:15 +08:00
|
|
|
fi
|
|
|
|
|
2010-12-23 18:43:49 +08:00
|
|
|
: ${make=${MAKE-make}}
|
|
|
|
: ${install=${INSTALL-install}}
|
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
|
|
|
|
# we check that before python2
|
|
|
|
python=
|
|
|
|
for binary in "${PYTHON-python3}" python python2
|
|
|
|
do
|
|
|
|
if has "$binary"
|
|
|
|
then
|
|
|
|
python="$binary"
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
2011-09-03 04:53:28 +08:00
|
|
|
: ${smbd=${SMBD-/usr/sbin/smbd}}
|
2010-12-23 18:43:49 +08:00
|
|
|
|
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"
|
2014-02-10 14:48:56 +08:00
|
|
|
DSOSUF=".dll"
|
2015-11-26 19:13:12 +08:00
|
|
|
# MinGW needs -mthreads for TLS and macro _MT.
|
|
|
|
QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
|
2012-03-10 18:14:32 +08:00
|
|
|
LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
|
2015-03-26 06:57:37 +08:00
|
|
|
write_c_skeleton;
|
2012-03-10 18:14:32 +08:00
|
|
|
if compile_prog "" "-liberty" ; then
|
|
|
|
LIBS="-liberty $LIBS"
|
|
|
|
fi
|
2012-04-07 15:23:38 +08:00
|
|
|
prefix="c:/Program Files/QEMU"
|
2010-05-26 22:08:28 +08:00
|
|
|
mandir="\${prefix}"
|
2012-04-19 03:55:49 +08:00
|
|
|
datadir="\${prefix}"
|
2012-04-19 03:55:38 +08:00
|
|
|
qemu_docdir="\${prefix}"
|
2010-05-26 22:08:28 +08:00
|
|
|
bindir="\${prefix}"
|
|
|
|
sysconfdir="\${prefix}"
|
2013-05-18 12:31:50 +08:00
|
|
|
local_statedir=
|
2010-05-26 22:08:28 +08:00
|
|
|
confsuffix=""
|
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
|
|
|
|
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
|
|
|
;;
|
2006-04-17 21:57:12 +08:00
|
|
|
--install=*) install="$optarg"
|
|
|
|
;;
|
2011-07-23 05:08:09 +08:00
|
|
|
--python=*) python="$optarg"
|
|
|
|
;;
|
2012-05-02 02:45:39 +08:00
|
|
|
--gcov=*) gcov_tool="$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
|
|
|
;;
|
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
|
|
|
;;
|
2014-05-27 21:02:14 +08:00
|
|
|
--enable-trace-backends=*) trace_backends="$optarg"
|
|
|
|
;;
|
|
|
|
# XXX: backwards compatibility
|
|
|
|
--enable-trace-backend=*) trace_backends="$optarg"
|
2010-05-23 00:52:39 +08:00
|
|
|
;;
|
2010-12-23 18:44:02 +08:00
|
|
|
--with-trace-file=*) trace_file="$optarg"
|
2010-07-13 16:26:32 +08:00
|
|
|
;;
|
2019-01-23 14:56:17 +08:00
|
|
|
--with-default-devices) default_devices="yes"
|
|
|
|
;;
|
|
|
|
--without-default-devices) default_devices="no"
|
|
|
|
;;
|
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"
|
|
|
|
LDFLAGS="-static $LDFLAGS"
|
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
|
|
|
;;
|
2012-04-19 03:55:50 +08:00
|
|
|
--with-confsuffix=*) confsuffix="$optarg"
|
|
|
|
;;
|
2012-04-19 03:55:38 +08:00
|
|
|
--docdir=*) qemu_docdir="$optarg"
|
2010-05-26 22:08:26 +08:00
|
|
|
;;
|
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=*|\
|
2011-11-24 20:11:31 +08:00
|
|
|
--oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
|
|
|
|
--htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
|
|
|
|
# These switches are silently ignored, for compatibility with
|
|
|
|
# autoconf-generated configure scripts. This allows QEMU's
|
|
|
|
# configure to be used by RPM and similar macros that set
|
|
|
|
# lots of directory switches by default.
|
|
|
|
;;
|
2003-08-11 05:36:04 +08:00
|
|
|
--disable-sdl) sdl="no"
|
|
|
|
;;
|
2009-08-13 00:29:53 +08:00
|
|
|
--enable-sdl) sdl="yes"
|
|
|
|
;;
|
2019-01-10 20:00:47 +08:00
|
|
|
--disable-sdl-image) sdl_image="no"
|
|
|
|
;;
|
|
|
|
--enable-sdl-image) sdl_image="yes"
|
|
|
|
;;
|
2013-05-10 20:16:40 +08:00
|
|
|
--disable-qom-cast-debug) qom_cast_debug="no"
|
|
|
|
;;
|
|
|
|
--enable-qom-cast-debug) qom_cast_debug="yes"
|
|
|
|
;;
|
2012-02-24 16:30:42 +08:00
|
|
|
--disable-virtfs) virtfs="no"
|
|
|
|
;;
|
|
|
|
--enable-virtfs) virtfs="yes"
|
|
|
|
;;
|
2017-08-22 12:50:55 +08:00
|
|
|
--disable-mpath) mpath="no"
|
|
|
|
;;
|
|
|
|
--enable-mpath) mpath="yes"
|
|
|
|
;;
|
2011-03-16 20:33:36 +08:00
|
|
|
--disable-vnc) vnc="no"
|
|
|
|
;;
|
|
|
|
--enable-vnc) vnc="yes"
|
|
|
|
;;
|
2008-08-22 02:00:53 +08:00
|
|
|
--oss-lib=*) oss_lib="$optarg"
|
|
|
|
;;
|
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
|
|
|
;;
|
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"
|
|
|
|
;;
|
2008-10-08 03:16:17 +08:00
|
|
|
--enable-sparse) sparse="yes"
|
|
|
|
;;
|
|
|
|
--disable-sparse) sparse="no"
|
|
|
|
;;
|
2009-04-06 01:41:02 +08:00
|
|
|
--disable-strip) strip_opt="no"
|
|
|
|
;;
|
Add SASL authentication support ("Daniel P. Berrange")
This patch adds the new SASL authentication protocol to the VNC server.
It is enabled by setting the 'sasl' flag when launching VNC. SASL can
optionally provide encryption via its SSF layer, if a suitable mechanism
is configured (eg, GSSAPI/Kerberos, or Digest-MD5). If an SSF layer is
not available, then it should be combined with the x509 VNC authentication
protocol which provides encryption.
eg, if using GSSAPI
qemu -vnc localhost:1,sasl
eg if using TLS/x509 for encryption
qemu -vnc localhost:1,sasl,tls,x509
By default the Cyrus SASL library will look for its configuration in
the file /etc/sasl2/qemu.conf. For non-root users, this can be overridden
by setting the SASL_CONF_PATH environment variable, eg to make it look in
$HOME/.sasl2. NB unprivileged users may not have access to the full range
of SASL mechanisms, since some of them require some administrative privileges
to configure. The patch includes an example SASL configuration file which
illustrates config for GSSAPI and Digest-MD5, though it should be noted that
the latter is not really considered secure any more.
Most of the SASL authentication code is located in a separate source file,
vnc-auth-sasl.c. The main vnc.c file only contains minimal integration
glue, specifically parsing of command line flags / setup, and calls to
start the SASL auth process, to do encoding/decoding for data.
There are several possible stacks for reading & writing of data, depending
on the combo of VNC authentication methods in use
- Clear. read/write straight to socket
- TLS. read/write via GNUTLS helpers
- SASL. encode/decode via SASL SSF layer, then read/write to socket
- SASL+TLS. encode/decode via SASL SSF layer, then read/write via GNUTLS
Hence, the vnc_client_read & vnc_client_write methods have been refactored
a little.
vnc_client_read: main entry point for reading, calls either
- vnc_client_read_plain reading, with no intermediate decoding
- vnc_client_read_sasl reading, with SASL SSF decoding
These two methods, then call vnc_client_read_buf(). This decides
whether to write to the socket directly or write via GNUTLS.
The situation is the same for writing data. More extensive comments
have been added in the code / patch. The vnc_client_read_sasl and
vnc_client_write_sasl method implementations live in the separate
vnc-auth-sasl.c file.
The state required for the SASL auth mechanism is kept in a separate
VncStateSASL struct, defined in vnc-auth-sasl.h and included in the
main VncState.
The configure script probes for SASL and automatically enables it
if found, unless --disable-vnc-sasl was given to override it.
Makefile | 7
Makefile.target | 5
b/qemu.sasl | 34 ++
b/vnc-auth-sasl.c | 626 ++++++++++++++++++++++++++++++++++++++++++++++++++++
b/vnc-auth-sasl.h | 67 +++++
configure | 34 ++
qemu-doc.texi | 97 ++++++++
vnc-auth-vencrypt.c | 12
vnc.c | 249 ++++++++++++++++++--
vnc.h | 31 ++
10 files changed, 1129 insertions(+), 33 deletions(-)
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6724 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-07 04:27:28 +08:00
|
|
|
--disable-vnc-sasl) vnc_sasl="no"
|
|
|
|
;;
|
2009-08-13 00:20:29 +08:00
|
|
|
--enable-vnc-sasl) vnc_sasl="yes"
|
|
|
|
;;
|
2010-07-08 02:57:49 +08:00
|
|
|
--disable-vnc-jpeg) vnc_jpeg="no"
|
|
|
|
;;
|
|
|
|
--enable-vnc-jpeg) vnc_jpeg="yes"
|
|
|
|
;;
|
2010-07-08 02:57:56 +08:00
|
|
|
--disable-vnc-png) vnc_png="no"
|
|
|
|
;;
|
|
|
|
--enable-vnc-png) vnc_png="yes"
|
|
|
|
;;
|
2004-06-04 19:13:20 +08:00
|
|
|
--disable-slirp) slirp="no"
|
2005-10-31 02:58:22 +08:00
|
|
|
;;
|
2019-04-24 19:00:41 +08:00
|
|
|
--enable-slirp=git) slirp="git"
|
|
|
|
;;
|
2019-02-13 00:25:23 +08:00
|
|
|
--enable-slirp=system) slirp="system"
|
|
|
|
;;
|
2008-07-24 02:14:33 +08:00
|
|
|
--disable-vde) vde="no"
|
2008-07-19 17:56:24 +08:00
|
|
|
;;
|
2009-08-13 00:20:27 +08:00
|
|
|
--enable-vde) vde="yes"
|
|
|
|
;;
|
2013-11-06 18:44:06 +08:00
|
|
|
--disable-netmap) netmap="no"
|
|
|
|
;;
|
|
|
|
--enable-netmap) netmap="yes"
|
|
|
|
;;
|
2009-04-22 23:19:10 +08:00
|
|
|
--disable-xen) xen="no"
|
|
|
|
;;
|
2009-08-13 00:29:55 +08:00
|
|
|
--enable-xen) xen="yes"
|
|
|
|
;;
|
2012-06-21 23:32:59 +08:00
|
|
|
--disable-xen-pci-passthrough) xen_pci_passthrough="no"
|
|
|
|
;;
|
|
|
|
--enable-xen-pci-passthrough) xen_pci_passthrough="yes"
|
|
|
|
;;
|
2008-04-08 14:01:02 +08:00
|
|
|
--disable-brlapi) brlapi="no"
|
|
|
|
;;
|
2009-08-13 00:20:26 +08:00
|
|
|
--enable-brlapi) brlapi="yes"
|
|
|
|
;;
|
2008-09-29 07:49:55 +08:00
|
|
|
--disable-bluez) bluez="no"
|
|
|
|
;;
|
2009-08-13 00:29:50 +08:00
|
|
|
--enable-bluez) bluez="yes"
|
|
|
|
;;
|
2008-11-06 00:04:33 +08:00
|
|
|
--disable-kvm) kvm="no"
|
|
|
|
;;
|
2009-08-13 00:29:56 +08:00
|
|
|
--enable-kvm) kvm="yes"
|
|
|
|
;;
|
2017-01-10 18:59:57 +08:00
|
|
|
--disable-hax) hax="no"
|
2016-10-27 14:43:08 +08:00
|
|
|
;;
|
2017-01-10 18:59:57 +08:00
|
|
|
--enable-hax) hax="yes"
|
2016-10-27 14:43:08 +08:00
|
|
|
;;
|
i386: hvf: add code base from Google's QEMU repository
This file begins tracking the files that will be the code base for HVF
support in QEMU. This code base is part of Google's QEMU version of
their Android emulator, and can be found at
https://android.googlesource.com/platform/external/qemu/+/emu-master-dev
This code is based on Veertu Inc's vdhh (Veertu Desktop Hosted
Hypervisor), found at https://github.com/veertuinc/vdhh. Everything is
appropriately licensed under GPL v2-or-later, except for the code inside
x86_task.c and x86_task.h, which, deriving from KVM (the Linux kernel),
is licensed GPL v2-only.
This code base already implements a very great deal of functionality,
although Google's version removed from Vertuu's the support for APIC
page and hyperv-related stuff. According to the Android Emulator Release
Notes, Revision 26.1.3 (August 2017), "Hypervisor.framework is now
enabled by default on macOS for 32-bit x86 images to improve performance
and macOS compatibility", although we better use with caution for, as the
same Revision warns us, "If you experience issues with it specifically,
please file a bug report...". The code hasn't seen much update in the
last 5 months, so I think that we can further develop the code with
occasional visiting Google's repository to see if there has been any
update.
On top of Google's code, the following changes were made:
- add code to the configure script to support the --enable-hvf argument.
If the OS is Darwin, it checks for presence of HVF in the system. The
patch also adds strings related to HVF in the file qemu-options.hx.
QEMU will only support the modern syntax style '-M accel=hvf' no enable
hvf; the legacy '-enable-hvf' will not be supported.
- fix styling issues
- add glue code to cpus.c
- move HVFX86EmulatorState field to CPUX86State, changing the
the emulation functions to have a parameter with signature 'CPUX86State *'
instead of 'CPUState *' so we don't have to get the 'env'.
Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-2-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-3-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-5-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-6-Sergio.G.DelReal@gmail.com>
Message-Id: <20170905035457.3753-7-Sergio.G.DelReal@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-09-13 17:05:09 +08:00
|
|
|
--disable-hvf) hvf="no"
|
|
|
|
;;
|
|
|
|
--enable-hvf) hvf="yes"
|
|
|
|
;;
|
2018-01-23 05:07:46 +08:00
|
|
|
--disable-whpx) whpx="no"
|
|
|
|
;;
|
|
|
|
--enable-whpx) whpx="yes"
|
|
|
|
;;
|
2011-10-19 13:07:18 +08:00
|
|
|
--disable-tcg-interpreter) tcg_interpreter="no"
|
|
|
|
;;
|
|
|
|
--enable-tcg-interpreter) tcg_interpreter="yes"
|
|
|
|
;;
|
2012-01-26 22:42:26 +08:00
|
|
|
--disable-cap-ng) cap_ng="no"
|
|
|
|
;;
|
|
|
|
--enable-cap-ng) cap_ng="yes"
|
|
|
|
;;
|
2017-07-03 22:59:07 +08:00
|
|
|
--disable-tcg) tcg="no"
|
|
|
|
;;
|
|
|
|
--enable-tcg) tcg="yes"
|
|
|
|
;;
|
2017-12-20 21:16:46 +08:00
|
|
|
--disable-malloc-trim) malloc_trim="no"
|
|
|
|
;;
|
|
|
|
--enable-malloc-trim) malloc_trim="yes"
|
|
|
|
;;
|
2010-03-24 17:26:51 +08:00
|
|
|
--disable-spice) spice="no"
|
|
|
|
;;
|
|
|
|
--enable-spice) spice="yes"
|
|
|
|
;;
|
2011-10-25 16:24:24 +08:00
|
|
|
--disable-libiscsi) libiscsi="no"
|
|
|
|
;;
|
|
|
|
--enable-libiscsi) libiscsi="yes"
|
|
|
|
;;
|
2014-02-03 17:26:13 +08:00
|
|
|
--disable-libnfs) libnfs="no"
|
|
|
|
;;
|
|
|
|
--enable-libnfs) libnfs="yes"
|
|
|
|
;;
|
2006-02-09 06:39:17 +08:00
|
|
|
--enable-profiler) profiler="yes"
|
|
|
|
;;
|
2011-11-11 02:40:07 +08:00
|
|
|
--disable-cocoa) cocoa="no"
|
|
|
|
;;
|
2008-06-29 03:13:06 +08:00
|
|
|
--enable-cocoa)
|
|
|
|
cocoa="yes" ;
|
2016-05-16 21:10:20 +08:00
|
|
|
audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
|
2005-10-31 02:58:22 +08:00
|
|
|
;;
|
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"
|
|
|
|
;;
|
2014-03-29 00:19:02 +08:00
|
|
|
--enable-stack-protector) stack_protector="yes"
|
|
|
|
;;
|
|
|
|
--disable-stack-protector) stack_protector="no"
|
|
|
|
;;
|
2008-02-11 00:33:14 +08:00
|
|
|
--disable-curses) curses="no"
|
|
|
|
;;
|
2009-08-13 00:20:30 +08:00
|
|
|
--enable-curses) curses="yes"
|
|
|
|
;;
|
2019-03-11 21:51:26 +08:00
|
|
|
--disable-iconv) iconv="no"
|
|
|
|
;;
|
|
|
|
--enable-iconv) iconv="yes"
|
|
|
|
;;
|
2009-05-11 23:41:42 +08:00
|
|
|
--disable-curl) curl="no"
|
|
|
|
;;
|
2009-08-13 00:29:47 +08:00
|
|
|
--enable-curl) curl="yes"
|
|
|
|
;;
|
2009-08-13 00:29:54 +08:00
|
|
|
--disable-fdt) fdt="no"
|
|
|
|
;;
|
|
|
|
--enable-fdt) fdt="yes"
|
|
|
|
;;
|
2009-08-20 22:58:35 +08:00
|
|
|
--disable-linux-aio) linux_aio="no"
|
|
|
|
;;
|
|
|
|
--enable-linux-aio) linux_aio="yes"
|
|
|
|
;;
|
2010-06-15 04:34:41 +08:00
|
|
|
--disable-attr) attr="no"
|
|
|
|
;;
|
|
|
|
--enable-attr) attr="yes"
|
|
|
|
;;
|
2018-02-16 17:05:23 +08:00
|
|
|
--disable-membarrier) membarrier="no"
|
|
|
|
;;
|
|
|
|
--enable-membarrier) membarrier="yes"
|
|
|
|
;;
|
2008-11-27 23:45:16 +08:00
|
|
|
--disable-blobs) blobs="no"
|
|
|
|
;;
|
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"
|
|
|
|
;;
|
2009-08-13 00:29:52 +08:00
|
|
|
--disable-docs) docs="no"
|
2009-05-14 21:25:04 +08:00
|
|
|
;;
|
2009-08-13 00:29:52 +08:00
|
|
|
--enable-docs) docs="yes"
|
2009-08-13 00:29:51 +08:00
|
|
|
;;
|
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"
|
|
|
|
;;
|
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
|
|
|
;;
|
2010-12-07 03:53:01 +08:00
|
|
|
--disable-rbd) rbd="no"
|
|
|
|
;;
|
|
|
|
--enable-rbd) rbd="yes"
|
|
|
|
;;
|
2012-01-25 01:42:40 +08:00
|
|
|
--disable-xfsctl) xfs="no"
|
|
|
|
;;
|
|
|
|
--enable-xfsctl) xfs="yes"
|
|
|
|
;;
|
2015-08-30 17:48:40 +08:00
|
|
|
--disable-smartcard) smartcard="no"
|
libcacard: initial commit
libcacard emulates a Common Access Card (CAC) which is a standard
for smartcards. It is used by the emulated ccid card introduced in
a following patch. Docs are available in docs/libcacard.txt
Signed-off-by: Alon Levy <alevy@redhat.com>
---
changes from v24->v25:
* Fix out of tree builds.
* Fix build with linux-user targets.
changes from v23->v24: (Jes Sorensen review 2)
* Makefile.target: use obj-$(CONFIG_*) +=
* remove unrequired includes, include qemu-common before qemu-thread
* required adding #define NO_NSPR_10_SUPPORT (harmless)
changes from v22->v23:
* configure fixes: (reported by Stefan Hajnoczi)
* test a = b, not a == b (second isn't portable)
* quote $source_path in case it contains spaces
- this doesn't really help since there are many other places
that need similar fixes, not introduced by this patch.
changes from v21->v22:
* fix configure to not link libcacard if nss not found
(reported by Stefan Hajnoczi)
* fix vscclient linkage with simpletrace backend
(reported by Stefan Hajnoczi)
* card_7816.c: add missing break in ERROR_DATA_NOT_FOUND
(reported by William van de Velde)
changes from v20->v21: (Jes Sorensen review)
* use qemu infrastructure: qemu-thread, qemu-common (qemu_malloc
and qemu_free), error_report
* assert instead of ASSERT
* cosmetic fixes
* use strpbrk and isspace
* add --disable-nss --enable-nss here, instead of in the final patch.
* split vscclient, passthru and docs to following patches.
changes from v19->v20:
* checkpatch.pl
changes from v15->v16:
Build:
* don't erase self with distclean
* fix make clean after make distclean
* Makefile: make vscclient link quiet
Behavioral:
* vcard_emul_nss: load coolkey in more situations
* vscclient:
* use hton,ntoh
* send init on connect, only start vevent thread on response
* read payload after header check, before type switch
* remove Reconnect
* update for vscard_common changes, empty Flush implementation
Style/Whitespace:
* fix wrong variable usage
* remove unused variable
* use only C style comments
* add copyright header
* fix tabulation
Signed-off-by: Alon Levy <alevy@redhat.com>
libcacard: fix out of tree builds
2010-11-28 22:36:38 +08:00
|
|
|
;;
|
2015-08-30 17:48:40 +08:00
|
|
|
--enable-smartcard) smartcard="yes"
|
libcacard: initial commit
libcacard emulates a Common Access Card (CAC) which is a standard
for smartcards. It is used by the emulated ccid card introduced in
a following patch. Docs are available in docs/libcacard.txt
Signed-off-by: Alon Levy <alevy@redhat.com>
---
changes from v24->v25:
* Fix out of tree builds.
* Fix build with linux-user targets.
changes from v23->v24: (Jes Sorensen review 2)
* Makefile.target: use obj-$(CONFIG_*) +=
* remove unrequired includes, include qemu-common before qemu-thread
* required adding #define NO_NSPR_10_SUPPORT (harmless)
changes from v22->v23:
* configure fixes: (reported by Stefan Hajnoczi)
* test a = b, not a == b (second isn't portable)
* quote $source_path in case it contains spaces
- this doesn't really help since there are many other places
that need similar fixes, not introduced by this patch.
changes from v21->v22:
* fix configure to not link libcacard if nss not found
(reported by Stefan Hajnoczi)
* fix vscclient linkage with simpletrace backend
(reported by Stefan Hajnoczi)
* card_7816.c: add missing break in ERROR_DATA_NOT_FOUND
(reported by William van de Velde)
changes from v20->v21: (Jes Sorensen review)
* use qemu infrastructure: qemu-thread, qemu-common (qemu_malloc
and qemu_free), error_report
* assert instead of ASSERT
* cosmetic fixes
* use strpbrk and isspace
* add --disable-nss --enable-nss here, instead of in the final patch.
* split vscclient, passthru and docs to following patches.
changes from v19->v20:
* checkpatch.pl
changes from v15->v16:
Build:
* don't erase self with distclean
* fix make clean after make distclean
* Makefile: make vscclient link quiet
Behavioral:
* vcard_emul_nss: load coolkey in more situations
* vscclient:
* use hton,ntoh
* send init on connect, only start vevent thread on response
* read payload after header check, before type switch
* remove Reconnect
* update for vscard_common changes, empty Flush implementation
Style/Whitespace:
* fix wrong variable usage
* remove unused variable
* use only C style comments
* add copyright header
* fix tabulation
Signed-off-by: Alon Levy <alevy@redhat.com>
libcacard: fix out of tree builds
2010-11-28 22:36:38 +08:00
|
|
|
;;
|
2012-11-30 23:02:11 +08:00
|
|
|
--disable-libusb) libusb="no"
|
|
|
|
;;
|
|
|
|
--enable-libusb) libusb="yes"
|
|
|
|
;;
|
2011-07-19 17:04:10 +08:00
|
|
|
--disable-usb-redir) usb_redir="no"
|
|
|
|
;;
|
|
|
|
--enable-usb-redir) usb_redir="yes"
|
|
|
|
;;
|
2011-07-26 17:30:40 +08:00
|
|
|
--disable-zlib-test) zlib="no"
|
|
|
|
;;
|
2014-04-29 14:21:16 +08:00
|
|
|
--disable-lzo) lzo="no"
|
|
|
|
;;
|
2014-02-18 14:11:30 +08:00
|
|
|
--enable-lzo) lzo="yes"
|
|
|
|
;;
|
2014-04-29 14:21:16 +08:00
|
|
|
--disable-snappy) snappy="no"
|
|
|
|
;;
|
2014-02-18 14:11:30 +08:00
|
|
|
--enable-snappy) snappy="yes"
|
|
|
|
;;
|
2015-01-07 01:48:14 +08:00
|
|
|
--disable-bzip2) bzip2="no"
|
|
|
|
;;
|
|
|
|
--enable-bzip2) bzip2="yes"
|
|
|
|
;;
|
2018-11-05 23:08:04 +08:00
|
|
|
--enable-lzfse) lzfse="yes"
|
|
|
|
;;
|
|
|
|
--disable-lzfse) lzfse="no"
|
|
|
|
;;
|
2011-08-02 03:52:57 +08:00
|
|
|
--enable-guest-agent) guest_agent="yes"
|
|
|
|
;;
|
|
|
|
--disable-guest-agent) guest_agent="no"
|
|
|
|
;;
|
2015-05-06 19:57:40 +08:00
|
|
|
--enable-guest-agent-msi) guest_agent_msi="yes"
|
|
|
|
;;
|
|
|
|
--disable-guest-agent-msi) guest_agent_msi="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"
|
|
|
|
;;
|
2012-08-15 05:44:05 +08:00
|
|
|
--enable-seccomp) seccomp="yes"
|
|
|
|
;;
|
|
|
|
--disable-seccomp) seccomp="no"
|
|
|
|
;;
|
2012-09-24 17:12:45 +08:00
|
|
|
--disable-glusterfs) glusterfs="no"
|
|
|
|
;;
|
2018-10-20 04:38:59 +08:00
|
|
|
--disable-avx2) avx2_opt="no"
|
|
|
|
;;
|
|
|
|
--enable-avx2) avx2_opt="yes"
|
|
|
|
;;
|
2012-09-24 17:12:45 +08:00
|
|
|
--enable-glusterfs) glusterfs="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
|
|
|
|
;;
|
2013-02-20 21:43:20 +08:00
|
|
|
--disable-gtk) gtk="no"
|
|
|
|
;;
|
|
|
|
--enable-gtk) gtk="yes"
|
|
|
|
;;
|
2016-06-06 17:05:06 +08:00
|
|
|
--tls-priority=*) tls_priority="$optarg"
|
|
|
|
;;
|
2015-07-02 01:10:29 +08:00
|
|
|
--disable-gnutls) gnutls="no"
|
|
|
|
;;
|
|
|
|
--enable-gnutls) gnutls="yes"
|
|
|
|
;;
|
2015-10-16 23:36:53 +08:00
|
|
|
--disable-nettle) nettle="no"
|
|
|
|
;;
|
|
|
|
--enable-nettle) nettle="yes"
|
|
|
|
;;
|
|
|
|
--disable-gcrypt) gcrypt="no"
|
|
|
|
;;
|
|
|
|
--enable-gcrypt) gcrypt="yes"
|
|
|
|
;;
|
authz: add QAuthZPAM object type for authorizing using PAM
Add an authorization backend that talks to PAM to check whether the user
identity is allowed. This only uses the PAM account validation facility,
which is essentially just a check to see if the provided username is permitted
access. It doesn't use the authentication or session parts of PAM, since
that's dealt with by the relevant part of QEMU (eg VNC server).
Consider starting QEMU with a VNC server and telling it to use TLS with
x509 client certificates and configuring it to use an PAM to validate
the x509 distinguished name. In this example we're telling it to use PAM
for the QAuthZ impl with a service name of "qemu-vnc"
$ qemu-system-x86_64 \
-object tls-creds-x509,id=tls0,dir=/home/berrange/security/qemutls,\
endpoint=server,verify-peer=yes \
-object authz-pam,id=authz0,service=qemu-vnc \
-vnc :1,tls-creds=tls0,tls-authz=authz0
This requires an /etc/pam/qemu-vnc file to be created with the auth
rules. A very simple file based whitelist can be setup using
$ cat > /etc/pam/qemu-vnc <<EOF
account requisite pam_listfile.so item=user sense=allow file=/etc/qemu/vnc.allow
EOF
The /etc/qemu/vnc.allow file simply contains one username per line. Any
username not in the file is denied. The usernames in this example are
the x509 distinguished name from the client's x509 cert.
$ cat > /etc/qemu/vnc.allow <<EOF
CN=laptop.berrange.com,O=Berrange Home,L=London,ST=London,C=GB
EOF
More interesting would be to configure PAM to use an LDAP backend, so
that the QEMU authorization check data can be centralized instead of
requiring each compute host to have file maintained.
The main limitation with this PAM module is that the rules apply to all
QEMU instances on the host. Setting up different rules per VM, would
require creating a separate PAM service name & config file for every
guest. An alternative approach for the future might be to not pass in
the plain username to PAM, but instead combine the VM name or UUID with
the username. This requires further consideration though.
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-07-27 21:13:56 +08:00
|
|
|
--disable-auth-pam) auth_pam="no"
|
|
|
|
;;
|
|
|
|
--enable-auth-pam) auth_pam="yes"
|
|
|
|
;;
|
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-02-19 14:04:34 +08:00
|
|
|
--disable-vte) vte="no"
|
|
|
|
;;
|
|
|
|
--enable-vte) vte="yes"
|
|
|
|
;;
|
2014-07-11 18:51:43 +08:00
|
|
|
--disable-virglrenderer) virglrenderer="no"
|
|
|
|
;;
|
|
|
|
--enable-virglrenderer) virglrenderer="yes"
|
|
|
|
;;
|
2014-06-17 03:32:47 +08:00
|
|
|
--disable-tpm) tpm="no"
|
|
|
|
;;
|
2013-02-28 01:47:52 +08:00
|
|
|
--enable-tpm) tpm="yes"
|
|
|
|
;;
|
2019-06-21 04:08:40 +08:00
|
|
|
--disable-libssh) libssh="no"
|
2013-04-09 22:30:53 +08:00
|
|
|
;;
|
2019-06-21 04:08:40 +08:00
|
|
|
--enable-libssh) libssh="yes"
|
2013-04-09 22:30:53 +08:00
|
|
|
;;
|
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"
|
|
|
|
;;
|
2018-01-12 17:01:19 +08:00
|
|
|
--disable-libxml2) libxml2="no"
|
|
|
|
;;
|
|
|
|
--enable-libxml2) libxml2="yes"
|
|
|
|
;;
|
2015-03-26 11:03:12 +08:00
|
|
|
--disable-tcmalloc) tcmalloc="no"
|
|
|
|
;;
|
|
|
|
--enable-tcmalloc) tcmalloc="yes"
|
|
|
|
;;
|
2015-06-19 18:56:58 +08:00
|
|
|
--disable-jemalloc) jemalloc="no"
|
|
|
|
;;
|
|
|
|
--enable-jemalloc) jemalloc="yes"
|
|
|
|
;;
|
2016-07-27 15:01:48 +08:00
|
|
|
--disable-replication) replication="no"
|
|
|
|
;;
|
|
|
|
--enable-replication) replication="yes"
|
|
|
|
;;
|
block/vxhs.c: Add support for a new block device type called "vxhs"
Source code for the qnio library that this code loads can be downloaded from:
https://github.com/VeritasHyperScale/libqnio.git
Sample command line using JSON syntax:
./x86_64-softmmu/qemu-system-x86_64 -name instance-00000008 -S -vnc 0.0.0.0:0
-k en-us -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
-msg timestamp=on
'json:{"driver":"vxhs","vdisk-id":"c3e9095a-a5ee-4dce-afeb-2a59fb387410",
"server":{"host":"172.172.17.4","port":"9999"}}'
Sample command line using URI syntax:
qemu-img convert -f raw -O raw -n
/var/lib/nova/instances/_base/0c5eacd5ebea5ed914b6a3e7b18f1ce734c386ad
vxhs://192.168.0.1:9999/c6718f6b-0401-441d-a8c3-1f0064d75ee0
Sample command line using TLS credentials (run in secure mode):
./qemu-io --object
tls-creds-x509,id=tls0,dir=/etc/pki/qemu/vxhs,endpoint=client -c 'read
-v 66000 2.5k' 'json:{"server.host": "127.0.0.1", "server.port": "9999",
"vdisk-id": "/test.raw", "driver": "vxhs", "tls-creds":"tls0"}'
[Jeff: Modified trace-events with the correct string formatting]
Signed-off-by: Ashish Mittal <Ashish.Mittal@veritas.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Signed-off-by: Jeff Cody <jcody@redhat.com>
Message-id: 1491277689-24949-2-git-send-email-Ashish.Mittal@veritas.com
2017-04-04 11:48:08 +08:00
|
|
|
--disable-vxhs) vxhs="no"
|
|
|
|
;;
|
|
|
|
--enable-vxhs) vxhs="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"
|
|
|
|
;;
|
|
|
|
--disable-sheepdog) sheepdog="no"
|
|
|
|
;;
|
|
|
|
--enable-sheepdog) sheepdog="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"
|
|
|
|
;;
|
|
|
|
--disable-vhost-kernel) vhost_kernel="no"
|
|
|
|
;;
|
|
|
|
--enable-vhost-kernel) vhost_kernel="yes"
|
2017-08-03 17:07:46 +08:00
|
|
|
;;
|
2017-09-15 00:41:12 +08:00
|
|
|
--disable-capstone) capstone="no"
|
|
|
|
;;
|
|
|
|
--enable-capstone) capstone="yes"
|
|
|
|
;;
|
2017-09-29 00:01:23 +08:00
|
|
|
--enable-capstone=git) capstone="git"
|
|
|
|
;;
|
|
|
|
--enable-capstone=system) capstone="system"
|
|
|
|
;;
|
2017-10-20 22:02:43 +08:00
|
|
|
--with-git=*) git="$optarg"
|
|
|
|
;;
|
2017-10-26 20:52:26 +08:00
|
|
|
--enable-git-update) git_update=yes
|
|
|
|
;;
|
|
|
|
--disable-git-update) git_update=no
|
|
|
|
;;
|
2018-06-13 20:23:08 +08:00
|
|
|
--enable-debug-mutex) debug_mutex=yes
|
|
|
|
;;
|
|
|
|
--disable-debug-mutex) debug_mutex=no
|
|
|
|
;;
|
2018-07-18 15:47:59 +08:00
|
|
|
--enable-libpmem) libpmem=yes
|
|
|
|
;;
|
|
|
|
--disable-libpmem) libpmem=no
|
|
|
|
;;
|
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
|
|
|
|
|
2008-01-31 19:32:10 +08:00
|
|
|
case "$cpu" in
|
2013-08-29 06:48:21 +08:00
|
|
|
ppc)
|
|
|
|
CPU_CFLAGS="-m32"
|
|
|
|
LDFLAGS="-m32 $LDFLAGS"
|
2019-05-02 06:38:18 +08:00
|
|
|
cross_cc_ppc=$cc
|
|
|
|
cross_cc_cflags_ppc="$CPU_CFLAGS"
|
2013-08-29 06:48:21 +08:00
|
|
|
;;
|
|
|
|
ppc64)
|
|
|
|
CPU_CFLAGS="-m64"
|
|
|
|
LDFLAGS="-m64 $LDFLAGS"
|
2018-04-13 23:15:07 +08:00
|
|
|
cross_cc_ppc64=$cc
|
2019-05-02 06:38:19 +08:00
|
|
|
cross_cc_cflags_ppc64="$CPU_CFLAGS"
|
2013-08-29 06:48:21 +08:00
|
|
|
;;
|
2012-09-22 01:34:21 +08:00
|
|
|
sparc)
|
2017-04-27 01:39:08 +08:00
|
|
|
CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
|
|
|
|
LDFLAGS="-m32 -mv8plus $LDFLAGS"
|
2018-04-13 23:15:07 +08:00
|
|
|
cross_cc_sparc=$cc
|
2019-05-02 06:38:19 +08:00
|
|
|
cross_cc_cflags_sparc="$CPU_CFLAGS"
|
2007-04-17 02:27:06 +08:00
|
|
|
;;
|
2009-08-03 20:46:11 +08:00
|
|
|
sparc64)
|
2013-04-18 12:46:14 +08:00
|
|
|
CPU_CFLAGS="-m64 -mcpu=ultrasparc"
|
2017-04-27 01:39:08 +08:00
|
|
|
LDFLAGS="-m64 $LDFLAGS"
|
2018-04-13 23:15:07 +08:00
|
|
|
cross_cc_sparc64=$cc
|
2019-05-02 06:38:19 +08:00
|
|
|
cross_cc_cflags_sparc64="$CPU_CFLAGS"
|
2007-04-17 02:27:06 +08:00
|
|
|
;;
|
2007-11-19 05:22:10 +08:00
|
|
|
s390)
|
2014-04-01 01:40:49 +08:00
|
|
|
CPU_CFLAGS="-m31"
|
2010-06-05 03:14:09 +08:00
|
|
|
LDFLAGS="-m31 $LDFLAGS"
|
2018-04-13 23:15:07 +08:00
|
|
|
cross_cc_s390=$cc
|
2019-05-02 06:38:19 +08:00
|
|
|
cross_cc_cflags_s390="$CPU_CFLAGS"
|
2010-06-05 03:14:09 +08:00
|
|
|
;;
|
|
|
|
s390x)
|
2014-04-01 01:40:49 +08:00
|
|
|
CPU_CFLAGS="-m64"
|
2010-06-05 03:14:09 +08:00
|
|
|
LDFLAGS="-m64 $LDFLAGS"
|
2018-04-13 23:15:07 +08:00
|
|
|
cross_cc_s390x=$cc
|
2019-05-02 06:38:19 +08:00
|
|
|
cross_cc_cflags_s390x="$CPU_CFLAGS"
|
2007-11-19 05:22:10 +08:00
|
|
|
;;
|
2008-01-31 19:32:10 +08:00
|
|
|
i386)
|
2013-04-18 12:46:14 +08:00
|
|
|
CPU_CFLAGS="-m32"
|
2009-08-03 20:46:01 +08:00
|
|
|
LDFLAGS="-m32 $LDFLAGS"
|
2018-04-10 19:19:40 +08:00
|
|
|
cross_cc_i386=$cc
|
2019-05-02 06:38:19 +08:00
|
|
|
cross_cc_cflags_i386="$CPU_CFLAGS"
|
2008-01-31 19:32:10 +08:00
|
|
|
;;
|
|
|
|
x86_64)
|
2016-06-30 12:10:59 +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-08-03 20:46:01 +08:00
|
|
|
LDFLAGS="-m64 $LDFLAGS"
|
2018-04-10 19:19:40 +08:00
|
|
|
cross_cc_x86_64=$cc
|
2019-05-02 06:38:19 +08:00
|
|
|
cross_cc_cflags_x86_64="$CPU_CFLAGS"
|
2011-04-12 16:27:03 +08:00
|
|
|
;;
|
2013-08-21 03:20:05 +08:00
|
|
|
x32)
|
|
|
|
CPU_CFLAGS="-mx32"
|
|
|
|
LDFLAGS="-mx32 $LDFLAGS"
|
2018-04-10 19:19:40 +08:00
|
|
|
cross_cc_i386=$cc
|
2019-05-02 06:38:19 +08:00
|
|
|
cross_cc_cflags_i386="$CPU_CFLAGS"
|
2013-08-21 03:20:05 +08:00
|
|
|
;;
|
2012-10-09 11:16:49 +08:00
|
|
|
# No special flags required for other host CPUs
|
2007-04-17 02:27:06 +08:00
|
|
|
esac
|
|
|
|
|
2013-04-18 12:46:14 +08:00
|
|
|
QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
|
|
|
|
|
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=""
|
|
|
|
|
2013-05-20 23:16:15 +08:00
|
|
|
mak_wilds=""
|
|
|
|
|
|
|
|
if [ "$softmmu" = "yes" ]; then
|
|
|
|
mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
|
2011-05-03 21:50:13 +08:00
|
|
|
fi
|
2013-05-20 23:16:15 +08:00
|
|
|
if [ "$linux_user" = "yes" ]; then
|
|
|
|
mak_wilds="${mak_wilds} $source_path/default-configs/*-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
|
|
|
|
mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
|
2011-05-03 21:50:13 +08:00
|
|
|
fi
|
|
|
|
|
2019-03-19 19:59:12 +08:00
|
|
|
if test -z "$target_list_exclude"; then
|
|
|
|
for config in $mak_wilds; do
|
|
|
|
default_target_list="${default_target_list} $(basename "$config" .mak)"
|
|
|
|
done
|
|
|
|
else
|
|
|
|
exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
|
|
|
|
for config in $mak_wilds; do
|
|
|
|
target="$(basename "$config" .mak)"
|
|
|
|
exclude="no"
|
|
|
|
for excl in $exclude_list; do
|
|
|
|
if test "$excl" = "$target"; then
|
|
|
|
exclude="yes"
|
|
|
|
break;
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
if test "$exclude" = "no"; then
|
|
|
|
default_target_list="${default_target_list} $target"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
2013-05-20 23:16:15 +08:00
|
|
|
|
2017-03-28 21:44:18 +08:00
|
|
|
# Enumerate public trace backends for --help output
|
2017-04-26 21:36:07 +08:00
|
|
|
trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
|
2017-03-28 21:44:18 +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]
|
|
|
|
--target-list=LIST set target list (default: build everything)
|
|
|
|
$(echo Available targets: $default_target_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):
|
|
|
|
--cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
|
|
|
|
--cc=CC use C compiler CC [$cc]
|
|
|
|
--iasl=IASL use ACPI compiler IASL [$iasl]
|
|
|
|
--host-cc=CC use C compiler CC [$host_cc] for code run at
|
|
|
|
build time
|
|
|
|
--cxx=CXX use C++ compiler CXX [$cxx]
|
|
|
|
--objcc=OBJCC use Objective-C compiler OBJCC [$objcc]
|
|
|
|
--extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
|
2017-06-06 21:07:47 +08:00
|
|
|
--extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_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]
|
|
|
|
--install=INSTALL use specified install [$install]
|
|
|
|
--python=PYTHON use specified python [$python]
|
|
|
|
--smbd=SMBD use specified smbd [$smbd]
|
2018-03-27 23:09:30 +08:00
|
|
|
--with-git=GIT use specified git [$git]
|
2013-12-19 05:09:39 +08:00
|
|
|
--static enable static build [$static]
|
|
|
|
--mandir=PATH install man pages in PATH
|
|
|
|
--datadir=PATH install firmware in PATH$confsuffix
|
|
|
|
--docdir=PATH install documentation in PATH$confsuffix
|
|
|
|
--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
|
2013-12-19 05:09:39 +08:00
|
|
|
--sysconfdir=PATH install config in PATH$confsuffix
|
|
|
|
--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
|
2014-02-10 14:48:57 +08:00
|
|
|
--with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
|
2018-03-27 23:09:30 +08:00
|
|
|
--with-pkgversion=VERS use specified string as sub-version of the package
|
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
|
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
|
2013-12-19 05:09:39 +08:00
|
|
|
--audio-drv-list=LIST set audio drivers list:
|
|
|
|
Available drivers: $audio_possible_drivers
|
|
|
|
--block-drv-whitelist=L Same as --block-drv-rw-whitelist=L
|
|
|
|
--block-drv-rw-whitelist=L
|
|
|
|
set block driver read-write whitelist
|
|
|
|
(affects only QEMU, not qemu-img)
|
|
|
|
--block-drv-ro-whitelist=L
|
|
|
|
set block driver read-only whitelist
|
|
|
|
(affects only QEMU, not qemu-img)
|
2014-05-27 21:02:14 +08:00
|
|
|
--enable-trace-backends=B Set trace backend
|
2017-03-28 21:44:18 +08:00
|
|
|
Available backends: $trace_backend_list
|
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
|
|
|
--disable-slirp disable SLIRP userspace network connectivity
|
|
|
|
--enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
|
2017-12-20 21:16:46 +08:00
|
|
|
--enable-malloc-trim enable libc malloc_trim() for memory optimization
|
2015-06-18 03:19:26 +08:00
|
|
|
--oss-lib path to OSS library
|
|
|
|
--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
|
|
|
|
--gcov=GCOV use specified gcov [$gcov_tool]
|
2015-06-18 03:19:26 +08:00
|
|
|
--disable-blobs disable installing provided firmware blobs
|
|
|
|
--with-vss-sdk=SDK-path enable Windows VSS support in QEMU Guest Agent
|
|
|
|
--with-win-sdk=SDK-path path to Windows Platform SDK (to build VSS .tlb)
|
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
|
2015-06-18 03:19:26 +08:00
|
|
|
|
|
|
|
Optional features, enabled with --enable-FEATURE and
|
|
|
|
disabled with --disable-FEATURE, default is enabled if available:
|
|
|
|
|
|
|
|
system all system emulation targets
|
|
|
|
user supported user emulation targets
|
|
|
|
linux-user all linux usermode emulation targets
|
|
|
|
bsd-user all BSD usermode emulation targets
|
|
|
|
docs build documentation
|
|
|
|
guest-agent build the QEMU Guest Agent
|
|
|
|
guest-agent-msi build guest agent Windows MSI installation package
|
|
|
|
pie Position Independent Executables
|
|
|
|
modules modules support
|
|
|
|
debug-tcg TCG debugging (default is disabled)
|
|
|
|
debug-info debugging information
|
|
|
|
sparse sparse checker
|
|
|
|
|
2015-07-02 01:10:29 +08:00
|
|
|
gnutls GNUTLS cryptography support
|
2015-10-16 23:36:53 +08:00
|
|
|
nettle nettle cryptography support
|
|
|
|
gcrypt libgcrypt cryptography support
|
authz: add QAuthZPAM object type for authorizing using PAM
Add an authorization backend that talks to PAM to check whether the user
identity is allowed. This only uses the PAM account validation facility,
which is essentially just a check to see if the provided username is permitted
access. It doesn't use the authentication or session parts of PAM, since
that's dealt with by the relevant part of QEMU (eg VNC server).
Consider starting QEMU with a VNC server and telling it to use TLS with
x509 client certificates and configuring it to use an PAM to validate
the x509 distinguished name. In this example we're telling it to use PAM
for the QAuthZ impl with a service name of "qemu-vnc"
$ qemu-system-x86_64 \
-object tls-creds-x509,id=tls0,dir=/home/berrange/security/qemutls,\
endpoint=server,verify-peer=yes \
-object authz-pam,id=authz0,service=qemu-vnc \
-vnc :1,tls-creds=tls0,tls-authz=authz0
This requires an /etc/pam/qemu-vnc file to be created with the auth
rules. A very simple file based whitelist can be setup using
$ cat > /etc/pam/qemu-vnc <<EOF
account requisite pam_listfile.so item=user sense=allow file=/etc/qemu/vnc.allow
EOF
The /etc/qemu/vnc.allow file simply contains one username per line. Any
username not in the file is denied. The usernames in this example are
the x509 distinguished name from the client's x509 cert.
$ cat > /etc/qemu/vnc.allow <<EOF
CN=laptop.berrange.com,O=Berrange Home,L=London,ST=London,C=GB
EOF
More interesting would be to configure PAM to use an LDAP backend, so
that the QEMU authorization check data can be centralized instead of
requiring each compute host to have file maintained.
The main limitation with this PAM module is that the rules apply to all
QEMU instances on the host. Setting up different rules per VM, would
require creating a separate PAM service name & config file for every
guest. An alternative approach for the future might be to not pass in
the plain username to PAM, but instead combine the VM name or UUID with
the username. This requires further consideration though.
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-07-27 21:13:56 +08:00
|
|
|
auth-pam PAM access control
|
2015-06-18 03:19:26 +08:00
|
|
|
sdl SDL UI
|
2019-05-18 02:32:46 +08:00
|
|
|
sdl-image SDL Image support for icons
|
2015-06-18 03:19:26 +08:00
|
|
|
gtk gtk UI
|
|
|
|
vte vte support for the gtk UI
|
|
|
|
curses curses UI
|
2019-03-11 21:51:26 +08:00
|
|
|
iconv font glyph conversion support
|
2015-06-18 03:19:26 +08:00
|
|
|
vnc VNC UI support
|
|
|
|
vnc-sasl SASL encryption for VNC server
|
|
|
|
vnc-jpeg JPEG lossy compression for VNC server
|
|
|
|
vnc-png PNG compression for VNC server
|
|
|
|
cocoa Cocoa UI (Mac OS X only)
|
|
|
|
virtfs VirtFS
|
2017-08-22 12:50:55 +08:00
|
|
|
mpath Multipath persistent reservation passthrough
|
2015-06-18 03:19:26 +08:00
|
|
|
xen xen backend driver support
|
2018-05-04 17:17:56 +08:00
|
|
|
xen-pci-passthrough PCI passthrough support for Xen
|
2015-06-18 03:19:26 +08:00
|
|
|
brlapi BrlAPI (Braile)
|
|
|
|
curl curl connectivity
|
2018-02-16 17:05:23 +08:00
|
|
|
membarrier membarrier system call (for Linux 4.14+ or Windows)
|
2015-06-18 03:19:26 +08:00
|
|
|
fdt fdt device tree
|
|
|
|
bluez bluez stack connectivity
|
|
|
|
kvm KVM acceleration support
|
2017-01-10 18:59:57 +08:00
|
|
|
hax HAX acceleration support
|
i386: hvf: add code base from Google's QEMU repository
This file begins tracking the files that will be the code base for HVF
support in QEMU. This code base is part of Google's QEMU version of
their Android emulator, and can be found at
https://android.googlesource.com/platform/external/qemu/+/emu-master-dev
This code is based on Veertu Inc's vdhh (Veertu Desktop Hosted
Hypervisor), found at https://github.com/veertuinc/vdhh. Everything is
appropriately licensed under GPL v2-or-later, except for the code inside
x86_task.c and x86_task.h, which, deriving from KVM (the Linux kernel),
is licensed GPL v2-only.
This code base already implements a very great deal of functionality,
although Google's version removed from Vertuu's the support for APIC
page and hyperv-related stuff. According to the Android Emulator Release
Notes, Revision 26.1.3 (August 2017), "Hypervisor.framework is now
enabled by default on macOS for 32-bit x86 images to improve performance
and macOS compatibility", although we better use with caution for, as the
same Revision warns us, "If you experience issues with it specifically,
please file a bug report...". The code hasn't seen much update in the
last 5 months, so I think that we can further develop the code with
occasional visiting Google's repository to see if there has been any
update.
On top of Google's code, the following changes were made:
- add code to the configure script to support the --enable-hvf argument.
If the OS is Darwin, it checks for presence of HVF in the system. The
patch also adds strings related to HVF in the file qemu-options.hx.
QEMU will only support the modern syntax style '-M accel=hvf' no enable
hvf; the legacy '-enable-hvf' will not be supported.
- fix styling issues
- add glue code to cpus.c
- move HVFX86EmulatorState field to CPUX86State, changing the
the emulation functions to have a parameter with signature 'CPUX86State *'
instead of 'CPUState *' so we don't have to get the 'env'.
Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-2-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-3-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-5-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-6-Sergio.G.DelReal@gmail.com>
Message-Id: <20170905035457.3753-7-Sergio.G.DelReal@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-09-13 17:05:09 +08:00
|
|
|
hvf Hypervisor.framework acceleration support
|
2018-01-23 05:07:46 +08:00
|
|
|
whpx Windows Hypervisor Platform acceleration support
|
2018-08-16 23:16:37 +08:00
|
|
|
rdma Enable RDMA-based migration
|
|
|
|
pvrdma Enable PVRDMA support
|
2015-06-18 03:19:26 +08:00
|
|
|
vde support for vde network
|
|
|
|
netmap support for netmap network
|
|
|
|
linux-aio Linux AIO support
|
|
|
|
cap-ng libcap-ng support
|
|
|
|
attr attr and xattr 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
|
2015-06-18 03:19:26 +08:00
|
|
|
spice spice
|
|
|
|
rbd rados block device (rbd)
|
|
|
|
libiscsi iscsi support
|
|
|
|
libnfs nfs support
|
2015-08-30 17:48:40 +08:00
|
|
|
smartcard smartcard support (libcacard)
|
2015-06-18 03:19:26 +08:00
|
|
|
libusb libusb (for usb passthrough)
|
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
|
|
|
usb-redir usb network redirection support
|
|
|
|
lzo support of lzo compression library
|
|
|
|
snappy support of snappy compression library
|
|
|
|
bzip2 support of bzip2 compression library
|
|
|
|
(for reading bzip2-compressed dmg images)
|
2018-11-05 23:08:04 +08:00
|
|
|
lzfse support of lzfse compression library
|
|
|
|
(for reading lzfse-compressed dmg images)
|
2015-06-18 03:19:26 +08:00
|
|
|
seccomp seccomp support
|
|
|
|
coroutine-pool coroutine freelist (better performance)
|
|
|
|
glusterfs GlusterFS backend
|
|
|
|
tpm TPM support
|
2019-06-21 04:08:40 +08:00
|
|
|
libssh ssh block device support
|
2015-06-18 03:19:26 +08:00
|
|
|
numa libnuma support
|
2018-01-12 17:01:19 +08:00
|
|
|
libxml2 for Parallels image format
|
2015-06-18 03:19:26 +08:00
|
|
|
tcmalloc tcmalloc support
|
2015-06-19 18:56:58 +08:00
|
|
|
jemalloc jemalloc support
|
2018-10-20 04:38:59 +08:00
|
|
|
avx2 AVX2 optimization support
|
2016-07-27 15:01:48 +08:00
|
|
|
replication replication support
|
2017-03-10 18:14:05 +08:00
|
|
|
opengl opengl support
|
|
|
|
virglrenderer virgl rendering 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
|
block/vxhs.c: Add support for a new block device type called "vxhs"
Source code for the qnio library that this code loads can be downloaded from:
https://github.com/VeritasHyperScale/libqnio.git
Sample command line using JSON syntax:
./x86_64-softmmu/qemu-system-x86_64 -name instance-00000008 -S -vnc 0.0.0.0:0
-k en-us -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
-msg timestamp=on
'json:{"driver":"vxhs","vdisk-id":"c3e9095a-a5ee-4dce-afeb-2a59fb387410",
"server":{"host":"172.172.17.4","port":"9999"}}'
Sample command line using URI syntax:
qemu-img convert -f raw -O raw -n
/var/lib/nova/instances/_base/0c5eacd5ebea5ed914b6a3e7b18f1ce734c386ad
vxhs://192.168.0.1:9999/c6718f6b-0401-441d-a8c3-1f0064d75ee0
Sample command line using TLS credentials (run in secure mode):
./qemu-io --object
tls-creds-x509,id=tls0,dir=/etc/pki/qemu/vxhs,endpoint=client -c 'read
-v 66000 2.5k' 'json:{"server.host": "127.0.0.1", "server.port": "9999",
"vdisk-id": "/test.raw", "driver": "vxhs", "tls-creds":"tls0"}'
[Jeff: Modified trace-events with the correct string formatting]
Signed-off-by: Ashish Mittal <Ashish.Mittal@veritas.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Signed-off-by: Jeff Cody <jcody@redhat.com>
Message-id: 1491277689-24949-2-git-send-email-Ashish.Mittal@veritas.com
2017-04-04 11:48:08 +08:00
|
|
|
vxhs Veritas HyperScale vDisk backend support
|
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
|
|
|
|
sheepdog sheepdog block driver support
|
2017-07-15 02:04:05 +08:00
|
|
|
crypto-afalg Linux AF_ALG crypto backend driver
|
2017-09-15 00:41:12 +08:00
|
|
|
capstone capstone disassembler support
|
2018-06-13 20:23:08 +08:00
|
|
|
debug-mutex mutex debugging support
|
2018-07-18 15:47:59 +08:00
|
|
|
libpmem libpmem support
|
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
|
|
|
|
|
|
|
|
# Note that if the Python conditional here evaluates True we will exit
|
|
|
|
# with status 1 which is a shell 'false' value.
|
2018-06-08 22:30:26 +08:00
|
|
|
if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
|
|
|
|
error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 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
|
|
|
|
python_version=$($python -V 2>&1 | sed -e 's/Python\ //')
|
|
|
|
|
2017-03-28 21:44:18 +08:00
|
|
|
# Suppress writing compiled files
|
|
|
|
python="$python -B"
|
|
|
|
|
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
|
|
|
|
|
2011-12-24 21:07:25 +08:00
|
|
|
# Now we have handled --enable-tcg-interpreter and know we're not just
|
|
|
|
# printing the help message, bail out if the host CPU isn't supported.
|
|
|
|
if test "$ARCH" = "unknown"; then
|
|
|
|
if test "$tcg_interpreter" = "yes" ; then
|
|
|
|
echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
|
|
|
|
else
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
|
2011-12-24 21:07:25 +08:00
|
|
|
fi
|
|
|
|
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
|
2019-02-28 12:35:03 +08:00
|
|
|
if test -e "$source_path/.git" && \
|
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
|
|
|
|
|
2017-03-28 21:01:52 +08:00
|
|
|
if test "$bogus_os" = "yes"; then
|
|
|
|
# Now that we know that we're not printing the help and that
|
|
|
|
# the compiler works (so the results of the check_defines we used
|
|
|
|
# to identify the OS are reliable), if we didn't recognize the
|
|
|
|
# host OS we should stop now.
|
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__
|
|
|
|
# if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
|
|
|
|
# error You need at least XCode Clang v5.1 to compile QEMU
|
|
|
|
# endif
|
|
|
|
# else
|
|
|
|
# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
|
|
|
|
# error You need at least Clang v3.4 to compile QEMU
|
|
|
|
# endif
|
|
|
|
# endif
|
|
|
|
#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
|
|
|
|
# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
|
|
|
|
# error You need at least GCC v4.8 to compile QEMU
|
|
|
|
# endif
|
|
|
|
#else
|
|
|
|
# error You either need GCC or Clang to compiler QEMU
|
|
|
|
#endif
|
|
|
|
int main (void) { return 0; }
|
|
|
|
EOF
|
|
|
|
if ! compile_prog "" "" ; then
|
|
|
|
error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
|
|
|
|
fi
|
|
|
|
|
2010-12-23 18:43:52 +08:00
|
|
|
gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
|
|
|
|
gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
|
2017-02-06 19:29:53 +08:00
|
|
|
gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
|
2016-08-10 03:02:26 +08:00
|
|
|
gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
|
2017-07-11 16:08:55 +08:00
|
|
|
gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
|
2019-04-24 19:05:25 +08:00
|
|
|
gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
|
2012-07-18 22:10:18 +08:00
|
|
|
# Note that we do not add -Werror to gcc_flags here, 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.
|
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
|
|
|
|
if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
|
|
|
|
compile_prog "-Werror $flag" ""; then
|
2014-03-29 00:19:02 +08:00
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $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
|
|
|
|
|
2018-12-03 18:41:38 +08:00
|
|
|
# Static linking is not possible with 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
|
2011-11-16 02:12:17 +08:00
|
|
|
if test "$pie" = "yes" ; then
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "static and pie are mutually incompatible"
|
2011-11-16 02:12:17 +08:00
|
|
|
else
|
|
|
|
pie="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-04-29 19:09:02 +08:00
|
|
|
# Unconditional check for compiler __thread support
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
static __thread int tls_var;
|
|
|
|
int main(void) { return tls_var; }
|
|
|
|
EOF
|
|
|
|
|
|
|
|
if ! compile_prog "-Werror" "" ; then
|
|
|
|
error_exit "Your compiler does not support the __thread specifier for " \
|
|
|
|
"Thread-Local Storage (TLS). Please upgrade to a version that does."
|
|
|
|
fi
|
|
|
|
|
2011-11-16 02:12:17 +08:00
|
|
|
if test "$pie" = ""; then
|
|
|
|
case "$cpu-$targetos" in
|
2013-08-21 03:20:05 +08:00
|
|
|
i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
|
2011-11-16 02:12:17 +08:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
pie="no"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$pie" != "no" ; then
|
|
|
|
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
|
|
|
|
if compile_prog "-fPIE -DPIE" "-pie"; then
|
|
|
|
QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
|
|
|
|
LDFLAGS="-pie $LDFLAGS"
|
|
|
|
pie="yes"
|
|
|
|
if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
|
|
|
|
LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
if test "$pie" = "yes"; then
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "PIE not available due to missing toolchain support"
|
2011-11-16 02:12:17 +08:00
|
|
|
else
|
|
|
|
echo "Disabling PIE due to missing toolchain support"
|
|
|
|
pie="no"
|
|
|
|
fi
|
|
|
|
fi
|
2013-12-11 08:49:08 +08:00
|
|
|
|
2015-03-26 06:57:36 +08:00
|
|
|
if compile_prog "-Werror -fno-pie" "-nopie"; then
|
2013-12-11 08:49:08 +08:00
|
|
|
CFLAGS_NOPIE="-fno-pie"
|
|
|
|
LDFLAGS_NOPIE="-nopie"
|
|
|
|
fi
|
2011-11-16 02:12:17 +08:00
|
|
|
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
|
|
|
|
|
|
|
|
#########################################
|
2006-04-26 06:36:06 +08:00
|
|
|
# Solaris specific configure tool chain decisions
|
2013-04-17 22:26:47 +08:00
|
|
|
|
2006-04-26 06:36:06 +08:00
|
|
|
if test "$solaris" = "yes" ; then
|
2010-01-20 18:35:54 +08:00
|
|
|
if has $install; then
|
|
|
|
:
|
|
|
|
else
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
|
|
|
|
"install fileutils from www.blastwave.org using pkg-get -i fileutils" \
|
|
|
|
"to get ginstall which is used by default (which lives in /opt/csw/bin)"
|
2006-04-26 06:36:06 +08:00
|
|
|
fi
|
2016-05-16 21:10:20 +08:00
|
|
|
if test "$(path_of $install)" = "/usr/sbin/install" ; then
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
|
|
|
|
"try ginstall from the GNU fileutils available from www.blastwave.org" \
|
|
|
|
"using pkg-get -i fileutils, or use --install=/usr/ucb/install"
|
2006-04-26 06:36:06 +08:00
|
|
|
fi
|
2010-01-20 18:35:54 +08:00
|
|
|
if has ar; then
|
|
|
|
:
|
|
|
|
else
|
2006-04-26 06:36:06 +08:00
|
|
|
if test -f /usr/ccs/bin/ar ; then
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "No path includes ar" \
|
|
|
|
"Add /usr/ccs/bin to your path and rerun configure"
|
2006-04-26 06:36:06 +08:00
|
|
|
fi
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "No path includes ar"
|
2006-04-26 06:36:06 +08:00
|
|
|
fi
|
2007-09-17 05:08:06 +08:00
|
|
|
fi
|
2006-04-26 06:36:06 +08:00
|
|
|
|
2012-09-27 04:04:38 +08:00
|
|
|
if test -z "${target_list+xxx}" ; then
|
2017-07-03 22:58:28 +08:00
|
|
|
for target in $default_target_list; do
|
|
|
|
supported_target $target 2>/dev/null && \
|
|
|
|
target_list="$target_list $target"
|
|
|
|
done
|
|
|
|
target_list="${target_list# }"
|
2012-09-14 21:17:03 +08:00
|
|
|
else
|
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
|
|
|
|
supported_target $target || exit 1
|
|
|
|
done
|
2012-09-14 21:17:03 +08:00
|
|
|
fi
|
2013-05-20 23:16:16 +08:00
|
|
|
|
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
|
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, };
|
|
|
|
extern int foo(short *, short *);
|
|
|
|
int main(int argc, char *argv[]) {
|
|
|
|
return foo(big_endian, little_endian);
|
2003-03-07 07:23:54 +08:00
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
2013-07-01 11:30:18 +08:00
|
|
|
if compile_object ; then
|
2018-01-30 21:38:28 +08:00
|
|
|
if strings -a $TMPO | grep -q BiGeNdIaN ; then
|
2013-07-01 11:30:18 +08:00
|
|
|
bigendian="yes"
|
2018-01-30 21:38:28 +08:00
|
|
|
elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
|
2013-07-01 11:30:18 +08:00
|
|
|
bigendian="no"
|
|
|
|
else
|
|
|
|
echo big/little test failed
|
2011-11-30 17:57:48 +08:00
|
|
|
fi
|
2013-07-01 11:30:18 +08:00
|
|
|
else
|
|
|
|
echo big/little test failed
|
2003-03-07 07:23:54 +08:00
|
|
|
fi
|
|
|
|
|
2015-08-14 23:10:52 +08:00
|
|
|
##########################################
|
|
|
|
# cocoa implies not SDL or GTK
|
|
|
|
# (the cocoa UI code currently assumes it is always the active UI
|
|
|
|
# and doesn't interact well with other UI frontend code)
|
|
|
|
if test "$cocoa" = "yes"; then
|
|
|
|
if test "$sdl" = "yes"; then
|
|
|
|
error_exit "Cocoa and SDL UIs cannot both be enabled at once"
|
|
|
|
fi
|
|
|
|
if test "$gtk" = "yes"; then
|
|
|
|
error_exit "Cocoa and GTK UIs cannot both be enabled at once"
|
|
|
|
fi
|
|
|
|
gtk=no
|
|
|
|
sdl=no
|
|
|
|
fi
|
|
|
|
|
2016-10-11 23:46:23 +08:00
|
|
|
# Some versions of Mac OS X incorrectly define SIZE_MAX
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
int main(int argc, char *argv[]) {
|
|
|
|
return printf("%zu", SIZE_MAX);
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
have_broken_size_max=no
|
|
|
|
if ! compile_object -Werror ; then
|
|
|
|
have_broken_size_max=yes
|
|
|
|
fi
|
|
|
|
|
2014-07-01 20:58:08 +08:00
|
|
|
##########################################
|
|
|
|
# L2TPV3 probe
|
|
|
|
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <sys/socket.h>
|
2014-08-02 03:20:24 +08:00
|
|
|
#include <linux/ip.h>
|
2014-07-01 20:58:08 +08:00
|
|
|
int main(void) { return sizeof(struct mmsghdr); }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
l2tpv3=yes
|
|
|
|
else
|
|
|
|
l2tpv3=no
|
|
|
|
fi
|
|
|
|
|
2019-02-15 01:35:53 +08:00
|
|
|
#########################################
|
|
|
|
# vhost interdependencies and host support
|
|
|
|
|
|
|
|
# vhost backends
|
|
|
|
test "$vhost_user" = "" && vhost_user=yes
|
|
|
|
if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
|
|
|
|
error_exit "vhost-user isn't available on win32"
|
|
|
|
fi
|
|
|
|
test "$vhost_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
|
|
|
|
|
|
|
|
# OR the vhost-kernel and vhost-user values for simplicity
|
|
|
|
if test "$vhost_net" = ""; then
|
|
|
|
test "$vhost_net_user" = "yes" && vhost_net=yes
|
|
|
|
test "$vhost_kernel" = "yes" && vhost_net=yes
|
|
|
|
fi
|
|
|
|
|
oslib-win32: only provide localtime_r/gmtime_r if missing
The oslib-win32 file currently provides a localtime_r and
gmtime_r replacement unconditionally. Some versions of
Mingw-w64 would provide crude macros for localtime_r/gmtime_r
which QEMU takes care to disable. Latest versions of Mingw-w64
now provide actual functions for localtime_r/gmtime_r, but
with a twist that you have to include unistd.h or pthread.h
before including time.h. By luck some files in QEMU have
such an include order, resulting in compile errors:
CC util/osdep.o
In file included from include/qemu-common.h:48:0,
from util/osdep.c:48:
include/sysemu/os-win32.h:77:12: error: redundant redeclaration of 'gmtime_r' [-Werror=redundant-decls]
struct tm *gmtime_r(const time_t *timep, struct tm *result);
^
In file included from include/qemu-common.h:35:0,
from util/osdep.c:48:
/usr/i686-w64-mingw32/sys-root/mingw/include/time.h:272:107: note: previous definition of 'gmtime_r' was here
In file included from include/qemu-common.h:48:0,
from util/osdep.c:48:
include/sysemu/os-win32.h:79:12: error: redundant redeclaration of 'localtime_r' [-Werror=redundant-decls]
struct tm *localtime_r(const time_t *timep, struct tm *result);
^
In file included from include/qemu-common.h:35:0,
from util/osdep.c:48:
/usr/i686-w64-mingw32/sys-root/mingw/include/time.h:269:107: note: previous definition of 'localtime_r' was here
This change adds a configure test to see if localtime_r
exits, and only enables the QEMU impl if missing. We also
re-arrange qemu-common.h try attempt to guarantee that all
source files get unistd.h before time.h and thus see the
localtime_r/gmtime_r defs.
[sw: Use "official" spellings for Mingw-w64, MinGW in comments.]
[sw: Terminate sentences with a dot in comments.]
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Reviewed-by: Denis V. Lunev <den@openvz.org>
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2015-09-22 22:13:26 +08:00
|
|
|
##########################################
|
|
|
|
# MinGW / Mingw-w64 localtime_r/gmtime_r check
|
|
|
|
|
|
|
|
if test "$mingw32" = "yes"; then
|
|
|
|
# Some versions of MinGW / Mingw-w64 lack localtime_r
|
|
|
|
# and gmtime_r entirely.
|
|
|
|
#
|
|
|
|
# Some versions of Mingw-w64 define a macro for
|
|
|
|
# localtime_r/gmtime_r.
|
|
|
|
#
|
|
|
|
# Some versions of Mingw-w64 will define functions
|
|
|
|
# for localtime_r/gmtime_r, but only if you have
|
|
|
|
# _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
|
|
|
|
# though, unistd.h and pthread.h both define
|
|
|
|
# that for you.
|
|
|
|
#
|
|
|
|
# So this #undef localtime_r and #include <unistd.h>
|
|
|
|
# are not in fact redundant.
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <time.h>
|
|
|
|
#undef localtime_r
|
|
|
|
int main(void) { localtime_r(NULL, NULL); return 0; }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
localtime_r="yes"
|
|
|
|
else
|
|
|
|
localtime_r="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
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-08-13 00:29:49 +08:00
|
|
|
##########################################
|
|
|
|
# NPTL probe
|
|
|
|
|
2013-07-17 01:45:00 +08:00
|
|
|
if test "$linux_user" = "yes"; then
|
2009-08-13 00:29:49 +08:00
|
|
|
cat > $TMPC <<EOF
|
2008-05-29 22:34:11 +08:00
|
|
|
#include <sched.h>
|
2008-06-02 23:45:44 +08:00
|
|
|
#include <linux/futex.h>
|
2011-12-17 16:27:30 +08:00
|
|
|
int main(void) {
|
2008-05-29 22:34:11 +08:00
|
|
|
#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
|
|
|
|
#error bork
|
|
|
|
#endif
|
2011-12-17 16:27:30 +08:00
|
|
|
return 0;
|
2008-05-29 22:34:11 +08:00
|
|
|
}
|
|
|
|
EOF
|
2013-07-17 01:45:00 +08:00
|
|
|
if ! compile_object ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "nptl" "Install glibc and linux kernel headers."
|
2009-08-13 00:29:49 +08:00
|
|
|
fi
|
2008-05-29 22:34:11 +08:00
|
|
|
fi
|
|
|
|
|
2014-02-18 14:11:30 +08:00
|
|
|
##########################################
|
|
|
|
# lzo check
|
|
|
|
|
|
|
|
if test "$lzo" != "no" ; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <lzo/lzo1x.h>
|
|
|
|
int main(void) { lzo_version(); return 0; }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "-llzo2" ; then
|
2014-04-29 14:21:16 +08:00
|
|
|
libs_softmmu="$libs_softmmu -llzo2"
|
|
|
|
lzo="yes"
|
2014-02-18 14:11:30 +08:00
|
|
|
else
|
2014-04-29 14:21:16 +08:00
|
|
|
if test "$lzo" = "yes"; then
|
|
|
|
feature_not_found "liblzo2" "Install liblzo2 devel"
|
|
|
|
fi
|
|
|
|
lzo="no"
|
2014-02-18 14:11:30 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
##########################################
|
|
|
|
# snappy check
|
|
|
|
|
|
|
|
if test "$snappy" != "no" ; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <snappy-c.h>
|
|
|
|
int main(void) { snappy_max_compressed_length(4096); return 0; }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "-lsnappy" ; then
|
2014-04-29 14:21:16 +08:00
|
|
|
libs_softmmu="$libs_softmmu -lsnappy"
|
|
|
|
snappy="yes"
|
2014-02-18 14:11:30 +08:00
|
|
|
else
|
2014-04-29 14:21:16 +08:00
|
|
|
if test "$snappy" = "yes"; then
|
|
|
|
feature_not_found "libsnappy" "Install libsnappy devel"
|
|
|
|
fi
|
|
|
|
snappy="no"
|
2014-02-18 14:11:30 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-01-07 01:48:14 +08:00
|
|
|
##########################################
|
|
|
|
# bzip2 check
|
|
|
|
|
|
|
|
if test "$bzip2" != "no" ; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <bzlib.h>
|
|
|
|
int main(void) { BZ2_bzlibVersion(); return 0; }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "-lbz2" ; then
|
|
|
|
bzip2="yes"
|
|
|
|
else
|
|
|
|
if test "$bzip2" = "yes"; then
|
|
|
|
feature_not_found "libbzip2" "Install libbzip2 devel"
|
|
|
|
fi
|
|
|
|
bzip2="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-11-05 23:08:04 +08:00
|
|
|
##########################################
|
|
|
|
# lzfse check
|
|
|
|
|
|
|
|
if test "$lzfse" != "no" ; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <lzfse.h>
|
|
|
|
int main(void) { lzfse_decode_scratch_size(); return 0; }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "-llzfse" ; then
|
|
|
|
lzfse="yes"
|
|
|
|
else
|
|
|
|
if test "$lzfse" = "yes"; then
|
|
|
|
feature_not_found "lzfse" "Install lzfse devel"
|
|
|
|
fi
|
|
|
|
lzfse="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2012-08-15 05:44:05 +08:00
|
|
|
##########################################
|
|
|
|
# libseccomp check
|
|
|
|
|
|
|
|
if test "$seccomp" != "no" ; then
|
2019-04-05 02:39:23 +08:00
|
|
|
libseccomp_minver="2.3.0"
|
|
|
|
if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
|
2017-09-07 16:53:16 +08:00
|
|
|
seccomp_cflags="$($pkg_config --cflags libseccomp)"
|
|
|
|
seccomp_libs="$($pkg_config --libs libseccomp)"
|
2015-09-30 23:59:18 +08:00
|
|
|
seccomp="yes"
|
2012-08-15 05:44:05 +08:00
|
|
|
else
|
2015-09-30 23:59:18 +08:00
|
|
|
if test "$seccomp" = "yes" ; then
|
2019-04-05 02:39:23 +08:00
|
|
|
feature_not_found "libseccomp" \
|
|
|
|
"Install libseccomp devel >= $libseccomp_minver"
|
2015-09-30 23:59:18 +08:00
|
|
|
fi
|
|
|
|
seccomp="no"
|
2012-08-15 05:44:05 +08:00
|
|
|
fi
|
|
|
|
fi
|
2009-04-22 23:19:10 +08:00
|
|
|
##########################################
|
|
|
|
# xen probe
|
|
|
|
|
2009-08-13 00:29:55 +08:00
|
|
|
if test "$xen" != "no" ; 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') )"
|
|
|
|
xen=yes
|
|
|
|
xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
|
|
|
|
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
|
2017-03-27 15:42:45 +08:00
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
|
|
|
|
libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
|
|
|
|
else
|
2011-02-26 00:20:34 +08:00
|
|
|
|
2017-03-27 15:42:45 +08:00
|
|
|
xen_libs="-lxenstore -lxenctrl -lxenguest"
|
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
|
|
|
|
if test "$xen" = "yes" ; then
|
|
|
|
feature_not_found "xen" "Install xen devel"
|
|
|
|
fi
|
|
|
|
xen=no
|
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
|
|
|
|
xen=yes
|
|
|
|
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
|
|
|
|
xen=yes
|
|
|
|
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
|
|
|
|
xen=yes
|
|
|
|
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
|
|
|
|
xen=yes
|
|
|
|
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
|
|
|
|
xen=yes
|
|
|
|
|
|
|
|
# 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
|
|
|
|
xen=yes
|
|
|
|
|
|
|
|
# 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
|
|
|
|
xen=yes
|
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
|
|
|
|
xen=yes
|
2012-04-18 01:04:18 +08:00
|
|
|
|
2017-03-27 15:42:45 +08:00
|
|
|
else
|
|
|
|
if test "$xen" = "yes" ; then
|
|
|
|
feature_not_found "xen (unsupported version)" \
|
|
|
|
"Install a supported xen (xen 4.2 or newer)"
|
|
|
|
fi
|
|
|
|
xen=no
|
2009-08-13 00:29:55 +08:00
|
|
|
fi
|
2011-02-26 00:20:34 +08:00
|
|
|
|
2017-03-27 15:42:45 +08:00
|
|
|
if test "$xen" = yes; then
|
|
|
|
if test $xen_ctrl_version -ge 40701 ; then
|
|
|
|
libs_softmmu="$xen_stable_libs $libs_softmmu"
|
|
|
|
fi
|
|
|
|
libs_softmmu="$xen_libs $libs_softmmu"
|
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
|
|
|
|
|
2012-06-21 23:32:59 +08:00
|
|
|
if test "$xen_pci_passthrough" != "no"; then
|
2016-02-10 19:07:01 +08:00
|
|
|
if test "$xen" = "yes" && test "$linux" = "yes"; then
|
2012-06-21 23:32:59 +08:00
|
|
|
xen_pci_passthrough=yes
|
|
|
|
else
|
|
|
|
if test "$xen_pci_passthrough" = "yes"; then
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "User requested feature Xen PCI Passthrough" \
|
|
|
|
" but this feature requires /sys from Linux"
|
2012-06-21 23:32:59 +08:00
|
|
|
fi
|
|
|
|
xen_pci_passthrough=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-01-23 05:07:46 +08:00
|
|
|
##########################################
|
|
|
|
# Windows Hypervisor Platform accelerator (WHPX) check
|
|
|
|
if test "$whpx" != "no" ; then
|
2018-05-16 01:35:21 +08:00
|
|
|
if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
|
2018-01-23 05:07:46 +08:00
|
|
|
whpx="yes"
|
|
|
|
else
|
|
|
|
if test "$whpx" = "yes"; then
|
2018-02-27 01:13:29 +08:00
|
|
|
feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
|
2018-01-23 05:07:46 +08:00
|
|
|
fi
|
|
|
|
whpx="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2009-08-13 00:29:57 +08:00
|
|
|
##########################################
|
|
|
|
# Sparse probe
|
|
|
|
if test "$sparse" != "no" ; then
|
2010-01-29 05:26:51 +08:00
|
|
|
if has cgcc; then
|
2009-08-13 00:29:57 +08:00
|
|
|
sparse=yes
|
|
|
|
else
|
|
|
|
if test "$sparse" = "yes" ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "sparse" "Install sparse binary"
|
2009-08-13 00:29:57 +08:00
|
|
|
fi
|
|
|
|
sparse=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-01-10 03:08:49 +08:00
|
|
|
##########################################
|
|
|
|
# X11 probe
|
|
|
|
if $pkg_config --exists "x11"; then
|
2018-03-01 18:05:42 +08:00
|
|
|
have_x11=yes
|
2016-05-16 21:10:20 +08:00
|
|
|
x11_cflags=$($pkg_config --cflags x11)
|
|
|
|
x11_libs=$($pkg_config --libs x11)
|
2015-01-10 03:08:49 +08:00
|
|
|
fi
|
|
|
|
|
2013-02-20 21:43:20 +08:00
|
|
|
##########################################
|
|
|
|
# GTK probe
|
|
|
|
|
|
|
|
if test "$gtk" != "no"; then
|
2018-08-22 21:15:52 +08:00
|
|
|
gtkpackage="gtk+-3.0"
|
|
|
|
gtkx11package="gtk+-x11-3.0"
|
2018-08-22 21:15:53 +08:00
|
|
|
gtkversion="3.14.0"
|
2014-02-19 14:04:34 +08:00
|
|
|
if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
|
2016-05-16 21:10:20 +08:00
|
|
|
gtk_cflags=$($pkg_config --cflags $gtkpackage)
|
|
|
|
gtk_libs=$($pkg_config --libs $gtkpackage)
|
|
|
|
gtk_version=$($pkg_config --modversion $gtkpackage)
|
2014-05-29 04:33:06 +08:00
|
|
|
if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
|
2018-03-01 18:05:42 +08:00
|
|
|
need_x11=yes
|
2015-01-10 03:08:49 +08:00
|
|
|
gtk_cflags="$gtk_cflags $x11_cflags"
|
|
|
|
gtk_libs="$gtk_libs $x11_libs"
|
2014-05-29 04:33:06 +08:00
|
|
|
fi
|
2014-02-19 14:04:34 +08:00
|
|
|
gtk="yes"
|
|
|
|
elif test "$gtk" = "yes"; then
|
2017-06-06 18:53:36 +08:00
|
|
|
feature_not_found "gtk" "Install gtk3-devel"
|
2014-02-19 14:04:34 +08:00
|
|
|
else
|
|
|
|
gtk="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-07-02 01:10:29 +08:00
|
|
|
|
|
|
|
##########################################
|
|
|
|
# GNUTLS probe
|
|
|
|
|
|
|
|
if test "$gnutls" != "no"; then
|
2019-05-10 09:24:35 +08:00
|
|
|
pass="no"
|
2018-07-18 18:55:05 +08:00
|
|
|
if $pkg_config --exists "gnutls >= 3.1.18"; then
|
2016-05-16 21:10:20 +08:00
|
|
|
gnutls_cflags=$($pkg_config --cflags gnutls)
|
|
|
|
gnutls_libs=$($pkg_config --libs gnutls)
|
2019-05-10 09:24:35 +08:00
|
|
|
# Packaging for the static libraries is not always correct.
|
|
|
|
# At least ubuntu 18.04 ships only shared libraries.
|
|
|
|
write_c_skeleton
|
|
|
|
if compile_prog "" "$gnutls_libs" ; then
|
2019-05-17 06:29:06 +08:00
|
|
|
LIBS="$gnutls_libs $LIBS"
|
2019-05-10 09:24:35 +08:00
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
|
|
|
|
pass="yes"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
if test "$pass" = "no" && test "$gnutls" = "yes"; then
|
2018-07-18 18:55:05 +08:00
|
|
|
feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
|
2015-07-02 01:10:29 +08:00
|
|
|
else
|
2019-05-10 09:24:35 +08:00
|
|
|
gnutls="$pass"
|
2015-07-02 01:10:29 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-10-16 23:36:53 +08:00
|
|
|
|
|
|
|
# If user didn't give a --disable/enable-gcrypt flag,
|
|
|
|
# then mark as disabled if user requested nettle
|
2018-07-18 18:55:05 +08:00
|
|
|
# explicitly
|
2015-10-16 23:36:53 +08:00
|
|
|
if test -z "$gcrypt"
|
|
|
|
then
|
2018-07-18 18:55:05 +08:00
|
|
|
if test "$nettle" = "yes"
|
2015-10-16 23:36:53 +08:00
|
|
|
then
|
|
|
|
gcrypt="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
# If user didn't give a --disable/enable-nettle flag,
|
|
|
|
# then mark as disabled if user requested gcrypt
|
2018-07-18 18:55:05 +08:00
|
|
|
# explicitly
|
2015-10-16 23:36:53 +08:00
|
|
|
if test -z "$nettle"
|
|
|
|
then
|
2018-07-18 18:55:05 +08:00
|
|
|
if test "$gcrypt" = "yes"
|
2015-10-16 23:36:53 +08:00
|
|
|
then
|
|
|
|
nettle="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-07-18 18:55:05 +08:00
|
|
|
has_libgcrypt() {
|
2015-10-16 23:36:53 +08:00
|
|
|
if ! has "libgcrypt-config"
|
|
|
|
then
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test -n "$cross_prefix"
|
|
|
|
then
|
2016-05-16 21:10:20 +08:00
|
|
|
host=$(libgcrypt-config --host)
|
2015-10-16 23:36:53 +08:00
|
|
|
if test "$host-" != $cross_prefix
|
|
|
|
then
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-07-18 18:55:05 +08:00
|
|
|
maj=`libgcrypt-config --version | awk -F . '{print $1}'`
|
|
|
|
min=`libgcrypt-config --version | awk -F . '{print $2}'`
|
|
|
|
|
|
|
|
if test $maj != 1 || test $min -lt 5
|
|
|
|
then
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
2015-10-16 23:36:53 +08:00
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
2018-07-18 18:55:05 +08:00
|
|
|
|
|
|
|
if test "$nettle" != "no"; then
|
2019-05-10 09:24:35 +08:00
|
|
|
pass="no"
|
2018-07-18 18:55:05 +08:00
|
|
|
if $pkg_config --exists "nettle >= 2.7.1"; then
|
2018-07-18 18:55:05 +08:00
|
|
|
nettle_cflags=$($pkg_config --cflags nettle)
|
|
|
|
nettle_libs=$($pkg_config --libs nettle)
|
|
|
|
nettle_version=$($pkg_config --modversion nettle)
|
2019-05-10 09:24:35 +08:00
|
|
|
# Link test to make sure the given libraries work (e.g for static).
|
|
|
|
write_c_skeleton
|
|
|
|
if compile_prog "" "$nettle_libs" ; then
|
2019-05-17 06:29:06 +08:00
|
|
|
LIBS="$nettle_libs $LIBS"
|
2019-05-10 09:24:35 +08:00
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
|
|
|
|
if test -z "$gcrypt"; then
|
|
|
|
gcrypt="no"
|
|
|
|
fi
|
|
|
|
pass="yes"
|
2018-07-18 18:55:05 +08:00
|
|
|
fi
|
2019-05-10 09:24:35 +08:00
|
|
|
fi
|
|
|
|
if test "$pass" = "no" && test "$nettle" = "yes"; then
|
|
|
|
feature_not_found "nettle" "Install nettle devel >= 2.7.1"
|
2018-07-18 18:55:05 +08:00
|
|
|
else
|
2019-05-10 09:24:35 +08:00
|
|
|
nettle="$pass"
|
2018-07-18 18:55:05 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-10-16 23:36:53 +08:00
|
|
|
if test "$gcrypt" != "no"; then
|
2019-05-10 09:24:35 +08:00
|
|
|
pass="no"
|
2018-07-18 18:55:05 +08:00
|
|
|
if has_libgcrypt; then
|
2016-05-16 21:10:20 +08:00
|
|
|
gcrypt_cflags=$(libgcrypt-config --cflags)
|
|
|
|
gcrypt_libs=$(libgcrypt-config --libs)
|
2019-05-10 09:24:35 +08:00
|
|
|
# Debian has removed -lgpg-error from libgcrypt-config
|
2015-10-16 23:36:53 +08:00
|
|
|
# as it "spreads unnecessary dependencies" which in
|
|
|
|
# turn breaks static builds...
|
|
|
|
if test "$static" = "yes"
|
|
|
|
then
|
|
|
|
gcrypt_libs="$gcrypt_libs -lgpg-error"
|
|
|
|
fi
|
2016-12-13 18:42:55 +08:00
|
|
|
|
2019-05-10 09:24:35 +08:00
|
|
|
# Link test to make sure the given libraries work (e.g for static).
|
|
|
|
write_c_skeleton
|
|
|
|
if compile_prog "" "$gcrypt_libs" ; then
|
2019-05-17 06:29:06 +08:00
|
|
|
LIBS="$gcrypt_libs $LIBS"
|
2019-05-10 09:24:35 +08:00
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
|
|
|
|
pass="yes"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
if test "$pass" = "yes"; then
|
|
|
|
gcrypt="yes"
|
2016-12-13 18:42:55 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <gcrypt.h>
|
|
|
|
int main(void) {
|
|
|
|
gcry_mac_hd_t handle;
|
|
|
|
gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
|
|
|
|
GCRY_MAC_FLAG_SECURE, NULL);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
|
|
|
|
gcrypt_hmac=yes
|
|
|
|
fi
|
2019-05-10 09:24:35 +08:00
|
|
|
elif test "$gcrypt" = "yes"; then
|
|
|
|
feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
|
2015-07-02 01:10:33 +08:00
|
|
|
else
|
2019-05-10 09:24:35 +08:00
|
|
|
gcrypt="no"
|
2015-07-02 01:10:33 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-07-02 01:10:29 +08:00
|
|
|
|
2015-10-16 23:36:53 +08:00
|
|
|
if test "$gcrypt" = "yes" && test "$nettle" = "yes"
|
|
|
|
then
|
|
|
|
error_exit "Only one of gcrypt & nettle can be enabled"
|
|
|
|
fi
|
|
|
|
|
2015-04-13 21:01:39 +08:00
|
|
|
##########################################
|
|
|
|
# libtasn1 - only for the TLS creds/session test suite
|
|
|
|
|
|
|
|
tasn1=yes
|
2015-09-22 00:25:34 +08:00
|
|
|
tasn1_cflags=""
|
|
|
|
tasn1_libs=""
|
2015-04-13 21:01:39 +08:00
|
|
|
if $pkg_config --exists "libtasn1"; then
|
2016-05-16 21:10:20 +08:00
|
|
|
tasn1_cflags=$($pkg_config --cflags libtasn1)
|
|
|
|
tasn1_libs=$($pkg_config --libs libtasn1)
|
2015-04-13 21:01:39 +08:00
|
|
|
else
|
|
|
|
tasn1=no
|
|
|
|
fi
|
|
|
|
|
2015-07-02 01:10:34 +08:00
|
|
|
|
authz: add QAuthZPAM object type for authorizing using PAM
Add an authorization backend that talks to PAM to check whether the user
identity is allowed. This only uses the PAM account validation facility,
which is essentially just a check to see if the provided username is permitted
access. It doesn't use the authentication or session parts of PAM, since
that's dealt with by the relevant part of QEMU (eg VNC server).
Consider starting QEMU with a VNC server and telling it to use TLS with
x509 client certificates and configuring it to use an PAM to validate
the x509 distinguished name. In this example we're telling it to use PAM
for the QAuthZ impl with a service name of "qemu-vnc"
$ qemu-system-x86_64 \
-object tls-creds-x509,id=tls0,dir=/home/berrange/security/qemutls,\
endpoint=server,verify-peer=yes \
-object authz-pam,id=authz0,service=qemu-vnc \
-vnc :1,tls-creds=tls0,tls-authz=authz0
This requires an /etc/pam/qemu-vnc file to be created with the auth
rules. A very simple file based whitelist can be setup using
$ cat > /etc/pam/qemu-vnc <<EOF
account requisite pam_listfile.so item=user sense=allow file=/etc/qemu/vnc.allow
EOF
The /etc/qemu/vnc.allow file simply contains one username per line. Any
username not in the file is denied. The usernames in this example are
the x509 distinguished name from the client's x509 cert.
$ cat > /etc/qemu/vnc.allow <<EOF
CN=laptop.berrange.com,O=Berrange Home,L=London,ST=London,C=GB
EOF
More interesting would be to configure PAM to use an LDAP backend, so
that the QEMU authorization check data can be centralized instead of
requiring each compute host to have file maintained.
The main limitation with this PAM module is that the rules apply to all
QEMU instances on the host. Setting up different rules per VM, would
require creating a separate PAM service name & config file for every
guest. An alternative approach for the future might be to not pass in
the plain username to PAM, but instead combine the VM name or UUID with
the username. This requires further consideration though.
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-07-27 21:13:56 +08:00
|
|
|
##########################################
|
|
|
|
# PAM probe
|
|
|
|
|
|
|
|
if test "$auth_pam" != "no"; then
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <security/pam_appl.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
int main(void) {
|
|
|
|
const char *service_name = "qemu";
|
|
|
|
const char *user = "frank";
|
2019-04-04 17:17:25 +08:00
|
|
|
const struct pam_conv pam_conv = { 0 };
|
authz: add QAuthZPAM object type for authorizing using PAM
Add an authorization backend that talks to PAM to check whether the user
identity is allowed. This only uses the PAM account validation facility,
which is essentially just a check to see if the provided username is permitted
access. It doesn't use the authentication or session parts of PAM, since
that's dealt with by the relevant part of QEMU (eg VNC server).
Consider starting QEMU with a VNC server and telling it to use TLS with
x509 client certificates and configuring it to use an PAM to validate
the x509 distinguished name. In this example we're telling it to use PAM
for the QAuthZ impl with a service name of "qemu-vnc"
$ qemu-system-x86_64 \
-object tls-creds-x509,id=tls0,dir=/home/berrange/security/qemutls,\
endpoint=server,verify-peer=yes \
-object authz-pam,id=authz0,service=qemu-vnc \
-vnc :1,tls-creds=tls0,tls-authz=authz0
This requires an /etc/pam/qemu-vnc file to be created with the auth
rules. A very simple file based whitelist can be setup using
$ cat > /etc/pam/qemu-vnc <<EOF
account requisite pam_listfile.so item=user sense=allow file=/etc/qemu/vnc.allow
EOF
The /etc/qemu/vnc.allow file simply contains one username per line. Any
username not in the file is denied. The usernames in this example are
the x509 distinguished name from the client's x509 cert.
$ cat > /etc/qemu/vnc.allow <<EOF
CN=laptop.berrange.com,O=Berrange Home,L=London,ST=London,C=GB
EOF
More interesting would be to configure PAM to use an LDAP backend, so
that the QEMU authorization check data can be centralized instead of
requiring each compute host to have file maintained.
The main limitation with this PAM module is that the rules apply to all
QEMU instances on the host. Setting up different rules per VM, would
require creating a separate PAM service name & config file for every
guest. An alternative approach for the future might be to not pass in
the plain username to PAM, but instead combine the VM name or UUID with
the username. This requires further consideration though.
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-07-27 21:13:56 +08:00
|
|
|
pam_handle_t *pamh = NULL;
|
2019-04-04 17:17:25 +08:00
|
|
|
pam_start(service_name, user, &pam_conv, &pamh);
|
authz: add QAuthZPAM object type for authorizing using PAM
Add an authorization backend that talks to PAM to check whether the user
identity is allowed. This only uses the PAM account validation facility,
which is essentially just a check to see if the provided username is permitted
access. It doesn't use the authentication or session parts of PAM, since
that's dealt with by the relevant part of QEMU (eg VNC server).
Consider starting QEMU with a VNC server and telling it to use TLS with
x509 client certificates and configuring it to use an PAM to validate
the x509 distinguished name. In this example we're telling it to use PAM
for the QAuthZ impl with a service name of "qemu-vnc"
$ qemu-system-x86_64 \
-object tls-creds-x509,id=tls0,dir=/home/berrange/security/qemutls,\
endpoint=server,verify-peer=yes \
-object authz-pam,id=authz0,service=qemu-vnc \
-vnc :1,tls-creds=tls0,tls-authz=authz0
This requires an /etc/pam/qemu-vnc file to be created with the auth
rules. A very simple file based whitelist can be setup using
$ cat > /etc/pam/qemu-vnc <<EOF
account requisite pam_listfile.so item=user sense=allow file=/etc/qemu/vnc.allow
EOF
The /etc/qemu/vnc.allow file simply contains one username per line. Any
username not in the file is denied. The usernames in this example are
the x509 distinguished name from the client's x509 cert.
$ cat > /etc/qemu/vnc.allow <<EOF
CN=laptop.berrange.com,O=Berrange Home,L=London,ST=London,C=GB
EOF
More interesting would be to configure PAM to use an LDAP backend, so
that the QEMU authorization check data can be centralized instead of
requiring each compute host to have file maintained.
The main limitation with this PAM module is that the rules apply to all
QEMU instances on the host. Setting up different rules per VM, would
require creating a separate PAM service name & config file for every
guest. An alternative approach for the future might be to not pass in
the plain username to PAM, but instead combine the VM name or UUID with
the username. This requires further consideration though.
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-07-27 21:13:56 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "-lpam" ; then
|
|
|
|
auth_pam=yes
|
|
|
|
else
|
|
|
|
if test "$auth_pam" = "yes"; then
|
|
|
|
feature_not_found "PAM" "Install PAM development package"
|
|
|
|
else
|
|
|
|
auth_pam=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-02-28 00:19:33 +08:00
|
|
|
##########################################
|
|
|
|
# getifaddrs (for tests/test-io-channel-socket )
|
|
|
|
|
|
|
|
have_ifaddrs_h=yes
|
|
|
|
if ! check_include "ifaddrs.h" ; then
|
|
|
|
have_ifaddrs_h=no
|
|
|
|
fi
|
|
|
|
|
2014-02-19 14:04:34 +08:00
|
|
|
##########################################
|
|
|
|
# VTE probe
|
|
|
|
|
|
|
|
if test "$vte" != "no"; then
|
2018-08-22 21:15:52 +08:00
|
|
|
vteminversion="0.32.0"
|
|
|
|
if $pkg_config --exists "vte-2.91"; then
|
|
|
|
vtepackage="vte-2.91"
|
2013-02-25 23:20:44 +08:00
|
|
|
else
|
2018-08-22 21:15:52 +08:00
|
|
|
vtepackage="vte-2.90"
|
2013-02-25 23:20:44 +08:00
|
|
|
fi
|
2016-05-07 02:03:12 +08:00
|
|
|
if $pkg_config --exists "$vtepackage >= $vteminversion"; then
|
2016-05-16 21:10:20 +08:00
|
|
|
vte_cflags=$($pkg_config --cflags $vtepackage)
|
|
|
|
vte_libs=$($pkg_config --libs $vtepackage)
|
|
|
|
vteversion=$($pkg_config --modversion $vtepackage)
|
2014-02-19 14:04:34 +08:00
|
|
|
vte="yes"
|
|
|
|
elif test "$vte" = "yes"; then
|
2018-08-22 21:15:52 +08:00
|
|
|
feature_not_found "vte" "Install libvte-2.90/2.91 devel"
|
2013-07-18 23:42:01 +08:00
|
|
|
else
|
2014-02-19 14:04:34 +08:00
|
|
|
vte="no"
|
2013-02-20 21:43:20 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2004-04-03 04:55:59 +08:00
|
|
|
##########################################
|
|
|
|
# SDL probe
|
|
|
|
|
2010-12-23 18:43:57 +08:00
|
|
|
# Look for sdl configuration program (pkg-config or sdl-config). Try
|
|
|
|
# sdl-config even without cross prefix, and favour pkg-config over sdl-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
|
|
|
|
2018-04-10 13:40:34 +08:00
|
|
|
sdl_probe ()
|
|
|
|
{
|
2018-08-22 21:15:54 +08:00
|
|
|
if $pkg_config sdl2 --exists; then
|
|
|
|
sdlconfig="$pkg_config sdl2"
|
2018-04-10 13:40:34 +08:00
|
|
|
sdlversion=$($sdlconfig --modversion 2>/dev/null)
|
|
|
|
elif has ${sdl_config}; then
|
2018-08-22 21:15:54 +08:00
|
|
|
sdlconfig="$sdl2_config"
|
2018-04-10 13:40:34 +08:00
|
|
|
sdlversion=$($sdlconfig --version)
|
|
|
|
else
|
|
|
|
if test "$sdl" = "yes" ; then
|
|
|
|
feature_not_found "sdl" "Install SDL2-devel"
|
|
|
|
fi
|
|
|
|
sdl=no
|
|
|
|
# no need to do the rest
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
|
|
|
|
echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
|
2010-01-29 05:15:18 +08:00
|
|
|
fi
|
2004-04-03 04:55:59 +08:00
|
|
|
|
2009-07-27 22:13:15 +08:00
|
|
|
cat > $TMPC << EOF
|
2004-04-03 04:55:59 +08:00
|
|
|
#include <SDL.h>
|
|
|
|
#undef main /* We don't want SDL to override our main() */
|
|
|
|
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
|
|
|
|
EOF
|
2016-05-16 21:10:20 +08:00
|
|
|
sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
|
2018-03-07 23:42:57 +08:00
|
|
|
sdl_cflags="$sdl_cflags -Wno-undef" # workaround 2.0.8 bug
|
2010-02-08 13:56:44 +08:00
|
|
|
if test "$static" = "yes" ; then
|
2018-08-22 21:15:54 +08:00
|
|
|
if $pkg_config sdl2 --exists; then
|
|
|
|
sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
|
2017-06-14 02:00:44 +08:00
|
|
|
else
|
|
|
|
sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
|
|
|
|
fi
|
2010-02-08 13:56:44 +08:00
|
|
|
else
|
2016-05-16 21:10:20 +08:00
|
|
|
sdl_libs=$($sdlconfig --libs 2>/dev/null)
|
2010-02-08 13:56:44 +08:00
|
|
|
fi
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "$sdl_cflags" "$sdl_libs" ; then
|
2018-08-22 21:15:54 +08:00
|
|
|
sdl=yes
|
2008-08-22 03:25:45 +08:00
|
|
|
|
2010-01-13 16:52:54 +08:00
|
|
|
# static link with sdl ? (note: sdl.pc's --static --libs is broken)
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$sdl" = "yes" && test "$static" = "yes" ; then
|
2010-01-13 16:52:54 +08:00
|
|
|
if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
|
2016-05-16 21:10:20 +08:00
|
|
|
sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
|
|
|
|
sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
|
2009-07-27 22:13:15 +08:00
|
|
|
fi
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "$sdl_cflags" "$sdl_libs" ; then
|
2009-07-27 22:13:15 +08:00
|
|
|
:
|
|
|
|
else
|
|
|
|
sdl=no
|
|
|
|
fi
|
|
|
|
fi # static link
|
2009-08-13 00:29:53 +08:00
|
|
|
else # sdl not found
|
|
|
|
if test "$sdl" = "yes" ; then
|
2018-08-22 21:15:54 +08:00
|
|
|
feature_not_found "sdl" "Install SDL2 devel"
|
2009-08-13 00:29:53 +08:00
|
|
|
fi
|
|
|
|
sdl=no
|
2009-07-27 22:13:15 +08:00
|
|
|
fi # sdl compile test
|
2018-04-10 13:40:34 +08:00
|
|
|
}
|
|
|
|
|
2019-01-10 20:00:47 +08:00
|
|
|
sdl_image_probe ()
|
|
|
|
{
|
|
|
|
if test "$sdl_image" != "no" ; then
|
|
|
|
if $pkg_config SDL2_image --exists; then
|
|
|
|
if test "$static" = "yes"; then
|
|
|
|
sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
|
|
|
|
else
|
|
|
|
sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
|
|
|
|
fi
|
|
|
|
sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
|
|
|
|
sdl_image=yes
|
|
|
|
|
|
|
|
sdl_cflags="$sdl_cflags $sdl_image_cflags"
|
|
|
|
sdl_libs="$sdl_libs $sdl_image_libs"
|
|
|
|
else
|
|
|
|
if test "$sdl_image" = "yes" ; then
|
|
|
|
feature_not_found "sdl_image" "Install SDL Image devel"
|
|
|
|
else
|
|
|
|
sdl_image=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2018-04-10 13:40:34 +08:00
|
|
|
if test "$sdl" != "no" ; then
|
|
|
|
sdl_probe
|
2009-07-27 22:13:09 +08:00
|
|
|
fi
|
2004-04-03 04:55:59 +08:00
|
|
|
|
2019-01-10 20:00:47 +08:00
|
|
|
if test "$sdl" = "yes" ; then
|
|
|
|
sdl_image_probe
|
|
|
|
else
|
|
|
|
if test "$sdl_image" = "yes"; then
|
|
|
|
echo "warning: SDL Image requested, but SDL is not available, disabling"
|
|
|
|
fi
|
|
|
|
sdl_image=no
|
|
|
|
fi
|
|
|
|
|
2009-03-04 01:37:21 +08:00
|
|
|
if test "$sdl" = "yes" ; then
|
2009-07-27 22:13:15 +08:00
|
|
|
cat > $TMPC <<EOF
|
2009-03-04 01:37:21 +08:00
|
|
|
#include <SDL.h>
|
|
|
|
#if defined(SDL_VIDEO_DRIVER_X11)
|
|
|
|
#include <X11/XKBlib.h>
|
|
|
|
#else
|
|
|
|
#error No x11 support
|
|
|
|
#endif
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
2015-01-10 03:08:49 +08:00
|
|
|
if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
|
2018-03-01 18:05:42 +08:00
|
|
|
need_x11=yes
|
2015-01-10 03:08:49 +08:00
|
|
|
sdl_cflags="$sdl_cflags $x11_cflags"
|
|
|
|
sdl_libs="$sdl_libs $x11_libs"
|
2009-07-27 22:13:15 +08:00
|
|
|
fi
|
2009-03-04 01:37:21 +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"
|
2018-02-09 21:23:18 +08:00
|
|
|
libs_softmmu="$libs_softmmu $rdma_libs"
|
2013-07-22 22:01:54 +08:00
|
|
|
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
|
|
|
|
Add SASL authentication support ("Daniel P. Berrange")
This patch adds the new SASL authentication protocol to the VNC server.
It is enabled by setting the 'sasl' flag when launching VNC. SASL can
optionally provide encryption via its SSF layer, if a suitable mechanism
is configured (eg, GSSAPI/Kerberos, or Digest-MD5). If an SSF layer is
not available, then it should be combined with the x509 VNC authentication
protocol which provides encryption.
eg, if using GSSAPI
qemu -vnc localhost:1,sasl
eg if using TLS/x509 for encryption
qemu -vnc localhost:1,sasl,tls,x509
By default the Cyrus SASL library will look for its configuration in
the file /etc/sasl2/qemu.conf. For non-root users, this can be overridden
by setting the SASL_CONF_PATH environment variable, eg to make it look in
$HOME/.sasl2. NB unprivileged users may not have access to the full range
of SASL mechanisms, since some of them require some administrative privileges
to configure. The patch includes an example SASL configuration file which
illustrates config for GSSAPI and Digest-MD5, though it should be noted that
the latter is not really considered secure any more.
Most of the SASL authentication code is located in a separate source file,
vnc-auth-sasl.c. The main vnc.c file only contains minimal integration
glue, specifically parsing of command line flags / setup, and calls to
start the SASL auth process, to do encoding/decoding for data.
There are several possible stacks for reading & writing of data, depending
on the combo of VNC authentication methods in use
- Clear. read/write straight to socket
- TLS. read/write via GNUTLS helpers
- SASL. encode/decode via SASL SSF layer, then read/write to socket
- SASL+TLS. encode/decode via SASL SSF layer, then read/write via GNUTLS
Hence, the vnc_client_read & vnc_client_write methods have been refactored
a little.
vnc_client_read: main entry point for reading, calls either
- vnc_client_read_plain reading, with no intermediate decoding
- vnc_client_read_sasl reading, with SASL SSF decoding
These two methods, then call vnc_client_read_buf(). This decides
whether to write to the socket directly or write via GNUTLS.
The situation is the same for writing data. More extensive comments
have been added in the code / patch. The vnc_client_read_sasl and
vnc_client_write_sasl method implementations live in the separate
vnc-auth-sasl.c file.
The state required for the SASL auth mechanism is kept in a separate
VncStateSASL struct, defined in vnc-auth-sasl.h and included in the
main VncState.
The configure script probes for SASL and automatically enables it
if found, unless --disable-vnc-sasl was given to override it.
Makefile | 7
Makefile.target | 5
b/qemu.sasl | 34 ++
b/vnc-auth-sasl.c | 626 ++++++++++++++++++++++++++++++++++++++++++++++++++++
b/vnc-auth-sasl.h | 67 +++++
configure | 34 ++
qemu-doc.texi | 97 ++++++++
vnc-auth-vencrypt.c | 12
vnc.c | 249 ++++++++++++++++++--
vnc.h | 31 ++
10 files changed, 1129 insertions(+), 33 deletions(-)
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6724 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-07 04:27:28 +08:00
|
|
|
##########################################
|
|
|
|
# VNC SASL detection
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
|
2009-08-13 00:20:29 +08:00
|
|
|
cat > $TMPC <<EOF
|
Add SASL authentication support ("Daniel P. Berrange")
This patch adds the new SASL authentication protocol to the VNC server.
It is enabled by setting the 'sasl' flag when launching VNC. SASL can
optionally provide encryption via its SSF layer, if a suitable mechanism
is configured (eg, GSSAPI/Kerberos, or Digest-MD5). If an SSF layer is
not available, then it should be combined with the x509 VNC authentication
protocol which provides encryption.
eg, if using GSSAPI
qemu -vnc localhost:1,sasl
eg if using TLS/x509 for encryption
qemu -vnc localhost:1,sasl,tls,x509
By default the Cyrus SASL library will look for its configuration in
the file /etc/sasl2/qemu.conf. For non-root users, this can be overridden
by setting the SASL_CONF_PATH environment variable, eg to make it look in
$HOME/.sasl2. NB unprivileged users may not have access to the full range
of SASL mechanisms, since some of them require some administrative privileges
to configure. The patch includes an example SASL configuration file which
illustrates config for GSSAPI and Digest-MD5, though it should be noted that
the latter is not really considered secure any more.
Most of the SASL authentication code is located in a separate source file,
vnc-auth-sasl.c. The main vnc.c file only contains minimal integration
glue, specifically parsing of command line flags / setup, and calls to
start the SASL auth process, to do encoding/decoding for data.
There are several possible stacks for reading & writing of data, depending
on the combo of VNC authentication methods in use
- Clear. read/write straight to socket
- TLS. read/write via GNUTLS helpers
- SASL. encode/decode via SASL SSF layer, then read/write to socket
- SASL+TLS. encode/decode via SASL SSF layer, then read/write via GNUTLS
Hence, the vnc_client_read & vnc_client_write methods have been refactored
a little.
vnc_client_read: main entry point for reading, calls either
- vnc_client_read_plain reading, with no intermediate decoding
- vnc_client_read_sasl reading, with SASL SSF decoding
These two methods, then call vnc_client_read_buf(). This decides
whether to write to the socket directly or write via GNUTLS.
The situation is the same for writing data. More extensive comments
have been added in the code / patch. The vnc_client_read_sasl and
vnc_client_write_sasl method implementations live in the separate
vnc-auth-sasl.c file.
The state required for the SASL auth mechanism is kept in a separate
VncStateSASL struct, defined in vnc-auth-sasl.h and included in the
main VncState.
The configure script probes for SASL and automatically enables it
if found, unless --disable-vnc-sasl was given to override it.
Makefile | 7
Makefile.target | 5
b/qemu.sasl | 34 ++
b/vnc-auth-sasl.c | 626 ++++++++++++++++++++++++++++++++++++++++++++++++++++
b/vnc-auth-sasl.h | 67 +++++
configure | 34 ++
qemu-doc.texi | 97 ++++++++
vnc-auth-vencrypt.c | 12
vnc.c | 249 ++++++++++++++++++--
vnc.h | 31 ++
10 files changed, 1129 insertions(+), 33 deletions(-)
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6724 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-07 04:27:28 +08:00
|
|
|
#include <sasl/sasl.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
|
|
|
|
EOF
|
2009-08-13 00:20:29 +08:00
|
|
|
# Assuming Cyrus-SASL installed in /usr prefix
|
|
|
|
vnc_sasl_cflags=""
|
|
|
|
vnc_sasl_libs="-lsasl2"
|
|
|
|
if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
|
|
|
|
vnc_sasl=yes
|
|
|
|
libs_softmmu="$vnc_sasl_libs $libs_softmmu"
|
2012-12-20 19:29:19 +08:00
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
|
2009-08-13 00:20:29 +08:00
|
|
|
else
|
|
|
|
if test "$vnc_sasl" = "yes" ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
|
Add SASL authentication support ("Daniel P. Berrange")
This patch adds the new SASL authentication protocol to the VNC server.
It is enabled by setting the 'sasl' flag when launching VNC. SASL can
optionally provide encryption via its SSF layer, if a suitable mechanism
is configured (eg, GSSAPI/Kerberos, or Digest-MD5). If an SSF layer is
not available, then it should be combined with the x509 VNC authentication
protocol which provides encryption.
eg, if using GSSAPI
qemu -vnc localhost:1,sasl
eg if using TLS/x509 for encryption
qemu -vnc localhost:1,sasl,tls,x509
By default the Cyrus SASL library will look for its configuration in
the file /etc/sasl2/qemu.conf. For non-root users, this can be overridden
by setting the SASL_CONF_PATH environment variable, eg to make it look in
$HOME/.sasl2. NB unprivileged users may not have access to the full range
of SASL mechanisms, since some of them require some administrative privileges
to configure. The patch includes an example SASL configuration file which
illustrates config for GSSAPI and Digest-MD5, though it should be noted that
the latter is not really considered secure any more.
Most of the SASL authentication code is located in a separate source file,
vnc-auth-sasl.c. The main vnc.c file only contains minimal integration
glue, specifically parsing of command line flags / setup, and calls to
start the SASL auth process, to do encoding/decoding for data.
There are several possible stacks for reading & writing of data, depending
on the combo of VNC authentication methods in use
- Clear. read/write straight to socket
- TLS. read/write via GNUTLS helpers
- SASL. encode/decode via SASL SSF layer, then read/write to socket
- SASL+TLS. encode/decode via SASL SSF layer, then read/write via GNUTLS
Hence, the vnc_client_read & vnc_client_write methods have been refactored
a little.
vnc_client_read: main entry point for reading, calls either
- vnc_client_read_plain reading, with no intermediate decoding
- vnc_client_read_sasl reading, with SASL SSF decoding
These two methods, then call vnc_client_read_buf(). This decides
whether to write to the socket directly or write via GNUTLS.
The situation is the same for writing data. More extensive comments
have been added in the code / patch. The vnc_client_read_sasl and
vnc_client_write_sasl method implementations live in the separate
vnc-auth-sasl.c file.
The state required for the SASL auth mechanism is kept in a separate
VncStateSASL struct, defined in vnc-auth-sasl.h and included in the
main VncState.
The configure script probes for SASL and automatically enables it
if found, unless --disable-vnc-sasl was given to override it.
Makefile | 7
Makefile.target | 5
b/qemu.sasl | 34 ++
b/vnc-auth-sasl.c | 626 ++++++++++++++++++++++++++++++++++++++++++++++++++++
b/vnc-auth-sasl.h | 67 +++++
configure | 34 ++
qemu-doc.texi | 97 ++++++++
vnc-auth-vencrypt.c | 12
vnc.c | 249 ++++++++++++++++++--
vnc.h | 31 ++
10 files changed, 1129 insertions(+), 33 deletions(-)
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6724 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-07 04:27:28 +08:00
|
|
|
fi
|
2009-08-13 00:20:29 +08:00
|
|
|
vnc_sasl=no
|
|
|
|
fi
|
Add SASL authentication support ("Daniel P. Berrange")
This patch adds the new SASL authentication protocol to the VNC server.
It is enabled by setting the 'sasl' flag when launching VNC. SASL can
optionally provide encryption via its SSF layer, if a suitable mechanism
is configured (eg, GSSAPI/Kerberos, or Digest-MD5). If an SSF layer is
not available, then it should be combined with the x509 VNC authentication
protocol which provides encryption.
eg, if using GSSAPI
qemu -vnc localhost:1,sasl
eg if using TLS/x509 for encryption
qemu -vnc localhost:1,sasl,tls,x509
By default the Cyrus SASL library will look for its configuration in
the file /etc/sasl2/qemu.conf. For non-root users, this can be overridden
by setting the SASL_CONF_PATH environment variable, eg to make it look in
$HOME/.sasl2. NB unprivileged users may not have access to the full range
of SASL mechanisms, since some of them require some administrative privileges
to configure. The patch includes an example SASL configuration file which
illustrates config for GSSAPI and Digest-MD5, though it should be noted that
the latter is not really considered secure any more.
Most of the SASL authentication code is located in a separate source file,
vnc-auth-sasl.c. The main vnc.c file only contains minimal integration
glue, specifically parsing of command line flags / setup, and calls to
start the SASL auth process, to do encoding/decoding for data.
There are several possible stacks for reading & writing of data, depending
on the combo of VNC authentication methods in use
- Clear. read/write straight to socket
- TLS. read/write via GNUTLS helpers
- SASL. encode/decode via SASL SSF layer, then read/write to socket
- SASL+TLS. encode/decode via SASL SSF layer, then read/write via GNUTLS
Hence, the vnc_client_read & vnc_client_write methods have been refactored
a little.
vnc_client_read: main entry point for reading, calls either
- vnc_client_read_plain reading, with no intermediate decoding
- vnc_client_read_sasl reading, with SASL SSF decoding
These two methods, then call vnc_client_read_buf(). This decides
whether to write to the socket directly or write via GNUTLS.
The situation is the same for writing data. More extensive comments
have been added in the code / patch. The vnc_client_read_sasl and
vnc_client_write_sasl method implementations live in the separate
vnc-auth-sasl.c file.
The state required for the SASL auth mechanism is kept in a separate
VncStateSASL struct, defined in vnc-auth-sasl.h and included in the
main VncState.
The configure script probes for SASL and automatically enables it
if found, unless --disable-vnc-sasl was given to override it.
Makefile | 7
Makefile.target | 5
b/qemu.sasl | 34 ++
b/vnc-auth-sasl.c | 626 ++++++++++++++++++++++++++++++++++++++++++++++++++++
b/vnc-auth-sasl.h | 67 +++++
configure | 34 ++
qemu-doc.texi | 97 ++++++++
vnc-auth-vencrypt.c | 12
vnc.c | 249 ++++++++++++++++++--
vnc.h | 31 ++
10 files changed, 1129 insertions(+), 33 deletions(-)
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6724 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-07 04:27:28 +08:00
|
|
|
fi
|
|
|
|
|
2010-07-08 02:57:49 +08:00
|
|
|
##########################################
|
|
|
|
# VNC JPEG detection
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
|
2010-07-08 02:57:49 +08:00
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <jpeglib.h>
|
|
|
|
int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
|
|
|
|
EOF
|
|
|
|
vnc_jpeg_cflags=""
|
|
|
|
vnc_jpeg_libs="-ljpeg"
|
|
|
|
if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
|
|
|
|
vnc_jpeg=yes
|
|
|
|
libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
|
2012-12-20 19:29:19 +08:00
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
|
2010-07-08 02:57:49 +08:00
|
|
|
else
|
|
|
|
if test "$vnc_jpeg" = "yes" ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
|
2010-07-08 02:57:49 +08:00
|
|
|
fi
|
|
|
|
vnc_jpeg=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2010-07-08 02:57:56 +08:00
|
|
|
##########################################
|
|
|
|
# VNC PNG detection
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
|
2010-07-08 02:57:56 +08:00
|
|
|
cat > $TMPC <<EOF
|
|
|
|
//#include <stdio.h>
|
|
|
|
#include <png.h>
|
2010-10-06 03:28:17 +08:00
|
|
|
#include <stddef.h>
|
2010-07-08 02:57:56 +08:00
|
|
|
int main(void) {
|
|
|
|
png_structp png_ptr;
|
|
|
|
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
2012-07-18 22:10:24 +08:00
|
|
|
return png_ptr != 0;
|
2010-07-08 02:57:56 +08:00
|
|
|
}
|
|
|
|
EOF
|
2013-08-28 03:09:13 +08:00
|
|
|
if $pkg_config libpng --exists; then
|
2016-05-16 21:10:20 +08:00
|
|
|
vnc_png_cflags=$($pkg_config libpng --cflags)
|
|
|
|
vnc_png_libs=$($pkg_config libpng --libs)
|
2011-07-30 13:45:55 +08:00
|
|
|
else
|
2010-07-08 02:57:56 +08:00
|
|
|
vnc_png_cflags=""
|
|
|
|
vnc_png_libs="-lpng"
|
2011-07-30 13:45:55 +08:00
|
|
|
fi
|
2010-07-08 02:57:56 +08:00
|
|
|
if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
|
|
|
|
vnc_png=yes
|
|
|
|
libs_softmmu="$vnc_png_libs $libs_softmmu"
|
2011-07-30 13:45:55 +08:00
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
|
2010-07-08 02:57:56 +08:00
|
|
|
else
|
|
|
|
if test "$vnc_png" = "yes" ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "vnc-png" "Install libpng devel"
|
2010-07-08 02:57:56 +08:00
|
|
|
fi
|
|
|
|
vnc_png=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2017-10-05 23:33:28 +08:00
|
|
|
##########################################
|
|
|
|
# xkbcommon probe
|
|
|
|
if test "$xkbcommon" != "no" ; then
|
|
|
|
if $pkg_config xkbcommon --exists; then
|
|
|
|
xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
|
|
|
|
xkbcommon_libs=$($pkg_config xkbcommon --libs)
|
|
|
|
xkbcommon=yes
|
|
|
|
else
|
|
|
|
if test "$xkbcommon" = "yes" ; then
|
|
|
|
feature_not_found "xkbcommon" "Install libxkbcommon-devel"
|
|
|
|
fi
|
|
|
|
xkbcommon=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
Support ACLs for controlling VNC access ("Daniel P. Berrange")
This patch introduces a generic internal API for access control lists
to be used by network servers in QEMU. It adds support for checking
these ACL in the VNC server, in two places. The first ACL is for the
SASL authentication mechanism, checking the SASL username. This ACL
is called 'vnc.username'. The second is for the TLS authentication
mechanism, when x509 client certificates are turned on, checking against
the Distinguished Name of the client. This ACL is called 'vnc.x509dname'
The internal API provides for an ACL with the following characteristics
- A unique name, eg vnc.username, and vnc.x509dname.
- A default policy, allow or deny
- An ordered series of match rules, with allow or deny policy
If none of the match rules apply, then the default policy is
used.
There is a monitor API to manipulate the ACLs, which I'll describe via
examples
(qemu) acl show vnc.username
policy: allow
(qemu) acl policy vnc.username denya
acl: policy set to 'deny'
(qemu) acl allow vnc.username fred
acl: added rule at position 1
(qemu) acl allow vnc.username bob
acl: added rule at position 2
(qemu) acl allow vnc.username joe 1
acl: added rule at position 1
(qemu) acl show vnc.username
policy: deny
0: allow fred
1: allow joe
2: allow bob
(qemu) acl show vnc.x509dname
policy: allow
(qemu) acl policy vnc.x509dname deny
acl: policy set to 'deny'
(qemu) acl allow vnc.x509dname C=GB,O=ACME,L=London,CN=*
acl: added rule at position 1
(qemu) acl allow vnc.x509dname C=GB,O=ACME,L=Boston,CN=bob
acl: added rule at position 2
(qemu) acl show vnc.x509dname
policy: deny
0: allow C=GB,O=ACME,L=London,CN=*
1: allow C=GB,O=ACME,L=Boston,CN=bob
By default the VNC server will not use any ACLs, allowing access to
the server if the user successfully authenticates. To enable use of
ACLs to restrict user access, the ',acl' flag should be given when
starting QEMU. The initial ACL activated will be a 'deny all' policy
and should be customized using monitor commands.
eg enable SASL auth and ACLs
qemu .... -vnc localhost:1,sasl,acl
The next patch will provide a way to load a pre-defined ACL when
starting up
Makefile | 6 +
b/acl.c | 185 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
b/acl.h | 74 ++++++++++++++++++++++
configure | 18 +++++
monitor.c | 95 ++++++++++++++++++++++++++++
qemu-doc.texi | 49 ++++++++++++++
vnc-auth-sasl.c | 16 +++-
vnc-auth-sasl.h | 7 ++
vnc-tls.c | 19 +++++
vnc-tls.h | 3
vnc.c | 21 ++++++
vnc.h | 3
12 files changed, 491 insertions(+), 5 deletions(-)
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6726 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-07 04:27:37 +08:00
|
|
|
|
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
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
|
2010-12-17 18:41:15 +08:00
|
|
|
fi
|
|
|
|
xfs=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2008-07-19 17:56:24 +08:00
|
|
|
##########################################
|
|
|
|
# vde libraries probe
|
2009-08-13 00:20:27 +08:00
|
|
|
if test "$vde" != "no" ; then
|
2009-07-27 22:13:19 +08:00
|
|
|
vde_libs="-lvdeplug"
|
2008-07-19 17:56:24 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <libvdeplug.h>
|
2008-09-08 00:42:53 +08:00
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
struct vde_open_args a = {0, 0, 0};
|
2012-07-18 22:10:25 +08:00
|
|
|
char s[] = "";
|
|
|
|
vde_open(s, s, &a);
|
2008-09-08 00:42:53 +08:00
|
|
|
return 0;
|
|
|
|
}
|
2008-07-19 17:56:24 +08:00
|
|
|
EOF
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "" "$vde_libs" ; then
|
2009-07-27 22:13:19 +08:00
|
|
|
vde=yes
|
2009-08-13 00:20:27 +08:00
|
|
|
else
|
|
|
|
if test "$vde" = "yes" ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
|
2009-08-13 00:20:27 +08:00
|
|
|
fi
|
|
|
|
vde=no
|
2009-07-27 22:13:19 +08:00
|
|
|
fi
|
2008-07-19 17:56:24 +08:00
|
|
|
fi
|
|
|
|
|
2013-11-06 18:44:06 +08:00
|
|
|
##########################################
|
2014-02-20 22:40:43 +08:00
|
|
|
# netmap support probe
|
|
|
|
# Apart from looking for netmap headers, we make sure that the host API version
|
|
|
|
# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
|
|
|
|
# a minor/major version number. Minor new features will be marked with values up
|
|
|
|
# to 15, and if something happens that requires a change to the backend we will
|
|
|
|
# move above 15, submit the backend fixes and modify this two bounds.
|
2013-11-06 18:44:06 +08:00
|
|
|
if test "$netmap" != "no" ; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <inttypes.h>
|
|
|
|
#include <net/if.h>
|
|
|
|
#include <net/netmap.h>
|
|
|
|
#include <net/netmap_user.h>
|
2014-02-20 22:40:43 +08:00
|
|
|
#if (NETMAP_API < 11) || (NETMAP_API > 15)
|
|
|
|
#error
|
|
|
|
#endif
|
2013-11-06 18:44:06 +08:00
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
netmap=yes
|
|
|
|
else
|
|
|
|
if test "$netmap" = "yes" ; then
|
|
|
|
feature_not_found "netmap"
|
|
|
|
fi
|
|
|
|
netmap=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2012-01-26 22:42:26 +08:00
|
|
|
##########################################
|
|
|
|
# libcap-ng library probe
|
|
|
|
if test "$cap_ng" != "no" ; then
|
|
|
|
cap_libs="-lcap-ng"
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <cap-ng.h>
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
capng_capability_to_name(CAPNG_EFFECTIVE);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "$cap_libs" ; then
|
|
|
|
cap_ng=yes
|
|
|
|
libs_tools="$cap_libs $libs_tools"
|
|
|
|
else
|
|
|
|
if test "$cap_ng" = "yes" ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "cap_ng" "Install libcap-ng devel"
|
2012-01-26 22:42:26 +08:00
|
|
|
fi
|
|
|
|
cap_ng=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2007-01-06 05:25:54 +08:00
|
|
|
##########################################
|
2008-06-29 03:13:06 +08:00
|
|
|
# Sound support libraries probe
|
2007-01-06 05:25:54 +08:00
|
|
|
|
2016-05-16 21:10:20 +08:00
|
|
|
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
|
2008-06-29 03:13:06 +08:00
|
|
|
for drv in $audio_drv_list; do
|
|
|
|
case $drv in
|
2019-01-24 19:20:51 +08:00
|
|
|
alsa | try-alsa)
|
2019-01-24 19:20:50 +08:00
|
|
|
if $pkg_config alsa --exists; then
|
|
|
|
alsa_libs=$($pkg_config alsa --libs)
|
2019-01-24 19:20:51 +08:00
|
|
|
if test "$drv" = "try-alsa"; then
|
|
|
|
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
|
|
|
|
fi
|
2019-01-24 19:20:50 +08:00
|
|
|
else
|
2019-01-24 19:20:51 +08:00
|
|
|
if test "$drv" = "try-alsa"; then
|
|
|
|
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
|
|
|
|
else
|
|
|
|
error_exit "$drv check failed" \
|
|
|
|
"Make sure to have the $drv libs and headers installed."
|
|
|
|
fi
|
2019-01-24 19:20:50 +08:00
|
|
|
fi
|
2008-06-29 03:13:06 +08:00
|
|
|
;;
|
|
|
|
|
2019-01-24 19:20:51 +08:00
|
|
|
pa | try-pa)
|
2019-01-24 19:20:50 +08:00
|
|
|
if $pkg_config libpulse --exists; then
|
|
|
|
pulse_libs=$($pkg_config libpulse --libs)
|
|
|
|
audio_pt_int="yes"
|
2019-01-24 19:20:51 +08:00
|
|
|
if test "$drv" = "try-pa"; then
|
|
|
|
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
|
|
|
|
fi
|
2019-01-24 19:20:50 +08:00
|
|
|
else
|
2019-01-24 19:20:51 +08:00
|
|
|
if test "$drv" = "try-pa"; then
|
|
|
|
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
|
|
|
|
else
|
|
|
|
error_exit "$drv check failed" \
|
|
|
|
"Make sure to have the $drv libs and headers installed."
|
|
|
|
fi
|
2019-01-24 19:20:50 +08:00
|
|
|
fi
|
2008-07-03 05:03:08 +08:00
|
|
|
;;
|
|
|
|
|
2017-03-20 17:05:43 +08:00
|
|
|
sdl)
|
|
|
|
if test "$sdl" = "no"; then
|
|
|
|
error_exit "sdl not found or disabled, can not use sdl audio driver"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
|
2019-01-24 19:20:51 +08:00
|
|
|
try-sdl)
|
|
|
|
if test "$sdl" = "no"; then
|
|
|
|
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
|
|
|
|
else
|
|
|
|
audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
|
2009-08-03 20:46:29 +08:00
|
|
|
coreaudio)
|
2017-09-07 16:29:13 +08:00
|
|
|
coreaudio_libs="-framework CoreAudio"
|
2009-08-03 20:46:29 +08:00
|
|
|
;;
|
|
|
|
|
2009-08-03 20:46:30 +08:00
|
|
|
dsound)
|
2017-09-07 16:29:13 +08:00
|
|
|
dsound_libs="-lole32 -ldxguid"
|
2009-10-10 05:13:41 +08:00
|
|
|
audio_win_int="yes"
|
2009-08-03 20:46:30 +08:00
|
|
|
;;
|
|
|
|
|
|
|
|
oss)
|
2017-09-07 16:29:13 +08:00
|
|
|
oss_libs="$oss_lib"
|
2009-08-03 20:46:30 +08:00
|
|
|
;;
|
|
|
|
|
2008-07-20 00:15:16 +08:00
|
|
|
*)
|
2008-07-20 00:57:30 +08:00
|
|
|
echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "Unknown driver '$drv' selected" \
|
|
|
|
"Possible drivers are: $audio_possible_drivers"
|
2008-07-20 00:15:16 +08:00
|
|
|
}
|
|
|
|
;;
|
2008-06-29 03:13:06 +08:00
|
|
|
esac
|
|
|
|
done
|
2007-01-06 05:25:54 +08:00
|
|
|
|
2008-04-08 14:01:02 +08:00
|
|
|
##########################################
|
|
|
|
# BrlAPI probe
|
|
|
|
|
2009-08-13 00:20:26 +08:00
|
|
|
if test "$brlapi" != "no" ; then
|
2009-07-27 22:13:18 +08:00
|
|
|
brlapi_libs="-lbrlapi"
|
|
|
|
cat > $TMPC << EOF
|
2008-04-08 14:01:02 +08:00
|
|
|
#include <brlapi.h>
|
2010-10-06 03:28:17 +08:00
|
|
|
#include <stddef.h>
|
2008-04-08 14:01:02 +08:00
|
|
|
int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
|
|
|
|
EOF
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "" "$brlapi_libs" ; then
|
2009-07-27 22:13:18 +08:00
|
|
|
brlapi=yes
|
2009-08-13 00:20:26 +08:00
|
|
|
else
|
|
|
|
if test "$brlapi" = "yes" ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "brlapi" "Install brlapi devel"
|
2009-08-13 00:20:26 +08:00
|
|
|
fi
|
|
|
|
brlapi=no
|
2009-07-27 22:13:18 +08:00
|
|
|
fi
|
|
|
|
fi
|
2008-04-08 14:01:02 +08:00
|
|
|
|
2019-03-11 21:51:26 +08:00
|
|
|
##########################################
|
|
|
|
# iconv probe
|
|
|
|
if test "$iconv" != "no" ; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <iconv.h>
|
|
|
|
int main(void) {
|
|
|
|
iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
|
|
|
|
return conv != (iconv_t) -1;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
iconv_prefix_list="/usr/local:/usr"
|
|
|
|
iconv_lib_list=":-liconv"
|
|
|
|
IFS=:
|
|
|
|
for iconv_prefix in $iconv_prefix_list; do
|
|
|
|
IFS=:
|
|
|
|
iconv_cflags="-I$iconv_prefix/include"
|
|
|
|
iconv_ldflags="-L$iconv_prefix/lib"
|
|
|
|
for iconv_link in $iconv_lib_list; do
|
|
|
|
unset IFS
|
|
|
|
iconv_lib="$iconv_ldflags $iconv_link"
|
|
|
|
echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
|
|
|
|
if compile_prog "$iconv_cflags" "$iconv_lib" ; then
|
|
|
|
iconv_found=yes
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
if test "$iconv_found" = yes ; then
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
if test "$iconv_found" = "yes" ; then
|
|
|
|
iconv=yes
|
|
|
|
else
|
|
|
|
if test "$iconv" = "yes" ; then
|
|
|
|
feature_not_found "iconv" "Install iconv devel"
|
|
|
|
fi
|
|
|
|
iconv=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2008-02-11 00:33:14 +08:00
|
|
|
##########################################
|
|
|
|
# curses probe
|
2019-03-11 21:51:26 +08:00
|
|
|
if test "$iconv" = "no" ; then
|
|
|
|
# curses will need iconv
|
|
|
|
curses=no
|
|
|
|
fi
|
2013-05-25 17:17:21 +08:00
|
|
|
if test "$curses" != "no" ; then
|
|
|
|
if test "$mingw32" = "yes" ; then
|
2016-10-16 03:53:05 +08:00
|
|
|
curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
|
|
|
|
curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
|
2013-05-25 17:17:21 +08:00
|
|
|
else
|
2016-11-09 18:27:52 +08:00
|
|
|
curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
|
2016-10-16 03:53:05 +08:00
|
|
|
curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
|
2013-05-25 17:17:21 +08:00
|
|
|
fi
|
2009-08-13 00:20:30 +08:00
|
|
|
curses_found=no
|
2008-02-11 00:33:14 +08:00
|
|
|
cat > $TMPC << EOF
|
2016-10-16 03:53:05 +08:00
|
|
|
#include <locale.h>
|
2008-02-11 00:33:14 +08:00
|
|
|
#include <curses.h>
|
2016-10-16 03:53:05 +08:00
|
|
|
#include <wchar.h>
|
2019-03-11 21:51:27 +08:00
|
|
|
#include <langinfo.h>
|
2011-12-18 00:46:02 +08:00
|
|
|
int main(void) {
|
2019-03-11 21:51:27 +08:00
|
|
|
const char *codeset;
|
2016-10-16 03:53:05 +08:00
|
|
|
wchar_t wch = L'w';
|
|
|
|
setlocale(LC_ALL, "");
|
2011-12-18 00:46:02 +08:00
|
|
|
resize_term(0, 0);
|
2016-10-16 03:53:05 +08:00
|
|
|
addwstr(L"wide chars\n");
|
|
|
|
addnwstr(&wch, 1);
|
2016-11-09 18:27:52 +08:00
|
|
|
add_wch(WACS_DEGREE);
|
2019-03-11 21:51:27 +08:00
|
|
|
codeset = nl_langinfo(CODESET);
|
|
|
|
return codeset != 0;
|
2011-12-18 00:46:02 +08:00
|
|
|
}
|
2008-02-11 00:33:14 +08:00
|
|
|
EOF
|
2013-01-15 20:17:24 +08:00
|
|
|
IFS=:
|
2016-10-16 03:53:05 +08:00
|
|
|
for curses_inc in $curses_inc_list; do
|
2017-06-02 22:35:38 +08:00
|
|
|
# Make sure we get the wide character prototypes
|
|
|
|
curses_inc="-DNCURSES_WIDECHAR $curses_inc"
|
2016-11-09 18:27:52 +08:00
|
|
|
IFS=:
|
2016-10-16 03:53:05 +08:00
|
|
|
for curses_lib in $curses_lib_list; do
|
|
|
|
unset IFS
|
|
|
|
if compile_prog "$curses_inc" "$curses_lib" ; then
|
|
|
|
curses_found=yes
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
2016-11-09 18:27:52 +08:00
|
|
|
if test "$curses_found" = yes ; then
|
|
|
|
break
|
|
|
|
fi
|
2009-08-13 00:20:23 +08:00
|
|
|
done
|
2013-01-15 20:17:24 +08:00
|
|
|
unset IFS
|
2009-08-13 00:20:30 +08:00
|
|
|
if test "$curses_found" = "yes" ; then
|
|
|
|
curses=yes
|
|
|
|
else
|
|
|
|
if test "$curses" = "yes" ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "curses" "Install ncurses devel"
|
2009-08-13 00:20:30 +08:00
|
|
|
fi
|
|
|
|
curses=no
|
|
|
|
fi
|
2009-08-13 00:20:23 +08:00
|
|
|
fi
|
2008-02-11 00:33:14 +08:00
|
|
|
|
2009-05-11 23:41:42 +08:00
|
|
|
##########################################
|
|
|
|
# curl probe
|
2009-08-13 00:29:47 +08:00
|
|
|
if test "$curl" != "no" ; then
|
2013-08-28 03:09:13 +08:00
|
|
|
if $pkg_config libcurl --exists; then
|
2013-05-25 17:17:21 +08:00
|
|
|
curlconfig="$pkg_config libcurl"
|
|
|
|
else
|
|
|
|
curlconfig=curl-config
|
|
|
|
fi
|
2009-05-11 23:41:42 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <curl/curl.h>
|
2011-06-10 05:54:29 +08:00
|
|
|
int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
|
2009-05-11 23:41:42 +08:00
|
|
|
EOF
|
2016-05-16 21:10:20 +08:00
|
|
|
curl_cflags=$($curlconfig --cflags 2>/dev/null)
|
|
|
|
curl_libs=$($curlconfig --libs 2>/dev/null)
|
2009-08-03 20:46:05 +08:00
|
|
|
if compile_prog "$curl_cflags" "$curl_libs" ; then
|
2009-05-11 23:41:42 +08:00
|
|
|
curl=yes
|
2009-08-13 00:29:47 +08:00
|
|
|
else
|
|
|
|
if test "$curl" = "yes" ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "curl" "Install libcurl devel"
|
2009-08-13 00:29:47 +08:00
|
|
|
fi
|
|
|
|
curl=no
|
2009-05-11 23:41:42 +08:00
|
|
|
fi
|
|
|
|
fi # test "$curl"
|
|
|
|
|
2008-09-29 07:49:55 +08:00
|
|
|
##########################################
|
|
|
|
# bluez support probe
|
2009-08-13 00:29:50 +08:00
|
|
|
if test "$bluez" != "no" ; then
|
2008-09-30 10:27:44 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <bluetooth/bluetooth.h>
|
|
|
|
int main(void) { return bt_error(0); }
|
|
|
|
EOF
|
2016-05-16 21:10:20 +08:00
|
|
|
bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
|
|
|
|
bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "$bluez_cflags" "$bluez_libs" ; then
|
2009-08-13 00:29:50 +08:00
|
|
|
bluez=yes
|
2009-08-03 20:46:37 +08:00
|
|
|
libs_softmmu="$bluez_libs $libs_softmmu"
|
2008-09-30 10:27:44 +08:00
|
|
|
else
|
2009-08-13 00:29:50 +08:00
|
|
|
if test "$bluez" = "yes" ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
|
2009-08-13 00:29:50 +08:00
|
|
|
fi
|
2008-09-30 10:27:44 +08:00
|
|
|
bluez="no"
|
|
|
|
fi
|
2008-09-29 07:49:55 +08:00
|
|
|
fi
|
|
|
|
|
2011-07-20 03:50:29 +08:00
|
|
|
##########################################
|
|
|
|
# glib support probe
|
2012-04-05 19:01:54 +08:00
|
|
|
|
2018-05-04 22:34:46 +08:00
|
|
|
glib_req_ver=2.40
|
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"
|
2014-02-26 00:36:55 +08:00
|
|
|
fi
|
2014-02-10 14:48:57 +08:00
|
|
|
|
2017-03-26 17:56:22 +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
|
|
|
|
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$static" = yes && test "$mingw32" = yes; then
|
2017-03-26 17:56:22 +08:00
|
|
|
QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
|
|
|
|
fi
|
|
|
|
|
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)
|
2016-09-26 04:57:48 +08:00
|
|
|
QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
|
2014-02-10 14:48:57 +08:00
|
|
|
LIBS="$glib_libs $LIBS"
|
|
|
|
libs_qga="$glib_libs $libs_qga"
|
|
|
|
else
|
|
|
|
error_exit "glib-$glib_req_ver $i is required to compile QEMU"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2019-02-21 19:07:00 +08:00
|
|
|
if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
|
|
|
|
gio=yes
|
|
|
|
gio_cflags=$($pkg_config --cflags gio-2.0)
|
|
|
|
gio_libs=$($pkg_config --libs gio-2.0)
|
|
|
|
else
|
|
|
|
gio=no
|
|
|
|
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
|
|
|
|
|
2016-04-29 05:33:41 +08:00
|
|
|
if ! compile_prog "$CFLAGS" "$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
|
|
|
|
|
2015-03-26 06:57:38 +08:00
|
|
|
# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <glib.h>
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
|
|
|
if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
|
|
|
|
if cc_has_warning_flag "-Wno-unknown-attributes"; then
|
|
|
|
glib_cflags="-Wno-unknown-attributes $glib_cflags"
|
|
|
|
CFLAGS="-Wno-unknown-attributes $CFLAGS"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2018-07-13 03:26:03 +08:00
|
|
|
#########################################
|
|
|
|
# zlib check
|
|
|
|
|
|
|
|
if test "$zlib" != "no" ; then
|
|
|
|
if $pkg_config --exists zlib; then
|
|
|
|
zlib_cflags=$($pkg_config --cflags zlib)
|
|
|
|
zlib_libs=$($pkg_config --libs zlib)
|
|
|
|
QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
|
|
|
|
LIBS="$zlib_libs $LIBS"
|
|
|
|
else
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <zlib.h>
|
|
|
|
int main(void) { zlibVersion(); return 0; }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "-lz" ; then
|
|
|
|
LIBS="$LIBS -lz"
|
|
|
|
else
|
|
|
|
error_exit "zlib check failed" \
|
|
|
|
"Make sure to have the zlib libs and headers installed."
|
|
|
|
fi
|
|
|
|
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
|
|
|
|
|
2012-09-25 22:04:58 +08:00
|
|
|
##########################################
|
|
|
|
# pixman support probe
|
|
|
|
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$want_tools" = "no" && test "$softmmu" = "no"; then
|
2012-12-04 23:58:08 +08:00
|
|
|
pixman_cflags=
|
|
|
|
pixman_libs=
|
2017-09-05 22:01:16 +08:00
|
|
|
elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
|
2016-05-16 21:10:20 +08:00
|
|
|
pixman_cflags=$($pkg_config --cflags pixman-1)
|
|
|
|
pixman_libs=$($pkg_config --libs pixman-1)
|
2012-09-25 22:04:58 +08:00
|
|
|
else
|
2017-09-05 22:01:15 +08:00
|
|
|
error_exit "pixman >= 0.21.8 not present." \
|
|
|
|
"Please install the pixman devel package."
|
2012-09-25 22:04:58 +08:00
|
|
|
fi
|
|
|
|
|
2017-08-22 12:50:55 +08:00
|
|
|
##########################################
|
|
|
|
# libmpathpersist probe
|
|
|
|
|
|
|
|
if test "$mpath" != "no" ; then
|
2018-08-10 22:11:16 +08:00
|
|
|
# probe for the new API
|
2017-08-22 12:50:55 +08:00
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <libudev.h>
|
|
|
|
#include <mpath_persist.h>
|
|
|
|
unsigned mpath_mx_alloc_len = 1024;
|
|
|
|
int logsink;
|
2017-10-18 02:11:58 +08:00
|
|
|
static struct config *multipath_conf;
|
|
|
|
extern struct udev *udev;
|
|
|
|
extern struct config *get_multipath_config(void);
|
|
|
|
extern void put_multipath_config(struct config *conf);
|
|
|
|
struct udev *udev;
|
|
|
|
struct config *get_multipath_config(void) { return multipath_conf; }
|
|
|
|
void put_multipath_config(struct config *conf) { }
|
|
|
|
|
2017-08-22 12:50:55 +08:00
|
|
|
int main(void) {
|
2017-10-18 02:11:58 +08:00
|
|
|
udev = udev_new();
|
|
|
|
multipath_conf = mpath_lib_init();
|
2017-08-22 12:50:55 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
|
|
|
|
mpathpersist=yes
|
2018-08-10 22:11:16 +08:00
|
|
|
mpathpersist_new_api=yes
|
2017-08-22 12:50:55 +08:00
|
|
|
else
|
2018-08-10 22:11:16 +08:00
|
|
|
# probe for the old API
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <libudev.h>
|
|
|
|
#include <mpath_persist.h>
|
|
|
|
unsigned mpath_mx_alloc_len = 1024;
|
|
|
|
int logsink;
|
|
|
|
int main(void) {
|
|
|
|
struct udev *udev = udev_new();
|
|
|
|
mpath_lib_init(udev);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
|
|
|
|
mpathpersist=yes
|
|
|
|
mpathpersist_new_api=no
|
|
|
|
else
|
|
|
|
mpathpersist=no
|
|
|
|
fi
|
2017-08-22 12:50:55 +08:00
|
|
|
fi
|
|
|
|
else
|
|
|
|
mpathpersist=no
|
|
|
|
fi
|
|
|
|
|
2011-12-14 16:28:42 +08:00
|
|
|
##########################################
|
|
|
|
# libcap probe
|
|
|
|
|
|
|
|
if test "$cap" != "no" ; then
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <sys/capability.h>
|
2012-07-18 22:10:20 +08:00
|
|
|
int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
|
2011-12-14 16:28:42 +08:00
|
|
|
EOF
|
|
|
|
if compile_prog "" "-lcap" ; then
|
|
|
|
cap=yes
|
|
|
|
else
|
|
|
|
cap=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2008-08-16 02:20:52 +08:00
|
|
|
##########################################
|
2009-04-25 02:03:15 +08:00
|
|
|
# pthread probe
|
2011-08-08 08:02:11 +08:00
|
|
|
PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
|
2008-12-13 00:41:40 +08:00
|
|
|
|
2009-08-11 05:39:39 +08:00
|
|
|
pthread=no
|
2009-04-25 02:03:15 +08:00
|
|
|
cat > $TMPC << EOF
|
2008-12-13 00:41:40 +08:00
|
|
|
#include <pthread.h>
|
2011-12-17 16:27:32 +08:00
|
|
|
static void *f(void *p) { return NULL; }
|
|
|
|
int main(void) {
|
|
|
|
pthread_t thread;
|
|
|
|
pthread_create(&thread, 0, f, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
2008-08-16 02:20:52 +08:00
|
|
|
EOF
|
2010-09-20 06:50:44 +08:00
|
|
|
if compile_prog "" "" ; then
|
|
|
|
pthread=yes
|
|
|
|
else
|
|
|
|
for pthread_lib in $PTHREADLIBS_LIST; do
|
|
|
|
if compile_prog "" "$pthread_lib" ; then
|
|
|
|
pthread=yes
|
2012-04-20 22:36:12 +08:00
|
|
|
found=no
|
|
|
|
for lib_entry in $LIBS; do
|
|
|
|
if test "$lib_entry" = "$pthread_lib"; then
|
|
|
|
found=yes
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
if test "$found" = "no"; then
|
|
|
|
LIBS="$pthread_lib $LIBS"
|
2018-01-05 00:05:06 +08:00
|
|
|
libs_qga="$pthread_lib $libs_qga"
|
2012-04-20 22:36:12 +08:00
|
|
|
fi
|
tests: introduce a framework for testing migration performance
This introduces a moderately general purpose framework for
testing performance of migration.
The initial guest workload is provided by the included 'stress'
program, which is configured to spawn one thread per guest CPU
and run a maximally memory intensive workload. It will loop
over GB of memory, xor'ing each byte with data from a 4k array
of random bytes. This ensures heavy read and write load across
all of guest memory to stress the migration performance. While
running the 'stress' program will record how long it takes to
xor each GB of memory and print this data for later reporting.
The test engine will spawn a pair of QEMU processes, either on
the same host, or with the target on a remote host via ssh,
using the host kernel and a custom initrd built with 'stress'
as the /init binary. Kernel command line args are set to ensure
a fast kernel boot time (< 1 second) between launching QEMU and
the stress program starting execution.
None the less, the test engine will initially wait N seconds for
the guest workload to stablize, before starting the migration
operation. When migration is running, the engine will use pause,
post-copy, autoconverge, xbzrle compression and multithread
compression features, as well as downtime & bandwidth tuning
to encourage completion. If migration completes, the test engine
will wait N seconds again for the guest workooad to stablize on
the target host. If migration does not complete after a preset
number of iterations, it will be aborted.
While the QEMU process is running on the source host, the test
engine will sample the host CPU usage of QEMU as a whole, and
each vCPU thread. While migration is running, it will record
all the stats reported by 'query-migration'. Finally, it will
capture the output of the stress program running in the guest.
All the data produced from a single test execution is recorded
in a structured JSON file. A separate program is then able to
create interactive charts using the "plotly" python + javascript
libraries, showing the characteristics of the migration.
The data output provides visualization of the effect on guest
vCPU workloads from the migration process, the corresponding
vCPU utilization on the host, and the overall CPU hit from
QEMU on the host. This is correlated from statistics from the
migration process, such as downtime, vCPU throttling and iteration
number.
While the tests can be run individually with arbitrary parameters,
there is also a facility for producing batch reports for a number
of pre-defined scenarios / comparisons, in order to be able to
get standardized results across different hardware configurations
(eg TCP vs RDMA, or comparing different VCPU counts / memory
sizes, etc).
To use this, first you must build the initrd image
$ make tests/migration/initrd-stress.img
To run a a one-shot test with all default parameters
$ ./tests/migration/guestperf.py > result.json
This has many command line args for varying its behaviour.
For example, to increase the RAM size and CPU count and
bind it to specific host NUMA nodes
$ ./tests/migration/guestperf.py \
--mem 4 --cpus 2 \
--src-mem-bind 0 --src-cpu-bind 0,1 \
--dst-mem-bind 1 --dst-cpu-bind 2,3 \
> result.json
Using mem + cpu binding is strongly recommended on NUMA
machines, otherwise the guest performance results will
vary wildly between runs of the test due to lucky/unlucky
NUMA placement, making sensible data analysis impossible.
To make it run across separate hosts:
$ ./tests/migration/guestperf.py \
--dst-host somehostname > result.json
To request that post-copy is enabled, with switchover
after 5 iterations
$ ./tests/migration/guestperf.py \
--post-copy --post-copy-iters 5 > result.json
Once a result.json file is created, a graph of the data
can be generated, showing guest workload performance per
thread and the migration iteration points:
$ ./tests/migration/guestperf-plot.py --output result.html \
--migration-iters --split-guest-cpu result.json
To further include host vCPU utilization and overall QEMU
utilization
$ ./tests/migration/guestperf-plot.py --output result.html \
--migration-iters --split-guest-cpu \
--qemu-cpu --vcpu-cpu result.json
NB, the 'guestperf-plot.py' command requires that you have
the plotly python library installed. eg you must do
$ pip install --user plotly
Viewing the result.html file requires that you have the
plotly.min.js file in the same directory as the HTML
output. This js file is installed as part of the plotly
python library, so can be found in
$HOME/.local/lib/python2.7/site-packages/plotly/offline/plotly.min.js
The guestperf-plot.py program can accept multiple json files
to plot, enabling results from different configurations to
be compared.
Finally, to run the entire standardized set of comparisons
$ ./tests/migration/guestperf-batch.py \
--dst-host somehost \
--mem 4 --cpus 2 \
--src-mem-bind 0 --src-cpu-bind 0,1 \
--dst-mem-bind 1 --dst-cpu-bind 2,3
--output tcp-somehost-4gb-2cpu
will store JSON files from all scenarios in the directory
named tcp-somehost-4gb-2cpu
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <1469020993-29426-7-git-send-email-berrange@redhat.com>
Signed-off-by: Amit Shah <amit.shah@redhat.com>
2016-07-20 21:23:13 +08:00
|
|
|
PTHREAD_LIB="$pthread_lib"
|
2010-09-20 06:50:44 +08:00
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
2008-08-16 02:20:52 +08:00
|
|
|
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$mingw32" != yes && test "$pthread" = no; then
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "pthread check failed" \
|
|
|
|
"Make sure to have the pthread libs and headers installed."
|
2009-04-25 02:03:15 +08:00
|
|
|
fi
|
|
|
|
|
2018-12-18 04:26:01 +08:00
|
|
|
# check for pthread_setname_np with thread id
|
|
|
|
pthread_setname_np_w_tid=no
|
2014-03-12 19:48:18 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <pthread.h>
|
|
|
|
|
|
|
|
static void *f(void *p) { return NULL; }
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
pthread_t thread;
|
|
|
|
pthread_create(&thread, 0, f, 0);
|
|
|
|
pthread_setname_np(thread, "QEMU");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "$pthread_lib" ; then
|
2018-12-18 04:26:01 +08:00
|
|
|
pthread_setname_np_w_tid=yes
|
|
|
|
fi
|
|
|
|
|
|
|
|
# check for pthread_setname_np without thread id
|
|
|
|
pthread_setname_np_wo_tid=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <pthread.h>
|
|
|
|
|
|
|
|
static void *f(void *p) { pthread_setname_np("QEMU"); }
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
pthread_t thread;
|
|
|
|
pthread_create(&thread, 0, f, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "$pthread_lib" ; then
|
|
|
|
pthread_setname_np_wo_tid=yes
|
2014-03-12 19:48:18 +08:00
|
|
|
fi
|
|
|
|
|
2010-12-07 03:53:01 +08:00
|
|
|
##########################################
|
|
|
|
# rbd probe
|
|
|
|
if test "$rbd" != "no" ; then
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <stdio.h>
|
2011-05-27 07:07:31 +08:00
|
|
|
#include <rbd/librbd.h>
|
2010-12-07 03:53:01 +08:00
|
|
|
int main(void) {
|
2011-05-27 07:07:31 +08:00
|
|
|
rados_t cluster;
|
|
|
|
rados_create(&cluster, NULL);
|
2010-12-07 03:53:01 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2011-05-27 07:07:31 +08:00
|
|
|
rbd_libs="-lrbd -lrados"
|
|
|
|
if compile_prog "" "$rbd_libs" ; then
|
|
|
|
rbd=yes
|
2010-12-07 03:53:01 +08:00
|
|
|
else
|
|
|
|
if test "$rbd" = "yes" ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "rados block device" "Install librbd/ceph devel"
|
2010-12-07 03:53:01 +08:00
|
|
|
fi
|
|
|
|
rbd=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2013-04-09 22:30:53 +08:00
|
|
|
##########################################
|
2019-06-21 04:08:40 +08:00
|
|
|
# libssh probe
|
|
|
|
if test "$libssh" != "no" ; then
|
|
|
|
if $pkg_config --exists libssh; then
|
|
|
|
libssh_cflags=$($pkg_config libssh --cflags)
|
|
|
|
libssh_libs=$($pkg_config libssh --libs)
|
|
|
|
libssh=yes
|
2013-04-09 22:30:53 +08:00
|
|
|
else
|
2019-06-21 04:08:40 +08:00
|
|
|
if test "$libssh" = "yes" ; then
|
|
|
|
error_exit "libssh required for --enable-libssh"
|
2013-04-09 22:30:53 +08:00
|
|
|
fi
|
2019-06-21 04:08:40 +08:00
|
|
|
libssh=no
|
2013-04-09 22:30:53 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2013-04-09 22:30:54 +08:00
|
|
|
##########################################
|
2019-06-21 04:08:40 +08:00
|
|
|
# Check for libssh 0.8
|
|
|
|
# This is done like this instead of using the LIBSSH_VERSION_* and
|
|
|
|
# SSH_VERSION_* macros because some distributions in the past shipped
|
|
|
|
# snapshots of the future 0.8 from Git, and those snapshots did not
|
|
|
|
# have updated version numbers (still referring to 0.7.0).
|
2013-04-09 22:30:54 +08:00
|
|
|
|
2019-06-21 04:08:40 +08:00
|
|
|
if test "$libssh" = "yes"; then
|
2013-04-09 22:30:54 +08:00
|
|
|
cat > $TMPC <<EOF
|
2019-06-21 04:08:40 +08:00
|
|
|
#include <libssh/libssh.h>
|
|
|
|
int main(void) { return ssh_get_server_publickey(NULL, NULL); }
|
2013-04-09 22:30:54 +08:00
|
|
|
EOF
|
2019-06-21 04:08:40 +08:00
|
|
|
if compile_prog "$libssh_cflags" "$libssh_libs"; then
|
|
|
|
libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
|
2013-04-09 22:30:54 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2009-08-20 22:58:35 +08:00
|
|
|
##########################################
|
|
|
|
# linux-aio probe
|
|
|
|
|
|
|
|
if test "$linux_aio" != "no" ; then
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <libaio.h>
|
|
|
|
#include <sys/eventfd.h>
|
2010-10-06 03:28:17 +08:00
|
|
|
#include <stddef.h>
|
2009-08-20 22:58:35 +08:00
|
|
|
int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "-laio" ; then
|
|
|
|
linux_aio=yes
|
|
|
|
else
|
|
|
|
if test "$linux_aio" = "yes" ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "linux AIO" "Install libaio devel"
|
2009-08-20 22:58:35 +08:00
|
|
|
fi
|
2009-09-01 00:18:12 +08:00
|
|
|
linux_aio=no
|
2009-08-20 22:58:35 +08:00
|
|
|
fi
|
|
|
|
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
|
|
|
|
|
2010-06-15 04:34:41 +08:00
|
|
|
##########################################
|
|
|
|
# attr probe
|
|
|
|
|
|
|
|
if test "$attr" != "no" ; then
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <sys/types.h>
|
2011-11-11 04:26:59 +08:00
|
|
|
#ifdef CONFIG_LIBATTR
|
|
|
|
#include <attr/xattr.h>
|
|
|
|
#else
|
2011-11-09 20:44:52 +08:00
|
|
|
#include <sys/xattr.h>
|
2011-11-11 04:26:59 +08:00
|
|
|
#endif
|
2010-06-15 04:34:41 +08:00
|
|
|
int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
|
|
|
|
EOF
|
2011-11-09 20:44:52 +08:00
|
|
|
if compile_prog "" "" ; then
|
|
|
|
attr=yes
|
|
|
|
# Older distros have <attr/xattr.h>, and need -lattr:
|
2011-11-11 04:26:59 +08:00
|
|
|
elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
|
2010-06-15 04:34:41 +08:00
|
|
|
attr=yes
|
|
|
|
LIBS="-lattr $LIBS"
|
2011-11-09 20:44:52 +08:00
|
|
|
libattr=yes
|
2010-06-15 04:34:41 +08:00
|
|
|
else
|
|
|
|
if test "$attr" = "yes" ; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "ATTR" "Install libc6 or libattr devel"
|
2010-06-15 04:34:41 +08:00
|
|
|
fi
|
|
|
|
attr=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2008-12-06 04:05:26 +08:00
|
|
|
##########################################
|
|
|
|
# iovec probe
|
|
|
|
cat > $TMPC <<EOF
|
2009-01-15 02:03:53 +08:00
|
|
|
#include <sys/types.h>
|
2008-12-06 04:05:26 +08:00
|
|
|
#include <sys/uio.h>
|
2009-01-15 02:03:53 +08:00
|
|
|
#include <unistd.h>
|
2011-12-17 16:27:33 +08:00
|
|
|
int main(void) { return sizeof(struct iovec); }
|
2008-12-06 04:05:26 +08:00
|
|
|
EOF
|
|
|
|
iovec=no
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "" "" ; then
|
2008-12-06 04:05:26 +08:00
|
|
|
iovec=yes
|
|
|
|
fi
|
|
|
|
|
2009-04-08 02:43:28 +08:00
|
|
|
##########################################
|
|
|
|
# preadv probe
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/uio.h>
|
|
|
|
#include <unistd.h>
|
2012-08-10 04:21:25 +08:00
|
|
|
int main(void) { return preadv(0, 0, 0, 0); }
|
2009-04-08 02:43:28 +08:00
|
|
|
EOF
|
|
|
|
preadv=no
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "" "" ; then
|
2009-04-08 02:43:28 +08:00
|
|
|
preadv=yes
|
|
|
|
fi
|
|
|
|
|
2008-12-16 18:43:48 +08:00
|
|
|
##########################################
|
|
|
|
# fdt probe
|
2013-05-24 23:26:54 +08:00
|
|
|
# fdt support is mandatory for at least some target architectures,
|
|
|
|
# so insist on it if we're building those system emulators.
|
|
|
|
fdt_required=no
|
|
|
|
for target in $target_list; do
|
|
|
|
case $target in
|
2018-05-03 23:17:16 +08:00
|
|
|
aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
|
2013-05-24 23:26:54 +08:00
|
|
|
fdt_required=yes
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
if test "$fdt_required" = "yes"; then
|
|
|
|
if test "$fdt" = "no"; then
|
|
|
|
error_exit "fdt disabled but some requested targets require it." \
|
|
|
|
"You can turn off fdt only if you also disable all the system emulation" \
|
|
|
|
"targets which need it (by specifying a cut down --target-list)."
|
|
|
|
fi
|
|
|
|
fdt=yes
|
|
|
|
fi
|
|
|
|
|
2009-08-13 00:29:54 +08:00
|
|
|
if test "$fdt" != "no" ; then
|
2009-07-27 22:13:20 +08:00
|
|
|
fdt_libs="-lfdt"
|
2013-05-27 12:20:57 +08:00
|
|
|
# explicitly check for libfdt_env.h as it is missing in some stable installs
|
2016-09-08 22:51:55 +08:00
|
|
|
# and test for required functions to make sure we are on a version >= 1.4.2
|
2009-07-27 22:13:20 +08:00
|
|
|
cat > $TMPC << EOF
|
2015-05-18 18:59:49 +08:00
|
|
|
#include <libfdt.h>
|
2013-05-27 12:20:57 +08:00
|
|
|
#include <libfdt_env.h>
|
2018-12-21 08:34:48 +08:00
|
|
|
int main(void) { fdt_check_full(NULL, 0); return 0; }
|
2008-12-16 18:43:48 +08:00
|
|
|
EOF
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "" "$fdt_libs" ; then
|
2013-04-18 12:47:31 +08:00
|
|
|
# system DTC is good - use it
|
2018-04-16 07:05:20 +08:00
|
|
|
fdt=system
|
2013-04-18 12:47:31 +08:00
|
|
|
else
|
2017-09-29 18:11:56 +08:00
|
|
|
# have GIT checkout, so activate dtc submodule
|
|
|
|
if test -e "${source_path}/.git" ; then
|
|
|
|
git_submodules="${git_submodules} dtc"
|
|
|
|
fi
|
|
|
|
if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
|
2018-04-16 07:05:20 +08:00
|
|
|
fdt=git
|
2017-09-29 18:11:56 +08:00
|
|
|
mkdir -p dtc
|
|
|
|
if [ "$pwd_is_source_path" != "y" ] ; then
|
|
|
|
symlink "$source_path/dtc/Makefile" "dtc/Makefile"
|
|
|
|
symlink "$source_path/dtc/scripts" "dtc/scripts"
|
|
|
|
fi
|
|
|
|
fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
|
2018-04-16 07:05:19 +08:00
|
|
|
fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
|
|
|
|
fdt_libs="$fdt_libs"
|
2017-09-29 18:11:56 +08:00
|
|
|
elif test "$fdt" = "yes" ; then
|
|
|
|
# Not a git build & no libfdt found, prompt for system install
|
|
|
|
error_exit "DTC (libfdt) version >= 1.4.2 not present." \
|
|
|
|
"Please install the DTC (libfdt) devel package"
|
|
|
|
else
|
|
|
|
# don't have and don't want
|
|
|
|
fdt_libs=
|
|
|
|
fdt=no
|
|
|
|
fi
|
2008-12-16 18:43:48 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2013-04-18 12:47:31 +08:00
|
|
|
libs_softmmu="$libs_softmmu $fdt_libs"
|
|
|
|
|
2011-03-08 06:32:39 +08:00
|
|
|
##########################################
|
2015-10-27 01:45:48 +08:00
|
|
|
# opengl probe (for sdl2, gtk, milkymist-tmu2)
|
2015-03-16 17:03:53 +08:00
|
|
|
|
2019-05-24 21:09:42 +08:00
|
|
|
gbm="no"
|
|
|
|
if $pkg_config gbm; then
|
|
|
|
gbm_cflags="$($pkg_config --cflags gbm)"
|
|
|
|
gbm_libs="$($pkg_config --libs gbm)"
|
|
|
|
gbm="yes"
|
|
|
|
fi
|
|
|
|
|
2014-11-20 16:49:44 +08:00
|
|
|
if test "$opengl" != "no" ; then
|
2018-07-01 00:54:48 +08:00
|
|
|
opengl_pkgs="epoxy gbm"
|
2018-03-01 18:05:43 +08:00
|
|
|
if $pkg_config $opengl_pkgs; then
|
|
|
|
opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
|
|
|
|
opengl_libs="$($pkg_config --libs $opengl_pkgs)"
|
2014-11-20 16:49:44 +08:00
|
|
|
opengl=yes
|
2015-05-26 18:26:21 +08:00
|
|
|
if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
|
|
|
|
gtk_gl="yes"
|
|
|
|
fi
|
2017-03-21 15:04:48 +08:00
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
|
2011-03-08 06:32:39 +08:00
|
|
|
else
|
2014-11-20 16:49:44 +08:00
|
|
|
if test "$opengl" = "yes" ; then
|
2015-05-11 18:24:43 +08:00
|
|
|
feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
|
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
|
|
|
|
|
2015-12-03 19:56:34 +08:00
|
|
|
if test "$opengl" = "yes"; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <epoxy/egl.h>
|
|
|
|
#ifndef EGL_MESA_image_dma_buf_export
|
|
|
|
# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
|
|
|
|
#endif
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
opengl_dmabuf=yes
|
|
|
|
fi
|
|
|
|
fi
|
block: Support Archipelago as a QEMU block backend
VM Image on Archipelago volume is specified like this:
file.driver=archipelago,file.volume=<volumename>[,file.mport=<mapperd_port>[,
file.vport=<vlmcd_port>][,file.segment=<segment_name>]]
'archipelago' is the protocol.
'mport' is the port number on which mapperd is listening. This is optional
and if not specified, QEMU will make Archipelago to use the default port.
'vport' is the port number on which vlmcd is listening. This is optional
and if not specified, QEMU will make Archipelago to use the default port.
'segment' is the name of the shared memory segment Archipelago stack is using.
This is optional and if not specified, QEMU will make Archipelago to use the
default value, 'archipelago'.
Examples:
file.driver=archipelago,file.volume=my_vm_volume
file.driver=archipelago,file.volume=my_vm_volume,file.mport=123
file.driver=archipelago,file.volume=my_vm_volume,file.mport=123,
file.vport=1234
file.driver=archipelago,file.volume=my_vm_volume,file.mport=123,
file.vport=1234,file.segment=my_segment
Signed-off-by: Chrysostomos Nanakos <cnanakos@grnet.gr>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2014-08-04 22:35:32 +08:00
|
|
|
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
|
2019-01-30 20:00:03 +08:00
|
|
|
for target in $target_list; do
|
|
|
|
case $target in
|
|
|
|
lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
|
|
|
|
need_x11=yes
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
2018-01-12 17:01:19 +08:00
|
|
|
##########################################
|
|
|
|
# libxml2 probe
|
|
|
|
if test "$libxml2" != "no" ; then
|
|
|
|
if $pkg_config --exists libxml-2.0; then
|
|
|
|
libxml2="yes"
|
|
|
|
libxml2_cflags=$($pkg_config --cflags libxml-2.0)
|
|
|
|
libxml2_libs=$($pkg_config --libs libxml-2.0)
|
|
|
|
else
|
|
|
|
if test "$libxml2" = "yes"; then
|
|
|
|
feature_not_found "libxml2" "Install libxml2 devel"
|
|
|
|
fi
|
|
|
|
libxml2="no"
|
|
|
|
fi
|
|
|
|
fi
|
block: Support Archipelago as a QEMU block backend
VM Image on Archipelago volume is specified like this:
file.driver=archipelago,file.volume=<volumename>[,file.mport=<mapperd_port>[,
file.vport=<vlmcd_port>][,file.segment=<segment_name>]]
'archipelago' is the protocol.
'mport' is the port number on which mapperd is listening. This is optional
and if not specified, QEMU will make Archipelago to use the default port.
'vport' is the port number on which vlmcd is listening. This is optional
and if not specified, QEMU will make Archipelago to use the default port.
'segment' is the name of the shared memory segment Archipelago stack is using.
This is optional and if not specified, QEMU will make Archipelago to use the
default value, 'archipelago'.
Examples:
file.driver=archipelago,file.volume=my_vm_volume
file.driver=archipelago,file.volume=my_vm_volume,file.mport=123
file.driver=archipelago,file.volume=my_vm_volume,file.mport=123,
file.vport=1234
file.driver=archipelago,file.volume=my_vm_volume,file.mport=123,
file.vport=1234,file.segment=my_segment
Signed-off-by: Chrysostomos Nanakos <cnanakos@grnet.gr>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2014-08-04 22:35:32 +08:00
|
|
|
|
2012-09-24 17:12:45 +08:00
|
|
|
##########################################
|
|
|
|
# glusterfs probe
|
|
|
|
if test "$glusterfs" != "no" ; then
|
2013-08-28 03:09:13 +08:00
|
|
|
if $pkg_config --atleast-version=3 glusterfs-api; then
|
2013-07-17 00:17:41 +08:00
|
|
|
glusterfs="yes"
|
2016-05-16 21:10:20 +08:00
|
|
|
glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
|
|
|
|
glusterfs_libs=$($pkg_config --libs glusterfs-api)
|
2016-04-05 22:40:09 +08:00
|
|
|
if $pkg_config --atleast-version=4 glusterfs-api; then
|
|
|
|
glusterfs_xlator_opt="yes"
|
|
|
|
fi
|
2013-08-28 03:09:13 +08:00
|
|
|
if $pkg_config --atleast-version=5 glusterfs-api; then
|
2013-07-17 00:17:42 +08:00
|
|
|
glusterfs_discard="yes"
|
|
|
|
fi
|
2013-12-21 17:21:25 +08:00
|
|
|
if $pkg_config --atleast-version=6 glusterfs-api; then
|
2017-05-28 14:31:14 +08:00
|
|
|
glusterfs_fallocate="yes"
|
2013-12-21 17:21:25 +08:00
|
|
|
glusterfs_zerofill="yes"
|
|
|
|
fi
|
2019-03-05 23:46:33 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <glusterfs/api/glfs.h>
|
|
|
|
|
|
|
|
int
|
|
|
|
main(void)
|
|
|
|
{
|
|
|
|
/* new glfs_ftruncate() passes two additional args */
|
|
|
|
return glfs_ftruncate(NULL, 0, NULL, NULL);
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
|
|
|
|
glusterfs_ftruncate_has_stat="yes"
|
|
|
|
fi
|
2019-03-05 23:46:34 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <glusterfs/api/glfs.h>
|
|
|
|
|
|
|
|
/* new glfs_io_cbk() passes two additional glfs_stat structs */
|
|
|
|
static void
|
|
|
|
glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
|
|
|
|
{}
|
|
|
|
|
|
|
|
int
|
|
|
|
main(void)
|
|
|
|
{
|
|
|
|
glfs_io_cbk iocb = &glusterfs_iocb;
|
|
|
|
iocb(NULL, 0 , NULL, NULL, NULL);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
|
|
|
|
glusterfs_iocb_has_stat="yes"
|
|
|
|
fi
|
2012-09-24 17:12:45 +08:00
|
|
|
else
|
|
|
|
if test "$glusterfs" = "yes" ; then
|
2014-06-26 17:34:50 +08:00
|
|
|
feature_not_found "GlusterFS backend support" \
|
|
|
|
"Install glusterfs-api devel >= 3"
|
2012-09-24 17:12:45 +08:00
|
|
|
fi
|
2013-07-17 00:17:41 +08:00
|
|
|
glusterfs="no"
|
2012-09-24 17:12:45 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2009-04-16 03:48:17 +08:00
|
|
|
# Check for inotify functions when we are building linux-user
|
2009-04-16 00:12:13 +08:00
|
|
|
# emulator. This is done because older glibc versions don't
|
|
|
|
# have syscall stubs for these implemented. In that case we
|
|
|
|
# don't provide them even if kernel supports them.
|
|
|
|
#
|
|
|
|
inotify=no
|
2009-06-29 22:26:11 +08:00
|
|
|
cat > $TMPC << EOF
|
2009-04-16 00:12:13 +08:00
|
|
|
#include <sys/inotify.h>
|
|
|
|
|
|
|
|
int
|
|
|
|
main(void)
|
|
|
|
{
|
|
|
|
/* try to start inotify */
|
2009-04-17 21:50:32 +08:00
|
|
|
return inotify_init();
|
2009-04-16 00:12:13 +08:00
|
|
|
}
|
|
|
|
EOF
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "" "" ; then
|
2009-06-29 22:26:11 +08:00
|
|
|
inotify=yes
|
2009-04-16 00:12:13 +08:00
|
|
|
fi
|
|
|
|
|
2010-03-26 23:25:11 +08:00
|
|
|
inotify1=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/inotify.h>
|
|
|
|
|
|
|
|
int
|
|
|
|
main(void)
|
|
|
|
{
|
|
|
|
/* try to start inotify */
|
|
|
|
return inotify_init1(0);
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
inotify1=yes
|
|
|
|
fi
|
|
|
|
|
2009-05-05 17:10:04 +08:00
|
|
|
# check if pipe2 is there
|
|
|
|
pipe2=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
int pipefd[2];
|
2012-08-21 02:45:08 +08:00
|
|
|
return pipe2(pipefd, O_CLOEXEC);
|
2009-05-05 17:10:04 +08:00
|
|
|
}
|
|
|
|
EOF
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "" "" ; then
|
2009-05-05 17:10:04 +08:00
|
|
|
pipe2=yes
|
|
|
|
fi
|
|
|
|
|
2009-12-02 19:24:42 +08:00
|
|
|
# check if accept4 is there
|
|
|
|
accept4=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/socket.h>
|
|
|
|
#include <stddef.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
accept4(0, NULL, NULL, SOCK_CLOEXEC);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
accept4=yes
|
|
|
|
fi
|
|
|
|
|
2009-05-16 21:02:41 +08:00
|
|
|
# check if tee/splice is there. vmsplice was added same time.
|
|
|
|
splice=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <limits.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
2011-12-17 16:27:35 +08:00
|
|
|
int len, fd = 0;
|
2009-05-16 21:02:41 +08:00
|
|
|
len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
|
|
|
|
splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "" "" ; then
|
2009-05-16 21:02:41 +08:00
|
|
|
splice=yes
|
|
|
|
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
|
|
|
|
libs_softmmu="-lnuma $libs_softmmu"
|
|
|
|
else
|
|
|
|
if test "$numa" = "yes" ; then
|
|
|
|
feature_not_found "numa" "install numactl devel"
|
|
|
|
fi
|
|
|
|
numa=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-06-19 18:56:58 +08:00
|
|
|
if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
|
|
|
|
echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2017-12-20 21:16:46 +08:00
|
|
|
# Even if malloc_trim() is available, these non-libc memory allocators
|
|
|
|
# do not support it.
|
|
|
|
if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
|
|
|
|
if test "$malloc_trim" = "yes" ; then
|
|
|
|
echo "Disabling malloc_trim with non-libc memory allocator"
|
|
|
|
fi
|
|
|
|
malloc_trim="no"
|
|
|
|
fi
|
|
|
|
|
|
|
|
#######################################
|
|
|
|
# malloc_trim
|
|
|
|
|
|
|
|
if test "$malloc_trim" != "no" ; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <malloc.h>
|
|
|
|
int main(void) { malloc_trim(0); return 0; }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
malloc_trim="yes"
|
|
|
|
else
|
|
|
|
malloc_trim="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-03-26 11:03:12 +08:00
|
|
|
##########################################
|
|
|
|
# tcmalloc probe
|
|
|
|
|
|
|
|
if test "$tcmalloc" = "yes" ; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <stdlib.h>
|
|
|
|
int main(void) { malloc(1); return 0; }
|
|
|
|
EOF
|
|
|
|
|
|
|
|
if compile_prog "" "-ltcmalloc" ; then
|
|
|
|
LIBS="-ltcmalloc $LIBS"
|
|
|
|
else
|
|
|
|
feature_not_found "tcmalloc" "install gperftools devel"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-06-19 18:56:58 +08:00
|
|
|
##########################################
|
|
|
|
# jemalloc probe
|
|
|
|
|
|
|
|
if test "$jemalloc" = "yes" ; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <stdlib.h>
|
|
|
|
int main(void) { malloc(1); return 0; }
|
|
|
|
EOF
|
|
|
|
|
|
|
|
if compile_prog "" "-ljemalloc" ; then
|
|
|
|
LIBS="-ljemalloc $LIBS"
|
|
|
|
else
|
|
|
|
feature_not_found "jemalloc" "install jemalloc devel"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2010-10-12 02:31:15 +08:00
|
|
|
##########################################
|
|
|
|
# signalfd probe
|
|
|
|
signalfd="no"
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <sys/syscall.h>
|
|
|
|
#include <signal.h>
|
|
|
|
int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
|
|
|
|
EOF
|
|
|
|
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
signalfd=yes
|
|
|
|
fi
|
|
|
|
|
qemu-io: Add generic function for reinitializing optind.
On FreeBSD 11.2:
$ nbdkit memory size=1M --run './qemu-io -f raw -c "aio_write 0 512" $nbd'
Parsing error: non-numeric argument, or extraneous/unrecognized suffix -- aio_write
After main option parsing, we reinitialize optind so we can parse each
command. However reinitializing optind to 0 does not work on FreeBSD.
What happens when you do this is optind remains 0 after the option
parsing loop, and the result is we try to parse argv[optind] ==
argv[0] == "aio_write" as if it was the first parameter.
The FreeBSD manual page says:
In order to use getopt() to evaluate multiple sets of arguments, or to
evaluate a single set of arguments multiple times, the variable optreset
must be set to 1 before the second and each additional set of calls to
getopt(), and the variable optind must be reinitialized.
(From the rest of the man page it is clear that optind must be
reinitialized to 1).
The glibc man page says:
A program that scans multiple argument vectors, or rescans the same
vector more than once, and wants to make use of GNU extensions such as
'+' and '-' at the start of optstring, or changes the value of
POSIXLY_CORRECT between scans, must reinitialize getopt() by resetting
optind to 0, rather than the traditional value of 1. (Resetting to 0
forces the invocation of an internal initialization routine that
rechecks POSIXLY_CORRECT and checks for GNU extensions in optstring.)
This commit introduces an OS-portability function called
qemu_reset_optind which provides a way of resetting optind that works
on FreeBSD and platforms that use optreset, while keeping it the same
as now on other platforms.
Note that the qemu codebase sets optind in many other places, but in
those other places it's setting a local variable and not using getopt.
This change is only needed in places where we are using getopt and the
associated global variable optind.
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
Message-id: 20190118101114.11759-2-rjones@redhat.com
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2019-01-18 18:11:14 +08:00
|
|
|
# check if optreset global is declared by <getopt.h>
|
|
|
|
optreset="no"
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <getopt.h>
|
|
|
|
int main(void) { return optreset; }
|
|
|
|
EOF
|
|
|
|
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
optreset=yes
|
|
|
|
fi
|
|
|
|
|
2009-08-12 20:08:24 +08:00
|
|
|
# check if eventfd is supported
|
|
|
|
eventfd=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/eventfd.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
2011-12-17 16:27:37 +08:00
|
|
|
return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
|
2009-08-12 20:08:24 +08:00
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
eventfd=yes
|
|
|
|
fi
|
|
|
|
|
2015-10-09 23:17:16 +08:00
|
|
|
# check if memfd is supported
|
|
|
|
memfd=no
|
|
|
|
cat > $TMPC << EOF
|
2017-11-28 18:51:27 +08:00
|
|
|
#include <sys/mman.h>
|
2015-10-09 23:17:16 +08:00
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
return memfd_create("foo", MFD_ALLOW_SEALING);
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
memfd=yes
|
|
|
|
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
|
|
|
|
2009-09-18 01:22:14 +08:00
|
|
|
# check for fallocate
|
|
|
|
fallocate=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <fcntl.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
fallocate(0, 0, 0, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2012-04-05 00:03:15 +08:00
|
|
|
if compile_prog "" "" ; then
|
2009-09-18 01:22:14 +08:00
|
|
|
fallocate=yes
|
|
|
|
fi
|
|
|
|
|
2013-01-14 23:26:52 +08:00
|
|
|
# check for fallocate hole punching
|
|
|
|
fallocate_punch_hole=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <linux/falloc.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
fallocate_punch_hole=yes
|
|
|
|
fi
|
|
|
|
|
2015-01-30 16:42:14 +08:00
|
|
|
# check that fallocate supports range zeroing inside the file
|
|
|
|
fallocate_zero_range=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <linux/falloc.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
fallocate_zero_range=yes
|
|
|
|
fi
|
|
|
|
|
2014-09-29 23:12:59 +08:00
|
|
|
# check for posix_fallocate
|
|
|
|
posix_fallocate=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <fcntl.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
posix_fallocate(0, 0, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
posix_fallocate=yes
|
|
|
|
fi
|
|
|
|
|
2011-01-06 19:05:10 +08:00
|
|
|
# check for sync_file_range
|
|
|
|
sync_file_range=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <fcntl.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
sync_file_range(0, 0, 0, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2012-04-05 00:03:15 +08:00
|
|
|
if compile_prog "" "" ; then
|
2011-01-06 19:05:10 +08:00
|
|
|
sync_file_range=yes
|
|
|
|
fi
|
|
|
|
|
2011-01-10 21:11:24 +08:00
|
|
|
# check for linux/fiemap.h and FS_IOC_FIEMAP
|
|
|
|
fiemap=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/ioctl.h>
|
|
|
|
#include <linux/fs.h>
|
|
|
|
#include <linux/fiemap.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
ioctl(0, FS_IOC_FIEMAP, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2012-04-05 00:03:15 +08:00
|
|
|
if compile_prog "" "" ; then
|
2011-01-10 21:11:24 +08:00
|
|
|
fiemap=yes
|
|
|
|
fi
|
|
|
|
|
2009-09-18 01:22:14 +08:00
|
|
|
# check for dup3
|
|
|
|
dup3=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
dup3(0, 0, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2009-11-03 17:54:44 +08:00
|
|
|
if compile_prog "" "" ; then
|
2009-09-18 01:22:14 +08:00
|
|
|
dup3=yes
|
|
|
|
fi
|
|
|
|
|
2013-08-21 23:02:43 +08:00
|
|
|
# check for ppoll support
|
|
|
|
ppoll=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <poll.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
|
|
|
|
ppoll(&pfd, 1, 0, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
ppoll=yes
|
|
|
|
fi
|
|
|
|
|
2013-08-21 23:02:44 +08:00
|
|
|
# check for prctl(PR_SET_TIMERSLACK , ... ) support
|
|
|
|
prctl_pr_set_timerslack=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/prctl.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
prctl_pr_set_timerslack=yes
|
|
|
|
fi
|
|
|
|
|
2011-02-16 02:35:05 +08:00
|
|
|
# check for epoll support
|
|
|
|
epoll=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/epoll.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
epoll_create(0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
2012-04-05 00:03:15 +08:00
|
|
|
if compile_prog "" "" ; then
|
2011-02-16 02:35:05 +08:00
|
|
|
epoll=yes
|
|
|
|
fi
|
|
|
|
|
2016-06-07 02:58:11 +08:00
|
|
|
# epoll_create1 is a later addition
|
|
|
|
# so we must check separately for its presence
|
2011-02-16 02:35:05 +08:00
|
|
|
epoll_create1=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/epoll.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
2011-04-26 23:56:40 +08:00
|
|
|
/* Note that we use epoll_create1 as a value, not as
|
|
|
|
* a function being called. This is necessary so that on
|
|
|
|
* old SPARC glibc versions where the function was present in
|
|
|
|
* the library but not declared in the header file we will
|
|
|
|
* fail the configure check. (Otherwise we will get a compiler
|
|
|
|
* warning but not an error, and will proceed to fail the
|
|
|
|
* qemu compile where we compile with -Werror.)
|
|
|
|
*/
|
2012-08-10 04:21:25 +08:00
|
|
|
return (int)(uintptr_t)&epoll_create1;
|
2011-02-16 02:35:05 +08:00
|
|
|
}
|
|
|
|
EOF
|
2012-04-05 00:03:15 +08:00
|
|
|
if compile_prog "" "" ; then
|
2011-02-16 02:35:05 +08:00
|
|
|
epoll_create1=yes
|
|
|
|
fi
|
|
|
|
|
2013-02-08 15:31:55 +08:00
|
|
|
# check for sendfile support
|
|
|
|
sendfile=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/sendfile.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
return sendfile(0, 0, 0, 0);
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
sendfile=yes
|
|
|
|
fi
|
|
|
|
|
2014-06-22 18:25:42 +08:00
|
|
|
# check for timerfd support (glibc 2.8 and newer)
|
|
|
|
timerfd=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/timerfd.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
return(timerfd_create(CLOCK_REALTIME, 0));
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
timerfd=yes
|
|
|
|
fi
|
|
|
|
|
2014-08-12 20:58:57 +08:00
|
|
|
# check for setns and unshare support
|
|
|
|
setns=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sched.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
int ret;
|
|
|
|
ret = setns(0, 0);
|
|
|
|
ret = unshare(0);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
setns=yes
|
|
|
|
fi
|
|
|
|
|
2016-10-10 19:23:29 +08:00
|
|
|
# clock_adjtime probe
|
|
|
|
clock_adjtime=no
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <time.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
return clock_adjtime(0, 0);
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
clock_adjtime=no
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
clock_adjtime=yes
|
|
|
|
fi
|
|
|
|
|
2016-10-10 19:23:30 +08:00
|
|
|
# syncfs probe
|
|
|
|
syncfs=no
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
return syncfs(0);
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
syncfs=no
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
syncfs=yes
|
|
|
|
fi
|
|
|
|
|
2019-03-07 22:26:46 +08:00
|
|
|
# Check we have a new enough version of sphinx-build
|
|
|
|
has_sphinx_build() {
|
|
|
|
# This is a bit awkward but works: create a trivial document and
|
|
|
|
# try to run it with our configuration file (which enforces a
|
|
|
|
# version requirement). This will fail if either
|
|
|
|
# sphinx-build doesn't exist at all or if it is too old.
|
|
|
|
mkdir -p "$TMPDIR1/sphinx"
|
|
|
|
touch "$TMPDIR1/sphinx/index.rst"
|
|
|
|
sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
|
|
|
|
}
|
|
|
|
|
2006-04-24 01:57:59 +08:00
|
|
|
# Check if tools are available to build documentation.
|
2009-08-13 00:29:52 +08:00
|
|
|
if test "$docs" != "no" ; then
|
2019-03-07 22:26:46 +08:00
|
|
|
if has makeinfo && has pod2man && has_sphinx_build; then
|
2009-08-13 00:29:52 +08:00
|
|
|
docs=yes
|
2009-08-13 00:29:51 +08:00
|
|
|
else
|
2009-08-13 00:29:52 +08:00
|
|
|
if test "$docs" = "yes" ; then
|
2019-03-07 22:26:46 +08:00
|
|
|
feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
|
2009-08-13 00:29:51 +08:00
|
|
|
fi
|
2009-08-13 00:29:52 +08:00
|
|
|
docs=no
|
2009-08-13 00:29:51 +08:00
|
|
|
fi
|
2006-04-24 01:57:59 +08:00
|
|
|
fi
|
|
|
|
|
2009-10-11 18:44:07 +08:00
|
|
|
# Search for bswap_32 function
|
2009-08-03 20:45:58 +08:00
|
|
|
byteswap_h=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <byteswap.h>
|
|
|
|
int main(void) { return bswap_32(0); }
|
|
|
|
EOF
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "" "" ; then
|
2009-08-03 20:45:58 +08:00
|
|
|
byteswap_h=yes
|
|
|
|
fi
|
|
|
|
|
2013-01-05 19:17:38 +08:00
|
|
|
# Search for bswap32 function
|
2009-08-03 20:45:58 +08:00
|
|
|
bswap_h=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/endian.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <machine/bswap.h>
|
|
|
|
int main(void) { return bswap32(0); }
|
|
|
|
EOF
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "" "" ; then
|
2009-08-03 20:45:58 +08:00
|
|
|
bswap_h=yes
|
|
|
|
fi
|
|
|
|
|
2011-10-25 16:24:24 +08:00
|
|
|
##########################################
|
2014-06-04 20:33:26 +08:00
|
|
|
# Do we have libiscsi >= 1.9.0
|
2011-10-25 16:24:24 +08:00
|
|
|
if test "$libiscsi" != "no" ; then
|
2014-06-04 20:33:26 +08:00
|
|
|
if $pkg_config --atleast-version=1.9.0 libiscsi; then
|
2013-02-23 01:14:28 +08:00
|
|
|
libiscsi="yes"
|
2013-08-28 03:09:12 +08:00
|
|
|
libiscsi_cflags=$($pkg_config --cflags libiscsi)
|
|
|
|
libiscsi_libs=$($pkg_config --libs libiscsi)
|
2011-10-25 16:24:24 +08:00
|
|
|
else
|
|
|
|
if test "$libiscsi" = "yes" ; then
|
2014-06-04 20:33:26 +08:00
|
|
|
feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
|
2011-10-25 16:24:24 +08:00
|
|
|
fi
|
|
|
|
libiscsi="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2012-09-12 17:06:51 +08:00
|
|
|
##########################################
|
|
|
|
# Do we need libm
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <math.h>
|
2014-07-01 15:30:27 +08:00
|
|
|
int main(int argc, char **argv) { return isnan(sin((double)argc)); }
|
2012-09-12 17:06:51 +08:00
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
:
|
|
|
|
elif compile_prog "" "-lm" ; then
|
|
|
|
LIBS="-lm $LIBS"
|
|
|
|
libs_qga="-lm $libs_qga"
|
|
|
|
else
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "libm check failed"
|
2012-09-12 17:06:51 +08:00
|
|
|
fi
|
|
|
|
|
2008-12-13 04:02:52 +08:00
|
|
|
##########################################
|
|
|
|
# Do we need librt
|
2012-09-12 17:06:51 +08:00
|
|
|
# uClibc provides 2 versions of clock_gettime(), one with realtime
|
|
|
|
# support and one without. This means that the clock_gettime() don't
|
|
|
|
# need -lrt. We still need it for timer_create() so we check for this
|
|
|
|
# function in addition.
|
2008-12-13 04:02:52 +08:00
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <signal.h>
|
|
|
|
#include <time.h>
|
2012-09-12 17:06:51 +08:00
|
|
|
int main(void) {
|
|
|
|
timer_create(CLOCK_REALTIME, NULL, NULL);
|
|
|
|
return clock_gettime(CLOCK_REALTIME, NULL);
|
|
|
|
}
|
2008-12-13 04:02:52 +08:00
|
|
|
EOF
|
|
|
|
|
2009-08-03 20:46:03 +08:00
|
|
|
if compile_prog "" "" ; then
|
2009-08-03 20:46:17 +08:00
|
|
|
:
|
2012-09-12 17:06:51 +08:00
|
|
|
# we need pthread for static linking. use previous pthread test result
|
2014-05-31 05:10:20 +08:00
|
|
|
elif compile_prog "" "$pthread_lib -lrt" ; then
|
|
|
|
LIBS="$LIBS -lrt"
|
|
|
|
libs_qga="$libs_qga -lrt"
|
2008-12-13 04:02:52 +08:00
|
|
|
fi
|
|
|
|
|
configure: Add a proper check for openpty() in libutil
On Linux (and maybe some BSDs), we require libutil for the openpty()
function. However, this library is not available on some other systems, so
we currently use a fragile if-statement in the configure script to check
whether we need the library or not. Unfortunately, we also hard-coded a
"-lutil" in the tests/Makefile.include file, so this breaks the build on
Solaris, for example (see buglink below). To fix the issue, add the "-lutil"
to "libs_tools" in the configure script instead, then this gets properly
propagated to the tests, too.
And while we're at it, also replace the fragile if-statement in the confi-
gure script with a proper link-check for the availability of this function.
Buglink: https://bugs.launchpad.net/qemu/+bug/1777252
Signed-off-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2019-01-18 01:14:08 +08:00
|
|
|
# Check whether we need to link libutil for openpty()
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
|
|
|
|
int main(void) { return openpty(0, 0, 0, 0, 0); }
|
|
|
|
EOF
|
|
|
|
|
|
|
|
if ! compile_prog "" "" ; then
|
|
|
|
if compile_prog "" "-lutil" ; then
|
2009-08-03 20:46:32 +08:00
|
|
|
libs_softmmu="-lutil $libs_softmmu"
|
configure: Add a proper check for openpty() in libutil
On Linux (and maybe some BSDs), we require libutil for the openpty()
function. However, this library is not available on some other systems, so
we currently use a fragile if-statement in the configure script to check
whether we need the library or not. Unfortunately, we also hard-coded a
"-lutil" in the tests/Makefile.include file, so this breaks the build on
Solaris, for example (see buglink below). To fix the issue, add the "-lutil"
to "libs_tools" in the configure script instead, then this gets properly
propagated to the tests, too.
And while we're at it, also replace the fragile if-statement in the confi-
gure script with a proper link-check for the availability of this function.
Buglink: https://bugs.launchpad.net/qemu/+bug/1777252
Signed-off-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2019-01-18 01:14:08 +08:00
|
|
|
libs_tools="-lutil $libs_tools"
|
|
|
|
fi
|
2009-08-03 20:46:32 +08:00
|
|
|
fi
|
|
|
|
|
2009-09-12 17:58:46 +08:00
|
|
|
##########################################
|
2010-03-24 17:26:51 +08:00
|
|
|
# spice probe
|
|
|
|
if test "$spice" != "no" ; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <spice.h>
|
|
|
|
int main(void) { spice_server_new(); return 0; }
|
|
|
|
EOF
|
2011-01-24 20:20:29 +08:00
|
|
|
spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
|
|
|
|
spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
|
2018-11-28 23:59:32 +08:00
|
|
|
if $pkg_config --atleast-version=0.12.5 spice-server && \
|
2013-08-28 03:09:13 +08:00
|
|
|
$pkg_config --atleast-version=0.12.3 spice-protocol && \
|
2010-03-24 17:26:51 +08:00
|
|
|
compile_prog "$spice_cflags" "$spice_libs" ; then
|
|
|
|
spice="yes"
|
|
|
|
libs_softmmu="$libs_softmmu $spice_libs"
|
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
|
2012-08-22 16:16:26 +08:00
|
|
|
spice_protocol_version=$($pkg_config --modversion spice-protocol)
|
|
|
|
spice_server_version=$($pkg_config --modversion spice-server)
|
2010-03-24 17:26:51 +08:00
|
|
|
else
|
|
|
|
if test "$spice" = "yes" ; then
|
2014-06-26 17:34:50 +08:00
|
|
|
feature_not_found "spice" \
|
2018-11-28 23:59:32 +08:00
|
|
|
"Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
|
2010-03-24 17:26:51 +08:00
|
|
|
fi
|
|
|
|
spice="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2015-08-30 17:48:40 +08:00
|
|
|
# check for smartcard support
|
|
|
|
if test "$smartcard" != "no"; then
|
2018-04-03 18:34:37 +08:00
|
|
|
if $pkg_config --atleast-version=2.5.1 libcacard; then
|
2015-08-30 17:48:40 +08:00
|
|
|
libcacard_cflags=$($pkg_config --cflags libcacard)
|
|
|
|
libcacard_libs=$($pkg_config --libs libcacard)
|
|
|
|
smartcard="yes"
|
2012-12-21 03:39:36 +08:00
|
|
|
else
|
2015-08-30 17:48:40 +08:00
|
|
|
if test "$smartcard" = "yes"; then
|
|
|
|
feature_not_found "smartcard" "Install libcacard devel"
|
libcacard: initial commit
libcacard emulates a Common Access Card (CAC) which is a standard
for smartcards. It is used by the emulated ccid card introduced in
a following patch. Docs are available in docs/libcacard.txt
Signed-off-by: Alon Levy <alevy@redhat.com>
---
changes from v24->v25:
* Fix out of tree builds.
* Fix build with linux-user targets.
changes from v23->v24: (Jes Sorensen review 2)
* Makefile.target: use obj-$(CONFIG_*) +=
* remove unrequired includes, include qemu-common before qemu-thread
* required adding #define NO_NSPR_10_SUPPORT (harmless)
changes from v22->v23:
* configure fixes: (reported by Stefan Hajnoczi)
* test a = b, not a == b (second isn't portable)
* quote $source_path in case it contains spaces
- this doesn't really help since there are many other places
that need similar fixes, not introduced by this patch.
changes from v21->v22:
* fix configure to not link libcacard if nss not found
(reported by Stefan Hajnoczi)
* fix vscclient linkage with simpletrace backend
(reported by Stefan Hajnoczi)
* card_7816.c: add missing break in ERROR_DATA_NOT_FOUND
(reported by William van de Velde)
changes from v20->v21: (Jes Sorensen review)
* use qemu infrastructure: qemu-thread, qemu-common (qemu_malloc
and qemu_free), error_report
* assert instead of ASSERT
* cosmetic fixes
* use strpbrk and isspace
* add --disable-nss --enable-nss here, instead of in the final patch.
* split vscclient, passthru and docs to following patches.
changes from v19->v20:
* checkpatch.pl
changes from v15->v16:
Build:
* don't erase self with distclean
* fix make clean after make distclean
* Makefile: make vscclient link quiet
Behavioral:
* vcard_emul_nss: load coolkey in more situations
* vscclient:
* use hton,ntoh
* send init on connect, only start vevent thread on response
* read payload after header check, before type switch
* remove Reconnect
* update for vscard_common changes, empty Flush implementation
Style/Whitespace:
* fix wrong variable usage
* remove unused variable
* use only C style comments
* add copyright header
* fix tabulation
Signed-off-by: Alon Levy <alevy@redhat.com>
libcacard: fix out of tree builds
2010-11-28 22:36:38 +08:00
|
|
|
fi
|
2015-08-30 17:48:40 +08:00
|
|
|
smartcard="no"
|
libcacard: initial commit
libcacard emulates a Common Access Card (CAC) which is a standard
for smartcards. It is used by the emulated ccid card introduced in
a following patch. Docs are available in docs/libcacard.txt
Signed-off-by: Alon Levy <alevy@redhat.com>
---
changes from v24->v25:
* Fix out of tree builds.
* Fix build with linux-user targets.
changes from v23->v24: (Jes Sorensen review 2)
* Makefile.target: use obj-$(CONFIG_*) +=
* remove unrequired includes, include qemu-common before qemu-thread
* required adding #define NO_NSPR_10_SUPPORT (harmless)
changes from v22->v23:
* configure fixes: (reported by Stefan Hajnoczi)
* test a = b, not a == b (second isn't portable)
* quote $source_path in case it contains spaces
- this doesn't really help since there are many other places
that need similar fixes, not introduced by this patch.
changes from v21->v22:
* fix configure to not link libcacard if nss not found
(reported by Stefan Hajnoczi)
* fix vscclient linkage with simpletrace backend
(reported by Stefan Hajnoczi)
* card_7816.c: add missing break in ERROR_DATA_NOT_FOUND
(reported by William van de Velde)
changes from v20->v21: (Jes Sorensen review)
* use qemu infrastructure: qemu-thread, qemu-common (qemu_malloc
and qemu_free), error_report
* assert instead of ASSERT
* cosmetic fixes
* use strpbrk and isspace
* add --disable-nss --enable-nss here, instead of in the final patch.
* split vscclient, passthru and docs to following patches.
changes from v19->v20:
* checkpatch.pl
changes from v15->v16:
Build:
* don't erase self with distclean
* fix make clean after make distclean
* Makefile: make vscclient link quiet
Behavioral:
* vcard_emul_nss: load coolkey in more situations
* vscclient:
* use hton,ntoh
* send init on connect, only start vevent thread on response
* read payload after header check, before type switch
* remove Reconnect
* update for vscard_common changes, empty Flush implementation
Style/Whitespace:
* fix wrong variable usage
* remove unused variable
* use only C style comments
* add copyright header
* fix tabulation
Signed-off-by: Alon Levy <alevy@redhat.com>
libcacard: fix out of tree builds
2010-11-28 22:36:38 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2012-11-30 23:02:11 +08:00
|
|
|
# check for libusb
|
|
|
|
if test "$libusb" != "no" ; then
|
2013-08-28 03:09:13 +08:00
|
|
|
if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
|
2012-11-30 23:02:11 +08:00
|
|
|
libusb="yes"
|
2013-08-28 03:09:12 +08:00
|
|
|
libusb_cflags=$($pkg_config --cflags libusb-1.0)
|
|
|
|
libusb_libs=$($pkg_config --libs libusb-1.0)
|
2012-11-30 23:02:11 +08:00
|
|
|
else
|
|
|
|
if test "$libusb" = "yes"; then
|
2014-06-26 17:34:50 +08:00
|
|
|
feature_not_found "libusb" "Install libusb devel >= 1.0.13"
|
2012-11-30 23:02:11 +08:00
|
|
|
fi
|
|
|
|
libusb="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2011-07-19 17:04:10 +08:00
|
|
|
# check for usbredirparser for usb network redirection support
|
|
|
|
if test "$usb_redir" != "no" ; then
|
2013-08-28 03:09:13 +08:00
|
|
|
if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
|
2011-07-19 17:04:10 +08:00
|
|
|
usb_redir="yes"
|
2013-08-28 03:09:12 +08:00
|
|
|
usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
|
|
|
|
usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
|
2011-07-19 17:04:10 +08:00
|
|
|
else
|
|
|
|
if test "$usb_redir" = "yes"; then
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "usb-redir" "Install usbredir devel"
|
2011-07-19 17:04:10 +08:00
|
|
|
fi
|
|
|
|
usb_redir="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
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
|
|
|
|
|
2014-07-11 18:51:43 +08:00
|
|
|
##########################################
|
|
|
|
# virgl renderer probe
|
|
|
|
|
|
|
|
if test "$virglrenderer" != "no" ; then
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <virglrenderer.h>
|
|
|
|
int main(void) { virgl_renderer_poll(); return 0; }
|
|
|
|
EOF
|
|
|
|
virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
|
|
|
|
virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
|
2018-05-25 23:36:09 +08:00
|
|
|
virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
|
2014-07-11 18:51:43 +08:00
|
|
|
if $pkg_config virglrenderer >/dev/null 2>&1 && \
|
|
|
|
compile_prog "$virgl_cflags" "$virgl_libs" ; then
|
|
|
|
virglrenderer="yes"
|
|
|
|
else
|
|
|
|
if test "$virglrenderer" = "yes" ; then
|
|
|
|
feature_not_found "virglrenderer"
|
|
|
|
fi
|
|
|
|
virglrenderer="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2017-09-15 00:41:12 +08:00
|
|
|
##########################################
|
|
|
|
# capstone
|
|
|
|
|
2017-09-29 00:01:23 +08:00
|
|
|
case "$capstone" in
|
|
|
|
"" | yes)
|
|
|
|
if $pkg_config capstone; then
|
|
|
|
capstone=system
|
2019-02-05 10:39:37 +08:00
|
|
|
elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
|
2017-09-29 00:01:23 +08:00
|
|
|
capstone=git
|
|
|
|
elif test -e "${source_path}/capstone/Makefile" ; then
|
|
|
|
capstone=internal
|
|
|
|
elif test -z "$capstone" ; then
|
|
|
|
capstone=no
|
|
|
|
else
|
|
|
|
feature_not_found "capstone" "Install capstone devel or git submodule"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
|
|
|
|
system)
|
|
|
|
if ! $pkg_config capstone; then
|
|
|
|
feature_not_found "capstone" "Install capstone devel"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$capstone" in
|
|
|
|
git | internal)
|
|
|
|
if test "$capstone" = git; then
|
|
|
|
git_submodules="${git_submodules} capstone"
|
|
|
|
fi
|
|
|
|
mkdir -p capstone
|
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
|
|
|
|
if test "$mingw32" = "yes"; then
|
|
|
|
LIBCAPSTONE=capstone.lib
|
|
|
|
else
|
|
|
|
LIBCAPSTONE=libcapstone.a
|
|
|
|
fi
|
2019-05-16 17:51:34 +08:00
|
|
|
libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
|
2017-09-29 00:01:23 +08:00
|
|
|
;;
|
|
|
|
|
|
|
|
system)
|
2017-09-15 00:41:12 +08:00
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
|
2019-05-16 17:51:34 +08:00
|
|
|
libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
|
2017-09-29 00:01:23 +08:00
|
|
|
;;
|
|
|
|
|
|
|
|
no)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
error_exit "Unknown state for capstone: $capstone"
|
|
|
|
;;
|
|
|
|
esac
|
2017-09-15 00:41:12 +08:00
|
|
|
|
2009-09-20 14:56:26 +08:00
|
|
|
##########################################
|
|
|
|
# check if we have fdatasync
|
|
|
|
|
|
|
|
fdatasync=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <unistd.h>
|
2011-05-30 06:22:48 +08:00
|
|
|
int main(void) {
|
|
|
|
#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
|
|
|
|
return fdatasync(0);
|
|
|
|
#else
|
2012-04-07 03:33:20 +08:00
|
|
|
#error Not supported
|
2011-05-30 06:22:48 +08:00
|
|
|
#endif
|
|
|
|
}
|
2009-09-20 14:56:26 +08:00
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
fdatasync=yes
|
|
|
|
fi
|
|
|
|
|
2010-09-25 19:26:05 +08:00
|
|
|
##########################################
|
|
|
|
# check if we have madvise
|
|
|
|
|
|
|
|
madvise=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/mman.h>
|
2010-10-06 03:28:17 +08:00
|
|
|
#include <stddef.h>
|
2010-09-25 19:26:05 +08:00
|
|
|
int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
madvise=yes
|
|
|
|
fi
|
|
|
|
|
|
|
|
##########################################
|
|
|
|
# check if we have posix_madvise
|
|
|
|
|
|
|
|
posix_madvise=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/mman.h>
|
2010-10-06 03:28:17 +08:00
|
|
|
#include <stddef.h>
|
2010-09-25 19:26:05 +08:00
|
|
|
int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
posix_madvise=yes
|
|
|
|
fi
|
|
|
|
|
2018-01-05 01:39:36 +08:00
|
|
|
##########################################
|
|
|
|
# check if we have posix_memalign()
|
|
|
|
|
|
|
|
posix_memalign=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <stdlib.h>
|
|
|
|
int main(void) {
|
|
|
|
void *p;
|
|
|
|
return posix_memalign(&p, 8, 8);
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
posix_memalign=yes
|
|
|
|
fi
|
|
|
|
|
2016-08-04 21:44:14 +08:00
|
|
|
##########################################
|
|
|
|
# check if we have posix_syslog
|
|
|
|
|
|
|
|
posix_syslog=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <syslog.h>
|
|
|
|
int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
posix_syslog=yes
|
|
|
|
fi
|
|
|
|
|
2017-09-05 20:19:32 +08:00
|
|
|
##########################################
|
|
|
|
# check if we have sem_timedwait
|
|
|
|
|
|
|
|
sem_timedwait=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <semaphore.h>
|
2019-06-17 19:41:14 +08:00
|
|
|
int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
|
2017-09-05 20:19:32 +08:00
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
sem_timedwait=yes
|
|
|
|
fi
|
|
|
|
|
2018-06-29 18:32:10 +08:00
|
|
|
##########################################
|
|
|
|
# check if we have strchrnul
|
|
|
|
|
|
|
|
strchrnul=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <string.h>
|
|
|
|
int main(void);
|
|
|
|
// Use a haystack that the compiler shouldn't be able to constant fold
|
|
|
|
char *haystack = (char*)&main;
|
|
|
|
int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
strchrnul=yes
|
|
|
|
fi
|
|
|
|
|
2010-05-23 00:52:39 +08:00
|
|
|
##########################################
|
|
|
|
# check if trace backend exists
|
|
|
|
|
2014-05-27 21:02:14 +08:00
|
|
|
$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends > /dev/null 2> /dev/null
|
2010-05-23 00:52:39 +08:00
|
|
|
if test "$?" -ne 0 ; then
|
2014-05-27 21:02:14 +08:00
|
|
|
error_exit "invalid trace backends" \
|
|
|
|
"Please choose supported trace backends."
|
2010-05-23 00:52:39 +08:00
|
|
|
fi
|
|
|
|
|
2010-05-23 04:11:33 +08:00
|
|
|
##########################################
|
|
|
|
# For 'ust' backend, test if ust headers are present
|
2014-05-27 21:02:14 +08:00
|
|
|
if have_backend "ust"; then
|
2010-05-23 04:11:33 +08:00
|
|
|
cat > $TMPC << EOF
|
2014-01-30 11:47:54 +08:00
|
|
|
#include <lttng/tracepoint.h>
|
2010-05-23 04:11:33 +08:00
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
2016-11-28 23:52:17 +08:00
|
|
|
if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
|
2014-01-30 11:47:54 +08:00
|
|
|
if $pkg_config lttng-ust --exists; then
|
2016-05-16 21:10:20 +08:00
|
|
|
lttng_ust_libs=$($pkg_config --libs lttng-ust)
|
2014-01-30 11:47:54 +08:00
|
|
|
else
|
2016-11-28 23:52:17 +08:00
|
|
|
lttng_ust_libs="-llttng-ust -ldl"
|
2014-01-30 11:47:54 +08:00
|
|
|
fi
|
|
|
|
if $pkg_config liburcu-bp --exists; then
|
2016-05-16 21:10:20 +08:00
|
|
|
urcu_bp_libs=$($pkg_config --libs liburcu-bp)
|
2014-01-30 11:47:54 +08:00
|
|
|
else
|
|
|
|
urcu_bp_libs="-lurcu-bp"
|
|
|
|
fi
|
|
|
|
|
|
|
|
LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
|
|
|
|
libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
|
2010-05-23 04:11:33 +08:00
|
|
|
else
|
2014-01-30 11:47:54 +08:00
|
|
|
error_exit "Trace backend 'ust' missing lttng-ust header files"
|
2010-05-23 04:11:33 +08:00
|
|
|
fi
|
|
|
|
fi
|
2010-11-12 21:20:24 +08:00
|
|
|
|
|
|
|
##########################################
|
|
|
|
# For 'dtrace' backend, test if 'dtrace' command is present
|
2014-05-27 21:02:14 +08:00
|
|
|
if have_backend "dtrace"; then
|
2010-11-12 21:20:24 +08:00
|
|
|
if ! has 'dtrace' ; then
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "dtrace command is not found in PATH $PATH"
|
2010-11-12 21:20:24 +08:00
|
|
|
fi
|
2010-11-12 21:20:25 +08:00
|
|
|
trace_backend_stap="no"
|
|
|
|
if has 'stap' ; then
|
|
|
|
trace_backend_stap="yes"
|
|
|
|
fi
|
2010-11-12 21:20:24 +08:00
|
|
|
fi
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
2011-10-12 21:41:24 +08:00
|
|
|
##########################################
|
|
|
|
# check if we have open_by_handle_at
|
|
|
|
|
2012-06-19 04:11:06 +08:00
|
|
|
open_by_handle_at=no
|
2011-10-12 21:41:24 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <fcntl.h>
|
2012-06-07 03:35:57 +08:00
|
|
|
#if !defined(AT_EMPTY_PATH)
|
|
|
|
# error missing definition
|
|
|
|
#else
|
2011-12-17 16:27:29 +08:00
|
|
|
int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
|
2012-06-07 03:35:57 +08:00
|
|
|
#endif
|
2011-10-12 21:41:24 +08:00
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
open_by_handle_at=yes
|
|
|
|
fi
|
|
|
|
|
2011-10-12 21:41:25 +08:00
|
|
|
########################################
|
|
|
|
# check if we have linux/magic.h
|
|
|
|
|
|
|
|
linux_magic_h=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <linux/magic.h>
|
|
|
|
int main(void) {
|
2011-12-17 16:27:29 +08:00
|
|
|
return 0;
|
2011-10-12 21:41:25 +08:00
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
linux_magic_h=yes
|
|
|
|
fi
|
|
|
|
|
2012-07-30 23:13:07 +08:00
|
|
|
########################################
|
2013-02-23 04:08:51 +08:00
|
|
|
# check whether we can disable warning option with a pragma (this is needed
|
|
|
|
# to silence warnings in the headers of some versions of external libraries).
|
|
|
|
# This test has to be compiled with -Werror as otherwise an unknown pragma is
|
|
|
|
# only a warning.
|
|
|
|
#
|
|
|
|
# If we can't selectively disable warning in the code, disable -Werror so that
|
|
|
|
# the build doesn't fail anyway.
|
|
|
|
|
2012-07-30 23:13:07 +08:00
|
|
|
pragma_disable_unused_but_set=no
|
|
|
|
cat > $TMPC << EOF
|
2013-04-16 19:51:06 +08:00
|
|
|
#pragma GCC diagnostic push
|
2013-02-23 04:08:51 +08:00
|
|
|
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
|
2013-04-16 19:51:06 +08:00
|
|
|
#pragma GCC diagnostic pop
|
2013-02-23 04:08:51 +08:00
|
|
|
|
2012-07-30 23:13:07 +08:00
|
|
|
int main(void) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "-Werror" "" ; then
|
2013-01-09 17:17:07 +08:00
|
|
|
pragma_diagnostic_available=yes
|
2013-02-23 04:08:51 +08:00
|
|
|
else
|
|
|
|
werror=no
|
2012-07-30 23:13:07 +08:00
|
|
|
fi
|
|
|
|
|
2012-06-29 19:40:27 +08:00
|
|
|
########################################
|
2014-09-26 03:07:54 +08:00
|
|
|
# check if we have valgrind/valgrind.h
|
2012-06-29 19:40:27 +08:00
|
|
|
|
|
|
|
valgrind_h=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <valgrind/valgrind.h>
|
|
|
|
int main(void) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
valgrind_h=yes
|
|
|
|
fi
|
|
|
|
|
2012-05-24 02:48:04 +08:00
|
|
|
########################################
|
|
|
|
# check if environ is declared
|
|
|
|
|
|
|
|
has_environ=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <unistd.h>
|
|
|
|
int main(void) {
|
2012-08-10 04:21:25 +08:00
|
|
|
environ = 0;
|
2012-05-24 02:48:04 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
has_environ=yes
|
|
|
|
fi
|
|
|
|
|
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
|
|
|
|
if compile_object "" ; then
|
|
|
|
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
|
|
|
|
|
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;
|
|
|
|
y = __atomic_load_16(&x, 0);
|
|
|
|
__atomic_store_16(&x, y, 0);
|
|
|
|
__atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
atomic128=yes
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
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
|
|
|
|
|
2016-09-03 03:23:57 +08:00
|
|
|
#########################################
|
|
|
|
# See if 64-bit atomic operations are supported.
|
|
|
|
# Note that without __atomic builtins, we can only
|
|
|
|
# assume atomic loads/stores max at pointer size.
|
|
|
|
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <stdint.h>
|
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
uint64_t x = 0, y = 0;
|
|
|
|
#ifdef __ATOMIC_RELAXED
|
|
|
|
y = __atomic_load_8(&x, 0);
|
|
|
|
__atomic_store_8(&x, y, 0);
|
|
|
|
__atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
|
|
|
|
__atomic_exchange_8(&x, y, 0);
|
|
|
|
__atomic_fetch_add_8(&x, y, 0);
|
|
|
|
#else
|
|
|
|
typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
|
|
|
|
__sync_lock_test_and_set(&x, y);
|
|
|
|
__sync_val_compare_and_swap(&x, y, 0);
|
|
|
|
__sync_fetch_and_add(&x, y);
|
|
|
|
#endif
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
atomic64=yes
|
|
|
|
fi
|
|
|
|
|
2017-09-16 05:11:45 +08:00
|
|
|
########################################
|
|
|
|
# See if 16-byte vector operations are supported.
|
|
|
|
# Even without a vector unit the compiler may expand these.
|
|
|
|
# There is a bug in old GCC for PPC that crashes here.
|
|
|
|
# Unfortunately it's the system compiler for Centos 7.
|
|
|
|
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
typedef unsigned char U1 __attribute__((vector_size(16)));
|
|
|
|
typedef unsigned short U2 __attribute__((vector_size(16)));
|
|
|
|
typedef unsigned int U4 __attribute__((vector_size(16)));
|
|
|
|
typedef unsigned long long U8 __attribute__((vector_size(16)));
|
|
|
|
typedef signed char S1 __attribute__((vector_size(16)));
|
|
|
|
typedef signed short S2 __attribute__((vector_size(16)));
|
|
|
|
typedef signed int S4 __attribute__((vector_size(16)));
|
|
|
|
typedef signed long long S8 __attribute__((vector_size(16)));
|
|
|
|
static U1 a1, b1;
|
|
|
|
static U2 a2, b2;
|
|
|
|
static U4 a4, b4;
|
|
|
|
static U8 a8, b8;
|
|
|
|
static S1 c1;
|
|
|
|
static S2 c2;
|
|
|
|
static S4 c4;
|
|
|
|
static S8 c8;
|
|
|
|
static int i;
|
2018-03-28 21:31:52 +08:00
|
|
|
void helper(void *d, void *a, int shift, int i);
|
|
|
|
void helper(void *d, void *a, int shift, int i)
|
|
|
|
{
|
|
|
|
*(U1 *)(d + i) = *(U1 *)(a + i) << shift;
|
|
|
|
*(U2 *)(d + i) = *(U2 *)(a + i) << shift;
|
|
|
|
*(U4 *)(d + i) = *(U4 *)(a + i) << shift;
|
|
|
|
*(U8 *)(d + i) = *(U8 *)(a + i) << shift;
|
|
|
|
}
|
2017-09-16 05:11:45 +08:00
|
|
|
int main(void)
|
|
|
|
{
|
|
|
|
a1 += b1; a2 += b2; a4 += b4; a8 += b8;
|
|
|
|
a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
|
|
|
|
a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
|
|
|
|
a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
|
|
|
|
a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
|
|
|
|
a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
|
|
|
|
a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
|
|
|
|
a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
|
|
|
|
c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
|
|
|
|
vector16=no
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
vector16=yes
|
|
|
|
fi
|
|
|
|
|
2013-02-19 01:11:15 +08:00
|
|
|
########################################
|
|
|
|
# check if getauxval is available.
|
|
|
|
|
|
|
|
getauxval=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/auxv.h>
|
|
|
|
int main(void) {
|
|
|
|
return getauxval(AT_HWCAP) == 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
getauxval=yes
|
|
|
|
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-06-01 17:26:43 +08:00
|
|
|
###############################################
|
|
|
|
# Check if copy_file_range is provided by glibc
|
|
|
|
have_copy_file_range=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <unistd.h>
|
|
|
|
int main(void) {
|
|
|
|
copy_file_range(0, NULL, 0, NULL, 0, 0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
have_copy_file_range=yes
|
|
|
|
fi
|
|
|
|
|
2016-04-30 01:15:23 +08:00
|
|
|
##########################################
|
|
|
|
# check if struct fsxattr is available via linux/fs.h
|
|
|
|
|
|
|
|
have_fsxattr=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <linux/fs.h>
|
|
|
|
struct fsxattr foo;
|
|
|
|
int main(void) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
have_fsxattr=yes
|
|
|
|
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
|
|
|
|
|
2016-06-09 01:34:32 +08:00
|
|
|
##########################################
|
|
|
|
# check if rtnetlink.h exists and is useful
|
2016-06-03 04:14:15 +08:00
|
|
|
have_rtnetlink=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <linux/rtnetlink.h>
|
|
|
|
int main(void) {
|
|
|
|
return IFLA_PROTO_DOWN;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
have_rtnetlink=yes
|
|
|
|
fi
|
|
|
|
|
2016-10-14 17:00:55 +08:00
|
|
|
##########################################
|
|
|
|
# check for usable AF_VSOCK environment
|
|
|
|
have_af_vsock=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <errno.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/socket.h>
|
|
|
|
#if !defined(AF_VSOCK)
|
|
|
|
# error missing AF_VSOCK flag
|
|
|
|
#endif
|
|
|
|
#include <linux/vm_sockets.h>
|
|
|
|
int main(void) {
|
|
|
|
int sock, ret;
|
|
|
|
struct sockaddr_vm svm;
|
|
|
|
socklen_t len = sizeof(svm);
|
|
|
|
sock = socket(AF_VSOCK, SOCK_STREAM, 0);
|
|
|
|
ret = getpeername(sock, (struct sockaddr *)&svm, &len);
|
|
|
|
if ((ret == -1) && (errno == ENOTCONN)) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
have_af_vsock=yes
|
|
|
|
fi
|
|
|
|
|
2017-07-15 02:04:05 +08:00
|
|
|
##########################################
|
|
|
|
# check for usable AF_ALG environment
|
|
|
|
hava_afalg=no
|
|
|
|
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
|
|
|
|
|
|
|
|
|
i386: hvf: add code base from Google's QEMU repository
This file begins tracking the files that will be the code base for HVF
support in QEMU. This code base is part of Google's QEMU version of
their Android emulator, and can be found at
https://android.googlesource.com/platform/external/qemu/+/emu-master-dev
This code is based on Veertu Inc's vdhh (Veertu Desktop Hosted
Hypervisor), found at https://github.com/veertuinc/vdhh. Everything is
appropriately licensed under GPL v2-or-later, except for the code inside
x86_task.c and x86_task.h, which, deriving from KVM (the Linux kernel),
is licensed GPL v2-only.
This code base already implements a very great deal of functionality,
although Google's version removed from Vertuu's the support for APIC
page and hyperv-related stuff. According to the Android Emulator Release
Notes, Revision 26.1.3 (August 2017), "Hypervisor.framework is now
enabled by default on macOS for 32-bit x86 images to improve performance
and macOS compatibility", although we better use with caution for, as the
same Revision warns us, "If you experience issues with it specifically,
please file a bug report...". The code hasn't seen much update in the
last 5 months, so I think that we can further develop the code with
occasional visiting Google's repository to see if there has been any
update.
On top of Google's code, the following changes were made:
- add code to the configure script to support the --enable-hvf argument.
If the OS is Darwin, it checks for presence of HVF in the system. The
patch also adds strings related to HVF in the file qemu-options.hx.
QEMU will only support the modern syntax style '-M accel=hvf' no enable
hvf; the legacy '-enable-hvf' will not be supported.
- fix styling issues
- add glue code to cpus.c
- move HVFX86EmulatorState field to CPUX86State, changing the
the emulation functions to have a parameter with signature 'CPUX86State *'
instead of 'CPUState *' so we don't have to get the 'env'.
Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-2-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-3-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-5-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-6-Sergio.G.DelReal@gmail.com>
Message-Id: <20170905035457.3753-7-Sergio.G.DelReal@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-09-13 17:05:09 +08:00
|
|
|
#################################################
|
|
|
|
# Check to see if we have the Hypervisor framework
|
2018-01-09 01:10:42 +08:00
|
|
|
if [ "$darwin" = "yes" ] ; then
|
i386: hvf: add code base from Google's QEMU repository
This file begins tracking the files that will be the code base for HVF
support in QEMU. This code base is part of Google's QEMU version of
their Android emulator, and can be found at
https://android.googlesource.com/platform/external/qemu/+/emu-master-dev
This code is based on Veertu Inc's vdhh (Veertu Desktop Hosted
Hypervisor), found at https://github.com/veertuinc/vdhh. Everything is
appropriately licensed under GPL v2-or-later, except for the code inside
x86_task.c and x86_task.h, which, deriving from KVM (the Linux kernel),
is licensed GPL v2-only.
This code base already implements a very great deal of functionality,
although Google's version removed from Vertuu's the support for APIC
page and hyperv-related stuff. According to the Android Emulator Release
Notes, Revision 26.1.3 (August 2017), "Hypervisor.framework is now
enabled by default on macOS for 32-bit x86 images to improve performance
and macOS compatibility", although we better use with caution for, as the
same Revision warns us, "If you experience issues with it specifically,
please file a bug report...". The code hasn't seen much update in the
last 5 months, so I think that we can further develop the code with
occasional visiting Google's repository to see if there has been any
update.
On top of Google's code, the following changes were made:
- add code to the configure script to support the --enable-hvf argument.
If the OS is Darwin, it checks for presence of HVF in the system. The
patch also adds strings related to HVF in the file qemu-options.hx.
QEMU will only support the modern syntax style '-M accel=hvf' no enable
hvf; the legacy '-enable-hvf' will not be supported.
- fix styling issues
- add glue code to cpus.c
- move HVFX86EmulatorState field to CPUX86State, changing the
the emulation functions to have a parameter with signature 'CPUX86State *'
instead of 'CPUState *' so we don't have to get the 'env'.
Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-2-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-3-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-5-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-6-Sergio.G.DelReal@gmail.com>
Message-Id: <20170905035457.3753-7-Sergio.G.DelReal@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-09-13 17:05:09 +08:00
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <Hypervisor/hv.h>
|
|
|
|
int main() { return 0;}
|
|
|
|
EOF
|
|
|
|
if ! compile_object ""; then
|
|
|
|
hvf='no'
|
|
|
|
else
|
|
|
|
hvf='yes'
|
|
|
|
LDFLAGS="-framework Hypervisor $LDFLAGS"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2016-06-06 19:02:50 +08:00
|
|
|
#################################################
|
|
|
|
# Sparc implicitly links with --relax, which is
|
|
|
|
# incompatible with -r, so --no-relax should be
|
|
|
|
# given. It does no harm to give it on other
|
|
|
|
# platforms too.
|
|
|
|
|
|
|
|
# Note: the prototype is needed since QEMU_CFLAGS
|
|
|
|
# contains -Wmissing-prototypes
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
extern int foo(void);
|
|
|
|
int foo(void) { return 0; }
|
|
|
|
EOF
|
|
|
|
if ! compile_object ""; then
|
|
|
|
error_exit "Failed to compile object file for LD_REL_FLAGS test"
|
|
|
|
fi
|
2016-11-29 23:37:20 +08:00
|
|
|
for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
|
|
|
|
if do_cc -nostdlib $i -o $TMPMO $TMPO; then
|
|
|
|
LD_REL_FLAGS=$i
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
|
|
|
|
feature_not_found "modules" "Cannot find how to build relocatable objects"
|
2016-06-06 19:02:50 +08:00
|
|
|
fi
|
|
|
|
|
build: include sys/sysmacros.h for major() and minor()
The definition of the major() and minor() macros are moving within glibc to
<sys/sysmacros.h>. Include this header when it is available to avoid the
following sorts of build-stopping messages:
qga/commands-posix.c: In function ‘dev_major_minor’:
qga/commands-posix.c:656:13: error: In the GNU C Library, "major" is defined
by <sys/sysmacros.h>. For historical compatibility, it is
currently defined by <sys/types.h> as well, but we plan to
remove this soon. To use "major", include <sys/sysmacros.h>
directly. If you did not intend to use a system-defined macro
"major", you should undefine it after including <sys/types.h>. [-Werror]
*devmajor = major(st.st_rdev);
^~~~~~~~~~~~~~~~~~~~~~~~~~
qga/commands-posix.c:657:13: error: In the GNU C Library, "minor" is defined
by <sys/sysmacros.h>. For historical compatibility, it is
currently defined by <sys/types.h> as well, but we plan to
remove this soon. To use "minor", include <sys/sysmacros.h>
directly. If you did not intend to use a system-defined macro
"minor", you should undefine it after including <sys/types.h>. [-Werror]
*devminor = minor(st.st_rdev);
^~~~~~~~~~~~~~~~~~~~~~~~~~
The additional include allows the build to complete on Fedora 26 (Rawhide)
with glibc version 2.24.90.
Signed-off-by: Christopher Covington <cov@codeaurora.org>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2016-12-29 04:04:33 +08:00
|
|
|
##########################################
|
|
|
|
# check for sysmacros.h
|
|
|
|
|
|
|
|
have_sysmacros=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/sysmacros.h>
|
|
|
|
int main(void) {
|
|
|
|
return makedev(0, 0);
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
have_sysmacros=yes
|
|
|
|
fi
|
|
|
|
|
block/vxhs.c: Add support for a new block device type called "vxhs"
Source code for the qnio library that this code loads can be downloaded from:
https://github.com/VeritasHyperScale/libqnio.git
Sample command line using JSON syntax:
./x86_64-softmmu/qemu-system-x86_64 -name instance-00000008 -S -vnc 0.0.0.0:0
-k en-us -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
-msg timestamp=on
'json:{"driver":"vxhs","vdisk-id":"c3e9095a-a5ee-4dce-afeb-2a59fb387410",
"server":{"host":"172.172.17.4","port":"9999"}}'
Sample command line using URI syntax:
qemu-img convert -f raw -O raw -n
/var/lib/nova/instances/_base/0c5eacd5ebea5ed914b6a3e7b18f1ce734c386ad
vxhs://192.168.0.1:9999/c6718f6b-0401-441d-a8c3-1f0064d75ee0
Sample command line using TLS credentials (run in secure mode):
./qemu-io --object
tls-creds-x509,id=tls0,dir=/etc/pki/qemu/vxhs,endpoint=client -c 'read
-v 66000 2.5k' 'json:{"server.host": "127.0.0.1", "server.port": "9999",
"vdisk-id": "/test.raw", "driver": "vxhs", "tls-creds":"tls0"}'
[Jeff: Modified trace-events with the correct string formatting]
Signed-off-by: Ashish Mittal <Ashish.Mittal@veritas.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Signed-off-by: Jeff Cody <jcody@redhat.com>
Message-id: 1491277689-24949-2-git-send-email-Ashish.Mittal@veritas.com
2017-04-04 11:48:08 +08:00
|
|
|
##########################################
|
|
|
|
# Veritas HyperScale block driver VxHS
|
|
|
|
# Check if libvxhs is installed
|
|
|
|
|
|
|
|
if test "$vxhs" != "no" ; then
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <qnio/qnio_api.h>
|
|
|
|
|
|
|
|
void *vxhs_callback;
|
|
|
|
|
|
|
|
int main(void) {
|
|
|
|
iio_init(QNIO_VERSION, vxhs_callback);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
vxhs_libs="-lvxhs -lssl"
|
|
|
|
if compile_prog "" "$vxhs_libs" ; then
|
|
|
|
vxhs=yes
|
|
|
|
else
|
|
|
|
if test "$vxhs" = "yes" ; then
|
|
|
|
feature_not_found "vxhs block device" "Install libvxhs See github"
|
|
|
|
fi
|
|
|
|
vxhs=no
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2017-03-15 00:59:53 +08:00
|
|
|
##########################################
|
|
|
|
# check for _Static_assert()
|
|
|
|
|
|
|
|
have_static_assert=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
_Static_assert(1, "success");
|
|
|
|
int main(void) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
have_static_assert=yes
|
|
|
|
fi
|
|
|
|
|
2017-07-17 21:58:33 +08:00
|
|
|
##########################################
|
|
|
|
# check for utmpx.h, it is missing e.g. on OpenBSD
|
|
|
|
|
|
|
|
have_utmpx=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <utmpx.h>
|
|
|
|
struct utmpx user_info;
|
|
|
|
int main(void) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
have_utmpx=yes
|
|
|
|
fi
|
|
|
|
|
2019-03-14 11:57:28 +08:00
|
|
|
##########################################
|
|
|
|
# check for getrandom()
|
|
|
|
|
|
|
|
have_getrandom=no
|
|
|
|
cat > $TMPC << EOF
|
|
|
|
#include <sys/random.h>
|
|
|
|
int main(void) {
|
|
|
|
return getrandom(0, 0, GRND_NONBLOCK);
|
|
|
|
}
|
|
|
|
EOF
|
|
|
|
if compile_prog "" "" ; then
|
|
|
|
have_getrandom=yes
|
|
|
|
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);
|
|
|
|
return *(int *)(tmp + 2);
|
|
|
|
}
|
|
|
|
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
|
|
|
|
|
2018-04-04 21:24:39 +08:00
|
|
|
##########################################
|
|
|
|
# Docker and cross-compiler support
|
|
|
|
#
|
|
|
|
# This is specifically for building test
|
|
|
|
# cases for foreign architectures, not
|
|
|
|
# cross-compiling QEMU itself.
|
|
|
|
|
|
|
|
if has "docker"; then
|
|
|
|
docker=$($python $source_path/tests/docker/docker.py probe)
|
|
|
|
fi
|
|
|
|
|
2018-07-18 15:47:59 +08:00
|
|
|
##########################################
|
|
|
|
# check for libpmem
|
|
|
|
|
|
|
|
if test "$libpmem" != "no"; then
|
|
|
|
if $pkg_config --exists "libpmem"; then
|
|
|
|
libpmem="yes"
|
|
|
|
libpmem_libs=$($pkg_config --libs libpmem)
|
|
|
|
libpmem_cflags=$($pkg_config --cflags libpmem)
|
|
|
|
libs_softmmu="$libs_softmmu $libpmem_libs"
|
|
|
|
QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
|
|
|
|
else
|
|
|
|
if test "$libpmem" = "yes" ; then
|
|
|
|
feature_not_found "libpmem" "Install nvml or pmdk"
|
|
|
|
fi
|
|
|
|
libpmem="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2019-02-13 00:25:23 +08:00
|
|
|
##########################################
|
|
|
|
# check for slirp
|
|
|
|
|
|
|
|
case "$slirp" in
|
|
|
|
"" | yes)
|
|
|
|
if $pkg_config slirp; then
|
|
|
|
slirp=system
|
2019-04-24 19:00:41 +08:00
|
|
|
elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
|
|
|
|
slirp=git
|
2019-02-13 00:25:23 +08:00
|
|
|
elif test -e "${source_path}/slirp/Makefile" ; then
|
|
|
|
slirp=internal
|
|
|
|
elif test -z "$slirp" ; then
|
|
|
|
slirp=no
|
|
|
|
else
|
|
|
|
feature_not_found "slirp" "Install slirp devel or git submodule"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
|
|
|
|
system)
|
|
|
|
if ! $pkg_config slirp; then
|
|
|
|
feature_not_found "slirp" "Install slirp devel"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
case "$slirp" in
|
2019-04-24 19:00:41 +08:00
|
|
|
git | internal)
|
|
|
|
if test "$slirp" = git; then
|
|
|
|
git_submodules="${git_submodules} slirp"
|
|
|
|
fi
|
2019-02-13 00:25:23 +08:00
|
|
|
mkdir -p slirp
|
|
|
|
slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
|
|
|
|
slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
|
|
|
|
;;
|
|
|
|
|
|
|
|
system)
|
|
|
|
slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
|
|
|
|
slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
|
|
|
|
slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
|
|
|
|
;;
|
|
|
|
|
|
|
|
no)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
error_exit "Unknown state for slirp: $slirp"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
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
|
|
|
|
CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
|
|
|
|
LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
|
2015-11-04 04:43:42 +08:00
|
|
|
elif test "$fortify_source" = "yes" ; then
|
2013-09-05 18:54:49 +08:00
|
|
|
CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
|
2018-03-06 18:32:44 +08:00
|
|
|
elif test "$debug" = "no"; then
|
|
|
|
CFLAGS="-O2 $CFLAGS"
|
2009-08-03 20:45:59 +08:00
|
|
|
fi
|
2009-09-30 07:10:55 +08:00
|
|
|
|
2018-01-16 23:11:51 +08:00
|
|
|
if test "$have_asan" = "yes"; then
|
|
|
|
CFLAGS="-fsanitize=address $CFLAGS"
|
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
|
|
|
|
if test "$have_ubsan" = "yes"; then
|
|
|
|
CFLAGS="-fsanitize=undefined $CFLAGS"
|
|
|
|
fi
|
|
|
|
|
2014-02-03 17:26:13 +08:00
|
|
|
##########################################
|
|
|
|
# Do we have libnfs
|
|
|
|
if test "$libnfs" != "no" ; then
|
2014-03-17 16:37:33 +08:00
|
|
|
if $pkg_config --atleast-version=1.9.3 libnfs; then
|
2014-02-03 17:26:13 +08:00
|
|
|
libnfs="yes"
|
|
|
|
libnfs_libs=$($pkg_config --libs libnfs)
|
|
|
|
else
|
|
|
|
if test "$libnfs" = "yes" ; then
|
2014-06-26 17:34:50 +08:00
|
|
|
feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
|
2014-02-03 17:26:13 +08:00
|
|
|
fi
|
|
|
|
libnfs="no"
|
|
|
|
fi
|
|
|
|
fi
|
2012-05-02 02:45:39 +08:00
|
|
|
|
2018-10-23 19:23:10 +08:00
|
|
|
##########################################
|
|
|
|
# Do we have libudev
|
|
|
|
if test "$libudev" != "no" ; then
|
|
|
|
if $pkg_config libudev && test "$static" != "yes"; then
|
|
|
|
libudev="yes"
|
|
|
|
libudev_libs=$($pkg_config --libs libudev)
|
|
|
|
else
|
|
|
|
libudev="no"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2012-07-18 22:10:18 +08:00
|
|
|
# Now we've finished running tests it's OK to add -Werror to the compiler flags
|
|
|
|
if test "$werror" = "yes"; then
|
|
|
|
QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
|
|
|
|
fi
|
|
|
|
|
2009-08-03 20:45:59 +08:00
|
|
|
if test "$solaris" = "no" ; then
|
|
|
|
if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
|
2009-08-03 20:46:00 +08:00
|
|
|
LDFLAGS="-Wl,--warn-common $LDFLAGS"
|
2009-08-03 20:45:59 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2012-03-29 16:55:18 +08:00
|
|
|
# test if pod2man has --utf8 option
|
|
|
|
if pod2man --help | grep -q utf8; then
|
|
|
|
POD2MAN="pod2man --utf8"
|
|
|
|
else
|
|
|
|
POD2MAN="pod2man"
|
|
|
|
fi
|
|
|
|
|
2010-09-19 16:36:34 +08:00
|
|
|
# Use ASLR, no-SEH and DEP if available
|
|
|
|
if test "$mingw32" = "yes" ; then
|
|
|
|
for flag in --dynamicbase --no-seh --nxcompat; do
|
2017-08-23 18:16:23 +08:00
|
|
|
if ld_has $flag ; then
|
2010-09-19 16:36:34 +08:00
|
|
|
LDFLAGS="-Wl,$flag $LDFLAGS"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
2019-03-07 22:28:22 +08:00
|
|
|
# Disable OpenBSD W^X if available
|
|
|
|
if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
|
|
|
wx_ldflags="-Wl,-z,wxneeded"
|
|
|
|
if compile_prog "" "$wx_ldflags"; then
|
|
|
|
QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2012-04-19 03:55:39 +08:00
|
|
|
qemu_confdir=$sysconfdir$confsuffix
|
2014-02-10 14:48:57 +08:00
|
|
|
qemu_moddir=$libdir$confsuffix
|
2012-04-19 03:55:49 +08:00
|
|
|
qemu_datadir=$datadir$confsuffix
|
2013-02-20 21:43:24 +08:00
|
|
|
qemu_localedir="$datadir/locale"
|
2019-01-10 20:00:45 +08:00
|
|
|
qemu_icondir="$datadir/icons"
|
2019-01-10 20:00:46 +08:00
|
|
|
qemu_desktopdir="$datadir/applications"
|
2010-05-26 22:08:20 +08:00
|
|
|
|
2017-07-14 16:33:44 +08:00
|
|
|
# We can only support ivshmem if we have eventfd
|
|
|
|
if [ "$eventfd" = "yes" ]; then
|
|
|
|
ivshmem=yes
|
|
|
|
fi
|
|
|
|
|
2012-09-10 19:26:29 +08:00
|
|
|
tools=""
|
|
|
|
if test "$want_tools" = "yes" ; then
|
2018-09-25 15:56:42 +08:00
|
|
|
tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
|
2012-09-10 19:26:29 +08:00
|
|
|
if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
|
|
|
|
tools="qemu-nbd\$(EXESUF) $tools"
|
2017-07-14 16:33:45 +08:00
|
|
|
fi
|
|
|
|
if [ "$ivshmem" = "yes" ]; then
|
2014-09-08 17:17:48 +08:00
|
|
|
tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
|
2012-09-10 19:26:29 +08:00
|
|
|
fi
|
2018-12-20 09:24:41 +08:00
|
|
|
if [ "$curl" = "yes" ]; then
|
|
|
|
tools="elf2dmp\$(EXESUF) $tools"
|
2018-08-29 20:41:25 +08:00
|
|
|
fi
|
2012-09-10 19:26:29 +08:00
|
|
|
fi
|
|
|
|
if test "$softmmu" = yes ; then
|
2017-08-22 12:50:18 +08:00
|
|
|
if test "$linux" = yes; then
|
|
|
|
if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
|
2012-05-01 07:12:02 +08:00
|
|
|
virtfs=yes
|
|
|
|
tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
|
|
|
|
else
|
|
|
|
if test "$virtfs" = yes; then
|
2017-08-22 12:50:18 +08:00
|
|
|
error_exit "VirtFS requires libcap devel and libattr devel"
|
2012-02-24 16:30:42 +08:00
|
|
|
fi
|
2012-05-01 07:12:03 +08:00
|
|
|
virtfs=no
|
2012-05-01 07:12:02 +08:00
|
|
|
fi
|
2017-08-22 12:50:55 +08:00
|
|
|
if test "$mpath" != no && test "$mpathpersist" = yes ; then
|
|
|
|
mpath=yes
|
|
|
|
else
|
|
|
|
if test "$mpath" = yes; then
|
|
|
|
error_exit "Multipath requires libmpathpersist devel"
|
|
|
|
fi
|
|
|
|
mpath=no
|
|
|
|
fi
|
2017-08-22 12:50:18 +08:00
|
|
|
tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
|
|
|
|
else
|
|
|
|
if test "$virtfs" = yes; then
|
|
|
|
error_exit "VirtFS is supported only on Linux"
|
|
|
|
fi
|
|
|
|
virtfs=no
|
2017-08-22 12:50:55 +08:00
|
|
|
if test "$mpath" = yes; then
|
|
|
|
error_exit "Multipath is supported only on Linux"
|
|
|
|
fi
|
|
|
|
mpath=no
|
2011-12-14 16:28:42 +08:00
|
|
|
fi
|
2017-10-20 03:16:06 +08:00
|
|
|
if test "$xkbcommon" = "yes"; then
|
|
|
|
tools="qemu-keymap\$(EXESUF) $tools"
|
|
|
|
fi
|
2017-10-05 23:33:28 +08:00
|
|
|
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
|
build: qemu-ga: add 'qemu-ga' build target for w32
Currently POSIX builds rely on 'qemu-ga' target to do qga-only
distributable build. On w32, as with most standalone binary targets,
we rely on 'qemu-ga.exe' target.
Unlike with POSIX, qemu-ga for w32 has a number of related targets
such as VSS DLL and MSI package. We can do the full distributable
qga-only build on w32 with:
make qemu-ga.exe
or:
make msi
To make that work, we tie VSS dependencies onto qemu-ga.exe.
However, in reality the DLL isn't part of the binary, so we use a
filter to pull them out of the LINK recipe, which attempts to link
against prereqs for binary targets. Additionally, it could be argued
that VSS is a separate distributable, and shouldn't be implied by
qemu-ga.exe binary target.
To avoid this, we can tie the VSS dependencies only to the 'msi'
target, but that would make it impossible to do a qga-only build of
the w32 distributable without building the 'msi' package, which was
supported in the past.
An alternative approach is to add a new target to build the whole
distributable. w32 allows us to use the same build target we use
on POSIX, 'qemu-ga', since the current binary-only target on w32
is 'qemu-ga.exe'.
To further simplify the build, we also make 'qemu-ga' build the MSI
package if the appropriate ./configure options are set, making the
full qga-only build the same on both POSIX and w32: `make qemu-ga`
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
2015-09-08 07:47:05 +08:00
|
|
|
tools="qemu-ga $tools"
|
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
|
|
|
|
2015-08-26 23:49:13 +08:00
|
|
|
# Guest agent Window MSI package
|
|
|
|
|
|
|
|
if test "$guest_agent" != yes; then
|
|
|
|
if test "$guest_agent_msi" = yes; then
|
|
|
|
error_exit "MSI guest agent package requires guest agent enabled"
|
|
|
|
fi
|
|
|
|
guest_agent_msi=no
|
|
|
|
elif test "$mingw32" != "yes"; then
|
|
|
|
if test "$guest_agent_msi" = "yes"; then
|
|
|
|
error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
|
|
|
|
fi
|
|
|
|
guest_agent_msi=no
|
|
|
|
elif ! has wixl; then
|
|
|
|
if test "$guest_agent_msi" = "yes"; then
|
|
|
|
error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
|
|
|
|
fi
|
|
|
|
guest_agent_msi=no
|
2015-08-27 00:14:31 +08:00
|
|
|
else
|
|
|
|
# we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
|
|
|
|
# disabled explicitly
|
|
|
|
if test "$guest_agent_msi" != "no"; then
|
|
|
|
guest_agent_msi=yes
|
|
|
|
fi
|
2015-08-26 23:49:13 +08:00
|
|
|
fi
|
|
|
|
|
2015-08-27 00:14:31 +08:00
|
|
|
if test "$guest_agent_msi" = "yes"; then
|
2015-08-26 23:49:13 +08:00
|
|
|
if test "$guest_agent_with_vss" = "yes"; then
|
|
|
|
QEMU_GA_MSI_WITH_VSS="-D InstallVss"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$QEMU_GA_MANUFACTURER" = ""; then
|
|
|
|
QEMU_GA_MANUFACTURER=QEMU
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$QEMU_GA_DISTRO" = ""; then
|
|
|
|
QEMU_GA_DISTRO=Linux
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$QEMU_GA_VERSION" = ""; then
|
2016-05-16 21:10:20 +08:00
|
|
|
QEMU_GA_VERSION=$(cat $source_path/VERSION)
|
2015-08-26 23:49:13 +08:00
|
|
|
fi
|
|
|
|
|
2016-05-16 21:10:20 +08:00
|
|
|
QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
|
2015-08-26 23:49:13 +08:00
|
|
|
|
|
|
|
case "$cpu" in
|
|
|
|
x86_64)
|
|
|
|
QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
|
|
|
|
;;
|
|
|
|
i386)
|
|
|
|
QEMU_GA_MSI_ARCH="-D Arch=32"
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
error_exit "CPU $cpu not supported for building installation package"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
|
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"; } && \
|
|
|
|
test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
|
|
|
|
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-05-02 06:38:18 +08:00
|
|
|
if test "$ARCH" = "ppc64" && test "$targetos" != "Darwin" ; then
|
2011-04-01 12:15:23 +08:00
|
|
|
roms="$roms spapr-rtas"
|
|
|
|
fi
|
2010-05-26 22:08:29 +08:00
|
|
|
|
2019-01-14 20:52:26 +08:00
|
|
|
# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
|
2013-04-23 09:23:03 +08:00
|
|
|
if test "$cpu" = "s390x" ; then
|
2019-01-14 20:52:26 +08:00
|
|
|
write_c_skeleton
|
|
|
|
if compile_prog "-march=z900" ""; then
|
|
|
|
roms="$roms s390-ccw"
|
|
|
|
fi
|
2013-04-23 09:23:03 +08:00
|
|
|
fi
|
|
|
|
|
2013-06-22 10:10:16 +08:00
|
|
|
# Probe for the need for relocating the user-only binary.
|
2016-06-19 06:05:01 +08:00
|
|
|
if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
|
2013-06-22 10:10:16 +08:00
|
|
|
textseg_addr=
|
|
|
|
case "$cpu" in
|
2014-04-24 23:25:03 +08:00
|
|
|
arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
|
|
|
|
# ??? Rationale for choosing this address
|
2013-06-22 10:10:16 +08:00
|
|
|
textseg_addr=0x60000000
|
|
|
|
;;
|
|
|
|
mips)
|
2014-04-24 23:25:03 +08:00
|
|
|
# A 256M aligned address, high in the address space, with enough
|
|
|
|
# room for the code_gen_buffer above it before the stack.
|
|
|
|
textseg_addr=0x60000000
|
2013-06-22 10:10:16 +08:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
if [ -n "$textseg_addr" ]; then
|
|
|
|
cat > $TMPC <<EOF
|
|
|
|
int main(void) { return 0; }
|
|
|
|
EOF
|
|
|
|
textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
|
|
|
|
if ! compile_prog "" "$textseg_ldflags"; then
|
|
|
|
# In case ld does not support -Ttext-segment, edit the default linker
|
|
|
|
# script via sed to set the .text start addr. This is needed on FreeBSD
|
|
|
|
# at least.
|
2016-06-19 06:05:01 +08:00
|
|
|
if ! $ld --verbose >/dev/null 2>&1; then
|
|
|
|
error_exit \
|
|
|
|
"We need to link the QEMU user mode binaries at a" \
|
|
|
|
"specific text address. Unfortunately your linker" \
|
|
|
|
"doesn't support either the -Ttext-segment option or" \
|
|
|
|
"printing the default linker script with --verbose." \
|
|
|
|
"If you don't want the user mode binaries, pass the" \
|
|
|
|
"--disable-user option to configure."
|
|
|
|
fi
|
|
|
|
|
2013-06-22 10:10:16 +08:00
|
|
|
$ld --verbose | sed \
|
|
|
|
-e '1,/==================================================/d' \
|
|
|
|
-e '/==================================================/,$d' \
|
|
|
|
-e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
|
|
|
|
-e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
|
|
|
|
textseg_ldflags="-Wl,-T../config-host.ld"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
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
|
|
|
|
|
|
|
|
if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
|
|
|
|
# C++ compiler $cxx works ok with C compiler $cc
|
|
|
|
:
|
|
|
|
else
|
|
|
|
echo "C++ compiler $cxx does not work with C compiler $cc"
|
|
|
|
echo "Disabling C++ specific optional code"
|
|
|
|
cxx=
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
echo "No C++ compiler available; disabling C++ specific optional code"
|
|
|
|
cxx=
|
|
|
|
fi
|
|
|
|
|
2016-05-07 02:03:09 +08:00
|
|
|
echo_version() {
|
|
|
|
if test "$1" = "yes" ; then
|
|
|
|
echo "($2)"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2014-10-02 16:03:55 +08:00
|
|
|
# prepend pixman and ftd flags after all config tests are done
|
|
|
|
QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
|
2018-04-16 07:05:19 +08:00
|
|
|
QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
|
2014-10-02 16:03:55 +08:00
|
|
|
libs_softmmu="$pixman_libs $libs_softmmu"
|
2012-11-07 18:06:23 +08:00
|
|
|
|
2003-06-10 03:53:12 +08:00
|
|
|
echo "Install prefix $prefix"
|
2016-05-16 21:10:20 +08:00
|
|
|
echo "BIOS directory $(eval echo $qemu_datadir)"
|
2017-09-14 19:42:36 +08:00
|
|
|
echo "firmware path $(eval echo $firmwarepath)"
|
2016-05-16 21:10:20 +08:00
|
|
|
echo "binary directory $(eval echo $bindir)"
|
|
|
|
echo "library directory $(eval echo $libdir)"
|
|
|
|
echo "module directory $(eval echo $qemu_moddir)"
|
|
|
|
echo "libexec directory $(eval echo $libexecdir)"
|
|
|
|
echo "include directory $(eval echo $includedir)"
|
|
|
|
echo "config directory $(eval echo $sysconfdir)"
|
2004-04-03 04:55:59 +08:00
|
|
|
if test "$mingw32" = "no" ; then
|
2016-05-16 21:10:20 +08:00
|
|
|
echo "local state directory $(eval echo $local_statedir)"
|
|
|
|
echo "Manual directory $(eval echo $mandir)"
|
2003-06-10 03:53:12 +08:00
|
|
|
echo "ELF interp prefix $interp_prefix"
|
2013-05-18 12:31:50 +08:00
|
|
|
else
|
|
|
|
echo "local state directory queried at runtime"
|
2013-08-07 23:40:03 +08:00
|
|
|
echo "Windows SDK $win_sdk"
|
2004-04-03 04:55:59 +08:00
|
|
|
fi
|
2003-10-01 08:13:48 +08:00
|
|
|
echo "Source path $source_path"
|
2017-10-20 22:02:43 +08:00
|
|
|
echo "GIT binary $git"
|
2017-09-29 18:11:56 +08:00
|
|
|
echo "GIT submodules $git_submodules"
|
2003-06-10 03:53:12 +08:00
|
|
|
echo "C compiler $cc"
|
2005-07-23 22:27:54 +08:00
|
|
|
echo "Host C compiler $host_cc"
|
2013-08-07 23:39:36 +08:00
|
|
|
echo "C++ compiler $cxx"
|
2012-08-12 05:34:40 +08:00
|
|
|
echo "Objective-C compiler $objcc"
|
2013-10-22 04:03:06 +08:00
|
|
|
echo "ARFLAGS $ARFLAGS"
|
2009-08-03 20:46:01 +08:00
|
|
|
echo "CFLAGS $CFLAGS"
|
2009-08-03 20:46:21 +08:00
|
|
|
echo "QEMU_CFLAGS $QEMU_CFLAGS"
|
2009-08-03 20:46:01 +08:00
|
|
|
echo "LDFLAGS $LDFLAGS"
|
2018-04-16 07:05:19 +08:00
|
|
|
echo "QEMU_LDFLAGS $QEMU_LDFLAGS"
|
2003-06-10 03:53:12 +08:00
|
|
|
echo "make $make"
|
2006-04-17 21:57:12 +08:00
|
|
|
echo "install $install"
|
2018-11-09 23:07:07 +08:00
|
|
|
echo "python $python ($python_version)"
|
2019-02-13 00:25:23 +08:00
|
|
|
echo "slirp support $slirp $(echo_version $slirp $slirp_version)"
|
|
|
|
if test "$slirp" != "no" ; then
|
2011-09-03 04:53:28 +08:00
|
|
|
echo "smbd $smbd"
|
|
|
|
fi
|
2014-02-10 14:48:56 +08:00
|
|
|
echo "module support $modules"
|
2003-06-10 03:53:12 +08:00
|
|
|
echo "host CPU $cpu"
|
2003-06-16 04:25:43 +08:00
|
|
|
echo "host big endian $bigendian"
|
2003-08-11 05:36:04 +08:00
|
|
|
echo "target list $target_list"
|
2003-06-10 03:53:12 +08:00
|
|
|
echo "gprof enabled $gprof"
|
2008-10-08 03:16:17 +08:00
|
|
|
echo "sparse enabled $sparse"
|
2009-04-06 01:41:02 +08:00
|
|
|
echo "strip binaries $strip_opt"
|
2006-02-09 06:39:17 +08:00
|
|
|
echo "profiler $profiler"
|
2003-06-10 03:53:12 +08:00
|
|
|
echo "static build $static"
|
2005-03-02 05:37:28 +08:00
|
|
|
if test "$darwin" = "yes" ; then
|
|
|
|
echo "Cocoa support $cocoa"
|
|
|
|
fi
|
2016-05-16 21:10:20 +08:00
|
|
|
echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
|
2019-01-10 20:00:47 +08:00
|
|
|
echo "SDL image support $sdl_image"
|
2016-05-16 21:10:20 +08:00
|
|
|
echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
|
2015-05-26 18:26:21 +08:00
|
|
|
echo "GTK GL support $gtk_gl"
|
2016-05-16 21:10:20 +08:00
|
|
|
echo "VTE support $vte $(echo_version $vte $vteversion)"
|
2016-06-06 17:05:06 +08:00
|
|
|
echo "TLS priority $tls_priority"
|
2015-07-02 01:10:29 +08:00
|
|
|
echo "GNUTLS support $gnutls"
|
2015-10-16 23:36:53 +08:00
|
|
|
echo "libgcrypt $gcrypt"
|
2016-05-16 21:10:20 +08:00
|
|
|
echo "nettle $nettle $(echo_version $nettle $nettle_version)"
|
2015-04-13 21:01:39 +08:00
|
|
|
echo "libtasn1 $tasn1"
|
authz: add QAuthZPAM object type for authorizing using PAM
Add an authorization backend that talks to PAM to check whether the user
identity is allowed. This only uses the PAM account validation facility,
which is essentially just a check to see if the provided username is permitted
access. It doesn't use the authentication or session parts of PAM, since
that's dealt with by the relevant part of QEMU (eg VNC server).
Consider starting QEMU with a VNC server and telling it to use TLS with
x509 client certificates and configuring it to use an PAM to validate
the x509 distinguished name. In this example we're telling it to use PAM
for the QAuthZ impl with a service name of "qemu-vnc"
$ qemu-system-x86_64 \
-object tls-creds-x509,id=tls0,dir=/home/berrange/security/qemutls,\
endpoint=server,verify-peer=yes \
-object authz-pam,id=authz0,service=qemu-vnc \
-vnc :1,tls-creds=tls0,tls-authz=authz0
This requires an /etc/pam/qemu-vnc file to be created with the auth
rules. A very simple file based whitelist can be setup using
$ cat > /etc/pam/qemu-vnc <<EOF
account requisite pam_listfile.so item=user sense=allow file=/etc/qemu/vnc.allow
EOF
The /etc/qemu/vnc.allow file simply contains one username per line. Any
username not in the file is denied. The usernames in this example are
the x509 distinguished name from the client's x509 cert.
$ cat > /etc/qemu/vnc.allow <<EOF
CN=laptop.berrange.com,O=Berrange Home,L=London,ST=London,C=GB
EOF
More interesting would be to configure PAM to use an LDAP backend, so
that the QEMU authorization check data can be centralized instead of
requiring each compute host to have file maintained.
The main limitation with this PAM module is that the rules apply to all
QEMU instances on the host. Setting up different rules per VM, would
require creating a separate PAM service name & config file for every
guest. An alternative approach for the future might be to not pass in
the plain username to PAM, but instead combine the VM name or UUID with
the username. This requires further consideration though.
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-07-27 21:13:56 +08:00
|
|
|
echo "PAM $auth_pam"
|
2019-03-11 21:51:26 +08:00
|
|
|
echo "iconv support $iconv"
|
2008-02-11 00:33:14 +08:00
|
|
|
echo "curses support $curses"
|
2018-05-25 23:36:09 +08:00
|
|
|
echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
|
2009-05-11 23:41:42 +08:00
|
|
|
echo "curl support $curl"
|
2004-04-01 07:37:16 +08:00
|
|
|
echo "mingw32 support $mingw32"
|
2008-06-26 05:04:05 +08:00
|
|
|
echo "Audio drivers $audio_drv_list"
|
2013-05-29 19:35:40 +08:00
|
|
|
echo "Block whitelist (rw) $block_drv_rw_whitelist"
|
|
|
|
echo "Block whitelist (ro) $block_drv_ro_whitelist"
|
2012-02-24 16:30:42 +08:00
|
|
|
echo "VirtFS support $virtfs"
|
2017-08-22 12:50:55 +08:00
|
|
|
echo "Multipath support $mpath"
|
2011-03-16 20:33:36 +08:00
|
|
|
echo "VNC support $vnc"
|
|
|
|
if test "$vnc" = "yes" ; then
|
|
|
|
echo "VNC SASL support $vnc_sasl"
|
|
|
|
echo "VNC JPEG support $vnc_jpeg"
|
|
|
|
echo "VNC PNG support $vnc_png"
|
|
|
|
fi
|
2007-04-17 02:27:06 +08:00
|
|
|
if test -n "$sparc_cpu"; then
|
|
|
|
echo "Target Sparc Arch $sparc_cpu"
|
|
|
|
fi
|
2009-04-22 23:19:10 +08:00
|
|
|
echo "xen support $xen"
|
2015-01-20 19:06:19 +08:00
|
|
|
if test "$xen" = "yes" ; then
|
|
|
|
echo "xen ctrl version $xen_ctrl_version"
|
|
|
|
fi
|
2008-04-08 14:01:02 +08:00
|
|
|
echo "brlapi support $brlapi"
|
2009-08-13 00:29:50 +08:00
|
|
|
echo "bluez support $bluez"
|
2009-08-13 00:29:52 +08:00
|
|
|
echo "Documentation $docs"
|
2011-11-16 02:12:17 +08:00
|
|
|
echo "PIE $pie"
|
2008-07-19 17:56:24 +08:00
|
|
|
echo "vde support $vde"
|
2013-11-06 18:44:06 +08:00
|
|
|
echo "netmap support $netmap"
|
2009-08-20 22:58:35 +08:00
|
|
|
echo "Linux AIO support $linux_aio"
|
2010-06-15 04:34:41 +08:00
|
|
|
echo "ATTR/XATTR support $attr"
|
2008-11-27 23:45:16 +08:00
|
|
|
echo "Install blobs $blobs"
|
2009-08-13 00:29:56 +08:00
|
|
|
echo "KVM support $kvm"
|
2017-01-10 18:59:57 +08:00
|
|
|
echo "HAX support $hax"
|
i386: hvf: add code base from Google's QEMU repository
This file begins tracking the files that will be the code base for HVF
support in QEMU. This code base is part of Google's QEMU version of
their Android emulator, and can be found at
https://android.googlesource.com/platform/external/qemu/+/emu-master-dev
This code is based on Veertu Inc's vdhh (Veertu Desktop Hosted
Hypervisor), found at https://github.com/veertuinc/vdhh. Everything is
appropriately licensed under GPL v2-or-later, except for the code inside
x86_task.c and x86_task.h, which, deriving from KVM (the Linux kernel),
is licensed GPL v2-only.
This code base already implements a very great deal of functionality,
although Google's version removed from Vertuu's the support for APIC
page and hyperv-related stuff. According to the Android Emulator Release
Notes, Revision 26.1.3 (August 2017), "Hypervisor.framework is now
enabled by default on macOS for 32-bit x86 images to improve performance
and macOS compatibility", although we better use with caution for, as the
same Revision warns us, "If you experience issues with it specifically,
please file a bug report...". The code hasn't seen much update in the
last 5 months, so I think that we can further develop the code with
occasional visiting Google's repository to see if there has been any
update.
On top of Google's code, the following changes were made:
- add code to the configure script to support the --enable-hvf argument.
If the OS is Darwin, it checks for presence of HVF in the system. The
patch also adds strings related to HVF in the file qemu-options.hx.
QEMU will only support the modern syntax style '-M accel=hvf' no enable
hvf; the legacy '-enable-hvf' will not be supported.
- fix styling issues
- add glue code to cpus.c
- move HVFX86EmulatorState field to CPUX86State, changing the
the emulation functions to have a parameter with signature 'CPUX86State *'
instead of 'CPUState *' so we don't have to get the 'env'.
Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-2-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-3-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-5-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-6-Sergio.G.DelReal@gmail.com>
Message-Id: <20170905035457.3753-7-Sergio.G.DelReal@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-09-13 17:05:09 +08:00
|
|
|
echo "HVF support $hvf"
|
2018-01-23 05:07:46 +08:00
|
|
|
echo "WHPX support $whpx"
|
2017-07-03 22:59:07 +08:00
|
|
|
echo "TCG support $tcg"
|
|
|
|
if test "$tcg" = "yes" ; then
|
|
|
|
echo "TCG debug enabled $debug_tcg"
|
|
|
|
echo "TCG interpreter $tcg_interpreter"
|
|
|
|
fi
|
2017-12-20 21:16:46 +08:00
|
|
|
echo "malloc trim support $malloc_trim"
|
2013-07-22 22:01:54 +08:00
|
|
|
echo "RDMA support $rdma"
|
2018-08-16 23:16:37 +08:00
|
|
|
echo "PVRDMA support $pvrdma"
|
2008-12-16 18:43:48 +08:00
|
|
|
echo "fdt support $fdt"
|
2018-02-16 17:05:23 +08:00
|
|
|
echo "membarrier $membarrier"
|
2009-04-08 02:43:28 +08:00
|
|
|
echo "preadv support $preadv"
|
2009-09-20 14:56:26 +08:00
|
|
|
echo "fdatasync $fdatasync"
|
2010-09-25 19:26:05 +08:00
|
|
|
echo "madvise $madvise"
|
|
|
|
echo "posix_madvise $posix_madvise"
|
2018-01-05 01:39:36 +08:00
|
|
|
echo "posix_memalign $posix_memalign"
|
2012-01-26 22:42:26 +08:00
|
|
|
echo "libcap-ng support $cap_ng"
|
2010-03-17 19:08:17 +08:00
|
|
|
echo "vhost-net support $vhost_net"
|
2018-03-01 21:46:28 +08:00
|
|
|
echo "vhost-crypto support $vhost_crypto"
|
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
|
|
|
echo "vhost-scsi support $vhost_scsi"
|
2016-08-16 20:27:22 +08:00
|
|
|
echo "vhost-vsock support $vhost_vsock"
|
2017-08-03 17:07:46 +08:00
|
|
|
echo "vhost-user support $vhost_user"
|
2014-05-27 21:02:14 +08:00
|
|
|
echo "Trace backends $trace_backends"
|
2015-12-10 08:47:46 +08:00
|
|
|
if have_backend "simple"; then
|
2010-07-13 16:26:32 +08:00
|
|
|
echo "Trace output file $trace_file-<pid>"
|
2014-03-15 04:09:10 +08:00
|
|
|
fi
|
2016-05-16 21:10:20 +08:00
|
|
|
echo "spice support $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
|
2010-12-07 03:53:01 +08:00
|
|
|
echo "rbd support $rbd"
|
2010-12-17 18:41:15 +08:00
|
|
|
echo "xfsctl support $xfs"
|
2015-08-30 17:48:40 +08:00
|
|
|
echo "smartcard support $smartcard"
|
2012-11-30 23:02:11 +08:00
|
|
|
echo "libusb $libusb"
|
2011-07-19 17:04:10 +08:00
|
|
|
echo "usb net redir $usb_redir"
|
2014-11-20 16:49:44 +08:00
|
|
|
echo "OpenGL support $opengl"
|
2015-12-03 19:56:34 +08:00
|
|
|
echo "OpenGL dmabufs $opengl_dmabuf"
|
2011-10-25 16:24:24 +08:00
|
|
|
echo "libiscsi support $libiscsi"
|
2014-02-03 17:26:13 +08:00
|
|
|
echo "libnfs support $libnfs"
|
2011-08-02 03:52:57 +08:00
|
|
|
echo "build guest agent $guest_agent"
|
2013-08-07 23:40:03 +08:00
|
|
|
echo "QGA VSS support $guest_agent_with_vss"
|
2015-07-08 07:10:09 +08:00
|
|
|
echo "QGA w32 disk info $guest_agent_ntddscsi"
|
2015-08-26 04:46:18 +08:00
|
|
|
echo "QGA MSI support $guest_agent_msi"
|
2012-08-15 05:44:05 +08:00
|
|
|
echo "seccomp support $seccomp"
|
2013-04-08 19:11:27 +08:00
|
|
|
echo "coroutine backend $coroutine"
|
2013-09-11 22:42:35 +08:00
|
|
|
echo "coroutine pool $coroutine_pool"
|
2016-09-27 17:58:45 +08:00
|
|
|
echo "debug stack usage $debug_stack_usage"
|
2018-06-13 20:23:08 +08:00
|
|
|
echo "mutex debugging $debug_mutex"
|
2017-07-15 02:04:05 +08:00
|
|
|
echo "crypto afalg $crypto_afalg"
|
2012-09-24 17:12:45 +08:00
|
|
|
echo "GlusterFS support $glusterfs"
|
2012-05-02 02:45:39 +08:00
|
|
|
echo "gcov $gcov_tool"
|
|
|
|
echo "gcov enabled $gcov"
|
2013-02-28 01:47:52 +08:00
|
|
|
echo "TPM support $tpm"
|
2019-06-21 04:08:40 +08:00
|
|
|
echo "libssh support $libssh"
|
2013-05-10 20:16:40 +08:00
|
|
|
echo "QOM debugging $qom_cast_debug"
|
2017-05-15 22:05:29 +08:00
|
|
|
echo "Live block migration $live_block_migration"
|
2014-02-18 14:11:30 +08:00
|
|
|
echo "lzo support $lzo"
|
|
|
|
echo "snappy support $snappy"
|
2015-01-07 01:48:14 +08:00
|
|
|
echo "bzip2 support $bzip2"
|
2018-11-05 23:08:04 +08:00
|
|
|
echo "lzfse support $lzfse"
|
2014-05-14 17:43:28 +08:00
|
|
|
echo "NUMA host support $numa"
|
2018-01-12 17:01:19 +08:00
|
|
|
echo "libxml2 $libxml2"
|
2015-03-26 11:03:12 +08:00
|
|
|
echo "tcmalloc support $tcmalloc"
|
2015-06-19 18:56:58 +08:00
|
|
|
echo "jemalloc support $jemalloc"
|
2016-03-08 13:53:16 +08:00
|
|
|
echo "avx2 optimization $avx2_opt"
|
2016-07-27 15:01:48 +08:00
|
|
|
echo "replication support $replication"
|
block/vxhs.c: Add support for a new block device type called "vxhs"
Source code for the qnio library that this code loads can be downloaded from:
https://github.com/VeritasHyperScale/libqnio.git
Sample command line using JSON syntax:
./x86_64-softmmu/qemu-system-x86_64 -name instance-00000008 -S -vnc 0.0.0.0:0
-k en-us -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
-msg timestamp=on
'json:{"driver":"vxhs","vdisk-id":"c3e9095a-a5ee-4dce-afeb-2a59fb387410",
"server":{"host":"172.172.17.4","port":"9999"}}'
Sample command line using URI syntax:
qemu-img convert -f raw -O raw -n
/var/lib/nova/instances/_base/0c5eacd5ebea5ed914b6a3e7b18f1ce734c386ad
vxhs://192.168.0.1:9999/c6718f6b-0401-441d-a8c3-1f0064d75ee0
Sample command line using TLS credentials (run in secure mode):
./qemu-io --object
tls-creds-x509,id=tls0,dir=/etc/pki/qemu/vxhs,endpoint=client -c 'read
-v 66000 2.5k' 'json:{"server.host": "127.0.0.1", "server.port": "9999",
"vdisk-id": "/test.raw", "driver": "vxhs", "tls-creds":"tls0"}'
[Jeff: Modified trace-events with the correct string formatting]
Signed-off-by: Ashish Mittal <Ashish.Mittal@veritas.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Signed-off-by: Jeff Cody <jcody@redhat.com>
Message-id: 1491277689-24949-2-git-send-email-Ashish.Mittal@veritas.com
2017-04-04 11:48:08 +08:00
|
|
|
echo "VxHS block device $vxhs"
|
2018-11-07 14:36:44 +08:00
|
|
|
echo "bochs support $bochs"
|
|
|
|
echo "cloop support $cloop"
|
|
|
|
echo "dmg support $dmg"
|
|
|
|
echo "qcow v1 support $qcow1"
|
|
|
|
echo "vdi support $vdi"
|
|
|
|
echo "vvfat support $vvfat"
|
|
|
|
echo "qed support $qed"
|
|
|
|
echo "parallels support $parallels"
|
|
|
|
echo "sheepdog support $sheepdog"
|
2017-09-15 00:41:12 +08:00
|
|
|
echo "capstone $capstone"
|
2018-04-04 21:24:39 +08:00
|
|
|
echo "docker $docker"
|
2018-07-18 15:47:59 +08:00
|
|
|
echo "libpmem support $libpmem"
|
2018-10-23 19:23:10 +08:00
|
|
|
echo "libudev $libudev"
|
2019-01-23 14:56:17 +08:00
|
|
|
echo "default devices $default_devices"
|
2004-04-01 07:37:16 +08:00
|
|
|
|
2017-03-21 22:31:57 +08:00
|
|
|
if test "$supported_cpu" = "no"; then
|
|
|
|
echo
|
|
|
|
echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
|
|
|
|
echo
|
|
|
|
echo "CPU host architecture $cpu support is not currently maintained."
|
|
|
|
echo "The QEMU project intends to remove support for this host CPU in"
|
|
|
|
echo "a future release if nobody volunteers to maintain it and to"
|
|
|
|
echo "provide a build host for our continuous integration setup."
|
|
|
|
echo "configure has succeeded and you can continue to build, but"
|
|
|
|
echo "if you care about QEMU on this platform you should contact"
|
|
|
|
echo "us upstream at qemu-devel@nongnu.org."
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$supported_os" = "no"; then
|
|
|
|
echo
|
|
|
|
echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
|
|
|
|
echo
|
2017-03-22 02:08:49 +08:00
|
|
|
echo "Host OS $targetos support is not currently maintained."
|
|
|
|
echo "The QEMU project intends to remove support for this host OS in"
|
2017-03-21 22:31:57 +08:00
|
|
|
echo "a future release if nobody volunteers to maintain it and to"
|
|
|
|
echo "provide a build host for our continuous integration setup."
|
|
|
|
echo "configure has succeeded and you can continue to build, but"
|
|
|
|
echo "if you care about QEMU on this platform you should contact"
|
|
|
|
echo "us upstream at qemu-devel@nongnu.org."
|
|
|
|
fi
|
|
|
|
|
2019-05-04 03:37:21 +08:00
|
|
|
# Note that if the Python conditional here evaluates True we will exit
|
|
|
|
# with status 1 which is a shell 'false' value.
|
|
|
|
if ! $python -c 'import sys; sys.exit(sys.version_info < (3,0))'; then
|
|
|
|
echo
|
|
|
|
echo "warning: Python 2 support is deprecated" >&2
|
|
|
|
echo "warning: Python 3 will be required for building future versions of QEMU" >&2
|
|
|
|
fi
|
|
|
|
|
2009-07-17 00:34:18 +08:00
|
|
|
config_host_mak="config-host.mak"
|
|
|
|
|
2013-01-02 01:33:44 +08:00
|
|
|
echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
|
|
|
|
|
2009-07-17 00:34:18 +08:00
|
|
|
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
|
2010-05-26 22:08:24 +08:00
|
|
|
echo "prefix=$prefix" >> $config_host_mak
|
|
|
|
echo "bindir=$bindir" >> $config_host_mak
|
2011-05-15 17:08:59 +08:00
|
|
|
echo "libdir=$libdir" >> $config_host_mak
|
2012-06-07 05:11:00 +08:00
|
|
|
echo "libexecdir=$libexecdir" >> $config_host_mak
|
2011-06-27 17:58:20 +08:00
|
|
|
echo "includedir=$includedir" >> $config_host_mak
|
2010-05-26 22:08:24 +08:00
|
|
|
echo "mandir=$mandir" >> $config_host_mak
|
|
|
|
echo "sysconfdir=$sysconfdir" >> $config_host_mak
|
2012-04-19 03:55:42 +08:00
|
|
|
echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
|
2012-04-19 03:55:46 +08:00
|
|
|
echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
|
2017-09-14 19:42:36 +08:00
|
|
|
echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
|
2012-04-19 03:55:46 +08:00
|
|
|
echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
|
2014-02-10 14:48:57 +08:00
|
|
|
echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
|
2013-05-18 12:31:50 +08:00
|
|
|
if test "$mingw32" = "no" ; then
|
|
|
|
echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
|
|
|
|
fi
|
2012-10-22 02:52:54 +08:00
|
|
|
echo "qemu_helperdir=$libexecdir" >> $config_host_mak
|
2013-02-20 21:43:24 +08:00
|
|
|
echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
|
2019-01-10 20:00:45 +08:00
|
|
|
echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
|
2019-01-10 20:00:46 +08:00
|
|
|
echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
|
2019-05-16 17:51:34 +08:00
|
|
|
echo "libs_cpu=$libs_cpu" >> $config_host_mak
|
2013-04-17 22:26:44 +08:00
|
|
|
echo "libs_softmmu=$libs_softmmu" >> $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
|
2017-10-26 20:52:26 +08:00
|
|
|
echo "GIT_UPDATE=$git_update" >> $config_host_mak
|
2009-07-27 22:12:49 +08:00
|
|
|
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "ARCH=$ARCH" >> $config_host_mak
|
2013-04-17 22:26:43 +08:00
|
|
|
|
2019-01-23 14:56:17 +08:00
|
|
|
if test "$default_devices" = "yes" ; then
|
|
|
|
echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
|
|
|
|
else
|
|
|
|
echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
|
|
|
|
fi
|
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
|
2003-03-07 07:23:54 +08:00
|
|
|
if test "$bigendian" = "yes" ; then
|
2009-07-27 22:13:06 +08:00
|
|
|
echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
|
2003-08-11 05:36:04 +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
|
2016-05-16 21:10:20 +08:00
|
|
|
rc_version=$(cat $source_path/VERSION)
|
2010-09-27 00:07:57 +08:00
|
|
|
version_major=${rc_version%%.*}
|
|
|
|
rc_version=${rc_version#*.}
|
|
|
|
version_minor=${rc_version%%.*}
|
|
|
|
rc_version=${rc_version#*.}
|
|
|
|
version_subminor=${rc_version%%.*}
|
|
|
|
version_micro=0
|
|
|
|
echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
|
|
|
|
echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
|
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
|
2015-08-27 00:14:31 +08:00
|
|
|
if test "$guest_agent_msi" = "yes"; then
|
2018-01-23 05:07:46 +08:00
|
|
|
echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
|
2015-05-06 19:57:40 +08:00
|
|
|
echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
|
|
|
|
echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
|
|
|
|
echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
|
|
|
|
echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
|
|
|
|
echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
|
|
|
|
echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
|
|
|
|
fi
|
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
|
2010-09-20 06:50:43 +08:00
|
|
|
if test "$haiku" = "yes" ; then
|
|
|
|
echo "CONFIG_HAIKU=y" >> $config_host_mak
|
|
|
|
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-02-13 00:25:23 +08:00
|
|
|
if test "$slirp" != "no"; then
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "CONFIG_SLIRP=y" >> $config_host_mak
|
2011-09-03 04:53:28 +08:00
|
|
|
echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
|
2019-02-13 00:25:23 +08:00
|
|
|
echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
|
|
|
|
echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
|
|
|
|
fi
|
2019-04-24 19:00:41 +08:00
|
|
|
if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
|
Makefile: Rename targets for make recursion
We make a few sub-directories recursively, in particular
$(TARGET_DIRS).
For goal "all", we do it the nice way: "all" has a prerequisite
subdir-T for each T in $(TARGET_DIRS), and T's recipe runs make
recursively. Behaves nicely with -j and -k.
For other goals such as "clean" and "install", the recipe runs make
recursively in a for loop. Ignores -j and -k.
The next commit will fix that for "clean" and "install". This commit
prepares the ground by renaming the targets we use for "all" to
include the goal for the sub-make. This will permit reusing them for
goals other than "all".
Targets subdir-T for T in $(TARGET_DIRS) run "make all" in T. Rename
to T/all, and declare phony.
Targets romsubdir-R for R in $(ROMS) run "make" in pc-bios/R. Default
goal is "all" for all R. Rename to pc-bios/R/all, and declare phony.
The remainder are renamed just for consistency.
Target subdir-dtc runs "make libbft/libfdt.a" in dtc. Rename to
dtc/all, and declare phony.
Target subdir-capstone runs make $(BUILD_DIR)/capstone/$(LIBCAPSTONE)
in $(SRC_PATH)/capstone. Rename to capstone/all, and declare phony.
Target subdir-slirp runs "make" in $(SRC_PATH)/slirp. Default goal is
all, which builds $(BUILD_DIR)/libslirp.a. Rename to slirp/all, and
declare phony.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20190528082308.22032-4-armbru@redhat.com>
[Add compatibility gunk to keep make working across the rename]
2019-05-28 16:23:07 +08:00
|
|
|
echo "config-host.h: slirp/all" >> $config_host_mak
|
2004-04-22 07:27:19 +08:00
|
|
|
fi
|
2008-07-19 17:56:24 +08:00
|
|
|
if test "$vde" = "yes" ; then
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "CONFIG_VDE=y" >> $config_host_mak
|
2017-09-07 16:35:52 +08:00
|
|
|
echo "VDE_LIBS=$vde_libs" >> $config_host_mak
|
2008-07-19 17:56:24 +08:00
|
|
|
fi
|
2013-11-06 18:44:06 +08:00
|
|
|
if test "$netmap" = "yes" ; then
|
|
|
|
echo "CONFIG_NETMAP=y" >> $config_host_mak
|
|
|
|
fi
|
2014-07-01 20:58:08 +08:00
|
|
|
if test "$l2tpv3" = "yes" ; then
|
|
|
|
echo "CONFIG_L2TPV3=y" >> $config_host_mak
|
|
|
|
fi
|
2012-01-26 22:42:26 +08:00
|
|
|
if test "$cap_ng" = "yes" ; then
|
|
|
|
echo "CONFIG_LIBCAP=y" >> $config_host_mak
|
|
|
|
fi
|
2009-07-27 22:13:25 +08:00
|
|
|
echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
|
2008-06-26 05:04:05 +08:00
|
|
|
for drv in $audio_drv_list; do
|
2018-03-01 18:05:46 +08:00
|
|
|
def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
|
2018-03-06 15:40:50 +08:00
|
|
|
case "$drv" in
|
2018-03-06 15:40:53 +08:00
|
|
|
alsa | oss | pa | sdl)
|
2018-03-06 15:40:50 +08:00
|
|
|
echo "$def=m" >> $config_host_mak ;;
|
|
|
|
*)
|
|
|
|
echo "$def=y" >> $config_host_mak ;;
|
|
|
|
esac
|
2008-06-26 05:04:05 +08:00
|
|
|
done
|
2017-09-07 16:29:13 +08:00
|
|
|
echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
|
|
|
|
echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
|
|
|
|
echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
|
|
|
|
echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
|
|
|
|
echo "OSS_LIBS=$oss_libs" >> $config_host_mak
|
2009-08-03 20:46:59 +08:00
|
|
|
if test "$audio_pt_int" = "yes" ; then
|
|
|
|
echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
|
|
|
|
fi
|
2009-10-10 05:13:41 +08:00
|
|
|
if test "$audio_win_int" = "yes" ; then
|
|
|
|
echo "CONFIG_AUDIO_WIN_INT=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
|
2011-03-16 20:33:36 +08:00
|
|
|
if test "$vnc" = "yes" ; then
|
|
|
|
echo "CONFIG_VNC=y" >> $config_host_mak
|
|
|
|
fi
|
Add SASL authentication support ("Daniel P. Berrange")
This patch adds the new SASL authentication protocol to the VNC server.
It is enabled by setting the 'sasl' flag when launching VNC. SASL can
optionally provide encryption via its SSF layer, if a suitable mechanism
is configured (eg, GSSAPI/Kerberos, or Digest-MD5). If an SSF layer is
not available, then it should be combined with the x509 VNC authentication
protocol which provides encryption.
eg, if using GSSAPI
qemu -vnc localhost:1,sasl
eg if using TLS/x509 for encryption
qemu -vnc localhost:1,sasl,tls,x509
By default the Cyrus SASL library will look for its configuration in
the file /etc/sasl2/qemu.conf. For non-root users, this can be overridden
by setting the SASL_CONF_PATH environment variable, eg to make it look in
$HOME/.sasl2. NB unprivileged users may not have access to the full range
of SASL mechanisms, since some of them require some administrative privileges
to configure. The patch includes an example SASL configuration file which
illustrates config for GSSAPI and Digest-MD5, though it should be noted that
the latter is not really considered secure any more.
Most of the SASL authentication code is located in a separate source file,
vnc-auth-sasl.c. The main vnc.c file only contains minimal integration
glue, specifically parsing of command line flags / setup, and calls to
start the SASL auth process, to do encoding/decoding for data.
There are several possible stacks for reading & writing of data, depending
on the combo of VNC authentication methods in use
- Clear. read/write straight to socket
- TLS. read/write via GNUTLS helpers
- SASL. encode/decode via SASL SSF layer, then read/write to socket
- SASL+TLS. encode/decode via SASL SSF layer, then read/write via GNUTLS
Hence, the vnc_client_read & vnc_client_write methods have been refactored
a little.
vnc_client_read: main entry point for reading, calls either
- vnc_client_read_plain reading, with no intermediate decoding
- vnc_client_read_sasl reading, with SASL SSF decoding
These two methods, then call vnc_client_read_buf(). This decides
whether to write to the socket directly or write via GNUTLS.
The situation is the same for writing data. More extensive comments
have been added in the code / patch. The vnc_client_read_sasl and
vnc_client_write_sasl method implementations live in the separate
vnc-auth-sasl.c file.
The state required for the SASL auth mechanism is kept in a separate
VncStateSASL struct, defined in vnc-auth-sasl.h and included in the
main VncState.
The configure script probes for SASL and automatically enables it
if found, unless --disable-vnc-sasl was given to override it.
Makefile | 7
Makefile.target | 5
b/qemu.sasl | 34 ++
b/vnc-auth-sasl.c | 626 ++++++++++++++++++++++++++++++++++++++++++++++++++++
b/vnc-auth-sasl.h | 67 +++++
configure | 34 ++
qemu-doc.texi | 97 ++++++++
vnc-auth-vencrypt.c | 12
vnc.c | 249 ++++++++++++++++++--
vnc.h | 31 ++
10 files changed, 1129 insertions(+), 33 deletions(-)
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6724 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-07 04:27:28 +08:00
|
|
|
if test "$vnc_sasl" = "yes" ; then
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "CONFIG_VNC_SASL=y" >> $config_host_mak
|
Add SASL authentication support ("Daniel P. Berrange")
This patch adds the new SASL authentication protocol to the VNC server.
It is enabled by setting the 'sasl' flag when launching VNC. SASL can
optionally provide encryption via its SSF layer, if a suitable mechanism
is configured (eg, GSSAPI/Kerberos, or Digest-MD5). If an SSF layer is
not available, then it should be combined with the x509 VNC authentication
protocol which provides encryption.
eg, if using GSSAPI
qemu -vnc localhost:1,sasl
eg if using TLS/x509 for encryption
qemu -vnc localhost:1,sasl,tls,x509
By default the Cyrus SASL library will look for its configuration in
the file /etc/sasl2/qemu.conf. For non-root users, this can be overridden
by setting the SASL_CONF_PATH environment variable, eg to make it look in
$HOME/.sasl2. NB unprivileged users may not have access to the full range
of SASL mechanisms, since some of them require some administrative privileges
to configure. The patch includes an example SASL configuration file which
illustrates config for GSSAPI and Digest-MD5, though it should be noted that
the latter is not really considered secure any more.
Most of the SASL authentication code is located in a separate source file,
vnc-auth-sasl.c. The main vnc.c file only contains minimal integration
glue, specifically parsing of command line flags / setup, and calls to
start the SASL auth process, to do encoding/decoding for data.
There are several possible stacks for reading & writing of data, depending
on the combo of VNC authentication methods in use
- Clear. read/write straight to socket
- TLS. read/write via GNUTLS helpers
- SASL. encode/decode via SASL SSF layer, then read/write to socket
- SASL+TLS. encode/decode via SASL SSF layer, then read/write via GNUTLS
Hence, the vnc_client_read & vnc_client_write methods have been refactored
a little.
vnc_client_read: main entry point for reading, calls either
- vnc_client_read_plain reading, with no intermediate decoding
- vnc_client_read_sasl reading, with SASL SSF decoding
These two methods, then call vnc_client_read_buf(). This decides
whether to write to the socket directly or write via GNUTLS.
The situation is the same for writing data. More extensive comments
have been added in the code / patch. The vnc_client_read_sasl and
vnc_client_write_sasl method implementations live in the separate
vnc-auth-sasl.c file.
The state required for the SASL auth mechanism is kept in a separate
VncStateSASL struct, defined in vnc-auth-sasl.h and included in the
main VncState.
The configure script probes for SASL and automatically enables it
if found, unless --disable-vnc-sasl was given to override it.
Makefile | 7
Makefile.target | 5
b/qemu.sasl | 34 ++
b/vnc-auth-sasl.c | 626 ++++++++++++++++++++++++++++++++++++++++++++++++++++
b/vnc-auth-sasl.h | 67 +++++
configure | 34 ++
qemu-doc.texi | 97 ++++++++
vnc-auth-vencrypt.c | 12
vnc.c | 249 ++++++++++++++++++--
vnc.h | 31 ++
10 files changed, 1129 insertions(+), 33 deletions(-)
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6724 c046a42c-6fe2-441c-8c8c-71466251a162
2009-03-07 04:27:28 +08:00
|
|
|
fi
|
2011-03-16 20:33:36 +08:00
|
|
|
if test "$vnc_jpeg" = "yes" ; then
|
2010-07-08 02:57:49 +08:00
|
|
|
echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
|
|
|
|
fi
|
2011-03-16 20:33:36 +08:00
|
|
|
if test "$vnc_png" = "yes" ; then
|
2010-07-08 02:57:56 +08:00
|
|
|
echo "CONFIG_VNC_PNG=y" >> $config_host_mak
|
|
|
|
fi
|
2017-10-05 23:33:28 +08:00
|
|
|
if test "$xkbcommon" = "yes" ; then
|
|
|
|
echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
|
|
|
|
echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $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-17 00:34:18 +08:00
|
|
|
echo "VERSION=$qemu_version" >>$config_host_mak
|
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
|
2009-08-13 00:29:52 +08:00
|
|
|
if [ "$docs" = "yes" ] ; then
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "BUILD_DOCS=yes" >> $config_host_mak
|
2006-04-24 01:57:59 +08:00
|
|
|
fi
|
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
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
|
2018-03-01 18:05:42 +08:00
|
|
|
echo "CONFIG_X11=y" >> $config_host_mak
|
|
|
|
echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
|
|
|
|
echo "X11_LIBS=$x11_libs" >> $config_host_mak
|
|
|
|
fi
|
2009-07-27 22:13:14 +08:00
|
|
|
if test "$sdl" = "yes" ; then
|
2018-03-01 18:05:47 +08:00
|
|
|
echo "CONFIG_SDL=m" >> $config_host_mak
|
2009-07-27 22:13:14 +08:00
|
|
|
echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
|
2017-09-07 16:29:11 +08:00
|
|
|
echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
|
2019-01-10 20:00:47 +08:00
|
|
|
if test "$sdl_image" = "yes" ; then
|
|
|
|
echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
|
|
|
|
fi
|
2007-11-08 03:25:15 +08:00
|
|
|
fi
|
|
|
|
if test "$cocoa" = "yes" ; then
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "CONFIG_COCOA=y" >> $config_host_mak
|
2008-02-11 00:33:14 +08:00
|
|
|
fi
|
2019-03-11 21:51:26 +08:00
|
|
|
if test "$iconv" = "yes" ; then
|
|
|
|
echo "CONFIG_ICONV=y" >> $config_host_mak
|
|
|
|
echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
|
|
|
|
echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
|
|
|
|
fi
|
2008-02-11 00:33:14 +08:00
|
|
|
if test "$curses" = "yes" ; then
|
2018-03-01 18:05:45 +08:00
|
|
|
echo "CONFIG_CURSES=m" >> $config_host_mak
|
|
|
|
echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
|
|
|
|
echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
|
2007-11-08 03:25:15 +08:00
|
|
|
fi
|
2009-05-05 17:10:04 +08:00
|
|
|
if test "$pipe2" = "yes" ; then
|
2009-07-27 22:13:25 +08:00
|
|
|
echo "CONFIG_PIPE2=y" >> $config_host_mak
|
2009-05-05 17:10:04 +08:00
|
|
|
fi
|
2009-12-02 19:24:42 +08:00
|
|
|
if test "$accept4" = "yes" ; then
|
|
|
|
echo "CONFIG_ACCEPT4=y" >> $config_host_mak
|
|
|
|
fi
|
2009-05-16 21:02:41 +08:00
|
|
|
if test "$splice" = "yes" ; then
|
2009-07-27 22:13:25 +08:00
|
|
|
echo "CONFIG_SPLICE=y" >> $config_host_mak
|
2009-05-16 21:02:41 +08:00
|
|
|
fi
|
2009-08-12 20:08:24 +08:00
|
|
|
if test "$eventfd" = "yes" ; then
|
|
|
|
echo "CONFIG_EVENTFD=y" >> $config_host_mak
|
|
|
|
fi
|
2015-10-09 23:17:16 +08:00
|
|
|
if test "$memfd" = "yes" ; then
|
|
|
|
echo "CONFIG_MEMFD=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
|
2009-09-18 01:22:14 +08:00
|
|
|
if test "$fallocate" = "yes" ; then
|
|
|
|
echo "CONFIG_FALLOCATE=y" >> $config_host_mak
|
|
|
|
fi
|
2013-01-14 23:26:52 +08:00
|
|
|
if test "$fallocate_punch_hole" = "yes" ; then
|
|
|
|
echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
|
|
|
|
fi
|
2015-01-30 16:42:14 +08:00
|
|
|
if test "$fallocate_zero_range" = "yes" ; then
|
|
|
|
echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
|
|
|
|
fi
|
2014-09-29 23:12:59 +08:00
|
|
|
if test "$posix_fallocate" = "yes" ; then
|
|
|
|
echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
|
|
|
|
fi
|
2011-01-06 19:05:10 +08:00
|
|
|
if test "$sync_file_range" = "yes" ; then
|
|
|
|
echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
|
|
|
|
fi
|
2011-01-10 21:11:24 +08:00
|
|
|
if test "$fiemap" = "yes" ; then
|
|
|
|
echo "CONFIG_FIEMAP=y" >> $config_host_mak
|
|
|
|
fi
|
2009-09-18 01:22:14 +08:00
|
|
|
if test "$dup3" = "yes" ; then
|
|
|
|
echo "CONFIG_DUP3=y" >> $config_host_mak
|
|
|
|
fi
|
2013-08-21 23:02:43 +08:00
|
|
|
if test "$ppoll" = "yes" ; then
|
|
|
|
echo "CONFIG_PPOLL=y" >> $config_host_mak
|
|
|
|
fi
|
2013-08-21 23:02:44 +08:00
|
|
|
if test "$prctl_pr_set_timerslack" = "yes" ; then
|
|
|
|
echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
|
|
|
|
fi
|
2011-02-16 02:35:05 +08:00
|
|
|
if test "$epoll" = "yes" ; then
|
|
|
|
echo "CONFIG_EPOLL=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
if test "$epoll_create1" = "yes" ; then
|
|
|
|
echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
|
|
|
|
fi
|
2013-02-08 15:31:55 +08:00
|
|
|
if test "$sendfile" = "yes" ; then
|
|
|
|
echo "CONFIG_SENDFILE=y" >> $config_host_mak
|
|
|
|
fi
|
2014-06-22 18:25:42 +08:00
|
|
|
if test "$timerfd" = "yes" ; then
|
|
|
|
echo "CONFIG_TIMERFD=y" >> $config_host_mak
|
|
|
|
fi
|
2014-08-12 20:58:57 +08:00
|
|
|
if test "$setns" = "yes" ; then
|
|
|
|
echo "CONFIG_SETNS=y" >> $config_host_mak
|
|
|
|
fi
|
2016-10-10 19:23:29 +08:00
|
|
|
if test "$clock_adjtime" = "yes" ; then
|
|
|
|
echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
|
|
|
|
fi
|
2016-10-10 19:23:30 +08:00
|
|
|
if test "$syncfs" = "yes" ; then
|
|
|
|
echo "CONFIG_SYNCFS=y" >> $config_host_mak
|
|
|
|
fi
|
2009-04-16 00:12:13 +08:00
|
|
|
if test "$inotify" = "yes" ; then
|
2009-07-27 22:13:25 +08:00
|
|
|
echo "CONFIG_INOTIFY=y" >> $config_host_mak
|
2009-04-16 00:12:13 +08:00
|
|
|
fi
|
2010-03-26 23:25:11 +08:00
|
|
|
if test "$inotify1" = "yes" ; then
|
|
|
|
echo "CONFIG_INOTIFY1=y" >> $config_host_mak
|
|
|
|
fi
|
2017-09-05 20:19:32 +08:00
|
|
|
if test "$sem_timedwait" = "yes" ; then
|
|
|
|
echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
|
|
|
|
fi
|
2018-06-29 18:32:10 +08:00
|
|
|
if test "$strchrnul" = "yes" ; then
|
|
|
|
echo "HAVE_STRCHRNUL=y" >> $config_host_mak
|
|
|
|
fi
|
2009-08-03 20:45:58 +08:00
|
|
|
if test "$byteswap_h" = "yes" ; then
|
|
|
|
echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
if test "$bswap_h" = "yes" ; then
|
|
|
|
echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
|
|
|
|
fi
|
2009-05-11 23:41:42 +08:00
|
|
|
if test "$curl" = "yes" ; then
|
2014-02-10 14:49:00 +08:00
|
|
|
echo "CONFIG_CURL=m" >> $config_host_mak
|
2009-08-03 20:46:05 +08:00
|
|
|
echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
|
2014-02-10 14:48:54 +08:00
|
|
|
echo "CURL_LIBS=$curl_libs" >> $config_host_mak
|
2009-05-11 23:41:42 +08:00
|
|
|
fi
|
2008-04-08 14:01:02 +08:00
|
|
|
if test "$brlapi" = "yes" ; then
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "CONFIG_BRLAPI=y" >> $config_host_mak
|
2017-09-07 16:47:00 +08:00
|
|
|
echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
|
2008-04-08 14:01:02 +08:00
|
|
|
fi
|
2008-09-29 07:49:55 +08:00
|
|
|
if test "$bluez" = "yes" ; then
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "CONFIG_BLUEZ=y" >> $config_host_mak
|
2009-07-27 22:12:46 +08:00
|
|
|
echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
|
2008-09-29 07:49:55 +08:00
|
|
|
fi
|
2013-02-20 21:43:20 +08:00
|
|
|
if test "$gtk" = "yes" ; then
|
2018-03-01 18:05:44 +08:00
|
|
|
echo "CONFIG_GTK=m" >> $config_host_mak
|
2013-02-20 21:43:20 +08:00
|
|
|
echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
|
2015-12-03 19:56:34 +08:00
|
|
|
echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
|
2015-05-26 18:26:21 +08:00
|
|
|
if test "$gtk_gl" = "yes" ; then
|
|
|
|
echo "CONFIG_GTK_GL=y" >> $config_host_mak
|
|
|
|
fi
|
2014-02-19 14:04:34 +08:00
|
|
|
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
|
|
|
|
fi
|
2016-06-06 17:05:06 +08:00
|
|
|
echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
|
2015-07-02 01:10:29 +08:00
|
|
|
if test "$gnutls" = "yes" ; then
|
|
|
|
echo "CONFIG_GNUTLS=y" >> $config_host_mak
|
|
|
|
fi
|
2015-10-16 23:36:53 +08:00
|
|
|
if test "$gcrypt" = "yes" ; then
|
|
|
|
echo "CONFIG_GCRYPT=y" >> $config_host_mak
|
2016-12-13 18:42:55 +08:00
|
|
|
if test "$gcrypt_hmac" = "yes" ; then
|
|
|
|
echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
|
|
|
|
fi
|
2015-07-02 01:10:33 +08:00
|
|
|
fi
|
2015-10-16 23:36:53 +08:00
|
|
|
if test "$nettle" = "yes" ; then
|
|
|
|
echo "CONFIG_NETTLE=y" >> $config_host_mak
|
crypto: fix build with nettle >= 3.0.0
In nettle 3, cbc_encrypt() accepts 'nettle_cipher_func' instead of
'nettle_crypt_func' and these two differ in 'const' qualifier of the
first argument. The build fails with:
In file included from crypto/cipher.c:71:0:
./crypto/cipher-nettle.c: In function ‘qcrypto_cipher_encrypt’:
./crypto/cipher-nettle.c:154:38: error: passing argument 2 of
‘nettle_cbc_encrypt’ from incompatible pointer type
cbc_encrypt(ctx->ctx_encrypt, ctx->alg_encrypt,
^
In file included from ./crypto/cipher-nettle.c:24:0,
from crypto/cipher.c:71:
/usr/include/nettle/cbc.h:48:1: note: expected
‘void (*)(const void *, size_t, uint8_t *, const uint8_t *)
but argument is of type
‘void (*)( void *, size_t, uint8_t *, const uint8_t *)
To allow both versions, we switch to the new definition and #if typedef
it for old versions.
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Message-Id: <1436548682-9315-2-git-send-email-rkrcmar@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2015-07-11 01:18:00 +08:00
|
|
|
echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
|
2015-07-02 01:10:34 +08:00
|
|
|
fi
|
2015-04-13 21:01:39 +08:00
|
|
|
if test "$tasn1" = "yes" ; then
|
|
|
|
echo "CONFIG_TASN1=y" >> $config_host_mak
|
|
|
|
fi
|
authz: add QAuthZPAM object type for authorizing using PAM
Add an authorization backend that talks to PAM to check whether the user
identity is allowed. This only uses the PAM account validation facility,
which is essentially just a check to see if the provided username is permitted
access. It doesn't use the authentication or session parts of PAM, since
that's dealt with by the relevant part of QEMU (eg VNC server).
Consider starting QEMU with a VNC server and telling it to use TLS with
x509 client certificates and configuring it to use an PAM to validate
the x509 distinguished name. In this example we're telling it to use PAM
for the QAuthZ impl with a service name of "qemu-vnc"
$ qemu-system-x86_64 \
-object tls-creds-x509,id=tls0,dir=/home/berrange/security/qemutls,\
endpoint=server,verify-peer=yes \
-object authz-pam,id=authz0,service=qemu-vnc \
-vnc :1,tls-creds=tls0,tls-authz=authz0
This requires an /etc/pam/qemu-vnc file to be created with the auth
rules. A very simple file based whitelist can be setup using
$ cat > /etc/pam/qemu-vnc <<EOF
account requisite pam_listfile.so item=user sense=allow file=/etc/qemu/vnc.allow
EOF
The /etc/qemu/vnc.allow file simply contains one username per line. Any
username not in the file is denied. The usernames in this example are
the x509 distinguished name from the client's x509 cert.
$ cat > /etc/qemu/vnc.allow <<EOF
CN=laptop.berrange.com,O=Berrange Home,L=London,ST=London,C=GB
EOF
More interesting would be to configure PAM to use an LDAP backend, so
that the QEMU authorization check data can be centralized instead of
requiring each compute host to have file maintained.
The main limitation with this PAM module is that the rules apply to all
QEMU instances on the host. Setting up different rules per VM, would
require creating a separate PAM service name & config file for every
guest. An alternative approach for the future might be to not pass in
the plain username to PAM, but instead combine the VM name or UUID with
the username. This requires further consideration though.
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2016-07-27 21:13:56 +08:00
|
|
|
if test "$auth_pam" = "yes" ; then
|
|
|
|
echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
|
|
|
|
fi
|
2015-02-28 00:19:33 +08:00
|
|
|
if test "$have_ifaddrs_h" = "yes" ; then
|
|
|
|
echo "HAVE_IFADDRS_H=y" >> $config_host_mak
|
|
|
|
fi
|
2016-10-11 23:46:23 +08:00
|
|
|
if test "$have_broken_size_max" = "yes" ; then
|
|
|
|
echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
|
|
|
|
fi
|
2016-04-30 01:15:23 +08:00
|
|
|
|
|
|
|
# Work around a system header bug with some kernel/XFS header
|
|
|
|
# versions where they both try to define 'struct fsxattr':
|
|
|
|
# xfs headers will not try to redefine structs from linux headers
|
|
|
|
# if this macro is set.
|
|
|
|
if test "$have_fsxattr" = "yes" ; then
|
|
|
|
echo "HAVE_FSXATTR=y" >> $config_host_mak
|
|
|
|
fi
|
2018-06-01 17:26:43 +08:00
|
|
|
if test "$have_copy_file_range" = "yes" ; then
|
|
|
|
echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
|
|
|
|
fi
|
2014-02-19 14:04:34 +08:00
|
|
|
if test "$vte" = "yes" ; then
|
|
|
|
echo "CONFIG_VTE=y" >> $config_host_mak
|
2013-02-20 21:43:20 +08:00
|
|
|
echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
|
2018-03-01 18:05:44 +08:00
|
|
|
echo "VTE_LIBS=$vte_libs" >> $config_host_mak
|
2013-02-20 21:43:20 +08:00
|
|
|
fi
|
2014-07-11 18:51:43 +08:00
|
|
|
if test "$virglrenderer" = "yes" ; then
|
|
|
|
echo "CONFIG_VIRGL=y" >> $config_host_mak
|
|
|
|
echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
|
|
|
|
echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
|
|
|
|
fi
|
2009-04-22 23:19:10 +08:00
|
|
|
if test "$xen" = "yes" ; 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
|
2009-04-22 23:19:10 +08:00
|
|
|
fi
|
2009-08-20 22:58:35 +08:00
|
|
|
if test "$linux_aio" = "yes" ; then
|
|
|
|
echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
|
|
|
|
fi
|
2010-06-15 04:34:41 +08:00
|
|
|
if test "$attr" = "yes" ; then
|
|
|
|
echo "CONFIG_ATTR=y" >> $config_host_mak
|
|
|
|
fi
|
2011-11-09 20:44:52 +08:00
|
|
|
if test "$libattr" = "yes" ; then
|
|
|
|
echo "CONFIG_LIBATTR=y" >> $config_host_mak
|
|
|
|
fi
|
2012-02-24 16:30:42 +08:00
|
|
|
if test "$virtfs" = "yes" ; then
|
|
|
|
echo "CONFIG_VIRTFS=y" >> $config_host_mak
|
2010-06-15 04:34:41 +08:00
|
|
|
fi
|
2017-08-22 12:50:55 +08:00
|
|
|
if test "$mpath" = "yes" ; then
|
|
|
|
echo "CONFIG_MPATH=y" >> $config_host_mak
|
2018-08-10 22:11:16 +08:00
|
|
|
if test "$mpathpersist_new_api" = "yes"; then
|
|
|
|
echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
|
|
|
|
fi
|
2017-08-22 12:50:55 +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
|
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
|
|
|
|
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
|
2008-11-27 23:45:16 +08:00
|
|
|
if test "$blobs" = "yes" ; then
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "INSTALL_BLOBS=yes" >> $config_host_mak
|
2008-11-27 23:45:16 +08:00
|
|
|
fi
|
2008-12-06 04:05:26 +08:00
|
|
|
if test "$iovec" = "yes" ; then
|
2009-07-27 22:13:25 +08:00
|
|
|
echo "CONFIG_IOVEC=y" >> $config_host_mak
|
2008-12-06 04:05:26 +08:00
|
|
|
fi
|
2009-04-08 02:43:28 +08:00
|
|
|
if test "$preadv" = "yes" ; then
|
2009-07-27 22:13:25 +08:00
|
|
|
echo "CONFIG_PREADV=y" >> $config_host_mak
|
2009-04-08 02:43:28 +08:00
|
|
|
fi
|
2018-04-16 07:05:20 +08:00
|
|
|
if test "$fdt" != "no" ; then
|
2009-07-27 22:12:52 +08:00
|
|
|
echo "CONFIG_FDT=y" >> $config_host_mak
|
2008-12-16 18:43:48 +08:00
|
|
|
fi
|
2018-02-16 17:05:23 +08:00
|
|
|
if test "$membarrier" = "yes" ; then
|
|
|
|
echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
|
|
|
|
fi
|
2010-10-12 02:31:15 +08:00
|
|
|
if test "$signalfd" = "yes" ; then
|
|
|
|
echo "CONFIG_SIGNALFD=y" >> $config_host_mak
|
|
|
|
fi
|
qemu-io: Add generic function for reinitializing optind.
On FreeBSD 11.2:
$ nbdkit memory size=1M --run './qemu-io -f raw -c "aio_write 0 512" $nbd'
Parsing error: non-numeric argument, or extraneous/unrecognized suffix -- aio_write
After main option parsing, we reinitialize optind so we can parse each
command. However reinitializing optind to 0 does not work on FreeBSD.
What happens when you do this is optind remains 0 after the option
parsing loop, and the result is we try to parse argv[optind] ==
argv[0] == "aio_write" as if it was the first parameter.
The FreeBSD manual page says:
In order to use getopt() to evaluate multiple sets of arguments, or to
evaluate a single set of arguments multiple times, the variable optreset
must be set to 1 before the second and each additional set of calls to
getopt(), and the variable optind must be reinitialized.
(From the rest of the man page it is clear that optind must be
reinitialized to 1).
The glibc man page says:
A program that scans multiple argument vectors, or rescans the same
vector more than once, and wants to make use of GNU extensions such as
'+' and '-' at the start of optstring, or changes the value of
POSIXLY_CORRECT between scans, must reinitialize getopt() by resetting
optind to 0, rather than the traditional value of 1. (Resetting to 0
forces the invocation of an internal initialization routine that
rechecks POSIXLY_CORRECT and checks for GNU extensions in optstring.)
This commit introduces an OS-portability function called
qemu_reset_optind which provides a way of resetting optind that works
on FreeBSD and platforms that use optreset, while keeping it the same
as now on other platforms.
Note that the qemu codebase sets optind in many other places, but in
those other places it's setting a local variable and not using getopt.
This change is only needed in places where we are using getopt and the
associated global variable optind.
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
Message-id: 20190118101114.11759-2-rjones@redhat.com
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
2019-01-18 18:11:14 +08:00
|
|
|
if test "$optreset" = "yes" ; then
|
|
|
|
echo "HAVE_OPTRESET=y" >> $config_host_mak
|
|
|
|
fi
|
2017-07-03 22:59:07 +08:00
|
|
|
if test "$tcg" = "yes"; then
|
|
|
|
echo "CONFIG_TCG=y" >> $config_host_mak
|
|
|
|
if test "$tcg_interpreter" = "yes" ; then
|
|
|
|
echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
|
|
|
|
fi
|
2011-10-19 13:07:18 +08:00
|
|
|
fi
|
2009-09-20 14:56:26 +08:00
|
|
|
if test "$fdatasync" = "yes" ; then
|
|
|
|
echo "CONFIG_FDATASYNC=y" >> $config_host_mak
|
|
|
|
fi
|
2010-09-25 19:26:05 +08:00
|
|
|
if test "$madvise" = "yes" ; then
|
|
|
|
echo "CONFIG_MADVISE=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
if test "$posix_madvise" = "yes" ; then
|
|
|
|
echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
|
|
|
|
fi
|
2018-01-05 01:39:36 +08:00
|
|
|
if test "$posix_memalign" = "yes" ; then
|
|
|
|
echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
|
|
|
|
fi
|
2003-08-11 05:36:04 +08:00
|
|
|
|
2010-03-24 17:26:51 +08:00
|
|
|
if test "$spice" = "yes" ; then
|
|
|
|
echo "CONFIG_SPICE=y" >> $config_host_mak
|
|
|
|
fi
|
2010-10-17 17:40:07 +08:00
|
|
|
|
2015-08-30 17:48:40 +08:00
|
|
|
if test "$smartcard" = "yes" ; then
|
|
|
|
echo "CONFIG_SMARTCARD=y" >> $config_host_mak
|
2017-09-07 16:29:16 +08:00
|
|
|
echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
|
|
|
|
echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
|
libcacard: initial commit
libcacard emulates a Common Access Card (CAC) which is a standard
for smartcards. It is used by the emulated ccid card introduced in
a following patch. Docs are available in docs/libcacard.txt
Signed-off-by: Alon Levy <alevy@redhat.com>
---
changes from v24->v25:
* Fix out of tree builds.
* Fix build with linux-user targets.
changes from v23->v24: (Jes Sorensen review 2)
* Makefile.target: use obj-$(CONFIG_*) +=
* remove unrequired includes, include qemu-common before qemu-thread
* required adding #define NO_NSPR_10_SUPPORT (harmless)
changes from v22->v23:
* configure fixes: (reported by Stefan Hajnoczi)
* test a = b, not a == b (second isn't portable)
* quote $source_path in case it contains spaces
- this doesn't really help since there are many other places
that need similar fixes, not introduced by this patch.
changes from v21->v22:
* fix configure to not link libcacard if nss not found
(reported by Stefan Hajnoczi)
* fix vscclient linkage with simpletrace backend
(reported by Stefan Hajnoczi)
* card_7816.c: add missing break in ERROR_DATA_NOT_FOUND
(reported by William van de Velde)
changes from v20->v21: (Jes Sorensen review)
* use qemu infrastructure: qemu-thread, qemu-common (qemu_malloc
and qemu_free), error_report
* assert instead of ASSERT
* cosmetic fixes
* use strpbrk and isspace
* add --disable-nss --enable-nss here, instead of in the final patch.
* split vscclient, passthru and docs to following patches.
changes from v19->v20:
* checkpatch.pl
changes from v15->v16:
Build:
* don't erase self with distclean
* fix make clean after make distclean
* Makefile: make vscclient link quiet
Behavioral:
* vcard_emul_nss: load coolkey in more situations
* vscclient:
* use hton,ntoh
* send init on connect, only start vevent thread on response
* read payload after header check, before type switch
* remove Reconnect
* update for vscard_common changes, empty Flush implementation
Style/Whitespace:
* fix wrong variable usage
* remove unused variable
* use only C style comments
* add copyright header
* fix tabulation
Signed-off-by: Alon Levy <alevy@redhat.com>
libcacard: fix out of tree builds
2010-11-28 22:36:38 +08:00
|
|
|
fi
|
|
|
|
|
2012-11-30 23:02:11 +08:00
|
|
|
if test "$libusb" = "yes" ; then
|
|
|
|
echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
|
2017-09-07 16:29:17 +08:00
|
|
|
echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
|
|
|
|
echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
|
2012-11-30 23:02:11 +08:00
|
|
|
fi
|
|
|
|
|
2011-07-19 17:04:10 +08:00
|
|
|
if test "$usb_redir" = "yes" ; then
|
|
|
|
echo "CONFIG_USB_REDIR=y" >> $config_host_mak
|
2017-09-07 16:29:18 +08:00
|
|
|
echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
|
|
|
|
echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
|
2011-07-19 17:04:10 +08:00
|
|
|
fi
|
|
|
|
|
2014-11-20 16:49:44 +08:00
|
|
|
if test "$opengl" = "yes" ; then
|
|
|
|
echo "CONFIG_OPENGL=y" >> $config_host_mak
|
|
|
|
echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
|
2015-12-03 19:56:34 +08:00
|
|
|
if test "$opengl_dmabuf" = "yes" ; then
|
|
|
|
echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
|
|
|
|
fi
|
2011-03-08 06:32:39 +08:00
|
|
|
fi
|
|
|
|
|
2019-05-24 21:09:42 +08:00
|
|
|
if test "$gbm" = "yes" ; then
|
|
|
|
echo "CONFIG_GBM=y" >> $config_host_mak
|
|
|
|
echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
|
|
|
|
echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
2017-12-20 21:16:46 +08:00
|
|
|
if test "$malloc_trim" = "yes" ; then
|
|
|
|
echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2016-03-08 13:53:16 +08:00
|
|
|
if test "$avx2_opt" = "yes" ; then
|
|
|
|
echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2014-02-18 14:11:30 +08:00
|
|
|
if test "$lzo" = "yes" ; then
|
|
|
|
echo "CONFIG_LZO=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test "$snappy" = "yes" ; then
|
|
|
|
echo "CONFIG_SNAPPY=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2015-01-07 01:48:14 +08:00
|
|
|
if test "$bzip2" = "yes" ; then
|
|
|
|
echo "CONFIG_BZIP2=y" >> $config_host_mak
|
|
|
|
echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2018-11-05 23:08:04 +08:00
|
|
|
if test "$lzfse" = "yes" ; then
|
|
|
|
echo "CONFIG_LZFSE=y" >> $config_host_mak
|
|
|
|
echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2011-10-25 16:24:24 +08:00
|
|
|
if test "$libiscsi" = "yes" ; then
|
2014-02-10 14:49:00 +08:00
|
|
|
echo "CONFIG_LIBISCSI=m" >> $config_host_mak
|
2014-02-10 14:48:54 +08:00
|
|
|
echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
|
|
|
|
echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
|
2011-10-25 16:24:24 +08:00
|
|
|
fi
|
|
|
|
|
2014-02-03 17:26:13 +08:00
|
|
|
if test "$libnfs" = "yes" ; then
|
2016-08-12 21:27:04 +08:00
|
|
|
echo "CONFIG_LIBNFS=m" >> $config_host_mak
|
|
|
|
echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
|
2014-02-03 17:26:13 +08:00
|
|
|
fi
|
|
|
|
|
2012-08-15 05:44:05 +08:00
|
|
|
if test "$seccomp" = "yes"; then
|
|
|
|
echo "CONFIG_SECCOMP=y" >> $config_host_mak
|
2017-09-07 16:53:16 +08:00
|
|
|
echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
|
|
|
|
echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
|
2012-08-15 05:44:05 +08:00
|
|
|
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
|
|
|
|
|
oslib-win32: only provide localtime_r/gmtime_r if missing
The oslib-win32 file currently provides a localtime_r and
gmtime_r replacement unconditionally. Some versions of
Mingw-w64 would provide crude macros for localtime_r/gmtime_r
which QEMU takes care to disable. Latest versions of Mingw-w64
now provide actual functions for localtime_r/gmtime_r, but
with a twist that you have to include unistd.h or pthread.h
before including time.h. By luck some files in QEMU have
such an include order, resulting in compile errors:
CC util/osdep.o
In file included from include/qemu-common.h:48:0,
from util/osdep.c:48:
include/sysemu/os-win32.h:77:12: error: redundant redeclaration of 'gmtime_r' [-Werror=redundant-decls]
struct tm *gmtime_r(const time_t *timep, struct tm *result);
^
In file included from include/qemu-common.h:35:0,
from util/osdep.c:48:
/usr/i686-w64-mingw32/sys-root/mingw/include/time.h:272:107: note: previous definition of 'gmtime_r' was here
In file included from include/qemu-common.h:48:0,
from util/osdep.c:48:
include/sysemu/os-win32.h:79:12: error: redundant redeclaration of 'localtime_r' [-Werror=redundant-decls]
struct tm *localtime_r(const time_t *timep, struct tm *result);
^
In file included from include/qemu-common.h:35:0,
from util/osdep.c:48:
/usr/i686-w64-mingw32/sys-root/mingw/include/time.h:269:107: note: previous definition of 'localtime_r' was here
This change adds a configure test to see if localtime_r
exits, and only enables the QEMU impl if missing. We also
re-arrange qemu-common.h try attempt to guarantee that all
source files get unistd.h before time.h and thus see the
localtime_r/gmtime_r defs.
[sw: Use "official" spellings for Mingw-w64, MinGW in comments.]
[sw: Terminate sentences with a dot in comments.]
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Reviewed-by: Denis V. Lunev <den@openvz.org>
Signed-off-by: Stefan Weil <sw@weilnetz.de>
2015-09-22 22:13:26 +08:00
|
|
|
if test "$localtime_r" = "yes" ; then
|
|
|
|
echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
|
|
|
|
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
|
2010-12-07 03:53:01 +08:00
|
|
|
if test "$rbd" = "yes" ; then
|
2014-02-10 14:49:00 +08:00
|
|
|
echo "CONFIG_RBD=m" >> $config_host_mak
|
2014-02-10 14:48:54 +08:00
|
|
|
echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
|
|
|
|
echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
|
2011-06-10 01:41:06 +08:00
|
|
|
fi
|
|
|
|
|
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
|
|
|
|
|
2011-10-12 21:41:24 +08:00
|
|
|
if test "$open_by_handle_at" = "yes" ; then
|
|
|
|
echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2011-10-12 21:41:25 +08:00
|
|
|
if test "$linux_magic_h" = "yes" ; then
|
|
|
|
echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
|
2012-05-24 02:48:04 +08:00
|
|
|
fi
|
|
|
|
|
2013-01-09 17:17:07 +08:00
|
|
|
if test "$pragma_diagnostic_available" = "yes" ; then
|
|
|
|
echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
|
2012-07-30 23:13:07 +08:00
|
|
|
fi
|
|
|
|
|
2012-06-29 19:40:27 +08:00
|
|
|
if test "$valgrind_h" = "yes" ; then
|
|
|
|
echo "CONFIG_VALGRIND_H=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
|
|
|
|
|
2012-05-24 02:48:04 +08:00
|
|
|
if test "$has_environ" = "yes" ; then
|
|
|
|
echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
|
2011-10-12 21:41:25 +08:00
|
|
|
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
|
|
|
|
|
2016-09-03 03:23:57 +08:00
|
|
|
if test "$atomic64" = "yes" ; then
|
|
|
|
echo "CONFIG_ATOMIC64=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2017-09-16 05:11:45 +08:00
|
|
|
if test "$vector16" = "yes" ; then
|
|
|
|
echo "CONFIG_VECTOR16=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2013-02-19 01:11:15 +08:00
|
|
|
if test "$getauxval" = "yes" ; then
|
|
|
|
echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2012-09-24 17:12:45 +08:00
|
|
|
if test "$glusterfs" = "yes" ; then
|
2014-02-10 14:49:00 +08:00
|
|
|
echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
|
2014-02-10 14:48:54 +08:00
|
|
|
echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
|
|
|
|
echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
|
2013-07-17 00:17:42 +08:00
|
|
|
fi
|
|
|
|
|
2016-04-05 22:40:09 +08:00
|
|
|
if test "$glusterfs_xlator_opt" = "yes" ; then
|
|
|
|
echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2013-07-17 00:17:42 +08:00
|
|
|
if test "$glusterfs_discard" = "yes" ; then
|
|
|
|
echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
|
2012-09-24 17:12:45 +08:00
|
|
|
fi
|
2011-10-12 21:41:25 +08:00
|
|
|
|
2017-05-28 14:31:14 +08:00
|
|
|
if test "$glusterfs_fallocate" = "yes" ; then
|
|
|
|
echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2013-12-21 17:21:25 +08:00
|
|
|
if test "$glusterfs_zerofill" = "yes" ; then
|
|
|
|
echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2019-03-05 23:46:33 +08:00
|
|
|
if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
|
|
|
|
echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2019-03-05 23:46:34 +08:00
|
|
|
if test "$glusterfs_iocb_has_stat" = "yes" ; then
|
|
|
|
echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2019-06-21 04:08:40 +08:00
|
|
|
if test "$libssh" = "yes" ; then
|
|
|
|
echo "CONFIG_LIBSSH=m" >> $config_host_mak
|
|
|
|
echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
|
|
|
|
echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
|
2013-04-09 22:30:53 +08:00
|
|
|
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
|
|
|
|
|
2014-05-27 21:02:14 +08:00
|
|
|
echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
|
|
|
|
if have_backend "nop"; then
|
2011-09-01 02:30:43 +08:00
|
|
|
echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
|
2010-06-24 19:34:53 +08:00
|
|
|
fi
|
2014-05-27 21:02:14 +08:00
|
|
|
if have_backend "simple"; then
|
2011-09-01 02:30:43 +08:00
|
|
|
echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
|
|
|
|
# Set the appropriate trace file.
|
2011-06-03 01:58:06 +08:00
|
|
|
trace_file="\"$trace_file-\" FMT_pid"
|
2010-07-13 16:26:32 +08:00
|
|
|
fi
|
2016-01-07 21:55:30 +08:00
|
|
|
if have_backend "log"; then
|
|
|
|
echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
|
2011-09-01 02:30:43 +08:00
|
|
|
fi
|
2014-05-27 21:02:14 +08:00
|
|
|
if have_backend "ust"; then
|
2011-09-01 02:30:43 +08:00
|
|
|
echo "CONFIG_TRACE_UST=y" >> $config_host_mak
|
|
|
|
fi
|
2014-05-27 21:02:14 +08:00
|
|
|
if have_backend "dtrace"; then
|
2011-09-01 02:30:43 +08:00
|
|
|
echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
|
|
|
|
if test "$trace_backend_stap" = "yes" ; then
|
|
|
|
echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
|
|
|
|
fi
|
2010-11-12 21:20:25 +08:00
|
|
|
fi
|
2014-05-27 21:02:14 +08:00
|
|
|
if have_backend "ftrace"; then
|
2013-04-11 19:25:15 +08:00
|
|
|
if test "$linux" = "yes" ; then
|
|
|
|
echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
|
|
|
|
else
|
2014-01-24 09:39:10 +08:00
|
|
|
feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
|
2013-04-11 19:25:15 +08:00
|
|
|
fi
|
|
|
|
fi
|
2016-08-04 21:44:14 +08:00
|
|
|
if have_backend "syslog"; then
|
|
|
|
if test "$posix_syslog" = "yes" ; then
|
|
|
|
echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
|
|
|
|
else
|
|
|
|
feature_not_found "syslog(trace backend)" "syslog not available"
|
|
|
|
fi
|
|
|
|
fi
|
2010-07-13 16:26:32 +08:00
|
|
|
echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
|
|
|
|
|
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-06-03 04:14:15 +08:00
|
|
|
if test "$have_rtnetlink" = "yes" ; then
|
|
|
|
echo "CONFIG_RTNETLINK=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2018-01-12 17:01:19 +08:00
|
|
|
if test "$libxml2" = "yes" ; then
|
|
|
|
echo "CONFIG_LIBXML2=y" >> $config_host_mak
|
|
|
|
echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
|
|
|
|
echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2016-07-27 15:01:48 +08:00
|
|
|
if test "$replication" = "yes" ; then
|
|
|
|
echo "CONFIG_REPLICATION=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2016-10-14 17:00:55 +08:00
|
|
|
if test "$have_af_vsock" = "yes" ; then
|
|
|
|
echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
build: include sys/sysmacros.h for major() and minor()
The definition of the major() and minor() macros are moving within glibc to
<sys/sysmacros.h>. Include this header when it is available to avoid the
following sorts of build-stopping messages:
qga/commands-posix.c: In function ‘dev_major_minor’:
qga/commands-posix.c:656:13: error: In the GNU C Library, "major" is defined
by <sys/sysmacros.h>. For historical compatibility, it is
currently defined by <sys/types.h> as well, but we plan to
remove this soon. To use "major", include <sys/sysmacros.h>
directly. If you did not intend to use a system-defined macro
"major", you should undefine it after including <sys/types.h>. [-Werror]
*devmajor = major(st.st_rdev);
^~~~~~~~~~~~~~~~~~~~~~~~~~
qga/commands-posix.c:657:13: error: In the GNU C Library, "minor" is defined
by <sys/sysmacros.h>. For historical compatibility, it is
currently defined by <sys/types.h> as well, but we plan to
remove this soon. To use "minor", include <sys/sysmacros.h>
directly. If you did not intend to use a system-defined macro
"minor", you should undefine it after including <sys/types.h>. [-Werror]
*devminor = minor(st.st_rdev);
^~~~~~~~~~~~~~~~~~~~~~~~~~
The additional include allows the build to complete on Fedora 26 (Rawhide)
with glibc version 2.24.90.
Signed-off-by: Christopher Covington <cov@codeaurora.org>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2016-12-29 04:04:33 +08:00
|
|
|
if test "$have_sysmacros" = "yes" ; then
|
|
|
|
echo "CONFIG_SYSMACROS=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2017-03-15 00:59:53 +08:00
|
|
|
if test "$have_static_assert" = "yes" ; then
|
|
|
|
echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2017-07-17 21:58:33 +08:00
|
|
|
if test "$have_utmpx" = "yes" ; then
|
|
|
|
echo "HAVE_UTMPX=y" >> $config_host_mak
|
|
|
|
fi
|
2019-03-14 11:57:28 +08:00
|
|
|
if test "$have_getrandom" = "yes" ; then
|
|
|
|
echo "CONFIG_GETRANDOM=y" >> $config_host_mak
|
|
|
|
fi
|
2017-07-14 16:33:44 +08:00
|
|
|
if test "$ivshmem" = "yes" ; then
|
|
|
|
echo "CONFIG_IVSHMEM=y" >> $config_host_mak
|
2017-09-15 00:41:12 +08:00
|
|
|
fi
|
2017-09-29 00:01:23 +08:00
|
|
|
if test "$capstone" != "no" ; then
|
2017-09-15 00:41:12 +08:00
|
|
|
echo "CONFIG_CAPSTONE=y" >> $config_host_mak
|
2017-07-14 16:33:44 +08:00
|
|
|
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
|
|
|
|
2014-03-12 19:48:18 +08:00
|
|
|
# Hold two types of flag:
|
|
|
|
# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
|
|
|
|
# a thread we have a handle to
|
2018-12-18 04:26:01 +08:00
|
|
|
# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
|
2014-03-12 19:48:18 +08:00
|
|
|
# platform
|
2018-12-18 04:26:01 +08:00
|
|
|
if test "$pthread_setname_np_w_tid" = "yes" ; then
|
|
|
|
echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
|
|
|
|
echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
|
|
|
|
elif test "$pthread_setname_np_wo_tid" = "yes" ; then
|
2014-03-12 19:48:18 +08:00
|
|
|
echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
|
2018-12-18 04:26:01 +08:00
|
|
|
echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
|
2014-03-12 19:48:18 +08:00
|
|
|
fi
|
|
|
|
|
block/vxhs.c: Add support for a new block device type called "vxhs"
Source code for the qnio library that this code loads can be downloaded from:
https://github.com/VeritasHyperScale/libqnio.git
Sample command line using JSON syntax:
./x86_64-softmmu/qemu-system-x86_64 -name instance-00000008 -S -vnc 0.0.0.0:0
-k en-us -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
-msg timestamp=on
'json:{"driver":"vxhs","vdisk-id":"c3e9095a-a5ee-4dce-afeb-2a59fb387410",
"server":{"host":"172.172.17.4","port":"9999"}}'
Sample command line using URI syntax:
qemu-img convert -f raw -O raw -n
/var/lib/nova/instances/_base/0c5eacd5ebea5ed914b6a3e7b18f1ce734c386ad
vxhs://192.168.0.1:9999/c6718f6b-0401-441d-a8c3-1f0064d75ee0
Sample command line using TLS credentials (run in secure mode):
./qemu-io --object
tls-creds-x509,id=tls0,dir=/etc/pki/qemu/vxhs,endpoint=client -c 'read
-v 66000 2.5k' 'json:{"server.host": "127.0.0.1", "server.port": "9999",
"vdisk-id": "/test.raw", "driver": "vxhs", "tls-creds":"tls0"}'
[Jeff: Modified trace-events with the correct string formatting]
Signed-off-by: Ashish Mittal <Ashish.Mittal@veritas.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Jeff Cody <jcody@redhat.com>
Signed-off-by: Jeff Cody <jcody@redhat.com>
Message-id: 1491277689-24949-2-git-send-email-Ashish.Mittal@veritas.com
2017-04-04 11:48:08 +08:00
|
|
|
if test "$vxhs" = "yes" ; then
|
|
|
|
echo "CONFIG_VXHS=y" >> $config_host_mak
|
|
|
|
echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2018-07-18 15:47:59 +08:00
|
|
|
if test "$libpmem" = "yes" ; then
|
|
|
|
echo "CONFIG_LIBPMEM=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
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
|
|
|
|
if test "$sheepdog" = "yes" ; then
|
|
|
|
echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2013-04-17 22:26:35 +08:00
|
|
|
if test "$tcg_interpreter" = "yes"; then
|
2018-03-21 23:22:07 +08:00
|
|
|
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
|
2013-04-17 22:26:35 +08:00
|
|
|
elif test "$ARCH" = "sparc64" ; then
|
2018-03-21 23:22:07 +08:00
|
|
|
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
|
2013-04-17 22:26:35 +08:00
|
|
|
elif test "$ARCH" = "s390x" ; then
|
2018-03-21 23:22:07 +08:00
|
|
|
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
|
2019-02-05 10:39:37 +08:00
|
|
|
elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
|
2018-03-21 23:22:07 +08:00
|
|
|
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
|
2014-05-01 05:07:47 +08:00
|
|
|
elif test "$ARCH" = "ppc64" ; then
|
2018-03-21 23:22:07 +08:00
|
|
|
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
|
2019-02-05 10:39:37 +08:00
|
|
|
elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
|
2018-12-20 03:20:19 +08:00
|
|
|
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
|
2013-04-17 22:26:35 +08:00
|
|
|
else
|
2018-03-21 23:22:07 +08:00
|
|
|
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
|
2013-04-17 22:26:35 +08:00
|
|
|
fi
|
2018-03-21 23:22:07 +08:00
|
|
|
QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
|
2013-04-17 22:26:35 +08:00
|
|
|
|
2009-07-17 00:34:18 +08:00
|
|
|
echo "TOOLS=$tools" >> $config_host_mak
|
|
|
|
echo "ROMS=$roms" >> $config_host_mak
|
2009-07-27 22:12:49 +08:00
|
|
|
echo "MAKE=$make" >> $config_host_mak
|
|
|
|
echo "INSTALL=$install" >> $config_host_mak
|
2011-08-28 16:01:33 +08:00
|
|
|
echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
|
|
|
|
echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
|
2016-01-27 19:36:43 +08:00
|
|
|
echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
|
|
|
|
echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
|
2011-07-23 05:08:09 +08:00
|
|
|
echo "PYTHON=$python" >> $config_host_mak
|
2018-11-09 23:07:07 +08:00
|
|
|
echo "PYTHON_VERSION=$python_version" >> $config_host_mak
|
2009-07-27 22:12:49 +08:00
|
|
|
echo "CC=$cc" >> $config_host_mak
|
2013-07-24 23:56:03 +08:00
|
|
|
if $iasl -h > /dev/null 2>&1; then
|
|
|
|
echo "IASL=$iasl" >> $config_host_mak
|
|
|
|
fi
|
2009-07-27 22:12:49 +08:00
|
|
|
echo "HOST_CC=$host_cc" >> $config_host_mak
|
2013-08-07 23:39:36 +08:00
|
|
|
echo "CXX=$cxx" >> $config_host_mak
|
2012-08-12 05:34:40 +08:00
|
|
|
echo "OBJCC=$objcc" >> $config_host_mak
|
2009-07-27 22:12:49 +08:00
|
|
|
echo "AR=$ar" >> $config_host_mak
|
2013-10-22 04:03:06 +08:00
|
|
|
echo "ARFLAGS=$ARFLAGS" >> $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
|
2017-11-08 09:10:46 +08:00
|
|
|
echo "RANLIB=$ranlib" >> $config_host_mak
|
2014-09-19 03:55:08 +08:00
|
|
|
echo "NM=$nm" >> $config_host_mak
|
2010-09-27 00:07:57 +08:00
|
|
|
echo "WINDRES=$windres" >> $config_host_mak
|
2009-08-03 20:46:02 +08:00
|
|
|
echo "CFLAGS=$CFLAGS" >> $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
|
2010-12-23 18:43:53 +08:00
|
|
|
echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
|
2010-12-23 18:43:51 +08:00
|
|
|
if test "$sparse" = "yes" ; then
|
|
|
|
echo "CC := REAL_CC=\"\$(CC)\" cgcc" >> $config_host_mak
|
2015-01-22 17:53:46 +08:00
|
|
|
echo "CPP := REAL_CC=\"\$(CPP)\" cgcc" >> $config_host_mak
|
2014-10-15 17:51:09 +08:00
|
|
|
echo "CXX := REAL_CC=\"\$(CXX)\" cgcc" >> $config_host_mak
|
2010-12-23 18:43:51 +08:00
|
|
|
echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc" >> $config_host_mak
|
|
|
|
echo "QEMU_CFLAGS += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
|
|
|
|
fi
|
2012-11-07 18:09:52 +08:00
|
|
|
if test "$cross_prefix" != ""; then
|
|
|
|
echo "AUTOCONF_HOST := --host=${cross_prefix%-}" >> $config_host_mak
|
|
|
|
else
|
|
|
|
echo "AUTOCONF_HOST := " >> $config_host_mak
|
|
|
|
fi
|
2009-08-03 20:46:02 +08:00
|
|
|
echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
|
2013-12-11 08:49:08 +08:00
|
|
|
echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
|
2018-04-16 07:05:19 +08:00
|
|
|
echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
|
2016-06-06 19:02:50 +08:00
|
|
|
echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
|
2016-08-09 00:11:28 +08:00
|
|
|
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
|
2009-08-03 20:46:26 +08:00
|
|
|
echo "LIBS+=$LIBS" >> $config_host_mak
|
2009-08-03 20:47:06 +08:00
|
|
|
echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
|
tests: introduce a framework for testing migration performance
This introduces a moderately general purpose framework for
testing performance of migration.
The initial guest workload is provided by the included 'stress'
program, which is configured to spawn one thread per guest CPU
and run a maximally memory intensive workload. It will loop
over GB of memory, xor'ing each byte with data from a 4k array
of random bytes. This ensures heavy read and write load across
all of guest memory to stress the migration performance. While
running the 'stress' program will record how long it takes to
xor each GB of memory and print this data for later reporting.
The test engine will spawn a pair of QEMU processes, either on
the same host, or with the target on a remote host via ssh,
using the host kernel and a custom initrd built with 'stress'
as the /init binary. Kernel command line args are set to ensure
a fast kernel boot time (< 1 second) between launching QEMU and
the stress program starting execution.
None the less, the test engine will initially wait N seconds for
the guest workload to stablize, before starting the migration
operation. When migration is running, the engine will use pause,
post-copy, autoconverge, xbzrle compression and multithread
compression features, as well as downtime & bandwidth tuning
to encourage completion. If migration completes, the test engine
will wait N seconds again for the guest workooad to stablize on
the target host. If migration does not complete after a preset
number of iterations, it will be aborted.
While the QEMU process is running on the source host, the test
engine will sample the host CPU usage of QEMU as a whole, and
each vCPU thread. While migration is running, it will record
all the stats reported by 'query-migration'. Finally, it will
capture the output of the stress program running in the guest.
All the data produced from a single test execution is recorded
in a structured JSON file. A separate program is then able to
create interactive charts using the "plotly" python + javascript
libraries, showing the characteristics of the migration.
The data output provides visualization of the effect on guest
vCPU workloads from the migration process, the corresponding
vCPU utilization on the host, and the overall CPU hit from
QEMU on the host. This is correlated from statistics from the
migration process, such as downtime, vCPU throttling and iteration
number.
While the tests can be run individually with arbitrary parameters,
there is also a facility for producing batch reports for a number
of pre-defined scenarios / comparisons, in order to be able to
get standardized results across different hardware configurations
(eg TCP vs RDMA, or comparing different VCPU counts / memory
sizes, etc).
To use this, first you must build the initrd image
$ make tests/migration/initrd-stress.img
To run a a one-shot test with all default parameters
$ ./tests/migration/guestperf.py > result.json
This has many command line args for varying its behaviour.
For example, to increase the RAM size and CPU count and
bind it to specific host NUMA nodes
$ ./tests/migration/guestperf.py \
--mem 4 --cpus 2 \
--src-mem-bind 0 --src-cpu-bind 0,1 \
--dst-mem-bind 1 --dst-cpu-bind 2,3 \
> result.json
Using mem + cpu binding is strongly recommended on NUMA
machines, otherwise the guest performance results will
vary wildly between runs of the test due to lucky/unlucky
NUMA placement, making sensible data analysis impossible.
To make it run across separate hosts:
$ ./tests/migration/guestperf.py \
--dst-host somehostname > result.json
To request that post-copy is enabled, with switchover
after 5 iterations
$ ./tests/migration/guestperf.py \
--post-copy --post-copy-iters 5 > result.json
Once a result.json file is created, a graph of the data
can be generated, showing guest workload performance per
thread and the migration iteration points:
$ ./tests/migration/guestperf-plot.py --output result.html \
--migration-iters --split-guest-cpu result.json
To further include host vCPU utilization and overall QEMU
utilization
$ ./tests/migration/guestperf-plot.py --output result.html \
--migration-iters --split-guest-cpu \
--qemu-cpu --vcpu-cpu result.json
NB, the 'guestperf-plot.py' command requires that you have
the plotly python library installed. eg you must do
$ pip install --user plotly
Viewing the result.html file requires that you have the
plotly.min.js file in the same directory as the HTML
output. This js file is installed as part of the plotly
python library, so can be found in
$HOME/.local/lib/python2.7/site-packages/plotly/offline/plotly.min.js
The guestperf-plot.py program can accept multiple json files
to plot, enabling results from different configurations to
be compared.
Finally, to run the entire standardized set of comparisons
$ ./tests/migration/guestperf-batch.py \
--dst-host somehost \
--mem 4 --cpus 2 \
--src-mem-bind 0 --src-cpu-bind 0,1 \
--dst-mem-bind 1 --dst-cpu-bind 2,3
--output tcp-somehost-4gb-2cpu
will store JSON files from all scenarios in the directory
named tcp-somehost-4gb-2cpu
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-Id: <1469020993-29426-7-git-send-email-berrange@redhat.com>
Signed-off-by: Amit Shah <amit.shah@redhat.com>
2016-07-20 21:23:13 +08:00
|
|
|
echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
|
2009-07-27 22:12:49 +08:00
|
|
|
echo "EXESUF=$EXESUF" >> $config_host_mak
|
2014-02-10 14:48:56 +08:00
|
|
|
echo "DSOSUF=$DSOSUF" >> $config_host_mak
|
|
|
|
echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
|
2011-08-12 04:38:12 +08:00
|
|
|
echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
|
2015-09-22 00:25:34 +08:00
|
|
|
echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
|
|
|
|
echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
|
2012-03-29 16:55:18 +08:00
|
|
|
echo "POD2MAN=$POD2MAN" >> $config_host_mak
|
2012-05-02 02:45:39 +08:00
|
|
|
if test "$gcov" = "yes" ; then
|
|
|
|
echo "CONFIG_GCOV=y" >> $config_host_mak
|
|
|
|
echo "GCOV=$gcov_tool" >> $config_host_mak
|
|
|
|
fi
|
2009-07-27 22:12:49 +08:00
|
|
|
|
2018-04-04 21:24:39 +08:00
|
|
|
if test "$docker" != "no"; then
|
|
|
|
echo "HAVE_USER_DOCKER=y" >> $config_host_mak
|
|
|
|
fi
|
|
|
|
|
2018-10-23 19:23:10 +08:00
|
|
|
if test "$libudev" != "no"; then
|
|
|
|
echo "CONFIG_LIBUDEV=y" >> $config_host_mak
|
|
|
|
echo "LIBUDEV_LIBS=$libudev_libs" >> $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
|
2013-08-21 03:20:05 +08:00
|
|
|
i386|x86_64|x32)
|
2012-08-03 20:51:25 +08:00
|
|
|
linux_arch=x86
|
2011-11-30 19:59:04 +08:00
|
|
|
;;
|
2019-05-02 06:38:18 +08:00
|
|
|
ppc|ppc64|ppc64le)
|
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
|
|
|
|
;;
|
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
|
2003-08-11 05:36:04 +08:00
|
|
|
target_dir="$target"
|
2009-10-07 08:41:00 +08:00
|
|
|
config_target_mak=$target_dir/config-target.mak
|
2016-05-16 21:10:20 +08:00
|
|
|
target_name=$(echo $target | cut -d '-' -f 1)
|
2003-08-11 05:36:04 +08:00
|
|
|
target_bigendian="no"
|
2009-10-07 08:41:02 +08:00
|
|
|
|
2013-06-14 22:19:07 +08:00
|
|
|
case "$target_name" in
|
2018-08-21 19:27:48 +08:00
|
|
|
armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
|
2009-07-17 00:34:10 +08:00
|
|
|
target_bigendian=yes
|
|
|
|
;;
|
|
|
|
esac
|
2003-08-11 05:36:04 +08:00
|
|
|
target_softmmu="no"
|
2003-10-28 05:10:39 +08:00
|
|
|
target_user_only="no"
|
2007-01-19 04:06:33 +08:00
|
|
|
target_linux_user="no"
|
2008-10-27 04:33:16 +08:00
|
|
|
target_bsd_user="no"
|
2007-05-27 00:38:53 +08:00
|
|
|
case "$target" in
|
2013-06-14 22:19:07 +08:00
|
|
|
${target_name}-softmmu)
|
2007-05-27 00:38:53 +08:00
|
|
|
target_softmmu="yes"
|
|
|
|
;;
|
2013-06-14 22:19:07 +08:00
|
|
|
${target_name}-linux-user)
|
2007-05-27 00:38:53 +08:00
|
|
|
target_user_only="yes"
|
|
|
|
target_linux_user="yes"
|
|
|
|
;;
|
2013-06-14 22:19:07 +08:00
|
|
|
${target_name}-bsd-user)
|
2008-10-27 04:33:16 +08:00
|
|
|
target_user_only="yes"
|
|
|
|
target_bsd_user="yes"
|
|
|
|
;;
|
2007-05-27 00:38:53 +08:00
|
|
|
*)
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "Target '$target' not recognised"
|
2007-05-27 00:38:53 +08:00
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
2007-01-19 04:06:33 +08:00
|
|
|
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=""
|
|
|
|
target_compiler_static=""
|
2018-04-10 19:19:40 +08:00
|
|
|
target_compiler_cflags=""
|
2018-04-05 03:27:05 +08:00
|
|
|
|
2003-08-11 05:36:04 +08:00
|
|
|
mkdir -p $target_dir
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "# Automatically generated by configure - do not modify" > $config_target_mak
|
2003-06-16 04:25:43 +08:00
|
|
|
|
2006-06-11 21:32:59 +08:00
|
|
|
bflt="no"
|
2017-02-24 02:29:27 +08:00
|
|
|
mttcg="no"
|
2016-05-16 21:10:20 +08:00
|
|
|
interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
|
2008-10-12 01:55:29 +08:00
|
|
|
gdb_xml_files=""
|
2008-11-06 00:04:33 +08:00
|
|
|
|
2013-06-14 22:19:07 +08:00
|
|
|
TARGET_ARCH="$target_name"
|
2009-07-17 00:34:15 +08:00
|
|
|
TARGET_BASE_ARCH=""
|
2009-07-17 00:34:17 +08:00
|
|
|
TARGET_ABI_DIR=""
|
2009-07-17 00:34:14 +08:00
|
|
|
|
2013-06-14 22:19:07 +08:00
|
|
|
case "$target_name" in
|
2008-04-21 04:19:44 +08:00
|
|
|
i386)
|
2018-08-14 08:52:26 +08:00
|
|
|
mttcg="yes"
|
2019-01-24 12:04:57 +08:00
|
|
|
gdb_xml_files="i386-32bit.xml"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_i386
|
2018-04-10 19:19:40 +08:00
|
|
|
target_compiler_cflags=$cross_cc_ccflags_i386
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
|
|
|
x86_64)
|
2009-07-17 00:34:15 +08:00
|
|
|
TARGET_BASE_ARCH=i386
|
2018-08-14 08:52:26 +08:00
|
|
|
mttcg="yes"
|
2019-01-24 12:04:57 +08:00
|
|
|
gdb_xml_files="i386-64bit.xml"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_x86_64
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
|
|
|
alpha)
|
2017-02-24 06:12:43 +08:00
|
|
|
mttcg="yes"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_alpha
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
|
|
|
arm|armeb)
|
2009-07-17 00:34:11 +08:00
|
|
|
TARGET_ARCH=arm
|
2008-04-21 04:19:44 +08:00
|
|
|
bflt="yes"
|
2017-02-24 02:29:27 +08:00
|
|
|
mttcg="yes"
|
2008-10-12 01:55:29 +08:00
|
|
|
gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_arm
|
2018-04-13 18:07:58 +08:00
|
|
|
eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
2018-01-11 21:25:32 +08:00
|
|
|
aarch64|aarch64_be)
|
|
|
|
TARGET_ARCH=aarch64
|
2013-09-04 03:12:22 +08:00
|
|
|
TARGET_BASE_ARCH=arm
|
|
|
|
bflt="yes"
|
2017-02-24 02:29:27 +08:00
|
|
|
mttcg="yes"
|
2014-09-30 01:48:47 +08:00
|
|
|
gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_aarch64
|
2018-04-13 18:07:58 +08:00
|
|
|
eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
|
2013-09-04 03:12:22 +08:00
|
|
|
;;
|
2008-04-21 04:19:44 +08:00
|
|
|
cris)
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_cris
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
2016-12-16 03:26:14 +08:00
|
|
|
hppa)
|
2018-01-07 08:02:27 +08:00
|
|
|
mttcg="yes"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_hppa
|
2016-12-16 03:26:14 +08:00
|
|
|
;;
|
2011-02-18 06:45:17 +08:00
|
|
|
lm32)
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_lm32
|
2011-02-18 06:45:17 +08:00
|
|
|
;;
|
2008-04-21 04:19:44 +08:00
|
|
|
m68k)
|
|
|
|
bflt="yes"
|
2017-06-21 04:51:19 +08:00
|
|
|
gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_m68k
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
2011-02-21 19:42:20 +08:00
|
|
|
microblaze|microblazeel)
|
|
|
|
TARGET_ARCH=microblaze
|
2009-05-21 03:17:31 +08:00
|
|
|
bflt="yes"
|
2018-04-14 00:10:00 +08:00
|
|
|
echo "TARGET_ABI32=y" >> $config_target_mak
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_microblaze
|
2009-05-21 03:17:31 +08:00
|
|
|
;;
|
2009-07-17 00:34:16 +08:00
|
|
|
mips|mipsel)
|
2019-02-12 00:09:29 +08:00
|
|
|
mttcg="yes"
|
2009-07-17 00:34:11 +08:00
|
|
|
TARGET_ARCH=mips
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_mips
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
|
|
|
mipsn32|mipsn32el)
|
2019-02-12 00:09:29 +08:00
|
|
|
mttcg="yes"
|
2013-02-11 02:30:50 +08:00
|
|
|
TARGET_ARCH=mips64
|
2009-07-17 00:34:15 +08:00
|
|
|
TARGET_BASE_ARCH=mips
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_mipsn32
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
|
2013-02-11 02:30:50 +08:00
|
|
|
echo "TARGET_ABI32=y" >> $config_target_mak
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
|
|
|
mips64|mips64el)
|
2019-02-12 00:09:29 +08:00
|
|
|
mttcg="yes"
|
2009-07-17 00:34:11 +08:00
|
|
|
TARGET_ARCH=mips64
|
2009-07-17 00:34:15 +08:00
|
|
|
TARGET_BASE_ARCH=mips
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_mips64
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
2013-03-19 03:49:25 +08:00
|
|
|
moxie)
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_moxie
|
2013-03-19 03:49:25 +08:00
|
|
|
;;
|
2017-01-19 06:01:46 +08:00
|
|
|
nios2)
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_nios2
|
2017-01-19 06:01:46 +08:00
|
|
|
;;
|
2017-02-09 07:06:54 +08:00
|
|
|
or1k)
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_or1k
|
2012-07-20 15:50:39 +08:00
|
|
|
TARGET_ARCH=openrisc
|
|
|
|
TARGET_BASE_ARCH=openrisc
|
|
|
|
;;
|
2008-04-21 04:19:44 +08:00
|
|
|
ppc)
|
2009-01-24 23:07:34 +08:00
|
|
|
gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
|
2019-05-02 06:38:18 +08:00
|
|
|
target_compiler=$cross_cc_ppc
|
|
|
|
target_compiler_cflags="$cross_cc_cflags_ppc"
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
|
|
|
ppc64)
|
2009-07-17 00:34:15 +08:00
|
|
|
TARGET_BASE_ARCH=ppc
|
2009-07-17 00:34:17 +08:00
|
|
|
TARGET_ABI_DIR=ppc
|
2017-04-27 13:18:23 +08:00
|
|
|
mttcg=yes
|
2016-01-15 23:00:51 +08:00
|
|
|
gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_ppc64
|
2019-05-02 06:38:18 +08:00
|
|
|
target_compiler_cflags="$cross_cc_cflags_ppc64"
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
2014-05-29 22:12:21 +08:00
|
|
|
ppc64le)
|
|
|
|
TARGET_ARCH=ppc64
|
|
|
|
TARGET_BASE_ARCH=ppc
|
|
|
|
TARGET_ABI_DIR=ppc
|
2017-04-27 13:18:23 +08:00
|
|
|
mttcg=yes
|
2016-01-15 23:00:51 +08:00
|
|
|
gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_ppc64le
|
2014-05-29 22:12:21 +08:00
|
|
|
;;
|
2008-04-21 04:19:44 +08:00
|
|
|
ppc64abi32)
|
2009-07-17 00:34:11 +08:00
|
|
|
TARGET_ARCH=ppc64
|
2009-07-17 00:34:15 +08:00
|
|
|
TARGET_BASE_ARCH=ppc
|
2009-07-17 00:34:17 +08:00
|
|
|
TARGET_ABI_DIR=ppc
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "TARGET_ABI32=y" >> $config_target_mak
|
2016-01-15 23:00:51 +08:00
|
|
|
gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_ppc64abi32
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
2018-03-02 20:32:59 +08:00
|
|
|
riscv32)
|
|
|
|
TARGET_BASE_ARCH=riscv
|
|
|
|
TARGET_ABI_DIR=riscv
|
|
|
|
mttcg=yes
|
2019-03-15 18:26:55 +08:00
|
|
|
gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_riscv32
|
2018-03-02 20:32:59 +08:00
|
|
|
;;
|
|
|
|
riscv64)
|
|
|
|
TARGET_BASE_ARCH=riscv
|
|
|
|
TARGET_ABI_DIR=riscv
|
|
|
|
mttcg=yes
|
2019-03-15 18:26:56 +08:00
|
|
|
gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_riscv64
|
2018-03-02 20:32:59 +08:00
|
|
|
;;
|
2008-04-21 04:19:44 +08:00
|
|
|
sh4|sh4eb)
|
2009-07-17 00:34:11 +08:00
|
|
|
TARGET_ARCH=sh4
|
2008-04-21 04:19:44 +08:00
|
|
|
bflt="yes"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_sh4
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
|
|
|
sparc)
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_sparc
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
|
|
|
sparc64)
|
2009-07-17 00:34:15 +08:00
|
|
|
TARGET_BASE_ARCH=sparc
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_sparc64
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
|
|
|
sparc32plus)
|
2009-07-17 00:34:11 +08:00
|
|
|
TARGET_ARCH=sparc64
|
2009-07-17 00:34:15 +08:00
|
|
|
TARGET_BASE_ARCH=sparc
|
2009-07-17 00:34:17 +08:00
|
|
|
TARGET_ABI_DIR=sparc
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_sparc32plus
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "TARGET_ABI32=y" >> $config_target_mak
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
2009-12-05 19:44:22 +08:00
|
|
|
s390x)
|
2018-01-29 20:56:20 +08:00
|
|
|
mttcg=yes
|
2017-03-08 19:41:14 +08:00
|
|
|
gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_s390x
|
2009-12-05 19:44:22 +08:00
|
|
|
;;
|
2015-08-21 05:43:37 +08:00
|
|
|
tilegx)
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_tilegx
|
2015-08-21 05:43:37 +08:00
|
|
|
;;
|
2015-04-27 10:14:26 +08:00
|
|
|
tricore)
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_tricore
|
2015-04-27 10:14:26 +08:00
|
|
|
;;
|
2011-04-12 16:27:03 +08:00
|
|
|
unicore32)
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_unicore32
|
2011-04-12 16:27:03 +08:00
|
|
|
;;
|
2011-09-06 07:55:26 +08:00
|
|
|
xtensa|xtensaeb)
|
|
|
|
TARGET_ARCH=xtensa
|
2018-10-20 09:40:20 +08:00
|
|
|
bflt="yes"
|
2017-03-07 09:17:43 +08:00
|
|
|
mttcg="yes"
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=$cross_cc_xtensa
|
2011-09-06 07:55:26 +08:00
|
|
|
;;
|
2008-04-21 04:19:44 +08:00
|
|
|
*)
|
2013-04-08 19:11:26 +08:00
|
|
|
error_exit "Unsupported target CPU"
|
2008-04-21 04:19:44 +08:00
|
|
|
;;
|
|
|
|
esac
|
2012-05-29 16:23:15 +08:00
|
|
|
# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
|
|
|
|
if [ "$TARGET_BASE_ARCH" = "" ]; then
|
|
|
|
TARGET_BASE_ARCH=$TARGET_ARCH
|
|
|
|
fi
|
|
|
|
|
2018-04-05 03:27:05 +08:00
|
|
|
# Do we have a cross compiler for this target?
|
|
|
|
if has $target_compiler; then
|
|
|
|
|
|
|
|
write_c_skeleton
|
|
|
|
|
2018-04-10 19:19:40 +08:00
|
|
|
if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
|
2018-04-05 03:27:05 +08:00
|
|
|
# For host systems we might get away with building without -static
|
2018-04-10 19:19:40 +08:00
|
|
|
if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
|
2018-04-05 03:27:05 +08:00
|
|
|
target_compiler=""
|
|
|
|
else
|
|
|
|
enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
|
|
|
|
target_compiler_static="n"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
enabled_cross_compilers="${enabled_cross_compilers} '${target_compiler}'"
|
|
|
|
target_compiler_static="y"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
target_compiler=""
|
|
|
|
fi
|
|
|
|
|
2012-05-29 16:23:15 +08:00
|
|
|
symlink "$source_path/Makefile.target" "$target_dir/Makefile"
|
|
|
|
|
2012-08-20 22:31:38 +08:00
|
|
|
upper() {
|
|
|
|
echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
|
|
|
|
}
|
|
|
|
|
2016-05-16 21:10:20 +08:00
|
|
|
target_arch_name="$(upper $TARGET_ARCH)"
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "TARGET_$target_arch_name=y" >> $config_target_mak
|
2013-06-14 22:19:07 +08:00
|
|
|
echo "TARGET_NAME=$target_name" >> $config_target_mak
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
|
2009-07-17 00:34:17 +08:00
|
|
|
if [ "$TARGET_ABI_DIR" = "" ]; then
|
|
|
|
TARGET_ABI_DIR=$TARGET_ARCH
|
|
|
|
fi
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
|
2014-06-09 00:57:22 +08:00
|
|
|
if [ "$HOST_VARIANT_DIR" != "" ]; then
|
|
|
|
echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
|
|
|
|
fi
|
2012-09-17 17:59:41 +08:00
|
|
|
|
|
|
|
if supported_xen_target $target; then
|
|
|
|
echo "CONFIG_XEN=y" >> $config_target_mak
|
2019-01-23 14:56:01 +08:00
|
|
|
echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
|
2012-09-17 17:59:41 +08:00
|
|
|
if test "$xen_pci_passthrough" = yes; then
|
2012-06-21 23:32:59 +08:00
|
|
|
echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
|
2009-07-17 00:33:59 +08:00
|
|
|
fi
|
2019-01-23 14:56:01 +08:00
|
|
|
else
|
|
|
|
echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
|
2012-09-17 17:59:41 +08:00
|
|
|
fi
|
|
|
|
if supported_kvm_target $target; then
|
|
|
|
echo "CONFIG_KVM=y" >> $config_target_mak
|
2019-01-23 14:56:01 +08:00
|
|
|
echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
|
|
|
|
else
|
|
|
|
echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
|
2012-09-17 17:59:41 +08:00
|
|
|
fi
|
|
|
|
if supported_hax_target $target; then
|
|
|
|
echo "CONFIG_HAX=y" >> $config_target_mak
|
2017-01-10 18:59:57 +08:00
|
|
|
fi
|
i386: hvf: add code base from Google's QEMU repository
This file begins tracking the files that will be the code base for HVF
support in QEMU. This code base is part of Google's QEMU version of
their Android emulator, and can be found at
https://android.googlesource.com/platform/external/qemu/+/emu-master-dev
This code is based on Veertu Inc's vdhh (Veertu Desktop Hosted
Hypervisor), found at https://github.com/veertuinc/vdhh. Everything is
appropriately licensed under GPL v2-or-later, except for the code inside
x86_task.c and x86_task.h, which, deriving from KVM (the Linux kernel),
is licensed GPL v2-only.
This code base already implements a very great deal of functionality,
although Google's version removed from Vertuu's the support for APIC
page and hyperv-related stuff. According to the Android Emulator Release
Notes, Revision 26.1.3 (August 2017), "Hypervisor.framework is now
enabled by default on macOS for 32-bit x86 images to improve performance
and macOS compatibility", although we better use with caution for, as the
same Revision warns us, "If you experience issues with it specifically,
please file a bug report...". The code hasn't seen much update in the
last 5 months, so I think that we can further develop the code with
occasional visiting Google's repository to see if there has been any
update.
On top of Google's code, the following changes were made:
- add code to the configure script to support the --enable-hvf argument.
If the OS is Darwin, it checks for presence of HVF in the system. The
patch also adds strings related to HVF in the file qemu-options.hx.
QEMU will only support the modern syntax style '-M accel=hvf' no enable
hvf; the legacy '-enable-hvf' will not be supported.
- fix styling issues
- add glue code to cpus.c
- move HVFX86EmulatorState field to CPUX86State, changing the
the emulation functions to have a parameter with signature 'CPUX86State *'
instead of 'CPUState *' so we don't have to get the 'env'.
Signed-off-by: Sergio Andres Gomez Del Real <Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-2-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-3-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-5-Sergio.G.DelReal@gmail.com>
Message-Id: <20170913090522.4022-6-Sergio.G.DelReal@gmail.com>
Message-Id: <20170905035457.3753-7-Sergio.G.DelReal@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-09-13 17:05:09 +08:00
|
|
|
if supported_hvf_target $target; then
|
|
|
|
echo "CONFIG_HVF=y" >> $config_target_mak
|
|
|
|
fi
|
2018-01-23 05:07:46 +08:00
|
|
|
if supported_whpx_target $target; then
|
|
|
|
echo "CONFIG_WHPX=y" >> $config_target_mak
|
|
|
|
fi
|
2003-06-16 04:25:43 +08:00
|
|
|
if test "$target_bigendian" = "yes" ; then
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
|
2003-06-16 04:25:43 +08:00
|
|
|
fi
|
2003-08-11 05:36:04 +08:00
|
|
|
if test "$target_softmmu" = "yes" ; then
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "CONFIG_SOFTMMU=y" >> $config_target_mak
|
2017-02-24 02:29:27 +08:00
|
|
|
if test "$mttcg" = "yes" ; then
|
|
|
|
echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
|
|
|
|
fi
|
2003-06-10 03:53:12 +08:00
|
|
|
fi
|
2003-10-28 05:10:39 +08:00
|
|
|
if test "$target_user_only" = "yes" ; then
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "CONFIG_USER_ONLY=y" >> $config_target_mak
|
2011-12-22 18:26:10 +08:00
|
|
|
echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
|
2003-10-28 05:10:39 +08:00
|
|
|
fi
|
2007-01-19 04:06:33 +08:00
|
|
|
if test "$target_linux_user" = "yes" ; then
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "CONFIG_LINUX_USER=y" >> $config_target_mak
|
2007-01-19 04:06:33 +08:00
|
|
|
fi
|
2008-10-12 01:55:29 +08:00
|
|
|
list=""
|
|
|
|
if test ! -z "$gdb_xml_files" ; then
|
|
|
|
for x in $gdb_xml_files; do
|
|
|
|
list="$list $source_path/gdb-xml/$x"
|
|
|
|
done
|
2009-10-07 08:41:04 +08:00
|
|
|
echo "TARGET_XML_FILES=$list" >> $config_target_mak
|
2008-10-12 01:55:29 +08:00
|
|
|
fi
|
2003-08-11 05:36:04 +08:00
|
|
|
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "TARGET_HAS_BFLT=y" >> $config_target_mak
|
2006-06-11 21:32:59 +08:00
|
|
|
fi
|
2008-10-27 04:33:16 +08:00
|
|
|
if test "$target_bsd_user" = "yes" ; then
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "CONFIG_BSD_USER=y" >> $config_target_mak
|
2008-10-27 04:33:16 +08:00
|
|
|
fi
|
2005-03-02 05:37:28 +08:00
|
|
|
|
2018-04-05 03:27:05 +08:00
|
|
|
if test -n "$target_compiler"; then
|
|
|
|
echo "CROSS_CC_GUEST=\"$target_compiler\"" >> $config_target_mak
|
|
|
|
|
|
|
|
if test -n "$target_compiler_static"; then
|
|
|
|
echo "CROSS_CC_GUEST_STATIC=$target_compiler_static" >> $config_target_mak
|
|
|
|
fi
|
2018-04-10 19:19:40 +08:00
|
|
|
|
|
|
|
if test -n "$target_compiler_cflags"; then
|
|
|
|
echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
|
|
|
|
fi
|
2018-04-05 03:27:05 +08:00
|
|
|
fi
|
|
|
|
|
2018-04-10 19:19:40 +08:00
|
|
|
|
2009-08-03 20:46:45 +08:00
|
|
|
# generate QEMU_CFLAGS/LDFLAGS for targets
|
2009-07-23 04:37:39 +08:00
|
|
|
|
2009-08-03 20:46:45 +08:00
|
|
|
cflags=""
|
2009-07-23 04:37:39 +08:00
|
|
|
ldflags=""
|
2009-08-03 20:46:46 +08:00
|
|
|
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config() {
|
|
|
|
echo "CONFIG_${1}_DIS=y" >> $config_target_mak
|
|
|
|
echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
|
|
|
|
}
|
|
|
|
|
2009-08-03 20:46:53 +08:00
|
|
|
for i in $ARCH $TARGET_BASE_ARCH ; do
|
|
|
|
case "$i" in
|
|
|
|
alpha)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "ALPHA"
|
2009-08-03 20:46:53 +08:00
|
|
|
;;
|
2014-03-04 11:53:27 +08:00
|
|
|
aarch64)
|
|
|
|
if test -n "${cxx}"; then
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "ARM_A64"
|
2014-03-04 11:53:27 +08:00
|
|
|
fi
|
|
|
|
;;
|
2009-08-03 20:46:53 +08:00
|
|
|
arm)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "ARM"
|
2014-02-06 01:27:28 +08:00
|
|
|
if test -n "${cxx}"; then
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "ARM_A64"
|
2014-02-06 01:27:28 +08:00
|
|
|
fi
|
2009-08-03 20:46:53 +08:00
|
|
|
;;
|
|
|
|
cris)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "CRIS"
|
2009-08-03 20:46:53 +08:00
|
|
|
;;
|
2016-09-30 01:55:53 +08:00
|
|
|
hppa)
|
|
|
|
disas_config "HPPA"
|
|
|
|
;;
|
2013-08-21 03:20:05 +08:00
|
|
|
i386|x86_64|x32)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "I386"
|
2009-08-03 20:46:53 +08:00
|
|
|
;;
|
2012-04-01 01:54:20 +08:00
|
|
|
lm32)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "LM32"
|
2012-04-01 01:54:20 +08:00
|
|
|
;;
|
2009-08-03 20:46:53 +08:00
|
|
|
m68k)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "M68K"
|
2009-08-03 20:46:53 +08:00
|
|
|
;;
|
2011-02-21 19:42:20 +08:00
|
|
|
microblaze*)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "MICROBLAZE"
|
2009-08-03 20:46:53 +08:00
|
|
|
;;
|
|
|
|
mips*)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "MIPS"
|
2018-10-24 23:41:49 +08:00
|
|
|
if test -n "${cxx}"; then
|
|
|
|
disas_config "NANOMIPS"
|
|
|
|
fi
|
2009-08-03 20:46:53 +08:00
|
|
|
;;
|
2013-03-19 03:49:25 +08:00
|
|
|
moxie*)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "MOXIE"
|
2013-03-19 03:49:25 +08:00
|
|
|
;;
|
2017-01-19 06:01:46 +08:00
|
|
|
nios2)
|
|
|
|
disas_config "NIOS2"
|
|
|
|
;;
|
2017-02-09 07:06:54 +08:00
|
|
|
or1k)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "OPENRISC"
|
2012-07-20 15:50:39 +08:00
|
|
|
;;
|
2009-08-03 20:46:53 +08:00
|
|
|
ppc*)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "PPC"
|
2009-08-03 20:46:53 +08:00
|
|
|
;;
|
2018-12-20 03:20:19 +08:00
|
|
|
riscv*)
|
2018-03-02 20:32:59 +08:00
|
|
|
disas_config "RISCV"
|
|
|
|
;;
|
2009-12-05 19:44:22 +08:00
|
|
|
s390*)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "S390"
|
2009-08-03 20:46:53 +08:00
|
|
|
;;
|
|
|
|
sh4)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "SH4"
|
2009-08-03 20:46:53 +08:00
|
|
|
;;
|
|
|
|
sparc*)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "SPARC"
|
2009-08-03 20:46:53 +08:00
|
|
|
;;
|
2011-09-06 07:55:26 +08:00
|
|
|
xtensa*)
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "XTENSA"
|
2011-09-06 07:55:26 +08:00
|
|
|
;;
|
2009-08-03 20:46:53 +08:00
|
|
|
esac
|
|
|
|
done
|
2011-10-19 13:07:18 +08:00
|
|
|
if test "$tcg_interpreter" = "yes" ; then
|
2015-08-29 18:33:59 +08:00
|
|
|
disas_config "TCI"
|
2011-10-19 13:07:18 +08:00
|
|
|
fi
|
2009-08-03 20:46:53 +08:00
|
|
|
|
2009-08-03 20:46:47 +08:00
|
|
|
case "$ARCH" in
|
|
|
|
alpha)
|
|
|
|
# Ensure there's only a single GP
|
|
|
|
cflags="-msmall-data $cflags"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
2009-08-03 20:46:50 +08:00
|
|
|
if test "$gprof" = "yes" ; then
|
2019-01-03 23:09:50 +08:00
|
|
|
echo "TARGET_GPROF=y" >> $config_target_mak
|
2009-08-03 20:46:50 +08:00
|
|
|
if test "$target_linux_user" = "yes" ; then
|
|
|
|
cflags="-p $cflags"
|
|
|
|
ldflags="-p $ldflags"
|
|
|
|
fi
|
|
|
|
if test "$target_softmmu" = "yes" ; then
|
|
|
|
ldflags="-p $ldflags"
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "GPROF_CFLAGS=-p" >> $config_target_mak
|
2009-08-03 20:46:50 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
|
2013-06-22 10:10:16 +08:00
|
|
|
ldflags="$ldflags $textseg_ldflags"
|
2009-07-23 04:37:39 +08:00
|
|
|
fi
|
|
|
|
|
2017-08-23 18:16:23 +08:00
|
|
|
# Newer kernels on s390 check for an S390_PGSTE program header and
|
|
|
|
# enable the pgste page table extensions in that case. This makes
|
|
|
|
# the vm.allocate_pgste sysctl unnecessary. We enable this program
|
|
|
|
# header if
|
|
|
|
# - we build on s390x
|
|
|
|
# - we build the system emulation for s390x (qemu-system-s390x)
|
|
|
|
# - KVM is enabled
|
|
|
|
# - the linker supports --s390-pgste
|
2019-02-05 10:39:37 +08:00
|
|
|
if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
|
|
|
|
test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
|
2017-08-23 18:16:23 +08:00
|
|
|
if ld_has --s390-pgste ; then
|
|
|
|
ldflags="-Wl,--s390-pgste $ldflags"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2009-10-07 08:41:00 +08:00
|
|
|
echo "LDFLAGS+=$ldflags" >> $config_target_mak
|
|
|
|
echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
|
2009-07-23 04:37:39 +08:00
|
|
|
|
2003-08-11 05:36:04 +08:00
|
|
|
done # for target in $targets
|
2003-03-07 07:23:54 +08:00
|
|
|
|
2019-05-24 21:09:42 +08:00
|
|
|
echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
|
|
|
|
echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
|
|
|
|
|
2018-04-05 03:27:05 +08:00
|
|
|
if test -n "$enabled_cross_compilers"; then
|
|
|
|
echo
|
|
|
|
echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
|
|
|
|
fi
|
|
|
|
|
2018-04-16 07:05:20 +08:00
|
|
|
if [ "$fdt" = "git" ]; then
|
Makefile: Rename targets for make recursion
We make a few sub-directories recursively, in particular
$(TARGET_DIRS).
For goal "all", we do it the nice way: "all" has a prerequisite
subdir-T for each T in $(TARGET_DIRS), and T's recipe runs make
recursively. Behaves nicely with -j and -k.
For other goals such as "clean" and "install", the recipe runs make
recursively in a for loop. Ignores -j and -k.
The next commit will fix that for "clean" and "install". This commit
prepares the ground by renaming the targets we use for "all" to
include the goal for the sub-make. This will permit reusing them for
goals other than "all".
Targets subdir-T for T in $(TARGET_DIRS) run "make all" in T. Rename
to T/all, and declare phony.
Targets romsubdir-R for R in $(ROMS) run "make" in pc-bios/R. Default
goal is "all" for all R. Rename to pc-bios/R/all, and declare phony.
The remainder are renamed just for consistency.
Target subdir-dtc runs "make libbft/libfdt.a" in dtc. Rename to
dtc/all, and declare phony.
Target subdir-capstone runs make $(BUILD_DIR)/capstone/$(LIBCAPSTONE)
in $(SRC_PATH)/capstone. Rename to capstone/all, and declare phony.
Target subdir-slirp runs "make" in $(SRC_PATH)/slirp. Default goal is
all, which builds $(BUILD_DIR)/libslirp.a. Rename to slirp/all, and
declare phony.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20190528082308.22032-4-armbru@redhat.com>
[Add compatibility gunk to keep make working across the rename]
2019-05-28 16:23:07 +08:00
|
|
|
echo "config-host.h: dtc/all" >> $config_host_mak
|
2013-04-18 12:47:31 +08:00
|
|
|
fi
|
2017-09-29 00:01:23 +08:00
|
|
|
if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
|
Makefile: Rename targets for make recursion
We make a few sub-directories recursively, in particular
$(TARGET_DIRS).
For goal "all", we do it the nice way: "all" has a prerequisite
subdir-T for each T in $(TARGET_DIRS), and T's recipe runs make
recursively. Behaves nicely with -j and -k.
For other goals such as "clean" and "install", the recipe runs make
recursively in a for loop. Ignores -j and -k.
The next commit will fix that for "clean" and "install". This commit
prepares the ground by renaming the targets we use for "all" to
include the goal for the sub-make. This will permit reusing them for
goals other than "all".
Targets subdir-T for T in $(TARGET_DIRS) run "make all" in T. Rename
to T/all, and declare phony.
Targets romsubdir-R for R in $(ROMS) run "make" in pc-bios/R. Default
goal is "all" for all R. Rename to pc-bios/R/all, and declare phony.
The remainder are renamed just for consistency.
Target subdir-dtc runs "make libbft/libfdt.a" in dtc. Rename to
dtc/all, and declare phony.
Target subdir-capstone runs make $(BUILD_DIR)/capstone/$(LIBCAPSTONE)
in $(SRC_PATH)/capstone. Rename to capstone/all, and declare phony.
Target subdir-slirp runs "make" in $(SRC_PATH)/slirp. Default goal is
all, which builds $(BUILD_DIR)/libslirp.a. Rename to slirp/all, and
declare phony.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20190528082308.22032-4-armbru@redhat.com>
[Add compatibility gunk to keep make working across the rename]
2019-05-28 16:23:07 +08:00
|
|
|
echo "config-host.h: capstone/all" >> $config_host_mak
|
2017-09-29 00:01:23 +08:00
|
|
|
fi
|
|
|
|
if test -n "$LIBCAPSTONE"; then
|
|
|
|
echo "LIBCAPSTONE=$LIBCAPSTONE" >> $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
|
|
|
|
fi
|
|
|
|
|
2015-03-26 06:57:39 +08:00
|
|
|
if test "$ccache_cpp2" = "yes"; then
|
|
|
|
echo "export CCACHE_CPP2=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.
|
|
|
|
# DIRS are directories which we simply mkdir in the build tree;
|
|
|
|
# LINKS are things to symlink back into the source tree
|
|
|
|
# (these can be both files and directories).
|
|
|
|
# Caution: do not add files or directories here using wildcards. This
|
|
|
|
# will result in problems later if a new file matching the wildcard is
|
|
|
|
# added to the source tree -- nothing will cause configure to be rerun
|
|
|
|
# so the build tree will be missing the link back to the new file, and
|
|
|
|
# tests might fail. Prefer to keep the relevant files in their own
|
|
|
|
# directory and symlink the directory instead.
|
2017-09-05 10:11:58 +08:00
|
|
|
DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
|
2018-06-13 23:07:21 +08:00
|
|
|
DIRS="$DIRS tests/fp tests/qgraph"
|
2017-08-22 12:50:18 +08:00
|
|
|
DIRS="$DIRS docs docs/interop fsdev scsi"
|
2013-04-23 09:23:03 +08:00
|
|
|
DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
|
2010-12-23 18:43:59 +08:00
|
|
|
DIRS="$DIRS roms/seabios roms/vgabios"
|
2018-12-18 19:37:17 +08:00
|
|
|
LINKS="Makefile tests/tcg/Makefile"
|
2018-11-02 19:52:38 +08:00
|
|
|
LINKS="$LINKS tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
|
|
|
|
LINKS="$LINKS tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
|
|
|
|
LINKS="$LINKS tests/fp/Makefile"
|
|
|
|
LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
|
|
|
|
LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
|
|
|
|
LINKS="$LINKS pc-bios/s390-ccw/Makefile"
|
|
|
|
LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
|
|
|
|
LINKS="$LINKS pc-bios/qemu-icon.bmp"
|
|
|
|
LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
|
2018-11-02 19:52:39 +08:00
|
|
|
LINKS="$LINKS tests/acceptance tests/data"
|
|
|
|
LINKS="$LINKS tests/qemu-iotests/check"
|
2019-02-07 00:29:01 +08:00
|
|
|
LINKS="$LINKS python"
|
2011-06-25 02:58:37 +08:00
|
|
|
for bios_file in \
|
|
|
|
$source_path/pc-bios/*.bin \
|
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.* \
|
2019-03-08 08:19:35 +08:00
|
|
|
$source_path/pc-bios/edk2-*.fd.bz2 \
|
2011-06-25 02:58:37 +08:00
|
|
|
$source_path/pc-bios/palcode-*
|
|
|
|
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
|
|
|
|
mkdir -p $DIRS
|
2018-11-02 19:52:38 +08:00
|
|
|
for f in $LINKS ; do
|
2014-04-28 20:09:01 +08:00
|
|
|
if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
|
2011-06-04 00:10:40 +08:00
|
|
|
symlink "$source_path/$f" "$f"
|
|
|
|
fi
|
2010-12-23 18:43:59 +08:00
|
|
|
done
|
2009-05-19 23:17:58 +08:00
|
|
|
|
2009-09-04 23:13:29 +08:00
|
|
|
# temporary config to build submodules
|
2009-11-03 05:50:27 +08:00
|
|
|
for rom in seabios vgabios ; 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
|
|
|
|
|
2014-05-25 05:24:56 +08:00
|
|
|
# set up qemu-iotests in this build directory
|
|
|
|
iotests_common_env="tests/qemu-iotests/common.env"
|
|
|
|
|
|
|
|
echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
|
|
|
|
echo >> "$iotests_common_env"
|
|
|
|
echo "export PYTHON='$python'" >> "$iotests_common_env"
|
|
|
|
|
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
|
|
|
|
preserve_env CXX
|
|
|
|
preserve_env INSTALL
|
|
|
|
preserve_env LD
|
|
|
|
preserve_env LD_LIBRARY_PATH
|
|
|
|
preserve_env LIBTOOL
|
|
|
|
preserve_env MAKE
|
|
|
|
preserve_env NM
|
|
|
|
preserve_env OBJCOPY
|
|
|
|
preserve_env PATH
|
|
|
|
preserve_env PKG_CONFIG
|
|
|
|
preserve_env PKG_CONFIG_LIBDIR
|
|
|
|
preserve_env PKG_CONFIG_PATH
|
|
|
|
preserve_env PYTHON
|
|
|
|
preserve_env SDL_CONFIG
|
|
|
|
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
|
|
|
|
printf " '%s'" "$0" "$@" >>config.status
|
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"
|