dmlc-core
dmlc-core copied to clipboard
SSE Check Failing on android/aarch64
Hello!
The check for sse2 (lines below) is failing on android/aarch64 (specifically Termux on Android). It incorrectly detects that SSE2 is available (which is most certainly is not). I suspect the problem lies in using clang-9 vs gcc-9...
I tested on an RPi running linux (aarch64) with GCC-9 and it seemed to detect properly.
https://github.com/dmlc/dmlc-core/blob/ebcaa42d0b7271265e6a02ff468c6753a8fbecdb/CMakeLists.txt#L187-L190
Likewise, the Makefile makes an implicit assumption that one is running on Intel.
https://github.com/dmlc/dmlc-core/blob/ebcaa42d0b7271265e6a02ff468c6753a8fbecdb/Makefile#L20-L27
This is in stark contrast to rabit where at least in the Makefile it detects architectures (although, I would argue that the detection logic should really be the other way around: if the detected ARCH is Intel, then + -msse2; else: -march=native)
https://github.com/dmlc/rabit/blob/74bf00a5ab4594f1695a8ea960394ce89f4a44d0/Makefile#L20-L25
Are you cross-compiling to aarch64? The check_cxx_compiler_flag()
macro attempts to compile with -msse2
. If the host supports -msse2
but the target does not, we'd have an issue.