ACE+TAO: 6.3.2
OpenDDS: 3.11
Host compiler: GCC 5.4
As I cross-compile OpenDDS for Android, I'm looking at ACE_wrappers/build/arm/include/makeinclude/platform_android.GNU which appears to do the cross-compiling for ACE, and it appears to only build for ARM-v7a.
The reason why I say this is that I'm getting the following error when compiling the auto-generated files in my application ((which come from using opendds_idl on the *.idl), and after a bunch of "In file included from" lines, ends up with ...
[exec] /home/me/tools/crystax-ndk/sources/cxx-stl/gnu-libstdc++/5/include/limits:1601:7: internal compiler error: Illegal instruction
[exec] max() _GLIBCXX_USE_NOEXCEPT { return __FLT_MAX__; }
[exec] ^
I've seen something like this before when I've compiled code which had some wrong flags for the CPU architecture. So my thinking is that maybe there's some incompatible toolchain settings on GCC which I use on my app and those settings used by ACE+TAO/OpenDDS? The CROSS_COMPILE variable in platform_android.GNU is arm-linux-androideabi- ... which as far as I know is a 32 bit toolchain, i.e., arm-v7a and I see no v8a references. And yet in my app I'm using aarch64-linux-android-5. Should these be compatible? Can the tool chain be changed?
What I'd like to do is build ACE+TAO/OpenDDS/my-application for the target architecture and ABI ... arm64: arm64-v8a and use the NDK toolchain and target ABI ... aarch64-linux-android-5: arm64-v8a.
Thoughts?
This should be possible, but probably configuration files are outdated. First, update to ACE+TAO 6.3.4 which is the latest. Second, check the file include/makeinclude/platform_android.GNU and see if your target is there. It could be that some small updates are necessary, if so, please open a pull request at https://github.com/DOCGroup/ACE_TAO with the necessary changes. Search for arm-v7a and look if at that place a new check for arm-v8a is necessary.