Add `riscv32` CI run
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 88dc7b8..3c2b611 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -58,6 +58,8 @@
os: ubuntu-latest
- tuple: aarch64_be-unknown-linux-gnu
os: ubuntu-latest
+ - tuple: riscv32gc-unknown-linux-gnu
+ os: ubuntu-latest
- tuple: riscv64gc-unknown-linux-gnu
os: ubuntu-latest
- tuple: powerpc-unknown-linux-gnu
@@ -155,6 +157,11 @@
os: ubuntu-latest
test_everything: true
- target:
+ tuple: riscv32gc-unknown-linux-gnu
+ os: ubuntu-latest
+ test_everything: true
+ build_std: true
+ - target:
tuple: riscv64gc-unknown-linux-gnu
os: ubuntu-latest
test_everything: true
@@ -237,7 +244,7 @@
# ... while Linux goes to `run-docker.sh`
- run: ./ci/run-docker.sh ${{ matrix.target.tuple }}
shell: bash
- if: "matrix.target.os == 'ubuntu-latest' && !startsWith(matrix.target.tuple, 'thumb')"
+ if: matrix.target.os == 'ubuntu-latest' && !startsWith(matrix.target.tuple, 'thumb')
env:
TARGET: ${{ matrix.target.tuple }}
diff --git a/ci/docker/riscv32gc-unknown-linux-gnu/Dockerfile b/ci/docker/riscv32gc-unknown-linux-gnu/Dockerfile
new file mode 100644
index 0000000..81f7b62
--- /dev/null
+++ b/ci/docker/riscv32gc-unknown-linux-gnu/Dockerfile
@@ -0,0 +1,15 @@
+FROM ubuntu:25.04
+
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ gcc libc6-dev qemu-user ca-certificates \
+ wget xz-utils make file llvm
+
+ENV VERSION=2025.01.20
+
+RUN wget "https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/${VERSION}/riscv32-glibc-ubuntu-24.04-gcc-nightly-${VERSION}-nightly.tar.xz" \
+ -O riscv-toolchain.tar.xz
+RUN tar -xJf riscv-toolchain.tar.xz
+
+ENV CARGO_TARGET_RISCV32GC_UNKNOWN_LINUX_GNU_LINKER=/riscv/bin/riscv32-unknown-linux-gnu-gcc \
+ CARGO_TARGET_RISCV32GC_UNKNOWN_LINUX_GNU_RUNNER="qemu-riscv32 -cpu max -L /riscv/sysroot" \
+ OBJDUMP=llvm-objdump
diff --git a/ci/run.sh b/ci/run.sh
index 522b266..fd7ec81 100755
--- a/ci/run.sh
+++ b/ci/run.sh
@@ -44,9 +44,8 @@
;;
# Some of our test dependencies use the deprecated `gcc` crates which
# doesn't detect RISC-V compilers automatically, so do it manually here.
- riscv64*)
+ riscv*)
export RUSTFLAGS="${RUSTFLAGS} -Ctarget-feature=+zk,+zks,+zbb,+zbc"
- export TARGET_CC="riscv64-linux-gnu-gcc"
;;
esac
diff --git a/crates/stdarch-test/src/disassembly.rs b/crates/stdarch-test/src/disassembly.rs
index 49043ee..f5167ea 100644
--- a/crates/stdarch-test/src/disassembly.rs
+++ b/crates/stdarch-test/src/disassembly.rs
@@ -77,7 +77,7 @@
let add_args = if cfg!(target_vendor = "apple") && cfg!(target_arch = "aarch64") {
// Target features need to be enabled for LLVM objdump on Darwin ARM64
vec!["--mattr=+v8.6a,+crypto,+tme"]
- } else if cfg!(target_arch = "riscv64") {
+ } else if cfg!(any(target_arch = "riscv32", target_arch = "riscv64")) {
vec!["--mattr=+zk,+zks,+zbc,+zbb"]
} else {
vec![]