diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2017-02-20 19:24:21 +0100 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2017-02-22 18:06:20 +0100 |
commit | 341e65f7d51e7acc0bf73893317251adc4d23cb6 (patch) | |
tree | cd549c3a57e7dc7737efa7c89298a7ea7777b900 /platform | |
parent | 586ae94ec4cfd3ea5b223ba36fc519ef8ada5eff (diff) | |
download | qtlocation-mapboxgl-341e65f7d51e7acc0bf73893317251adc4d23cb6.tar.gz |
[build] use system-provided Android NDK when available
and fall back to Mason if it isn't
Diffstat (limited to 'platform')
-rw-r--r-- | platform/android/bitrise.yml | 29 | ||||
-rw-r--r-- | platform/android/config.cmake | 12 | ||||
-rwxr-xr-x | platform/android/scripts/ndk.sh | 111 |
3 files changed, 119 insertions, 33 deletions
diff --git a/platform/android/bitrise.yml b/platform/android/bitrise.yml index 8599a9359d..aadcba79be 100644 --- a/platform/android/bitrise.yml +++ b/platform/android/bitrise.yml @@ -28,14 +28,6 @@ workflows: envman add --key SKIPCI --value false fi - script: - title: Configure GL-native build environement - run_if: '{{enveq "SKIPCI" "false"}}' - inputs: - - content: |- - #!/bin/bash - set -eu -o pipefail - sudo apt-get install -y pkg-config cmake - - script: title: Run Checkstyle run_if: '{{enveq "SKIPCI" "false"}}' inputs: @@ -165,13 +157,6 @@ workflows: scheduled: steps: - script: - title: Configure GL-native build environement - inputs: - - content: |- - #!/bin/bash - set -eu -o pipefail - sudo apt-get install -y pkg-config cmake - - script: title: Configure AWS-CLI inputs: - content: |- @@ -221,13 +206,6 @@ workflows: devicefarmUpload: steps: - script: - title: Configure GL-native build environement - inputs: - - content: |- - #!/bin/bash - set -eu -o pipefail - sudo apt-get install -y pkg-config cmake - - script: title: Build release inputs: - content: |- @@ -270,13 +248,6 @@ workflows: nightly-release: steps: - script: - title: Configure GL-native build environement - inputs: - - content: |- - #!/bin/bash - set -eu -o pipefail - sudo apt-get install -y pkg-config cmake - - script: title: Configure AWS-CLI inputs: - content: |- diff --git a/platform/android/config.cmake b/platform/android/config.cmake index bda2c27e78..27f538b95e 100644 --- a/platform/android/config.cmake +++ b/platform/android/config.cmake @@ -27,6 +27,10 @@ set(ANDROID_JNI_TARGET_DIR ${ANDROID_SDK_PROJECT_DIR}/src/main/jniLibs/${ANDROID set(ANDROID_ASSETS_TARGET_DIR ${ANDROID_SDK_PROJECT_DIR}/src/main/assets) set(ANDROID_TEST_APP_JNI_TARGET_DIR ${CMAKE_SOURCE_DIR}/platform/android/MapboxGLAndroidSDKTestApp/src/main/jniLibs/${ANDROID_ABI}) +if (NOT DEFINED ANDROID_TOOLCHAIN_PREFIX) + set(ANDROID_TOOLCHAIN_PREFIX "${MASON_XC_ROOT}/bin/${ANDROID_TOOLCHAIN}-") +endif() + ## mbgl core ## macro(mbgl_platform_core) @@ -205,7 +209,7 @@ target_link_libraries(mapbox-gl # Create a stripped version of the library and copy it to the JNIDIR. add_custom_command(TARGET mapbox-gl POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${ANDROID_JNI_TARGET_DIR} - COMMAND ${STRIP_COMMAND} $<TARGET_FILE:mapbox-gl> -o ${ANDROID_JNI_TARGET_DIR}/$<TARGET_FILE_NAME:mapbox-gl>) + COMMAND ${ANDROID_TOOLCHAIN_PREFIX}strip $<TARGET_FILE:mapbox-gl> -o ${ANDROID_JNI_TARGET_DIR}/$<TARGET_FILE_NAME:mapbox-gl>) ## Test library ## @@ -266,8 +270,8 @@ target_add_mason_package(mbgl-test PRIVATE geojsonvt) add_custom_command(TARGET mbgl-test POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/stripped - COMMAND ${STRIP_COMMAND} $<TARGET_FILE:mapbox-gl> -o ${CMAKE_CURRENT_BINARY_DIR}/stripped/$<TARGET_FILE_NAME:mapbox-gl> - COMMAND ${STRIP_COMMAND} $<TARGET_FILE:mbgl-test> -o ${CMAKE_CURRENT_BINARY_DIR}/stripped/$<TARGET_FILE_NAME:mbgl-test>) + COMMAND ${ANDROID_TOOLCHAIN_PREFIX}strip $<TARGET_FILE:mapbox-gl> -o ${CMAKE_CURRENT_BINARY_DIR}/stripped/$<TARGET_FILE_NAME:mapbox-gl> + COMMAND ${ANDROID_TOOLCHAIN_PREFIX}strip $<TARGET_FILE:mbgl-test> -o ${CMAKE_CURRENT_BINARY_DIR}/stripped/$<TARGET_FILE_NAME:mbgl-test>) ## Custom layer example ## @@ -289,4 +293,4 @@ target_link_libraries(example-custom-layer add_custom_command(TARGET example-custom-layer POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${ANDROID_TEST_APP_JNI_TARGET_DIR} - COMMAND ${STRIP_COMMAND} $<TARGET_FILE:example-custom-layer> -o ${ANDROID_TEST_APP_JNI_TARGET_DIR}/$<TARGET_FILE_NAME:example-custom-layer>) + COMMAND ${ANDROID_TOOLCHAIN_PREFIX}strip $<TARGET_FILE:example-custom-layer> -o ${ANDROID_TEST_APP_JNI_TARGET_DIR}/$<TARGET_FILE_NAME:example-custom-layer>) diff --git a/platform/android/scripts/ndk.sh b/platform/android/scripts/ndk.sh new file mode 100755 index 0000000000..96a314a3c2 --- /dev/null +++ b/platform/android/scripts/ndk.sh @@ -0,0 +1,111 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail +set -u + +# This script produces an env.sh file, which contains the paths to CMake, and the flags required to +# create a build. It first tries to use the Android NDK, but falls back to installing it via Mason. + +function error { >&2 echo -e "\033[1m\033[31m$@\033[0m"; } +function warning { >&2 echo -e "\033[1m\033[33m$@\033[0m"; } +function status { >&2 echo -e "\033[1m\033[36m$@\033[0m"; } +function info { >&2 echo -e "\033[1m\033[32m$@\033[0m"; } + +if [ "$#" -ne 3 ]; then + error "Usage: $0 <short arch> <long arch> <api level>" +fi + +NDK_ANDROID_VERSION=$1-$3 +ANDROID_NATIVE_API_LEVEL=$3 +ANDROID_ABI=$2 + +function mason_ndk { + local CMAKE=${CMAKE:-cmake} + MASON_XC_ROOT="`${CMAKE} -P cmake/mason.cmake PREFIX android-ndk VERSION ${NDK_ANDROID_VERSION}-r13b`" + + local TOOLCHAIN="${MASON_XC_ROOT}/toolchain.cmake" + if [ ! -f "${TOOLCHAIN}" ]; then + error "Can't find CMake toolchain file at ${TOOLCHAIN}." + exit 1 + fi + + info "Using Mason-provided Android NDK at ${MASON_XC_ROOT}" + echo CMAKE=\"${CMAKE}\" + echo CMAKE_GENERATOR=\"Ninja\" + echo CMAKE_ARGS=\" \ + -DCMAKE_MAKE_PROGRAM=`pwd`/${NINJA} \ + -DMASON_XC_ROOT=${MASON_XC_ROOT} \ + -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} \ + \" +} + +function system_ndk { + if [[ ${USE_MASON_NDK:-} ]]; then + return 1 + fi + + if [ -f platform/android/local.properties ]; then + local SDK_DIR=$(sed -n -e 's/^sdk.dir=\(.*\)$/\1/p' platform/android/local.properties) + fi + + if [ ! -d "${SDK_DIR:-}" ]; then + if [ ! -z "${ANDROID_HOME:-}" ]; then + local SDK_DIR="${ANDROID_HOME}" + else + error "Can't find the Android SDK. Set \$ANDROID_HOME to the SDK path." + exit 1 + fi + fi + + local NDK_DIR="${ANDROID_NDK_HOME:-${SDK_DIR}/ndk-bundle}" + if [ ! -d "${NDK_DIR}" ]; then + warning "Can't find the Android NDK. If it is installed, set \$ANDROID_NDK_HOME to the NDK path." + return 1 + fi + + # Try to install CMake if it's not installed yet. + mkdir -p "${SDK_DIR}/cmake" + local CMAKE_VERSION=/$(ls "${SDK_DIR}/cmake" | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -n 1) + local CMAKE="${SDK_DIR}/cmake${CMAKE_VERSION:-}/bin/cmake" + if [ ! -f "${CMAKE}" ]; then + status "Trying to install CMake..." + mkdir -p "${SDK_DIR}/licenses" + echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > "${SDK_DIR}/licenses/android-sdk-license" + "${SDK_DIR}/tools/bin/sdkmanager" --list | grep cmake | tail -n 1 | cut -d \| -f 1 | xargs "${SDK_DIR}/tools/bin/sdkmanager" >&2 + CMAKE_VERSION=/$(ls "${SDK_DIR}/cmake" | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -n 1) + CMAKE="${SDK_DIR}/cmake${CMAKE_VERSION:-}/bin/cmake" + if [ ! -f "${CMAKE}" ]; then + error "Can't find CMake at ${CMAKE}." + return 1 + fi + fi + + local NINJA="${SDK_DIR}/cmake${CMAKE_VERSION:-}/bin/ninja" + if [ ! -f "${NINJA}" ]; then + error "Can't find Ninja at ${NINJA}." + return 1 + fi + + local TOOLCHAIN="${NDK_DIR}/build/cmake/android.toolchain.cmake" + if [ ! -f "${TOOLCHAIN}" ]; then + error "Can't find CMake toolchain file at ${TOOLCHAIN}." + return 1 + fi + + info "Using system-provided Android NDK at ${NDK_DIR}" + echo CMAKE=\"${CMAKE}\" + echo CMAKE_GENERATOR=\"Android Gradle - Ninja\" + echo CMAKE_ARGS=\" \ + -DANDROID_ABI=${ANDROID_ABI} \ + -DANDROID_NDK=${NDK_DIR} \ + -DCMAKE_MAKE_PROGRAM=${NINJA} \ + -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} \ + -DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_STL=c++_static \ + -DANDROID_CPP_FEATURES=rtti\;exceptions \ + \" +} + +system_ndk || mason_ndk |