From 56154ee506453dcabfb462535583416d15b7e2ab Mon Sep 17 00:00:00 2001 From: Kevin Gorham Date: Tue, 27 Nov 2018 23:11:28 -0500 Subject: [PATCH] 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 --- .cargo/config | 2 - .gitignore | 1 + build-ndk-standalone.bat | 65 ++++++++++++++++++----- build-ndk-standalone.sh | 110 +++++++++++++++++++++++++-------------- 4 files changed, 123 insertions(+), 55 deletions(-) delete mode 100644 .cargo/config diff --git a/.cargo/config b/.cargo/config deleted file mode 100644 index 5514fc8c..00000000 --- a/.cargo/config +++ /dev/null @@ -1,2 +0,0 @@ -[build] -target-dir = "build/rust/target" \ No newline at end of file diff --git a/.gitignore b/.gitignore index 68e18b69..9ec09f40 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ *.class # Generated files +.cargo/ bin/ gen/ out/ diff --git a/build-ndk-standalone.bat b/build-ndk-standalone.bat index df1908bf..d9981c17 100644 --- a/build-ndk-standalone.bat +++ b/build-ndk-standalone.bat @@ -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 - - diff --git a/build-ndk-standalone.sh b/build-ndk-standalone.sh index ba9830f5..cca68b30 100755 --- a/build-ndk-standalone.sh +++ b/build-ndk-standalone.sh @@ -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"