Files

875 lines
31 KiB
Bash
Raw Permalink Normal View History

2018-01-03 14:18:06 +01:00
fs_type_fat="no"
fs_fat_sect=4096
2018-12-04 14:06:15 +08:00
fs_use_wl=""
2018-01-17 16:04:14 +01:00
linplatform=""
linprocessor=""
linmachine=""
2018-01-03 14:18:06 +01:00
#----------------
get_arguments() {
POSITIONAL_ARGS=()
local key="$1"
J_OPTION=""
while [[ $# -gt 0 ]]
do
local key="$1"
case $key in
-v|--verbose)
export MP_SHOW_PROGRESS="yes"
shift # past argument
;;
-f8|--flashsize8)
FLASH_SIZE="8"
shift # past argument
;;
-f16|--flashsize16)
FLASH_SIZE="16"
shift # past argument
;;
-fs|--fssize)
FS_SIZE="$2"
2018-12-04 14:06:15 +08:00
shift # past argument
shift # past value
;;
-p|--port)
BUILD_COMPORT="$2"
BUILD_COMPORT=" ESPPORT=${BUILD_COMPORT}"
shift # past argument
shift # past value
;;
-b|--bdrate)
BUILD_BDRATE="$2"
BUILD_BDRATE=" ESPBAUD=${BUILD_BDRATE}"
2018-01-03 14:18:06 +01:00
shift # past argument
shift # past value
;;
-a|--appsize)
APP_SIZE="$2"
APP_SIZE=$(( ${APP_SIZE} - 128 ));
shift # past argument
shift # past value
;;
--force2p)
FORCE_2PART="yes"
shift # past argument
;;
--force3p)
FORCE_3PART="yes"
shift # past argument
;;
*) # unknown option
local opt="$1"
if [ "${opt:0:2}" == "-j" ]; then
J_OPTION=${opt}
else
POSITIONAL_ARGS+=("$1") # save it in an array for later
fi
shift # past argument
;;
esac
done
#set -- "${POSITIONAL_ARGS[@]}" # restore positional parameters
}
#---------------
get_bin_size() {
if [ -f "build/MicroPython.bin" ]; then
BIN_FILE_SIZE=$(wc -c < build/MicroPython.bin)
else
BIN_FILE_SIZE=0
fi
}
#----------------------
get_config_flash_sz() {
2018-12-04 14:06:15 +08:00
local cfg_fsfat=$(grep -e CONFIG_LITTLEFLASH_USE_WEAR_LEVELING=y sdkconfig)
if [ "${cfg_fsfat}" != "" ]; then
fs_use_wl="-w"
fi
cfg_fsfat=$(grep -e CONFIG_MICROPY_FILESYSTEM_TYPE=1 sdkconfig)
if [ "${cfg_fsfat}" == "CONFIG_MICROPY_FILESYSTEM_TYPE=1" ]; then
# FatFS
2018-01-03 14:18:06 +01:00
fs_type_fat="yes"
cfg_fsfat=$(grep -e CONFIG_WL_SECTOR_SIZE_512=y sdkconfig)
if [ "${cfg_fsfat}" == "CONFIG_WL_SECTOR_SIZE_512=y" ]; then
fs_fat_sect=512
fi
2018-12-04 14:06:15 +08:00
else
cfg_fsfat=$(grep -e CONFIG_MICROPY_FILESYSTEM_TYPE=2 sdkconfig)
if [ "${cfg_fsfat}" == "CONFIG_MICROPY_FILESYSTEM_TYPE=2" ]; then
# LittleFS
fs_type_fat="yes"
cfg_fsfat=$(grep -e CONFIG_WL_SECTOR_SIZE_512=y sdkconfig)
if [ "${cfg_fsfat}" == "CONFIG_WL_SECTOR_SIZE_512=y" ]; then
if [ "${fs_use_wl}" == "-w" ]; then
fs_fat_sect=512
fi
fi
fi
2018-01-03 14:18:06 +01:00
fi
2018-12-04 14:06:15 +08:00
2018-01-03 14:18:06 +01:00
if [ ${FLASH_SIZE} -eq 4 ]; then
# Flash size was not set by options, check config file
local cfg_flashsz=$(grep -e CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y sdkconfig)
if [ "${cgf_flashsz}" == "CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y" ]; then
FLASH_SIZE="8"
return
fi
cfg_flashsz=$(grep -e CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y sdkconfig)
if [ "${cgf_flashsz}" == "CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y" ]; then
FLASH_SIZE="16"
fi
fi
}
2018-12-04 14:06:15 +08:00
#---------------
check_config() {
# If BT is enabled, check and modify, if needed, some configuration
local TMPVAR1=""
local USE_RFCOMM=$(grep -e CONFIG_MICROPY_USE_RFCOMM=y sdkconfig)
local USE_BT=$(grep -e CONFIG_MICROPY_USE_BLUETOOTH=y sdkconfig)
if [ "${USE_RFCOMM}" == "CONFIG_MICROPY_USE_RFCOMM=y" ] || [ "${USE_BT}" == "CONFIG_MICROPY_USE_BLUETOOTH=y" ]; then
# change to RELEASE optimization level to decrease IRAM usage
TMPVAR1=$(grep -e CONFIG_OPTIMIZATION_LEVEL_DEBUG=y sdkconfig)
if [ "${TMPVAR1}" == "CONFIG_OPTIMIZATION_LEVEL_DEBUG=y" ]; then
sed --in-place='.bak1' 's/CONFIG_OPTIMIZATION_LEVEL_DEBUG=y/CONFIG_OPTIMIZATION_LEVEL_DEBUG=/g' sdkconfig
sed --in-place='.bak2' 's/CONFIG_OPTIMIZATION_LEVEL_RELEASE=/CONFIG_OPTIMIZATION_LEVEL_RELEASE=y/g' sdkconfig
rm -f sdkconfig.bak1 > /dev/null 2>&1
rm -f sdkconfig.bak2 > /dev/null 2>&1
return 1
fi
fi
return 0
}
2018-01-03 14:18:06 +01:00
#-----------------
set_partitions() {
get_bin_size
get_config_flash_sz
local size=$(( (($1 / 64) + 1) * 64 ))
local fs_size=256
local flash_sz=$(( $FLASH_SIZE * 1024 ))
local fbin_size=$(( ($BIN_FILE_SIZE / 1024) + 1 ))
local min_fs_size=256
local PART_SUB_TYPE="spiffs,"
if [ "${fs_type_fat}" == "yes" ]; then
PART_SUB_TYPE="fat, "
if [ ${fs_fat_sect} -eq 4096 ]; then
min_fs_size=512
fi
fi
# === Create partitions configuration file ===
local USE_OTA_PART=$(grep -e CONFIG_MICROPY_USE_OTA=y sdkconfig)
if [ "${USE_OTA_PART}" == "CONFIG_MICROPY_USE_OTA=y" ]; then
# --- OTA partition layout is used ---
local part_lay3="no"
if [ ${FORCE_2PART} != "yes" ]; then
if [ ${flash_sz} -gt 8000 ] || [ ${FORCE_3PART} == "yes" ]; then
part_lay3="yes"
fi
fi
2018-01-19 12:20:23 +01:00
if [ ${size} -le 64 ]; then size=1024; fi
2018-01-03 14:18:06 +01:00
if [ ${fbin_size} -gt ${size} ]; then
size=$(( (($fbin_size / 64) + 1) * 64 ));
fi
if [ ${part_lay3} == "yes" ]; then
fs_size=$(( $flash_sz - $size - $size - $size - 64))
fs_start=$(( (64 + $size + $size + $size) * 1024 ))
else
fs_size=$(( $flash_sz - $size - $size - 64))
fs_start=$(( (64 + $size + $size) * 1024 ))
fi
if [ ${fs_size} -lt ${min_fs_size} ]; then
local nspc=""
if [ ${FLASH_SIZE} -lt 5 ]; then nspc=" "; fi
echo "==========================================="
echo "== Firmware does not fit in ${FLASH_SIZE}MB Flash${nspc} =="
if [ ${min_fs_size} -eq 512 ]; then
echo "== Min FatFS size (4096 sect size): 512K =="
fi
echo "==========================================="
echo ""
return 1
fi
if [ ${FS_SIZE} -gt 256 ]; then
if [ ${fs_size} -gt ${FS_SIZE} ]; then
fs_size=${FS_SIZE}
fi
fi
echo "# -------------------------------------------------------" > partitions_mpy.csv
2018-12-04 14:06:15 +08:00
echo "# - Partition layout generated by BUILD.sh script -" >> partitions_mpy.csv
2018-01-03 14:18:06 +01:00
echo "# -------------------------------------------------------" >> partitions_mpy.csv
echo "# Name, Type, SubType, Offset, Size, Flags" >> partitions_mpy.csv
echo "# -------------------------------------------------------" >> partitions_mpy.csv
echo "nvs, data, nvs, 0x9000, 16K," >> partitions_mpy.csv
echo "otadata, data, ota, 0xd000, 8K," >> partitions_mpy.csv
echo "phy_init, data, phy, 0xf000, 4K," >> partitions_mpy.csv
if [ ${part_lay3} == "yes" ]; then
echo "MicroPython, app, factory, 0x10000, ${size}K," >> partitions_mpy.csv
echo "MicroPython_1, app, ota_0, , ${size}K," >> partitions_mpy.csv
else
echo "MicroPython_1, app, ota_0, 0x10000, ${size}K," >> partitions_mpy.csv
fi
echo "MicroPython_2, app, ota_1, , ${size}K," >> partitions_mpy.csv
echo "internalfs, data, ${PART_SUB_TYPE} , ${fs_size}K," >> partitions_mpy.csv
else
# --- Single partition layout is used ---
2018-01-19 12:20:23 +01:00
if [ ${size} -le 64 ]; then size=1024; fi
2018-01-03 14:18:06 +01:00
if [ ${fbin_size} -gt ${size} ]; then
size=$(( (($fbin_size / 64) + 1) * 64 ));
fi
fs_size=$(( $flash_sz - $size - 64))
fs_start=$(( (64 + $size ) * 1024 ))
if [ ${fs_size} -lt ${min_fs_size} ]; then
local nspc=""
if [ ${FLASH_SIZE} -lt 5 ]; then nspc=" "; fi
echo "==========================================="
echo "== Firmware does not fit in ${FLASH_SIZE}MB Flash${nspc} =="
if [ ${min_fs_size} -eq 512 ]; then
echo "== Min FatFS size (4096 sect size): 512K =="
fi
echo "==========================================="
echo ""
return 1
fi
if [ ${FS_SIZE} -gt 256 ]; then
if [ ${fs_size} -gt ${FS_SIZE} ]; then
fs_size=${FS_SIZE}
fi
fi
echo "# -------------------------------------------------------" > partitions_mpy.csv
2018-12-04 14:06:15 +08:00
echo "# - Partition layout generated by BUILD.sh script -" >> partitions_mpy.csv
2018-01-03 14:18:06 +01:00
echo "# -------------------------------------------------------" >> partitions_mpy.csv
echo "# Name, Type, SubType, Offset, Size, Flags" >> partitions_mpy.csv
echo "# -------------------------------------------------------" >> partitions_mpy.csv
echo "nvs, data, nvs, 0x9000, 24K," >> partitions_mpy.csv
echo "phy_init, data, phy, 0xf000, 4K," >> partitions_mpy.csv
echo "MicroPython, app, factory, 0x10000, ${size}K," >> partitions_mpy.csv
echo "internalfs, data, ${PART_SUB_TYPE} , ${fs_size}K," >> partitions_mpy.csv
fi
fs_start_hex=$(printf "%x\n" $fs_start)
2018-12-04 14:06:15 +08:00
local fs_sector_count=$(( ($fs_size * 1024) / $fs_fat_sect ))
2018-01-03 14:18:06 +01:00
export CONFIG_MICROPY_INTERNALFS_START="0x${fs_start_hex}"
export CONFIG_MICROPY_INTERNALFS_SIZE=${fs_size}
2018-12-04 14:06:15 +08:00
export CONFIG_MICROPY_BLOCK_SIZE=${fs_fat_sect}
export CONFIG_MICROPY_BLOCK_COUNT=${fs_sector_count}
export CONFIG_MICROPY_USE_WL=${fs_use_wl}
2018-01-03 14:18:06 +01:00
return 0
}
# ----------------------
# Check Operating System
# ----------------------
check_OS() {
local unameOut="$(uname -s)"
case "${unameOut}" in
Linux*) machine=Linux;;
Darwin*) machine=MacOS;;
CYGWIN*) machine=Win;;
MINGW*) machine=Win;;
*) machine=UNKNOWN
esac
if [ "${machine}" == "UNKNOWN" ]; then
if [ "${machine:0:5}" == "MINGW" ]; then
machine=Win
fi
fi
if [ "${machine}" == "UNKNOWN" ]; then
echo ""
echo "Unsupported OS detected."
echo ""
return 1
fi
if [ "${machine}" == "Win" ]; then
if [ ! -f "/usr/bin/tar.exe" ]; then
echo "Installing tar..."
pacman -S --noconfirm tar > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "OK."
else
echo "FAILED"
return 1
fi
fi
if [ ! -f "/usr/bin/tar.exe" ]; then
echo ""
echo "'tar.exe' needed for toolchain extraction not found!"
echo ""
return 1
fi
MK_SPIFFS_BIN="mkspiffs.exe"
MK_FATFS_BIN="mkfatfs.exe"
2018-12-04 14:06:15 +08:00
MK_LITTLEFS_BIN="mklfs.exe"
2018-01-03 14:18:06 +01:00
else
2018-01-17 16:04:14 +01:00
if [ "${machine}" == "Linux" ]; then
linplatform="$(uname -i)"
linprocessor="$(uname -p)"
linmachine="$(uname -m)"
2018-01-17 16:04:14 +01:00
fi
2018-01-03 14:18:06 +01:00
MK_SPIFFS_BIN="mkspiffs"
MK_FATFS_BIN="mkfatfs"
2018-12-04 14:06:15 +08:00
MK_LITTLEFS_BIN="mklfs"
2018-01-03 14:18:06 +01:00
fi
return 0
}
# =================================================
# Test if toolchains are unpacked and right version
# Clean directories
# =================================================
#--------------------
check_Environment() {
2018-12-04 14:06:15 +08:00
# --------------------------------------------------
# Remove directories from early MicroPython versions
# --------------------------------------------------
2018-01-03 14:18:06 +01:00
if [ -d "esp-idf" ]; then
rm -rf esp-idf/ > /dev/null 2>&1
rmdir esp-idf > /dev/null 2>&1
fi
if [ -d "esp-idf_psram" ]; then
rm -rf esp-idf_psram/ > /dev/null 2>&1
rmdir esp-idf_psram > /dev/null 2>&1
fi
if [ -d "xtensa-esp32-elf" ]; then
rm -rf xtensa-esp32-elf/ > /dev/null 2>&1
rmdir xtensa-esp32-elf > /dev/null 2>&1
fi
if [ -d "xtensa-esp32-elf_psram" ]; then
rm -rf xtensa-esp32-elf_psram/ > /dev/null 2>&1
rmdir xtensa-esp32-elf_psram > /dev/null 2>&1
fi
cd Tools
# -----------------------------------------
# _psram directories are not needed anymore
# -----------------------------------------
if [ -d "esp-idf_psram" ]; then
rm -rf esp-idf_psram/ > /dev/null 2>&1
rmdir esp-idf_psram > /dev/null 2>&1
fi
if [ -d "xtensa-esp32-elf_psram" ]; then
rm -rf xtensa-esp32-elf_psram/ > /dev/null 2>&1
rmdir xtensa-esp32-elf_psram > /dev/null 2>&1
fi
# ------------------------------------------
# Check esp-idf and xtensa toolchain version
# ------------------------------------------
if [ ! -f "${TOOLS_VER}" ]; then
echo "Removing old tools versions and cleaning build..."
# Remove directories from previous version
if [ -d "esp-idf" ]; then
rm -rf esp-idf/ > /dev/null 2>&1
rmdir esp-idf > /dev/null 2>&1
fi
if [ -d "xtensa-esp32-elf" ]; then
rm -rf xtensa-esp32-elf/ > /dev/null 2>&1
rmdir xtensa-esp32-elf > /dev/null 2>&1
fi
rm -f *.id > /dev/null 2>&1
touch ${TOOLS_VER}
echo "toolchains & esp-idf version" > ${TOOLS_VER}
2018-12-04 14:06:15 +08:00
rm -f ${BUILD_BASE_DIR}/*.id > /dev/null 2>&1
touch ${BUILD_BASE_DIR}/${BUILD_VER}
echo "Build ID, do not delete this file" > ${BUILD_BASE_DIR}/${BUILD_VER}
2018-01-03 14:18:06 +01:00
# remove executables
rm -f ${BUILD_BASE_DIR}/components/mpy_cross_build/mpy-cross/mpy-cross > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/components/mpy_cross_build/mpy-cross/mpy-cross.exe > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/components/micropython/mpy-cross/mpy-cross > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/components/micropython/mpy-cross/mpy-cross.exe > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/components/mkspiffs/src/mkspiffs > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/components/mkspiffs/src/mkspiffs.exe > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/components/mkfatfs/src/mkfatfs > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/components/mkfatfs/src/mkfatfs.exe > /dev/null 2>&1
2018-12-04 14:06:15 +08:00
rm -f ${BUILD_BASE_DIR}/components/mklittlefs/mklfs > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/components/mklittlefs/mklfs.exe > /dev/null 2>&1
2018-01-03 14:18:06 +01:00
# remove build directory and configs
cp -f ${BUILD_BASE_DIR}/sdkconfig ${BUILD_BASE_DIR}/_sdkconfig.saved > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/sdkconfig > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/sdkconfig.old > /dev/null 2>&1
rm -rf ${BUILD_BASE_DIR}/build/ > /dev/null 2>&1
rmdir ${BUILD_BASE_DIR}/build > /dev/null 2>&1
2018-12-04 14:06:15 +08:00
else
# -----------------------
# Check the build version
# -----------------------
if [ ! -f "${BUILD_BASE_DIR}/${BUILD_VER}" ]; then
echo "Build updated, running menuconfig is needed..."
rm -f ${BUILD_BASE_DIR}/*.id > /dev/null 2>&1
touch ${BUILD_BASE_DIR}/${BUILD_VER}
echo "Build ID, do not delete this file" > ${BUILD_BASE_DIR}/${BUILD_VER}
# remove build directory and configs
cp -f ${BUILD_BASE_DIR}/sdkconfig ${BUILD_BASE_DIR}/_sdkconfig.saved > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/sdkconfig > /dev/null 2>&1
rm -f ${BUILD_BASE_DIR}/sdkconfig.old > /dev/null 2>&1
rm -rf ${BUILD_BASE_DIR}/build/ > /dev/null 2>&1
rmdir ${BUILD_BASE_DIR}/build > /dev/null 2>&1
fi
2018-01-03 14:18:06 +01:00
fi
if [ ! -d "esp-idf" ]; then
echo "unpacking 'esp-idf'"
tar -xf esp-idf.tar.xz > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "unpacking 'esp-idf' FAILED"
2018-02-05 18:14:30 +01:00
if [ "${machine}" == "Win" ]; then
echo "On Windows, it may be a false error, run './BUILD.sh menuconfig' again!"
fi
2018-01-03 14:18:06 +01:00
return 1
fi
fi
if [ ! -d "xtensa-esp32-elf" ]; then
2018-01-24 09:59:19 +01:00
if [ "${machine}" == "Linux" ]; then
if [ "${linplatform}" == "i686" ]; then
echo "unpacking ${machine}/xtensa-esp32-elf (32bit)"
tar -xf ${machine}/xtensa-esp32-elf_32bit.tar.xz > /dev/null 2>&1
elif [ "${linplatform}" == "armv7l" ] || [ "${linprocessor}" == "armv7l" ] || [ "${linmachine}" == "armv7l" ]; then
2018-01-24 09:59:19 +01:00
echo "unpacking ${machine}/xtensa-esp32-elf (arm)"
tar -xf ${machine}/xtensa-esp32-elf_arm.tar.xz > /dev/null 2>&1
2018-12-04 14:06:15 +08:00
elif [ "${linmachine}" == "aarch64" ]; then
echo "unpacking ${machine}/xtensa-esp32-elf (aarch64)"
tar -xf ${machine}/xtensa-esp32-elf_aarch64.tar.xz > /dev/null 2>&1
2018-01-24 09:59:19 +01:00
else
echo "unpacking ${machine}/xtensa-esp32-elf"
tar -xf ${machine}/xtensa-esp32-elf.tar.xz > /dev/null 2>&1
fi
else
echo "unpacking ${machine}/xtensa-esp32-elf"
tar -xf ${machine}/xtensa-esp32-elf.tar.xz > /dev/null 2>&1
fi
2018-01-03 14:18:06 +01:00
if [ $? -ne 0 ]; then
echo "unpacking 'xtensa-esp32-elf' FAILED"
return 1
fi
fi
return 0
}
# ===========================================================================
# Build MicroPython cross compiler which compiles .py scripts into .mpy files
# ===========================================================================
#-----------------
build_MPyCross() {
if [ ! -f "components/micropython/mpy-cross/mpy-cross" ]; then
export CROSS_COMPILE=""
export PATH=${orig_PATH}
cd components/mpy_cross_build/mpy-cross
echo "=================="
echo "Building mpy-cross"
make clean > /dev/null 2>&1
make > /dev/null 2>&1
if [ $? -eq 0 ]; then
cp -f mpy-cross ../../micropython/mpy-cross > /dev/null 2>&1
make clean > /dev/null 2>&1
echo "OK."
echo "=================="
else
echo "FAILED"
echo "=================="
return 1
fi
cd ${BUILD_BASE_DIR}
if [ ! -f "components/micropython/mpy-cross/mpy-cross" ]; then
echo "FAILED"
echo "=================="
return 1
fi
export PATH=${xtensa_PATH}
export CROSS_COMPILE=xtensa-esp32-elf-
fi
return 0
}
# ================================================================
# Build mkspiffs program which creates spiffs image from directory
# ================================================================
#-----------------
build_MKSPIFFS() {
if [ ! -f "components/mkspiffs/${MK_SPIFFS_BIN}" ]; then
export CROSS_COMPILE=""
export PATH=${orig_PATH}
# create 'sdkconfig.h' needed for building
grep "CONFIG_SPIFFS_" ${BUILD_BASE_DIR}/build/include/sdkconfig.h > components/mkspiffs/include/sdkconfig.h
echo "================="
echo "Building mkspiffs"
make -C components/mkspiffs > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "OK."
echo "================="
else
echo "FAILED"
echo "=================="
return 1
fi
export PATH=${xtensa_PATH}
export CROSS_COMPILE=xtensa-esp32-elf-
fi
return 0
}
# ==============================================================
# Build mkfatfs program which creates fatfs image from directory
# ==============================================================
#----------------
build_MKFatFS() {
if [ ! -f "components/mkfatfs/src/${MK_FATFS_BIN}" ]; then
export CROSS_COMPILE=""
export PATH=${orig_PATH}
# create 'sdkconfig.h' needed for building
grep "CONFIG_WL_SECTOR_SIZE" ${BUILD_BASE_DIR}/build/include/sdkconfig.h > components/mkfatfs/src/sdkconfig.h
grep "CONFIG_WL_SECTOR_MODE" ${BUILD_BASE_DIR}/build/include/sdkconfig.h >> components/mkfatfs/src/sdkconfig.h
grep "CONFIG_FATFS_CODEPAGE" ${BUILD_BASE_DIR}/build/include/sdkconfig.h >> components/mkfatfs/src/sdkconfig.h
grep "CONFIG_FATFS_LFN_HEAP" ${BUILD_BASE_DIR}/build/include/sdkconfig.h >> components/mkfatfs/src/sdkconfig.h
grep "CONFIG_FATFS_LFN_STACK" ${BUILD_BASE_DIR}/build/include/sdkconfig.h >> components/mkfatfs/src/sdkconfig.h
grep "CONFIG_FATFS_MAX_LFN" ${BUILD_BASE_DIR}/build/include/sdkconfig.h >> components/mkfatfs/src/sdkconfig.h
grep "CONFIG_SPI_FLASH_ENABLE_COUNTERS" ${BUILD_BASE_DIR}/build/include/sdkconfig.h >> components/mkfatfs/src/sdkconfig.h
export BUILD_DIR_BASE=${BUILD_BASE_DIR}/build
echo "================"
echo "Building mkfatfs"
make -C components/mkfatfs/src > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "OK."
echo "================"
else
echo "FAILED"
echo "================"
return 1
fi
export PATH=${xtensa_PATH}
export CROSS_COMPILE=xtensa-esp32-elf-
fi
return 0
}
2018-12-04 14:06:15 +08:00
# ===============================================================
# Build mklfs program which creates LittleFS image from directory
# ===============================================================
#----------------
build_MKlfsFS() {
if [ ! -f "components/mklittlefs/${MK_LITTLEFS_BIN}" ]; then
export CROSS_COMPILE=""
export PATH=${orig_PATH}
export BUILD_DIR_BASE=${BUILD_BASE_DIR}/build
echo "==============="
echo "Building mklfs"
make -C components/mklittlefs > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "OK."
echo "==============="
else
echo "FAILED"
echo "==============="
return 1
fi
export PATH=${xtensa_PATH}
export CROSS_COMPILE=xtensa-esp32-elf-
fi
return 0
}
2018-01-03 14:18:06 +01:00
# ===================
# Check build command
# ===================
#---------------
checkCommand() {
if [ "${arg}" == "makefatfs" ] || [ "${arg}" == "flashfatfs" ] || [ "${arg}" == "copyfatfs" ]; then
if [ ! -f "build/include/sdkconfig.h" ]; then
echo ""
echo "Run './BUILD menuconfig' first."
echo ""
return 1
fi
fi
2018-01-22 16:27:39 +01:00
if [ "${arg}" == "firmware" ] || [ "${arg}" == "size" ] || [ "${arg}" == "size-components" ] || [ "${arg}" == "size-files" ]; then
2018-01-03 14:18:06 +01:00
if [ ! -f "build/MicroPython.bin" ]; then
echo ""
echo "Build firmware first."
echo ""
return 1
fi
fi
# Test if valid sdkconfig exists
if [ "${arg}" == "all" ] || [ "${arg}" == "clean" ]; then
if [ ! -f "sdkconfig" ]; then
echo "'sdkconfig' NOT FOUND, RUN ./BUILD.sh menuconfig FIRST."
echo ""
return 1
fi
fi
if [ $? -ne 0 ]; then
return 1
fi
return 0
}
# ===================================
# ==== Execute the build command ====
# ===================================
#-----------------
executeCommand() {
checkCommand
if [ $? -ne 0 ]; then
return 1
fi
# ------------------------------
if [ "${arg}" == "flash" ]; then
echo "========================================="
echo "Flashing MicroPython firmware to ESP32..."
echo "========================================="
2018-12-04 14:06:15 +08:00
make ${J_OPTION} ${arg}${BUILD_COMPORT}${BUILD_BDRATE} 2>/dev/null
2018-01-03 14:18:06 +01:00
# ---------------------------------
elif [ "${arg}" == "erase" ]; then
echo "======================"
echo "Erasing ESP32 Flash..."
echo "======================"
2018-12-04 14:06:15 +08:00
make erase_flash${BUILD_COMPORT}${BUILD_BDRATE}
# ------------------------------------
elif [ "${arg}" == "miniterm" ]; then
echo "====================="
echo "Executing miniterm..."
echo "====================="
make simple_monitor${BUILD_COMPORT}
2018-01-03 14:18:06 +01:00
# ----------------------------------
elif [ "${arg}" == "monitor" ]; then
echo "============================"
echo "Executing esp-idf monitor..."
echo "============================"
2018-12-04 14:06:15 +08:00
make monitor${BUILD_COMPORT}
2018-01-03 14:18:06 +01:00
# ---------------------------------
elif [ "${arg}" == "clean" ]; then
echo "============================="
echo "Cleaning MicroPython build..."
echo "============================="
if [ "${MP_SHOW_PROGRESS}" == "yes" ]; then
make clean
else
make clean > /dev/null 2>&1
fi
sleep 1
#rm -f components/micropython/mpy-cross/mpy-cross > /dev/null 2>&1
rm -rf build/ > /dev/null 2>&1
rmdir build > /dev/null 2>&1
rm -f components/mkspiffs/src/*.o > /dev/null 2>&1
rm -f components/mkspiffs/src/spiffs/*.o > /dev/null 2>&1
rm -f components/mkfatfs/src/*.o > /dev/null 2>&1
rm -f components/mkfatfs/src/fatfs/*.o > /dev/null 2>&1
rm -f components/mkfatfs/src/spi_flash/*.o > /dev/null 2>&1
rm -f components/mkfatfs/src/vfs/*.o > /dev/null 2>&1
rm -f components/mkfatfs/src/wear_leveling/*.o > /dev/null 2>&1
# -------------------------------------
elif [ "${arg}" == "menuconfig" ]; then
if [ -f _sdkconfig.saved ]; then
cp -f _sdkconfig.saved sdkconfig > /dev/null 2>&1
rm -f _sdkconfig.saved > /dev/null 2>&1
echo "** Restored 'sdkconfig' **'"
fi
make menuconfig 2>/dev/null
2018-12-04 14:06:15 +08:00
check_config
result=$?
if [ $result -eq 1 ]; then
make menuconfig 2>/dev/null
fi
2018-01-03 14:18:06 +01:00
# ---------------------------------
elif [ "${arg}" == "makefs" ]; then
build_MKSPIFFS
if [ $? -ne 0 ]; then
return 1
fi
echo "========================"
echo "Creating SPIFFS image..."
echo "========================"
make makefs
# -----------------------------------
elif [ "${arg}" == "flashfs" ]; then
build_MKSPIFFS
if [ $? -ne 0 ]; then
return 1
fi
echo "================================="
echo "Flashing SPIFFS image to ESP32..."
echo "================================="
make flashfs
# ---------------------------------
elif [ "${arg}" == "copyfs" ]; then
echo "========================================="
echo "Flashing default SPIFFS image to ESP32..."
echo "========================================="
make copyfs
# -------------------------------------
elif [ "${arg}" == "makefatfs" ]; then
build_MKFatFS
if [ $? -ne 0 ]; then
return 1
fi
echo "======================="
echo "Creating FatFS image..."
echo "======================="
make makefatfs
# --------------------------------------
elif [ "${arg}" == "flashfatfs" ]; then
build_MKFatFS
if [ $? -ne 0 ]; then
return 1
fi
echo "================================"
echo "Flashing FatFS image to ESP32..."
echo "================================"
make flashfatfs
# ------------------------------------
elif [ "${arg}" == "copyfatfs" ]; then
echo "========================================"
echo "Flashing default FatFS image to ESP32..."
echo "========================================"
make copyfatfs
2018-12-04 14:06:15 +08:00
# ------------------------------------
elif [ "${arg}" == "makelfsfs" ]; then
build_MKlfsFS
if [ $? -ne 0 ]; then
return 1
fi
echo "=========================="
echo "Creating LittleFS image..."
echo "=========================="
make makelfsfs
# -------------------------------------
elif [ "${arg}" == "flashlfsfs" ]; then
build_MKlfsFS
if [ $? -ne 0 ]; then
return 1
fi
echo "==================================="
echo "Flashing LittleFS image to ESP32..."
echo "==================================="
make flashlfsfs
# -------------------------------------
elif [ "${arg}" == "copylfsfs" ]; then
echo "==========================================="
echo "Flashing default LittleFS image to ESP32..."
echo "==========================================="
make copylfsfs
2018-01-03 14:18:06 +01:00
# -------------------------------
elif [ "${arg}" == "size" ]; then
echo "======================================="
echo "Static memory footprint of the firmware"
echo "======================================="
make size 2>/dev/null
# --------------------------------------------------------------------------
elif [ "${arg}" == "size-components" ] || [ "${arg}" == "size-files" ]; then
echo "========================================="
echo "Detailed memory footprint of the firmware"
echo "========================================="
make ${arg} 2>/dev/null
2018-12-04 14:06:15 +08:00
# -------------------------------------------------------------------------------------------------------
elif [ "${arg}" == "firmware" ] || [ "${arg}" == "firmwareall" ] || [ "${arg}" == "firmwareallbt" ]; then
2018-01-03 14:18:06 +01:00
echo "======================="
echo "Saving the firmware ..."
echo "======================="
local esp32dir="esp32"
if [ "${BUILD_TYPE}" != "" ]; then
esp32dir="esp32_psram"
fi
if [ "${arg}" == "firmwareall" ]; then
2018-01-22 16:27:39 +01:00
if [ "${BUILD_TYPE}" != "" ]; then
esp32dir="esp32_psram_all"
else
esp32dir="esp32_all"
fi
fi
2018-12-04 14:06:15 +08:00
if [ "${arg}" == "firmwareallbt" ]; then
if [ "${BUILD_TYPE}" != "" ]; then
esp32dir="esp32_psram_all_bt"
else
esp32dir="esp32_all_bt"
fi
fi
2018-01-03 14:18:06 +01:00
local useota=$(grep -e CONFIG_MICROPY_USE_OTA=y sdkconfig)
if [ "${useota}" == "CONFIG_MICROPY_USE_OTA=y" ]; then
esp32dir="${esp32dir}_ota"
fi
cp -f build/MicroPython.bin firmware/${esp32dir} > /dev/null 2>&1
cp -f build/bootloader/bootloader.bin firmware/${esp32dir}/bootloader > /dev/null 2>&1
cp -f build/partitions_mpy.bin firmware/${esp32dir} > /dev/null 2>&1
cp -f partitions_mpy.csv firmware/${esp32dir} > /dev/null 2>&1
cp -f build/phy_init_data.bin firmware/${esp32dir} > /dev/null 2>&1
cp -f sdkconfig firmware/${esp32dir} > /dev/null 2>&1
2018-12-04 14:06:15 +08:00
rm -f firmware/${esp32dir}/flash.sh > /dev/null 2>&1
2018-01-03 14:18:06 +01:00
return 0
# -------------------------------
elif [ "${arg}" == "all" ]; then
build_MPyCross
if [ $? -ne 0 ]; then
return 1
fi
echo "================================"
echo "Building MicroPython firmware..."
echo "================================"
if [ "${MP_SHOW_PROGRESS}" == "yes" ]; then
make ${J_OPTION} ${arg}
else
make ${J_OPTION} ${arg} > /dev/null 2>&1
fi
#---
else
echo "================================"
echo "Unknown build command '${arg}' !"
echo "================================"
return 1
fi
}