From a411819d5a4d2c8351b7a6a151d542a2865c3979 Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Thu, 24 Jan 2019 04:11:13 +0100 Subject: [PATCH] android: update toolchain for docker images --- android/build.gradle | 2 +- cmake/android.toolchain | 83 ++++++++++++++--------------------------- 2 files changed, 28 insertions(+), 57 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index c2ff9d8..623ef9a 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -10,8 +10,8 @@ buildscript { allprojects { repositories { + flatDir { dirs 'libs' } google() jcenter() - flatDir { dirs 'libs' } } } diff --git a/cmake/android.toolchain b/cmake/android.toolchain index d266db0..b0e24b6 100644 --- a/cmake/android.toolchain +++ b/cmake/android.toolchain @@ -1,4 +1,3 @@ - SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_VERSION 1) @@ -13,20 +12,20 @@ if(NOT EXISTS "${ANDROID_ALLEGRO_ROOT}") message( FATAL_ERROR "Invalid ANDROID_ALLEGRO_ROOT! Point it to the build directory of Allegro 5 (>=5.2.2) for Android.") endif() -set(ANDROID_NDK_TOOLCHAIN_ROOT "$ENV{ANDROID_NDK_TOOLCHAIN_ROOT}" CACHE PATH "Path to the Android NDK Standalone Toolchain" ) +set(ANDROID_TOOLCHAIN "$ENV{ANDROID_TOOLCHAIN}" CACHE PATH "Path to the Android NDK Standalone Toolchain" ) -message( STATUS "Selected Android toolchain: ${ANDROID_NDK_TOOLCHAIN_ROOT}" ) -if(NOT EXISTS ${ANDROID_NDK_TOOLCHAIN_ROOT}) - set(ANDROID_NDK_TOOLCHAIN_ROOT "/opt/android-toolchain" CACHE PATH "Path to the Android NDK Standalone Toolchain" ) - message( STATUS "Using default path for toolchain ${ANDROID_NDK_TOOLCHAIN_ROOT}") - message( STATUS "If you prefer to use a different location, please set the ANDROID_NDK_TOOLCHAIN_ROOT cmake variable.") +message( STATUS "Selected Android toolchain: ${ANDROID_TOOLCHAIN}" ) +if(NOT EXISTS ${ANDROID_TOOLCHAIN}) + set(ANDROID_TOOLCHAIN "/opt/android-toolchain" CACHE PATH "Path to the Android NDK Standalone Toolchain" ) + message( STATUS "Using default path for toolchain ${ANDROID_TOOLCHAIN}") + message( STATUS "If you prefer to use a different location, please set the ANDROID_TOOLCHAIN cmake variable.") endif() -if(NOT EXISTS ${ANDROID_NDK_TOOLCHAIN_ROOT}) +if(NOT EXISTS ${ANDROID_TOOLCHAIN}) message(FATAL_ERROR - "${ANDROID_NDK_TOOLCHAIN_ROOT} does not exist! + "${ANDROID_TOOLCHAIN} does not exist! You should either set an environment variable: - export ANDROID_NDK_TOOLCHAIN_ROOT=~/my-toolchain + export ANDROID_TOOLCHAIN=~/my-toolchain or put the toolchain in the default path: sudo ln -s ~/android-toolchain /opt/android-toolchain ") @@ -73,24 +72,24 @@ endif() # specify the cross compiler SET(CMAKE_C_COMPILER - ${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_ARCH}-clang${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "C compiler" FORCE) + ${ANDROID_TOOLCHAIN}/bin/${ANDROID_ARCH}-clang${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "C compiler" FORCE) SET(CMAKE_CXX_COMPILER - ${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_ARCH}-clang++${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "C++ compiler" FORCE) + ${ANDROID_TOOLCHAIN}/bin/${ANDROID_ARCH}-clang++${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "C++ compiler" FORCE) #there may be a way to make cmake deduce these TODO deduce the rest of the tools set(CMAKE_AR - ${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_ARCH}-ar${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "archive" FORCE) + ${ANDROID_TOOLCHAIN}/bin/${ANDROID_ARCH}-ar${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "archive" FORCE) set(CMAKE_LINKER - ${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_ARCH}-ld${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "linker" FORCE) + ${ANDROID_TOOLCHAIN}/bin/${ANDROID_ARCH}-ld${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "linker" FORCE) set(CMAKE_NM - ${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_ARCH}-nm${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "nm" FORCE) + ${ANDROID_TOOLCHAIN}/bin/${ANDROID_ARCH}-nm${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "nm" FORCE) set(CMAKE_OBJCOPY - ${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_ARCH}-objcopy${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "objcopy" FORCE) + ${ANDROID_TOOLCHAIN}/bin/${ANDROID_ARCH}-objcopy${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "objcopy" FORCE) set(CMAKE_OBJDUMP - ${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_ARCH}-objdump${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "objdump" FORCE) + ${ANDROID_TOOLCHAIN}/bin/${ANDROID_ARCH}-objdump${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "objdump" FORCE) set(CMAKE_STRIP - ${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_ARCH}-strip${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "strip" FORCE) + ${ANDROID_TOOLCHAIN}/bin/${ANDROID_ARCH}-strip${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "strip" FORCE) set(CMAKE_RANLIB - ${ANDROID_NDK_TOOLCHAIN_ROOT}/bin/${ANDROID_ARCH}-ranlib${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "ranlib" FORCE) + ${ANDROID_TOOLCHAIN}/bin/${ANDROID_ARCH}-ranlib${CMAKE_EXECUTABLE_SUFFIX} CACHE PATH "ranlib" FORCE) set_property(CACHE ARM_TARGETS PROPERTY STRINGS ${PossibleArmTargets} ) @@ -101,56 +100,28 @@ set(LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_BINARY_DIR}/android/app CACHE PATH #set these flags for client use set(LIBRARY_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ARM_TARGETS} CACHE PATH "path for android libs" FORCE) -set(CMAKE_INSTALL_PREFIX ${ANDROID_NDK_TOOLCHAIN_ROOT}/user/${ARM_TARGETS} +set(CMAKE_INSTALL_PREFIX ${ANDROID_TOOLCHAIN}/user/${ARM_TARGETS} CACHE STRING "path for installing" FORCE) # where is the target environment -SET(CMAKE_FIND_ROOT_PATH ${ANDROID_NDK_TOOLCHAIN_ROOT}/bin ${ANDROID_NDK_TOOLCHAIN_ROOT}/arm-linux-androideabi ${ANDROID_NDK_TOOLCHAIN_ROOT}/sysroot ${CMAKE_INSTALL_PREFIX} ${CMAKE_INSTALL_PREFIX}/share) +SET(CMAKE_FIND_ROOT_PATH ${ANDROID_TOOLCHAIN}/bin ${ANDROID_TOOLCHAIN}/arm-linux-androideabi ${ANDROID_TOOLCHAIN}/sysroot ${CMAKE_INSTALL_PREFIX} ${CMAKE_INSTALL_PREFIX}/share) SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) # only search for libraries and includes in the ndk toolchain SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -SET(CMAKE_CXX_FLAGS "-DGL_GLEXT_PROTOTYPES -fPIC -DANDROID") -SET(CMAKE_C_FLAGS "-DGL_GLEXT_PROTOTYPES -fPIC -DANDROID") -if (ARMEABI) - #Setup arm specific stuff - #It is recommended to use the -mthumb compiler flag to force the generation - #of 16-bit Thumb-1 instructions (the default being 32-bit ARM ones). - SET(CMAKE_CXX_FLAGS "-DGL_GLEXT_PROTOTYPES -fPIC -DANDROID -mthumb") - SET(CMAKE_C_FLAGS "-DGL_GLEXT_PROTOTYPES -fPIC -DANDROID -mthumb") - - #these are required flags for android armv7-a - if(WANT_ANDROID_LEGACY) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv6") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv6") - SET(ALLEGRO_CFG_ANDROID_LEGACY 1) - else(WANT_ANDROID_LEGACY) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv7-a -mfloat-abi=softfp") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv7-a -mfloat-abi=softfp") - if(NEON) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon") - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpu=neon") - endif() - endif(WANT_ANDROID_LEGACY) - - #-Wl,-L${LIBCPP_LINK_DIR},-lstdc++,-lsupc++ - #-L${LIBCPP_LINK_DIR} -lstdc++ -lsupc++ - #Also, this is *required* to use the following linker flags that routes around - #a CPU bug in some Cortex-A8 implementations: - - SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fix-cortex-a8 -L${CMAKE_INSTALL_PREFIX}/lib" CACHE STRING "linker flags" FORCE) - SET(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fix-cortex-a8 -L${CMAKE_INSTALL_PREFIX}/lib" CACHE STRING "linker flags" FORCE) -endif() - -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags") -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags") - #set these global flags for cmake client scripts to change behavior set(ANDROID True) set(BUILD_ANDROID True) +#make use of ANDROID_CFLAGS, ANDROID_LDFLAGS and ANDROID_CXXFLAGS +set(CMAKE_C_FLAGS "$ENV{ANDROID_CFLAGS} $ENV{CFLAGS}" CACHE STRING "" FORCE) +set(CMAKE_CXX_FLAGS "$ENV{ANDROID_CXXFLAGS} $ENV{CXXFLAGS}" CACHE STRING "" FORCE) +set(CMAKE_SHARED_LINKER_FLAGS "$ENV{ANDROID_LDFLAGS} $ENV{LDFLAGS}" CACHE STRING "" FORCE) +set(CMAKE_MODULE_LINKER_FLAGS "$ENV{ANDROID_LDFLAGS} $ENV{LDFLAGS}" CACHE STRING "" FORCE) +set(CMAKE_EXE_LINKER_FLAGS "-Wl,-pie $ENV{ANDROID_LDFLAGS} $ENV{LDFLAGS}" CACHE STRING "" FORCE) + # Do a no-op access on the CMAKE_TOOLCHAIN_FILE variable so that CMake will not issue a warning on it being unused. if (CMAKE_TOOLCHAIN_FILE) endif()