1*4bdc9457SAndroid Build Coastguard Worker#!/usr/bin/env bash 2*4bdc9457SAndroid Build Coastguard Worker# 3*4bdc9457SAndroid Build Coastguard Worker# Copyright (c) Facebook, Inc. and its affiliates. 4*4bdc9457SAndroid Build Coastguard Worker# All rights reserved. 5*4bdc9457SAndroid Build Coastguard Worker# 6*4bdc9457SAndroid Build Coastguard Worker# Copyright 2019 Google LLC 7*4bdc9457SAndroid Build Coastguard Worker# 8*4bdc9457SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the 9*4bdc9457SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree. 10*4bdc9457SAndroid Build Coastguard Worker 11*4bdc9457SAndroid Build Coastguard Workerset -e 12*4bdc9457SAndroid Build Coastguard Worker 13*4bdc9457SAndroid Build Coastguard Workerif [ -z "$ANDROID_NDK" ] 14*4bdc9457SAndroid Build Coastguard Workerthen 15*4bdc9457SAndroid Build Coastguard Worker echo "ANDROID_NDK not set; please set it to the Android NDK directory" 16*4bdc9457SAndroid Build Coastguard Worker exit 1 17*4bdc9457SAndroid Build Coastguard Workerfi 18*4bdc9457SAndroid Build Coastguard Worker 19*4bdc9457SAndroid Build Coastguard Workerif [ ! -d "$ANDROID_NDK" ] 20*4bdc9457SAndroid Build Coastguard Workerthen 21*4bdc9457SAndroid Build Coastguard Worker echo "ANDROID_NDK not a directory; did you install it under ${ANDROID_NDK}?" 22*4bdc9457SAndroid Build Coastguard Worker exit 1 23*4bdc9457SAndroid Build Coastguard Workerfi 24*4bdc9457SAndroid Build Coastguard Worker 25*4bdc9457SAndroid Build Coastguard Workermkdir -p build/android/x86 26*4bdc9457SAndroid Build Coastguard Worker 27*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS=() 28*4bdc9457SAndroid Build Coastguard Worker 29*4bdc9457SAndroid Build Coastguard Worker# CMake-level configuration 30*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake") 31*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DCMAKE_BUILD_TYPE=Release") 32*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DCMAKE_POSITION_INDEPENDENT_CODE=ON") 33*4bdc9457SAndroid Build Coastguard Worker 34*4bdc9457SAndroid Build Coastguard Worker# If Ninja is installed, prefer it to Make 35*4bdc9457SAndroid Build Coastguard Workerif [ -x "$(command -v ninja)" ] 36*4bdc9457SAndroid Build Coastguard Workerthen 37*4bdc9457SAndroid Build Coastguard Worker CMAKE_ARGS+=("-GNinja") 38*4bdc9457SAndroid Build Coastguard Workerfi 39*4bdc9457SAndroid Build Coastguard Worker 40*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DXNNPACK_LIBRARY_TYPE=static") 41*4bdc9457SAndroid Build Coastguard Worker 42*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DXNNPACK_BUILD_BENCHMARKS=ON") 43*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DXNNPACK_BUILD_TESTS=ON") 44*4bdc9457SAndroid Build Coastguard Worker 45*4bdc9457SAndroid Build Coastguard Worker# Cross-compilation options for Google Benchmark 46*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DHAVE_POSIX_REGEX=0") 47*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DHAVE_STEADY_CLOCK=0") 48*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DHAVE_STD_REGEX=0") 49*4bdc9457SAndroid Build Coastguard Worker 50*4bdc9457SAndroid Build Coastguard Worker# Android-specific options 51*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DANDROID_NDK=$ANDROID_NDK") 52*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DANDROID_ABI=x86") 53*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DANDROID_PLATFORM=android-14") 54*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DANDROID_PIE=ON") 55*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DANDROID_STL=c++_static") 56*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=("-DANDROID_CPP_FEATURES=exceptions") 57*4bdc9457SAndroid Build Coastguard Worker 58*4bdc9457SAndroid Build Coastguard Worker# Use-specified CMake arguments go last to allow overridding defaults 59*4bdc9457SAndroid Build Coastguard WorkerCMAKE_ARGS+=($@) 60*4bdc9457SAndroid Build Coastguard Worker 61*4bdc9457SAndroid Build Coastguard Workercd build/android/x86 && cmake ../../.. \ 62*4bdc9457SAndroid Build Coastguard Worker "${CMAKE_ARGS[@]}" 63*4bdc9457SAndroid Build Coastguard Worker 64*4bdc9457SAndroid Build Coastguard Worker# Cross-platform parallel build 65*4bdc9457SAndroid Build Coastguard Workerif [ "$(uname)" == "Darwin" ] 66*4bdc9457SAndroid Build Coastguard Workerthen 67*4bdc9457SAndroid Build Coastguard Worker cmake --build . -- "-j$(sysctl -n hw.ncpu)" 68*4bdc9457SAndroid Build Coastguard Workerelse 69*4bdc9457SAndroid Build Coastguard Worker cmake --build . -- "-j$(nproc)" 70*4bdc9457SAndroid Build Coastguard Workerfi 71