4a10dfa68f
Restricting the MK404 build to gcc-7 is not a good idea, since gcc-7 is already not available in several newer distributions. Just pick the current gcc version. Current gcc 10 versions build MK404 correctly.
547 lines
19 KiB
Bash
Executable File
547 lines
19 KiB
Bash
Executable File
#!/bin/bash
|
|
# This bash script is used to compile automatically and run 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'
|
|
#
|
|
#
|
|
# Version: 1.0.0-Build_13
|
|
# 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
|
|
# 18 Jun 2021, 3d-gussner, Documentation and version number
|
|
# 18 Jun 2021, 3d-gussner, Added some arguments and checks
|
|
# 18 Jun 2021, 3d-gussner, Default extrusion graphics to line. Thanks @vintagepc point it out
|
|
# 18 Jun 2021, 3d-gussner, Added -g 3 and 4 for more details extrusion lines
|
|
# 18 Jun 2021, 3d-gussner, Check for updates is default. Fix update if internet connection is lost.
|
|
# 21 Jun 2021, 3d-gussner, Change board_flash argument to 'y' and firmware_version to 'f'
|
|
|
|
#### Start: Failures
|
|
failures()
|
|
{
|
|
case "$1" in
|
|
0) echo "$(tput setaf 2)MK404-build.sh finished with success$(tput sgr0)" ;;
|
|
2) echo "$(tput setaf 1)Unsupported OS: Linux $(uname -m)" ; echo "Please refer to the notes of MK404-build.sh$(tput sgr0)" ; exit 2 ;;
|
|
3) echo "$(tput setaf 1)This script doesn't support your Operating system!"; echo "Please use Linux 64-bit"; echo "Read the notes of MK404-build.sh$(tput sgr0)" ; exit 2 ;;
|
|
4) echo "$(tput setaf 1)Some packages are missing please install these!$(tput sgr0)" ; exit 4 ;;
|
|
5) echo "$(tput setaf 1)Wrong printer chosen.$(tput sgr0) Following Printers are supported: MK25, MK25S, MK3 and MK3S" ; exit 5 ;;
|
|
6) echo "$(tput setaf 1)Unsupported board flash size chosen.$(tput sgr0) Only '256', '384', '512', '1024' and '32M' are allowed." ; exit 6 ;;
|
|
7) echo "$(tput setaf 1)Unsupported board mem size chosen.$(tput sgr0) Only '8', '16', '32' and '64' are allowed." ; exit 7 ;;
|
|
8) echo "$(tput setaf 1)No firmware version file selected!$(tput sgr0)" ; echo "Add argument -f with path and hex filename to start MK404" ; exit 8 ;;
|
|
9) echo "$(tput setaf 1)Tried to determine MK404 printer from hex file, but failed!$(tput sgr0)" ; "Add argument -p with 'MK25', 'MK25S', 'MK3' or 'MK3S' to start MK404" ; exit 9 ;;
|
|
10) echo "$(tput setaf 1)Missing printer$(tput sgr0)" ; exit 10 ;;
|
|
esac
|
|
}
|
|
#### End: Failures
|
|
|
|
#### Start: Check options
|
|
##check_options()
|
|
##{
|
|
while getopts c:f:g:m:n:p:u:x:y:?h flag
|
|
do
|
|
case "${flag}" in
|
|
c) check_flag=${OPTARG};;
|
|
f) firmware_version_flag=${OPTARG};;
|
|
g) mk404_graphics_flag=${OPTARG};;
|
|
h) help_flag=1;;
|
|
m) mk404_flag=${OPTARG};;
|
|
n) new_build_flag=${OPTARG};;
|
|
p) mk404_printer_flag=${OPTARG};;
|
|
u) update_flag=${OPTARG};;
|
|
x) board_mem_flag=${OPTARG};;
|
|
y) board_flash_flag=${OPTARG};;
|
|
?) help_flag=1;;
|
|
esac
|
|
done
|
|
#Debug echos
|
|
#echo "c: $check_flag"
|
|
#echo "f: $firmware_version_flag"
|
|
#echo "g: $mk404_graphics_flag"
|
|
#echo "m: $mk404_flag"
|
|
#echo "n: $new_build_flag"
|
|
#echo "p: $mk404_printer_flag"
|
|
#echo "u: $update_flag"
|
|
#echo "x: $board_mem_flag"
|
|
#echo "y: $board_flash_flag"
|
|
|
|
# '?' 'h' argument usage and help
|
|
if [ "$help_flag" == "1" ] ; then
|
|
echo "***************************************"
|
|
echo "* MK404-build.sh Version: 1.0.0-Build_13 *"
|
|
echo "***************************************"
|
|
echo "Arguments:"
|
|
echo "$(tput setaf 2)-c$(tput sgr0) Check for update"
|
|
echo "$(tput setaf 2)-f$(tput sgr0) Prusa-Firmware version"
|
|
echo "$(tput setaf 2)-g$(tput sgr0) Start MK404 graphics"
|
|
echo "$(tput setaf 2)-h$(tput sgr0) Help"
|
|
echo "$(tput setaf 2)-m$(tput sgr0) Start MK404 sim"
|
|
echo "$(tput setaf 2)-n$(tput sgr0) Force new build"
|
|
echo "$(tput setaf 2)-p$(tput sgr0) MK404 Printer"
|
|
echo "$(tput setaf 2)-u$(tput sgr0) Update MK404"
|
|
echo "$(tput setaf 2)-x$(tput sgr0) Board memory size"
|
|
echo "$(tput setaf 2)-y$(tput sgr0) Board flash size"
|
|
echo "$(tput setaf 2)-?$(tput sgr0) Help"
|
|
echo
|
|
echo "Brief USAGE:"
|
|
echo " $(tput setaf 2)./MK404-build.sh$(tput sgr0) [-c] [-f] [-g] [-m] [-n] [-p] [-u] [-v] [-x] [-h] [-?]"
|
|
echo
|
|
echo " -c : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes"
|
|
echo " -f : '$(tput setaf 2)path+file name$(tput sgr0)'"
|
|
echo " -g : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' lite, '$(tput setaf 2)2$(tput sgr0)' fancy, '$(tput setaf 2)3$(tput sgr0)' lite with Quad_HR, '$(tput setaf 2)4$(tput sgr0)' fancy with Quad_HR"
|
|
echo " -m : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes '$(tput setaf 2)2$(tput sgr0)' with MMU2"
|
|
echo " -n : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes"
|
|
echo " -p : '$(tput setaf 2)MK25$(tput sgr0)', '$(tput setaf 2)MK25S$(tput sgr0)', '$(tput setaf 2)MK3$(tput sgr0)' or '$(tput setaf 2)MK3S$(tput sgr0)'"
|
|
echo " -u : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes '"
|
|
echo " -x : '$(tput setaf 2)8$(tput sgr0)',$(tput setaf 2)16$(tput sgr0)',$(tput setaf 2)32$(tput sgr0)' or '$(tput setaf 2)64$(tput sgr0)' Kb."
|
|
echo " -y : '$(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
|
|
echo "Example:"
|
|
echo " $(tput setaf 2)./MK404-build.sh -f 1$(tput sgr0)"
|
|
echo " Will force an update and rebuild the MK404 SIM"
|
|
echo
|
|
echo " $(tput setaf 2)./MK404-build.sh -m 1 -g 1 -f ../../../../Prusa-Firmware/PF-build-hex/FW3100-Build4481/BOARD_EINSY_1_0a/FW3100-Build4481-1_75mm_MK3S-EINSy10a-E3Dv6full.hex$(tput sgr0)"
|
|
echo " Will start MK404 with Prusa_MK3S and Prusa-Firmware 3.10.0-Build4481"
|
|
exit 1
|
|
fi
|
|
|
|
#Check MK404 agruments
|
|
#Set Check for updates as default
|
|
check_flag=1
|
|
#Start: Check mk404_printer_flag
|
|
if [ ! -z $mk404_printer_flag ]; then
|
|
if [[ "$mk404_printer_flag" == "MK3" || "$mk404_printer_flag" == "MK3S" || "$mk404_printer_flag" == "MK25" || "$mk404_printer_flag" == "MK25S" ]]; then
|
|
MK404_PRINTER_TEMP=$mk404_printer_flag
|
|
else
|
|
failures 5
|
|
fi
|
|
fi
|
|
#End: Check mk404_printer_flag
|
|
|
|
#Start: Check if Build is selected with argument '-f'
|
|
if [ ! -z "$board_flash_flag" ] ; then
|
|
if [ "$board_flash_flag" == "256" ] ; then
|
|
BOARD_FLASH="0x3FFFF"
|
|
echo "Board flash size : $board_flash_flag Kb, $BOARD_FLASH (hex)"
|
|
elif [ "$board_flash_flag" == "384" ] ; then
|
|
BOARD_FLASH="0x5FFFF"
|
|
echo "Board flash size : $board_flash_flag Kb, $BOARD_FLASH (hex)"
|
|
elif [ "$board_flash_flag" == "512" ] ; then
|
|
BOARD_FLASH="0x7FFFF"
|
|
echo "Board flash size : $board_flash_flag Kb, $BOARD_FLASH (hex)"
|
|
elif [ "$board_flash_flag" == "1024" ] ; then
|
|
BOARD_FLASH="0xFFFFF"
|
|
echo "Board flash size : $board_flash_flag Kb, $BOARD_FLASH (hex)"
|
|
elif [[ "$board_flash_flag" == "32M" || "$board_flash_flag" == "32768" ]] ; then
|
|
BOARD_FLASH="0x1FFFFFF"
|
|
echo "Board flash size : 32 Mb, $BOARD_FLASH (hex)"
|
|
else
|
|
failures 6
|
|
fi
|
|
fi
|
|
#End: Check if Build is selected with argument '-f'
|
|
|
|
#Start: 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" == "16" ] ; then
|
|
BOARD_MEM="0x3DFF"
|
|
echo "Board mem size : $board_mem_flag Kb, $BOARD_MEM (hex)"
|
|
elif [ "$board_mem_flag" == "32" ] ; then
|
|
BOARD_MEM="0x7DFF"
|
|
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
|
|
failures 7
|
|
fi
|
|
fi
|
|
#End: Check if Build is selected with argument '-x'
|
|
|
|
#Start: Check if new build is selected
|
|
if [ "$new_build_flag" == "1" ]; then
|
|
check_flag=1
|
|
update_flag=1
|
|
fi
|
|
if [ "$update_flag" == "1" ]; then
|
|
check_flag=1
|
|
fi
|
|
#End: Check if new build is selected
|
|
|
|
# Prepare run MK404
|
|
#Check MK404_Printer
|
|
if [ ! -z $firmware_version_flag ]; then
|
|
MK404_PRINTER_TEMP=$(echo $firmware_version_flag | sed 's/\(.*\)\///' | grep 'MK3')
|
|
if [ ! -z $MK404_PRINTER_TEMP ]; then
|
|
MK404_PRINTER=MK3
|
|
fi
|
|
MK404_PRINTER_TEMP=$(echo $firmware_version_flag | sed 's/\(.*\)\///' | grep 'MK3S')
|
|
if [ ! -z $MK404_PRINTER_TEMP ]; then
|
|
MK404_PRINTER=MK3S
|
|
fi
|
|
MK404_PRINTER_TEMP=$(echo $firmware_version_flag | sed 's/\(.*\)\///' | grep 'MK25')
|
|
if [ ! -z $MK404_PRINTER_TEMP ]; then
|
|
MK404_PRINTER=MK25
|
|
fi
|
|
MK404_PRINTER_TEMP=$(echo $firmware_version_flag | sed 's/\(.*\)\///' | grep 'MK25S')
|
|
if [ ! -z $MK404_PRINTER_TEMP ]; then
|
|
MK404_PRINTER=MK25S
|
|
fi
|
|
else
|
|
failures 8
|
|
fi
|
|
|
|
if [ -z "$MK404_PRINTER" ]; then
|
|
failures 9
|
|
fi
|
|
|
|
if [ ! -z $mk404_printer_flag ]; then
|
|
if [ "$mk404_printer_flag" != "$MK404_PRINTER" ]; then
|
|
echo "$(tput setaf 3)You defined a different printer type than the firmware!"
|
|
echo "This can cause unexpected issues.$(tput sgr 0)"
|
|
echo
|
|
PS3="Select $(tput setaf 2)printer$(tput sgr 0) you want to use."
|
|
select which in "$(tput setaf 2)$MK404_PRINTER$(tput sgr 0)" "$mk404_printer_flag"; do
|
|
case $which in
|
|
$MK404_PRINTER)
|
|
echo "Set $MK404_PRINTER as printer"
|
|
break
|
|
;;
|
|
$mk404_printer_flag)
|
|
echo "Set $(tput setaf 3)$mk404_printer_flag$(tput sgr 0) as printer"
|
|
echo "$(tput setaf 3)This firmware file isn't correct for this printer!!!$(tput sgr 0)"
|
|
echo
|
|
MK404_PRINTER=$mk404_printer_flag
|
|
read -p "Press Enter to continue."
|
|
break
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
fi
|
|
fi
|
|
|
|
if [ -z $MK404_PRINTER ]; then
|
|
failures 10
|
|
fi
|
|
|
|
if [[ "$MK404_PRINTER" == "MK25" || "$MK404_PRINTER" == "MK25S" ]]; then
|
|
MK404_PRINTER="${MK404_PRINTER}_mR13"
|
|
else
|
|
if [ "$mk404_flag" == "2" ]; 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'
|
|
if [[ ! -z $MK404_DEBUG && "$MK404_DEBUG" == "atmega404" || ! -z $BOARD_MEM && "$BOARD_MEM" == "0xFFFF" ]]; then
|
|
MK404_options="--debugcore"
|
|
fi
|
|
if [[ ! -z $MK404_DEBUG && "$MK404_DEBUG" == "atmega404_no_bootloader" || ! -z $BOARD_FLASH && "$BOARD_FLASH" != "0x3FFFF" ]]; then
|
|
MK404_options='--debugcore --bootloader-file ""'
|
|
fi
|
|
|
|
# Run MK404 with graphics
|
|
if [ ! -z "$mk404_graphics_flag" ]; then
|
|
if [ ! -z "$MK404_options" ]; then
|
|
MK404_options="${MK404_options} -g "
|
|
else
|
|
MK404_options=" -g "
|
|
fi
|
|
if [[ "$mk404_graphics_flag" == "1" || "$mk404_graphics_flag" == "lite" || "$mk404_graphics_flag" == "3" ]]; then
|
|
MK404_options="${MK404_options}lite"
|
|
elif [[ "$mk404_graphics_flag" == "2" || "$mk404_graphics_flag" == "fancy" || "$mk404_graphics_flag" == "4" ]]; then
|
|
MK404_options="${MK404_options}fancy"
|
|
else
|
|
echo "$(tput setaf 1)Unsupported MK404 graphics option $mk404_graphics_flag$(tput sgr 0)"
|
|
fi
|
|
if [[ "$mk404_graphics_flag" == "3" || "$mk404_graphics_flag" == "4" ]]; then
|
|
MK404_options="${MK404_options} --colour-extrusion --extrusion Quad_HR"
|
|
else
|
|
MK404_options="${MK404_options} --extrusion Line"
|
|
fi
|
|
fi
|
|
if [ ! -z $firmware_version_flag ]; then
|
|
MK404_firmware_file=" -f $firmware_version_flag"
|
|
fi
|
|
|
|
#End: Check MK404 agruments
|
|
##}
|
|
#### End: Check for options/flags
|
|
|
|
#### Start: Check if OSTYPE is supported
|
|
check_OS()
|
|
{
|
|
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
|
|
failures 2
|
|
fi
|
|
else
|
|
failures 3
|
|
fi
|
|
sleep 2
|
|
}
|
|
#### End: Check if OSTYPE is supported
|
|
|
|
#### Start: Check MK404 dependencies
|
|
check_packages()
|
|
{
|
|
packages=(
|
|
"libelf-dev"
|
|
"gcc"
|
|
"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
|
|
failures 4
|
|
fi
|
|
}
|
|
#### End: Check MK404 dependencies
|
|
|
|
#### Start: Set build environment
|
|
set_build_env_variables()
|
|
{
|
|
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"
|
|
}
|
|
#### End: Set build environment
|
|
|
|
#### Start: List few useful data
|
|
output_useful_data()
|
|
{
|
|
echo
|
|
echo "Script path :" $MK404_SCRIPT_PATH
|
|
echo "OS :" $TARGET_OS
|
|
echo ""
|
|
echo "MK404 path :" $MK404_PATH
|
|
}
|
|
#### End: List few useful data
|
|
|
|
#### Start: Clone MK404 if needed
|
|
get_MK404()
|
|
{
|
|
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
|
|
}
|
|
#### End: Clone MK404 if needed
|
|
|
|
#### Start: Check for updates
|
|
check_for_updates()
|
|
{
|
|
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 latest release
|
|
MK404_release_url=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/$MK404_owner/$MK404_project/releases/latest)
|
|
MK404_release_tag=$(basename $MK404_release_url)
|
|
# 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)
|
|
MK404_remote_GIT_COMMIT_HASH=$(git ls-remote | grep "refs/tags/$MK404_release_tag" | cut -f 1)
|
|
# Get remote Commit_Number
|
|
MK404_remote_GIT_COMMIT_NUMBER=$(git rev-list $MK404_release_tag --count)
|
|
# Output
|
|
echo ""
|
|
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 setaf 2)"
|
|
fi
|
|
echo "Latest release tag : $MK404_release_tag"
|
|
echo "Latest release hash : $MK404_remote_GIT_COMMIT_HASH"
|
|
echo "Latest remote commit nr : $MK404_remote_GIT_COMMIT_NUMBER"
|
|
echo "$(tput sgr 0)"
|
|
|
|
# Check for updates
|
|
if [ ! -z $MK404_remote_GIT_COMMIT_HASH ]; then
|
|
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
|
|
fi
|
|
}
|
|
#### End: Check for updates
|
|
|
|
#### Start: Fetch updates and force new build
|
|
fetch_updates()
|
|
{
|
|
if [ "$update_flag" == "1" ]; then
|
|
if [ ! -z $MK404_remote_GIT_COMMIT_HASH ]; 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 $MK404_release_tag
|
|
read -t 10 -p "$(tput setaf 2)Compiling MK404 !$(tput sgr 0)"
|
|
echo ""
|
|
new_build_flag=1
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
#### End: Fetch updates and force new build
|
|
|
|
#### Start: Prepare MK404 build
|
|
prepare_MK404()
|
|
{
|
|
if [ ! -d $MK404_BUILD_PATH ]; then
|
|
mkdir -p $MK404_BUILD_PATH
|
|
fi
|
|
}
|
|
#### End: Prepare MK404 build
|
|
|
|
#### Start: Build MK404
|
|
build_MK404()
|
|
{
|
|
if [[ ! -f "$MK404_BUILD_PATH/Makefile" || "$new_build_flag" == "1" ]]; then
|
|
# Init and update submodules
|
|
if [ -d $MK404_BUILD_PATH ]; then
|
|
rm -rf $MK404_BUILD_PATH
|
|
mkdir -p $MK404_BUILD_PATH
|
|
fi
|
|
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" || "$new_build_flag" == "1" ]]; then
|
|
make
|
|
fi
|
|
|
|
# Make SDcards
|
|
if [[ ! -f "$MK404_BUILD_PATH/Prusa_MK3S_SDcard.bin" || "$new_build_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
|
|
}
|
|
#### End: Build MK404
|
|
|
|
|
|
#### Start: Run MK404 SIM
|
|
run_MK404_SIM()
|
|
{
|
|
if [ ! -z $mk404_flag ]; then
|
|
# Output some useful data
|
|
echo "Printer : $MK404_PRINTER"
|
|
echo "Options : $MK404_options"
|
|
echo ""
|
|
read -t 5 -p "Press $(tput setaf 2)Enter$(tput sgr 0) to start MK404"
|
|
echo ""
|
|
|
|
# Change to MK404 build folder
|
|
cd $MK404_BUILD_PATH
|
|
|
|
# Start MK404
|
|
# default with serial output and terminal to manipulate it via terminal
|
|
echo ""
|
|
echo "./MK404 Prusa_$MK404_PRINTER -s --terminal $MK404_options $MK404_firmware_file"
|
|
sleep 5
|
|
./MK404 Prusa_$MK404_PRINTER -s --terminal $MK404_options $MK404_firmware_file || exit 10
|
|
fi
|
|
}
|
|
#### End: Run MK404 SIM
|
|
|
|
#### Check OS and needed packages
|
|
echo "Check OS"
|
|
check_OS
|
|
check_packages
|
|
|
|
#### Check for options/flags
|
|
echo "Check for options"
|
|
|
|
#### Prepare build environment
|
|
echo "Prepare build env"
|
|
set_build_env_variables
|
|
output_useful_data
|
|
get_MK404
|
|
|
|
#
|
|
cd $MK404_PATH
|
|
|
|
check_for_updates
|
|
fetch_updates
|
|
prepare_MK404
|
|
build_MK404
|
|
run_MK404_SIM
|
|
#### End of MK404 Simulator
|