#!/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 mkdir -p ${TMP_DIST}/memstats for ENV in \ custom_ESP32_4M316k\ custom_ESP8266_4M1M\ custom_ESP8266_4M2M\ dev_ESP8266_4M1M\ esp-wrover-kit_test_4M316k\ esp32test_4M316k\ hard_SONOFF_POW_4M1M\ hard_Shelly_1_2M256\ hard_Ventus_W266\ hard_other_POW_ESP8285_1M\ minimal_IRext_ESP8266_1M\ minimal_IRext_ESP8266_4M1M\ minimal_IRext_ESP8266_4M2M\ minimal_core_242_ESP8266_1M_OTA\ minimal_core_242_ESP8285_1M_OTA\ minimal_core_261_ESP8266_1M_OTA\ minimal_core_261_ESP8285_1M_OTA\ normal_ESP8266_16M\ normal_ESP8266_1M\ normal_ESP8266_1M_VCC\ normal_ESP8266_4M1M\ normal_ESP8285_1M\ normal_IRext_no_rx_ESP8266_4M2M\ normal_WROOM02_2M256\ normal_WROOM02_2M\ test_ESP8266_4M_VCC\ test_beta_ESP8266_16M\ test_beta_ESP8266_4M1M;\ 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} == *"esp32"* ]]; then MAX_FILESIZE=1310720 fi if [[ ${ENV} == *"4M316k"* ]]; then # ESP32 with 1800k of sketch space. MAX_FILESIZE=1900544 fi if [[ ${ENV} == *"ebug_custom"* ]]; 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"` 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" 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}