Implement samx7x host #3
This file contains 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: Build ARM | |
on: | |
push: | |
paths: | |
- 'src/**' | |
- 'examples/**' | |
- 'lib/**' | |
- 'hw/**' | |
pull_request: | |
branches: [ master ] | |
paths: | |
- 'src/**' | |
- 'examples/**' | |
- 'lib/**' | |
- 'hw/**' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
# --------------------------------------- | |
# Build ARM family | |
# --------------------------------------- | |
build-arm: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
family: | |
# Alphabetical order | |
- 'broadcom_32bit' | |
- 'imxrt' | |
- 'lpc15' | |
- 'lpc18' | |
- 'lpc54' | |
- 'lpc55' | |
- 'mm32' | |
- 'msp432e4' | |
- 'nrf' | |
- 'rp2040' | |
- 'samd11' | |
- 'samd21' | |
- 'samd51' | |
- 'saml2x' | |
- 'stm32f0' | |
- 'stm32f1' | |
- 'stm32f4' | |
- 'stm32f7' | |
- 'stm32g4' | |
- 'stm32h7' | |
- 'stm32l4' | |
- 'stm32wb' | |
- 'tm4c123' | |
- 'xmc4000' | |
steps: | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.x' | |
- name: Install ARM GCC | |
uses: carlosperate/arm-none-eabi-gcc-action@v1 | |
with: | |
release: '11.2-2022.02' | |
- name: Checkout TinyUSB | |
uses: actions/checkout@v3 | |
- name: Checkout common submodules in lib | |
run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip lib/sct_neopixel | |
- name: Checkout hathach/linkermap | |
uses: actions/checkout@v3 | |
with: | |
repository: hathach/linkermap | |
path: linkermap | |
- name: Checkout pico-sdk for rp2040 | |
if: matrix.family == 'rp2040' | |
run: | | |
git clone --depth 1 -b develop https://github.com/raspberrypi/pico-sdk ~/pico-sdk | |
echo >> $GITHUB_ENV PICO_SDK_PATH=~/pico-sdk | |
- name: Get Dependencies | |
run: python3 tools/get_dependencies.py ${{ matrix.family }} | |
- name: Build | |
run: python3 tools/build_family.py ${{ matrix.family }} | |
- name: Linker Map | |
run: | | |
pip install linkermap/ | |
# find -quit to only print linkermap of 1 board per example | |
for ex in `ls -d examples/*/*/` | |
do | |
find ${ex} -name *.map -print -quit | xargs -I % sh -c 'echo "::group::%"; linkermap -v %; echo "::endgroup::"' | |
done | |
# Following steps are for Hardware Test with self-hosted | |
- name: Prepare Artifacts | |
if: matrix.family == 'rp2040' && github.repository_owner == 'hathach' | |
run: find examples/ -name "*.elf" -exec mv {} . \; | |
- name: Upload Artifacts for Hardware Test | |
if: matrix.family == 'rp2040' && github.repository_owner == 'hathach' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.family }} | |
path: | | |
*.elf | |
# --------------------------------------- | |
# Build all no-family (orphaned) boards | |
# disable this workflow since it is often failed randomly | |
# --------------------------------------- | |
build-board: | |
runs-on: ubuntu-latest | |
if: false | |
strategy: | |
fail-fast: false | |
matrix: | |
example: | |
# Alphabetical order, a group of 4 | |
- 'device/audio_test device/board_test device/cdc_dual_ports device/cdc_msc' | |
- 'device/cdc_msc_freertos device/dfu_runtime device/hid_composite device/hid_composite_freertos' | |
- 'device/hid_generic_inout device/hid_multiple_interface device/midi_test device/msc_dual_lun' | |
- 'device/net_lwip_webserver' | |
- 'device/uac2_headset device/usbtmc device/webusb_serial host/cdc_msc_hid' | |
steps: | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.x' | |
- name: Install ARM GCC | |
uses: carlosperate/arm-none-eabi-gcc-action@v1 | |
with: | |
release: '11.2-2022.02' | |
- name: Checkout TinyUSB | |
uses: actions/checkout@v3 | |
- name: Checkout common submodules in lib | |
run: git submodule update --init lib/FreeRTOS-Kernel lib/lwip | |
- name: Build | |
run: python3 tools/build_board.py ${{ matrix.example }} | |
# --------------------------------------- | |
# Hardware in the loop (HIL) | |
# Current self-hosted instance is running on an RPI4 with | |
# - pico + pico-probe connected via USB | |
# - pico-probe is /dev/ttyACM0 | |
# --------------------------------------- | |
hw-rp2040-test: | |
# Limit the run to only hathach due to limited resource on RPI4 | |
if: github.repository_owner == 'hathach' | |
needs: build-arm | |
runs-on: [self-hosted, Linux, ARM64, rp2040] | |
steps: | |
- name: Clean workspace | |
run: | | |
echo "Cleaning up previous run" | |
rm -rf "${{ github.workspace }}" | |
mkdir -p "${{ github.workspace }}" | |
- name: Download rp2040 Artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: rp2040 | |
- name: Create flash.sh | |
run: | | |
echo > flash.sh 'cmdout=$(openocd -f "interface/picoprobe.cfg" -f "target/rp2040.cfg" -c "program $1 reset exit")' | |
echo >> flash.sh 'if (( $? )) ; then echo $cmdout ; fi' | |
chmod +x flash.sh | |
- name: Test cdc_dual_ports | |
run: | | |
./flash.sh cdc_dual_ports.elf | |
while (! ([ -e /dev/ttyACM1 ] && [ -e /dev/ttyACM2 ])) && [ $SECONDS -le 5 ]; do :; done | |
test -e /dev/ttyACM1 && echo "ttyACM1 exists" | |
test -e /dev/ttyACM2 && echo "ttyACM2 exists" | |
- name: Test cdc_msc | |
run: | | |
./flash.sh cdc_msc.elf | |
readme='/media/pi/TinyUSB MSC/README.TXT' | |
while (! ([ -e /dev/ttyACM1 ] && [ -f "$readme" ])) && [ $SECONDS -le 5 ]; do :; done | |
test -e /dev/ttyACM1 && echo "ttyACM1 exists" | |
test -f "$readme" && echo "$readme exists" | |
cat "$readme" | |
- name: Test dfu | |
run: | | |
./flash.sh dfu.elf | |
while (! (dfu-util -l | grep "Found DFU")) && [ $SECONDS -le 5 ]; do :; done | |
dfu-util -d cafe -a 0 -U dfu0 | |
dfu-util -d cafe -a 1 -U dfu1 | |
grep "TinyUSB DFU! - Partition 0" dfu0 | |
grep "TinyUSB DFU! - Partition 1" dfu1 | |
- name: Test dfu_runtime | |
run: | | |
./flash.sh dfu_runtime.elf | |
while (! (dfu-util -l | grep "Found Runtime")) && [ $SECONDS -le 5 ]; do :; done | |
# - name: Test hid_boot_interface | |
# run: | | |
# ./flash.sh hid_boot_interface.elf | |
# while (! (dfu-util -l | grep "Found Runtime")) && [ $SECONDS -le 5 ]; do :; done | |