• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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