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