Skip to content

Extract from eavmlib platform-specific modules #4374

Extract from eavmlib platform-specific modules

Extract from eavmlib platform-specific modules #4374

Workflow file for this run

#
# Copyright 2022 Paul Guyot <pguyot@kallisys.net>
#
# SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
#
name: Pico Build
on:
push:
paths:
- '.github/workflows/pico-build.yaml'
- 'CMakeLists.txt'
- 'CMakeModules/**'
- 'libs/**'
- 'src/platforms/rp2/**'
- 'src/platforms/esp32/test/main/test_erl_sources/test_crypto.erl'
- 'src/libAtomVM/**'
pull_request:
paths:
- '.github/workflows/pico-build.yaml'
- 'CMakeLists.txt'
- 'CMakeModules/**'
- 'libs/**'
- 'src/platforms/rp2/**'
- 'src/platforms/esp32/test/main/test_erl_sources/test_crypto.erl'
- 'src/libAtomVM/**'
permissions:
actions: read
contents: write
security-events: write
concurrency:
group: ${{ github.workflow }}-${{ github.ref != 'refs/heads/main' && github.ref || github.run_id }}
cancel-in-progress: true
jobs:
build-atomvmlib:
runs-on: ubuntu-24.04
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: "apt update"
run: sudo apt update
- name: "Install deps"
run: |
sudo apt install -y \
cmake doxygen gperf ninja-build
- uses: erlef/setup-beam@v1
with:
otp-version: "28.1"
rebar3-version: "3.24.0"
hexpm-mirrors: |
https://builds.hex.pm
https://repo.hex.pm
https://cdn.jsdelivr.net/hex
- name: Build atomvmlib-rp2-pico.uf2/atomvmlib-rp2-pico2.uf2
shell: bash
run: |
set -euo pipefail
mkdir build
cd build
cmake .. -G Ninja
cmake --build . -t atomvmlib-rp2
- name: Upload atomvmlib artifacts
uses: actions/upload-artifact@v4
with:
name: atomvmlib-uf2-files
path: build/libs/*.uf2
- name: Upload uf2tool artifact
uses: actions/upload-artifact@v4
with:
name: uf2tool
path: build/tools/uf2tool/uf2tool
pico:
runs-on: ubuntu-24.04
needs: build-atomvmlib
strategy:
matrix:
board: ["pico", "pico_w", "pico2", "pico2_w"]
platform: [""]
jit: ["", "-DAVM_DISABLE_JIT=OFF"]
include:
- board: "pico2"
platform: "-DPICO_PLATFORM=rp2350-riscv"
jit: ""
- board: "pico2"
platform: "-DPICO_PLATFORM=rp2350-riscv"
jit: "-DAVM_DISABLE_JIT=OFF"
- board: "pico2_w"
platform: "-DPICO_PLATFORM=rp2350-riscv"
jit: ""
- board: "pico2_w"
platform: "-DPICO_PLATFORM=rp2350-riscv"
jit: "-DAVM_DISABLE_JIT=OFF"
steps:
- name: Checkout repo
uses: actions/checkout@v4
- uses: erlef/setup-beam@v1
with:
otp-version: "28.1"
rebar3-version: "3.24.0"
hexpm-mirrors: |
https://builds.hex.pm
https://repo.hex.pm
https://cdn.jsdelivr.net/hex
- name: Set and escape ref name
shell: bash
run: |
echo "AVM_REF_NAME=${{ github.ref_name }}" | tr '/' '-' >> "$GITHUB_ENV";
- name: Download atomvmlib artifacts
uses: actions/download-artifact@v4
with:
name: atomvmlib-uf2-files
path: build/libs/
- name: Download uf2tool artifact
uses: actions/download-artifact@v4
with:
name: uf2tool
path: .
- name: "apt update"
run: sudo apt update
- name: "Install deps"
run: |
sudo apt install -y \
cmake doxygen gperf ninja-build gcc-arm-none-eabi \
libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib
- name: Install riscv32 toolchain
if: matrix.platform == '-DPICO_PLATFORM=rp2350-riscv'
run: |
sudo mkdir -p /opt/riscv32-toolchain
cd /opt/riscv32-toolchain
sudo wget -q https://github.com/raspberrypi/pico-sdk-tools/releases/download/v2.2.0-3/riscv-toolchain-15-x86_64-lin.tar.gz
sudo tar xzf riscv-toolchain-15-x86_64-lin.tar.gz
sudo rm riscv-toolchain-15-x86_64-lin.tar.gz
echo "/opt/riscv32-toolchain/bin" >> $GITHUB_PATH
- name: "Git config safe.directory for codeql"
run: git config --global --add safe.directory /__w/AtomVM/AtomVM
- name: "Initialize CodeQL"
uses: github/codeql-action/init@v4
with:
languages: "cpp"
build-mode: manual
queries: +./code-queries/term-to-non-term-func.ql,./code-queries/non-term-to-term-func.ql,./code-queries/mismatched-atom-string-length.ql,./code-queries/mismatched-free-type.ql,./code-queries/term-use-after-gc.ql
- name: Build
shell: bash
working-directory: ./src/platforms/rp2/
run: |
set -euo pipefail
mkdir build
cd build
cmake .. -G Ninja -DPICO_BOARD=${{ matrix.board }} ${{ matrix.platform }} ${{ matrix.jit }}
cmake --build . --target=AtomVM
- name: "Perform CodeQL Analysis"
uses: github/codeql-action/analyze@v4
- name: Install nvm and nodejs 20
if: matrix.board != 'pico2' && matrix.board != 'pico2_w'
run: |
set -euo pipefail
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source $HOME/.nvm/nvm.sh
nvm install 24
- name: Build tests (without SMP)
if: matrix.board != 'pico2' && matrix.board != 'pico2_w'
shell: bash
working-directory: ./src/platforms/rp2/
run: |
set -euo pipefail
mkdir build.nosmp
cd build.nosmp
# TODO: fix all warnings and enable -DAVM_WARNINGS_ARE_ERRORS=ON
cmake .. -G Ninja -DPICO_BOARD=${{ matrix.board }} ${{ matrix.jit }} -DAVM_DISABLE_SMP=1
cmake --build . --target=rp2_tests
- name: Run tests with rp2040js
if: matrix.board != 'pico2' && matrix.board != 'pico2_w'
shell: bash
working-directory: ./src/platforms/rp2/tests
run: |
set -euo pipefail
source $HOME/.nvm/nvm.sh
nvm use node
npm install
npx tsx run-tests.ts ../build.nosmp/tests/rp2_tests.uf2 ../build.nosmp/tests/test_erl_sources/rp2_test_modules.uf2
- name: Rename AtomVM and write sha256sum
if: matrix.platform == '' && matrix.jit == ''
shell: bash
run: |
pushd src/platforms/rp2/build
ATOMVM_UF2=AtomVM-${{ matrix.board }}-${{env.AVM_REF_NAME}}.uf2
mv src/AtomVM.uf2 "src/${ATOMVM_UF2}"
sha256sum "src/${ATOMVM_UF2}" > "src/${ATOMVM_UF2}.sha256"
popd
- name: Upload AtomVM artifact
if: matrix.platform == '' && matrix.jit == ''
uses: actions/upload-artifact@v4
with:
name: AtomVM-${{ matrix.board }}-${{env.AVM_REF_NAME}}.uf2
path: src/platforms/rp2/build/src/AtomVM-${{ matrix.board }}-*.uf2
- name: Rename atomvmlib-rp2 and write sha256sum
if: matrix.platform == '' && matrix.jit == ''
shell: bash
run: |
pushd build/libs
ATOMVMLIB_FILE=atomvmlib-rp2-${{ matrix.board }}-${{env.AVM_REF_NAME}}.uf2
mv atomvmlib-rp2-${{matrix.board == 'pico_w' && 'pico' || matrix.board == 'pico2_w' && 'pico2' || matrix.board}}.uf2 "${ATOMVMLIB_FILE}"
sha256sum "${ATOMVMLIB_FILE}" > "${ATOMVMLIB_FILE}.sha256"
popd
- name: Combine uf2 using uf2tool
if: matrix.platform == '' && matrix.jit == ''
shell: bash
run: |
ATOMVM_COMBINED_FILE=AtomVM-combined-${{ matrix.board }}-${{env.AVM_REF_NAME}}.uf2
./uf2tool join -o "${ATOMVM_COMBINED_FILE}" src/platforms/rp2/build/src/AtomVM-${{ matrix.board }}-${{env.AVM_REF_NAME}}.uf2 build/libs/atomvmlib-rp2-${{ matrix.board }}-${{env.AVM_REF_NAME}}.uf2
sha256sum "${ATOMVM_COMBINED_FILE}" > "${ATOMVM_COMBINED_FILE}.sha256"
echo "ATOMVM_COMBINED_FILE=${ATOMVM_COMBINED_FILE}" >> $GITHUB_ENV
- name: Upload combined AtomVM artifact
if: matrix.platform == '' && matrix.jit == ''
uses: actions/upload-artifact@v4
with:
name: ${{ env.ATOMVM_COMBINED_FILE }}
path: ${{ env.ATOMVM_COMBINED_FILE }}
- name: Release (Pico & Pico2)
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/') && matrix.board != 'pico_w' && matrix.board != 'pico2_w' && matrix.platform == '' && matrix.jit == ''
with:
draft: true
fail_on_unmatched_files: true
files: |
src/platforms/rp2/build/src/AtomVM-${{ matrix.board }}-${{ github.ref_name }}.uf2
src/platforms/rp2/build/src/AtomVM-${{ matrix.board }}-${{ github.ref_name }}.uf2.sha256
build/libs/atomvmlib-rp2-${{ matrix.board }}-${{ github.ref_name }}.uf2
build/libs/atomvmlib-rp2-${{ matrix.board }}-${{ github.ref_name }}.uf2.sha256
${{ env.ATOMVM_COMBINED_FILE }}
${{ env.ATOMVM_COMBINED_FILE }}.sha256
- name: Release (PicoW & Pico2W)
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/') && (matrix.board == 'pico_w' || matrix.board == 'pico2_w') && matrix.platform == '' && matrix.jit == ''
with:
draft: true
fail_on_unmatched_files: true
files: |
src/platforms/rp2/build/src/AtomVM-${{ matrix.board }}-${{ github.ref_name }}.uf2
src/platforms/rp2/build/src/AtomVM-${{ matrix.board }}-${{ github.ref_name }}.uf2.sha256
${{ env.ATOMVM_COMBINED_FILE }}
${{ env.ATOMVM_COMBINED_FILE }}.sha256