1#!/usr/bin/env bash 2 3set -e 4 5if [ -z "$ANDROID_NDK" ] 6then 7 echo "ANDROID_NDK not set; please set it to the Android NDK directory" 8 exit 1 9fi 10 11if [ ! -d "$ANDROID_NDK" ] 12then 13 echo "ANDROID_NDK not a directory; did you install it under ${ANDROID_NDK}?" 14 exit 1 15fi 16 17mkdir -p build/android/arm64-v8a 18 19CMAKE_ARGS=() 20 21# CMake-level configuration 22CMAKE_ARGS+=("-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake") 23CMAKE_ARGS+=("-DCMAKE_BUILD_TYPE=Release") 24CMAKE_ARGS+=("-DCMAKE_POSITION_INDEPENDENT_CODE=ON") 25 26# If Ninja is installed, prefer it to Make 27if [ -x "$(command -v ninja)" ] 28then 29 CMAKE_ARGS+=("-GNinja") 30fi 31 32CMAKE_ARGS+=("-DCPUINFO_LIBRARY_TYPE=static") 33# CMakeLists for Google Benchmark is broken on Android 34CMAKE_ARGS+=("-DCPUINFO_BUILD_BENCHMARKS=OFF") 35CMAKE_ARGS+=("-DCPUINFO_BUILD_TOOLS=ON") 36CMAKE_ARGS+=("-DCPUINFO_BUILD_UNIT_TESTS=ON") 37CMAKE_ARGS+=("-DCPUINFO_BUILD_MOCK_TESTS=ON") 38 39# Android-specific options 40CMAKE_ARGS+=("-DANDROID_NDK=$ANDROID_NDK") 41CMAKE_ARGS+=("-DANDROID_ABI=arm64-v8a") 42CMAKE_ARGS+=("-DANDROID_PLATFORM=android-21") 43CMAKE_ARGS+=("-DANDROID_PIE=ON") 44CMAKE_ARGS+=("-DANDROID_STL=c++_static") 45CMAKE_ARGS+=("-DANDROID_CPP_FEATURES=exceptions") 46 47# Use-specified CMake arguments go last to allow overridding defaults 48CMAKE_ARGS+=($@) 49 50cd build/android/arm64-v8a && cmake ../../.. \ 51 "${CMAKE_ARGS[@]}" 52 53# Cross-platform parallel build 54if [ "$(uname)" == "Darwin" ] 55then 56 cmake --build . -- "-j$(sysctl -n hw.ncpu)" 57else 58 cmake --build . -- "-j$(nproc)" 59fi 60