kleaf: Support arm 32-bit clang toolchains.

We have arm kernel builds and u-boot builds,
though we don't build arm GKI.

Test: TH
Bug: 281851784
Change-Id: I37d61402cf2e7a77bd5364e42fb33c923921d5e1
diff --git a/kleaf/BUILD.bazel b/kleaf/BUILD.bazel
index 4454530..28b96cc 100644
--- a/kleaf/BUILD.bazel
+++ b/kleaf/BUILD.bazel
@@ -20,6 +20,7 @@
 load(
     ":clang_toolchain.bzl",
     "android_arm64_clang_toolchain",
+    "android_arm_clang_toolchain",
     "android_riscv64_clang_toolchain",
     "android_x86_64_clang_toolchain",
     "linux_x86_64_clang_toolchain",
@@ -51,6 +52,11 @@
     clang_version = VARS["CLANG_VERSION"],
 )
 
+android_arm_clang_toolchain(
+    name = "android_arm_clang_toolchain",
+    clang_version = VARS["CLANG_VERSION"],
+)
+
 android_x86_64_clang_toolchain(
     name = "android_x86_64_clang_toolchain",
     clang_version = VARS["CLANG_VERSION"],
@@ -83,6 +89,12 @@
     extra_compatible_with = [version],
 ) for version in VERSIONS]
 
+[android_arm_clang_toolchain(
+    name = version + "_android_arm_clang_toolchain",
+    clang_version = version,
+    extra_compatible_with = [version],
+) for version in VERSIONS]
+
 [android_x86_64_clang_toolchain(
     name = version + "_android_x86_64_clang_toolchain",
     clang_version = version,
diff --git a/kleaf/clang_config.bzl b/kleaf/clang_config.bzl
index 1fc3bb3..ac3afea 100644
--- a/kleaf/clang_config.bzl
+++ b/kleaf/clang_config.bzl
@@ -51,6 +51,7 @@
     attrs = {
         "target_cpu": attr.string(mandatory = True, values = [
             "arm64",
+            "arm",
             "riscv64",
             "x86_64",
         ]),
diff --git a/kleaf/clang_toolchain.bzl b/kleaf/clang_toolchain.bzl
index 56e3922..a47b230 100644
--- a/kleaf/clang_toolchain.bzl
+++ b/kleaf/clang_toolchain.bzl
@@ -207,6 +207,30 @@
         extra_compatible_with = extra_compatible_with,
     )
 
+def android_arm_clang_toolchain(
+        name,
+        clang_version,
+        extra_compatible_with = None):
+    """Declare an android_arm (32-bit) toolchain.
+
+    Args:
+        name: name prefix
+        clang_version: `CLANG_VERSION`
+        extra_compatible_with: extra `exec_compatible_with` and `target_compatible_with`
+    """
+    clang_toolchain(
+        name = name,
+        clang_version = clang_version,
+        ndk_triple = VARS.get("ARM_NDK_TRIPLE"),
+        # From _setup_env.sh: when NDK triple is set,
+        # --sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot
+        sysroot_label = "@prebuilt_ndk//:sysroot" if "ARM_NDK_TRIPLE" in VARS else None,
+        sysroot_path = "external/prebuilt_ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot" if "AARCH64_NDK_TRIPLE" in VARS else None,
+        target_cpu = "arm",
+        target_os = "android",
+        extra_compatible_with = extra_compatible_with,
+    )
+
 def android_x86_64_clang_toolchain(
         name,
         clang_version,
diff --git a/kleaf/register.bzl b/kleaf/register.bzl
index a1d01fc..264568b 100644
--- a/kleaf/register.bzl
+++ b/kleaf/register.bzl
@@ -22,6 +22,7 @@
     for version in VERSIONS:
         native.register_toolchains(
             "//prebuilts/clang/host/linux-x86/kleaf:{}_android_arm64_clang_toolchain".format(version),
+            "//prebuilts/clang/host/linux-x86/kleaf:{}_android_arm_clang_toolchain".format(version),
             "//prebuilts/clang/host/linux-x86/kleaf:{}_android_x86_64_clang_toolchain".format(version),
             "//prebuilts/clang/host/linux-x86/kleaf:{}_android_riscv64_clang_toolchain".format(version),
             "//prebuilts/clang/host/linux-x86/kleaf:{}_linux_x86_64_clang_toolchain".format(version),
@@ -29,6 +30,7 @@
 
     native.register_toolchains(
         "//prebuilts/clang/host/linux-x86/kleaf:android_arm64_clang_toolchain",
+        "//prebuilts/clang/host/linux-x86/kleaf:android_arm_clang_toolchain",
         "//prebuilts/clang/host/linux-x86/kleaf:android_x86_64_clang_toolchain",
         "//prebuilts/clang/host/linux-x86/kleaf:android_riscv64_clang_toolchain",
         "//prebuilts/clang/host/linux-x86/kleaf:linux_x86_64_clang_toolchain",