Documented the MXChip Newlib runtime glue #30
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # | |
| # Copyright (c) 2026 Eclipse ThreadX contributors | |
| # | |
| # This program and the accompanying materials are made available | |
| # under the terms of the MIT license which is available at | |
| # https://opensource.org/licenses/MIT. | |
| # | |
| # SPDX-License-Identifier: MIT | |
| # | |
| name: SampleX CI Verification Pipeline | |
| on: | |
| push: | |
| branches: [ main, master, dev, 'feat/**' ] | |
| pull_request: | |
| branches: [ main, master, dev ] | |
| jobs: | |
| build-riscv-polarfire: | |
| name: Build PolarFire SoC Icicle Kit (64-Bit RISC-V) | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 20 | |
| env: | |
| XPACK_VERSION: 14.3.0-1 | |
| XPACK_TARBALL: xpack-riscv-none-elf-gcc-14.3.0-1-linux-x64.tar.gz | |
| XPACK_SHA256: be1768ef22789f4d9c41384e0261996f51724b84c2efa940d975dd7d9938c726 | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Install CMake and Ninja | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y cmake ninja-build | |
| - name: Cache the xPack RISC-V toolchain | |
| id: cache-xpack | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/riscv-gcc | |
| key: xpack-riscv-none-elf-gcc-${{ env.XPACK_VERSION }}-linux-x64 | |
| - name: Install Pinned xPack RISC-V GCC | |
| if: steps.cache-xpack.outputs.cache-hit != 'true' | |
| run: | | |
| set -euo pipefail | |
| wget -q "https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/download/v${XPACK_VERSION}/${XPACK_TARBALL}" | |
| echo "${XPACK_SHA256} ${XPACK_TARBALL}" | sha256sum --check --strict | |
| mkdir -p $HOME/riscv-gcc | |
| tar -xzf "${XPACK_TARBALL}" -C $HOME/riscv-gcc --strip-components=1 | |
| rm "${XPACK_TARBALL}" | |
| - name: Put the RISC-V toolchain on PATH | |
| run: echo "$HOME/riscv-gcc/bin" >> $GITHUB_PATH | |
| - name: Report the toolchain version | |
| run: riscv-none-elf-gcc --version | |
| - name: Build SampleX PolarFire Executables | |
| run: | | |
| bash targets/Microchip/POLARFIRE_ICICLE_RENODE/scripts/build.sh --rebuild | |
| - name: Verify Both PolarFire ELFs | |
| run: | | |
| # Two executables: the board's own LM75 demo, and the shared portable | |
| # demo from apps/threadx_demo that the NUCLEO-F401RE builds from the | |
| # very same source. | |
| test -f targets/Microchip/POLARFIRE_ICICLE_RENODE/build/app/polarfire_icicle_demo.elf | |
| test -f targets/Microchip/POLARFIRE_ICICLE_RENODE/build/app/polarfire_threadx_demo.elf | |
| echo "[OK] PolarFire LM75 and shared ThreadX demo ELFs verified." | |
| - name: Archive Built PolarFire ELFs | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: polarfire-demo-elf | |
| path: | | |
| targets/Microchip/POLARFIRE_ICICLE_RENODE/build/app/polarfire_icicle_demo.elf | |
| targets/Microchip/POLARFIRE_ICICLE_RENODE/build/app/polarfire_threadx_demo.elf | |
| retention-days: 1 | |
| test-polarfire-renode: | |
| name: Headless Renode Emulation & Assertion Test | |
| needs: build-riscv-polarfire | |
| runs-on: ubuntu-24.04 | |
| # Backstop in case Renode itself wedges before the in-script deadline fires. | |
| timeout-minutes: 15 | |
| env: | |
| RENODE_VERSION: 1.16.1 | |
| RENODE_SHA256: 1a532d4b5b82de0dd154970c401e0c7b0e498d17304b2cecc007e306c8f9617c | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Set Up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.11" | |
| - name: Download Built PolarFire ELFs | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: polarfire-demo-elf | |
| path: targets/Microchip/POLARFIRE_ICICLE_RENODE/build/app | |
| - name: Cache the portable Renode environment | |
| id: cache-renode | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/renode | |
| key: renode-${{ env.RENODE_VERSION }}-linux-portable | |
| - name: Install Pinned Portable Renode Emulation Environment | |
| if: steps.cache-renode.outputs.cache-hit != 'true' | |
| run: | | |
| set -euo pipefail | |
| TARBALL="renode-${RENODE_VERSION}.linux-portable.tar.gz" | |
| wget -q "https://github.com/renode/renode/releases/download/v${RENODE_VERSION}/${TARBALL}" | |
| echo "${RENODE_SHA256} ${TARBALL}" | sha256sum --check --strict | |
| mkdir -p $HOME/renode | |
| tar -xzf "${TARBALL}" -C $HOME/renode --strip-components=1 | |
| rm "${TARBALL}" | |
| - name: Put Renode on PATH | |
| run: echo "$HOME/renode" >> $GITHUB_PATH | |
| - name: Run Deterministic Headless Renode Test (LM75 demo) | |
| run: | | |
| python3 targets/Microchip/POLARFIRE_ICICLE_RENODE/scripts/test_renode.py --app lm75 | |
| # The other half of the portability claim. apps/threadx_demo/main.c is | |
| # asserted here on 64-bit RISC-V and in test-nucleo-renode on 32-bit | |
| # Cortex-M4, against the same console output from the same source file. | |
| # A claim only one architecture verifies is not a claim. | |
| - name: Run Deterministic Headless Renode Test (shared ThreadX demo) | |
| run: | | |
| python3 targets/Microchip/POLARFIRE_ICICLE_RENODE/scripts/test_renode.py --app threadx_demo | |
| build-arm-nucleo: | |
| name: Build ST Nucleo-F401RE (ARM Cortex-M4) | |
| runs-on: ubuntu-24.04 | |
| env: | |
| # Pinned deliberately, as the runner image is: a toolchain upgrade should | |
| # be a reviewable commit rather than something that changes underneath the | |
| # targets. Kept in step with eclipse-threadx/threadx ci_cortex_m.yml, which | |
| # pins the same release for the Cortex-M ports. | |
| # Releases: https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads | |
| GCC_VERSION: 14.3.rel1 | |
| GCC_TARGET: arm-none-eabi | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Install CMake and Ninja | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y cmake ninja-build | |
| - name: Cache the Arm GNU toolchain | |
| id: cache-arm-gcc | |
| uses: actions/cache@v4 | |
| with: | |
| path: toolchain | |
| key: arm-gnu-toolchain-${{ env.GCC_VERSION }}-x86_64-${{ env.GCC_TARGET }} | |
| - name: Install the Arm GNU toolchain | |
| if: steps.cache-arm-gcc.outputs.cache-hit != 'true' | |
| run: | | |
| set -eu | |
| base="https://developer.arm.com/-/media/Files/downloads/gnu/${GCC_VERSION}/binrel" | |
| archive="arm-gnu-toolchain-${GCC_VERSION}-x86_64-${GCC_TARGET}.tar.xz" | |
| mkdir -p toolchain && cd toolchain | |
| curl -fsSLO "$base/$archive" | |
| curl -fsSLO "$base/$archive.sha256asc" | |
| sha256sum -c "$archive.sha256asc" | |
| tar xf "$archive" | |
| rm -f "$archive" | |
| - name: Put the toolchain on PATH | |
| run: | | |
| set -eu | |
| echo "$GITHUB_WORKSPACE/toolchain/arm-gnu-toolchain-${GCC_VERSION}-x86_64-${GCC_TARGET}/bin" >> "$GITHUB_PATH" | |
| - name: Report the toolchain version | |
| run: ${{ env.GCC_TARGET }}-gcc --version | |
| # Builds apps/threadx_demo/main.c, the same application source the | |
| # PolarFire SoC Icicle Kit job builds for 64-bit RISC-V. | |
| - name: Build NUCLEO-F401RE Demo | |
| run: | | |
| bash targets/STMicroelectronics/NUCLEO_F401RE/scripts/build.sh --rebuild | |
| - name: Verify NUCLEO-F401RE Demo ELF | |
| run: | | |
| test -f targets/STMicroelectronics/NUCLEO_F401RE/build/app/nucleo_f401re.elf | |
| echo "[OK] NUCLEO-F401RE demo ELF verified." | |
| - name: Archive Built NUCLEO-F401RE ELF | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: nucleo-f401re-demo-elf | |
| path: targets/STMicroelectronics/NUCLEO_F401RE/build/app/nucleo_f401re.elf | |
| retention-days: 1 | |
| test-nucleo-renode: | |
| name: Headless Renode Emulation & Assertion Test (NUCLEO-F401RE) | |
| needs: build-arm-nucleo | |
| runs-on: ubuntu-24.04 | |
| env: | |
| RENODE_VERSION: 1.16.1 | |
| RENODE_SHA256: 1a532d4b5b82de0dd154970c401e0c7b0e498d17304b2cecc007e306c8f9617c | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Set Up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.11" | |
| - name: Download Built NUCLEO-F401RE ELF | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: nucleo-f401re-demo-elf | |
| path: targets/STMicroelectronics/NUCLEO_F401RE/build/app | |
| - name: Cache the portable Renode environment | |
| id: cache-renode | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/renode | |
| key: renode-${{ env.RENODE_VERSION }}-linux-portable | |
| - name: Install Pinned Portable Renode Emulation Environment | |
| if: steps.cache-renode.outputs.cache-hit != 'true' | |
| run: | | |
| set -euo pipefail | |
| TARBALL="renode-${RENODE_VERSION}.linux-portable.tar.gz" | |
| wget -q "https://github.com/renode/renode/releases/download/v${RENODE_VERSION}/${TARBALL}" | |
| echo "${RENODE_SHA256} ${TARBALL}" | sha256sum --check --strict | |
| mkdir -p $HOME/renode | |
| tar -xzf "${TARBALL}" -C $HOME/renode --strip-components=1 | |
| rm "${TARBALL}" | |
| - name: Put Renode on PATH | |
| run: echo "$HOME/renode" >> $GITHUB_PATH | |
| - name: Run Deterministic Headless Renode Test | |
| run: | | |
| python3 targets/STMicroelectronics/NUCLEO_F401RE/scripts/test_renode.py |