Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NDK r11 does not work due to toolchain restructure #81

Open
rcdailey opened this issue Mar 11, 2016 · 25 comments
Open

NDK r11 does not work due to toolchain restructure #81

rcdailey opened this issue Mar 11, 2016 · 25 comments

Comments

@rcdailey
Copy link

They have changed the way LLVM is structured in NDK r11. The llvm directory is no longer prefixed with a version number such as llvm-3.5. It's just llvm now. There is only 1 version of Clang (3.8).

As such, it does not detect the clang tooling as available option for ANDROID_TOOLCHAIN_NAME.

@DoDoENT
Copy link

DoDoENT commented Mar 20, 2016

I've managed to workaround this problem by creating symlink named llvm-3.8 that points to llvm folder and from r10e I've copied folders aarch64-linux-android-clang3.5 and others, renamed them to have suffix clang3.8 and modified their setup.mk to contain only following line:

TOOLCHAIN_VERSION := 4.9

After this I was able to set ANDROID_TOOLCHAIN_NAME variable to aarch64-linux-android-clang3.8 and so on. This worked for me - I was compiling OpenCV 3.0 with clang and libc++ using NDK r11b.

@chenxiaolong
Copy link

chenxiaolong@6d8525b#commitcomment-16919805 :)

Just pass -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang3.6 or the equivalent toolchain for other ABIs.

@osfans
Copy link

osfans commented Apr 1, 2016

@chenxiaolong

-DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-clang3.6 has errors:

arm-linux-androideabi-g++: error: armv5te-none-linux-androideabi: No such file or directory
arm-linux-androideabi-g++: error: unrecognized command line option '-target'
arm-linux-androideabi-g++: error: unrecognized command line option '-Qunused-arguments'
arm-linux-androideabi-g++: error: unrecognized command line option '-Xclang'
arm-linux-androideabi-g++: error: unrecognized command line option '-mnoexecstack'

@chenxiaolong
Copy link

@osfans You might have to remove the build directory and then rerun CMake. The toolchain file can't seem to change the compiler after the build has already been configured.

@osfans
Copy link

osfans commented Apr 1, 2016

@chenxiaolong it works! Thanks!

When -DANDROID_STL=c++_static, there's error:

/usr/local/google/buildbot/out_dirs/aosp-ndk-r11-release/build/tmp/build-5996/build-libc++/ndk/sources/cxx-stl/llvm-libc++/../llvm-libc++abi/libcxxabi/src/cxa_handlers.cpp:112: error: undefined reference to '__atomic_exchange_4'
/usr/local/google/buildbot/out_dirs/aosp-ndk-r11-release/build/tmp/build-5996/build-libc++/ndk/sources/cxx-stl/llvm-libc++/../llvm-libc++abi/libcxxabi/src/cxa_default_handlers.cpp:106: error: undefined reference to '__atomic_exchange_4'
/usr/local/google/buildbot/out_dirs/aosp-ndk-r11-release/build/tmp/build-5996/build-libc++/ndk/sources/cxx-stl/llvm-libc++/../llvm-libc++abi/libcxxabi/src/cxa_default_handlers.cpp:117: error: undefined reference to '__atomic_exchange_4'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

ndk-build has no error when link c++_static.

@chenxiaolong
Copy link

@osfans You're welcome!

Do you have a simple test case that causes the error? I created a simple project and cannot reproduce it: https://github.com/chenxiaolong/ndk_cmake_test I tried armeabi, armeabi-v7a, arm64-v8a, x86, and x86_64 (See test.sh)

@osfans
Copy link

osfans commented Apr 1, 2016

@chenxiaolong I create a PR in your repo. It seems I need pass LOCAL_LDLIBS := -latomic somewhere to android-cmake.

@chenxiaolong
Copy link

@osfans It looks like that's because CMake is linking the static library in the wrong order. CMake is passing the -latomic parameter before the /opt/android-ndk/.../libc++_static.a parameter to clang++.

This should fix the issue: https://gist.github.com/chenxiaolong/eae919138c5e56b16955d72eaa37041e
I was able to build trime successfully :) https://gist.github.com/chenxiaolong/0df1a2c976dc634ddbe19bcac4624ad3

@osfans
Copy link

osfans commented Apr 5, 2016

@chenxiaolong It works. Thanks! I include your fork of android-cmake in trime.

@osfans
Copy link

osfans commented Jun 29, 2016

@chenxiaolong I git pull your r12 commit. I can't make trime with r12 again.
And ndk-build works.

        -DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-clang \
        -DANDROID_ABI=armeabi \
        -DANDROID_STL=c++_static \
        -DANDROID_NATIVE_API_LEVEL=9

It seems that I cannot choose clang.

@rcdailey
Copy link
Author

Looks like r12 restructured things again. Why is google doing this nonsense?

@rpavlik
Copy link
Contributor

rpavlik commented Jun 30, 2016

I have at least a parser for the release property file in the OSVR fork of this repo

@chenxiaolong
Copy link

@osfans I made one more change related to libc++. I am able to successfully build trime now with:

        -DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-clang \

Commit: chenxiaolong@2522915

@osfans
Copy link

osfans commented Jun 30, 2016

@chenxiaolong Thanks. It works.

@rcdailey
Copy link
Author

@chenxiaolong I really appreciate your efforts in maintaining the android cmake scripts. The unfortunate issue I see is that we have a lot of smart people investing their free time maintaining these scripts, but they all do it in isolation and the same set of issues have been fixed over and over, but in different ways.

I think it's worth it to start getting people onto 1 repository and pooling fixes together. Would it be unreasonable to pool your efforts into @rpavlik's fork?

@osfans
Copy link

osfans commented Jun 30, 2016

Where's rpavlik's fork? I can't find it.

@rpavlik
Copy link
Contributor

rpavlik commented Jul 1, 2016

The most updated, though not tidiest, branch is here: https://github.com/OSVR/android-cmake/tree/libcxx (under dev, so I haven't pulled things out into pull-requestable-branches yet). I tried to incorporate all the pull requests that I could find that made sense, plus additional changes as needed.

I actually started working in parallel on a more minimal, modern, semi-from-scratch toolchain file that works with, rather than against, current CMake practices, in alt.android.toolchain.cmake in the same directory - it contains some pieces based on the original here (or the modifications I've made to it) but it's simpler and hopefully less fragile. It's incomplete, though enough to build one sample library (jsoncpp) against the NDK r12.

Note also that the folks behind the CrystaX NDK forked some version of this toolchain script and made their own changes - https://github.com/crystax/android-platform-ndk/blob/master/cmake/toolchain.cmake - which I haven't fully ported over into my fork, and vice versa (there are changes that I've incorporated that they don't have). Ideally, I think, that would be the way to go: instead of having to do so much detection/guessing, have the toolchain description be shipped with the NDK, but it appears that might be a dream unless you can use (a currently unreleased version of) the CrystaX NDK.

@DoDoENT
Copy link

DoDoENT commented Jul 1, 2016

A colleague of mine created his own android toolchain specifically designed for r11. You can try it our here

@osfans
Copy link

osfans commented Oct 10, 2016

@chenxiaolong r13 is out in Archlinux, and trime build breaks again. Will you support it?

trime/jni/OpenCC/src/Common.hpp:26:10: fatal error: 
      'algorithm' file not found
#include <algorithm>
         ^
1 error generated.

@rcdailey
Copy link
Author

r13 comes with its own toolchain file. No need to use this anymore.

On Sun, Oct 9, 2016, 8:37 PM osfans [email protected] wrote:

@chenxiaolong https://github.com/chenxiaolong r13 is out and build
breaks again. Will you support it?

trime/jni/OpenCC/src/Common.hpp:26:10: fatal error:
'algorithm' file not found
#include
^
1 error generated.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#81 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABr6dmsLHG-zrWeY07vp8YDTGH0KTNfBks5qyZbJgaJpZM4HvGH0
.

@osfans
Copy link

osfans commented Oct 10, 2016

Yes, it works!
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake

@osfans
Copy link

osfans commented Oct 11, 2016

@rcdailey
I have to -DLIBRARY_OUTPUT_PATH=../libs/armeabi/ to install jni libs.
Any other solutions?

@rcdailey
Copy link
Author

I use a custom command in cmake to copy my binary to that directory so ant
can find it.

On Tue, Oct 11, 2016, 12:04 AM osfans [email protected] wrote:

@rcdailey https://github.com/rcdailey
I have to -DLIBRARY_OUTPUT_PATH=../libs/armeabi/ to install jni libs.
Any other solutions?


You are receiving this because you were mentioned.

Reply to this email directly, view it on GitHub
#81 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABr6dvO6scUzGp2GFeJmO1PwnrIjknKoks5qyxjkgaJpZM4HvGH0
.

@wo4li2wang
Copy link

@chenxiaolong It works ,3Q

@adytzs
Copy link

adytzs commented Feb 5, 2018

@chenxiaolong , I am a newbie in cmake, Can you explain how to "remove the build directory". I got this error

arm-linux-androideabi-gcc: error: armv7-none-linux-androideabi: No such file or directory
arm-linux-androideabi-gcc: error: unrecognized command line option '-target'
arm-linux-androideabi-gcc: error: unrecognized command line option '-fno-integrated-as'
arm-linux-androideabi-gcc: error: unrecognized command line option '-fno-limit-debug-info'

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants