Update build-ndk-standalone scripts.

Previous version did a bad job of recognizing an incorrect config file.
This makes it a bit better. It also removes the need for a config in the
parent directory.

Co-authored-by: Jack Grigg <jack@z.cash>
This commit is contained in:
Kevin Gorham 2018-11-27 23:11:28 -05:00 committed by Jack Grigg
parent 42295cf09a
commit 56154ee506
No known key found for this signature in database
GPG Key ID: 1B8D649257DB0829
4 changed files with 123 additions and 55 deletions

View File

@ -1,2 +0,0 @@
[build]
target-dir = "build/rust/target"

1
.gitignore vendored
View File

@ -9,6 +9,7 @@
*.class
# Generated files
.cargo/
bin/
gen/
out/

View File

@ -9,6 +9,15 @@ if "%DIRNAME%" == "" set DIRNAME=.
@rem put this somewhere that's often ignored by git
set output_dir=%DIRNAME%\out\ndk\standalone
call :generate_standalone_ndk
call :generate_config
echo Done
exit /b %ERRORLEVEL%
:generate_standalone_ndk
@rem check for NDK standalone
if exist "%output_dir%" echo Standalone NDK files found! && exit /b 0
@ -22,7 +31,7 @@ cd %DIRNAME%
if exist "%standalone_script%" goto standaloneScriptFound
echo NDK not found. Please make sure that ANDROID_HOME is set and the NDK has been installed there
exit 1
exit /b 1
:standaloneScriptFound
echo Standalone NDK files appear to be missing.
@ -43,20 +52,45 @@ mkdir %output_dir%
"%standalone_script%" --arch arm --api 16 --install-dir "%output_dir%\arm"
"%standalone_script%" --arch arm64 --api 21 --install-dir "%output_dir%\arm64"
@rem check for our generated cargo file
set cargo_dir=%DIRNAME%\..\.cargo
set generated_cargo_config=%cargo_dir%\config
@rem end of generate_standalone_ndk
exit /b 0
if exist "%generated_cargo_config%" goto backup
:generate_config
@rem check for our generated cargo file
set cargo_dir=%DIRNAME%\.cargo
set generated_cargo_config=%cargo_dir%\config
set generated_cargo_config_hash=%cargo_dir%\.config-windows.hash
set generated_cargo_config_hash_tmp=%cargo_dir%\.config-windows.hash.tmp
if exist "%generated_cargo_config%" goto configExists
goto notFound
:configExists
if exist "%generated_cargo_config_hash%" goto checkConfig
goto notFound
:checkConfig
echo Cargo config found!
certutil -hashfile %generated_cargo_config% > %generated_cargo_config_hash_tmp%
comp %generated_cargo_config_hash% %generated_cargo_config_hash_tmp% /m
if %ERRORLEVEL% equ 0 exit /b 0
echo.
echo but it does not appear to be correct! Regenerating it.
set backup_config=%cargo_dir%\config.backup
echo First, backing it up from %generated_cargo_config% to %backup_config%
copy %generated_cargo_config% %backup_config%
goto generate
:backup
set backup_config=%cargo_dir%\config.backup
echo existing config found. Backing it up from %generated_cargo_config% to %backup_config%
copy %generated_cargo_config% %backup_config%
:notFound
echo Cargo config not found!
:generate
echo generating cargo config at %generated_cargo_config%
echo Generating cargo config at %generated_cargo_config%
mkdir %cargo_dir% 2>NUL
@ -65,7 +99,10 @@ set output_dir=%output_dir:\=/%
(
echo #auto-generated by build-ndk-standalone.bat
echo #auto-generated by build-ndk-standalone.bat. Modifications may get replaced.
echo.
echo [build]
echo target-dir = "build/rust/target"
echo.
echo [target.i686-linux-android]
echo ar = "%output_dir%/x86/bin/i686-linux-android-ar.exe"
@ -81,7 +118,7 @@ set output_dir=%output_dir:\=/%
) > %generated_cargo_config%
echo Done
certutil -hashfile %generated_cargo_config% > %generated_cargo_config_hash%
@rem end of generate_config
exit /b 0

View File

@ -1,59 +1,91 @@
#!/usr/bin/zsh
# put this somewhere that's often ignored by git
# put this somewhere that will be ignored by git
output_dir=out/ndk/standalone
script_name=$0
# check for NDK standalone
[[ -d "$output_dir" ]] && echo "Standalone NDK files found!" && exit 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")
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
# 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"
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"
}
# check for our generated cargo file
generated_cargo_config=../.cargo/config
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" ]; then
backup_config_filename="config.$(date +%s).backup"
echo " existing config found. Backing it up from $generated_cargo_config to $(dirname $generated_cargo_config)/$backup_config_filename"
cp $generated_cargo_config $(dirname $generated_cargo_config)/$backup_config_filename
fi
if [ -f "$generated_cargo_config" -a -f "$generated_cargo_config_hash" ]; then
echo "Cargo config found!"
echo " generating cargo config at $generated_cargo_config"
line_count=$(wc -l < "$generated_cargo_config")
mkdir -p $(dirname $generated_cargo_config)
sha256sum -c "$generated_cargo_config_hash" && [[ "$line_count" -eq "$expected_lines" ]] && return 0
awk -v SA_NDK=$output_dir -v SCRIPT_DIR=$PWD 'BEGIN{
echo " but it does not appear to be correct! Regenerating it."
printf "#auto-generated by build-ndk-standalone.sh\n\n"
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
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
echo " Generating cargo config at $generated_cargo_config"
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
mkdir -p $(dirname $generated_cargo_config)
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
awk -v SA_NDK=$output_dir -v SCRIPT_DIR=$PWD 'BEGIN{
}' > $generated_cargo_config
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"