diff mbox series

[PULL,24/29] tests/tcg: don't allow clang as a cross compiler

Message ID 20210517161022.13984-25-alex.bennee@linaro.org
State New
Headers show
Series testing and plugin updates | expand

Commit Message

Alex Bennée May 17, 2021, 4:10 p.m. UTC
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>


-- 
2.20.1
diff mbox series

Patch

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