On 16 Mar 2015 at 17:41, Dmitry Moskalchuk wrote:
I hope I did not violated rules of this mailing list because my message is directly related to the Boost development. We just want to make both CrystaX NDK and Boost better.
Not to diminish the fine work that CrystaX does, but I want to emphasise to the community that the CrystaX NDK != the Android NDK. Configuring build support specific to the Android NDK is straightforward if not well documented: if necessary to your Jamfile you add config for target-os=android as this is a cross compilation scenario. Similarly, when building Boost to target Android you pass target-os=android to b2. I'll also add some of my own experiences as I formalised the port of Thread to Android, plus AFIO v1.3 is now regularly CI tested on Android. Firstly, the STL default configured by the Android NDK is woefully defective, however the good news is that the recent NDKs can be asked to use libc++ and that's a very recent edition of libc++, so you get excellent C++ 14 STL support. Secondly, the NDK lets you choose between GCC 4.6, 4.8 and clang 3.5, the latter two obviously have much superior C++ 11 support, but the clang port in particular is a bit ropey. Thirdly, Boost when compiled with -std=c++11 or later with the wrong combination of STL headers on the NDK has weird outcomes - basically build failures. AFIO fails to build on the NDK if any Boost code comes into play, yet compiles perfectly when built standalone, however Thread is fine being built in C++03, C++11 and C++14 builds. Go figure I guess. My suggestion to the community is to try and target as a minimum 100% green for Android 5.0 only with the libc++ STL only. Maintainers may choose to exceed that of course. If you target that one single target and keep it all green, that makes the life of CrystaX much easier because effectively speaking what he's done is port newer STLs etc to the older API versions, so really all you need to maintain is the occasional #ifdef __ANDROID__ to work around Android's weird libc and library config and in theory at least, it ought to be good from there. I do personally think being asked to keep build and unit tests all green for Androids before 5.0 when the C++ toolset is crap is asking too much of Boost. There are at least twenty different API versions, all of which can be built using multiple NDK versions and configs. Choosing one single sane API version (5.0 minimum) and toolset (libc++ STL only) helps encourage Google to ship non-braindamaged C++ tooling set to default in their NDK, which is long overdue. Any my thanks to CrystaX for all their effort in their NDK fork. It's hugely appreciated by anyone needing to deal with getting C++ working on Android, believe me. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/