Merge branch 'MK3_MK404' into PFW-1271_PF-buildv20

This commit is contained in:
3d-gussner 2021-06-17 18:47:17 +02:00
commit 589b781d04
2 changed files with 1062 additions and 600 deletions

223
MK404-build.sh Executable file
View File

@ -0,0 +1,223 @@
#!/bin/bash
# This bash script is used to compile automatically the MK404 simulator
#
# Supported OS: Linux64 bit
#
# Linux:
# Linux Ubuntu
# 1. Follow these instructions
# 2. Open Ubuntu bash and get latest updates with 'sudo apt-get update'
# 3. Install latest updates with 'sudo apt-get upgrade'
# 4.
#
# Version: 0.1-Build_3
# Change log:
# 11 Feb 2021, 3d-gussner, Inital
# 11 Feb 2021, 3d-gussner, Optional flags to check for updates
# 12 Feb 2021, 3d-gussner, Update cmake
# 13 Feb 2021, 3d-gussner, Auto build SD cards
while getopts c:u:f:m:g:?h flag
do
case "${flag}" in
c) check_flag=${OPTARG};;
u) update_flag=${OPTARG};;
f) force_flag=${OPTARG};;
m) mk404_flag=${OPTARG};;
g) graphics_flag=${OPTARG};;
?) help_flag=1;;
h) help_flag=1;;
esac
done
echo "$check_flag"
echo "$update_flag"
echo "$force_flag"
echo "$mk404_flag"
echo "$graphics_flag"
#### Start check if OSTYPE is supported
OS_FOUND=$( command -v uname)
case $( "${OS_FOUND}" | tr '[:upper:]' '[:lower:]') in
linux*)
TARGET_OS="linux"
;;
*)
TARGET_OS='unknown'
;;
esac
# Linux
if [ $TARGET_OS == "linux" ]; then
if [ $(uname -m) == "x86_64" ]; then
echo "$(tput setaf 2)Linux 64-bit found$(tput sgr0)"
Processor="64"
#elif [[ $(uname -m) == "i386" || $(uname -m) == "i686" ]]; then
# echo "$(tput setaf 2)Linux 32-bit found$(tput sgr0)"
# Processor="32"
else
echo "$(tput setaf 1)Unsupported OS: Linux $(uname -m)"
echo "Please refer to the notes of build.sh$(tput sgr0)"
exit 1
fi
else
echo "$(tput setaf 1)This script doesn't support your Operating system!"
echo "Please use Linux 64-bit"
echo "Read the notes of build.sh$(tput sgr0)"
exit 1
fi
sleep 2
#### End check if OSTYPE is supported
#### Check MK404 dependencies
packages=(
"libelf-dev"
"gcc-7"
"gcc-avr"
"libglew-dev"
"freeglut3-dev"
"libsdl-sound1.2-dev"
"libpng-dev"
"cmake"
"zip"
"wget"
"git"
"build-essential"
"lcov"
"mtools"
)
for check_package in ${packages[@]}; do
if dpkg-query -W -f'${db:Status-Abbrev}\n' $check_package 2>/dev/null \
| grep -q '^.i $'; then
echo "$(tput setaf 2)$check_package: Installed$(tput sgr0)"
else
echo "$(tput setaf 1)$check_package: Not installed use $(tput setaf 3)'sudo apt install $check_package'$(tput setaf 1) to install missing package$(tput sgr0)"
not_installed=1;
fi
done
if [ "$not_installed" = "1" ]; then
exit 4
fi
#### End Check MK404 dependencies
#### Set build environment
MK404_SCRIPT_PATH="$( cd "$(dirname "$0")" ; pwd -P )"
MK404_URL="https://github.com/vintagepc/MK404.git"
MK404_owner="vintagepc"
MK404_project="MK404"
MK404_PATH="$MK404_SCRIPT_PATH/../MK404/master"
MK404_BUILD_PATH="$MK404_PATH/build"
# List few useful data
echo
echo "Script path :" $MK404_SCRIPT_PATH
echo "OS :" $OS
echo "OS type :" $TARGET_OS
echo ""
echo "MK404 path :" $MK404_PATH
# Clone MK404 if needed
if [ ! -d $MK404_PATH ]; then
#release_url=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/$MK404_owner/$MK404_project/releases/latest)
#release_tag=$(basename $release_url)
#git clone -b $release_tag -- https://github.com/$MK404_owner/$MK404_project.git $MK404_PATH
git clone $MK404_URL $MK404_PATH
fi
#
cd $MK404_PATH
# Check for updates ... WIP
# Check MK404
if [ "$force_flag" == "1" ]; then
check_flag=1
update_flag=1
fi
if [ "$update_flag" == "1" ]; then
check_flag=1
fi
if [ "$check_flag" == "1" ]; then
if [ -d $MK404_BUILD_PATH ]; then
cd $MK404_BUILD_PATH
MK404_current_version=$( command ./MK404 --version | grep "MK404" | cut -f 4 -d " ")
cd $MK404_PATH
else
echo "Cannot check current version as it has not been build."
fi
# Get local Commit_Hash
MK404_local_GIT_COMMIT_HASH=$(git log --pretty=format:"%H" -1)
# Get local Commit_Number
MK404_local_GIT_COMMIT_NUMBER=$(git rev-list HEAD --count)
# Get remote Commit_Hash
MK404_remote_GIT_COMMIT_HASH=$(git ls-remote --heads $(git config --get remote.origin.url) | grep "refs/heads/master" | cut -f 1)
# Get remote Commit_Number
MK404_remote_GIT_COMMIT_NUMBER=$(git rev-list origin/master --count)
# Output
echo "Current version : $MK404_current_version"
echo ""
echo "Current local hash : $MK404_local_GIT_COMMIT_HASH"
echo "Current local commit nr : $MK404_local_GIT_COMMIT_NUMBER"
if [ "$MK404_local_GIT_COMMIT_HASH" != "$MK404_remote_GIT_COMMIT_HASH" ]; then
echo "$(tput setaf 1)"
else
echo "$(tput sgr 0)"
fi
echo "Current remote hash : $MK404_remote_GIT_COMMIT_HASH"
echo "Current remote commit nr: $MK404_remote_GIT_COMMIT_NUMBER"
echo "$(tput sgr 0)"
# Check for updates
if [[ "$MK404_local_GIT_COMMIT_HASH" != "$MK404_remote_GIT_COMMIT_HASH" && -z "$update_flag" ]]; then
echo "$(tput setaf 2)Update is availible.$(tput sgr 0)"
read -t 10 -n 1 -p "$(tput setaf 3)Update now Y/n$(tput sgr 0)" update_answer
if [ "$update_answer" == "Y" ]; then
update_flag=1
fi
echo ""
fi
fi
# Check for updates
if [ "$update_flag" == "1" ]; then
if [ "$MK404_local_GIT_COMMIT_HASH" != "$MK404_remote_GIT_COMMIT_HASH" ]; then
echo ""
git fetch --all
read -t 10 -p "$(tput setaf 2)Updating MK404 !$(tput sgr 0)"
echo ""
git reset --hard origin/master
read -t 10 -p "$(tput setaf 2)Compiling MK404 !$(tput sgr 0)"
echo ""
force_flag=1
fi
fi
# Prepare MK404
mkdir -p $MK404_BUILD_PATH
if [[ ! -f "$MK404_BUILD_PATH/Makefile" || "$force_flag" == "1" ]]; then
# Init and update submodules
git submodule init
git submodule update
cmake -B$MK404_BUILD_PATH -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles"
fi
# Make MK404
cd $MK404_BUILD_PATH
if [[ ! -f "$MK404_BUILD_PATH/MK404" || "$force_flag" == "1" ]]; then
make
fi
# Make SDcards
if [[ ! -f "$MK404_BUILD_PATH/Prusa_MK3S_SDcard.bin" || "$force_flag" == "1" ]]; then
cmake --build $MK404_BUILD_PATH --config Release --target Prusa_MK3S_SDcard.bin
cmake --build $MK404_BUILD_PATH --config Release --target Prusa_MK3_SDcard.bin
cmake --build $MK404_BUILD_PATH --config Release --target Prusa_MK25_13_SDcard.bin
cmake --build $MK404_BUILD_PATH --config Release --target Prusa_MK25S_13_SDcard.bin
cmake --build $MK404_BUILD_PATH --config Release --target Prusa_MK3SMMU2_SDcard.bin
cmake --build $MK404_BUILD_PATH --config Release --target Prusa_MK3MMU2_SDcard.bin
fi

View File

@ -56,7 +56,7 @@
# Some may argue that this is only used by a script, BUT as soon someone accidentally or on purpose starts Arduino IDE # Some may argue that this is only used by a script, BUT as soon someone accidentally or on purpose starts Arduino IDE
# it will use the default Arduino IDE folders and so can corrupt the build environment. # it will use the default Arduino IDE folders and so can corrupt the build environment.
# #
# Version: 1.0.6-Build_37 # Version: 1.2.0-Build_49
# Change log: # Change log:
# 12 Jan 2019, 3d-gussner, Fixed "compiler.c.elf.flags=-w -Os -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections" in 'platform.txt' # 12 Jan 2019, 3d-gussner, Fixed "compiler.c.elf.flags=-w -Os -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections" in 'platform.txt'
# 16 Jan 2019, 3d-gussner, Build_2, Added development check to modify 'Configuration.h' to prevent unwanted LCD messages that Firmware is unknown # 16 Jan 2019, 3d-gussner, Build_2, Added development check to modify 'Configuration.h' to prevent unwanted LCD messages that Firmware is unknown
@ -136,7 +136,18 @@
# 08 Jan 2021, 3d-gussner, Comment out 'sudo' auto installation # 08 Jan 2021, 3d-gussner, Comment out 'sudo' auto installation
# Add '-?' '-h' help option # Add '-?' '-h' help option
# 27 Jan 2021, 3d-gussner, Add `-c`, `-p` and `-n` options # 27 Jan 2021, 3d-gussner, Add `-c`, `-p` and `-n` options
# 12 Feb 2021, 3d-gussner, Add MK404-build.sh
# 13 Feb 2021, 3d-gussner, Indentations
# 13 Feb 2021, 3d-gussner, MK404 improvements like "flash" MK3, MK3S languages files to MK404 xflash.
# 27 Feb 2021, 3d-gussner, Add './lang-community.sh' and update exits # 27 Feb 2021, 3d-gussner, Add './lang-community.sh' and update exits
# 03 May 2021, 3d-gussner, Update exit numbers
# 01-14 prepare build env
# 21-32 prepare compiling
# 41-47 compiling
# 51-54 cleanup
# 61-62 MK404
# 03 May 2021, 3d-gussner, Update documentation and change version to v1.2.0
# 03 May 2021, 3d-gussner, Add SIM atmega404
#### Start check if OSTYPE is supported #### Start check if OSTYPE is supported
OS_FOUND=$( command -v uname) OS_FOUND=$( command -v uname)
@ -244,17 +255,128 @@ fi
#### End prepare bash / Linux environment #### End prepare bash / Linux environment
# Check for options/flags
while getopts b:c:d:f:g:h:i:l:m:n:o:p:v:x:?h flag
do
case "${flag}" in
b) build_flag=${OPTARG};;
c) clean_flag=${OPTARG};;
d) devel_flag=${OPTARG};;
f) board_flash_flag=${OPTARG};;
g) graphics_flag=${OPTARG};;
h) help_flag=1;;
i) IDE_flag=${OPTARG};;
l) language_flag=${OPTARG};;
m) mk404_flag=${OPTARG};;
n) new_build_flag=${OPTARG};;
o) output_flag=${OPTARG};;
p) prusa_flag=${OPTARG};;
v) variant_flag=${OPTARG};;
x) board_mem_flag=${OPTARG};;
?) help_flag=1;;
esac
done
#
# '?' 'h' argument usage and help
if [ "$help_flag" == "1" ] ; then
echo "***************************************"
echo "* PF-build.sh Version: 1.2.0-Build_49 *"
echo "***************************************"
echo "Arguments:"
echo "$(tput setaf 2)-b$(tput sgr0) Build/commit number '$(tput setaf 2)Auto$(tput sgr0)' needs git or a number"
echo "$(tput setaf 2)-c$(tput sgr0) Do not clean up lang build'$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' yes"
echo "$(tput setaf 2)-d$(tput sgr0) Devel build '$(tput setaf 2)GOLD$(tput sgr0)', '$(tput setaf 2)RC$(tput sgr0)', '$(tput setaf 2)BETA$(tput sgr0)', '$(tput setaf 2)ALPHA$(tput sgr0)', '$(tput setaf 2)DEBUG$(tput sgr0)', '$(tput setaf 2)DEVEL$(tput sgr0)' and '$(tput setaf 2)UNKNOWN$(tput sgr0)'"
echo "$(tput setaf 2)-f$(tput sgr0) Board flash size '$(tput setaf 2)256$(tput sgr0)','$(tput setaf 2)384$(tput sgr0)','$(tput setaf 2)512$(tput sgr0)','$(tput setaf 2)1024$(tput sgr0)''$(tput setaf 2)32M$(tput sgr0)'"
echo "$(tput setaf 2)-g$(tput sgr0) Start MK404 grafics '$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' lite '$(tput setaf 2)2$(tput sgr0)' fancy"
echo "$(tput setaf 2)-h$(tput sgr0) Help"
echo "$(tput setaf 2)-i$(tput sgr0) Arduino IDE version '$(tput setaf 2)1.8.5$(tput sgr0)', '$(tput setaf 2)1.8.13$(tput sgr0)'"
echo "$(tput setaf 2)-l$(tput sgr0) Languages '$(tput setaf 2)ALL$(tput sgr0)' for multi language or '$(tput setaf 2)EN_ONLY$(tput sgr0)' for English only"
echo "$(tput setaf 2)-m$(tput sgr0) Start MK404 sim '$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' yes '$(tput setaf 2)2$(tput sgr0)' with MMU2"
echo "$(tput setaf 2)-n$(tput sgr0) New fresh build '$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' yes"
echo "$(tput setaf 2)-o$(tput sgr0) Output '$(tput setaf 2)1$(tput sgr0)' force or '$(tput setaf 2)0$(tput sgr0)' block output and delays"
echo "$(tput setaf 2)-p$(tput sgr0) Keep Configuration_prusa.h '$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' yes"
echo "$(tput setaf 2)-v$(tput sgr0) Variant '$(tput setaf 2)All$(tput sgr0)' or variant file name"
echo "$(tput setaf 2)-x$(tput sgr0) Board memory size '$(tput setaf 2)8$(tput sgr0)' or '$(tput setaf 2)64$(tput sgr0)' Kb."
echo "$(tput setaf 2)-?$(tput sgr0) Help"
echo
echo "Brief USAGE:"
echo " $(tput setaf 2)./PF-build.sh$(tput sgr0) [-v] [-l] [-d] [-b] [-o] [-c] [-p] [-n]"
echo
echo "Example:"
echo " $(tput setaf 2)./PF-build.sh -v All -l ALL -d GOLD$(tput sgr0)"
echo " Will build all variants as multi language and final GOLD version"
echo
echo " $(tput setaf 2) ./PF-build.sh -v 1_75mm_MK3S-EINSy10a-E3Dv6full.h -b Auto -l ALL -d GOLD -o 1 -c 1 -p 1 -n 1$(tput sgr0)"
echo " Will build MK3S multi language final GOLD firmware "
echo " with current commit count number and output extra information,"
echo " not delete lang build temporary files, keep Configuration_prusa.h and build with new fresh build folder."
echo
exit 6
fi
#Check if Build is selected with argument '-f'
if [ ! -z "$board_flash_flag" ] ; then
if [ "$board_flash_flag" == "256" ] ; then
BOARD_FLASH="0x3FFFF"
BOARD_maximum_size="253952"
echo "Board flash size : $board_flash_flag Kb, $BOARD_maximum_size bytes, $BOARD_FLASH (hex)"
elif [ "$board_flash_flag" == "384" ] ; then
BOARD_FLASH="0x5FFFF"
BOARD_maximum_size="385024"
echo "Board flash size : $board_flash_flag Kb, $BOARD_maximum_size bytes, $BOARD_FLASH (hex)"
elif [ "$board_flash_flag" == "512" ] ; then
BOARD_FLASH="0x7FFFF"
BOARD_maximum_size="516096"
echo "Board flash size : $board_flash_flag Kb, $BOARD_maximum_size bytes, $BOARD_FLASH (hex)"
elif [ "$board_flash_flag" == "1024" ] ; then
BOARD_FLASH="0xFFFFF"
BOARD_maximum_size="1040384"
echo "Board flash size : $board_flash_flag Kb, $BOARD_maximum_size bytes, $BOARD_FLASH (hex)"
elif [[ "$board_flash_flag" == "32M" || "$board_flash_flag" == "32768" ]] ; then
BOARD_FLASH="0x1FFFFFF"
BOARD_maximum_size="33546240"
echo "Board flash size : 32 Mb, $BOARD_maximum_size bytes, $BOARD_FLASH (hex)"
else
echo "Unsupported board flash size chosen. Only '256', '384', '512', '1024' and '32M' are allowed."
exit 7
fi
fi
#Check if Build is selected with argument '-x'
if [ ! -z "$board_mem_flag" ] ; then
if [ "$board_mem_flag" == "8" ] ; then
BOARD_MEM="0x21FF"
echo "Board mem size : $board_mem_flag Kb, $BOARD_MEM (hex)"
elif [ "$board_mem_flag" == "64" ] ; then
BOARD_MEM="0xFFFF"
echo "Board mem size : $board_mem_flag Kb, $BOARD_MEM (hex)"
else
echo "Unsupported board mem size chosen. Only '8', '64' are allowed."
exit 8
fi
fi
#Check if Arduino IDE version is correct
if [ ! -z "$IDE_flag" ]; then
if [[ "$IDE_flag" == "1.8.5" || "$IDE_flag" == "1.8.13" ]]; then
ARDUINO_ENV="${IDE_flag}"
else
ARDUINO_ENV="1.8.5"
fi
else
ARDUINO_ENV="1.8.5"
fi
#### Set build environment #### Set build environment
ARDUINO_ENV="1.8.5"
BUILD_ENV="1.0.6" BUILD_ENV="1.0.6"
BOARD="prusa_einsy_rambo" BOARD="prusa_einsy_rambo"
BOARD_PACKAGE_NAME="PrusaResearch" BOARD_PACKAGE_NAME="PrusaResearch"
BOARD_VERSION="1.0.3" BOARD_VERSION="1.0.3"
#BOARD_URL="https://raw.githubusercontent.com/3d-gussner/Arduino_Boards/Prusa_Merge_v1.0.3/IDE_Board_Manager/package_prusa3d_index.json" #BOARD_URL="https://raw.githubusercontent.com/3d-gussner/Arduino_Boards/master/IDE_Board_Manager/package_prusa3d_index.json"
BOARD_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/package_prusa3d_index.json" BOARD_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/package_prusa3d_index.json"
BOARD_FILENAME="prusa3dboards" BOARD_FILENAME="prusa3dboards"
#BOARD_FILE_URL="https://raw.githubusercontent.com/3d-gussner/Arduino_Boards/Prusa_Merge_v1.0.3/IDE_Board_Manager/prusa3dboards-1.0.3.tar.bz2" #BOARD_FILE_URL="https://raw.githubusercontent.com/3d-gussner/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards-1.0.3.tar.bz2"
BOARD_FILE_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards-1.0.3.tar.bz2" BOARD_FILE_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards-1.0.3.tar.bz2"
#PF_BUILD_FILE_URL="https://github.com/3d-gussner/PF-build-env-1/releases/download/$BUILD_ENV-WinLin/PF-build-env-WinLin-$BUILD_ENV.zip" #PF_BUILD_FILE_URL="https://github.com/3d-gussner/PF-build-env-1/releases/download/$BUILD_ENV-WinLin/PF-build-env-WinLin-$BUILD_ENV.zip"
PF_BUILD_FILE_URL="https://github.com/prusa3d/PF-build-env/releases/download/$BUILD_ENV-WinLin/PF-build-env-WinLin-$BUILD_ENV.zip" PF_BUILD_FILE_URL="https://github.com/prusa3d/PF-build-env/releases/download/$BUILD_ENV-WinLin/PF-build-env-WinLin-$BUILD_ENV.zip"
@ -270,6 +392,12 @@ echo ""
echo "Arduino IDE :" $ARDUINO_ENV echo "Arduino IDE :" $ARDUINO_ENV
echo "Build env :" $BUILD_ENV echo "Build env :" $BUILD_ENV
echo "Board :" $BOARD echo "Board :" $BOARD
if [ ! -z "$BOARD_FLASH" ] ; then
echo "Board flash :" $BOARD_FLASH
fi
if [ ! -z "$BOARD_MEM" ] ; then
echo "Board mem :" $BOARD_MEM
fi
echo "Package name:" $BOARD_PACKAGE_NAME echo "Package name:" $BOARD_PACKAGE_NAME
echo "Board v. :" $BOARD_VERSION echo "Board v. :" $BOARD_VERSION
echo "Specific Lib:" $LIB echo "Specific Lib:" $LIB
@ -279,10 +407,10 @@ echo ""
#Check if build exists and creates it if not #Check if build exists and creates it if not
if [ ! -d "../PF-build-dl" ]; then if [ ! -d "../PF-build-dl" ]; then
mkdir ../PF-build-dl || exit 6 mkdir ../PF-build-dl || exit 9
fi fi
cd ../PF-build-dl || exit 7 cd ../PF-build-dl || exit 10
BUILD_ENV_PATH="$( cd "$(dirname "$0")" ; pwd -P )" BUILD_ENV_PATH="$( cd "$(dirname "$0")" ; pwd -P )"
# Check if PF-build-env-<version> exists and downloads + creates it if not # Check if PF-build-env-<version> exists and downloads + creates it if not
@ -305,7 +433,7 @@ if [ $TARGET_OS == "windows" ]; then
if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" && ! -e "../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" && ! -e "../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
echo "$(tput setaf 6)Unzipping Windows 32/64-bit Arduino IDE portable...$(tput setaf 2)" echo "$(tput setaf 6)Unzipping Windows 32/64-bit Arduino IDE portable...$(tput setaf 2)"
sleep 2 sleep 2
unzip arduino-$ARDUINO_ENV-windows.zip -d ../PF-build-env-$BUILD_ENV || exit 8 unzip arduino-$ARDUINO_ENV-windows.zip -d ../PF-build-env-$BUILD_ENV || exit 9
mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor
echo "# arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt echo "# arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr0)" echo "$(tput sgr0)"
@ -323,7 +451,7 @@ if [ $TARGET_OS == "linux" ]; then
if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" && ! -e "../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" && ! -e "../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
echo "$(tput setaf 6)Unzipping Linux $Processor Arduino IDE portable...$(tput setaf 2)" echo "$(tput setaf 6)Unzipping Linux $Processor Arduino IDE portable...$(tput setaf 2)"
sleep 2 sleep 2
tar -xvf arduino-$ARDUINO_ENV-linux$Processor.tar.xz -C ../PF-build-env-$BUILD_ENV/ || exit 8 tar -xvf arduino-$ARDUINO_ENV-linux$Processor.tar.xz -C ../PF-build-env-$BUILD_ENV/ || exit 9
mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor
echo "# arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt echo "# arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr0)" echo "$(tput sgr0)"
@ -377,12 +505,12 @@ fi
if [ ! -f "$BOARD_FILENAME-$BOARD_VERSION.tar.bz2" ]; then if [ ! -f "$BOARD_FILENAME-$BOARD_VERSION.tar.bz2" ]; then
echo "$(tput setaf 6)Downloading Prusa Research AVR MK3 RAMBo EINSy build environment...$(tput setaf 2)" echo "$(tput setaf 6)Downloading Prusa Research AVR MK3 RAMBo EINSy build environment...$(tput setaf 2)"
sleep 2 sleep 2
wget $BOARD_FILE_URL || exit 9 wget $BOARD_FILE_URL || exit 10
fi fi
if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr/$BOARD_VERSION" || ! -e "../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr/$BOARD_VERSION" || ! -e "../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
echo "$(tput setaf 6)Unzipping $BOARD_PACKAGE_NAME Arduino IDE portable...$(tput setaf 2)" echo "$(tput setaf 6)Unzipping $BOARD_PACKAGE_NAME Arduino IDE portable...$(tput setaf 2)"
sleep 2 sleep 2
tar -xvf $BOARD_FILENAME-$BOARD_VERSION.tar.bz2 -C ../PF-build-env-$BUILD_ENV/ || exit 10 tar -xvf $BOARD_FILENAME-$BOARD_VERSION.tar.bz2 -C ../PF-build-env-$BUILD_ENV/ || exit 11
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME ]; then if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME ]; then
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME
fi fi
@ -406,13 +534,13 @@ fi
if [ ! -f "PF-build-env-WinLin-$BUILD_ENV.zip" ]; then if [ ! -f "PF-build-env-WinLin-$BUILD_ENV.zip" ]; then
echo "$(tput setaf 6)Downloading Prusa Firmware build environment...$(tput setaf 2)" echo "$(tput setaf 6)Downloading Prusa Firmware build environment...$(tput setaf 2)"
sleep 2 sleep 2
wget $PF_BUILD_FILE_URL || exit 11 wget $PF_BUILD_FILE_URL || exit 12
echo "$(tput sgr 0)" echo "$(tput sgr 0)"
fi fi
if [ ! -e "../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]; then if [ ! -e "../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]; then
echo "$(tput setaf 6)Unzipping Prusa Firmware build environment...$(tput setaf 2)" echo "$(tput setaf 6)Unzipping Prusa Firmware build environment...$(tput setaf 2)"
sleep 2 sleep 2
unzip -o PF-build-env-WinLin-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor || exit 12 unzip -o PF-build-env-WinLin-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor || exit 13
echo "# PF-build-env-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt echo "# PF-build-env-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr0)" echo "$(tput sgr0)"
fi fi
@ -438,7 +566,7 @@ if [ -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Proc
echo "Script will not continue until this have been fixed $(tput setaf 2)" echo "Script will not continue until this have been fixed $(tput setaf 2)"
sleep 2 sleep 2
echo "$(tput sgr0)" echo "$(tput sgr0)"
exit 13 exit 14
fi fi
@ -453,65 +581,6 @@ if type git > /dev/null; then
git_available="1" git_available="1"
fi fi
while getopts v:l:d:b:o:c:p:n:?h flag
do
case "${flag}" in
v) variant_flag=${OPTARG};;
l) language_flag=${OPTARG};;
d) devel_flag=${OPTARG};;
b) build_flag=${OPTARG};;
o) output_flag=${OPTARG};;
c) clean_flag=${OPTARG};;
p) prusa_flag=${OPTARG};;
n) new_build_flag=${OPTARG};;
?) help_flag=1;;
h) help_flag=1;;
esac
done
#echo "variant_flag: $variant_flag";
#echo "language_flag: $language_flag";
#echo "devel_flag: $devel_flag";
#echo "build_flag: $build_flag";
#echo "output_flag: $output_flag";
#echo "help_flag: $help_flag"
#echo "clean_flag: $clean_flag"
#echo "prusa_flag: $prusa_flag"
#echo "new_build_flag: $new_build_flag"
#
# '?' 'h' argument usage and help
if [ "$help_flag" == "1" ] ; then
echo "***************************************"
echo "* PF-build.sh Version: 1.0.6-Build_33 *"
echo "***************************************"
echo "Arguments:"
echo "$(tput setaf 2)-v$(tput sgr0) Variant '$(tput setaf 2)All$(tput sgr0)' or variant file name"
echo "$(tput setaf 2)-l$(tput sgr0) Languages '$(tput setaf 2)ALL$(tput sgr0)' for multi language or '$(tput setaf 2)EN_ONLY$(tput sgr0)' for English only"
echo "$(tput setaf 2)-d$(tput sgr0) Devel build '$(tput setaf 2)GOLD$(tput sgr0)', '$(tput setaf 2)RC$(tput sgr0)', '$(tput setaf 2)BETA$(tput sgr0)', '$(tput setaf 2)ALPHA$(tput sgr0)', '$(tput setaf 2)DEBUG$(tput sgr0)', '$(tput setaf 2)DEVEL$(tput sgr0)' and '$(tput setaf 2)UNKNOWN$(tput sgr0)'"
echo "$(tput setaf 2)-b$(tput sgr0) Build/commit number '$(tput setaf 2)Auto$(tput sgr0)' needs git or a number"
echo "$(tput setaf 2)-o$(tput sgr0) Output '$(tput setaf 2)1$(tput sgr0)' force or '$(tput setaf 2)0$(tput sgr0)' block output and delays"
echo "$(tput setaf 2)-c$(tput sgr0) Do not clean up lang build'$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' yes"
echo "$(tput setaf 2)-p$(tput sgr0) Keep Configuration_prusa.h '$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' yes"
echo "$(tput setaf 2)-n$(tput sgr0) New fresh build '$(tput setaf 2)0$(tput sgr0)' no '$(tput setaf 2)1$(tput sgr0)' yes"
echo "$(tput setaf 2)-?$(tput sgr0) Help"
echo "$(tput setaf 2)-h$(tput sgr0) Help"
echo
echo "Brief USAGE:"
echo " $(tput setaf 2)./PF-build.sh$(tput sgr0) [-v] [-l] [-d] [-b] [-o] [-c] [-p] [-n]"
echo
echo "Example:"
echo " $(tput setaf 2)./PF-build.sh -v All -l ALL -d GOLD$(tput sgr0)"
echo " Will build all variants as multi language and final GOLD version"
echo
echo " $(tput setaf 2) ./PF-build.sh -v 1_75mm_MK3S-EINSy10a-E3Dv6full.h -b Auto -l ALL -d GOLD -o 1 -c 1 -p 1 -n 1$(tput sgr0)"
echo " Will build MK3S multi language final GOLD firmware "
echo " with current commit count number and output extra information,"
echo " not delete lang build temporary files, keep Configuration_prusa.h and build with new fresh build folder."
echo
exit 14
fi
# #
# '-v' argument defines which variant of the Prusa Firmware will be compiled # '-v' argument defines which variant of the Prusa Firmware will be compiled
if [ -z "$variant_flag" ] ; then if [ -z "$variant_flag" ] ; then
@ -534,7 +603,7 @@ if [ -z "$variant_flag" ] ; then
;; ;;
"Quit") "Quit")
echo "You chose to stop" echo "You chose to stop"
exit 20 exit 22
;; ;;
*) *)
echo "$(tput setaf 1)This is not a valid variant$(tput sgr0)" echo "$(tput setaf 1)This is not a valid variant$(tput sgr0)"
@ -555,7 +624,7 @@ else
echo "Only $(tput setaf 2)'All'$(tput sgr0) and file names below are allowed as variant '-v' argument.$(tput setaf 2)" echo "Only $(tput setaf 2)'All'$(tput sgr0) and file names below are allowed as variant '-v' argument.$(tput setaf 2)"
ls -1 $SCRIPT_PATH/Firmware/variants/*.h | xargs -n1 basename ls -1 $SCRIPT_PATH/Firmware/variants/*.h | xargs -n1 basename
echo "$(tput sgr0)" echo "$(tput sgr0)"
exit 21 exit 23
fi fi
fi fi
@ -588,17 +657,19 @@ else
else else
echo "$(tput setaf 1)Language argument is wrong!$(tput sgr0)" echo "$(tput setaf 1)Language argument is wrong!$(tput sgr0)"
echo "Only $(tput setaf 2)'ALL'$(tput sgr0) or $(tput setaf 2)'EN_ONLY'$(tput sgr0) are allowed as language '-l' argument!" echo "Only $(tput setaf 2)'ALL'$(tput sgr0) or $(tput setaf 2)'EN_ONLY'$(tput sgr0) are allowed as language '-l' argument!"
exit 22 exit 24
fi fi
fi fi
#Check if DEV_STATUS is selected via argument '-d' #Check if DEV_STATUS is selected via argument '-d'
if [ ! -z "$devel_flag" ] ; then if [ ! -z "$devel_flag" ] ; then
if [[ "$devel_flag" == "GOLD" || "$devel_flag" == "RC" || "$devel_flag" == "BETA" || "$devel_flag" == "ALPHA" || "$devel_flag" == "DEVEL" || "$devel_flag" == "DEBUG" || "$devel_flag" == "UNKNOWN" ]] ; then if [[ "$devel_flag" == "GOLD" || "$devel_flag" == "RC" || "$devel_flag" == "BETA" || "$devel_flag" == "ALPHA" || "$devel_flag" == "DEVEL" || "$devel_flag" == "DEBUG" || "$devel_flag" == "UNKNOWN" ]] ; then
DEV_STATUS_SELECTED=$devel_flag DEV_STATUS_SELECTED=$devel_flag
elif [[ "$devel_flag" == "atmega404" || "$devel_flag" == "atmega404_no_bootloader" ]] ; then
MK404_DEBUG=$devel_flag
else else
echo "$(tput setaf 1)Development argument is wrong!$(tput sgr0)" echo "$(tput setaf 1)Development argument is wrong!$(tput sgr0)"
echo "Only $(tput setaf 2)'GOLD', 'RC', 'BETA', 'ALPHA', 'DEVEL', 'DEBUG' or 'UNKNOWN' $(tput sgr0) are allowed as devel '-d' argument!$(tput sgr0)" echo "Only $(tput setaf 2)'GOLD', 'RC', 'BETA', 'ALPHA', 'DEVEL', 'DEBUG' or 'UNKNOWN' $(tput sgr0) are allowed as devel '-d' argument!$(tput sgr0)"
exit 23 exit 25
fi fi
fi fi
@ -612,7 +683,7 @@ if [ ! -z "$build_flag" ] ; then
else else
echo "$(tput setaf 1)Build number argument is wrong!$(tput sgr0)" echo "$(tput setaf 1)Build number argument is wrong!$(tput sgr0)"
echo "Only $(tput setaf 2)'Auto' (git needed) or numbers $(tput sgr0) are allowed as build '-b' argument!$(tput sgr0)" echo "Only $(tput setaf 2)'Auto' (git needed) or numbers $(tput sgr0) are allowed as build '-b' argument!$(tput sgr0)"
exit 24 exit 26
fi fi
echo "New Build number is: $BUILD" echo "New Build number is: $BUILD"
@ -647,18 +718,18 @@ else
fi fi
#Set BUILD_ENV_PATH #Set BUILD_ENV_PATH
cd ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor || exit 25 cd ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor || exit 27
BUILD_ENV_PATH="$( pwd -P )" BUILD_ENV_PATH="$( pwd -P )"
cd ../.. cd ../..
#Checkif BUILD_PATH exists and if not creates it #Checkif BUILD_PATH exists and if not creates it
if [ ! -d "Prusa-Firmware-build" ]; then if [ ! -d "Prusa-Firmware-build" ]; then
mkdir Prusa-Firmware-build || exit 26 mkdir Prusa-Firmware-build || exit 28
fi fi
#Set the BUILD_PATH for Arduino IDE #Set the BUILD_PATH for Arduino IDE
cd Prusa-Firmware-build || exit 27 cd Prusa-Firmware-build || exit 29
BUILD_PATH="$( pwd -P )" BUILD_PATH="$( pwd -P )"
#Check git branch has changed #Check git branch has changed
@ -672,6 +743,7 @@ fi
for v in ${VARIANTS[*]} for v in ${VARIANTS[*]}
do do
VARIANT=$(basename "$v" ".h") VARIANT=$(basename "$v" ".h")
MK404_PRINTER=$(grep --max-count=1 "\bPRINTER_TYPE\b" $SCRIPT_PATH/Firmware/variants/$VARIANT.h | sed -e's/ */ /g' |cut -d ' ' -f3 | cut -d '_' -f2)
# Find firmware version in Configuration.h file and use it to generate the hex filename # Find firmware version in Configuration.h file and use it to generate the hex filename
FW=$(grep --max-count=1 "\bFW_VERSION\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d '"' -f2|sed 's/\.//g') FW=$(grep --max-count=1 "\bFW_VERSION\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d '"' -f2|sed 's/\.//g')
if [ -z "$BUILD" ] ; then if [ -z "$BUILD" ] ; then
@ -729,6 +801,12 @@ do
mkdir -p $SCRIPT_PATH/../PF-build-hex/FW$FW-Build$BUILD/$MOTHERBOARD || exit 28 mkdir -p $SCRIPT_PATH/../PF-build-hex/FW$FW-Build$BUILD/$MOTHERBOARD || exit 28
fi fi
OUTPUT_FOLDER="PF-build-hex/FW$FW-Build$BUILD/$MOTHERBOARD" OUTPUT_FOLDER="PF-build-hex/FW$FW-Build$BUILD/$MOTHERBOARD"
if [ "$BOARD" != "prusa_einsy_rambo" ]; then
if [ ! -d "$SCRIPT_PATH/../PF-build-hex/FW$FW-Build$BUILD/$BOARD" ]; then
mkdir -p $SCRIPT_PATH/../PF-build-hex/FW$FW-Build$BUILD/$BOARD || exit 28
fi
OUTPUT_FOLDER="PF-build-hex/FW$FW-Build$BUILD/$BOARD"
fi
#Check if exactly the same hexfile already exists #Check if exactly the same hexfile already exists
if [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex" && "$LANGUAGES" == "ALL" ]]; then if [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex" && "$LANGUAGES" == "ALL" ]]; then
@ -757,25 +835,28 @@ do
#List some useful data #List some useful data
echo "$(tput setaf 2)$(tput setab 7) " echo "$(tput setaf 2)$(tput setab 7) "
echo "Printer :" $MK404_PRINTER
echo "Variant :" $VARIANT echo "Variant :" $VARIANT
echo "Firmware :" $FW echo "Firmware :" $FW
echo "Build # :" $BUILD echo "Build # :" $BUILD
echo "Dev Check :" $DEV_CHECK echo "Dev Check :" $DEV_CHECK
echo "DEV Status :" $DEV_STATUS echo "DEV Status :" $DEV_STATUS
echo "Motherboard:" $MOTHERBOARD echo "Motherboard:" $MOTHERBOARD
echo "Board flash:" $BOARD_FLASH
echo "Board mem :" $BOARD_MEM
echo "Languages :" $LANGUAGES echo "Languages :" $LANGUAGES
echo "Hex-file Folder:" $OUTPUT_FOLDER echo "Hex-file Folder:" $OUTPUT_FOLDER
echo "$(tput sgr0)" echo "$(tput sgr0)"
#Prepare Firmware to be compiled by copying variant as Configuration_prusa.h #Prepare Firmware to be compiled by copying variant as Configuration_prusa.h
if [ ! -f "$SCRIPT_PATH/Firmware/Configuration_prusa.h" ]; then if [ ! -f "$SCRIPT_PATH/Firmware/Configuration_prusa.h" ]; then
cp -f $SCRIPT_PATH/Firmware/variants/$VARIANT.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 29 cp -f $SCRIPT_PATH/Firmware/variants/$VARIANT.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 31
else else
echo "$(tput setaf 6)Configuration_prusa.h already exist it will be overwritten in 10 seconds by the chosen variant.$(tput sgr 0)" echo "$(tput setaf 6)Configuration_prusa.h already exist it will be overwritten in 10 seconds by the chosen variant.$(tput sgr 0)"
if [ $OUTPUT == "1" ] ; then if [ $OUTPUT == "1" ] ; then
read -t 10 -p "Press Enter to continue..." read -t 10 -p "Press Enter to continue..."
fi fi
cp -f $SCRIPT_PATH/Firmware/variants/$VARIANT.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 29 cp -f $SCRIPT_PATH/Firmware/variants/$VARIANT.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 31
fi fi
#Prepare Configuration.h to use the correct FW_DEV_VERSION to prevent LCD messages when connecting with OctoPrint #Prepare Configuration.h to use the correct FW_DEV_VERSION to prevent LCD messages when connecting with OctoPrint
@ -802,6 +883,82 @@ do
#RAMBO_PLATFORM_FILE="PrusaResearchRambo/avr/platform.txt" #RAMBO_PLATFORM_FILE="PrusaResearchRambo/avr/platform.txt"
#fi #fi
#New fresh PF-Firmware-build
if [ "$new_build_flag" == "1" ]; then
rm -r -f $BUILD_PATH/* || exit 54
fi
# Prepare Board mem and flash modifications
## Check board mem size
CURRENT_BOARD_MEM=$(grep "#define RAMEND" $BUILD_ENV_PATH/hardware/tools/avr/avr/include/avr/iom2560.h | sed -e's/.* //g'|cut -d ' ' -f3|tr -d $'\n')
if [ $CURRENT_BOARD_MEM != "0x21FF" ] ; then
echo "Board mem has been already modified or not reset"
echo "Current:" $CURRENT_BOARD_MEM
PS3="Select $(tput setaf 2)Yes$(tput sgr 0) if you want to reset it."
select yn in "Yes" "No"; do
case $yn in
Yes)
echo "Resetting board mem size"
sed -i -- "s/^#define RAMEND .*$/#define RAMEND 0x21FF/g" $BUILD_ENV_PATH/hardware/tools/avr/avr/include/avr/iom2560.h
break
;;
*)
echo "Continuing with modified mem size"
break
;;
esac
done
fi
## Modify board mem size
if [[ ! -z $BOARD_MEM && "$BOARD_MEM" != "0x21FF" ]] ; then
echo "$(tput setaf 3)Modifying board memory size (hex):$(tput sgr 0)"
echo "Old:" $CURRENT_BOARD_MEM
echo "New:" $BOARD_MEM
read -t 5 -p "To cancel press $(tput setaf 1)CRTL+C$(tput sgr 0)"
echo ""
sed -i -- "s/^#define RAMEND 0x21FF/#define RAMEND ${BOARD_MEM}/g" $BUILD_ENV_PATH/hardware/tools/avr/avr/include/avr/iom2560.h
fi
## Check board flash size
CURRENT_BOARD_FLASH=$(grep "#define FLASHEND" $BUILD_ENV_PATH/hardware/tools/avr/avr/include/avr/iom2560.h | sed -e's/.* //g'|cut -d ' ' -f3|tr -d $'\n')
CURRENT_BOARD_maximum_size=$(grep "prusa_einsy_rambo.upload.maximum_size" $BUILD_ENV_PATH/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr/$BOARD_VERSION/boards.txt |cut -d '=' -f2|tr -d $'\n')
if [[ $CURRENT_BOARD_FLASH != "0x3FFFF" || $CURRENT_BOARD_maximum_size != "253952" ]] ; then
echo "Board flash has been already modified or not reset"
echo "Current flash size:" $CURRENT_BOARD_FLASH
echo "Current max. size:" $CURRENT_BOARD_maximum_size
PS3="Select $(tput setaf 2)Yes$(tput sgr 0) if you want to reset it."
select yn in "Yes" "No"; do
case $yn in
Yes)
echo "$(tput setaf 1)Resetting board flash size$(tput sgr 0)"
sed -i -- "s/^#define FLASHEND .*$/#define FLASHEND 0x3FFFF/g" $BUILD_ENV_PATH/hardware/tools/avr/avr/include/avr/iom2560.h
sed -i -- "s/^prusa_einsy_rambo.upload.maximum_size.*/prusa_einsy_rambo.upload.maximum_size=253952/g" $BUILD_ENV_PATH/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr/$BOARD_VERSION/boards.txt
break
;;
*)
echo "$(tput setaf 3)Continuing with modified flash size$(tput sgr 0)"
break
;;
esac
done
fi
## Modify boad flash size
if [[ ! -z $BOARD_FLASH && "$BOARD_FLASH" != "0x3FFFF" ]] ; then
echo "Modifying board flash size (hex):"
echo "Old flash size:" $CURRENT_BOARD_FLASH
echo "New flash size:" $BOARD_FLASH
echo "Old max. size:" $CURRENT_BOARD_maximum_size
echo "New max. size:" $BOARD_maximum_size
read -t 5 -p "To cancel press $(tput setaf 1)CRTL+C$(tput sgr 0)"
sed -i -- "s/^#define FLASHEND .*/#define FLASHEND ${BOARD_FLASH}/g" $BUILD_ENV_PATH/hardware/tools/avr/avr/include/avr/iom2560.h
sed -i -- "s/^prusa_einsy_rambo.upload.maximum_size.*/prusa_einsy_rambo.upload.maximum_size=${BOARD_maximum_size}/g" $BUILD_ENV_PATH/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr/$BOARD_VERSION/boards.txt
fi
#Check if compiler flags are set to Prusa specific needs for the rambo board.
# if [ $TARGET_OS == "windows" ]; then
# RAMBO_PLATFORM_FILE="PrusaResearchRambo/avr/platform.txt"
# fi
#### End of Prepare building #### End of Prepare building
#### Start building #### Start building
@ -820,13 +977,8 @@ do
sleep 2 sleep 2
fi fi
#New fresh PF-Firmware-build #$BUILD_ENV_PATH/arduino-builder -dump-prefs -debug-level 10 -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD_PACKAGE_NAME:avr:$BOARD -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 41
if [ "$new_build_flag" == "1" ]; then $BUILD_ENV_PATH/arduino-builder -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD_PACKAGE_NAME:avr:$BOARD -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 42
rm -r -f $BUILD_PATH/* || exit 36
fi
#$BUILD_ENV_PATH/arduino-builder -dump-prefs -debug-level 10 -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD_PACKAGE_NAME:avr:$BOARD -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 30
$BUILD_ENV_PATH/arduino-builder -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD_PACKAGE_NAME:avr:$BOARD -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 30
echo "$(tput sgr 0)" echo "$(tput sgr 0)"
if [ $LANGUAGES == "ALL" ]; then if [ $LANGUAGES == "ALL" ]; then
@ -839,7 +991,7 @@ do
fi fi
cd $SCRIPT_PATH/lang cd $SCRIPT_PATH/lang
echo "$(tput setaf 3)" echo "$(tput setaf 3)"
./config.sh || exit 31 ./config.sh || exit 43
echo "$(tput sgr 0)" echo "$(tput sgr 0)"
# Check if previous languages and firmware build exist and if so clean them up # Check if previous languages and firmware build exist and if so clean them up
if [ -f "lang_en.tmp" ]; then if [ -f "lang_en.tmp" ]; then
@ -864,11 +1016,11 @@ do
fi fi
# build languages # build languages
echo "$(tput setaf 3)" echo "$(tput setaf 3)"
./lang-build.sh || exit 32 ./lang-build.sh || exit 44
#Community language support # build community languages
./lang-community.sh || exit 33 ./lang-community.sh || exit 45
# Combine compiled firmware with languages # Combine compiled firmware with languages
./fw-build.sh || exit 34 ./fw-build.sh || exit 46
cp not_tran.txt not_tran_$VARIANT.txt cp not_tran.txt not_tran_$VARIANT.txt
cp not_used.txt not_used_$VARIANT.txt cp not_used.txt not_used_$VARIANT.txt
echo "$(tput sgr 0)" echo "$(tput sgr 0)"
@ -877,6 +1029,11 @@ do
# If the motherboard is an EINSY just copy one hexfile # If the motherboard is an EINSY just copy one hexfile
if [ "$MOTHERBOARD" = "BOARD_EINSY_1_0a" ]; then if [ "$MOTHERBOARD" = "BOARD_EINSY_1_0a" ]; then
echo "$(tput setaf 2)Copying multi language firmware for MK3/Einsy board to PF-build-hex folder$(tput sgr 0)" echo "$(tput setaf 2)Copying multi language firmware for MK3/Einsy board to PF-build-hex folder$(tput sgr 0)"
# Make a copy of "lang.bin" for MK404 MK3 and MK3S
if [ ! -z "$mk404_flag" ]; then
cp -f lang.bin $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-lang.bin
fi
# End of "lang.bin" for MK3 and MK3S copy
cp -f firmware.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex cp -f firmware.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex
else else
echo "$(tput setaf 2)Zip multi language firmware for MK2.5/miniRAMbo board to PF-build-hex folder$(tput sgr 0)" echo "$(tput setaf 2)Zip multi language firmware for MK2.5/miniRAMbo board to PF-build-hex folder$(tput sgr 0)"
@ -891,29 +1048,38 @@ do
zip a $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex zip a $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex
rm $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex rm $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex
elif [ $TARGET_OS == "linux" ]; then elif [ $TARGET_OS == "linux" ]; then
# Make a copy for MK404 sim of MK2, MK2.5, MK2.5S firmware
if [ ! -z "$mk404_flag" ]; then
cp -f firmware_de.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex
fi
# End of MK2, MK2.5, MK2.5S firmware copy
zip -m -j ../../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip ../../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex zip -m -j ../../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip ../../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex
fi fi
fi fi
# Cleanup after build # Cleanup after build
if [[ -z "$clean_flag" || "$clean_flag" == "0" ]]; then if [[ -z "$clean_flag" || "$clean_flag" == "0" ]]; then
echo "$(tput setaf 3)" echo "$(tput setaf 3)"
./fw-clean.sh || exit 35 ./fw-clean.sh || exit 51
./lang-clean.sh || exit 36 ./lang-clean.sh || exit 52
echo "$(tput sgr 0)" echo "$(tput sgr 0)"
fi fi
else else
echo "$(tput setaf 2)Copying English only firmware to PF-build-hex folder$(tput sgr 0)" echo "$(tput setaf 2)Copying English only firmware to PF-build-hex folder$(tput sgr 0)"
cp -f $BUILD_PATH/Firmware.ino.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex || exit 37 cp -f $BUILD_PATH/Firmware.ino.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex || exit 47
fi fi
# Cleanup Firmware # Cleanup Firmware
if [[ -z "$prusa_flag" || "$prusa_flag" == "0" ]]; then if [[ -z "$prusa_flag" || "$prusa_flag" == "0" ]]; then
rm $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 38 rm $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 53
fi fi
# Delete dupblicates
if find $SCRIPT_PATH/lang/ -name '*RAMBo10a*.txt' -printf 1 -quit | grep -q 1 if find $SCRIPT_PATH/lang/ -name '*RAMBo10a*.txt' -printf 1 -quit | grep -q 1
then then
rm $SCRIPT_PATH/lang/*RAMBo10a*.txt rm $SCRIPT_PATH/lang/*RAMBo10a*.txt
fi fi
# MK2 not supported in this branch
if find $SCRIPT_PATH/lang/ -name '*MK2-RAMBo13a*' -printf 1 -quit | grep -q 1 if find $SCRIPT_PATH/lang/ -name '*MK2-RAMBo13a*' -printf 1 -quit | grep -q 1
then then
rm $SCRIPT_PATH/lang/*MK2-RAMBo13a*.txt rm $SCRIPT_PATH/lang/*MK2-RAMBo13a*.txt
@ -929,7 +1095,7 @@ do
#New fresh PF-Firmware-build #New fresh PF-Firmware-build
if [ "$new_build_flag" == "1" ]; then if [ "$new_build_flag" == "1" ]; then
rm -r -f $BUILD_PATH/* || exit 39 rm -r -f $BUILD_PATH/* || exit 54
fi fi
# Restore files to previous state # Restore files to previous state
@ -945,13 +1111,86 @@ do
if [ $OUTPUT == "1" ] ; then if [ $OUTPUT == "1" ] ; then
sleep 5 sleep 5
fi fi
# Restore build env files to previous state
sed -i -- "s/^#define FLASHEND .*$/#define FLASHEND 0x3FFFF/g" $BUILD_ENV_PATH/hardware/tools/avr/avr/include/avr/iom2560.h
sed -i -- "s/^prusa_einsy_rambo.upload.maximum_size.*/prusa_einsy_rambo.upload.maximum_size=253952/g" $BUILD_ENV_PATH/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr/$BOARD_VERSION/boards.txt
sed -i -- "s/^#define RAMEND.*/#define RAMEND 0x21FF/g" $BUILD_ENV_PATH/hardware/tools/avr/avr/include/avr/iom2560.h
done done
# Switch to hex path and list build files # Switch to hex path and list build files
cd $SCRIPT_PATH cd $SCRIPT_PATH
cd ..
echo "$(tput setaf 2) " echo "$(tput setaf 2) "
echo " " echo " "
echo "Build done, please use Slic3rPE > 1.41.0 to upload the firmware" echo "Build done, please use Slic3rPE > 1.41.0 to upload the firmware"
echo "more information how to flash firmware https://www.prusa3d.com/drivers/ $(tput sgr 0)" echo "more information how to flash firmware https://www.prusa3d.com/drivers/ $(tput sgr 0)"
#### End building #### End building
#### MK404 Simulator
# Check/compile MK404 sim
if [ ! -z "$mk404_flag" ]; then
./MK404-build.sh -c1 || exit 61
# For Prusa MK2, MK2.5/S
if [ "$MOTHERBOARD" == "BOARD_RAMBO_MINI_1_3" ]; then
MK404_PRINTER="${MK404_PRINTER}_mR13"
else
if [[ "$mk404_flag" == "2" || "$mk404_flag" == "MMU2" || "$mk404_flag" == "MMU2S" ]]; then # Check if MMU2 is selected only for MK3/S
MK404_PRINTER="${MK404_PRINTER}MMU2"
fi
fi
# Run MK404 with 'debugcore' and/or 'bootloader-file'
echo "MK404_DEBUG --$MK404_DEBUG--"
if [ "$MK404_DEBUG" == "atmega404" ]; then
MK404_options="--debugcore"
elif [ "$MK404_DEBUG" == "atmega404_no_bootloader" ]; then
MK404_options='--debugcore --bootloader-file ""'
fi
# Run MK404 with grafics
if [ ! -z "$graphics_flag" ]; then
echo "MK404_options --$MK404_options--"
if [ ! -z "$MK404_options" ]; then
MK404_options="${MK404_options} --colour-extrusion --extrusion Quad_HR -g "
else
MK404_options="--colour-extrusion --extrusion Quad_HR -g "
fi
if [[ "$graphics_flag" == "1" || "$graphics_flag" == "lite" ]]; then
MK404_options="${MK404_options}lite"
elif [[ "$graphics_flag" == "2" || "$graphics_flag" == "fancy" ]]; then
MK404_options="${MK404_options}fancy"
else
echo "$(tput setaf 1)Unsupported MK404 graphics option $graphics_flag$(tput sgr 0)"
fi
fi
# Output some useful data
echo "Printer: $MK404_PRINTER"
echo "Options: $MK404_options"
# Change to MK404 build folder
cd ../MK404/master/build
# Copy language bin file for MK3 and MK3S to xflash
# if [ -f $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-lang.bin ]; then
# echo "Copy 'FW$FW-Build$BUILD-$VARIANT-lang.bin' to 'Prusa_${MK404_PRINTER}_xflash.bin'"
# dd if=/dev/zero bs=1 count=262145 | tr "\000" "\377" >Prusa_${MK404_PRINTER}_xflash.bin
# dd if=$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-lang.bin of=Prusa_${MK404_PRINTER}_xflash.bin conv=notrunc
# fi
#Decide which hex file to use EN_ONLY or Multi language
if [ "$LANGUAGES" == "ALL" ]; then
MK404_firmware_file=$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex
else
MK404_firmware_file=$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex
fi
# Start MK404
# default with serial output and terminal to manipulate it via terminal
./MK404 Prusa_$MK404_PRINTER -s --terminal $MK404_options -f $MK404_firmware_file || exit 62
fi
#### End of MK404 Simulator