Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
183 changes: 111 additions & 72 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,127 +1,157 @@
name: Build and Release

on:
workflow_dispatch:
push:
branches:
- main
paths:
- "bootloader/**"
- "firmware/**"
tags:
- "v*"

env:
REPO_PATH: ${{ github.workspace }}/wavephoenix
BOOTLOADER_PATH: ${{ github.workspace }}/wavephoenix/bootloader
FIRMWARE_PATH: ${{ github.workspace }}/wavephoenix/firmware
GECKO_SDK_PATH: ${{ github.workspace }}/gecko_sdk
SIMPLICITY_COMMANDER_PATH: ${{ github.workspace }}/commander
SLC_CLI_PATH: ${{ github.workspace }}/slc_cli
ARM_TOOLCHAIN_PATH: ${{ github.workspace }}/arm-toolchain
GECKO_SDK_VERSION: v4.4.5
ARM_GNU_TOOLCHAIN_VERSION: 12.2.rel1
branches: [main]
tags: ["v*"]
paths: ["bootloader/**", "firmware/**"]
pull_request:
branches: [main]
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest

env:
ARM_GNU_TOOLCHAIN_VERSION: 13.3.rel1
SIMPLICITY_SDK_VERSION: v2025.6.2

strategy:
matrix:
board:
- efr32xg22e
- rf-bm-bg22c3
board: ["efr32xg22e", "rf-bm-bg22c3"]

steps:
# Checkout repository and submodules
- name: Checkout repository
uses: actions/checkout@v6
with:
submodules: true

# Set up dependencies
- name: Install build dependencies
run: |
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update
sudo apt-get -o Dpkg::Options::="--path-exclude=/usr/share/man/*" -o Dpkg::Options::="--path-exclude=/usr/share/doc/*" -o Dpkg::Options::="--path-exclude=/usr/share/locale*" install -y cmake ninja-build

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"

- name: Install Python packages
run: pip install jinja2 pyyaml numpy scipy
sudo apt-get install -y cmake ninja-build unzip wget

- name: Set up Java
uses: actions/setup-java@v4
with:
distribution: "corretto"
java-version: "21"

# Setup ARM GNU Toolchain
- name: Cache ARM GNU Toolchain
id: cache-arm-toolchain
uses: actions/cache@v4
with:
path: ${{ env.ARM_TOOLCHAIN_PATH }}
path: arm-gnu-toolchain-${{ env.ARM_GNU_TOOLCHAIN_VERSION }}-x86_64-arm-none-eabi
key: arm-toolchain-${{ env.ARM_GNU_TOOLCHAIN_VERSION }}

- name: Install ARM GNU Toolchain
if: steps.cache-arm-toolchain.outputs.cache-hit != 'true'
run: |
mkdir -p ${{ env.ARM_TOOLCHAIN_PATH }}
curl -L "https://developer.arm.com/-/media/Files/downloads/gnu/${{ env.ARM_GNU_TOOLCHAIN_VERSION }}/binrel/arm-gnu-toolchain-${{ env.ARM_GNU_TOOLCHAIN_VERSION }}-x86_64-arm-none-eabi.tar.xz" | tar -xJ -C "${{ env.ARM_TOOLCHAIN_PATH }}" --strip-components=1
wget -q https://developer.arm.com/-/media/Files/downloads/gnu/${{ env.ARM_GNU_TOOLCHAIN_VERSION }}/binrel/arm-gnu-toolchain-${{ env.ARM_GNU_TOOLCHAIN_VERSION }}-x86_64-arm-none-eabi.tar.xz
tar xf arm-gnu-toolchain-${{ env.ARM_GNU_TOOLCHAIN_VERSION }}-x86_64-arm-none-eabi.tar.xz

- name: Add ARM GNU Toolchain to PATH
run: echo "${{ env.ARM_TOOLCHAIN_PATH }}/bin" >> $GITHUB_PATH
run: |
echo "$PWD/arm-gnu-toolchain-${{ env.ARM_GNU_TOOLCHAIN_VERSION }}-x86_64-arm-none-eabi/bin" >> $GITHUB_PATH

- name: Checkout repository
uses: actions/checkout@v4
# Setup Simplicity SDK
- name: Cache Simplicity SDK
id: cache-simplicity-sdk
uses: actions/cache@v4
with:
path: ${{ env.REPO_PATH }}
path: simplicity_sdk
key: simplicity-sdk-${{ env.SIMPLICITY_SDK_VERSION }}

- name: Install Simplicity SDK
if: steps.cache-simplicity-sdk.outputs.cache-hit != 'true'
run: |
wget -q https://github.com/SiliconLabs/simplicity_sdk/releases/download/${{ env.SIMPLICITY_SDK_VERSION }}/simplicity-sdk.zip
unzip -q simplicity-sdk.zip -d simplicity_sdk

- name: Cache Gecko SDK
id: cache-gecko-sdk
# Setup SLC-CLI
- name: Cache SLC-CLI
id: cache-slc-cli
uses: actions/cache@v4
with:
path: ${{ env.GECKO_SDK_PATH }}
key: gecko-sdk-${{ env.GECKO_SDK_VERSION }}
path: slc_cli
key: slc-cli-${{ runner.os }}

- name: Install SLC-CLI
if: steps.cache-slc-cli.outputs.cache-hit != 'true'
run: |
wget -q https://www.silabs.com/documents/login/software/slc_cli_linux.zip
unzip -q slc_cli_linux.zip
chmod +x slc_cli/slc

- name: Add SLC-CLI to PATH
run: |
echo "$PWD/slc_cli" >> $GITHUB_PATH

- name: Download Gecko SDK
if: steps.cache-gecko-sdk.outputs.cache-hit != 'true'
- name: Configure SLC-CLI
run: |
wget -nv https://github.com/SiliconLabs/gecko_sdk/releases/download/${{ env.GECKO_SDK_VERSION }}/gecko-sdk.zip
unzip -q gecko-sdk.zip -d ${{ env.GECKO_SDK_PATH }}
slc configuration --sdk simplicity_sdk
slc configuration --gcc-toolchain arm-gnu-toolchain-${{ env.ARM_GNU_TOOLCHAIN_VERSION }}-x86_64-arm-none-eabi
slc signature trust --sdk simplicity_sdk

# Setup Simplicity Commander
- name: Cache Simplicity Commander
id: cache-simplicity-commander
uses: actions/cache@v4
with:
path: commander
key: simplicity-commander-${{ runner.os }}

- name: "Download Simplicity Commander"
- name: Install Simplicity Commander
if: steps.cache-simplicity-commander.outputs.cache-hit != 'true'
run: |
wget -nv https://www.silabs.com/documents/login/software/SimplicityCommander-Linux.zip
wget -q https://www.silabs.com/documents/login/software/SimplicityCommander-Linux.zip
unzip -q SimplicityCommander-Linux.zip
tar -xf SimplicityCommander-Linux/Commander_linux_x86_64_*.tar.bz

- name: Download SLC-CLI
- name: Add Simplicity Commander to PATH
run: |
wget -nv https://www.silabs.com/documents/login/software/slc_cli_linux.zip
unzip -q slc_cli_linux.zip
echo "$PWD/commander" >> $GITHUB_PATH

- name: Build bootloader
# Build bootloader
- name: Generate bootloader project files
working-directory: bootloader
run: |
export ARM_GCC_DIR="${{ env.ARM_TOOLCHAIN_PATH }}"

cd ${{ env.BOOTLOADER_PATH }}
${{ env.SLC_CLI_PATH }}/slc signature trust --sdk ${{ env.GECKO_SDK_PATH }}
${{ env.SLC_CLI_PATH }}/slc generate -s ${{ env.GECKO_SDK_PATH }} -p bootloader-${{ matrix.board }}.slcp -d bootloader_project -o cmake
slc generate bootloader-${{ matrix.board }}.slcp \
-o cmake \
-d target/${{ matrix.board }}

cd bootloader_project/bootloader_cmake
- name: Build bootloader
working-directory: bootloader/target/${{ matrix.board }}/bootloader_cmake
run: |
cmake --workflow --preset project
cmake --preset project && cmake --build --preset default_config

# Build firmware
- name: Generate firmware project files
working-directory: firmware
run: |
slc generate wavephoenix.slcp \
--with "${{ matrix.board }};wavephoenix" \
--sdk-extensions=.,libjoybus,libwavebird \
-o cmake \
-d target/${{ matrix.board }}

- name: Build firmware
working-directory: firmware/target/${{ matrix.board }}/wavephoenix_cmake
run: |
cd ${{ env.FIRMWARE_PATH }}
cmake --preset ${{ matrix.board }} && cmake --build --preset ${{ matrix.board }}
cmake --workflow --preset project

- name: Update trunk tag
if: github.ref == 'refs/heads/main'
- name: Generate firmware .gbl
working-directory: firmware/target/${{ matrix.board }}/wavephoenix_cmake/build/default_config
run: |
cd ${{ env.REPO_PATH }}
git tag -f trunk
git push -f origin trunk
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
commander gbl create \
--app wavephoenix.s37 \
wavephoenix.gbl

# Upload artifacts
- name: Rename artifacts
run: |
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
Expand All @@ -130,9 +160,18 @@ jobs:
VERSION="trunk"
fi

mv ${{ env.BOOTLOADER_PATH }}/bootloader_project/bootloader_cmake/build/default_config/bootloader.hex "wavephoenix-bootloader-${VERSION}-${{ matrix.board }}.hex"
mv ${{ env.FIRMWARE_PATH }}/build/${{ matrix.board }}/receiver/receiver.hex "wavephoenix-receiver-${VERSION}-${{ matrix.board }}.hex"
mv ${{ env.FIRMWARE_PATH }}/build/${{ matrix.board }}/receiver/receiver.gbl "wavephoenix-receiver-${VERSION}-${{ matrix.board }}.gbl"
mv bootloader/target/${{ matrix.board }}/bootloader_cmake/build/default_config/bootloader.hex "wavephoenix-bootloader-${VERSION}-${{ matrix.board }}.hex"
mv firmware/target/${{ matrix.board }}/wavephoenix_cmake/build/default_config/wavephoenix.hex "wavephoenix-receiver-${VERSION}-${{ matrix.board }}.hex"
mv firmware/target/${{ matrix.board }}/wavephoenix_cmake/build/default_config/wavephoenix.gbl "wavephoenix-receiver-${VERSION}-${{ matrix.board }}.gbl"

- name: Update trunk tag
if: github.ref == 'refs/heads/main'
run: |
cd ${{ env.REPO_PATH }}
git tag -f trunk
git push -f origin trunk
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Upload artifacts to trunk release
if: github.ref == 'refs/heads/main'
Expand Down
33 changes: 0 additions & 33 deletions .github/workflows/test.yml

This file was deleted.

6 changes: 6 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[submodule "firmware/libwavebird"]
path = firmware/libwavebird
url = https://github.com/loopj/libwavebird.git
[submodule "firmware/libjoybus"]
path = firmware/libjoybus
url = https://github.com/loopj/libjoybus.git
Loading