]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Changed auto-detection of float-abi support by removing triplet check in favor of...
authorNathan Moinvaziri <nathan@nathanm.com>
Tue, 30 Mar 2021 02:59:06 +0000 (19:59 -0700)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Fri, 9 Apr 2021 15:34:34 +0000 (17:34 +0200)
CMakeLists.txt
configure

index 88a57d89d00f7663370a8e7331004fa6da1783ed..2376cfc87e235659113e60b83b7828cbf29afa7b 100644 (file)
@@ -211,16 +211,22 @@ else()
         if(__GNUC__)
             if(BASEARCH_ARM_FOUND)
                 if("${ARCH}" MATCHES "arm" AND NOT CMAKE_C_FLAGS MATCHES "-mfloat-abi")
-                    # Check support for ARM floating point ABI
-                    execute_process(COMMAND ${CMAKE_C_COMPILER} "-dumpmachine"
-                                    OUTPUT_VARIABLE GCC_MACHINE)
-                    if("${GCC_MACHINE}" MATCHES "gnueabihf")
-                        set(FLOATABI "-mfloat-abi=hard")
-                    elseif("${GCC_MACHINE}" MATCHES ".*gnueabi")
+                    # Auto-detect support for ARM floating point ABI
+                    check_c_compiler_flag(-mfloat-abi=softfp HAVE_FLOATABI_SOFTFP)
+                    if(HAVE_FLOATABI_SOFTFP)
                         set(FLOATABI "-mfloat-abi=softfp")
+                    else()
+                        check_c_compiler_flag(-mfloat-abi=hard HAVE_FLOATABI_HARD)
+                        if(HAVE_FLOATABI_HARD)
+                            set(FLOATABI "-mfloat-abi=hard")
+                        endif()
+                    endif()
+                    if(FLOATABI)
+                        message(STATUS "ARM floating point arch: ${FLOATABI}")
+                        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLOATABI}")
+                    else()
+                        message(STATUS "ARM floating point arch not auto-detected")
                     endif()
-                    message(STATUS "ARM floating point arch: ${FLOATABI}")
-                    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLOATABI}")
                 endif()
                 # NEON
                 if("${ARCH}" MATCHES "aarch64")
index 6cc3d5ef2e422d12e3884ad91c997f35ca175549..d1a44db50b7369fb7ae2427274faae57998a6ef7 100755 (executable)
--- a/configure
+++ b/configure
@@ -1252,15 +1252,27 @@ case "${ARCH}" in
             ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} armfeature.lo"
         fi
 
-        GCC_MACHINE=$(${CC} -dumpmachine)
-        case "${GCC_MACHINE}" in
-            *gnueabihf)
-                floatabi="-mfloat-abi=hard" ;;
-            *gnueabi)
-                floatabi="-mfloat-abi=softfp" ;;
-        esac
-        CFLAGS="${CFLAGS} ${floatabi}"
-        SFLAGS="${SFLAGS} ${floatabi}"
+        cat > $test.c << EOF
+int main() { return 0; }
+EOF
+        if try $CC -w -c $SFLAGS $test.c -mfloat-abi=softfp &&
+           try $LDSHARED $LDSHAREDFLAGS $LDFLAGS -o $test$shared_ext $test.o $LDSHAREDLIBC; then
+            floatabi="-mfloat-abi=softfp"
+        else
+            if try $CC -w -c $SFLAGS $test.c -mfloat-abi=hard &&
+               try $LDSHARED $LDSHAREDFLAGS $LDFLAGS -o $test$shared_ext $test.o $LDSHAREDLIBC; then
+                floatabi="-mfloat-abi=hard"
+            fi
+        fi
+
+        if [ -z $floatabi ]; then
+            echo "ARM floating point arch not auto-detected" | tee -a configure.log
+        else
+            echo "ARM floating point arch: ${floatabi}" | tee -a configure.log
+
+            CFLAGS="${CFLAGS} ${floatabi}"
+            SFLAGS="${SFLAGS} ${floatabi}"
+        fi
 
         case "${ARCH}" in
             armv[345]*)