We're removing support for the armeabi-v7a-hard ABI. Anyone targeting this ABI should target armeabi-v7a instead.
armeabi-v7a-hard is not a real ABI. No devices are built with this. Hard float code generation is already used in the armeabi-v7a ABI. The “hard float” variant only changes the function call ABI. That is, the floating point registers are used to pass floating point arguments rather than the integer registers.
This ABI should only be beneficial if the workload consists of many math function calls, the math function is cheap enough that the call itself is expensive, and it's not being inlined. The bug here is that the call is not being inlined.
There is a cost to keeping this functionality. The way this “ABI” works is by having an
__attribute__((pcs("aapcs"))) on every function that is part of the Android ABI and has floating point parameters (anything that is in the system libraries or zygote). If we miss one (and we do, often), the function will not be called correctly.
I should note that the GCC docs explicitly state that linking -mfloat-abi=softfp and -mfloat-abi=hard is invalid: https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
Note that the hard-float and soft-float ABIs are not link-compatible; you must compile your entire program with the same ABI, and link with a compatible set of libraries.