blob: 0d7ed06c4e6b9415586d9ee2197d7c0375b57432 [file] [log] [blame]
Marat Dukhane029fd42017-10-26 00:35:46 +00001#!/usr/bin/env bash
2
3set -e
4
Marat Dukhan32e42ef2018-03-18 13:11:26 -07005if [ -z "$ANDROID_NDK" ]
Marat Dukhane029fd42017-10-26 00:35:46 +00006then
Marat Dukhan32e42ef2018-03-18 13:11:26 -07007 echo "ANDROID_NDK not set; please set it to the Android NDK directory"
8 exit 1
Marat Dukhane029fd42017-10-26 00:35:46 +00009fi
10
Marat Dukhan32e42ef2018-03-18 13:11:26 -070011if [ ! -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/armeabi-v7a
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=armeabi-v7a")
42CMAKE_ARGS+=("-DANDROID_PLATFORM=android-14")
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/armeabi-v7a && 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