diff options
author | Nathan Moinvaziri <nathan@nathanm.com> | 2021-03-29 19:59:06 -0700 |
---|---|---|
committer | Hans Kristian Rosbach <hk-github@circlestorm.org> | 2021-04-09 17:34:34 +0200 |
commit | b82d3497a5afc46dec3c5d07e4b163b169f251d7 (patch) | |
tree | 15db008f60b0fc6bbfcd7fb5df9908f2008e7891 | |
parent | cdaa3c4eea9af074fa871a1d2523997e36f052a3 (diff) |
Changed auto-detection of float-abi support by removing triplet check in favor of compilation and link test. #911
-rw-r--r-- | CMakeLists.txt | 22 | ||||
-rwxr-xr-x | configure | 30 |
2 files changed, 35 insertions, 17 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 88a57d8..2376cfc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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") @@ -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]*) |