summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2017-02-20 19:24:21 +0100
committerKonstantin Käfer <mail@kkaefer.com>2017-02-22 18:06:20 +0100
commit341e65f7d51e7acc0bf73893317251adc4d23cb6 (patch)
treecd549c3a57e7dc7737efa7c89298a7ea7777b900 /platform
parent586ae94ec4cfd3ea5b223ba36fc519ef8ada5eff (diff)
downloadqtlocation-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.yml29
-rw-r--r--platform/android/config.cmake12
-rwxr-xr-xplatform/android/scripts/ndk.sh111
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