mirror of
https://github.com/letscontrolit/ESPEasy.git
synced 2026-07-27 19:57:38 +00:00
124 lines
3.1 KiB
Bash
Executable File
124 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
VERSION=$(git describe)
|
|
TMP_DIST=`mktemp -d`
|
|
CURPATH=`pwd`
|
|
BUILD_LOG=`echo "${TMP_DIST}/buildlog.txt"`
|
|
|
|
# PIO 3.x :
|
|
# BINARY_PATH=".pioenvs"
|
|
|
|
# PIO 4.0 and newer:
|
|
BINARY_PATH=".pio/build"
|
|
|
|
while getopts d: option
|
|
do
|
|
case "${option}"
|
|
in
|
|
d) VERSION=${OPTARG};;
|
|
esac
|
|
done
|
|
|
|
|
|
if [ ! -d ${TMP_DIST} ]; then
|
|
# Could not create temp dir, so exit
|
|
exit 1
|
|
fi
|
|
|
|
#Naming convention:
|
|
# ESP_Easy_[github version]_[plugin set]_[chip type]_[flash memory].bin
|
|
|
|
mkdir -p ${TMP_DIST}
|
|
cp -r dist/* ${TMP_DIST}/
|
|
|
|
if [ -d "docs/build" ]; then
|
|
# Docs have been created
|
|
mkdir -p ${TMP_DIST}/docs
|
|
cp -r docs/build/* ${TMP_DIST}/docs/
|
|
fi
|
|
|
|
FBINDIR="${TMP_DIST}/factory_bin"
|
|
mkdir -p ${TMP_DIST}/memstats
|
|
echo ${FBINDIR}
|
|
mkdir -p ${FBINDIR}
|
|
|
|
# Must look into all possible env definitions.
|
|
# Exclude so called "spec_" (special) builds
|
|
for ENV in `grep "^\[env:" platformio*.ini |cut -d'[' -f2|cut -d']' -f1|cut -d':' -f2|sort -n|grep -v spec_`;
|
|
do
|
|
MAX_FILESIZE=1044464
|
|
if [[ ${ENV} == *"_1M"* ]]; then
|
|
# max 872 kiB - 16 bytes
|
|
MAX_FILESIZE=892912
|
|
fi
|
|
if [[ ${ENV} == *"_1M_OTA"* ]]; then
|
|
# max 600 kiB - 16 bytes
|
|
MAX_FILESIZE=614384
|
|
fi
|
|
if [[ ${ENV} == *"4M316k"* ]]; then
|
|
# ESP32 with 1800k of sketch space.
|
|
MAX_FILESIZE=1900544
|
|
fi
|
|
if [[ ${ENV} == *"debug_"* ]]; then
|
|
# Debug env, used for analysis, not to be run on a node.
|
|
MAX_FILESIZE=0
|
|
fi
|
|
|
|
FIRMWARE_BIN=`echo "${BINARY_PATH}/${ENV}/firmware.bin"`
|
|
FIRMWARE_FACTORY_BIN=`echo "${BINARY_PATH}/${ENV}/firmware-factory.bin"`
|
|
|
|
if [ -f $FIRMWARE_BIN ]; then
|
|
FILESIZE=$(stat -c%s `echo "${FIRMWARE_BIN}"` )
|
|
if (( FILESIZE < MAX_FILESIZE )); then
|
|
echo
|
|
echo "SUCCESS: $FILESIZE < $MAX_FILESIZE Bytes. (${ENV})" >> ${BUILD_LOG}
|
|
BIN=${BINARY_PATH}/${ENV}/ESP_Easy_${VERSION}_${ENV}.bin
|
|
cp ${FIRMWARE_BIN} $BIN
|
|
python2 crc2.py $BIN
|
|
mv $BIN "${TMP_DIST}/bin/ESP_Easy_${VERSION}_${ENV}.bin"
|
|
if [ -f $FIRMWARE_FACTORY_BIN ]; then
|
|
FBIN=${BINARY_PATH}/${ENV}/ESP_Easy_${VERSION}_${ENV}_factory.bin
|
|
cp ${FIRMWARE_FACTORY_BIN} $FBIN
|
|
#python2 crc2.py $FBIN
|
|
mv $FBIN "${FBINDIR}/ESP_Easy_${VERSION}_${ENV}_factory.bin"
|
|
fi
|
|
else
|
|
echo "FAILED: too large $FILESIZE > $MAX_FILESIZE Bytes. (${ENV})" >> ${BUILD_LOG}
|
|
fi
|
|
else
|
|
echo "FAILED: No file created. (${ENV})" >> ${BUILD_LOG}
|
|
fi
|
|
|
|
ELFFILE=`echo "${BINARY_PATH}/${ENV}/firmware.elf"`
|
|
if [ -f $ELFFILE ]; then
|
|
SYMBOLS_STATS=`echo "${TMP_DIST}/memstats/symbols_${ENV}.txt"`
|
|
STRINGS_STATS=`echo "${TMP_DIST}/memstats/strings_${ENV}.txt"`
|
|
readelf -a ${ELFFILE} |grep 3ff |sort -n -k 3 > ${SYMBOLS_STATS}
|
|
objdump -s -j .rodata ${ELFFILE} > ${STRINGS_STATS}
|
|
fi
|
|
done
|
|
|
|
|
|
#create a source structure that is the same as the original ESPEasy project (and works with the howto on the wiki)
|
|
#rm -rf dist/Source 2>/dev/null
|
|
|
|
mkdir -p ${TMP_DIST}/source
|
|
cp -r lib ${TMP_DIST}/source/
|
|
cp -r src ${TMP_DIST}/source/
|
|
cp platformio*.ini ${TMP_DIST}/source/
|
|
|
|
cd ${TMP_DIST}
|
|
|
|
echo
|
|
echo "### Creating zip archive"
|
|
zip -qq ${CURPATH}/ESPEasy_$VERSION.zip -r .
|
|
|
|
|
|
|
|
# Display the build log.
|
|
cat ${BUILD_LOG}
|
|
|
|
|
|
rm -Rf ${TMP_DIST}/* 2>/dev/null
|
|
rmdir ${TMP_DIST}
|