2018-11-20 23:04:53 -08:00
|
|
|
#!/usr/bin/zsh
|
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
# put this somewhere that will be ignored by git
|
2018-11-20 23:04:53 -08:00
|
|
|
output_dir=out/ndk/standalone
|
2018-11-27 20:11:28 -08:00
|
|
|
script_name=$0
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
function generate_standalone_ndk()
|
|
|
|
{
|
|
|
|
# check for NDK standalone
|
|
|
|
[[ -d "$output_dir" ]] && echo "Standalone NDK files found!" && return 0
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
standalone_script=$(find $ANDROID_HOME -name "*make_standalone_toolchain.py")
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
# 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"
|
2019-01-15 11:38:40 -08:00
|
|
|
exit 40
|
2018-11-27 20:11:28 -08:00
|
|
|
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
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
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"
|
|
|
|
}
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
function generate_config()
|
|
|
|
{
|
|
|
|
# check for our generated cargo file
|
|
|
|
generated_cargo_config=.cargo/config
|
|
|
|
generated_cargo_config_hash=.cargo/.config.hash
|
|
|
|
expected_lines=17
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
if [ -f "$generated_cargo_config" -a -f "$generated_cargo_config_hash" ]; then
|
|
|
|
echo "Cargo config found!"
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
line_count=$(wc -l < "$generated_cargo_config")
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
sha256sum -c "$generated_cargo_config_hash" && [[ "$line_count" -eq "$expected_lines" ]] && return 0
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
echo " but it does not appear to be correct! Regenerating it."
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
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
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
echo " Generating cargo config at $generated_cargo_config"
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
mkdir -p $(dirname $generated_cargo_config)
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
awk -v SA_NDK=$output_dir -v SCRIPT_DIR=$PWD 'BEGIN{
|
2018-11-20 23:04:53 -08:00
|
|
|
|
2018-11-27 20:11:28 -08:00
|
|
|
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
|
2018-11-20 23:04:53 -08:00
|
|
|
|
|
|
|
echo "Done"
|
|
|
|
|
|
|
|
|