kleaf: Support i386 toolchain.

We have i686 kernel builds.

Test: TH
Bug: 287296554
Change-Id: I00159321c8d8b6cdfb4aa32ecdff9f9bcb205a92
diff --git a/kleaf/BUILD.bazel b/kleaf/BUILD.bazel
index 28b96cc..bc6eca9 100644
--- a/kleaf/BUILD.bazel
+++ b/kleaf/BUILD.bazel
@@ -21,6 +21,7 @@
     ":clang_toolchain.bzl",
     "android_arm64_clang_toolchain",
     "android_arm_clang_toolchain",
+    "android_i386_clang_toolchain",
     "android_riscv64_clang_toolchain",
     "android_x86_64_clang_toolchain",
     "linux_x86_64_clang_toolchain",
@@ -57,6 +58,11 @@
     clang_version = VARS["CLANG_VERSION"],
 )
 
+android_i386_clang_toolchain(
+    name = "android_i386_clang_toolchain",
+    clang_version = VARS["CLANG_VERSION"],
+)
+
 android_x86_64_clang_toolchain(
     name = "android_x86_64_clang_toolchain",
     clang_version = VARS["CLANG_VERSION"],
@@ -95,6 +101,12 @@
     extra_compatible_with = [version],
 ) for version in VERSIONS]
 
+[android_i386_clang_toolchain(
+    name = version + "_android_i386_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 ac3afea..f30254f 100644
--- a/kleaf/clang_config.bzl
+++ b/kleaf/clang_config.bzl
@@ -50,8 +50,9 @@
     implementation = _impl,
     attrs = {
         "target_cpu": attr.string(mandatory = True, values = [
-            "arm64",
             "arm",
+            "arm64",
+            "i386",
             "riscv64",
             "x86_64",
         ]),
diff --git a/kleaf/clang_toolchain.bzl b/kleaf/clang_toolchain.bzl
index a47b230..203ca16 100644
--- a/kleaf/clang_toolchain.bzl
+++ b/kleaf/clang_toolchain.bzl
@@ -255,6 +255,31 @@
         extra_compatible_with = extra_compatible_with,
     )
 
+def android_i386_clang_toolchain(
+        name,
+        clang_version,
+        extra_compatible_with = None):
+    """Declare an android_i386 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,
+        # i386 uses the same NDK_TRIPLE as x86_64
+        ndk_triple = VARS.get("X86_64_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 "X86_64_NDK_TRIPLE" in VARS else None,
+        sysroot_path = "external/prebuilt_ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot" if "X86_64_NDK_TRIPLE" in VARS else None,
+        target_cpu = "i386",
+        target_os = "android",
+        extra_compatible_with = extra_compatible_with,
+    )
+
 def android_riscv64_clang_toolchain(
         name,
         clang_version,
diff --git a/kleaf/register.bzl b/kleaf/register.bzl
index 264568b..43ed6a4 100644
--- a/kleaf/register.bzl
+++ b/kleaf/register.bzl
@@ -23,15 +23,17 @@
         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_i386_clang_toolchain".format(version),
             "//prebuilts/clang/host/linux-x86/kleaf:{}_android_riscv64_clang_toolchain".format(version),
+            "//prebuilts/clang/host/linux-x86/kleaf:{}_android_x86_64_clang_toolchain".format(version),
             "//prebuilts/clang/host/linux-x86/kleaf:{}_linux_x86_64_clang_toolchain".format(version),
         )
 
     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_i386_clang_toolchain",
         "//prebuilts/clang/host/linux-x86/kleaf:android_riscv64_clang_toolchain",
+        "//prebuilts/clang/host/linux-x86/kleaf:android_x86_64_clang_toolchain",
         "//prebuilts/clang/host/linux-x86/kleaf:linux_x86_64_clang_toolchain",
     )