Skip to content

Commit

Permalink
tests/tcg: don't iterate through other arch compilers
Browse files Browse the repository at this point in the history
There should only be one compiler per architecture. Those cases where
the same compiler can deal with a different architecture should be
explicitly set for both cross_cc and docker configurations. Otherwise
you get strangeness like:

  --cross-cc-aarch64=/bin/false

causing the logic to attempt to use a locally available
arm-linux-gnueabihf-gcc rather than forcing the use of the docker
image which is what is implied by the command line option.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20210512102051.12134-10-alex.bennee@linaro.org>
  • Loading branch information
stsquad committed May 18, 2021
1 parent 910c40e commit d8e706d
Showing 1 changed file with 59 additions and 89 deletions.
148 changes: 59 additions & 89 deletions tests/tcg/configure.sh
Expand Up @@ -74,35 +74,6 @@ fi

for target in $target_list; do
arch=${target%%-*}
case $arch in
arm|armeb)
arches=arm
;;
aarch64|aarch64_be)
arches="aarch64 arm"
;;
mips*)
arches=mips
;;
ppc*)
arches=ppc
;;
sh4|sh4eb)
arches=sh4
;;
x86_64)
arches="x86_64 i386"
;;
xtensa|xtensaeb)
arches=xtensa
;;
alpha|cris|hexagon|hppa|i386|microblaze|microblazeel|m68k|openrisc|riscv64|s390x|sh4|sparc64)
arches=$target
;;
*)
continue
;;
esac

container_image=
case $target in
Expand Down Expand Up @@ -236,70 +207,69 @@ for target in $target_list; do
echo "CROSS_CC_GUEST_CFLAGS=$target_compiler_cflags" >> $config_target_mak

got_cross_cc=no
for i in $arch $arches; do
if eval test "x\${cross_cc_$i+yes}" != xyes; then
continue
fi

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
fi
echo "CROSS_CC_GUEST=$target_compiler" >> $config_target_mak
if eval test "x\${cross_cc_$arch}" != xyes; then
eval "target_compiler=\${cross_cc_$arch}"

# 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
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
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
fi
fi

enabled_cross_compilers="$enabled_cross_compilers $target_compiler"
got_cross_cc=yes
break
done
if test $got_cross_cc = yes; then
# 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.

if test $got_cross_cc = no && test "$container" != no && test -n "$container_image"; then
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
elif 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
Expand Down

0 comments on commit d8e706d

Please sign in to comment.