| name: Download Toolchain |
| |
| inputs: |
| toolchain: |
| description: 'Toolchain name' |
| required: true |
| toolchain_url: |
| description: 'Toolchain URL' |
| required: true |
| |
| runs: |
| using: "composite" |
| steps: |
| - name: Cache Toolchain |
| if: ${{ !startsWith(inputs.toolchain_url, 'https://github.com') }} |
| uses: actions/cache@v5 |
| id: cache-toolchain-download |
| with: |
| path: ~/cache/${{ inputs.toolchain }} |
| key: ${{ runner.os }}-${{ inputs.toolchain }}-${{ inputs.toolchain_url }} |
| |
| - name: Install Toolchain |
| if: steps.cache-toolchain-download.outputs.cache-hit != 'true' |
| env: |
| TOOLCHAIN: ${{ inputs.toolchain }} |
| TOOLCHAIN_URL: ${{ inputs.toolchain_url }} |
| run: | |
| mkdir -p ~/cache/${TOOLCHAIN} |
| FILE_EXT="${TOOLCHAIN_URL##*.}" |
| |
| if [[ ${TOOLCHAIN} == rx-gcc ]]; then |
| wget --progress=dot:giga ${TOOLCHAIN_URL} -O toolchain.run |
| chmod +x toolchain.run |
| ./toolchain.run -p ~/cache/${TOOLCHAIN}/gnurx -y |
| elif [[ ${TOOLCHAIN} == ft9xx-gcc ]]; then |
| wget --progress=dot:giga ${TOOLCHAIN_URL} -O ~/cache/${TOOLCHAIN}/ft9xxtoolchain.deb |
| elif [[ ${TOOLCHAIN} == arm-iar ]]; then |
| wget --progress=dot:giga https://netstorage.iar.com/FileStore/STANDARD/001/003/926/iar-lmsc-tools_1.8_amd64.deb -O ~/cache/${TOOLCHAIN}/iar-lmsc-tools.deb |
| wget --progress=dot:giga ${TOOLCHAIN_URL} -O ~/cache/${TOOLCHAIN}/cxarm.deb |
| elif [[ ${FILE_EXT} == zip ]]; then |
| curl -L "$TOOLCHAIN_URL" -o toolchain.zip |
| unzip -q toolchain.zip -d ~/cache/${TOOLCHAIN} |
| ~/cache/${TOOLCHAIN}/xpack-arm-none-eabi-gcc-14.2.1-1.1/bin/arm-none-eabi-gcc.exe --version |
| elif [[ ${FILE_EXT} == gz ]]; then |
| wget --progress=dot:giga ${TOOLCHAIN_URL} -O toolchain.tar.gz |
| tar -C ~/cache/${TOOLCHAIN} -xaf toolchain.tar.gz |
| else |
| echo "Unsupported toolchain file extension: ${FILE_EXT}" |
| exit 1 |
| fi |
| shell: bash |
| |
| - name: Setup Toolchain |
| env: |
| TOOLCHAIN: ${{ inputs.toolchain }} |
| run: | |
| if [[ ${TOOLCHAIN} == arm-iar ]]; then |
| sudo dpkg -i ~/cache/${TOOLCHAIN}/iar-lmsc-tools.deb |
| sudo apt install -y ~/cache/${TOOLCHAIN}/cxarm.deb |
| TOOLCHAIN_PATH="/opt/iar/cxarm/arm/bin" |
| elif [[ ${TOOLCHAIN} == ft9xx-gcc ]]; then |
| sudo apt install -y ~/cache/${TOOLCHAIN}/ft9xxtoolchain.deb |
| TOOLCHAIN_PATH="/opt/ft32/bin" |
| else |
| # Find the single toolchain bin directory |
| TOOLCHAIN_BIN_DIRS=(~/cache/${TOOLCHAIN}/*/bin) |
| if [[ ${#TOOLCHAIN_BIN_DIRS[@]} -ne 1 ]]; then |
| echo "Error: Expected exactly one toolchain bin directory, found ${#TOOLCHAIN_BIN_DIRS[@]}" |
| exit 1 |
| fi |
| TOOLCHAIN_PATH="${TOOLCHAIN_BIN_DIRS[0]}" |
| fi |
| # Convert to native path for Windows compatibility |
| if [[ "$RUNNER_OS" == "Windows" ]]; then |
| TOOLCHAIN_PATH=$(cygpath -w "$TOOLCHAIN_PATH") |
| fi |
| echo "$TOOLCHAIN_PATH" >> $GITHUB_PATH |
| shell: bash |