Enable riscv64 ci jobs in pkgci.yml. (#18274)

ci-exactly: build_packages, test_riscv64

Signed-off-by: Alex Chiang <alex.chiang@sifive.com>
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 1ac414a..8110e53 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -250,12 +250,6 @@
   #     matrix:
   #       target:
   #         - platform: linux
-  #           arch: riscv_64
-  #           abi: lp64d
-  #           docker_image: "gcr.io/iree-oss/riscv@sha256:62e87bad3405d691ddba6f9be0ef44eeb60461a467c8d86f0842c81a1f97da79"
-  #           build_script: "./build_tools/cmake/build_riscv.sh"
-  #           test_script: "./build_tools/cmake/test_riscv.sh"
-  #         - platform: linux
   #           arch: riscv_32
   #           abi: ilp32d
   #           docker_image: "gcr.io/iree-oss/riscv@sha256:62e87bad3405d691ddba6f9be0ef44eeb60461a467c8d86f0842c81a1f97da79"
diff --git a/.github/workflows/pkgci.yml b/.github/workflows/pkgci.yml
index 2effd75..f156dd8 100644
--- a/.github/workflows/pkgci.yml
+++ b/.github/workflows/pkgci.yml
@@ -85,3 +85,10 @@
     uses: ./.github/workflows/pkgci_test_android.yml
     with:
       write-caches: ${{ needs.setup.outputs.write-caches }}
+
+  test_riscv64:
+    needs: [setup, build_packages]
+    if: contains(fromJson(needs.setup.outputs.enabled-jobs), 'test_riscv64')
+    uses: ./.github/workflows/pkgci_test_riscv64.yml
+    with:
+      write-caches: ${{ needs.setup.outputs.write-caches }}
diff --git a/.github/workflows/pkgci_test_riscv64.yml b/.github/workflows/pkgci_test_riscv64.yml
new file mode 100644
index 0000000..e253360
--- /dev/null
+++ b/.github/workflows/pkgci_test_riscv64.yml
@@ -0,0 +1,92 @@
+# Copyright 2024 The IREE Authors
+#
+# Licensed under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+# Workflow for RISCV64 cross-compilation and test jobs.
+# The concurrency of this workflow is controlled by the caller's job.
+
+name: PkgCI Test RISCV64
+
+on:
+  workflow_call:
+    inputs:
+      artifact_run_id:
+        type: string
+        default: ""
+      write-caches:
+        required: true
+        type: string
+  workflow_dispatch:
+    inputs:
+      artifact_run_id:
+        type: string
+        default: ""
+      write-caches:
+        required: true
+        type: string
+
+permissions:
+  contents: read
+
+jobs:
+  cross_compile:
+    runs-on: ubuntu-20.04
+    env:
+      PACKAGE_DOWNLOAD_DIR: ${{ github.workspace }}/.packages
+      VENV_DIR: ${{ github.workspace }}/.venv
+      BOOTSTRAP_WORK_DIR: ${{ github.workspace }}/.bootstrap
+      RISCV_RV64_LINUX_TOOLCHAIN_ROOT: ${{ github.workspace }}/riscv/toolchain
+      QEMU_PATH_PREFIX: ${{ github.workspace }}/riscv/qemu
+    steps:
+      # General setup.
+      - name: "Checking out repository"
+        uses: actions/checkout@v4.1.7
+      - name: "Checking out runtime submodules"
+        run: ./build_tools/scripts/git/update_runtime_submodules.sh
+      - uses: actions/setup-python@v5.1.0
+        with:
+          # Must match the subset of versions built in pkgci_build_packages.
+          python-version: "3.11"
+      - name: ccache
+        uses: hendrikmuhs/ccache-action@v1.2
+        with:
+          key: ${{ github.job }}
+          save: ${{ inputs.write-caches == 1 }}
+      - uses: actions/download-artifact@v4.1.7
+        with:
+          name: linux_x86_64_release_packages
+          path: ${{ env.PACKAGE_DOWNLOAD_DIR }}
+      - name: Install build dependencies
+        run: |
+          sudo apt update
+          sudo apt install -y ninja-build
+          echo "CC=clang" >> $GITHUB_ENV
+          echo "CXX=clang++" >> $GITHUB_ENV
+      - name: Setup base venv
+        run: |
+          ./build_tools/pkgci/setup_venv.py ${VENV_DIR} \
+            --artifact-path=${PACKAGE_DOWNLOAD_DIR} \
+            --fetch-gh-workflow=${{ inputs.artifact_run_id }}
+      - name: Bootstrap
+        env:
+          IREE_ARTIFACT_URL: "https://storage.googleapis.com/iree-shared-files"
+          RISCV_CLANG_TOOLCHAIN_FILE_NAME: "toolchain_iree_manylinux_2_28_20231012.tar.gz"
+          QEMU_FILE_NAME: "qemu-riscv_8.1.2_manylinux_2.28_20231026.tar.gz"
+        run: |
+          mkdir -p ${{ env.BOOTSTRAP_WORK_DIR }}
+          mkdir -p ${{ env.RISCV_RV64_LINUX_TOOLCHAIN_ROOT }}
+          mkdir -p ${{ env.QEMU_PATH_PREFIX }}
+          wget --progress=bar:force:noscroll --directory-prefix="${BOOTSTRAP_WORK_DIR}" "${IREE_ARTIFACT_URL}/${RISCV_CLANG_TOOLCHAIN_FILE_NAME}"
+          tar -C "${{ env.RISCV_RV64_LINUX_TOOLCHAIN_ROOT }}" -xf "${BOOTSTRAP_WORK_DIR}/${RISCV_CLANG_TOOLCHAIN_FILE_NAME}" --no-same-owner --strip-components=1
+          wget --progress=bar:force:noscroll --directory-prefix="${BOOTSTRAP_WORK_DIR}" "${IREE_ARTIFACT_URL}/${QEMU_FILE_NAME}"
+          tar -C "${{ env.QEMU_PATH_PREFIX }}" -xf "${BOOTSTRAP_WORK_DIR}/${QEMU_FILE_NAME}" --no-same-owner --strip-components=1
+      - name: Build riscv64
+        env:
+          IREE_HOST_BIN_DIR: ${{ env.VENV_DIR }}/bin
+        run: ./build_tools/cmake/build_riscv.sh
+      - name: Test riscv64
+        env:
+          QEMU_RV64_BIN: ${{ env.QEMU_PATH_PREFIX }}/qemu-riscv64
+        run: ./build_tools/cmake/test_riscv.sh
diff --git a/build_tools/cmake/test_riscv.sh b/build_tools/cmake/test_riscv.sh
index b78f5f7..1fa6aee 100755
--- a/build_tools/cmake/test_riscv.sh
+++ b/build_tools/cmake/test_riscv.sh
@@ -57,14 +57,6 @@
 echo "******** Running runtime CTest ********"
 ctest ${runtime_ctest_args[@]}
 
-tools_ctest_args=(
-  "--test-dir ${BUILD_DIR}/tools/test"
-  ${ctest_args[@]}
-  "--label-exclude ${runtime_label_exclude_regex}"
-)
-echo "******** Running tools CTest ********"
-ctest ${tools_ctest_args[@]}
-
 if [[ "${RISCV_PLATFORM}-${RISCV_ARCH}" == "linux-riscv_32" ]]; then
   # stablehlo.power is also disabled because musl math library is not compiled for
   # 32-bit.