WIP: add additional crypto functions using PSA API #4321
Workflow file for this run
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
| # | |
| # Copyright 2022 Paul Guyot <pguyot@kallisys.net> | |
| # | |
| # SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later | |
| # | |
| name: STM32 Build | |
| on: | |
| push: | |
| paths: | |
| - '.github/workflows/stm32-build.yaml' | |
| - 'CMakeLists.txt' | |
| - 'CMakeModules/**' | |
| - 'src/platforms/stm32/**' | |
| - 'src/libAtomVM/**' | |
| - 'libs/**' | |
| pull_request: | |
| paths: | |
| - '.github/workflows/stm32-build.yaml' | |
| - 'CMakeLists.txt' | |
| - 'CMakeModules/**' | |
| - 'src/platforms/stm32/**' | |
| - 'src/libAtomVM/**' | |
| - 'libs/**' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref != 'refs/heads/main' && github.ref || github.run_id }} | |
| cancel-in-progress: true | |
| jobs: | |
| stm32: | |
| runs-on: ubuntu-24.04 | |
| permissions: | |
| actions: read | |
| contents: read | |
| security-events: write | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| device: | |
| - stm32f407vgt6 | |
| - stm32f411ceu6 | |
| - stm32f429zit6 | |
| - stm32h743vit6 | |
| - stm32h743zit6 | |
| - stm32u585ait6q | |
| - stm32wb55rg | |
| - stm32h562rgt6 | |
| - stm32f746zgt6 | |
| - stm32g474ret6 | |
| - stm32l476rgt6 | |
| - stm32l562qei6 | |
| - stm32f207zgt6 | |
| - stm32u375rgt6 | |
| - stm32g0b1ret6 | |
| include: | |
| - device: stm32f407vgt6 | |
| max_size: 524288 | |
| renode_platform: stm32f4.repl | |
| avm_address: "0x08080000" | |
| - device: stm32f411ceu6 | |
| max_size: 393216 | |
| renode_platform: stm32f4.repl | |
| avm_address: "0x08060000" | |
| - device: stm32f429zit6 | |
| max_size: 524288 | |
| - device: stm32h743vit6 | |
| max_size: 524288 | |
| renode_platform: stm32h743.repl | |
| avm_address: "0x08080000" | |
| - device: stm32h743zit6 | |
| max_size: 524288 | |
| - device: stm32u585ait6q | |
| max_size: 524288 | |
| - device: stm32wb55rg | |
| max_size: 524288 | |
| - device: stm32h562rgt6 | |
| max_size: 524288 | |
| - device: stm32f746zgt6 | |
| max_size: 524288 | |
| renode_platform: stm32f746.repl | |
| avm_address: "0x08080000" | |
| - device: stm32g474ret6 | |
| max_size: 393216 | |
| - device: stm32l476rgt6 | |
| max_size: 524288 | |
| - device: stm32l562qei6 | |
| max_size: 393216 | |
| renode_platform: stm32l562.repl | |
| avm_address: "0x08060000" | |
| - device: stm32f207zgt6 | |
| max_size: 524288 | |
| - device: stm32u375rgt6 | |
| max_size: 524288 | |
| - device: stm32g0b1ret6 | |
| max_size: 393216 | |
| renode_platform: stm32g0b1.repl | |
| avm_address: "0x08060000" | |
| steps: | |
| - uses: erlef/setup-beam@v1 | |
| with: | |
| otp-version: "28" | |
| rebar3-version: "3.25.1" | |
| hexpm-mirrors: | | |
| https://builds.hex.pm | |
| https://repo.hex.pm | |
| https://cdn.jsdelivr.net/hex | |
| - name: "apt update" | |
| run: sudo apt update | |
| - name: "Install deps" | |
| run: sudo apt install -y cmake ninja-build gperf python3-pip && pip3 install meson | |
| - name: "Install ARM GNU Toolchain" | |
| run: | | |
| wget -q https://developer.arm.com/-/media/Files/downloads/gnu/15.2.rel1/binrel/arm-gnu-toolchain-15.2.rel1-x86_64-arm-none-eabi.tar.xz | |
| tar xJf arm-gnu-toolchain-15.2.rel1-x86_64-arm-none-eabi.tar.xz -C /opt | |
| echo "/opt/arm-gnu-toolchain-15.2.rel1-x86_64-arm-none-eabi/bin" >> $GITHUB_PATH | |
| - name: Checkout repo | |
| uses: actions/checkout@v4 | |
| - name: "Build for ${{ matrix.device }}" | |
| shell: bash | |
| working-directory: ./src/platforms/stm32/ | |
| run: | | |
| set -euo pipefail | |
| mkdir build | |
| cd build | |
| cmake .. -G Ninja -DCMAKE_TOOLCHAIN_FILE=cmake/arm-toolchain.cmake -DDEVICE=${{ matrix.device }} | |
| cmake --build . | |
| - name: "Check firmware size for ${{ matrix.device }}" | |
| shell: bash | |
| working-directory: ./src/platforms/stm32/build | |
| run: | | |
| set -euo pipefail | |
| ELF="AtomVM-${{ matrix.device }}.elf" | |
| SIZES=$(arm-none-eabi-size "$ELF" | tail -1) | |
| TEXT=$(echo "$SIZES" | awk '{print $1}') | |
| DATA=$(echo "$SIZES" | awk '{print $2}') | |
| FLASH_USED=$((TEXT + DATA)) | |
| MAX=${{ matrix.max_size }} | |
| echo "Firmware flash usage: ${FLASH_USED} bytes ($(( FLASH_USED / 1024 )) KB)" | |
| echo "Flash limit: ${MAX} bytes ($(( MAX / 1024 )) KB)" | |
| if [ "$FLASH_USED" -gt "$MAX" ]; then | |
| echo "::error::Firmware too large: ${FLASH_USED} bytes exceeds ${MAX} byte limit for ${{ matrix.device }}" | |
| exit 1 | |
| fi | |
| echo "OK: ${FLASH_USED} / ${MAX} bytes ($(( FLASH_USED * 100 / MAX ))% used)" | |
| - name: Build host AtomVM and test AVMs | |
| if: matrix.renode_platform | |
| run: | | |
| set -euo pipefail | |
| mkdir build-host | |
| cd build-host | |
| cmake .. -G Ninja | |
| cmake --build . -t stm32_boot_test stm32_gpio_test | |
| - name: Install Renode | |
| if: matrix.renode_platform | |
| run: | | |
| set -euo pipefail | |
| mkdir -p renode-portable | |
| wget -qO- https://builds.renode.io/renode-latest.linux-portable.tar.gz \ | |
| | tar -xzf - -C renode-portable --strip-components=1 | |
| echo "$PWD/renode-portable" >> $GITHUB_PATH | |
| pip install -r renode-portable/tests/requirements.txt | |
| - name: Run Renode boot test | |
| if: matrix.renode_platform | |
| run: | | |
| LOCAL_REPL="src/platforms/stm32/tests/renode/${{ matrix.renode_platform }}" | |
| if [ -f "$LOCAL_REPL" ]; then | |
| PLATFORM="@$PWD/$LOCAL_REPL" | |
| else | |
| PLATFORM="@platforms/cpus/${{ matrix.renode_platform }}" | |
| fi | |
| renode-test src/platforms/stm32/tests/renode/stm32_boot_test.robot \ | |
| --variable ELF:@$PWD/src/platforms/stm32/build/AtomVM-${{ matrix.device }}.elf \ | |
| --variable AVM:@$PWD/build-host/src/platforms/stm32/tests/test_erl_sources/stm32_boot_test.avm \ | |
| --variable AVM_ADDRESS:${{ matrix.avm_address }} \ | |
| --variable PLATFORM:$PLATFORM | |
| - name: Run Renode GPIO test | |
| if: matrix.renode_platform | |
| run: | | |
| LOCAL_REPL="src/platforms/stm32/tests/renode/${{ matrix.renode_platform }}" | |
| if [ -f "$LOCAL_REPL" ]; then | |
| PLATFORM="@$PWD/$LOCAL_REPL" | |
| else | |
| PLATFORM="@platforms/cpus/${{ matrix.renode_platform }}" | |
| fi | |
| renode-test src/platforms/stm32/tests/renode/stm32_gpio_test.robot \ | |
| --variable ELF:@$PWD/src/platforms/stm32/build/AtomVM-${{ matrix.device }}.elf \ | |
| --variable AVM:@$PWD/build-host/src/platforms/stm32/tests/test_erl_sources/stm32_gpio_test.avm \ | |
| --variable AVM_ADDRESS:${{ matrix.avm_address }} \ | |
| --variable PLATFORM:$PLATFORM |