Skip to content

feat(riscof): 集成 RISCOF 对比验证链路并补齐签名导出能力 #34

feat(riscof): 集成 RISCOF 对比验证链路并补齐签名导出能力

feat(riscof): 集成 RISCOF 对比验证链路并补齐签名导出能力 #34

Workflow file for this run

name: CI
on:
push:
branches: ["**"]
pull_request:
branches: ["**"]
jobs:
build-test:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install Test Dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libgtest-dev \
gcc-riscv64-unknown-elf \
binutils-riscv64-unknown-elf \
picolibc-riscv64-unknown-elf
sudo cmake -S /usr/src/googletest -B /tmp/gtest
sudo cmake --build /tmp/gtest
sudo install -m 644 /tmp/gtest/lib/libgtest*.a /usr/lib
- name: Init Submodules
run: git submodule update --init --recursive
- name: Build ISA Tests (p-only)
run: |
make -C riscv-tests/isa -f Makefile \
src_dir="${GITHUB_WORKSPACE}/riscv-tests/isa" \
XLEN=64 \
tests='$(rv32ui_p_tests) $(rv32uc_p_tests) $(rv32um_p_tests) $(rv32ua_p_tests) $(rv32uf_p_tests) $(rv32ud_p_tests) $(rv32uzfh_p_tests) $(rv32uzba_p_tests) $(rv32uzbb_p_tests) $(rv32uzbc_p_tests) $(rv32uzbs_p_tests) $(rv32si_p_tests) $(rv32mi_p_tests) $(rv64ui_p_tests) $(rv64ua_p_tests) $(rv64uc_p_tests) $(rv64ud_p_tests) $(rv64uf_p_tests) $(rv64um_p_tests)'
- name: Build riscv-tests Benchmarks
shell: bash
run: |
set -euo pipefail
include_dir="/usr/lib/picolibc/riscv64-unknown-elf/include"
if [[ ! -d "${include_dir}" ]]; then
include_dir="$(dpkg -L picolibc-riscv64-unknown-elf | grep '/include$' | head -n1)"
fi
libm_path="$(find /usr/lib/picolibc/riscv64-unknown-elf/lib -path '*rv64*lp64d*/libm.a' -print | head -n1 || true)"
if [[ -z "${libm_path}" ]]; then
libm_path="$(dpkg -L picolibc-riscv64-unknown-elf | grep '/libm\.a$' | grep 'rv64' | grep 'lp64d' | head -n1 || true)"
fi
if [[ -z "${libm_path}" ]]; then
echo "ERROR: 未找到 rv64/lp64d 的 picolibc libm.a,请检查 runner 上的 picolibc 包内容" >&2
exit 1
fi
lib_dir="$(dirname "${libm_path}")"
riscv_gcc_benchmark="riscv64-unknown-elf-gcc"
specs_file="$(riscv64-unknown-elf-gcc -print-file-name=picolibc.specs)"
if [[ "${specs_file}" != "picolibc.specs" && -f "${specs_file}" ]]; then
riscv_gcc_benchmark="riscv64-unknown-elf-gcc -specs=${specs_file}"
echo "Detected picolibc specs: ${specs_file}"
else
echo "picolibc.specs not found in GCC search path, fallback to default gcc + LIBRARY_PATH"
fi
echo "Detected include dir: ${include_dir}"
echo "Detected lib dir: ${lib_dir}"
make -C riscv-tests/benchmarks -f Makefile \
src_dir="${GITHUB_WORKSPACE}/riscv-tests/benchmarks" \
XLEN=64 \
CPATH="${include_dir}" \
C_INCLUDE_PATH="${include_dir}" \
LIBRARY_PATH="${lib_dir}" \
RISCV_GCC="${riscv_gcc_benchmark}"
- name: Configure
run: cmake -S . -B build
- name: Build
run: cmake --build build -j
- name: Unit Tests
run: ctest --test-dir build --output-on-failure
- name: ISA Tests (rv64, in-order + ooo)
run: |
python3 run_tests.py -p "rv64*-p-*" -w 1 --timeout 20
python3 run_tests.py -p "rv64*-p-*" --ooo -w 1 --timeout 30
- name: Benchmarks (supported, blocking)
run: |
supported_benchmarks=(
dhrystone.riscv
median.riscv
memcpy.riscv
mm.riscv
mt-matmul.riscv
mt-memcpy.riscv
mt-vvadd.riscv
multiply.riscv
qsort.riscv
rsort.riscv
spmv.riscv
towers.riscv
vvadd.riscv
)
for benchmark in "${supported_benchmarks[@]}"; do
echo "Running benchmark: ${benchmark}"
python3 run_tests.py --tests-subdir benchmarks -p "${benchmark}" -w 1 --timeout 180
done
- name: Benchmarks (known unsupported, non-blocking)
continue-on-error: true
run: |
known_unsupported=(
pmp.riscv
vec-daxpy.riscv
vec-memcpy.riscv
vec-sgemm.riscv
vec-strcmp.riscv
)
for benchmark in "${known_unsupported[@]}"; do
echo "Running known-unsupported benchmark: ${benchmark}"
python3 run_tests.py --tests-subdir benchmarks -p "${benchmark}" -w 1 --timeout 180 || true
done