#!/usr/bin/zsh # put this somewhere that will be ignored by git output_dir=out/ndk/standalone script_name=$0 function generate_standalone_ndk() { # check for NDK standalone [[ -d "$output_dir" ]] && echo "Standalone NDK files found!" && return 0 standalone_script=$(find $ANDROID_HOME -name "*make_standalone_toolchain.py") # Try to find and print some info about the NDK based on the location of the toolchain script if [ ! -f "$standalone_script" ]; then echo "NDK not found. Please make sure that ANDROID_HOME is set and the NDK has been installed there" exit 40 else echo "Standalone NDK files appear to be missing.\n Attempting to install them..." ndk_dir=$(dirname $(dirname $(dirname $standalone_script 2>/dev/null) 2>/dev/null) 2>/dev/null) ndk_version=$(grep -oE "[0-9.]{5,}" $ndk_dir/source.properties 2>/dev/null) echo " NDK version $ndk_version found at $ndk_dir" fi echo " Installing the standalone NDK for x86|arm|arm64 into $output_dir" mkdir -p $output_dir "$standalone_script" --arch x86 --api 16 --install-dir "$output_dir/x86" "$standalone_script" --arch arm --api 16 --install-dir "$output_dir/arm" "$standalone_script" --arch arm64 --api 21 --install-dir "$output_dir/arm64" } function generate_config() { # check for our generated cargo file generated_cargo_config=.cargo/config generated_cargo_config_hash=.cargo/.config.hash expected_lines=17 if [ -f "$generated_cargo_config" -a -f "$generated_cargo_config_hash" ]; then echo "Cargo config found!" line_count=$(wc -l < "$generated_cargo_config") sha256sum -c "$generated_cargo_config_hash" && [[ "$line_count" -eq "$expected_lines" ]] && return 0 echo " but it does not appear to be correct! Regenerating it." if [ -f "$generated_cargo_config" ]; then backup_config_filename="config-$(date +%s).backup" echo " first, backing it up from $generated_cargo_config to $(dirname $generated_cargo_config)/$backup_config_filename" echo " *** NOTE: if this keeps happening, update the 'expected_lines' value in $script_name : "$(basename "$0") echo cp $generated_cargo_config $(dirname $generated_cargo_config)/$backup_config_filename fi else echo "Cargo config not found!" fi echo " Generating cargo config at $generated_cargo_config" mkdir -p $(dirname $generated_cargo_config) awk -v SA_NDK=$output_dir -v SCRIPT_DIR=$PWD 'BEGIN{ printf "#auto-generated by build-ndk-standalone.sh. Modifications will get replaced.\n\n" printf "[build]\n" printf "target-dir = \"build/rust/target\"\n\n" printf "[target.i686-linux-android]\n" printf "ar = \"%s/%s/x86/bin/i686-linux-android-ar\"\n", SCRIPT_DIR, SA_NDK printf "linker = \"%s/%s/x86/bin/i686-linux-android-clang\"\n\n", SCRIPT_DIR, SA_NDK printf "[target.armv7-linux-androideabi]\n" printf "ar = \"%s/%s/arm/bin/arm-linux-androideabi-ar\"\n", SCRIPT_DIR, SA_NDK printf "linker = \"%s/%s/arm/bin/arm-linux-androideabi-clang\"\n\n", SCRIPT_DIR, SA_NDK printf "[target.aarch64-linux-android]\n" printf "ar = \"%s/%s/arm64/bin/aarch64-linux-android-ar\"\n", SCRIPT_DIR, SA_NDK printf "linker = \"%s/%s/arm64/bin/aarch64-linux-android-clang\"\n\n", SCRIPT_DIR, SA_NDK }' > $generated_cargo_config sha256sum $generated_cargo_config > $generated_cargo_config_hash } generate_standalone_ndk generate_config echo "Done"