2015-07-30 2 views
0

Я пытаюсь перекрестно скомпилировать llvm/clang для Android arm.Перекрестный компилятор clang для Android arm

Я экспортировать CC/переменные CXX к рычагу-Linux-androideabi кросс-компиляторов, а затем из моей папки сборки я выполняю:

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

папка сборки находится в том же каталоге с исходным LLVM кодом ,

я получаю ошибку:

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

Я знаю, что есть что-то делать с г ++ multilib для arm-linux, но я не могу найти его в НДК.

Я также пробовал все шаги, которые перечислены here, и руководство найдено here, не повезло.

Любая помощь была бы принята с благодарностью. Благодаря!

EDIT: Теперь я использую следующую команду:

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'

EDIT2: Я удалил все относительные пути к абсолютным. И изменил компилятор с gcc на 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 ++ предупреждение: аргумент не используется во время компиляции: 'расслоением' /Users/Пасхалис/Android/компилированные инструменты/ССАГПЗ/бен /../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: фатальная ошибка: -f/- вспомогательное может не быть используется без -shared

+0

После нескольких дней борьбы с флагами и зависимостями кросс-компиляции мне удалось получить рабочий компилятор. Я немного изменил эту [работу] (https://github.com/termux/termux-packages) и создал clang, gcc и все их зависимости! – Paschalis

ответ

2

Самый простой способ построить лязг для андроид:

  • загрузить AOSPУстановка
  • строить команды из AOSP корня (source build/envsetup.sh)
  • кд на платформу/внешний/LLVM (see more info here)
  • команда запуска mm построить
  • кд в AOSP root/platform/ndk
  • запустить build/tools/build-llvm.py (see here)
  • окончательный пакет будет в AOSP/out папка
+0

Спасибо за предложение! Проблемы в основном вызваны тем, что некоторые библиотеки либо отсутствуют, либо урезаны на Android. Я 'envsetup', а затем запустил' make clang'. – Paschalis

+0

@Paschalis у вас есть успех – Arseniy

+0

нет. Ошибка сборки aosp. Но все равно спасибо! Однако я не приложил много усилий, поскольку я сосредоточился на «termux-пакетах». В прошлом я составлял части aosp, а не какой-либо внешний проект (успешно) еще! – Paschalis

Смежные вопросы