[BREAKING CHANGE] Rewrite configuration logic, improve and clear up l… #190
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
| name: USBSID-Pico Build | |
| env: | |
| BUILD_THREADS: 4 | |
| BUILD_TYPE: Release | |
| # Pico-SDK version | |
| PICO_SDK_REF: 2.2.0 | |
| PICO_EXTRAS_REF: sdk-2.2.0 | |
| PICOTOOL_REF: 2.2.0 | |
| on: | |
| push: | |
| paths: | |
| - "src/**" | |
| - "lib/**" | |
| - ".github/workflows/build.yml" | |
| - "CMakeLists.txt" | |
| # Only run on dev branch | |
| branches: [dev] | |
| # Allows you to run this workflow manually from the Actions tab when needed | |
| workflow_dispatch: | |
| concurrency: | |
| group: dev-firmware-build | |
| cancel-in-progress: true | |
| jobs: | |
| build: | |
| name: Build | |
| runs-on: ubuntu-latest | |
| if: ${{ ! startsWith(github.ref, 'refs/tags/') }} | |
| strategy: | |
| matrix: | |
| include: | |
| - { | |
| buildname: Pico, | |
| directory: pico, | |
| pico_board: pico, | |
| pico_platform: rp2040, | |
| withemulator: 0, | |
| withsidplayer: 0, | |
| } | |
| - { | |
| buildname: Pico_W, | |
| directory: picow, | |
| pico_board: pico_w, | |
| pico_platform: rp2040, | |
| withemulator: 0, | |
| withsidplayer: 0, | |
| } | |
| - { | |
| buildname: Pico2, | |
| directory: pico2, | |
| pico_board: pico2, | |
| pico_platform: rp2350-arm-s, | |
| withemulator: 0, | |
| withsidplayer: 0, | |
| } | |
| - { | |
| buildname: Pico2_W, | |
| directory: pico2w, | |
| pico_board: pico2_w, | |
| pico_platform: rp2350-arm-s, | |
| withemulator: 0, | |
| withsidplayer: 0, | |
| } | |
| - { | |
| buildname: Pico_Emulator, | |
| directory: pico_em, | |
| pico_board: pico, | |
| pico_platform: rp2040, | |
| withemulator: 1, | |
| withsidplayer: 0, | |
| } | |
| - { | |
| buildname: Pico2_Emulator, | |
| directory: pico2_em, | |
| pico_board: pico2, | |
| pico_platform: rp2350-arm-s, | |
| withemulator: 1, | |
| withsidplayer: 0, | |
| } | |
| - { | |
| buildname: Pico_W_Emulator, | |
| directory: pico_w_em, | |
| pico_board: pico_w, | |
| pico_platform: rp2040, | |
| withemulator: 1, | |
| withsidplayer: 0, | |
| } | |
| - { | |
| buildname: Pico2_W_Emulator, | |
| directory: pico2_w_em, | |
| pico_board: pico2_w, | |
| pico_platform: rp2350-arm-s, | |
| withemulator: 1, | |
| withsidplayer: 0, | |
| } | |
| - { | |
| buildname: Pico2_SIDplayer, | |
| directory: pico2_sp, | |
| pico_board: pico2, | |
| pico_platform: rp2350-arm-s, | |
| withemulator: 0, | |
| withsidplayer: 1, | |
| } | |
| - { | |
| buildname: Pico2_W_SIDplayer, | |
| directory: pico2_w_sp, | |
| pico_board: pico2_w, | |
| pico_platform: rp2350-arm-s, | |
| withemulator: 0, | |
| withsidplayer: 1, | |
| } | |
| fail-fast: false | |
| steps: | |
| - name: 🛠️ Arm GNU Toolchain (arm-none-eabi-gcc) | |
| uses: carlosperate/arm-none-eabi-gcc-action@v1 | |
| - name: Install Act dependencies | |
| if: ${{ env.ACT }} | |
| run: | | |
| apt-get update && apt-get install sudo -y | |
| - name: Install dependencies | |
| if: ${{ env.ACT }} | |
| run: | | |
| sudo apt-get update && sudo apt-get install curl build-essential cmake -y | |
| - name: Install SID player xa dependency | |
| if: ${{matrix.withsidplayer == 1 }} | |
| run: | | |
| sudo apt-get update && sudo apt-get install -y xa65 | |
| - name: Checkout bin2h source | |
| if: ${{matrix.withsidplayer == 1 }} | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: elnormous/bin2h | |
| path: bin2h-src | |
| - name: Build and add to PATH | |
| if: ${{matrix.withsidplayer == 1 }} | |
| run: | | |
| cd bin2h-src | |
| make | |
| # Add the current directory containing the built 'bin2h' to the runner's PATH | |
| echo "$(pwd)" >> $GITHUB_PATH | |
| - name: Verify installation | |
| if: ${{matrix.withsidplayer == 1 }} | |
| run: bin2h --help | |
| - name: 🗒️ Check GCC Version | |
| id: compiler-version | |
| run: | | |
| arm-none-eabi-gcc --version | |
| ver=$(arm-none-eabi-gcc --version | head -1) | |
| echo "CC_VERSION=$ver" >> $GITHUB_OUTPUT | |
| - name: 💽 Cache Pico-SDK | |
| id: cache-pico-sdk | |
| uses: actions/cache@v4 | |
| with: | |
| path: pico-sdk | |
| key: ${{runner.os}}-pico-sdk-${{env.PICO_SDK_REF}} | |
| - name: 📇 Checkout Pico-SDK | |
| if: ${{steps.cache-pico-sdk.outputs.cache-hit != 'true' }} | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: raspberrypi/pico-sdk | |
| ref: ${{env.PICO_SDK_REF}} | |
| path: pico-sdk | |
| submodules: recursive | |
| - name: 🔖 Add PICO_SDK_PATH to Environment | |
| run: | | |
| echo "PICO_SDK_PATH=${{github.workspace}}/pico-sdk" >> $GITHUB_ENV | |
| cd pico-sdk/lib/tinyusb | |
| python3 tools/get_deps.py ${{matrix.pico_platform}} | |
| - name: 💽 Cache Pico-Extras | |
| id: cache-pico-extras | |
| uses: actions/cache@v4 | |
| with: | |
| path: pico-extras | |
| key: ${{runner.os}}-pico-extras-${{env.PICO_EXTRAS_REF}} | |
| - name: 📇 Checkout Pico-Extras | |
| if: ${{steps.cache-pico-extras.outputs.cache-hit != 'true' }} | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: raspberrypi/pico-extras | |
| ref: ${{env.PICO_EXTRAS_REF}} | |
| path: pico-extras | |
| submodules: recursive | |
| - name: 🔖 Add PICO_EXTRAS_PATH to Environment | |
| run: | | |
| echo "PICO_EXTRAS_PATH=${{github.workspace}}/pico-extras" >> $GITHUB_ENV | |
| ls pico-extras/external -la | |
| - name: 💽 Cache picotool | |
| id: cache-picotool | |
| uses: actions/cache@v4 | |
| with: | |
| path: picotool | |
| key: ${{runner.os}}-picotool-${{env.PICOTOOL_REF}} | |
| - name: 📇 Checkout picotool | |
| if: ${{steps.cache-picotool.outputs.cache-hit != 'true' }} | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: raspberrypi/picotool | |
| ref: ${{env.PICOTOOL_REF}} | |
| path: picotool-src | |
| submodules: recursive | |
| - name: 🏭 Build picotool | |
| if: ${{steps.cache-picotool.outputs.cache-hit != 'true' }} | |
| run: | | |
| cmake -S picotool-src -B picotool-src/build -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/picotool -DPICOTOOL_FLAT_INSTALL=1 | |
| cd picotool-src/build | |
| make -j ${{env.BUILD_THREADS}} install | |
| - name: 📇 Checkout project | |
| uses: actions/checkout@v4 | |
| with: | |
| path: master | |
| - name: 📇 Checkout emudore-embedded | |
| if: ${{matrix.withemulator == 1 }} | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: loudnl/emudore-embedded | |
| path: master/lib/emudore-embedded | |
| - name: 📇 Checkout USBSID-Player | |
| if: ${{matrix.withsidplayer == 1 }} | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: loudnl/usbsid-player | |
| path: master/lib/usbsid-player | |
| - name: 🏭 Create build directory | |
| run: | | |
| mkdir -p ${{github.workspace}}/master/build_${{matrix.directory}} | |
| - name: 🏭 Setup CMAKE | |
| run: | | |
| unset PICO_PLATFORM | |
| unset PICO_BOARD | |
| cmake -S master \ | |
| -B ${{github.workspace}}/master/build_${{matrix.directory}} \ | |
| -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} \ | |
| -DPICO_PLATFORM=${{matrix.pico_platform}} \ | |
| -DPICO_BOARD=${{matrix.pico_board}} \ | |
| -Dpicotool_DIR=${{github.workspace}}/picotool/picotool \ | |
| -DONBOARD_EMULATOR=${{matrix.withemulator}} \ | |
| -DONBOARD_SIDPLAYER=${{matrix.withsidplayer}} \ | |
| $extra_arg | |
| - name: 🏭 Build ${{matrix.name}} | |
| run: | | |
| cmake --build ${{github.workspace}}/master/build_${{matrix.directory}} --config ${{env.BUILD_TYPE}} -j ${{env.BUILD_THREADS}} | |
| - name: List build files | |
| run: | | |
| ls ${{github.workspace}}/master/build_${{matrix.directory}}/*.uf2 -la | |
| - name: 💾 Gather Artifact Files | |
| working-directory: ${{github.workspace}}/master | |
| run: | | |
| mkdir dist | |
| cp -av build_${{matrix.directory}}/*.uf2 dist/ | |
| - name: Get current branch | |
| run: | | |
| echo "BRANCHNAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV | |
| - name: Get current datetime | |
| run: | | |
| echo "DATETIME=$(date +'%Y%m%dT%H%M%S')" >> $GITHUB_ENV | |
| - name: 💾 Upload Artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: usbsid${{matrix.directory}}-${{env.BRANCHNAME}}-autobuild-${{github.run_number}}-${{env.DATETIME}} | |
| path: ${{github.workspace}}/master/dist |