Android arm 的交叉编译 clang

Cross compile clang for Android arm

我正在尝试为 Android arm 交叉编译 llvm/clang。

我将 CC/CXX 变量导出到 arm-linux-androideabi 交叉编译器,然后从我的构建文件夹中执行:

cmake -G "Unix Makefiles" --target arm-linux-androideabi --sysroot=$NDK/platforms/android-21/arch-arm/ ../llvm 

build文件夹与llvm源代码在同一目录下。

我收到错误:

rm-linux-androideabi-g++: error: unrecognized command line option '-m32'

我知道,它与 g++ multilib for arm-linux 有关,但我在 NDK 中找不到它。

我也尝试了列出的所有步骤 here, and the guide found here,但没有成功。

如有任何帮助,我们将不胜感激。谢谢!

编辑: 现在我正在使用以下命令:

cmake -G "Unix Makefiles" --prefix=../outarm --target arm-linux-androideabi --sysroot=$NDK/platforms/android-21/arch-arm/ -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PIC=False -DCMAKE_CROSSCOMPILING=True -DLLVM_TABLEGEN=../osxbuild/bin/llvm-tblgen -DCLANG_TABLEGEN=../osxbuild/bin/clang-tblgen -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM ../llvm

编译现在开始,但在 14% 处停止并出现错误:

arm-linux-androideabi-g++: error: unrecognized command line option '-bundle'

编辑2: 我删除了所有相对路径到绝对路径。 并将编译器从 gcc 更改为 clang。 Clang 识别 -bundle,但不使用它。现在带有错误的完整命令是: 命令:

cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$HOME/Desktop/clang-compilation/outarm -DCMAKE_BUILD_TYPE=Release -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-androideabi --sysroot=$NDK/platforms/android-21/arch-arm/ -DLLVM_ENABLE_PIC=False -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DLLVM_TABLEGEN=$HOME/Desktop/clang-compilation/osxbuild/bin/llvm-tblgen -DCLANG_TABLEGEN=$HOME/Desktop/clang-compilation/osxbuild/bin/clang-tblgen -DCMAKE_CXX_FLAGS='-I$HOME/android/toolchains/gcc/include/c++/4.9/arm-linux-androideabi -I$HOME/android/toolchains/gcc/include/' $HOME/Desktop/clang-compilation/llvm

make -j12

错误信息: clang36++: 警告:编译期间未使用的参数:'-bundle' /Users/paschalis/android/toolchains/gcc/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld:致命错误:-f/--auxiliary 不能在没有 -shared[ 的情况下使用=20=]

为 android 构建 clang 的最简单方法是:

  • 下载 AOSP as described here
  • 从 AOSP 根 (source build/envsetup.sh) 安装构建命令
  • cd 到 platform/external/llvm (see more info here)
  • 运行 mm 命令构建
  • cd 到 AOSP root/platform/ndk
  • 运行 build/tools/build-llvm.py (see here)
  • 最终包将在 AOSP/out 文件夹中