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