From: richael02 Date: Thu, 31 May 2018 08:11:00 +0000 (+0800) Subject: Add check for -mfpu=neon (#171) X-Git-Tag: 1.9.9-b1~627 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=013b23b4bb35b4672f9fabdbc4253befff595ac7;p=thirdparty%2Fzlib-ng.git Add check for -mfpu=neon (#171) 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 --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 60868dab3..863c9540c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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") diff --git a/configure b/configure index 2a10f49de..e57ab4cde 100755 --- 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