qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: peter.maydell@linaro.org
Cc: "Alex Bennée" <alex.bennee@linaro.org>, qemu-devel@nongnu.org
Subject: [PULL 24/29] tests/tcg: don't allow clang as a cross compiler
Date: Mon, 17 May 2021 17:10:17 +0100	[thread overview]
Message-ID: <20210517161022.13984-25-alex.bennee@linaro.org> (raw)
In-Reply-To: <20210517161022.13984-1-alex.bennee@linaro.org>

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



  parent reply	other threads:[~2021-05-17 16:48 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-17 16:09 [PULL 00/29] testing and plugin updates Alex Bennée
2021-05-17 16:09 ` [PULL 01/29] tests/docker: fix copying of executable in "update" Alex Bennée
2021-05-17 16:09 ` [PULL 02/29] tests/docker: make executable an optional argument to "update" Alex Bennée
2021-05-17 16:09 ` [PULL 03/29] tests/docker: allow "update" to add the current user Alex Bennée
2021-05-17 16:09 ` [PULL 04/29] tests/docker: add "fetch" sub-command Alex Bennée
2021-05-17 16:09 ` [PULL 05/29] docker: Add Hexagon image Alex Bennée
2021-05-17 16:09 ` [PULL 06/29] tests/tcg: Use Hexagon Docker image Alex Bennée
2021-05-17 16:10 ` [PULL 07/29] tests/docker: Added libbpf library to the docker files Alex Bennée
2021-05-17 16:10 ` [PULL 08/29] tests/tcg: Run timeout cmds using --foreground Alex Bennée
2021-05-17 16:10 ` [PULL 09/29] hw/tricore: Add testdevice for tests in tests/tcg/ Alex Bennée
2021-05-17 16:10 ` [PULL 10/29] tests/tcg/tricore: Add build infrastructure Alex Bennée
2021-05-17 16:10 ` [PULL 11/29] configure: Emit HOST_CC to config-host.mak Alex Bennée
2021-05-17 16:10 ` [PULL 12/29] tests/tcg/tricore: Add macros to create tests and first test 'abs' Alex Bennée
2021-05-17 16:10 ` [PULL 13/29] tests/tcg/tricore: Add bmerge test Alex Bennée
2021-05-17 16:10 ` [PULL 14/29] tests/tcg/tricore: Add clz test Alex Bennée
2021-05-17 16:10 ` [PULL 15/29] tests/tcg/tricore: Add dvstep test Alex Bennée
2021-05-17 16:10 ` [PULL 16/29] tests/tcg/tricore: Add fadd test Alex Bennée
2021-05-17 16:10 ` [PULL 17/29] tests/tcg/tricore: Add fmul test Alex Bennée
2021-05-17 16:10 ` [PULL 18/29] tests/tcg/tricore: Add ftoi test Alex Bennée
2021-05-17 16:10 ` [PULL 19/29] tests/tcg/tricore: Add madd test Alex Bennée
2021-05-17 16:10 ` [PULL 20/29] tests/tcg/tricore: Add msub test Alex Bennée
2021-05-17 16:10 ` [PULL 21/29] tests/tcg/tricore: Add muls test Alex Bennée
2021-05-17 16:10 ` [PULL 22/29] tests/tcg/ppc64le: tests for brh/brw/brd Alex Bennée
2021-05-17 16:10 ` [PULL 23/29] tests/tcg: fix missing return Alex Bennée
2021-05-17 16:10 ` Alex Bennée [this message]
2021-05-17 16:10 ` [PULL 25/29] configure: use cc, not host_cc to set cross_cc for build arch Alex Bennée
2021-05-17 16:10 ` [PULL 26/29] plugins: Update qemu-plugins.symbols to match qemu-plugins.h Alex Bennée
2021-05-17 16:10 ` [PULL 27/29] plugins: Move all typedef and type declaration to the front of the qemu-plugin.h Alex Bennée
2021-05-17 16:10 ` [PULL 28/29] plugins/hotblocks: Properly freed the hash table values Alex Bennée
2021-05-17 16:10 ` [PULL 29/29] plugins/hotpages: " Alex Bennée
2021-05-17 17:09 ` [PULL 00/29] testing and plugin updates no-reply
2021-05-17 17:37 ` Alex Bennée

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210517161022.13984-25-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).