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")
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]*)