diff options
| author | Frédéric Desbiens <[email protected]> | 2026-10-02 10:42:44 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-10-02 10:42:44 -0400 |
| commit | 93387b0a60382a29579bbad5045c68328e3751df (patch) | |
| tree | 42be790d602cb76f55090e5a7c418df7ea2b3428 /scripts/install_riscv.sh | |
| parent | 44d7c95c582d415c4ad84527180b29c93c3bf664 (diff) | |
| parent | 28281cd5647d4671236ca08d19bd18ed15b2265a (diff) | |
Merge pull request #783 from eclipse-threadx/devv6.5.2.202603_rel
Merged changes ahead of the v6.5.2.202603 release
Diffstat (limited to 'scripts/install_riscv.sh')
| -rwxr-xr-x | scripts/install_riscv.sh | 52 |
1 files changed, 48 insertions, 4 deletions
diff --git a/scripts/install_riscv.sh b/scripts/install_riscv.sh index 41642e70..21e3ac85 100755 --- a/scripts/install_riscv.sh +++ b/scripts/install_riscv.sh @@ -10,26 +10,67 @@ # SPDX-License-Identifier: MIT ############################################################################## +# Portions of this file were generated with AI assistance. + # Install RISC-V bare-metal cross-compiler toolchain and QEMU for CI. set -e +# retry, TIMEOUT, TIMEOUT_LONG, APT_OPTIONS and fetch. Shared with install.sh, +# which is where they were written and where the reasons for their shape are +# recorded. +. "$(dirname "$(realpath "$0")")/tx_ci_common.sh" + +# The release tag is pinned so that what CI compiles with is answerable from the +# repository, and the digests pin the bytes behind the tag. A tag can be deleted +# and re-pushed and a release asset can be replaced; either would be picked up +# silently without these. Both digests were taken from the releases API and then +# checked against the bytes the CDN actually serves, 10 Sep 2026. Moving the tag +# means refreshing all three lines together. 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" +RV32_SHA256="73c9a5adbb38b779312e5b3fc10d624484364ef1f870314571ae92c486ba9917" RV64_TARBALL="riscv64-elf-ubuntu-24.04-gcc.tar.xz" +RV64_SHA256="4a66a329653c9cfb869b826cae6d70c603bedcc1e13d419d3e3e92b99e0816b1" echo "=== Installing QEMU and build tools ===" -sudo apt-get update -qq -sudo apt-get install -y -qq qemu-system-misc ninja-build cmake + +# The update warns rather than gates, for the reason install.sh sets out at +# length: apt-get update fails if ANY configured repository serves a bad index, +# including the third-party ones the runner image carries and this project does +# not use. The install below is the gate, and it still fails hard on a package +# it cannot get. Under set -e a bare update would have ended the job -- and with +# the RISC-V suite running on every pull request, ended it for everybody. +if ! retry sudo "${TIMEOUT[@]}" apt-get "${APT_OPTIONS[@]}" update; then + echo "" + echo "install_riscv.sh: apt-get update did not fully succeed." + echo "install_riscv.sh: continuing, because a repository this project does" + echo "install_riscv.sh: not use can fail an update. The install below is" + echo "install_riscv.sh: the real gate." + echo "" +fi +# --no-install-recommends, because qemu-system-misc recommends a desktop media +# stack it does not need here. With recommends the install fetches 67 packages +# and 87 MB, 26 of them gstreamer, pulseaudio, v4l and codec libraries, for a +# job that runs qemu-system-riscv64 headless. That download is what pushes the +# install past its two-minute budget on a slow mirror, and a larger budget is +# not available: TIMEOUT_LONG is already sized so three attempts fit the step cap. +retry sudo "${TIMEOUT[@]}" apt-get "${APT_OPTIONS[@]}" install -y \ + --no-install-recommends \ + qemu-system-misc \ + ninja-build \ + cmake || exit 1 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 +for spec in "${RV32_TARBALL}:${RV32_SHA256}" "${RV64_TARBALL}:${RV64_SHA256}"; do + tarball="${spec%%:*}" + sha256="${spec##*:}" echo "Downloading ${tarball} ..." - wget --no-verbose "${BASE_URL}/${tarball}" -O "/tmp/${tarball}" + fetch "${BASE_URL}/${tarball}" "/tmp/${tarball}" "${sha256}" || exit 1 sudo tar xJf "/tmp/${tarball}" -C /opt rm "/tmp/${tarball}" done @@ -40,4 +81,7 @@ 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 +# Both QEMU system emulators are used -- run.sh selects one per architecture -- +# so both are worth failing on here rather than at the first test. +qemu-system-riscv32 --version | head -1 qemu-system-riscv64 --version | head -1 |
