Detect the NDK path from CMAKE_TOOLCHAIN_FILE.

The NDK toolchain file uses either ANDROID_NDK or CMAKE_TOOLCHAIN_FILE,
so look at both. In particular, our builders don't pass in ANDROID_NDK.

Change-Id: Ic7fabdbd16adc3d38389d338b38839b67dde6523
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/39544
Commit-Queue: David Benjamin <davidben@google.com>
Commit-Queue: Adam Langley <agl@google.com>
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/util/run_android_tests.go b/util/run_android_tests.go
index 7c0abf8..b2ad913 100644
--- a/util/run_android_tests.go
+++ b/util/run_android_tests.go
@@ -213,9 +213,13 @@
 	}
 
 	if len(*ndkPath) == 0 {
-		var ok bool
-		if *ndkPath, ok = cmakeVars["ANDROID_NDK"]; !ok {
-			return errors.New("ANDROID_NDK not found in CMakeCache.txt")
+		if ndk, ok := cmakeVars["ANDROID_NDK"]; ok {
+			*ndkPath = ndk
+		} else if toolchainFile, ok := cmakeVars["CMAKE_TOOLCHAIN_FILE"]; ok {
+			// The toolchain is at build/cmake/android.toolchain.cmake under the NDK.
+			*ndkPath = filepath.Dir(filepath.Dir(filepath.Dir(toolchainFile)))
+		} else {
+			return errors.New("Neither CMAKE_TOOLCHAIN_FILE nor ANDROID_NDK found in CMakeCache.txt")
 		}
 		fmt.Printf("Detected NDK path %q from CMakeCache.txt.\n", *ndkPath)
 	}