libs_tools=""
audio_pt_int=""
audio_win_int=""
-cc_i386=i386-pc-linux-gnu-gcc
libs_qga=""
debug_info="yes"
stack_protector=""
else
git_update=no
git_submodules=""
+
+ if ! test -f "$source_path/ui/keycodemapdb/README"
+ then
+ echo
+ echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
+ echo
+ echo "This is not a GIT checkout but module content appears to"
+ echo "be missing. Do not use 'git archive' or GitHub download links"
+ echo "to acquire QEMU source archives. Non-GIT builds are only"
+ echo "supported with source archives linked from:"
+ echo
+ echo " https://www.qemu.org/download/"
+ echo
+ echo "Developers working with GIT can use scripts/archive-source.sh"
+ echo "if they need to create valid source archives."
+ echo
+ exit 1
+ fi
fi
git="git"
replication="yes"
vxhs=""
libxml2=""
+docker="no"
+debug_mutex="no"
+
+# cross compilers defaults, can be overridden with --cross-cc-ARCH
+cross_cc_aarch64="aarch64-linux-gnu-gcc"
+cross_cc_aarch64_be="$cross_cc_aarch64"
+cross_cc_cflags_aarch64_be="-mbig-endian"
+cross_cc_arm="arm-linux-gnueabihf-gcc"
+cross_cc_cflags_armeb="-mbig-endian"
+cross_cc_i386="i386-pc-linux-gnu-gcc"
+cross_cc_cflags_i386=""
+cross_cc_powerpc="powerpc-linux-gnu-gcc"
+cross_cc_powerpc="powerpc-linux-gnu-gcc"
+
+enabled_cross_compilers=""
supported_cpu="no"
supported_os="no"
;;
--disable-debug-info) debug_info="no"
;;
+ --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
+ ;;
+ --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
+ eval "cross_cc_cflags_${cc_arch}=\$optarg"
+ ;;
+ --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
+ eval "cross_cc_${cc_arch}=\$optarg"
+ ;;
esac
done
# OS specific
ppc|ppc64|s390|s390x|sparc64|x32)
cpu="$cpu"
supported_cpu="yes"
+ eval "cross_cc_${cpu}=\$host_cc"
;;
i386|i486|i586|i686|i86pc|BePC)
cpu="i386"
supported_cpu="yes"
+ cross_cc_i386=$host_cc
;;
x86_64|amd64)
cpu="x86_64"
supported_cpu="yes"
+ cross_cc_x86_64=$host_cc
;;
armv*b|armv*l|arm)
cpu="arm"
supported_cpu="yes"
+ cross_cc_arm=$host_cc
;;
aarch64)
cpu="aarch64"
supported_cpu="yes"
+ cross_cc_aarch64=$host_cc
;;
mips*)
cpu="mips"
supported_cpu="yes"
+ cross_cc_mips=$host_cc
;;
sparc|sun4[cdmuv])
cpu="sparc"
supported_cpu="yes"
+ cross_cc_sparc=$host_cc
;;
*)
# This will result in either an error or falling back to TCI later
;;
--disable-debug-info)
;;
+ --cross-cc-*)
+ ;;
--enable-modules)
modules="yes"
;;
--enable-debug)
# Enable debugging options that aren't excessively noisy
debug_tcg="yes"
+ debug_mutex="yes"
debug="yes"
strip_opt="no"
fortify_source="no"
;;
--disable-git-update) git_update=no
;;
+ --enable-debug-mutex) debug_mutex=yes
+ ;;
+ --disable-debug-mutex) debug_mutex=no
+ ;;
*)
echo "ERROR: unknown option $opt"
echo "Try '$0 --help' for more information"
ppc)
CPU_CFLAGS="-m32"
LDFLAGS="-m32 $LDFLAGS"
+ cross_cc_powerpc=$cc
+ cross_cc_cflags_powerpc=$CPU_CFLAGS
;;
ppc64)
CPU_CFLAGS="-m64"
LDFLAGS="-m64 $LDFLAGS"
+ cross_cc_ppc64=$cc
+ cross_cc_cflags_ppc64=$CPU_CFLAGS
;;
sparc)
CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
LDFLAGS="-m32 -mv8plus $LDFLAGS"
+ cross_cc_sparc=$cc
+ cross_cc_cflags_sparc=$CPU_CFLAGS
;;
sparc64)
CPU_CFLAGS="-m64 -mcpu=ultrasparc"
LDFLAGS="-m64 $LDFLAGS"
+ cross_cc_sparc64=$cc
+ cross_cc_cflags_sparc64=$CPU_CFLAGS
;;
s390)
CPU_CFLAGS="-m31"
LDFLAGS="-m31 $LDFLAGS"
+ cross_cc_s390=$cc
+ cross_cc_cflags_s390=$CPU_CFLAGS
;;
s390x)
CPU_CFLAGS="-m64"
LDFLAGS="-m64 $LDFLAGS"
+ cross_cc_s390x=$cc
+ cross_cc_cflags_s390x=$CPU_CFLAGS
;;
i386)
CPU_CFLAGS="-m32"
LDFLAGS="-m32 $LDFLAGS"
- cc_i386='$(CC) -m32'
+ cross_cc_i386=$cc
+ cross_cc_cflags_i386=$CPU_CFLAGS
;;
x86_64)
# ??? Only extremely old AMD cpus do not have cmpxchg16b.
# runtime and generate the fallback to serial emulation.
CPU_CFLAGS="-m64 -mcx16"
LDFLAGS="-m64 $LDFLAGS"
- cc_i386='$(CC) -m32'
+ cross_cc_x86_64=$cc
+ cross_cc_cflags_x86_64=$CPU_CFLAGS
;;
x32)
CPU_CFLAGS="-mx32"
LDFLAGS="-mx32 $LDFLAGS"
- cc_i386='$(CC) -m32'
+ cross_cc_i386=$cc
+ cross_cc_cflags_i386=$CPU_CFLAGS
;;
# No special flags required for other host CPUs
esac
--extra-cflags=CFLAGS append extra C compiler flags QEMU_CFLAGS
--extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
--extra-ldflags=LDFLAGS append extra linker flags LDFLAGS
+ --cross-cc-ARCH=CC use compiler when building ARCH guest test cases
+ --cross-cc-flags-ARCH= use compiler flags when building ARCH guest tests
--make=MAKE use specified make [$make]
--install=INSTALL use specified install [$install]
--python=PYTHON use specified python [$python]
virtfs VirtFS
mpath Multipath persistent reservation passthrough
xen xen backend driver support
- xen-pci-passthrough
+ xen-pci-passthrough PCI passthrough support for Xen
brlapi BrlAPI (Braile)
curl curl connectivity
membarrier membarrier system call (for Linux 4.14+ or Windows)
crypto-afalg Linux AF_ALG crypto backend driver
vhost-user vhost-user support
capstone capstone disassembler support
+ debug-mutex mutex debugging support
NOTE: The object files are built at the place where configure is launched
EOF
# 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 < (2,6))'; then
- error_exit "Cannot use '$python', Python 2 >= 2.6 or Python 3 is required." \
+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." \
"Use --python=/path/to/python to specify a supported Python."
fi
#undef XC_WANT_COMPAT_DEVICEMODEL_API
#define __XEN_TOOLS__
#include <xendevicemodel.h>
+#include <xenforeignmemory.h>
int main(void) {
xendevicemodel_handle *xd;
+ xenforeignmemory_handle *xfmem;
xd = xendevicemodel_open(0, 0);
xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
+ xfmem = xenforeignmemory_open(0, 0);
+ xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
+
return 0;
}
EOF
##########################################
# Windows Hypervisor Platform accelerator (WHPX) check
if test "$whpx" != "no" ; then
- cat > $TMPC << EOF
-#include <windows.h>
-#include <WinHvPlatform.h>
-#include <WinHvEmulation.h>
-int main(void) {
- WHV_CAPABILITY whpx_cap;
- UINT32 writtenSize;
- WHvGetCapability(WHvCapabilityCodeFeatures, &whpx_cap, sizeof(whpx_cap),
- &writtenSize);
- return 0;
-}
-EOF
- if compile_prog "" "-lWinHvPlatform -lWinHvEmulation" ; then
- libs_softmmu="$libs_softmmu -lWinHvPlatform -lWinHvEmulation"
+ if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
whpx="yes"
else
if test "$whpx" = "yes"; then
##########################################
# glib support probe
-if test "$mingw32" = yes; then
- glib_req_ver=2.30
-else
- glib_req_ver=2.22
-fi
+glib_req_ver=2.40
glib_modules=gthread-2.0
if test "$modules" = yes; then
glib_modules="$glib_modules gmodule-export-2.0"
# opengl probe (for sdl2, gtk, milkymist-tmu2)
if test "$opengl" != "no" ; then
- opengl_pkgs="epoxy libdrm gbm"
+ opengl_pkgs="epoxy gbm"
if $pkg_config $opengl_pkgs; then
opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
opengl_libs="$($pkg_config --libs $opengl_pkgs)"
EOF
virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
+ virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
if $pkg_config virglrenderer >/dev/null 2>&1 && \
compile_prog "$virgl_cflags" "$virgl_libs" ; then
virglrenderer="yes"
sem_timedwait=yes
fi
+##########################################
+# 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
+
##########################################
# check if trace backend exists
fi
fi
+###############################################
+# 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
+
##########################################
# check if struct fsxattr is available via linux/fs.h
fi
fi
+##########################################
+# 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
+
##########################################
# End of CC checks
# After here, no more $cc or $ld runs
echo "nettle kdf $nettle_kdf"
echo "libtasn1 $tasn1"
echo "curses support $curses"
-echo "virgl support $virglrenderer"
+echo "virgl support $virglrenderer $(echo_version $virglrenderer $virgl_version)"
echo "curl support $curl"
echo "mingw32 support $mingw32"
echo "Audio drivers $audio_drv_list"
echo "coroutine backend $coroutine"
echo "coroutine pool $coroutine_pool"
echo "debug stack usage $debug_stack_usage"
+echo "mutex debugging $debug_mutex"
echo "crypto afalg $crypto_afalg"
echo "GlusterFS support $glusterfs"
echo "gcov $gcov_tool"
echo "replication support $replication"
echo "VxHS block device $vxhs"
echo "capstone $capstone"
+echo "docker $docker"
if test "$sdl_too_old" = "yes"; then
echo "-> Your SDL version is too old - please upgrade to have SDL support"
if test "$sem_timedwait" = "yes" ; then
echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
fi
+if test "$strchrnul" = "yes" ; then
+ echo "HAVE_STRCHRNUL=y" >> $config_host_mak
+fi
if test "$byteswap_h" = "yes" ; then
echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
fi
if test "$have_fsxattr" = "yes" ; then
echo "HAVE_FSXATTR=y" >> $config_host_mak
fi
+if test "$have_copy_file_range" = "yes" ; then
+ echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
+fi
if test "$vte" = "yes" ; then
echo "CONFIG_VTE=y" >> $config_host_mak
echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
if test "$capstone" != "no" ; then
echo "CONFIG_CAPSTONE=y" >> $config_host_mak
fi
+if test "$debug_mutex" = "yes" ; then
+ echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
+fi
# Hold two types of flag:
# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
if $iasl -h > /dev/null 2>&1; then
echo "IASL=$iasl" >> $config_host_mak
fi
-echo "CC_I386=$cc_i386" >> $config_host_mak
echo "HOST_CC=$host_cc" >> $config_host_mak
echo "CXX=$cxx" >> $config_host_mak
echo "OBJCC=$objcc" >> $config_host_mak
echo "GCOV=$gcov_tool" >> $config_host_mak
fi
+if test "$docker" != "no"; then
+ echo "HAVE_USER_DOCKER=y" >> $config_host_mak
+fi
+
# use included Linux headers
if test "$linux" = "yes" ; then
mkdir -p linux-headers
;;
esac
+target_compiler=""
+target_compiler_static=""
+target_compiler_cflags=""
+
mkdir -p $target_dir
echo "# Automatically generated by configure - do not modify" > $config_target_mak
case "$target_name" in
i386)
gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
+ target_compiler=$cross_cc_i386
+ target_compiler_cflags=$cross_cc_ccflags_i386
;;
x86_64)
TARGET_BASE_ARCH=i386
gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
+ target_compiler=$cross_cc_x86_64
;;
alpha)
mttcg="yes"
+ target_compiler=$cross_cc_alpha
;;
arm|armeb)
TARGET_ARCH=arm
bflt="yes"
mttcg="yes"
gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
+ target_compiler=$cross_cc_arm
+ eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
;;
aarch64|aarch64_be)
TARGET_ARCH=aarch64
bflt="yes"
mttcg="yes"
gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
+ target_compiler=$cross_cc_aarch64
+ eval "target_compiler_cflags=\$cross_cc_cflags_${target_name}"
;;
cris)
+ target_compiler=$cross_cc_cris
;;
hppa)
mttcg="yes"
+ target_compiler=$cross_cc_hppa
;;
lm32)
+ target_compiler=$cross_cc_lm32
;;
m68k)
bflt="yes"
gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
+ target_compiler=$cross_cc_m68k
;;
microblaze|microblazeel)
TARGET_ARCH=microblaze
bflt="yes"
+ echo "TARGET_ABI32=y" >> $config_target_mak
+ target_compiler=$cross_cc_microblaze
;;
mips|mipsel)
TARGET_ARCH=mips
+ target_compiler=$cross_cc_mips
echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
;;
mipsn32|mipsn32el)
TARGET_ARCH=mips64
TARGET_BASE_ARCH=mips
+ target_compiler=$cross_cc_mipsn32
echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
echo "TARGET_ABI32=y" >> $config_target_mak
;;
mips64|mips64el)
TARGET_ARCH=mips64
TARGET_BASE_ARCH=mips
+ target_compiler=$cross_cc_mips64
echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
;;
moxie)
+ target_compiler=$cross_cc_moxie
;;
nios2)
+ target_compiler=$cross_cc_nios2
;;
or1k)
+ target_compiler=$cross_cc_or1k
TARGET_ARCH=openrisc
TARGET_BASE_ARCH=openrisc
;;
ppc)
gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
+ target_compiler=$cross_cc_powerpc
;;
ppcemb)
TARGET_BASE_ARCH=ppc
TARGET_ABI_DIR=ppc
gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
+ target_compiler=$cross_cc_ppcemb
;;
ppc64)
TARGET_BASE_ARCH=ppc
TARGET_ABI_DIR=ppc
mttcg=yes
gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
+ target_compiler=$cross_cc_ppc64
;;
ppc64le)
TARGET_ARCH=ppc64
TARGET_ABI_DIR=ppc
mttcg=yes
gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
+ target_compiler=$cross_cc_ppc64le
;;
ppc64abi32)
TARGET_ARCH=ppc64
TARGET_ABI_DIR=ppc
echo "TARGET_ABI32=y" >> $config_target_mak
gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
+ target_compiler=$cross_cc_ppc64abi32
;;
riscv32)
TARGET_BASE_ARCH=riscv
TARGET_ABI_DIR=riscv
mttcg=yes
+ target_compiler=$cross_cc_riscv32
;;
riscv64)
TARGET_BASE_ARCH=riscv
TARGET_ABI_DIR=riscv
mttcg=yes
+ target_compiler=$cross_cc_riscv64
;;
sh4|sh4eb)
TARGET_ARCH=sh4
bflt="yes"
+ target_compiler=$cross_cc_sh4
;;
sparc)
+ target_compiler=$cross_cc_sparc
;;
sparc64)
TARGET_BASE_ARCH=sparc
+ target_compiler=$cross_cc_sparc64
;;
sparc32plus)
TARGET_ARCH=sparc64
TARGET_BASE_ARCH=sparc
TARGET_ABI_DIR=sparc
+ target_compiler=$cross_cc_sparc32plus
echo "TARGET_ABI32=y" >> $config_target_mak
;;
s390x)
mttcg=yes
gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
+ target_compiler=$cross_cc_s390x
;;
tilegx)
+ target_compiler=$cross_cc_tilegx
;;
tricore)
+ target_compiler=$cross_cc_tricore
;;
unicore32)
+ target_compiler=$cross_cc_unicore32
;;
xtensa|xtensaeb)
TARGET_ARCH=xtensa
mttcg="yes"
+ target_compiler=$cross_cc_xtensa
;;
*)
error_exit "Unsupported target CPU"
TARGET_BASE_ARCH=$TARGET_ARCH
fi
+# Do we have a cross compiler for this target?
+if has $target_compiler; then
+
+ write_c_skeleton
+
+ if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC -static ; then
+ # For host systems we might get away with building without -static
+ if ! do_compiler "$target_compiler" $target_compiler_cflags -o $TMPE $TMPC ; then
+ 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
+
symlink "$source_path/Makefile.target" "$target_dir/Makefile"
upper() {
echo "CONFIG_BSD_USER=y" >> $config_target_mak
fi
+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
+
+ if test -n "$target_compiler_cflags"; then
+ echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak
+ fi
+fi
+
+
# generate QEMU_CFLAGS/LDFLAGS for targets
cflags=""
done # for target in $targets
+if test -n "$enabled_cross_compilers"; then
+ echo
+ echo "NOTE: cross-compilers enabled: $enabled_cross_compilers"
+fi
+
if [ "$fdt" = "git" ]; then
echo "config-host.h: subdir-dtc" >> $config_host_mak
fi
done
# set up tests data directory
-if [ ! -e tests/data ]; then
- symlink "$source_path/tests/data" tests/data
-fi
+for tests_subdir in acceptance data; do
+ if [ ! -e tests/$tests_subdir ]; then
+ symlink "$source_path/tests/$tests_subdir" tests/$tests_subdir
+ fi
+done
# set up qemu-iotests in this build directory
iotests_common_env="tests/qemu-iotests/common.env"