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