[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 24/29] tests/tcg: don't allow clang as a cross compiler
From: |
Alex Bennée |
Subject: |
[PULL 24/29] tests/tcg: don't allow clang as a cross compiler |
Date: |
Mon, 17 May 2021 17:10:17 +0100 |
Currently there are two problems.
The first is clang generates a preamble (that is always executed) to
stack xmm registers. This causes a ILLOP on the x86_64 softmmu tests
as SSE isn't enabled.
The second is the inline assembler in test-i386.c breaks clangs
compiler and I don't know how to fix it. Even with Theodore's patch
series (D5741445-7EFD-4AF1-8DB2-E4AFA93CBB1A@icloud.com) I still get
compiler failures.
For now lets just skip clang and allow it to fall back to the
containers which we know have compilers which work.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
diff --git a/tests/tcg/configure.sh b/tests/tcg/configure.sh
index d13d2bb388..016aa24ce4 100755
--- a/tests/tcg/configure.sh
+++ b/tests/tcg/configure.sh
@@ -105,6 +105,14 @@ for target in $target_list; do
esac
container_image=
+ container_hosts=
+ container_cross_cc=
+ container_cross_as=
+ container_cross_ld=
+
+ # suppress clang
+ supress_clang=
+
case $target in
aarch64-*)
# We don't have any bigendian build tools so we only use this for AArch64
@@ -142,6 +150,7 @@ for target in $target_list; do
container_hosts=x86_64
container_image=fedora-i386-cross
container_cross_cc=gcc
+ supress_clang=yes
;;
m68k-*)
container_hosts=x86_64
@@ -213,6 +222,7 @@ for target in $target_list; do
container_hosts="aarch64 ppc64el x86_64"
container_image=debian-amd64-cross
container_cross_cc=x86_64-linux-gnu-gcc
+ supress_clang=yes
;;
xtensa*-softmmu)
container_hosts=x86_64
@@ -246,71 +256,75 @@ for target in $target_list; do
if eval test "x\${cross_cc_$i+yes}" != xyes; then
continue
fi
+ eval "target_compiler=\${cross_cc_$arch}"
- eval "target_compiler=\${cross_cc_$i}"
- if ! has $target_compiler; then
- continue
- fi
- 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
- continue
- fi
- echo "CROSS_CC_GUEST_STATIC=y" >> $config_target_mak
- else
- echo "CROSS_CC_GUEST_STATIC=y" >> $config_target_mak
+ if has "$target_compiler"; then
+ if test "$supress_clang" = yes &&
+ $target_compiler --version | grep -qi "clang"; then
+ got_cross_cc=no
+ else
+ 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
+ got_cross_cc=yes
+ echo "CROSS_CC_GUEST_STATIC=y" >> $config_target_mak
+ echo "CROSS_CC_GUEST=$target_compiler" >>
$config_target_mak
+ fi
+ else
+ got_cross_cc=yes
+ echo "CROSS_CC_GUEST_STATIC=y" >> $config_target_mak
+ echo "CROSS_CC_GUEST=$target_compiler" >> $config_target_mak
+ fi
+
+ # Test for compiler features for optional tests. We only do this
+ # for cross compilers because ensuring the docker containers based
+ # compilers is a requirememt for adding a new test that needs a
+ # compiler feature.
+ case $target in
+ aarch64-*)
+ if do_compiler "$target_compiler" $target_compiler_cflags \
+ -march=armv8.1-a+sve -o $TMPE $TMPC; then
+ echo "CROSS_CC_HAS_SVE=y" >> $config_target_mak
+ fi
+ if do_compiler "$target_compiler" $target_compiler_cflags \
+ -march=armv8.3-a -o $TMPE $TMPC; then
+ echo "CROSS_CC_HAS_ARMV8_3=y" >> $config_target_mak
+ fi
+ if do_compiler "$target_compiler" $target_compiler_cflags \
+ -mbranch-protection=standard -o $TMPE
$TMPC; then
+ echo "CROSS_CC_HAS_ARMV8_BTI=y" >> $config_target_mak
+ fi
+ if do_compiler "$target_compiler" $target_compiler_cflags \
+ -march=armv8.5-a+memtag -o $TMPE $TMPC; then
+ echo "CROSS_CC_HAS_ARMV8_MTE=y" >> $config_target_mak
+ fi
+ ;;
+ ppc*)
+ if do_compiler "$target_compiler" $target_compiler_cflags \
+ -mpower8-vector -o $TMPE $TMPC; then
+ echo "CROSS_CC_HAS_POWER8_VECTOR=y" >>
$config_target_mak
+ fi
+ ;;
+ i386-linux-user)
+ if do_compiler "$target_compiler" $target_compiler_cflags \
+ -Werror -fno-pie -o $TMPE $TMPC; then
+ echo "CROSS_CC_HAS_I386_NOPIE=y" >> $config_target_mak
+ fi
+ ;;
+ esac
+ fi
fi
- echo "CROSS_CC_GUEST=$target_compiler" >> $config_target_mak
- # Test for compiler features for optional tests. We only do this
- # for cross compilers because ensuring the docker containers based
- # compilers is a requirememt for adding a new test that needs a
- # compiler feature.
- case $target in
- aarch64-*)
- if do_compiler "$target_compiler" $target_compiler_cflags \
- -march=armv8.1-a+sve -o $TMPE $TMPC; then
- echo "CROSS_CC_HAS_SVE=y" >> $config_target_mak
- fi
- if do_compiler "$target_compiler" $target_compiler_cflags \
- -march=armv8.3-a -o $TMPE $TMPC; then
- echo "CROSS_CC_HAS_ARMV8_3=y" >> $config_target_mak
+ if test $got_cross_cc = no && test "$container" != no && test -n
"$container_image"; then
+ for host in $container_hosts; do
+ if test "$host" = "$ARCH"; then
+ echo "DOCKER_IMAGE=$container_image" >> $config_target_mak
+ echo "DOCKER_CROSS_CC_GUEST=$container_cross_cc" >>
$config_target_mak
fi
- if do_compiler "$target_compiler" $target_compiler_cflags \
- -mbranch-protection=standard -o $TMPE $TMPC; then
- echo "CROSS_CC_HAS_ARMV8_BTI=y" >> $config_target_mak
- fi
- if do_compiler "$target_compiler" $target_compiler_cflags \
- -march=armv8.5-a+memtag -o $TMPE $TMPC; then
- echo "CROSS_CC_HAS_ARMV8_MTE=y" >> $config_target_mak
- fi
- ;;
- ppc*)
- if do_compiler "$target_compiler" $target_compiler_cflags \
- -mpower8-vector -o $TMPE $TMPC; then
- echo "CROSS_CC_HAS_POWER8_VECTOR=y" >> $config_target_mak
- fi
- ;;
- i386-linux-user)
- if do_compiler "$target_compiler" $target_compiler_cflags \
- -Werror -fno-pie -o $TMPE $TMPC; then
- echo "CROSS_CC_HAS_I386_NOPIE=y" >> $config_target_mak
- fi
- ;;
- esac
-
- enabled_cross_compilers="$enabled_cross_compilers $target_compiler"
- got_cross_cc=yes
- break
+ done
+ fi
done
-
- if test $got_cross_cc = no && test "$container" != no && test -n
"$container_image"; then
- for host in $container_hosts; do
- if test "$host" = "$ARCH"; then
- echo "DOCKER_IMAGE=$container_image" >> $config_target_mak
- echo "DOCKER_CROSS_CC_GUEST=$container_cross_cc" >>
$config_target_mak
- fi
- done
- fi
done
--
2.20.1
- [PULL 28/29] plugins/hotblocks: Properly freed the hash table values, (continued)
- [PULL 28/29] plugins/hotblocks: Properly freed the hash table values, Alex Bennée, 2021/05/17
- [PULL 16/29] tests/tcg/tricore: Add fadd test, Alex Bennée, 2021/05/17
- [PULL 15/29] tests/tcg/tricore: Add dvstep test, Alex Bennée, 2021/05/17
- [PULL 14/29] tests/tcg/tricore: Add clz test, Alex Bennée, 2021/05/17
- [PULL 27/29] plugins: Move all typedef and type declaration to the front of the qemu-plugin.h, Alex Bennée, 2021/05/17
- [PULL 22/29] tests/tcg/ppc64le: tests for brh/brw/brd, Alex Bennée, 2021/05/17
- [PULL 19/29] tests/tcg/tricore: Add madd test, Alex Bennée, 2021/05/17
- [PULL 29/29] plugins/hotpages: Properly freed the hash table values, Alex Bennée, 2021/05/17
- [PULL 26/29] plugins: Update qemu-plugins.symbols to match qemu-plugins.h, Alex Bennée, 2021/05/17
- [PULL 17/29] tests/tcg/tricore: Add fmul test, Alex Bennée, 2021/05/17
- [PULL 24/29] tests/tcg: don't allow clang as a cross compiler,
Alex Bennée <=
- [PULL 25/29] configure: use cc, not host_cc to set cross_cc for build arch, Alex Bennée, 2021/05/17
- Re: [PULL 00/29] testing and plugin updates, no-reply, 2021/05/17
- Re: [PULL 00/29] testing and plugin updates, Alex Bennée, 2021/05/17