Consolidate cross-compile targets in CI (#10746)

Consolidate cross-compile CI targets (andoird, rv64, rv32-baremetal,
rv32-linux) into a matrix.

Emscripten is currently standalone because it is in postsubmit only.
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e8b5590..e3ee6af 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -561,73 +561,10 @@
   ############################## Crosscompilation ##############################
   # Jobs that cross-compile IREE for other platforms
   ##############################################################################
-  android_arm64:
-    needs: [setup, build_all]
-    if: needs.setup.outputs.should-run == 'true'
-    runs-on:
-      - self-hosted  # must come first
-      - runner-group=${{ needs.setup.outputs.runner-group }}
-      - environment=${{ needs.setup.outputs.runner-env }}
-      - cpu
-      - os-family=Linux
-    env:
-      ANDROID_ABI: "arm64-v8a"
-      BUILD_DIR: ${{ needs.build_all.outputs.build-dir }}
-      BUILD_DIR_ARCHIVE: ${{ needs.build_all.outputs.build-dir-archive }}
-      BUILD_DIR_GCS_ARTIFACT: ${{ needs.build_all.outputs.build-dir-gcs-artifact }}
-    steps:
-      - name: "Checking out repository"
-        uses: actions/checkout@7884fcad6b5d53d10323aee724dc68d8b9096a2e # v2
-      - name: "Checking out runtime submodules"
-        run: ./build_tools/scripts/git/update_runtime_submodules.sh
-      - name: "Downloading build dir archive"
-        run: gcloud alpha storage cp "${BUILD_DIR_GCS_ARTIFACT}" "${BUILD_DIR_ARCHIVE}"
-      - name: "Extracting install from build dir archive"
-        run: tar -xf "${BUILD_DIR_ARCHIVE}" "${BUILD_DIR}/install"
-      - name: "Building for Android"
-        run: |
-          build_tools/github_actions/docker_run.sh \
-            --env "ANDROID_ABI=${ANDROID_ABI}" \
-            --env "IREE_HOST_BINARY_ROOT=${BUILD_DIR}/install" \
-            gcr.io/iree-oss/android@sha256:76c2a52dcd6d07601227b965ac87d021c1d2d5e2d01f46ad58da28c89267f2ab \
-            build_tools/cmake/build_android.sh
 
-  baremetal_riscv32:
-    needs: [setup, build_all]
-    if: needs.setup.outputs.should-run == 'true'
-    runs-on:
-      - self-hosted  # must come first
-      - runner-group=${{ needs.setup.outputs.runner-group }}
-      - environment=${{ needs.setup.outputs.runner-env }}
-      - cpu
-      - os-family=Linux
-    env:
-      BUILD_RISCV_DIR: "build-riscv32-baremetal"
-      BUILD_ARCH: "rv32-baremetal"
-      BUILD_DIR: ${{ needs.build_all.outputs.build-dir }}
-      BUILD_DIR_ARCHIVE: ${{ needs.build_all.outputs.build-dir-archive }}
-      BUILD_DIR_GCS_ARTIFACT: ${{ needs.build_all.outputs.build-dir-gcs-artifact }}
-    steps:
-      - name: "Checking out repository"
-        uses: actions/checkout@7884fcad6b5d53d10323aee724dc68d8b9096a2e # v2
-      - name: "Checking out runtime submodules"
-        run: ./build_tools/scripts/git/update_runtime_submodules.sh
-      - name: "Downloading build dir archive"
-        run: gcloud alpha storage cp "${BUILD_DIR_GCS_ARTIFACT}" "${BUILD_DIR_ARCHIVE}"
-      - name: "Extracting install from build dir archive"
-        run: tar -xf "${BUILD_DIR_ARCHIVE}" "${BUILD_DIR}/install"
-      - name: "Cross-compiling and testing riscv32 baremetal"
-        run: |
-          ./build_tools/github_actions/docker_run.sh \
-            --env "RISCV_ARCH=${BUILD_ARCH}" \
-            --env "BUILD_RISCV_DIR=${BUILD_RISCV_DIR}" \
-            --env "BUILD_PRESET=test" \
-            --env "IREE_HOST_BINARY_ROOT=${BUILD_DIR}/install" \
-            gcr.io/iree-oss/riscv@sha256:d6f0e293a50faf5abbd564c1d1bb9dc6456d7ce93d07b131c381fa64c1daed62 \
-            bash -euo pipefail -c \
-            "./build_tools/cmake/build_riscv.sh && tests/riscv32/smoke.sh"
-
-  linux_riscv:
+  # emscripten is not in the test matrix because it is set as
+  # postsubmission-only.
+  cross_compile_and_test:
     needs: [setup, build_all]
     if: needs.setup.outputs.should-run == 'true'
     runs-on:
@@ -638,10 +575,33 @@
       - os-family=Linux
     strategy:
       matrix:
-        architecture: [rv64, rv32-linux]
+        target:
+          - platform: android
+            architecture: arm64-v8a
+            abi: arm64-v8a
+            docker_image: "gcr.io/iree-oss/android@sha256:76c2a52dcd6d07601227b965ac87d021c1d2d5e2d01f46ad58da28c89267f2ab"
+            test_script: "echo 'bypass tests'"
+          - platform: riscv
+            architecture: rv64
+            abi: lp64d
+            docker_image: "gcr.io/iree-oss/riscv@sha256:d6f0e293a50faf5abbd564c1d1bb9dc6456d7ce93d07b131c381fa64c1daed62"
+            test_script: "./build_tools/cmake/test_riscv.sh"
+          - platform: riscv
+            architecture: rv32-linux
+            abi: ilp32d
+            docker_image: "gcr.io/iree-oss/riscv@sha256:d6f0e293a50faf5abbd564c1d1bb9dc6456d7ce93d07b131c381fa64c1daed62"
+            test_script: "./build_tools/cmake/test_riscv.sh"
+          - platform: riscv
+            architecture: rv32-baremetal
+            abi: ilp32
+            docker_image: "gcr.io/iree-oss/riscv@sha256:d6f0e293a50faf5abbd564c1d1bb9dc6456d7ce93d07b131c381fa64c1daed62"
+            test_script: "./tests/riscv32/smoke.sh"
     env:
-      BUILD_RISCV_DIR: build-${{ matrix.architecture }}
-      BUILD_ARCH: ${{ matrix.architecture }}
+      PLATFORM: ${{ matrix.target.platform }}
+      ARCHITECTURE: ${{ matrix.target.architecture }}
+      ABI: ${{ matrix.target.abi }}
+      DOCKER_IMAGE: ${{ matrix.target.docker_image }}
+      TEST_SCRIPT: ${{ matrix.target.test_script }}
       BUILD_DIR: ${{ needs.build_all.outputs.build-dir }}
       BUILD_DIR_ARCHIVE: ${{ needs.build_all.outputs.build-dir-archive }}
       BUILD_DIR_GCS_ARTIFACT: ${{ needs.build_all.outputs.build-dir-gcs-artifact }}
@@ -654,18 +614,25 @@
         run: gcloud alpha storage cp "${BUILD_DIR_GCS_ARTIFACT}" "${BUILD_DIR_ARCHIVE}"
       - name: "Extracting build dir archive"
         run: tar -xf "${BUILD_DIR_ARCHIVE}" "${BUILD_DIR}/install"
-      - name: "Cross-compiling and testing RISC-V Linux"
-        env:
-          BUILD_BENCHMARK_SUITE_DIR: ${{ steps.download_expected_output.outputs.benchmark-suite-dir }}
+      - name: "Build cross-compiling target"
         run: |
           ./build_tools/github_actions/docker_run.sh \
-            --env "RISCV_ARCH=${BUILD_ARCH}" \
-            --env "BUILD_RISCV_DIR=${BUILD_RISCV_DIR}" \
+            --env "${PLATFORM^^}_ARCH=${ARCHITECTURE}" \
+            --env "BUILD_${PLATFORM^^}_DIR=build-${PLATFORM}-${ARCHITECTURE}" \
+            --env "${PLATFORM^^}_ABI=${ABI}" \
             --env "BUILD_PRESET=test" \
             --env "IREE_HOST_BINARY_ROOT=${BUILD_DIR}/install" \
-            gcr.io/iree-oss/riscv@sha256:d6f0e293a50faf5abbd564c1d1bb9dc6456d7ce93d07b131c381fa64c1daed62 \
+            "${DOCKER_IMAGE}" \
+            ./build_tools/cmake/build_${PLATFORM}.sh
+      - name: "Test cross-compiling target"
+        run: |
+          ./build_tools/github_actions/docker_run.sh \
+            --env "${PLATFORM^^}_ARCH=${ARCHITECTURE}" \
+            --env "BUILD_${PLATFORM^^}_DIR=build-${PLATFORM}-${ARCHITECTURE}" \
+            --env "BUILD_PRESET=test" \
+            "${DOCKER_IMAGE}" \
             bash -euo pipefail -c \
-              "./build_tools/cmake/build_riscv.sh && ./build_tools/cmake/test_riscv.sh"
+              "${TEST_SCRIPT}"
 
   emscripten:
     needs: [setup, build_all]
@@ -805,9 +772,7 @@
       - tsan
 
       # Crosscompilation
-      - android_arm64
-      - baremetal_riscv32
-      - linux_riscv
+      - cross_compile_and_test
       - emscripten
 
       # Benchmark pipeline
diff --git a/build_tools/cmake/build_android.sh b/build_tools/cmake/build_android.sh
index 9690707..764a704 100755
--- a/build_tools/cmake/build_android.sh
+++ b/build_tools/cmake/build_android.sh
@@ -20,6 +20,8 @@
 CMAKE_BIN="${CMAKE_BIN:-$(which cmake)}"
 IREE_HOST_BINARY_ROOT="$(realpath ${IREE_HOST_BINARY_ROOT})"
 BUILD_ANDROID_DIR="${BUILD_ANDROID_DIR:-$ROOT_DIR/build-android}"
+BUILD_BENCHMARK_SUITE_DIR="${BUILD_BENCHMARK_SUITE_DIR:-$ROOT_DIR/build-benchmarks/benchmark_suites}"
+BUILD_PRESET="${BUILD_PRESET:-test}"
 
 
 if [[ -d "${BUILD_ANDROID_DIR}" ]]; then
@@ -36,12 +38,43 @@
   -DANDROID_ABI="${ANDROID_ABI}"
   -DANDROID_PLATFORM=android-29
   -DIREE_HOST_BINARY_ROOT="${IREE_HOST_BINARY_ROOT}"
-  -DIREE_ENABLE_ASSERTIONS=ON
   -DIREE_BUILD_COMPILER=OFF
   -DIREE_BUILD_TESTS=ON
   -DIREE_BUILD_SAMPLES=OFF
 )
 
+case "${BUILD_PRESET}" in
+  test)
+    args+=(
+      -DIREE_ENABLE_ASSERTIONS=ON
+    )
+    ;;
+  benchmark)
+    args+=(
+      -DIREE_ENABLE_ASSERTIONS=OFF
+      -DIREE_BUILD_TESTS=OFF
+    )
+    ;;
+  benchmark-with-tracing)
+    args+=(
+      -DIREE_ENABLE_ASSERTIONS=OFF
+      -DIREE_BUILD_TESTS=OFF
+      -DIREE_ENABLE_RUNTIME_TRACING=ON
+    )
+    ;;
+  benchmark-suite-test)
+    BUILD_BENCHMARK_SUITE_DIR="$(realpath ${BUILD_BENCHMARK_SUITE_DIR})"
+    args+=(
+      -DIREE_ENABLE_ASSERTIONS=ON
+      -DIREE_BENCHMARK_SUITE_DIR="${BUILD_BENCHMARK_SUITE_DIR}"
+    )
+    ;;
+  *)
+    echo "Unknown build preset: ${BUILD_PRESET}"
+    exit 1
+    ;;
+esac
+
 # Configure towards 64-bit Android 10, then build.
 "${CMAKE_BIN}" "${args[@]}"