zcash-android-wallet-sdk/build-ndk-standalone.sh

93 lines
3.5 KiB
Bash
Executable File

#!/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"
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"