]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Add check for -mfpu=neon (#171)
authorrichael02 <richael.zhuang@arm.com>
Thu, 31 May 2018 08:11:00 +0000 (16:11 +0800)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Thu, 31 May 2018 08:11:00 +0000 (10:11 +0200)
For 64bit armv8-a there's no need to use "-mfpu=neon" to enable NEON.
But for 32bit system "-mfpu=neon" is required.

This patch adds the detection for -mfpu=neon flag.

Signed-off-by: Richael Zhuang richael.zhuang@arm.com
CMakeLists.txt
configure

index 60868dab3e6a69a11057ce8591ec98ce1be14be3..863c9540cb8b59699fc9df07b1e9e35d964adf15 100644 (file)
@@ -354,6 +354,16 @@ else()
     endif()
 endif()
 
+#Check whether -mfpu=neon is available
+set(CMAKE_REQUIRED_FLAGS "-mfpu=neon")
+check_c_source_compiles(
+    "int main()
+    {
+      return 0;
+    }"
+    MFPU_NEON_AVAILABLE FAIL_REGEX "not supported")
+set(CMAKE_REQUIRED_FLAGS)
+
 #
 # Enable deflate_medium at level 4-6
 #
@@ -411,7 +421,9 @@ if(WITH_OPTIM)
             add_feature_info(ACLE_CRC 1 "Support CRC hash generation using the ACLE instruction set, using \"${ACLEFLAG}\"")
         endif()
         if(WITH_NEON)
-            set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NEONFLAG}")
+            if(MFPU_NEON_AVAILABLE)
+                set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NEONFLAG}")
+            endif()
             add_definitions("-DARM_NEON_ADLER32")
             if(MSVC)
                 add_definitions("-D__ARM_NEON__=1")
index 2a10f49de912e981010ab4759ced815a2b1fae5a..e57ab4cde2e28bb08c9a6624c59d1556cb5414e8 100755 (executable)
--- a/configure
+++ b/configure
@@ -832,6 +832,18 @@ fi
 
 fi
 
+#Check whether -mfpu=neon is available
+cat > $test.c << EOF
+int main() { return 0; }
+EOF
+if try $CC -c $CFLAGS -mfpu=neon $test.c; then
+    MFPU_NEON_AVAILABLE=1
+    echo "Check whether -mfpu=neon is available ... Yes." | tee -a configure.log
+else
+    MFPU_NEON_AVAILABLE=0
+    echo "Check whether -mfpu=neon is available ... No." | tee -a configure.log
+fi
+
 ARCHDIR='arch/generic'
 ARCH_STATIC_OBJS=''
 ARCH_SHARED_OBJS=''
@@ -992,8 +1004,16 @@ case "${ARCH}" in
                 fi
 
                 if test $buildneon -eq 1; then
-                    CFLAGS="${CFLAGS} ${floatabi} -DARM_NEON_ADLER32"
-                    SFLAGS="${SFLAGS} ${floatabi} -DARM_NEON_ADLER32"
+                    CFLAGS="${CFLAGS} ${floatabi}"
+                    SFLAGS="${SFLAGS} ${floatabi}"
+
+                    if test $MFPU_NEON_AVAILABLE -eq 1;then
+                        CFLAGS="${CFLAGS} -mfpu=neon"
+                        SFLAGS="${SFLAGS} -mfpu=neon"
+                    fi
+
+                    CFLAGS="${CFLAGS} -DARM_NEON_ADLER32"
+                    SFLAGS="${SFLAGS} -DARM_NEON_ADLER32"
 
                     ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} adler32_neon.o"
                     ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} adler32_neon.lo"
@@ -1007,8 +1027,17 @@ case "${ARCH}" in
                 ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} crc32_acle.lo insert_string_acle.lo"
 
                 if test $buildneon -eq 1; then
-                    CFLAGS="${CFLAGS} ${floatabi} -DARM_NEON_ADLER32"
-                    SFLAGS="${SFLAGS} ${floatabi} -DARM_NEON_ADLER32"
+                    CFLAGS="${CFLAGS} ${floatabi}"
+                    SFLAGS="${SFLAGS} ${floatabi}"
+
+                    if test $MFPU_NEON_AVAILABLE -eq 1;then
+                        CFLAGS="${CFLAGS} -mfpu=neon"
+                        SFLAGS="${SFLAGS} -mfpu=neon"
+                    fi
+
+                    CFLAGS="${CFLAGS} -DARM_NEON_ADLER32"
+                    SFLAGS="${SFLAGS} -DARM_NEON_ADLER32"
+
                     ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} adler32_neon.o"
                     ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} adler32_neon.lo"
                 fi