Сбой проверки компилятора CMake при настройке сборки LLVM для Android NDK - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь кросс-компилировать LLVM для Android NDK, но мой вызов CMake терпит неудачу. Я использую Ubuntu 16.04.

Я скачал исходный код LLVM (llvm версии 3.8) и Android NDK (загруженный на смонтированный диск, если это имеет значение), и я следовал инструкциям, приведенным в файле Android.cmake в [path to LLVM Источник] / CMake / платформы:

# Android.cmake

# Toolchain config for Android NDK.
# This is expected to be used with a standalone Android toolchain (see
# docs/STANDALONE-TOOLCHAIN.html in the NDK on how to get one).
#
# Usage:
# mkdir build; cd build
# cmake ..; make
# mkdir android; cd android
# cmake -DLLVM_ANDROID_TOOLCHAIN_DIR=/path/to/android/ndk \
#   -DCMAKE_TOOLCHAIN_FILE=../../cmake/platforms/Android.cmake ../..
# make <target>

SET(CMAKE_SYSTEM_NAME Linux)

IF(NOT CMAKE_C_COMPILER)
 SET(CMAKE_C_COMPILER /usr/bin/clang)
ENDIF()

IF(NOT CMAKE_CXX_COMPILER)
 SET(CMAKE_CXX_COMPILER /usr/bin/clang++)
ENDIF()

SET(ANDROID "1" CACHE STRING "ANDROID" FORCE)

SET(ANDROID_COMMON_FLAGS "-target arm-linux-androideabi --sysroot=${LLVM_ANDROID_TOOLCHAIN_DIR}/sysroot -B${LLVM_ANDROID_TOOLCHAIN_DIR}")
SET(CMAKE_C_FLAGS "${ANDROID_COMMON_FLAGS}" CACHE STRING "toolchain_cflags" FORCE)
SET(CMAKE_CXX_FLAGS "${ANDROID_COMMON_FLAGS}" CACHE STRING "toolchain_cxxflags" FORCE)
SET(CMAKE_EXE_LINKER_FLAGS "-pie" CACHE STRING "toolchain_exelinkflags" FORCE)

Но ошибка, которую я получаю при вызове CMake как cmake -DLLVM_ANDROID_TOOLCHAIN_DIR=/media/alvin/Windows8_OS/Android/Sdk/ndk-bundle -DCMAKE_TOOLCHAIN_FILE=../llvm-3.8.0.src/cmake/platforms/Android.cmake ../llvm-3.8.0.src:

CMake Error at /usr/share/cmake-3.5/Modules/CMakeTestCCompiler.cmake:61 (message):
  The C compiler "/usr/bin/clang" is not able to compile a simple test
  program.

  It fails with the following output:

   Change Dir: /media/alvin/Windows8_OS/LLVM/and-build/CMakeFiles/CMakeTmp



  Run Build Command:"/usr/bin/make" "cmTC_1e02b/fast"

  /usr/bin/make -f CMakeFiles/cmTC_1e02b.dir/build.make
  CMakeFiles/cmTC_1e02b.dir/build

  make[1]: Entering directory
  '/media/alvin/Windows8_OS/LLVM/and-build/CMakeFiles/CMakeTmp'

  Building C object CMakeFiles/cmTC_1e02b.dir/testCCompiler.c.o

  /usr/bin/clang -target arm-linux-androideabi
  --sysroot=/media/alvin/Windows8_OS/Android/Sdk/ndk-bundle/sysroot
  -B/media/alvin/Windows8_OS/Android/Sdk/ndk-bundle -o
  CMakeFiles/cmTC_1e02b.dir/testCCompiler.c.o -c
  /media/alvin/Windows8_OS/LLVM/and-build/CMakeFiles/CMakeTmp/testCCompiler.c


  Linking C executable cmTC_1e02b

  /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1e02b.dir/link.txt
  --verbose=1

  /usr/bin/clang -target arm-linux-androideabi
  --sysroot=/media/alvin/Windows8_OS/Android/Sdk/ndk-bundle/sysroot
  -B/media/alvin/Windows8_OS/Android/Sdk/ndk-bundle -pie
  CMakeFiles/cmTC_1e02b.dir/testCCompiler.c.o -o cmTC_1e02b -rdynamic

  /usr/bin/ld: unrecognised emulation mode: armelf_linux_eabi

  Supported emulations: elf_x86_64 elf32_x86_64 elf_i386 elf_iamcu i386linux
  elf_l1om elf_k1om i386pep i386pe

  clang: error: linker command failed with exit code 1 (use -v to see
  invocation)

  CMakeFiles/cmTC_1e02b.dir/build.make:97: recipe for target 'cmTC_1e02b'
  failed

  make[1]: *** [cmTC_1e02b] Error 1

  make[1]: Leaving directory
  '/media/alvin/Windows8_OS/LLVM/and-build/CMakeFiles/CMakeTmp'

  Makefile:126: recipe for target 'cmTC_1e02b/fast' failed

  make: *** [cmTC_1e02b/fast] Error 2





  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:54 (project)

Кажется, что при соединении возникает проблема: "clang: error: команда линкера завершилась неудачно с кодом выхода 1", но я понятия не имею, как это исправить. У кого-нибудь есть понимание, как решить эту проблему?

РЕДАКТИРОВАТЬ: я использую clang-3.8 и llvm source version 3.8, если это имеет значение.

...