Skip to content

Update README.md

Update README.md #68

Workflow file for this run

name: Build
on: [push, pull_request]
jobs:
build-firmware:
runs-on: ubuntu-latest
env:
BUILD_TYPE: "Release"
PICOSDK_VER: "1.5.1"
PICOEXTRA_VER: "sdk-1.5.1"
# The Pico-SDK will listen to these environment vars
PICO_SDK_PATH: ${{github.workspace}}/pico/pico-sdk
PICO_EXTRAS_PATH: ${{github.workspace}}/pico/pico-extras
OUTPUT_DIR: ${{github.workspace}}/binaries
steps:
- name: Checkout repo with submodules
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Arm GNU Toolchain (arm-none-eabi-gcc)
uses: carlosperate/arm-none-eabi-gcc-action@v1
with:
release: '12.3.Rel1'
# Since we reference stable versions of Pico-SDK and pico-extras, we can cache their downloads.
# If this were to reference changing branches (like "master"), this caching step must be removed!!!
- name: Cache Pico-SDK and Extras
id: cache-sdk
uses: actions/cache@v3
with:
path: ${{github.workspace}}/pico/
key: ${{ env.PICOSDK_VER }}-${{ env.PICOEXTRA_VER }}
# If we did not find stuff in the cache, download it fresh.
# Use method recommended by Pico SDK docs: not a full recursive clone
- name: Clone Pico-SDK
if: steps.cache-sdk.outputs.cache-hit != 'true'
run: |
git clone -b "$PICOSDK_VER" --depth 1 https://github.com/raspberrypi/pico-sdk.git $PICO_SDK_PATH
cd $PICO_SDK_PATH
git submodule update --init --depth 1
- name: Clone Pico-Extras
if: steps.cache-sdk.outputs.cache-hit != 'true'
run: |
git clone -b "$PICOEXTRA_VER" --depth 1 https://github.com/raspberrypi/pico-extras.git $PICO_EXTRAS_PATH
cd $PICO_EXTRAS_PATH
git submodule update --init --depth 1
- name: Create Build Environment
run: cmake -E make_directory ${{github.workspace}}/build
- name: Patch Pico SDK to allow LTO
run: sed -i 's/WRAPPER_FUNC(x) __wrap_/WRAPPER_FUNC(x) __attribute__((used)) __wrap_/' ${{env.PICO_SDK_PATH}}/src/rp2_common/pico_platform/include/pico/platform.h
- name: Build GUS Firmware
shell: bash
working-directory: ${{github.workspace}}/build
run: |
mkdir -p $OUTPUT_DIR
cmake $GITHUB_WORKSPACE/sw -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DPROJECT_TYPE="GUS" -DUSE_LTO=1 -DUSB_JOYSTICK=1
cmake --build . --config $BUILD_TYPE --parallel $(nproc)
cp picogus.uf2 $OUTPUT_DIR/pg-gus.uf2
- name: Build SB Firmware
working-directory: ${{github.workspace}}/build
shell: bash
run: |
cmake $GITHUB_WORKSPACE/sw -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DPROJECT_TYPE="SB" -DUSE_LTO=1 -DUSB_JOYSTICK=1
cmake --build . --config $BUILD_TYPE --parallel $(nproc)
cp picogus.uf2 $OUTPUT_DIR/pg-sb.uf2
- name: Build MPU401 Firmware
working-directory: ${{github.workspace}}/build
shell: bash
run: |
cmake $GITHUB_WORKSPACE/sw -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DPROJECT_TYPE="MPU" -DUSE_LTO=1 -DUSB_JOYSTICK=1
cmake --build . --config $BUILD_TYPE --parallel $(nproc)
cp picogus.uf2 $OUTPUT_DIR/pg-mpu.uf2
- name: Build Tandy Firmware
working-directory: ${{github.workspace}}/build
shell: bash
run: |
cmake $GITHUB_WORKSPACE/sw -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DPROJECT_TYPE="TANDY" -DUSE_LTO=1 -DUSB_JOYSTICK=1
cmake --build . --config $BUILD_TYPE --parallel $(nproc)
cp picogus.uf2 $OUTPUT_DIR/pg-tandy.uf2
- name: Build CMS Firmware
working-directory: ${{github.workspace}}/build
shell: bash
run: |
cmake $GITHUB_WORKSPACE/sw -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DPROJECT_TYPE="CMS" -DUSE_LTO=1 -DUSB_JOYSTICK=1
cmake --build . --config $BUILD_TYPE --parallel $(nproc)
cp picogus.uf2 $OUTPUT_DIR/pg-cms.uf2
- name: Build Joystick Only Firmware
working-directory: ${{github.workspace}}/build
shell: bash
run: |
cmake $GITHUB_WORKSPACE/sw -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DPROJECT_TYPE="JOY" -DUSE_LTO=1
cmake --build . --config $BUILD_TYPE --parallel $(nproc)
cp picogus.uf2 $OUTPUT_DIR/pg-joyex.uf2
# will generate PicoGUS Firmwares.zip as downloadable artifact with all .uf2 files
- name: Upload All Firmwares
uses: actions/upload-artifact@v3
with:
name: PicoGUS Firmwares
path: ${{env.OUTPUT_DIR}}
build-pgusinit:
runs-on: ubuntu-latest
env:
BUILD_TYPE: "Release"
OUTPUT_DIR: ${{github.workspace}}/binaries
steps:
- name: Checkout repo with submodules
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install OpenWatcom 2.0
uses: open-watcom/setup-watcom@v0
with:
version: "2.0-64"
tag: "2024-03-01-Build"
- name: Build pgusinit
working-directory: ${{github.workspace}}/pgusinit
run: |
mkdir -p $OUTPUT_DIR
make -f Makefile-cross INCLUDE="$WATCOM"/h
cp pgusinit.exe $OUTPUT_DIR
# will generate pgusinit.zip as downloadable artifact with pgusinit.exe
- name: Upload pgusinit
uses: actions/upload-artifact@v3
with:
name: pgusinit
path: ${{env.OUTPUT_DIR}}/pgusinit.exe
create-release:
if: github.ref_type == 'tag' && startsWith(github.ref_name, 'v')
runs-on: ubuntu-latest
needs: [build-firmware, build-pgusinit]
env:
STAGING_DIR: ${{github.workspace}}/release-staging-dir
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Copy README
run: |
mkdir -p $STAGING_DIR
cp pgusinit/README.md $STAGING_DIR/README.md
- name: Get Tags
id: tag
uses: ildug/get-tag-action@v1
- name: Generate release body
run: |
awk '/^# v${{ steps.tag.outputs.version }}/{a=1;next}/^# /{a=0}a' sw/CHANGELOG.md > release-body.md
- name: Download firmware artifact
uses: actions/download-artifact@v3
with:
name: PicoGUS Firmwares
path: ${{env.STAGING_DIR}}
- name: Download pgusinit artifact
uses: actions/download-artifact@v3
with:
name: pgusinit
path: ${{env.STAGING_DIR}}
- name: Install zip
uses: montudor/action-zip@v1
- name: Zip release
run: |
zip -9 -r ../picogus-v${{ steps.tag.outputs.version }}.zip .
working-directory: ${{env.STAGING_DIR}}
- name: Release
uses: softprops/action-gh-release@v1
with:
body_path: release-body.md
files: picogus-v${{ steps.tag.outputs.version }}.zip
draft: true