mirror of
https://github.com/eclipse-threadx/threadx.git
synced 2026-08-17 17:43:54 +08:00
Added a QEMU virt-machine BSP and CTest infrastructure to run the ThreadX regression suite on both RISC-V 32-bit and 64-bit targets in CI. New components: - BSP (entry, trap, PLIC, CLINT timer, UART, linker script) targeting QEMU virt machine for RV32 and RV64 - CMake build system with Ninja, supporting multiple build configs - CI scripts: install_riscv.sh (toolchain + QEMU), build_tx_riscv.sh, test_tx_riscv.sh - GitHub Actions workflow job for RISC-V regression gating Port fixes: - RV32 tx_thread_context_restore.S: set MPIE alongside MPP (0x1800 → 0x1880) so mret re-enables interrupts - RV32/RV64 tx_port.h: add TX_REGRESSION_TEST extension macros needed by the test harness - RV32/RV64 example_build scripts: add compile and QEMU launch steps Regression test portability fixes: - Block memory tests: increase pool sizes (320 → 340) to accommodate larger RISC-V block-header alignment - Byte memory test: replace hardcoded offsets with BYTE_POOL_OVERHEAD macro for portable pool-size computation - Event flag timeout test: make counter tolerance unconditional, removing linux-only guard Signed-off-by: Akif Ejaz <akif.ejaz@10xengineers.ai>
33 lines
1.2 KiB
Bash
Executable File
33 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# Install RISC-V bare-metal cross-compiler toolchain and QEMU for CI.
|
|
set -e
|
|
|
|
RELEASE_TAG="2026.04.26"
|
|
BASE_URL="https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/${RELEASE_TAG}"
|
|
# Use ubuntu-24.04 binaries to match ubuntu-latest runners.
|
|
RV32_TARBALL="riscv32-elf-ubuntu-24.04-gcc.tar.xz"
|
|
RV64_TARBALL="riscv64-elf-ubuntu-24.04-gcc.tar.xz"
|
|
|
|
echo "=== Installing QEMU and build tools ==="
|
|
sudo apt-get update -qq
|
|
sudo apt-get install -y -qq qemu-system-misc ninja-build cmake
|
|
|
|
echo "=== Downloading RISC-V GCC toolchain (${RELEASE_TAG}) ==="
|
|
|
|
# Both tarballs extract into riscv/ with non-overlapping prefixes
|
|
# (riscv32-unknown-elf-* and riscv64-unknown-elf-*).
|
|
for tarball in "$RV32_TARBALL" "$RV64_TARBALL"; do
|
|
echo "Downloading ${tarball} ..."
|
|
wget --no-verbose "${BASE_URL}/${tarball}" -O "/tmp/${tarball}"
|
|
sudo tar xJf "/tmp/${tarball}" -C /opt
|
|
rm "/tmp/${tarball}"
|
|
done
|
|
|
|
TOOLCHAIN_BIN=/opt/riscv/bin
|
|
echo "$TOOLCHAIN_BIN" >> "$GITHUB_PATH"
|
|
|
|
echo "=== Verifying installation ==="
|
|
"$TOOLCHAIN_BIN/riscv32-unknown-elf-gcc" --version | head -1
|
|
"$TOOLCHAIN_BIN/riscv64-unknown-elf-gcc" --version | head -1
|
|
qemu-system-riscv64 --version | head -1
|