Add all python code run on the device to the manifest.py to freeze it. This has two benefits: - It precompiles the bytecode, so it is smaller and faster - All code (C and python) is now in the firmware image, leaving the littlefs filesystem on the flash free for user settings. This requires changing the way the hardware variants are handled. There is now only one _filesystem_ image, but instead there are different _firmware_ images for each variant. Signed-off-by: Matthias Blankertz <matthias@blankertz.org>
56 lines
2.1 KiB
Bash
Executable File
56 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/bash
|
|
|
|
TOPDIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
|
|
|
set -eu
|
|
|
|
( cd lib/micropython
|
|
make -C mpy-cross -j "$(nproc)"
|
|
|
|
# build tonberry specific unix port of micropython
|
|
make -C ports/unix VARIANT_DIR="$TOPDIR"/boards/tonberry_unix clean
|
|
make -C ports/unix VARIANT_DIR="$TOPDIR"/boards/tonberry_unix -j "$(nproc)"
|
|
)
|
|
|
|
( cd tools/mklittlefs
|
|
make -j "$(nproc)"
|
|
)
|
|
|
|
BUILDDIR=lib/micropython/ports/rp2/build-TONBERRY_RPI_PICO_W/
|
|
OUTDIR=$(pwd)/build
|
|
mkdir -p "$OUTDIR"
|
|
FS_STAGE_DIR=$(mktemp -d)
|
|
mkdir "$FS_STAGE_DIR"/fs
|
|
trap 'rm -rf $FS_STAGE_DIR' EXIT
|
|
tools/mklittlefs/mklittlefs -p 256 -s 868352 -c "$FS_STAGE_DIR"/fs "$FS_STAGE_DIR"/filesystem.bin
|
|
|
|
for hwconfig in boards/RPI_PICO_W/manifest-*.py; do
|
|
hwconfig_base=$(basename "$hwconfig")
|
|
hwname=${hwconfig_base##manifest-}
|
|
hwname=${hwname%%.py}
|
|
hwconfig_abs=$(realpath "$hwconfig")
|
|
( cd lib/micropython
|
|
make -C ports/rp2 BOARD=TONBERRY_RPI_PICO_W BOARD_DIR="$TOPDIR"/boards/RPI_PICO_W clean
|
|
make -C ports/rp2 BOARD=TONBERRY_RPI_PICO_W BOARD_DIR="$TOPDIR"/boards/RPI_PICO_W \
|
|
USER_C_MODULES="$TOPDIR"/modules/micropython.cmake \
|
|
FROZEN_MANIFEST="$hwconfig_abs" -j "$(nproc)"
|
|
)
|
|
PICOTOOL=picotool
|
|
if ! command -v $PICOTOOL >/dev/null 2>&1; then
|
|
echo "system picotool not found, checking SDK build dir"
|
|
PICOTOOL=lib/micropython/ports/rp2/build-TONBERRY_RPI_PICO_W/_deps/picotool-build/picotool
|
|
if ! command -v $PICOTOOL >/dev/null 2>&1; then
|
|
echo "No picotool found, exiting"
|
|
exit 1
|
|
fi
|
|
fi
|
|
truncate -s 2M $BUILDDIR/firmware-filesystem.bin
|
|
dd if=$BUILDDIR/firmware.bin of=$BUILDDIR/firmware-filesystem.bin bs=1k
|
|
dd if="$FS_STAGE_DIR"/filesystem.bin of=$BUILDDIR/firmware-filesystem.bin bs=1k seek=1200
|
|
cp $BUILDDIR/firmware.uf2 "$OUTDIR"/firmware-"$hwname".uf2
|
|
$PICOTOOL uf2 convert $BUILDDIR/firmware-filesystem.bin "$OUTDIR"/firmware-filesystem-"$hwname".uf2
|
|
done
|
|
|
|
echo "Output in" "${OUTDIR}"/firmware-*.uf2
|
|
echo "Images with filesystem in" "${OUTDIR}"/firmware-filesystem-*.uf2
|