1#!/bin/bash 2# 3# Build firmware for ports. 4# 5# Requirements: 6# - All toolchains must be in path (arm-none-eabi-gcc, xtensa-lx106-elf) 7# - IDF_PATH_V42 must be set 8# - IDF_PATH_V43 must be set 9# - MICROPY_AUTOBUILD_MICROPYTHON_REPO must be set to location of micropython repository 10# - MICROPY_AUTOBUILD_MAKE must be set to the make command to use, eg "make -j2" 11# 12# Optional settings: 13# - MICROPY_AUTOBUILD_REMOTE_MACHINE can be set to a remote ssh machine to copy files to 14# - MICROPY_AUTOBUILD_REMOTE_DIR can be set to destination directory on remote machine 15 16if [ ! -d "$IDF_PATH_V42" ]; then 17 echo "must set IDF_PATH_V42" 18 exit 1 19fi 20 21if [ ! -d "$IDF_PATH_V43" ]; then 22 echo "must set IDF_PATH_V43" 23 exit 1 24fi 25 26if [ ! -d "$MICROPY_AUTOBUILD_MICROPYTHON_REPO" ]; then 27 echo "must set MICROPY_AUTOBUILD_MICROPYTHON_REPO" 28 exit 1 29fi 30 31if [ -z "$MICROPY_AUTOBUILD_MAKE" ]; then 32 echo "must set MICROPY_AUTOBUILD_MAKE" 33 exit 1 34fi 35 36######################################## 37# Initialisation 38 39# get directory of this script for access to other build scripts 40AUTODIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" 41 42# make local directory to put firmware 43LOCAL_FIRMWARE=/tmp/autobuild-firmware-$$ 44mkdir -p ${LOCAL_FIRMWARE} 45 46# get latest MicroPython 47git -C ${MICROPY_AUTOBUILD_MICROPYTHON_REPO} pull 48git -C ${MICROPY_AUTOBUILD_MICROPYTHON_REPO} submodule update --init 49git -C ${MICROPY_AUTOBUILD_MICROPYTHON_REPO}/lib/pico-sdk submodule update --init 50 51######################################## 52# Build all firmware 53 54pushd ${MICROPY_AUTOBUILD_MICROPYTHON_REPO} 55 56# build cross compiler 57make -C mpy-cross 58 59# make the firmware tag 60FW_DATE=$(date '+%Y%m%d') 61FW_GIT="$(git describe --dirty || echo unknown)" 62FW_TAG="-$FW_DATE-unstable-$FW_GIT" 63 64# build new firmware 65cd ports/stm32 66${AUTODIR}/build-stm32-latest.sh ${FW_TAG} ${LOCAL_FIRMWARE} 67cd ../cc3200 68${AUTODIR}/build-cc3200-latest.sh ${FW_TAG} ${LOCAL_FIRMWARE} 69cd ../esp8266 70${AUTODIR}/build-esp8266-latest.sh ${FW_TAG} ${LOCAL_FIRMWARE} 71cd ../esp32 72${AUTODIR}/build-esp32-latest.sh ${IDF_PATH_V42} ${FW_TAG} ${LOCAL_FIRMWARE} 73${AUTODIR}/build-esp32-latest.sh ${IDF_PATH_V43} ${FW_TAG} ${LOCAL_FIRMWARE} 74cd ../rp2 75${AUTODIR}/build-rp2-latest.sh ${FW_TAG} ${LOCAL_FIRMWARE} 76cd ../mimxrt 77${AUTODIR}/build-mimxrt-latest.sh ${FW_TAG} ${LOCAL_FIRMWARE} 78 79popd 80 81######################################## 82# Copy firmware to remote machine 83 84if [ -z "$MICROPY_AUTOBUILD_REMOTE_MACHINE" -o -z "$MICROPY_AUTOBUILD_REMOTE_DIR" ]; then 85 echo "No remote given, leaving firmware in ${LOCAL_FIRMWARE}" 86 exit 0 87fi 88 89# copy new firmware to remote machine 90scp ${LOCAL_FIRMWARE}/* ${MICROPY_AUTOBUILD_REMOTE_MACHINE}:${MICROPY_AUTOBUILD_REMOTE_DIR}/ 91 92# remove old firmware 93${AUTODIR}/remove_old_firmware.py ${MICROPY_AUTOBUILD_REMOTE_MACHINE} ${MICROPY_AUTOBUILD_REMOTE_DIR} 94 95######################################## 96# Clean up 97 98/bin/rm -v ${LOCAL_FIRMWARE}/* 99/bin/rmdir ${LOCAL_FIRMWARE} 100