Add support for param files for Android NDK

Fix #7982

Currently, on Windows, `ar` command can fail when using Android NDK and the arguments length is too long.
This PR resolves it by enabling `--features=compiler_param_file` option for Android NDK, but I'm not sure if all commands in all versions of NDK that should be supported are compatible with this.

Closes #14457.

PiperOrigin-RevId: 448334050
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_cc_toolchain_template.txt b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_cc_toolchain_template.txt
index 6e6c5c9..e201f38 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_cc_toolchain_template.txt
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_cc_toolchain_template.txt
@@ -14,7 +14,7 @@
     objcopy_files = ":%toolchainName%-all_files",
     static_runtime_lib = ":%staticRuntimeLibs%",
     strip_files = ":%toolchainName%-all_files",
-    supports_param_files = 0,
+    supports_param_files = 1,
     toolchain_identifier = "%toolchainName%",
     toolchain_config = ":%toolchainName%-config",
 )
diff --git a/src/test/shell/bazel/android/android_ndk_integration_test.sh b/src/test/shell/bazel/android/android_ndk_integration_test.sh
index c74149a..5e9fc74 100755
--- a/src/test/shell/bazel/android/android_ndk_integration_test.sh
+++ b/src/test/shell/bazel/android/android_ndk_integration_test.sh
@@ -286,6 +286,14 @@
     --crosstool_top=//external:android/crosstool \
     --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
     || fail "build failed"
+
+  bazel build //:foo \
+    --features=compiler_param_file \
+    --compiler=clang5.0.300080 \
+    --cpu=armeabi-v7a \
+    --crosstool_top=//external:android/crosstool \
+    --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
+    || fail "build failed with --features=compiler_param_file"
 }
 
 function test_android_ndk_repository_path_from_environment() {
@@ -352,6 +360,13 @@
     --crosstool_top=//external:android/crosstool \
     --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
     || fail "build failed"
+
+  bazel build //:foo.stripped \
+    --features=compiler_param_file \
+    --cpu=armeabi-v7a \
+    --crosstool_top=//external:android/crosstool \
+    --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
+    || fail "build failed with --features=compiler_param_file"
 }
 
 function test_crosstool_stlport() {
@@ -384,6 +399,12 @@
     --cpu=armeabi-v7a \
     --crosstool_top=@androidndk//:toolchain-stlport \
     --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
+
+  assert_build //:foo \
+    --features=compiler_param_file \
+    --cpu=armeabi-v7a \
+    --crosstool_top=@androidndk//:toolchain-stlport \
+    --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
 }
 
 function test_crosstool_libcpp() {
@@ -416,6 +437,12 @@
     --cpu=armeabi-v7a \
     --crosstool_top=@androidndk//:toolchain-libcpp \
     --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
+
+  assert_build //:foo \
+    --features=compiler_param_file \
+    --cpu=armeabi-v7a \
+    --crosstool_top=@androidndk//:toolchain-libcpp \
+    --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
 }
 
 function test_crosstool_gnu_libstdcpp() {
@@ -447,6 +474,12 @@
     --cpu=armeabi-v7a \
     --crosstool_top=@androidndk//:toolchain-gnu-libstdcpp \
     --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
+
+  assert_build //:foo \
+    --features=compiler_param_file \
+    --cpu=armeabi-v7a \
+    --crosstool_top=@androidndk//:toolchain-gnu-libstdcpp \
+    --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
 }
 
 function test_platforms_and_toolchains() {
@@ -487,6 +520,14 @@
     --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
     --platforms=//:android_arm \
     --extra_toolchains=@androidndk//:all
+
+  assert_build //:foo \
+    --features=compiler_param_file \
+    --cpu=armeabi-v7a \
+    --crosstool_top=@androidndk//:toolchain-libcpp \
+    --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
+    --platforms=//:android_arm \
+    --extra_toolchains=@androidndk//:all
 }
 
 function test_crosstool_libcpp_with_multiarch() {
@@ -508,6 +549,13 @@
     --fat_apk_cpu="$cpus" \
     --android_crosstool_top=@androidndk//:toolchain-libcpp \
     --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
+
+  assert_build //java/bazel:bin \
+    --features=compiler_param_file \
+    --fat_apk_cpu="$cpus" \
+    --android_crosstool_top=@androidndk//:toolchain-libcpp \
+    --host_crosstool_top=@bazel_tools//tools/cpp:toolchain
+
   check_num_sos
   check_soname
 }