From 1ae951ebfc77a205bcc92c18f91b84b2f131750a Mon Sep 17 00:00:00 2001 From: Jason Lokerson Date: Wed, 6 Jan 2016 08:47:36 -0800 Subject: [PATCH] Fix Android toolchain file This got broken with the new Android SDK update, fix this. --- toolchain-android.cmake | 46 ++++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/toolchain-android.cmake b/toolchain-android.cmake index ba4e1ad03..400701287 100644 --- a/toolchain-android.cmake +++ b/toolchain-android.cmake @@ -1,22 +1,44 @@ -if("$ENV{ARMv8}") # GCC 4.9 +if(BUILD_64_BIT) # ARMv8 with GCC 4.9 set(BUILD_ANDROID64 1) - set(C_COMPILER aarch64-linux-android) - set(CXX_COMPILER aarch64-linux-android) - set(IDENTIFIER -4.9-aarch64) -else() # GCC 4.8 - set(BUILD_ANDROID 1) + set(ANDROID_NDK_TOOL_PREFIX aarch64-linux-android) + set(_ndk_suffix -4.9-aarch64) +else() # GCC 4.8 set(ARM_TARGET "armeabi-v7a") - set(C_COMPILER arm-linux-androideabi) - set(CXX_COMPILER arm-linux-androideabi) + set(ANDROID_NDK_TOOL_PREFIX arm-linux-androideabi) endif() +set(BUILD_ANDROID 1) set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_SYSTEM_VERSION 1) set(BUILD_ARM 1) -set(LOCAL_ARM_NEON "true") -set(ANDROID_COMMON_FLAGS " --sysroot=${LLVM_ANDROID_TOOLCHAIN_DIR}${IDENTIFIER}/sysroot -B${LLVM_ANDROID_TOOLCHAIN_DIR}${IDENTIFIER} ") -set(CMAKE_C_COMPILER ${LLVM_ANDROID_TOOLCHAIN_DIR}${IDENTIFIER}/bin/${C_COMPILER}-gcc) -set(CMAKE_CXX_COMPILER ${LLVM_ANDROID_TOOLCHAIN_DIR}${IDENTIFIER}/bin/${CXX_COMPILER}-g++) + +if(MSYS) + set(_exe_suffix .exe) +endif() + +#For reasons beyond my comprehension, this file is parsed multiple times +#and in some of them, cache variables are not preserved so we have to store +#this in an environmental variable... +if(NOT LLVM_ANDROID_TOOLCHAIN_DIR) + set(LLVM_ANDROID_TOOLCHAIN_DIR $ENV{LLVM_ANDROID_TOOLCHAIN_DIR}) +else() + set(ENV{LLVM_ANDROID_TOOLCHAIN_DIR} ${LLVM_ANDROID_TOOLCHAIN_DIR} CACHE PATH) +endif() + +find_path(ANDROID_NDK_ROOT bin/${ANDROID_NDK_TOOL_PREFIX}-gcc${_exe_suffix} PATHS + ${LLVM_ANDROID_TOOLCHAIN_DIR}${_ndk_suffix} #legacy variable + /opt/android-standalone-toolchain${_ndk_suffix} + ${LLVM_ANDROID_TOOLCHAIN_DIR} + /opt/android-standalone-toolchain +) +if(NOT ANDROID_NDK_ROOT) + message(FATAL_ERROR "ANDROID_NDK_ROOT could not be located. Have you installed the NDK?") +endif() + +set(ANDROID_COMMON_FLAGS " --sysroot=${ANDROID_NDK_ROOT}/sysroot -B${ANDROID_NDK_ROOT} ") +set(CMAKE_C_COMPILER ${ANDROID_NDK_ROOT}/bin/${ANDROID_NDK_TOOL_PREFIX}-gcc${_exe_suffix} CACHE FILEPATH "C Compiler" FORCE) +set(CMAKE_CXX_COMPILER ${ANDROID_NDK_ROOT}/bin/${ANDROID_NDK_TOOL_PREFIX}-g++${_exe_suffix} CACHE FILEPATH "C++ Compiler" FORCE) +set(ANDROID_STRIP_COMMAND ${ANDROID_NDK_ROOT}/bin/${ANDROID_NDK_TOOL_PREFIX}-strip) 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_LINK_FLAGS "${ANDROID_COMMON_FLAGS}" CACHE STRING "toolchain_linkflags" FORCE)