| #!/bin/bash |
| |
| # SPDX-License-Identifier: MIT |
| |
| set -e |
| |
| show_help() { |
| echo "" |
| echo " Usage: ./build-android <ndk-dir> -a [abi] -b [build-directory] -s [sdk-version]" |
| |
| echo " ndk-dir: the directory of the Android NDK (required)" |
| echo " abi: the Android ABI to target for the build" |
| echo " build-directory: the directory in which to build the project" |
| echo " sdk-version: the minimum Android SDK version to target" |
| echo "" |
| exit 0 |
| } |
| |
| # If no arguments provided, show help |
| if [ $# -eq 0 ] |
| then |
| show_help |
| fi |
| |
| # If help requested, show help |
| for arg in "$@" |
| do |
| if [ "$arg" == "--help" ] || [ "$arg" == "-h" ] |
| then |
| show_help |
| fi |
| done |
| |
| # Make sure script will work the same if called from |
| # root directory or scripts directory |
| parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) |
| cd "$parent_path/.." |
| |
| NDK=$1 |
| # Verify NDK is valid directory |
| if [ -d "$NDK" ] |
| then |
| echo "Valid directory for NDK at $NDK" |
| else |
| echo "Directory for NDK doesn't exist at $NDK" |
| exit 1 |
| fi |
| |
| # Parse optional parameters |
| ABI="armeabi-v7a" |
| MINSDKVERSION=21 |
| BUILDDIR="build" |
| |
| OPTIND=2 |
| while getopts "a:s:b:" flag |
| do |
| case $flag in |
| a) ABI=$OPTARG;; |
| s) MINSDKVERSION=$OPTARG;; |
| b) BUILDDIR=$OPTARG;; |
| *) exit 1 |
| esac |
| done |
| |
| # Check ABI is supported |
| valid_abis=("armeabi-v7a" "arm64-v8a" "x86" "x86_64") |
| abi_match=false |
| for i in "${valid_abis[@]}" |
| do |
| : |
| if [ "$ABI" == "$i" ] |
| then abi_match=true |
| fi |
| done |
| if [ "$abi_match" = true ] |
| then |
| echo "Compiling for ABI $ABI" |
| else |
| echo "Invalid Android ABI of $ABI" |
| echo "Valid ABIs are:" |
| printf "%s\\n" "${valid_abis[@]}" |
| exit 1 |
| fi |
| |
| # Check SDK version is supported |
| highestSdkVersion=29 |
| if (( 1 <= MINSDKVERSION && MINSDKVERSION <= highestSdkVersion )) |
| then |
| echo "Compiling for SDK $MINSDKVERSION" |
| else |
| echo "Invalid SDK level of $MINSDKVERSION" |
| exit 1 |
| fi |
| |
| # Remove build directory if it exists |
| if [ -d "$BUILDDIR" ] |
| then |
| echo "Cleaning up previous build" |
| rm -r "$BUILDDIR" |
| fi |
| |
| echo "Building in directory $BUILDDIR" |
| |
| # Build |
| mkdir "$BUILDDIR" && cd "$BUILDDIR" |
| cmake .. -DOQS_USE_OPENSSL=OFF \ |
| -DBUILD_SHARED_LIBS=ON \ |
| -DCMAKE_TOOLCHAIN_FILE="$NDK"/build/cmake/android.toolchain.cmake \ |
| -DANDROID_ABI="$ABI" \ |
| -DANDROID_NATIVE_API_LEVEL="$MINSDKVERSION" |
| cmake --build ./ |
| |
| # Provide rudimentary information following build |
| echo "Completed build run for ABI $ABI, SDK Version $MINSDKVERSION" |