The triplet will change from armv7a-hardfloat-linux-gnueabi to
armv7a-unknown-linux-gnueabihf or similar. The function already
treated the latter as hardfloat but ambiguous triplets such as
arm-unknown-linux-gnueabi will change from hardfloat to softfloat in
line with most everyone else. However, we will now check existing
toolchains to avoid breaking existing systems, if possible.
---
 eclass/toolchain-funcs.eclass | 39 ++++++++++++++++++++++++++++-------
 1 file changed, 32 insertions(+), 7 deletions(-)

diff --git a/eclass/toolchain-funcs.eclass b/eclass/toolchain-funcs.eclass
index cea8949b45d7..f484fffc2664 100644
--- a/eclass/toolchain-funcs.eclass
+++ b/eclass/toolchain-funcs.eclass
@@ -204,13 +204,38 @@ tc-is-softfloat() {
                bfin*|h8300*)
                        echo "only" ;;
                *)
-                       if [[ ${CTARGET//_/-} == *-softfloat-* ]] ; then
-                               echo "yes"
-                       elif [[ ${CTARGET//_/-} == *-softfp-* ]] ; then
-                               echo "softfp"
-                       else
-                               echo "no"
-                       fi
+                       case ${CTARGET//_/-} in
+                               *-softfloat-*)
+                                       echo "yes" ;;
+                               *-softfp-*)
+                                       echo "softfp" ;;
+                               arm*)
+                                       # arm-unknown-linux-gnueabi is 
ambiguous. We used to
+                                       # treat it as hardfloat but we now 
treat it as
+                                       # softfloat like most everyone else. 
However, we
+                                       # check existing toolchains to avoid 
breaking
+                                       # existing systems, if possible.
+                                       if type -P ${CTARGET}-cpp >/dev/null; 
then
+                                               if ${CTARGET}-cpp -E - <<< 
__ARM_PCS_VFP 2>/dev/null | grep -q __ARM_PCS_VFP; then
+                                                       # Confusingly 
__SOFTFP__ is defined only
+                                                       # when -mfloat-abi is 
soft, not softfp.
+                                                       if ${CTARGET}-cpp -E - 
<<< __SOFTFP__ 2>/dev/null | grep -q __SOFTFP__; then
+                                                               echo "softfp"
+                                                       else
+                                                               echo "yes"
+                                                       fi
+                                               else
+                                                       echo "no"
+                                               fi
+                                       elif [[ ${CTARGET} == *-hardfloat-* || 
${CTARGET} == *hf ]]; then
+                                               echo "no"
+                                       else
+                                               echo "yes"
+                                       fi
+                                       ;;
+                               *)
+                                       echo "no" ;;
+                       esac
                        ;;
        esac
 }
-- 
2.17.0


Reply via email to