2019-02-16 05:05:43 +00:00
#!/bin/bash
2019-04-05 21:53:33 +00:00
# This bash script is used to compile automatically the Prusa firmware with a dedicated build environment and settings
2019-02-16 05:05:43 +00:00
#
# Supported OS: Windows 10, Linux64 bit
2019-07-17 11:51:34 +00:00
# Beta OS: Linux32 bit
2019-02-16 05:05:43 +00:00
#
# Linux:
#
# Windows:
2019-04-05 21:53:33 +00:00
# To execute this script you gonna need few things on your Windows machine
2019-02-16 05:05:43 +00:00
#
# Linux Subsystem Ubuntu
# 1. Follow these instructions
2019-07-22 13:49:15 +00:00
# 2. Open Ubuntu bash and get latest updates with 'apt-get update'
2019-02-16 05:05:43 +00:00
# 3. Install zip with 'apt-get install zip'
2019-07-22 13:49:15 +00:00
# 4. Install python3 with 'apt-get install python3'
# 5. Add command 'ln -sf /usr/bin/python3.5 /usr/bin/python' to link python3 to python.
2021-01-08 10:01:17 +00:00
# Do not install 'python' as python 2.x has end of life see https://pythonclock.org/
2019-07-22 13:49:15 +00:00
# 6. Add at top of ~/.bashrc following lines by using 'sudo nano ~/.bashrc'
2019-02-16 05:05:43 +00:00
#
# export OS="Linux"
# export JAVA_TOOL_OPTIONS="-Djava.net.preferIPv4Stack=true"
# export GPG_TTY=$(tty)
#
# and confirm them. Restart Ubuntu bash
#
# Or GIT-BASH
# 1. Download and install the correct (64bit or 32bit) Git version https://git-scm.com/download/win
# 2. Also follow these instructions https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058
# 3. Download and install 7z-zip from its official website.
# By default, it is installed under the directory /c/Program Files/7-Zip in Windows 10 as my case.
# 4. Run git Bash under Administrator privilege and navigate to the directory /c/Program Files/Git/mingw64/bin,
# you can run the command ln -s /c/Program Files/7-Zip/7z.exe zip.exe
#
2019-04-05 21:53:33 +00:00
# Useful things to edit and compare your custom Firmware
2019-02-16 05:05:43 +00:00
# 1. Download and install current and correct (64bit or 32bit) Notepad++ version https://notepad-plus-plus.org/download
# 2. Another great tool to compare your custom mod and stock firmware is WinMerge http://winmerge.org/downloads/?lang=en
#
2019-04-05 21:53:33 +00:00
# Example for MK3: open git bash and change to your Firmware directory
2021-01-08 10:01:17 +00:00
# <username>@<machine name> MINGW64 /<drive>/path
2019-02-16 05:05:43 +00:00
# bash build.sh 1_75mm_MK3-EINSy10a-E3Dv6full
#
2019-04-05 21:53:33 +00:00
# Example for MK25: open git bash and change to your directory
2019-02-16 05:05:43 +00:00
# gussner@WIN01 MINGW64 /d/Data/Prusa-Firmware/MK3
# bash build.sh 1_75mm_MK25-RAMBo13a-E3Dv6full
#
# The compiled hex files can be found in the folder above like from the example
# gussner@WIN01 MINGW64 /d/Data/Prusa-Firmware
# FW351-Build1778-1_75mm_MK25-RAMBo13a-E3Dv6full.hex
#
2019-07-17 11:51:34 +00:00
# Why make Arduino IDE portable?
# To have a distinguished Prusa Firmware build environment I decided to use Arduino IDE in portable mode.
# - Changes made to other Arduino instances do not change anything in this build environment.
# By default Arduino IDE uses "users" and shared library folders which is useful as soon you update the Software.
# But in this case we need a stable and defined build environment, so keep it separated it kind of important.
# 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.
#
2022-07-12 06:48:22 +00:00
# Version: 2.0.2-Build_80
2019-02-16 05:05:43 +00:00
# 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'
2019-04-05 21:53:33 +00:00
# 16 Jan 2019, 3d-gussner, Build_2, Added development check to modify 'Configuration.h' to prevent unwanted LCD messages that Firmware is unknown
2019-07-17 11:51:34 +00:00
# 17 Jan 2019, 3d-gussner, Build_3, Check for OS Windows or Linux and use the right build environment
2019-02-16 05:05:43 +00:00
# 10 Feb 2019, ropaha, Pull Request, Select variant from list while using build.sh
# 10 Feb 2019, ropaha, change FW_DEV_VERSION automatically depending on FW_VERSION RC/BETA/ALPHA
2021-01-08 10:01:17 +00:00
# 10 Feb 2019, 3d-gussner, 1st tests with English only
# 10 Feb 2019, ropaha, added compiling of all variants and English only
2019-02-16 05:05:43 +00:00
# 10 Feb 2019, 3d-gussner, Set OUTPUT_FOLDER for hex files
# 11 Feb 2019, 3d-gussner/ropaha, Minor changes and fixes
# 11 Feb 2019, 3d-gussner, Ready for RC
# 12 Feb 2019, 3d-gussner, Check if wget and zip are installed. Thanks to Bernd to point it out
# 12 Feb 2019, 3d-gussner, Changed OS check to OSTYPE as it is not supported on Ubuntu
# Also added different BUILD_ENV folders depending on OS used so Windows
# Users can use git-bash AND Windows Linux Subsystems at the same time
# Cleanup compiler flags is only depends on OS version.
# 12 Feb 2019, 3d-gussner, Added additional OSTYPE check
# 15 feb 2019, 3d-gussner, Added zip files for miniRAMbo multi language hex files
# 15 Feb 2019, 3d-gussner, Added more checks if
# Compiled Hex-files
# Configuration_prusa.h
# language build files
# multi language firmware files exist and clean them up
2021-01-08 10:01:17 +00:00
# 15 Feb 2019, 3d-gussner, Fixed selection GOLD/UNKNOWN DEV_STATUS for ALL variants builds, so you have to choose only once
2019-02-16 05:05:43 +00:00
# 15 Feb 2019, 3d-gussner, Added some colored output
# 15 Feb 2019, 3d-gussner, troubleshooting and minor fixes
2019-02-16 07:04:45 +00:00
# 16 Feb 2019, 3d-gussner, Script can be run using arguments
# $1 = variant, example "1_75mm_MK3-EINSy10a-E3Dv6full.h" at this moment it is not possible to use ALL
2022-09-29 14:39:02 +00:00
# $2 = multi language OR English only [ALL/EN_FARM]
2019-02-16 07:04:45 +00:00
# $3 = development status [GOLD/RC/BETA/ALPHA/DEVEL/DEBUG]
# If one argument is wrong a list of valid one will be shown
2021-01-08 10:01:17 +00:00
# 13 Mar 2019, 3d-gussner, MKbel updated the Linux build environment to version 1.0.2 with an Fix maximum firmware flash size.
2019-03-13 20:01:56 +00:00
# So did I
2019-07-17 11:51:34 +00:00
# 11 Jul 2019, deliopoulos,Updated to v1.0.6 as Prusa needs a new board definition for Firmware 3.8.x86_64
2021-02-12 19:12:37 +00:00
# - Split the Download of Windows Arduino IDE 1.8.5 and Prusa specific part
2019-07-17 11:51:34 +00:00
# --> less download volume needed and saves some time
#
2021-01-08 10:01:17 +00:00
# 13 Jul 2019, deliopoulos,Splitting of Arduino IDE and Prusa parts also for Linux64
2019-07-17 11:51:34 +00:00
# 13 Jul 2019, 3d-gussner, Added Linux 32-bit version (untested yet)
# MacOS could be added in future if needs
# 14 Jul 2019, 3d-gussner, Update preferences and make it really portable
2021-01-08 10:01:17 +00:00
# 15 Jul 2019, 3d-gussner, New PF-build-env GitHub branch
# 16 Jul 2019, 3d-gussner, New Arduino_boards GitHub fork
2019-07-22 13:49:15 +00:00
# 17 Jul 2019, 3d-gussner, Final tests under Windows 10 and Linux Subsystem for Windows
# 18 Jul 2019, 3d-gussner, Added python check
# 18 Jul 2019, deliopoulos, No need more for changing 'platform.txt' file as it comes with the Arduino Boards.
# 18 Jul 2019, deliopoulos, Modified 'PF_BUILD_FILE_URL' to use 'BUILD_ENV' variable
2021-01-08 10:01:17 +00:00
# 22 Jul 2019, 3d-gussner, Modified checks to check folder and/or installation output exists.
2019-07-22 13:49:15 +00:00
# 22 Jul 2019, 3d-gussner, Added check if Arduino IDE 1.8.5 boards have been updated
# 22 Jul 2019, 3d-gussner, Changed exit numbers 1-13 for prepare build env 21-28 for prepare compiling 31-36 compiling
2021-01-08 10:01:17 +00:00
# 22 Jul 2019, 3d-gussner, Changed BOARD_URL to DRracers repository after he pulled my PR https://github.com/DRracer/Arduino_Boards/pull/1
2019-07-23 22:10:32 +00:00
# 23 Jul 2019, 3d-gussner, Changed Build-env path to "PF-build-dl" as requested in PR https://github.com/prusa3d/Prusa-Firmware/pull/2028
# Changed Hex-files folder to PF-build-hex as requested in PR
# 23 Jul 2019, 3d-gussner, Added Finding OS version routine so supporting new OS should get easier
2019-07-26 08:35:11 +00:00
# 26 Jul 2019, 3d-gussner, Change JSON repository to prusa3d after PR https://github.com/prusa3d/Arduino_Boards/pull/1 was merged
2021-01-08 10:01:17 +00:00
# 23 Sep 2019, 3d-gussner, Prepare PF-build.sh for coming Prusa3d/Arduino_Boards version 1.0.2 Pull Request
# 17 Oct 2019, 3d-gussner, Changed folder and check file names to have separated build environments depending on Arduino IDE version and
2019-12-15 16:27:15 +00:00
# board-versions.
# 15 Dec 2019, 3d-gussner, Prepare for switch to Prusa3d/PF-build-env repository
2021-01-08 10:01:17 +00:00
# 15 Dec 2019, 3d-gussner, Fix Arduino user preferences for the chosen board.
2019-12-17 13:05:39 +00:00
# 17 Dec 2019, 3d-gussner, Fix "timer0_fract = 0" warning by using Arduino_boards v1.0.3
2020-04-28 11:39:06 +00:00
# 28 Apr 2020, 3d-gussner, Added RC3 detection
2020-05-03 12:19:38 +00:00
# 03 May 2020, deliopoulos, Accept all RCx as RC versions
2020-05-06 08:54:16 +00:00
# 05 May 2020, 3d-gussner, Make a copy of `not_tran.txt`and `not_used.txt` as `not_tran_$VARIANT.txt`and `not_used_$VARIANT.txt`
2021-01-08 10:01:17 +00:00
# After compiling All multi-language variants it makes it easier to find missing or unused translations.
2020-05-12 20:23:40 +00:00
# 12 May 2020, DRracer , Cleanup double MK2/s MK25/s `not_tran` and `not_used` files
2020-05-13 18:51:13 +00:00
# 13 May 2020, leptun , If cleanup files do not exist don't try to.
2022-09-29 14:39:02 +00:00
# 01 Oct 2020, 3d-gussner, Bug fix if using argument EN_FARM. Thank to @leptun for pointing out.
2021-01-08 10:01:17 +00:00
# Change Build number to script commits 'git rev-list --count HEAD PF-build.sh'
2020-10-02 16:54:18 +00:00
# 02 Oct 2020, 3d-gussner, Add UNKNOWN as argument option
2020-10-05 11:18:18 +00:00
# 05 Oct 2020, 3d-gussner, Disable pause and warnings using command line with all needed arguments
# Install needed apps under linux if needed.
2020-10-05 13:25:54 +00:00
# Clean PF-Firmware build when changing git branch
2020-11-02 13:54:16 +00:00
# 02 Nov 2020, 3d-gussner, Check for "gawk" on Linux
# Add argument to change build number automatically to current commit or define own number
# Update exit numbers 1-13 for prepare build env 21-29 for prepare compiling 30-36 compiling
2021-01-08 10:37:47 +00:00
# 08 Jan 2021, 3d-gussner, Comment out 'sudo' auto installation
# Add '-?' '-h' help option
2021-01-27 11:43:41 +00:00
# 27 Jan 2021, 3d-gussner, Add `-c`, `-p` and `-n` options
2021-02-12 19:12:37 +00:00
# 12 Feb 2021, 3d-gussner, Add MK404-build.sh
# 13 Feb 2021, 3d-gussner, Indentations
2021-02-13 09:35:34 +00:00
# 13 Feb 2021, 3d-gussner, MK404 improvements like "flash" MK3, MK3S languages files to MK404 xflash.
2021-03-01 07:25:33 +00:00
# 27 Feb 2021, 3d-gussner, Add './lang-community.sh' and update exits
2021-05-03 06:24:02 +00:00
# 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
2021-05-03 18:01:48 +00:00
# 03 May 2021, 3d-gussner, Add SIM atmega404
2021-06-17 17:08:55 +00:00
# 17 Jun 2021, 3d-gussner, Update PF-build.sh to work after DRracer Remove FW version parsing PR
2021-06-17 18:59:35 +00:00
# 17 Jun 2021, 3d-gussner, Save ELF files for FW3.10.1 debugging PRs
# 17 Jun 2021, 3d-gussner, Add verbose_IDE to output more information during build
2021-06-17 19:02:46 +00:00
# 17 Jun 2021, 3d-gussner, Change version to v2.0.0
2021-06-18 11:46:25 +00:00
# 18 Jun 2021, 3d-gussner, Use atmega404 if extanded RAM or FLASH size are chosen
# 18 Jun 2021, 3d-gussner, Remove MK404 copy of lang file as it has been fixed in MK404
2021-06-21 07:16:19 +00:00
# 21 Jun 2021, 3d-gussner, Change atmega404 board flash argument to y
# Use newer version of MK404-build.sh instead start the program
2021-06-23 18:14:30 +00:00
# 22 Jun 2021, 3d-gussner, Added _RAM-<value> and _FLASH-<value> as OUTPUT_FILE_SUFFIX if someone builds an atmega404 firmware
# Added some logic if IDE 1.8.13 is used
# Added some logic if Arduino_boards 1.0.4 is used
# Fixed typo
# Restore original `Configuration.h` and `config.h` in case of cannceled script or failed compiling during next start of this script.
# use function
# 23 Jun 2021, 3d-gussner, Improve MK404 usage
2021-06-24 03:50:20 +00:00
# 24 Jun 2021, 3d-gussner, Fix MK404 user interaction not to show if compiling 'All' variants
2021-06-24 05:29:54 +00:00
# 24 Jun 2021, 3d-gussner, MK404 is only supported on Linux at this moment.
2022-01-03 11:19:58 +00:00
# 03 Jan 2022, 3d-gussner, Remove calling lang-community.sh as not needed anymore
2022-01-30 10:01:19 +00:00
# 21 Jan 2022, 3d-gussner, Sort variants
# Add Arduino 1.8.19 as an option
# 25 Jan 2022, 3d-gussner, Allow upper and lower case for MK404
2022-02-10 07:27:04 +00:00
# 09 Feb 2022, 3d-gussner, Add community language firmware files for MK2.5/S
# Add selection of language in MK404 for MK2.5/S
# 10 Feb 2022, 3d-gussner, Add SRCDIR for compatibility with build server
2022-02-13 08:52:04 +00:00
# 13 Feb 2022, leptun , Fix -o for "Restoring" messages after failure
2022-06-20 09:16:11 +00:00
# 24 Feb 2022, 3d-gussner, Change to Arduino IDE 1.8.19 and Arduino boards 1.0.5
2022-02-24 09:44:37 +00:00
# Fix DEV_STATUS to set correctly on RC/BETA/ALPHA/DEVEL
# Fix atmegaMK404 Board mem and flash modifications
2022-02-24 10:42:23 +00:00
# Limit atmegaMK404 boards mem to 8,16,32
2022-07-12 06:48:22 +00:00
# 20 Jun 2022, 3d-gussner, Change to Ardunio_boards v1.0.5-1
# 20 Jun 2022, wavexx , New PO-based language translation support
# 20 Jun 2022, 3d-gussner, fix Mk2.5/S zip after change PO-based language translation support
# 06 Jul 2022, 3d-gussner, Change to v1.0.8 and Ardunio_boards v1.0.5-2
# 06 Jul 2022, 3d-gussner, Fix branch check
# 12 Jul 2022, 3d-gussner, Check if FW_FLAVAVOR and FW_FLAVERSION are correct
2022-01-21 06:40:04 +00:00
2021-06-23 18:14:30 +00:00
SCRIPT_PATH = " $( cd " $( dirname " $0 " ) " ; pwd -P ) "
2022-02-10 07:27:04 +00:00
export SRCDIR = $SCRIPT_PATH
2020-11-02 13:54:16 +00:00
2021-06-23 18:14:30 +00:00
#### Start: Failures
failures( )
{
case " $1 " in
0) echo " $( tput setaf 2) PF-build.sh finished with success $( tput sgr0) " ; ;
1) echo " $( tput setaf 1) This script doesn't support your Operating system! $( tput sgr0) " ; exit 1 ; ;
4) echo " $( tput setaf 5) Follow the instructions above $( tput sgr0) " ; exit 4 ; ;
5) echo " $( tput setaf 5) Invalid argument $( tput sgr0) " ; exit 5 ; ;
8) echo " $( tput setaf 5) Failed to download $( tput sgr0) " ; exit 8 ; ;
9) echo " $( tput setaf 5) Failed to create folder $( tput sgr0) " ; exit 9 ; ;
10) echo " $( tput setaf 5) Failed to change folder $( tput sgr0) " ; exit 10 ; ;
11) echo " $( tput setaf 5) Failed to unzip $( tput sgr0) " ; exit 11 ; ;
12) echo " $( tput setaf 5) Failed to copy file $( tput sgr0) " ; exit 12 ; ;
13) echo " $( tput setaf 5) Failed to delete $( tput sgr0) " ; exit 13 ; ;
20) echo " $( tput setaf 2) Conditional stop initiated by user $( tput sgr0) " ; exit 20 ; ;
2022-02-13 08:52:04 +00:00
21) echo " $( tput setaf 1) PF-build.sh has been interrupted/failed. $( tput setaf 6) Restoring 'Configuration.h' $( tput sgr0) " ; if [ $OUTPUT = = "1" ] ; then sleep 5 ; fi ; ;
22) echo " $( tput setaf 1) PF-build.sh has been interrupted/failed. $( tput setaf 6) Restoring 'config.h' $( tput sgr0) " ; if [ $OUTPUT = = "1" ] ; then sleep 5 ; fi ; ;
2021-06-23 18:14:30 +00:00
24) echo " $( tput setaf 1) PF-build.sh stopped due to compiling errors! Try to restore modified files. $( tput sgr0) " ; check_script_failed_nr1 ; check_script_failed_nr2 ; cleanup_firmware ; exit 24 ; ;
25) echo " $( tput setaf 1) Failed to execute $( tput sgr0) " ; exit 25 ; ;
2022-07-12 06:48:22 +00:00
26) echo " $( tput setaf 1) FW_FLAVAVOR or FW_FLAVERSION commented out in 'Firmware/Configuration.h' $( tput sgr0) " ; check_script_failed_nr1 ; check_script_failed_nr2 ; cleanup_firmware ; exit 26 ; ;
2021-06-23 18:14:30 +00:00
esac
}
#### End: Failures
2021-07-29 08:57:05 +00:00
#### Start: Check for options/flags
##check_options()
##{
while getopts b:c:d:g:h:i:j:l:m:n:o:p:v:x:y:?h flag
do
case " ${ flag } " in
b) build_flag = ${ OPTARG } ; ;
c) clean_flag = ${ OPTARG } ; ;
d) devel_flag = ${ OPTARG } ; ;
g) mk404_graphics_flag = ${ OPTARG } ; ;
h) help_flag = 1; ;
i) IDE_flag = ${ OPTARG } ; ;
j) verbose_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 } ; ;
y) board_flash_flag = ${ OPTARG } ; ;
?) help_flag = 1; ;
esac
done
#
# '?' 'h' argument usage and help
if [ " $help_flag " = = "1" ] ; then
echo "***************************************"
2022-07-12 06:48:22 +00:00
echo "* PF-build.sh Version: 2.0.2-Build_80 *"
2021-07-29 08:57:05 +00:00
echo "***************************************"
echo "Arguments:"
echo " $( tput setaf 2) -b $( tput sgr0) Build/commit number "
echo " $( tput setaf 2) -c $( tput sgr0) Do not clean up lang build "
echo " $( tput setaf 2) -d $( tput sgr0) Devel build "
echo " $( tput setaf 2) -g $( tput sgr0) Start MK404 graphics "
echo " $( tput setaf 2) -i $( tput sgr0) Arduino IDE version "
echo " $( tput setaf 2) -j $( tput sgr0) Arduino IDE verbose output "
echo " $( tput setaf 2) -l $( tput sgr0) Languages "
echo " $( tput setaf 2) -m $( tput sgr0) Start MK404 sim "
echo " $( tput setaf 2) -n $( tput sgr0) New fresh build "
echo " $( tput setaf 2) -o $( tput sgr0) Output "
echo " $( tput setaf 2) -p $( tput sgr0) Keep Configuration_prusa.h "
echo " $( tput setaf 2) -v $( tput sgr0) Variant "
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) ./PF-build.sh $( tput sgr0) [-b] [-c] [-d] [-g] [-i] [-j] [-l] [-m] [-n] [-o] [-p ] -[v] [-x] [-y] [-h] [-?] "
echo
echo " -b : ' $( tput setaf 2) Auto $( tput sgr0) ' needs git or a number "
echo " -c : ' $( tput setaf 2) 0 $( tput sgr0) ' clean up, ' $( tput setaf 2) 1 $( tput sgr0) ' keep "
echo " -d : ' $( 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 " -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 "
2022-07-12 06:48:22 +00:00
echo " -i : ' $( tput setaf 2) 1.8.5 $( tput sgr0) ', ' $( tput setaf 2) 1.8.19 $( tput sgr0) ' "
2021-07-29 08:57:05 +00:00
echo " -j : ' $( tput setaf 2) 0 $( tput sgr0) ' no, ' $( tput setaf 2) 1 $( tput sgr0) ' yes "
2022-09-29 14:39:02 +00:00
echo " -l : ' $( tput setaf 2) ALL $( tput sgr0) ' for multi language or ' $( tput setaf 2) EN_FARM $( tput sgr0) ' for English only "
2021-07-29 08:57:05 +00:00
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 " -o : ' $( tput setaf 2) 1 $( tput sgr0) ' force or ' $( tput setaf 2) 0 $( tput sgr0) ' block output and delays "
echo " -p : ' $( tput setaf 2) 0 $( tput sgr0) ' no, ' $( tput setaf 2) 1 $( tput sgr0) ' yes "
echo " -v : ' $( tput setaf 2) All $( tput sgr0) ' or variant file name "
2022-02-24 10:42:23 +00:00
echo " -x : ' $( tput setaf 2) 8 $( tput sgr0) ',' $( tput setaf 2) 16 $( tput sgr0) 'or' $( tput setaf 2) 32 $( tput sgr0) ' Kb. "
2021-07-29 08:57:05 +00:00
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) ./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 verbose_IDE is selected with argument '-j'
if [ ! -z " $verbose_IDE_flag " ] ; then
if [ $verbose_IDE_flag = = "1" ] ; then
verbose_IDE = "1"
elif [ $verbose_IDE_flag = = "0" ] ; then
verbose_IDE = "0"
else
echo "Only '0' and '1' are valid verbose_IDE values."
failures 5
fi
else
verbose_IDE = "0"
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) "
OUTPUT_FILENAME_SUFFIX = " ${ OUTPUT_FILENAME_SUFFIX } _FLASH- $board_flash_flag "
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) "
OUTPUT_FILENAME_SUFFIX = " ${ OUTPUT_FILENAME_SUFFIX } _FLASH- $board_flash_flag "
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) "
OUTPUT_FILENAME_SUFFIX = " ${ OUTPUT_FILENAME_SUFFIX } _FLASH- $board_flash_flag "
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) "
OUTPUT_FILENAME_SUFFIX = " ${ OUTPUT_FILENAME_SUFFIX } _FLASH- $board_flash_flag "
else
echo "Unsupported board flash size chosen. Only '256', '384', '512', '1024' and '32M' are allowed."
failures 5
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 " = = "16" ] ; then
BOARD_MEM = "0x3DFF"
echo " Board mem size : $board_mem_flag Kb, $BOARD_MEM (hex) "
OUTPUT_FILENAME_SUFFIX = " ${ OUTPUT_FILENAME_SUFFIX } _RAM- $board_mem_flag "
elif [ " $board_mem_flag " = = "32" ] ; then
BOARD_MEM = "0x7DFF"
echo " Board mem size : $board_mem_flag Kb, $BOARD_MEM (hex) "
OUTPUT_FILENAME_SUFFIX = " ${ OUTPUT_FILENAME_SUFFIX } _RAM- $board_mem_flag "
else
2022-02-24 10:42:23 +00:00
echo "Unsupported board mem size chosen. Only '8', '16' and '32' are allowed."
2021-07-29 08:57:05 +00:00
failures 5
fi
fi
#Start: Check if Arduino IDE version is correct
if [ ! -z " $IDE_flag " ] ; then
2022-07-12 06:48:22 +00:00
if [ [ " $IDE_flag " = = "1.8.5" || " $IDE_flag " = = "1.8.19" ] ] ; then
2021-07-29 08:57:05 +00:00
ARDUINO_ENV = " ${ IDE_flag } "
else
2022-02-24 09:44:37 +00:00
ARDUINO_ENV = "1.8.19"
2021-07-29 08:57:05 +00:00
fi
else
2022-02-24 09:44:37 +00:00
ARDUINO_ENV = "1.8.19"
2021-07-29 08:57:05 +00:00
fi
#End: Check if Arduino IDE version is correct
#Start: Check if Output is selecetd via argument '-o'
if [ [ -z " $output_flag " || " $output_flag " = = 1 ] ] ; then
OUTPUT = 1
else
OUTPUT = 0
fi
#End: Check if Output is selecetd via argument '-o'
##}
#### End: Check for options/flags
2021-06-23 18:14:30 +00:00
#### Start: Make backup of Configuration.h
make_backup1( )
{
if [ ! -f " $SCRIPT_PATH /Firmware/Configuration.tmp " ] ; then
cp -f $SCRIPT_PATH /Firmware/Configuration.h $SCRIPT_PATH /Firmware/Configuration.tmp
fi
}
#### End: Make backup of Configuration.h
#### Start: Make backup of config.h
make_backup2( )
{
if [ ! -f " $SCRIPT_PATH /Firmware/config.tmp " ] ; then
cp -f $SCRIPT_PATH /Firmware/config.h $SCRIPT_PATH /Firmware/config.tmp
fi
}
#### End: Make backup of config.h
#### Start: Check Check if script has been canceled or failed nr1.
check_script_failed_nr1( )
{
#Check for "Configuration.tmp"
if [ -f " $SCRIPT_PATH /Firmware/Configuration.tmp " ] ; then
cp -f $SCRIPT_PATH /Firmware/Configuration.tmp $SCRIPT_PATH /Firmware/Configuration.h
#echo "Found Configuration.tmp restore Configuration.h"
failures 21
fi
}
#### End: Check Check if script has been canceled or failed nr1.
#### Start: Check if script has been canceled or failed nr2.
check_script_failed_nr2( )
{
#Check for "config.tmp"
#echo "No config.tmp"
if [ -f " $SCRIPT_PATH /Firmware/config.tmp " ] ; then
cp -f $SCRIPT_PATH /Firmware/config.tmp $SCRIPT_PATH /Firmware/config.h
#echo "Found config.tmp restore config.h"
failures 22
fi
}
#### End: Check if script has been canceled or failed nr2.
#### Start: Check if OSTYPE is supported
check_OS( )
{
2019-07-23 22:10:32 +00:00
OS_FOUND = $( command -v uname)
case $( " ${ OS_FOUND } " | tr '[:upper:]' '[:lower:]' ) in
linux*)
TARGET_OS = "linux"
; ;
msys*| cygwin*| mingw*)
# or possible 'bash on windows'
TARGET_OS = 'windows'
; ;
nt| win*)
TARGET_OS = 'windows'
; ;
*)
TARGET_OS = 'unknown'
; ;
esac
2019-07-17 11:51:34 +00:00
# Windows
2019-07-23 22:10:32 +00:00
if [ $TARGET_OS = = "windows" ] ; then
2021-02-12 19:12:37 +00:00
if [ $( uname -m) = = "x86_64" ] ; then
echo " $( tput setaf 2) Windows 64-bit found $( tput sgr0) "
Processor = "64"
elif [ $( uname -m) = = "i386" ] ; then
echo " $( tput setaf 2) Windows 32-bit found $( tput sgr0) "
Processor = "32"
else
echo " $( tput setaf 1) Unsupported OS: Windows $( uname -m) "
2021-06-23 18:14:30 +00:00
failures 1
2021-02-12 19:12:37 +00:00
fi
2019-07-24 11:14:59 +00:00
# Linux
2019-07-23 22:10:32 +00:00
elif [ $TARGET_OS = = "linux" ] ; then
2021-02-12 19:12:37 +00:00
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) "
2021-06-23 18:14:30 +00:00
failures 1
2021-02-12 19:12:37 +00:00
fi
2019-02-16 05:05:43 +00:00
else
2021-06-23 18:14:30 +00:00
#echo "$(tput setaf 1)This script doesn't support your Operating system!"
#echo "Please use Linux 64-bit or Windows 10 64-bit with Linux subsystem / git-bash"
#echo "Read the notes of build.sh$(tput sgr0)"
failures 1
fi
if [ $OUTPUT = = "1" ] ; then
sleep 2
2019-02-16 05:05:43 +00:00
fi
2021-06-23 18:14:30 +00:00
}
#### End: Check if OSTYPE is supported
2019-07-17 11:51:34 +00:00
2021-06-23 18:14:30 +00:00
#### Start: Prepare bash environment and check if wget, zip and other needed things are available
# Start: Check wget
check_wget( )
{
2019-02-16 05:05:43 +00:00
if ! type wget > /dev/null; then
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 1) Missing 'wget' which is important to run this script "
echo " Please follow these instructions https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058 to install wget $( tput sgr0) "
2021-06-23 18:14:30 +00:00
failures 4
2019-02-16 05:05:43 +00:00
fi
2021-06-23 18:14:30 +00:00
}
# End: Check wget
2019-07-17 11:51:34 +00:00
2021-06-23 18:14:30 +00:00
# Start: Check for zip
check_zip( )
{
2019-02-16 05:05:43 +00:00
if ! type zip > /dev/null; then
2021-02-12 19:12:37 +00:00
if [ $TARGET_OS = = "windows" ] ; then
echo " $( tput setaf 1) Missing 'zip' which is important to run this script "
echo "Download and install 7z-zip from its official website https://www.7-zip.org/"
echo "By default, it is installed under the directory /c/Program Files/7-Zip in Windows 10 as my case."
echo "Run git Bash under Administrator privilege and"
echo "navigate to the directory /c/Program Files/Git/mingw64/bin,"
echo " you can run the command $( tput setaf 2) ln -s /c/Program Files/7-Zip/7z.exe zip.exe $( tput sgr0) "
2021-06-23 18:14:30 +00:00
failures 4
2021-02-12 19:12:37 +00:00
elif [ $TARGET_OS = = "linux" ] ; then
echo " $( tput setaf 1) Missing 'zip' which is important to run this script "
echo " install it with the command $( tput setaf 2) 'sudo apt-get install zip' $( tput sgr0) "
2021-06-23 18:14:30 +00:00
failures 4
2021-02-12 19:12:37 +00:00
fi
2019-02-16 05:05:43 +00:00
fi
2021-06-23 18:14:30 +00:00
}
# End: Check for zip
# Start: Check python ... needed during language build
check_python( )
{
2019-07-22 13:49:15 +00:00
if ! type python > /dev/null; then
2021-02-12 19:12:37 +00:00
if [ $TARGET_OS = = "windows" ] ; then
echo " $( tput setaf 1) Missing 'python3' which is important to run this script "
2021-06-23 18:14:30 +00:00
failures 4
2021-02-12 19:12:37 +00:00
elif [ $TARGET_OS = = "linux" ] ; then
echo " $( tput setaf 1) Missing 'python' which is important to run this script "
echo "As Python 2.x will not be maintained from 2020 please,"
echo " install it with the command $( tput setaf 2) 'sudo apt-get install python3'. "
echo "Check which version of Python3 has been installed using 'ls /usr/bin/python3*'"
echo " Use 'sudo ln -sf /usr/bin/python3.x /usr/bin/python' (where 'x' is your version number) to make it default. $( tput sgr0) "
#sudo apt-get update && apt-get install python3 && ln -sf /usr/bin/python3 /usr/bin/python
2021-06-23 18:14:30 +00:00
failures 4
2021-02-12 19:12:37 +00:00
fi
2019-07-22 13:49:15 +00:00
fi
2021-06-23 18:14:30 +00:00
}
# End: Check python ... needed during language build
2019-07-17 11:51:34 +00:00
2020-11-02 13:54:16 +00:00
2021-06-23 18:14:30 +00:00
#### Start: Set build environment
set_build_env_variables( )
{
2022-07-12 06:48:22 +00:00
BUILD_ENV = "1.0.8"
2019-11-29 21:35:07 +00:00
BOARD = "prusa_einsy_rambo"
2019-12-17 13:05:39 +00:00
BOARD_PACKAGE_NAME = "PrusaResearch"
2022-02-24 09:44:37 +00:00
if [ " $ARDUINO_ENV " = = "1.8.19" ] ; then
2022-10-03 14:27:29 +00:00
BOARD_VERSION = "1.0.6"
2021-06-22 07:20:48 +00:00
else
2021-08-02 06:34:35 +00:00
BOARD_VERSION = "1.0.4"
2021-06-22 07:20:48 +00:00
fi
2022-02-24 09:44:37 +00:00
if [ " $ARDUINO_ENV " = = "1.8.19" ] ; then
2022-10-03 14:27:29 +00:00
BOARD_URL = "https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/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"
2022-02-24 09:44:37 +00:00
else
BOARD_URL = "https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/package_prusa3d_index.json"
fi
2019-11-29 21:35:07 +00:00
BOARD_FILENAME = "prusa3dboards"
2022-02-24 09:44:37 +00:00
if [ " $ARDUINO_ENV " = = "1.8.19" ] ; then
2022-10-03 14:27:29 +00:00
BOARD_FILE_URL = " https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards- $BOARD_VERSION .tar.bz2 "
#BOARD_FILE_URL="https://raw.githubusercontent.com/3d-gussner/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards-$BOARD_VERSION.tar.bz2"
2022-02-24 09:44:37 +00:00
else
BOARD_FILE_URL = " https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards- $BOARD_VERSION .tar.bz2 "
fi
2019-12-17 13:05:39 +00:00
#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"
2021-06-22 07:20:48 +00:00
if [ [ " $BOARD_VERSION " = = "1.0.3" || " $BOARD_VERSION " = = "1.0.2" || " $BOARD_VERSION " = = "1.0.1" ] ] ; then
PF_BUILD_FILE_URL = " https://github.com/prusa3d/PF-build-env/releases/download/ $BUILD_ENV -WinLin/PF-build-env-WinLin- $BUILD_ENV .zip "
fi
2019-07-17 11:51:34 +00:00
LIB = "PrusaLibrary"
2021-06-23 18:14:30 +00:00
}
#### End: Set build environment
2019-02-16 05:05:43 +00:00
2021-06-23 18:14:30 +00:00
#### Start: List few useful data
output_useful_data( )
{
2019-02-16 05:05:43 +00:00
echo
2019-07-17 11:51:34 +00:00
echo "Script path :" $SCRIPT_PATH
echo "OS :" $OS
2019-07-23 22:10:32 +00:00
echo "OS type :" $TARGET_OS
2019-07-17 11:51:34 +00:00
echo ""
2021-01-08 10:01:17 +00:00
echo "Arduino IDE :" $ARDUINO_ENV
2019-07-17 11:51:34 +00:00
echo "Build env :" $BUILD_ENV
echo "Board :" $BOARD
2021-04-18 18:28:08 +00:00
if [ ! -z " $BOARD_FLASH " ] ; then
echo "Board flash :" $BOARD_FLASH
fi
if [ ! -z " $BOARD_MEM " ] ; then
echo "Board mem :" $BOARD_MEM
fi
2019-09-23 17:22:45 +00:00
echo "Package name:" $BOARD_PACKAGE_NAME
2019-12-17 13:05:39 +00:00
echo "Board v. :" $BOARD_VERSION
2019-07-17 11:51:34 +00:00
echo "Specific Lib:" $LIB
2019-02-16 05:05:43 +00:00
echo ""
2021-06-23 18:14:30 +00:00
}
#### End: List few useful data
2019-02-16 05:05:43 +00:00
2021-06-23 18:14:30 +00:00
#### Start: Prepare building environment
2019-02-16 05:05:43 +00:00
2021-06-23 18:14:30 +00:00
# Start: Check if build exists and creates it if not
check_create_build_folders( )
{
2019-07-23 22:10:32 +00:00
if [ ! -d "../PF-build-dl" ] ; then
2021-06-23 18:14:30 +00:00
mkdir ../PF-build-dl || failures 9
2019-02-16 05:05:43 +00:00
fi
2021-06-23 18:14:30 +00:00
cd ../PF-build-dl || failures 10
2019-07-17 11:51:34 +00:00
BUILD_ENV_PATH = " $( cd " $( dirname " $0 " ) " ; pwd -P ) "
2019-02-16 05:05:43 +00:00
# Check if PF-build-env-<version> exists and downloads + creates it if not
2019-07-18 05:17:35 +00:00
# The build environment is based on the supported Arduino IDE portable version with some changes
2019-02-16 05:05:43 +00:00
if [ ! -d " ../PF-build-env- $BUILD_ENV " ] ; then
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 6) PF-build-env- $BUILD_ENV is missing ... creating it now for you $( tput sgr 0) "
mkdir ../PF-build-env-$BUILD_ENV
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
2019-02-16 05:05:43 +00:00
fi
2021-06-23 18:14:30 +00:00
}
# End: Check if build exists and creates it if not
2019-02-16 05:05:43 +00:00
2021-06-23 18:14:30 +00:00
# Start: Download and extract supported Arduino IDE depending on OS
download_prepare_arduinoIDE( )
{
2019-07-17 11:51:34 +00:00
# Windows
2019-07-23 22:10:32 +00:00
if [ $TARGET_OS = = "windows" ] ; then
2021-04-29 17:23:52 +00:00
if [ ! -f " arduino- $ARDUINO_ENV -windows.zip " ] ; then
echo " $( tput setaf 6) Downloading Windows 32/64-bit Arduino IDE portable... $( tput setaf 2) "
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
wget https://downloads.arduino.cc/arduino-$ARDUINO_ENV -windows.zip || failures 8
2021-04-29 17:23:52 +00:00
echo " $( tput sgr 0) "
fi
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) "
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
unzip arduino-$ARDUINO_ENV -windows.zip -d ../PF-build-env-$BUILD_ENV || failures 11
2021-04-29 17:23:52 +00:00
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 " $( tput sgr0) "
fi
2019-02-16 05:05:43 +00:00
fi
2019-07-17 11:51:34 +00:00
# Linux
2019-07-23 22:10:32 +00:00
if [ $TARGET_OS = = "linux" ] ; then
2019-07-17 11:51:34 +00:00
# 32 or 64 bit version
2021-02-12 19:12:37 +00:00
if [ ! -f " arduino- $ARDUINO_ENV -linux $Processor .tar.xz " ] ; then
echo " $( tput setaf 6) Downloading Linux $Processor Arduino IDE portable... $( tput setaf 2) "
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
wget --no-check-certificate https://downloads.arduino.cc/arduino-$ARDUINO_ENV -linux$Processor .tar.xz || failures 8
2021-02-12 19:12:37 +00:00
echo " $( tput sgr 0) "
fi
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) "
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
tar -xvf arduino-$ARDUINO_ENV -linux$Processor .tar.xz -C ../PF-build-env-$BUILD_ENV / || failures 11
2021-02-12 19:12:37 +00:00
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 " $( tput sgr0) "
fi
2019-02-16 05:05:43 +00:00
fi
2021-06-23 18:14:30 +00:00
}
# End: Download and extract supported Arduino IDE depending on OS
# Start: Make Arduino IDE portable
portable_ArduinoIDE( )
{
2019-10-17 12:05:51 +00:00
if [ ! -d ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor / ] ; then
2021-02-12 19:12:37 +00:00
mkdir ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /
2019-07-23 22:10:32 +00:00
fi
2019-10-17 12:05:51 +00:00
if [ ! -d ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/ ] ; then
2021-02-12 19:12:37 +00:00
mkdir ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable
2019-07-17 11:51:34 +00:00
fi
2019-10-17 12:05:51 +00:00
if [ ! -d ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/output/ ] ; then
2021-02-12 19:12:37 +00:00
mkdir ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/output
2019-07-17 11:51:34 +00:00
fi
2019-10-17 12:05:51 +00:00
if [ ! -d ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/packages/ ] ; then
2021-02-12 19:12:37 +00:00
mkdir ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/packages
2019-07-17 11:51:34 +00:00
fi
2019-10-17 12:05:51 +00:00
if [ ! -d ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/sketchbook/ ] ; then
2021-02-12 19:12:37 +00:00
mkdir ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/sketchbook
2019-07-17 11:51:34 +00:00
fi
2019-10-17 12:05:51 +00:00
if [ ! -d ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/sketchbook/libraries/ ] ; then
2021-02-12 19:12:37 +00:00
mkdir ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/sketchbook/libraries
2019-07-17 11:51:34 +00:00
fi
2019-10-17 12:05:51 +00:00
if [ ! -d ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/staging/ ] ; then
2021-02-12 19:12:37 +00:00
mkdir ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/staging
2019-07-17 11:51:34 +00:00
fi
2021-06-23 18:14:30 +00:00
}
# End: Make Arduino IDE portable
2019-07-17 11:51:34 +00:00
2021-06-23 18:14:30 +00:00
# Start: Change Arduino IDE preferences
change_ArduinoIDEpreferances( )
{
2019-10-17 12:05:51 +00:00
if [ ! -e ../PF-build-env-$BUILD_ENV /Preferences-$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor .txt ] ; then
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 6) Setting $ARDUINO_ENV - $BOARD_VERSION - $TARGET_OS - $Processor Arduino IDE preferences for portable GUI usage... $( tput setaf 2) "
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
2021-02-12 19:12:37 +00:00
echo "update.check"
sed -i 's/update.check = true/update.check = false/g' ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /lib/preferences.txt
echo "board"
sed -i " s/board = uno/board = $BOARD /g " ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /lib/preferences.txt
echo "editor.linenumbers"
sed -i 's/editor.linenumbers = false/editor.linenumbers = true/g' ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /lib/preferences.txt
echo "boardsmanager.additional.urls"
echo " boardsmanager.additional.urls= $BOARD_URL " >>../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /lib/preferences.txt
echo "build.verbose=true" >>../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /lib/preferences.txt
echo "compiler.cache_core=false" >>../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /lib/preferences.txt
echo "compiler.warning_level=all" >>../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /lib/preferences.txt
echo " # Preferences- $ARDUINO_ENV - $BOARD_VERSION - $TARGET_OS - $Processor " >> ../PF-build-env-$BUILD_ENV /Preferences-$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor .txt
echo " $( tput sgr0) "
2019-07-17 11:51:34 +00:00
fi
2021-06-23 18:14:30 +00:00
}
# End: Change Arduino IDE preferences
2019-07-17 11:51:34 +00:00
2021-06-23 18:14:30 +00:00
# Start: Download and extract Prusa Firmware related parts
download_prepare_Prusa_build_files( )
{
2019-07-17 11:51:34 +00:00
# Download and extract PrusaResearchRambo board
if [ ! -f " $BOARD_FILENAME - $BOARD_VERSION .tar.bz2 " ] ; then
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 6) Downloading Prusa Research AVR MK3 RAMBo EINSy build environment... $( tput setaf 2) "
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
wget $BOARD_FILE_URL || failures 8
2019-07-17 11:51:34 +00:00
fi
2019-10-17 12:05:51 +00:00
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
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 6) Unzipping $BOARD_PACKAGE_NAME Arduino IDE portable... $( tput setaf 2) "
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
tar -xvf $BOARD_FILENAME -$BOARD_VERSION .tar.bz2 -C ../PF-build-env-$BUILD_ENV / || failures 11
2021-02-12 19:12:37 +00:00
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
fi
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
fi
if [ ! -d ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/packages/$BOARD_PACKAGE_NAME /hardware ] ; then
mkdir ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/packages/$BOARD_PACKAGE_NAME /hardware
fi
if [ ! -d ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/packages/$BOARD_PACKAGE_NAME /hardware/avr ] ; then
mkdir ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/packages/$BOARD_PACKAGE_NAME /hardware/avr
fi
mv ../PF-build-env-$BUILD_ENV /$BOARD_FILENAME -$BOARD_VERSION ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/packages/$BOARD_PACKAGE_NAME /hardware/avr/$BOARD_VERSION
echo " # $BOARD_FILENAME - $BOARD_VERSION " >> ../PF-build-env-$BUILD_ENV /$BOARD_FILENAME -$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor .txt
echo " $( tput sgr 0) "
fi
2019-07-17 11:51:34 +00:00
# Download and extract Prusa Firmware specific library files
2021-06-22 07:20:48 +00:00
if [ [ " $BOARD_VERSION " = = "1.0.3" || " $BOARD_VERSION " = = "1.0.2" || " $BOARD_VERSION " = = "1.0.1" ] ] ; then
if [ ! -f " PF-build-env-WinLin- $BUILD_ENV .zip " ] ; then
echo " $( tput setaf 6) Downloading Prusa Firmware build environment... $( tput setaf 2) "
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
wget $PF_BUILD_FILE_URL || failures 8
2021-06-22 07:20:48 +00:00
echo " $( tput sgr 0) "
fi
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) "
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
unzip -o PF-build-env-WinLin-$BUILD_ENV .zip -d ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor || failures 11
2021-06-22 07:20:48 +00:00
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) "
fi
2019-07-17 11:51:34 +00:00
fi
2021-06-23 18:14:30 +00:00
}
# End: Download and extract Prusa Firmware related parts
2019-07-22 13:49:15 +00:00
2021-06-23 18:14:30 +00:00
# Start: Check if User updated Arduino IDE 1.8.5 boardsmanager and tools
check_ArduinoIDE_User_interaction( )
{
2019-10-17 12:05:51 +00:00
if [ -d " ../PF-build-env- $BUILD_ENV / $ARDUINO_ENV - $BOARD_VERSION - $TARGET_OS - $Processor /portable/packages/arduino/tools " ] ; then
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 6) Arduino IDE boards / tools have been manually updated... $"
echo "Please don't update the 'Arduino AVR boards' as this will prevent running this script (tput setaf 2)"
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
2021-02-12 19:12:37 +00:00
fi
2019-10-17 12:05:51 +00:00
if [ -d " ../PF-build-env- $BUILD_ENV / $ARDUINO_ENV - $BOARD_VERSION - $TARGET_OS - $Processor /portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2 " ] ; then
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 6) PrusaReasearch compatible tools have been manually updated... $( tput setaf 2) "
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 6) Copying Prusa Firmware build environment to manually updated boards / tools... $( tput setaf 2) "
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
2021-02-12 19:12:37 +00:00
cp -f ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /hardware/tools/avr/avr/lib/ldscripts/avr6.xn ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor /portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2/avr/lib/ldscripts/avr6.xn
echo " # PF-build-env-portable- $ARDUINO_ENV - $BOARD_VERSION - $TARGET_OS - $Processor - $BUILD_ENV " >> ../PF-build-env-$BUILD_ENV /PF-build-env-portable-$BUILD_ENV -$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor .txt
echo " $( tput sgr0) "
fi
2019-10-17 12:05:51 +00:00
if [ -d " ../PF-build-env- $BUILD_ENV / $ARDUINO_ENV - $BOARD_VERSION - $TARGET_OS - $Processor /portable/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2 " ] ; then
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 1) Arduino IDE tools have been updated manually to a non supported version!!! "
echo " Delete ../PF-build-env- $BUILD_ENV and start the script again "
echo " Script will not continue until this have been fixed $( tput setaf 2) "
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
2021-02-12 19:12:37 +00:00
echo " $( tput sgr0) "
2021-06-23 18:14:30 +00:00
failures 4
2019-07-22 13:49:15 +00:00
fi
2021-06-23 18:14:30 +00:00
}
# End: Check if User updated Arduino IDE 1.8.5 boardsmanager and tools
#
#### End: prepare bash / Linux environment
2019-07-17 11:51:34 +00:00
#### End prepare building
2021-06-23 18:14:30 +00:00
#### Start: Getting arguments for command line compiling
get_arguments( )
{
2019-02-16 05:05:43 +00:00
2021-01-08 10:01:17 +00:00
# Check if git is available
2020-11-02 13:54:16 +00:00
if type git > /dev/null; then
2021-02-12 19:12:37 +00:00
git_available = "1"
fi
2020-11-02 13:54:16 +00:00
#
# '-v' argument defines which variant of the Prusa Firmware will be compiled
if [ -z " $variant_flag " ] ; then
2021-02-12 19:12:37 +00:00
# Select which variant of the Prusa Firmware will be compiled, like
PS3 = "Select a variant: "
while IFS = read -r -d $'\0' f; do
options[ i++] = " $f "
done < <( find Firmware/variants/ -maxdepth 1 -type f -name "*.h" -print0 )
2022-01-30 10:01:19 +00:00
IFS = $'\n' sorted = ( $( sort -n <<< " ${ options [*] } " ) ) ; unset IFS
select opt in " ${ sorted [@] } " "All" "Quit" ; do
2021-02-12 19:12:37 +00:00
case $opt in
*.h)
VARIANT = $( basename " $opt " ".h" )
VARIANTS[ i++] = " $opt "
break
; ;
"All" )
VARIANT = "All"
VARIANTS = ${ options [*] }
2021-06-24 03:50:20 +00:00
variant_flag = "All"
2021-02-12 19:12:37 +00:00
break
; ;
"Quit" )
echo "You chose to stop"
2021-06-23 18:14:30 +00:00
failures 20
; ;
2021-02-12 19:12:37 +00:00
*)
echo " $( tput setaf 1) This is not a valid variant $( tput sgr0) "
; ;
esac
done
2019-02-16 05:05:43 +00:00
else
2021-02-12 19:12:37 +00:00
if [ -f " $SCRIPT_PATH /Firmware/variants/ $variant_flag " ] ; then
VARIANTS = $variant_flag
elif [ " $variant_flag " = = "All" ] ; then
while IFS = read -r -d $'\0' f; do
options[ i++] = " $f "
done < <( find Firmware/variants/ -maxdepth 1 -type f -name "*.h" -print0 )
VARIANT = "All"
VARIANTS = ${ options [*] }
else
echo " $( tput setaf 1) Argument $variant_flag could not be found in Firmware/variants please choose a valid one. $( tput sgr0) "
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
echo " $( tput sgr0) "
2021-06-23 18:14:30 +00:00
failures 4
2021-02-12 19:12:37 +00:00
fi
2019-02-16 05:05:43 +00:00
fi
2022-09-29 14:39:02 +00:00
#'-l' argument defines if it is an English only version. Known values EN_FARM / ALL
2019-02-16 05:05:43 +00:00
#Check default language mode
MULTI_LANGUAGE_CHECK = $( grep --max-count= 1 "^#define LANG_MODE *" $SCRIPT_PATH /Firmware/config.h| sed -e's/ */ /g' | cut -d ' ' -f3)
2020-11-02 13:54:16 +00:00
if [ -z " $language_flag " ] ; then
2021-02-12 19:12:37 +00:00
PS3 = "Select a language: "
echo
echo "Which lang-build do you want?"
select yn in "Multi languages" "English only" ; do
case $yn in
"Multi languages" )
LANGUAGES = "ALL"
break
; ;
"English only" )
2022-09-29 14:39:02 +00:00
LANGUAGES = "EN_FARM"
2021-02-12 19:12:37 +00:00
break
; ;
*)
echo " $( tput setaf 1) This is not a valid language $( tput sgr0) "
; ;
esac
done
2019-02-16 05:05:43 +00:00
else
2022-09-29 14:39:02 +00:00
if [ [ " $language_flag " = = "ALL" || " $language_flag " = = "EN_FARM" ] ] ; then
2021-02-12 19:12:37 +00:00
LANGUAGES = $language_flag
else
echo " $( tput setaf 1) Language argument is wrong! $( tput sgr0) "
2022-09-29 14:39:02 +00:00
echo " Only $( tput setaf 2) 'ALL' $( tput sgr0) or $( tput setaf 2) 'EN_FARM' $( tput sgr0) are allowed as language '-l' argument! "
2021-06-23 18:14:30 +00:00
failures 5
2021-02-12 19:12:37 +00:00
fi
2019-02-16 07:04:45 +00:00
fi
2020-11-02 13:54:16 +00:00
#Check if DEV_STATUS is selected via argument '-d'
if [ ! -z " $devel_flag " ] ; then
2021-02-12 19:12:37 +00:00
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
2021-05-03 12:11:03 +00:00
elif [ [ " $devel_flag " = = "atmega404" || " $devel_flag " = = "atmega404_no_bootloader" ] ] ; then
MK404_DEBUG = $devel_flag
2021-02-12 19:12:37 +00:00
else
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) "
2021-06-23 18:14:30 +00:00
failures 5
2021-02-12 19:12:37 +00:00
fi
2019-02-16 05:05:43 +00:00
fi
2020-11-02 13:54:16 +00:00
#Check if Build is selected via argument '-b'
if [ ! -z " $build_flag " ] ; then
2021-02-12 19:12:37 +00:00
if [ [ " $build_flag " = = "Auto" && " $git_available " = = "1" ] ] ; then
BUILD = $( git rev-list --count HEAD)
elif [ [ $build_flag = ~ ^[ 0-9] +$ ] ] ; then
BUILD = $build_flag
else
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) "
2021-06-23 18:14:30 +00:00
failures 5
2021-02-12 19:12:37 +00:00
fi
2020-11-02 13:54:16 +00:00
fi
2020-10-05 13:25:54 +00:00
#Check git branch has changed
2021-01-08 10:01:17 +00:00
if [ ! -z "git_available" ] ; then
2021-02-12 19:12:37 +00:00
BRANCH = $( git branch --show-current)
echo "Current branch is:" $BRANCH
if [ ! -f " $SCRIPT_PATH /../PF-build.branch " ] ; then
2022-07-12 06:48:22 +00:00
#echo "$BRANCH" >| $SCRIPT_PATH/../PF-build.branch
2021-02-12 19:12:37 +00:00
echo "created PF-build.branch file"
else
PRE_BRANCH = $( cat " $SCRIPT_PATH /../PF-build.branch " )
2022-07-12 06:48:22 +00:00
#echo "Previous branch was:" $PRE_BRANCH
2021-02-12 19:12:37 +00:00
if [ ! " $BRANCH " = = " $PRE_BRANCH " ] ; then
CLEAN_PF_FW_BUILD = 1
echo " $BRANCH " >| $SCRIPT_PATH /../PF-build.branch
fi
fi
2022-07-12 06:48:22 +00:00
else
BRANCH = ""
CLEAN_PF_FW_BUILD = 0
2020-10-05 13:25:54 +00:00
fi
2021-06-23 18:14:30 +00:00
}
#### End: Getting arguments for command line compiling
2020-10-05 13:25:54 +00:00
2021-06-23 18:14:30 +00:00
#### Start: Set needed Paths
set_paths( )
{
cd ../PF-build-env-$BUILD_ENV /$ARDUINO_ENV -$BOARD_VERSION -$TARGET_OS -$Processor || failures 10
2019-02-16 05:05:43 +00:00
BUILD_ENV_PATH = " $( pwd -P ) "
cd ../..
2019-04-05 21:53:33 +00:00
#Checkif BUILD_PATH exists and if not creates it
2019-02-16 05:05:43 +00:00
if [ ! -d "Prusa-Firmware-build" ] ; then
2021-06-23 18:14:30 +00:00
mkdir Prusa-Firmware-build || failures 9
2019-02-16 05:05:43 +00:00
fi
#Set the BUILD_PATH for Arduino IDE
2021-06-23 18:14:30 +00:00
cd Prusa-Firmware-build || failures 10
2019-02-16 05:05:43 +00:00
BUILD_PATH = " $( pwd -P ) "
2021-06-23 18:14:30 +00:00
}
#### End: Set needed Paths
2019-02-16 05:05:43 +00:00
2021-06-23 18:14:30 +00:00
#### Start: Check git branch has changed
check_branch_changed( )
{
2020-10-05 13:25:54 +00:00
if [ " $CLEAN_PF_FW_BUILD " = = "1" ] ; then
2021-02-12 19:12:37 +00:00
read -t 10 -p "Branch changed, cleaning Prusa-Firmware-build folder"
rm -r *
2020-10-05 13:25:54 +00:00
else
2021-02-12 19:12:37 +00:00
echo "Nothing to clean up"
2020-10-05 13:25:54 +00:00
fi
2021-06-23 18:14:30 +00:00
}
#### End: Check git branch has changed
2020-10-05 13:25:54 +00:00
2021-06-23 18:14:30 +00:00
#### Start: Prepare code for compiling
prepare_code_for_compiling( )
{
2021-02-12 19:12:37 +00:00
VARIANT = $( basename " $v " ".h" )
2021-05-03 12:11:03 +00:00
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)
2021-02-12 19:12:37 +00:00
# Find firmware version in Configuration.h file and use it to generate the hex filename
2021-06-17 17:08:55 +00:00
FW_MAJOR = $( grep --max-count= 1 "\bFW_MAJOR\b" $SCRIPT_PATH /Firmware/Configuration.h | sed -e's/ */ /g' | cut -d ' ' -f3)
FW_MINOR = $( grep --max-count= 1 "\bFW_MINOR\b" $SCRIPT_PATH /Firmware/Configuration.h | sed -e's/ */ /g' | cut -d ' ' -f3)
FW_REVISION = $( grep --max-count= 1 "\bFW_REVISION\b" $SCRIPT_PATH /Firmware/Configuration.h| sed -e's/ */ /g' | cut -d ' ' -f3)
FW = " $FW_MAJOR $FW_MINOR $FW_REVISION "
#FW=$(grep --max-count=1 "\bFW_VERSION\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d '"' -f2|sed 's/\.//g')
2021-02-12 19:12:37 +00:00
if [ -z " $BUILD " ] ; then
# Find build version in Configuration.h file and use it to generate the hex filename
BUILD = $( grep --max-count= 1 "\bFW_COMMIT_NR\b" $SCRIPT_PATH /Firmware/Configuration.h | sed -e's/ */ /g' | cut -d ' ' -f3)
else
# Find and replace build version in Configuration.h file
BUILD_ORG = $( grep --max-count= 1 "\bFW_COMMIT_NR\b" $SCRIPT_PATH /Firmware/Configuration.h | sed -e's/ */ /g' | cut -d ' ' -f3)
echo " Original build number: $BUILD_ORG "
2021-06-23 18:14:30 +00:00
if [ " $BUILD_ORG " != " $BUILD " ] ; then
echo " New build number : $BUILD "
sed -i -- " s/^#define FW_COMMIT_NR.*/#define FW_COMMIT_NR $BUILD /g " $SCRIPT_PATH /Firmware/Configuration.h
fi
2021-02-12 19:12:37 +00:00
fi
# Check if the motherboard is an EINSY and if so only one hex file will generated
MOTHERBOARD = $( grep --max-count= 1 "\bMOTHERBOARD\b" $SCRIPT_PATH /Firmware/variants/$VARIANT .h | sed -e's/ */ /g' | cut -d ' ' -f3)
# Check development status
2021-06-17 17:08:55 +00:00
FW_FLAV = $( grep --max-count= 1 "//#define FW_FLAVOR\b" $SCRIPT_PATH /Firmware/Configuration.h| cut -d ' ' -f1)
2022-07-12 06:48:22 +00:00
FW_FLAVREV = $( grep --max-count= 1 "//#define FW_FLAVERSION\b" $SCRIPT_PATH /Firmware/Configuration.h| cut -d ' ' -f1)
if [ [ " $FW_FLAV " = = "//#define" && -z $FW_FLAVREV ] ] ; then
failures 26
fi
2022-02-24 09:44:37 +00:00
#echo "FLAV:$FW_FLAV"
2021-06-17 17:08:55 +00:00
if [ [ " $FW_FLAV " != "//#define" ] ] ; then
FW_FLAVOR = $( grep --max-count= 1 "\bFW_FLAVOR\b" $SCRIPT_PATH /Firmware/Configuration.h| sed -e's/ */ /g' | cut -d ' ' -f3)
2022-02-24 09:44:37 +00:00
#echo "FLAVOR:$FW_FLAVOR"
2022-07-12 06:48:22 +00:00
if [ [ " $FW_FLAVREV " != "//#define" ] ] ; then
FW_FLAVERSION = $( grep --max-count= 1 "\bFW_FLAVERSION\b" $SCRIPT_PATH /Firmware/Configuration.h| sed -e's/ */ /g' | cut -d ' ' -f3)
2021-06-17 17:08:55 +00:00
FW = " $FW - $FW_FLAVOR "
DEV_CHECK = " $FW_FLAVOR "
2022-07-12 06:48:22 +00:00
echo " DEV: $DEV_CHECK "
2021-06-17 17:08:55 +00:00
if [ ! -z " $FW_FLAVERSION " ] ; then
FW = " $FW $FW_FLAVERSION "
fi
2022-07-12 06:48:22 +00:00
else
failures 26
2021-06-17 17:08:55 +00:00
fi
fi
2022-07-12 06:48:22 +00:00
#DEV_CHECK=$(grep --max-count=1 "\bFW_VERSION\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d '"' -f2|sed 's/\.//g'|cut -d '-' -f2)
2021-02-12 19:12:37 +00:00
if [ -z " $DEV_STATUS_SELECTED " ] ; then
if [ [ " $DEV_CHECK " = = *"RC" * ] ] ; then
DEV_STATUS = "RC"
2021-06-17 17:08:55 +00:00
elif [ [ " $DEV_CHECK " = = *"ALPHA" * ] ] ; then
2021-02-12 19:12:37 +00:00
DEV_STATUS = "ALPHA"
2021-06-17 17:08:55 +00:00
elif [ [ " $DEV_CHECK " = = *"BETA" * ] ] ; then
2021-02-12 19:12:37 +00:00
DEV_STATUS = "BETA"
elif [ [ " $DEV_CHECK " = = "DEVEL" ] ] ; then
DEV_STATUS = "DEVEL"
elif [ [ " $DEV_CHECK " = = "DEBUG" ] ] ; then
DEV_STATUS = "DEBUG"
else
DEV_STATUS = "UNKNOWN"
echo
echo " $( tput setaf 5) DEV_STATUS is UNKNOWN. Do you wish to set DEV_STATUS to GOLD? $( tput sgr0) "
PS3 = "Select YES only if source code is tested and trusted: "
select yn in "Yes" "No" ; do
case $yn in
Yes)
DEV_STATUS = "GOLD"
DEV_STATUS_SELECTED = "GOLD"
break
; ;
2021-05-03 12:14:47 +00:00
No)
2021-02-12 19:12:37 +00:00
DEV_STATUS = "UNKNOWN"
DEV_STATUS_SELECTED = "UNKNOWN"
break
; ;
*)
echo " $( tput setaf 1) This is not a valid DEV_STATUS $( tput sgr0) "
; ;
esac
done
fi
else
DEV_STATUS = $DEV_STATUS_SELECTED
fi
2021-06-23 18:14:30 +00:00
}
#### End: Prepare code for compiling
prepare_hex_folders( )
{
2021-02-12 19:12:37 +00:00
if [ ! -d " $SCRIPT_PATH /../PF-build-hex/FW $FW -Build $BUILD / $MOTHERBOARD " ] ; then
2021-06-23 18:14:30 +00:00
mkdir -p $SCRIPT_PATH /../PF-build-hex/FW$FW -Build$BUILD /$MOTHERBOARD || failures 9
2021-02-12 19:12:37 +00:00
fi
OUTPUT_FOLDER = " PF-build-hex/FW $FW -Build $BUILD / $MOTHERBOARD "
2021-04-18 18:28:08 +00:00
if [ " $BOARD " != "prusa_einsy_rambo" ] ; then
2021-05-03 12:14:47 +00:00
if [ ! -d " $SCRIPT_PATH /../PF-build-hex/FW $FW -Build $BUILD / $BOARD " ] ; then
2021-06-23 18:14:30 +00:00
mkdir -p $SCRIPT_PATH /../PF-build-hex/FW$FW -Build$BUILD /$BOARD || failures 9
2021-05-03 12:14:47 +00:00
fi
2021-04-18 18:28:08 +00:00
OUTPUT_FOLDER = " PF-build-hex/FW $FW -Build $BUILD / $BOARD "
fi
2021-02-12 19:12:37 +00:00
2021-06-22 07:20:48 +00:00
#Define OUTPUT_FILENAME
OUTPUT_FILENAME = FW$FW -Build$BUILD -$VARIANT
#Check for OUTPUT_FILENAME_SUFFIX and add it
if [ ! -z $OUTPUT_FILENAME_SUFFIX ] ; then
OUTPUT_FILENAME = " ${ OUTPUT_FILENAME } $OUTPUT_FILENAME_SUFFIX "
fi
2021-02-12 19:12:37 +00:00
#Check if exactly the same hexfile already exists
2021-06-22 07:20:48 +00:00
if [ [ -f " $SCRIPT_PATH /../ $OUTPUT_FOLDER / $OUTPUT_FILENAME .hex " && " $LANGUAGES " = = "ALL" ] ] ; then
2021-02-12 19:12:37 +00:00
echo ""
2021-06-22 07:20:48 +00:00
ls -1 $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME .hex | xargs -n1 basename
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 6) This hex file to be compiled already exists! To cancel this process press CRTL+C and rename existing hex file. $( tput sgr 0) "
if [ $OUTPUT = = "1" ] ; then
read -t 10 -p "Press Enter to continue..."
fi
2022-09-29 14:39:02 +00:00
elif [ [ -f " $SCRIPT_PATH /../ $OUTPUT_FOLDER / $OUTPUT_FILENAME -EN_FARM.hex " && " $LANGUAGES " = = "EN_FARM" ] ] ; then
2021-02-12 19:12:37 +00:00
echo ""
2022-09-29 14:39:02 +00:00
ls -1 $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME -EN_FARM.hex | xargs -n1 basename
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 6) This hex file to be compiled already exists! To cancel this process press CRTL+C and rename existing hex file. $( tput sgr 0) "
if [ $OUTPUT = = "1" ] ; then
read -t 10 -p "Press Enter to continue..."
fi
fi
2021-06-22 07:20:48 +00:00
if [ [ -f " $SCRIPT_PATH /../ $OUTPUT_FOLDER / $OUTPUT_FILENAME .zip " && " $LANGUAGES " = = "ALL" ] ] ; then
2021-02-12 19:12:37 +00:00
echo ""
2021-06-22 07:20:48 +00:00
ls -1 $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME .zip | xargs -n1 basename
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 6) This zip file to be compiled already exists! To cancel this process press CRTL+C and rename existing hex file. $( tput sgr 0) "
if [ $OUTPUT = = "1" ] ; then
read -t 10 -p "Press Enter to continue..."
fi
fi
2021-06-23 18:14:30 +00:00
}
#### End: Prepare hex files folder
#### Start: List usefull data
list_usefull_data( )
{
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 2) $( tput setab 7) "
2021-06-22 07:20:48 +00:00
echo "Printer :" $MK404_PRINTER
echo "Variant :" $VARIANT
echo "Firmware :" $FW
echo "Build # :" $BUILD
echo "Dev Check :" $DEV_CHECK
echo "DEV Status :" $DEV_STATUS
echo "Motherboard :" $MOTHERBOARD
echo "Board flash :" $BOARD_FLASH
echo "Board mem :" $BOARD_MEM
echo "Languages :" $LANGUAGES
2021-02-12 19:12:37 +00:00
echo "Hex-file Folder:" $OUTPUT_FOLDER
2021-06-22 07:20:48 +00:00
echo "Hex filename :" $OUTPUT_FILENAME
2021-02-12 19:12:37 +00:00
echo " $( tput sgr0) "
2021-06-23 18:14:30 +00:00
}
#### End: List usefull data
#### Start: Prepare Firmware to be compiled
prepare_variant_for_compiling( )
{
# Copy variant as Configuration_prusa.h
2021-02-12 19:12:37 +00:00
if [ ! -f " $SCRIPT_PATH /Firmware/Configuration_prusa.h " ] ; then
2021-06-23 18:14:30 +00:00
cp -f $SCRIPT_PATH /Firmware/variants/$VARIANT .h $SCRIPT_PATH /Firmware/Configuration_prusa.h || failures 12
2021-02-12 19:12:37 +00:00
else
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
read -t 10 -p "Press Enter to continue..."
fi
2021-06-23 18:14:30 +00:00
cp -f $SCRIPT_PATH /Firmware/variants/$VARIANT .h $SCRIPT_PATH /Firmware/Configuration_prusa.h || failures 12
2021-02-12 19:12:37 +00:00
fi
#Prepare Configuration.h to use the correct FW_DEV_VERSION to prevent LCD messages when connecting with OctoPrint
2022-07-12 06:48:22 +00:00
sed -i -- " s/#define FW_DEV_VERSION FW_VERSION_.*/#define FW_DEV_VERSION FW_VERSION_ $DEV_STATUS /g " $SCRIPT_PATH /Firmware/Configuration.h
2021-02-12 19:12:37 +00:00
# set FW_REPOSITORY
sed -i -- 's/#define FW_REPOSITORY "Unknown"/#define FW_REPOSITORY "Prusa3d"/g' $SCRIPT_PATH /Firmware/Configuration.h
#Prepare English only or multi-language version to be build
2022-09-29 14:39:02 +00:00
if [ $LANGUAGES = = "EN_FARM" ] ; then
2021-02-12 19:12:37 +00:00
echo " "
echo "English only language firmware will be built"
sed -i -- "s/^#define LANG_MODE *1/#define LANG_MODE 0/g" $SCRIPT_PATH /Firmware/config.h
echo " "
else
echo " "
echo "Multi-language firmware will be built"
sed -i -- "s/^#define LANG_MODE *0/#define LANG_MODE 1/g" $SCRIPT_PATH /Firmware/config.h
echo " "
fi
#Check if compiler flags are set to Prusa specific needs for the rambo board.
2021-03-17 17:33:54 +00:00
#if [ $TARGET_OS == "windows" ]; then
#RAMBO_PLATFORM_FILE="PrusaResearchRambo/avr/platform.txt"
#fi
2021-05-03 06:24:02 +00:00
#New fresh PF-Firmware-build
if [ " $new_build_flag " = = "1" ] ; then
2021-06-23 18:14:30 +00:00
rm -r -f $BUILD_PATH /* || failures 13
2021-05-03 06:24:02 +00:00
fi
2021-06-23 18:14:30 +00:00
}
#### End: Prepare Firmware to be compiled
#### End of Prepare building
#### Start: Compiling EN Prusa Firmware
compile_en_firmware( )
{
2021-04-18 18:28:08 +00:00
## Check board mem size
2022-02-24 09:44:37 +00:00
CURRENT_BOARD_MEM = $( grep "#define RAMEND" $BUILD_ENV_PATH /hardware/tools/avr/avr/include/avr/iom2560.h | sed -e's/.* //g' | cut -d ' ' -f2 | tr -d ' \t\n\r' )
2021-04-18 18:28:08 +00:00
if [ $CURRENT_BOARD_MEM != "0x21FF" ] ; then
2022-02-24 10:42:23 +00:00
echo " $( tput setaf 1) Board mem has been modified or not reset $( tput sgr 0) "
2021-04-18 18:28:08 +00:00
echo "Current:" $CURRENT_BOARD_MEM
2021-05-05 18:05:35 +00:00
PS3 = " Select $( tput setaf 2) Yes $( tput sgr 0) if you want to reset it. "
2021-04-18 18:28:08 +00:00
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
2022-02-24 09:44:37 +00:00
BOARD_MEM_MODIFIED = 0
2021-04-18 18:28:08 +00:00
break
; ;
*)
echo "Continuing with modified mem size"
2022-02-24 09:44:37 +00:00
BOARD_MEM_MODIFIED = 1
2021-04-18 18:28:08 +00:00
break
; ;
esac
done
2022-02-24 09:44:37 +00:00
else
BOARD_MEM_MODIFIED = 0
2021-04-18 18:28:08 +00:00
fi
## Modify board mem size
if [ [ ! -z $BOARD_MEM && " $BOARD_MEM " != "0x21FF" ] ] ; then
2021-05-03 18:01:48 +00:00
echo " $( tput setaf 3) Modifying board memory size (hex): $( tput sgr 0) "
2021-04-18 18:28:08 +00:00
echo "Old:" $CURRENT_BOARD_MEM
echo "New:" $BOARD_MEM
2021-05-03 18:01:48 +00:00
read -t 5 -p " To cancel press $( tput setaf 1) CRTL+C $( tput sgr 0) "
echo ""
2021-04-18 18:28:08 +00:00
sed -i -- " s/^#define RAMEND 0x21FF/#define RAMEND ${ BOARD_MEM } /g " $BUILD_ENV_PATH /hardware/tools/avr/avr/include/avr/iom2560.h
2022-02-24 09:44:37 +00:00
BOARD_MEM_MODIFIED = 1
2021-04-18 18:28:08 +00:00
fi
2021-05-03 06:24:02 +00:00
2021-04-18 18:28:08 +00:00
## Check board flash size
2022-02-24 09:44:37 +00:00
CURRENT_BOARD_FLASH = $( grep "#define FLASHEND" $BUILD_ENV_PATH /hardware/tools/avr/avr/include/avr/iom2560.h | sed -e's/.* //g' | cut -d ' ' -f2 | tr -d ' \t\n\r' )
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 ' \t\n\r' )
2021-04-18 18:28:08 +00:00
if [ [ $CURRENT_BOARD_FLASH != "0x3FFFF" || $CURRENT_BOARD_maximum_size != "253952" ] ] ; then
2022-02-24 10:42:23 +00:00
echo " $( tput setaf 1) Board flash has been modified or not reset $( tput sgr 0) "
2021-04-18 18:28:08 +00:00
echo "Current flash size:" $CURRENT_BOARD_FLASH
echo "Current max. size:" $CURRENT_BOARD_maximum_size
2021-05-05 18:05:35 +00:00
PS3 = " Select $( tput setaf 2) Yes $( tput sgr 0) if you want to reset it. "
2021-04-18 18:28:08 +00:00
select yn in "Yes" "No" ; do
case $yn in
Yes)
2021-05-03 18:01:48 +00:00
echo " $( tput setaf 1) Resetting board flash size $( tput sgr 0) "
2021-04-18 18:28:08 +00:00
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
2022-02-24 09:44:37 +00:00
BOARD_FLASH_MODIFIED = 0
2021-04-18 18:28:08 +00:00
break
; ;
*)
2021-05-03 18:01:48 +00:00
echo " $( tput setaf 3) Continuing with modified flash size $( tput sgr 0) "
2022-02-24 09:44:37 +00:00
BOARD_FLASH_MODIFIED = 1
2021-04-18 18:28:08 +00:00
break
; ;
esac
done
2022-02-24 09:44:37 +00:00
else
2022-02-24 10:42:23 +00:00
BOARD_FLASH_MODIFIED = 1
2021-04-18 18:28:08 +00:00
fi
## Modify boad flash size
if [ [ ! -z $BOARD_FLASH && " $BOARD_FLASH " != "0x3FFFF" ] ] ; then
2022-02-24 10:42:23 +00:00
echo " $( tput setaf 3) Modifying board flash size (hex): $( tput sgr 0) "
2021-04-18 18:28:08 +00:00
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
2021-05-03 18:01:48 +00:00
read -t 5 -p " To cancel press $( tput setaf 1) CRTL+C $( tput sgr 0) "
2021-04-18 18:28:08 +00:00
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
2022-02-24 09:44:37 +00:00
BOARD_FLASH_MODIFIED = 1
2021-04-18 18:28:08 +00:00
fi
2021-05-03 06:24:02 +00:00
2021-05-03 12:14:47 +00:00
#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
#### Start building
2021-02-12 19:12:37 +00:00
export ARDUINO = $BUILD_ENV_PATH
#echo $BUILD_ENV_PATH
#export BUILDER=$ARDUINO/arduino-builder
echo
#read -t 5 -p "Press Enter..."
echo
echo "Start to build Prusa Firmware ..."
echo " Using variant $VARIANT $( tput setaf 3) "
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
2021-06-17 18:59:35 +00:00
if [ $verbose_IDE = = "1" ] ; then
2021-06-23 18:14:30 +00:00
$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 || failures 24
2021-06-17 18:59:35 +00:00
fi
2021-06-23 18:14:30 +00:00
$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 -verbose= $verbose_IDE $SCRIPT_PATH /Firmware/Firmware.ino || failures 24
}
#### End: Compiling EN Prusa Firmware
#### Start: Create and save Multi Language Prusa Firmware
create_multi_firmware( )
{
#if [ $LANGUAGES == "ALL" ]; then
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 2) "
echo "Building multi language firmware" $MULTI_LANGUAGE_CHECK
echo " $( tput sgr 0) "
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
cd $SCRIPT_PATH /lang
echo " $( tput setaf 3) "
2021-06-23 18:14:30 +00:00
./config.sh || failures 25
2021-02-12 19:12:37 +00:00
echo " $( tput sgr 0) "
# Check if previous languages and firmware build exist and if so clean them up
if [ -f "lang_en.tmp" ] ; then
echo ""
echo " $( tput setaf 6) Previous lang build files already exist these will be cleaned up in 10 seconds. $( tput sgr 0) "
if [ $OUTPUT = = "1" ] ; then
read -t 10 -p "Press Enter to continue..."
fi
echo " $( tput setaf 3) "
./lang-clean.sh
echo " $( tput sgr 0) "
fi
if [ -f "progmem.out" ] ; then
echo ""
echo " $( tput setaf 6) Previous firmware build files already exist these will be cleaned up in 10 seconds. $( tput sgr 0) "
if [ $OUTPUT = = "1" ] ; then
read -t 10 -p "Press Enter to continue..."
fi
echo " $( tput setaf 3) "
./fw-clean.sh
echo " $( tput sgr 0) "
fi
New PO-based language translation support (#3471)
* lang: Add a PO language extractor with FW metadata support
Implement a straight-to-po language extractor which supports our custom
language requirements:
- _i/_I/ISTR for text string definitions
- _T for catalog translations (with back-reference support)
- //// EOL comments with:
- MSG_ catalog entry name identifiers
- c=X r=Y annotations for screen dimensioning checks
- Crude support for commented lines
All source locations are correctly referenced in the PO, with the
metadata colleted in the comment for further processing.
Several checks are implemented already during extraction:
- Correct catalog name assignment (no duplicates)
- Metadata checks for each entry
Further checks will be implemented by directly checking the translated PO file.
Requires "polib" and "regex" python modules.
* lang: Adapt lang-check to work directly on PO/POT files
* lang: Allow lang-extract to generate stable (pre-sorted) output directly
* lang: Further extend lang-extract consistency/error checking
- Do not parse inside preprocessor conditionals
- Distinguish between references and definitions
- Warn about missing references and definitions
* lang: lang-extract: warn about incorrect PROGMEM assignments
Check that ISTR is used along with PROGMEM_I1 in an attempt to spot
useless translated catalogs.
* lang: lang-extract: Improved handling of same-line translations
Correctly reference metadata on same-line translations.
* lang: lang-extract: Handle _O as a cat-ref
https://github.com/prusa3d/Prusa-Firmware/pull/3434
* lang: lang-extract: Warn about unused catalog definitions
* lang: lang-extract: Allow propagating translation comments via //
The definition:
code //// definition [// comment]
will check [definition] as before, but blindly accumulate // comment.
The comment is then re-appended back into the PO files for translators
with the form:
definition
comment
comment...
* lang: Fix incorrect display definitions
* lang: lang-extract: Check source encoding/charmap
* lang: Translate the degree symbol
* lang: Unbreak/cleanup DEBUG_SEC_LANG
* lang: Improve meaning of comment
* lang: Split charset conversions into an aux lib for future use
* lang: Implement lang-map.py to extract the translation symbol map
- Extracts the translatable symbol map for further use
- Computes a stable "language signature" from the map itself
- Optionally patches the binary update the symbols
* lang: Check for translation recoding problems
* lang: Implement a transliteration map to post-process translations
TRANS_CHARS is now used to replace unavailable symbols to the source
encoding, only while producing the language catalog.
* lang: Handle/check character replacements in lang-check
Filter the translation through TRANS_CHARS, so that the preview and
length check are performed correctly for expanding replacements such as
'ß' to 'ss'.
* lang: Implement lang-build.py to generate the final language catalog
* Cleanup .gitignore
* lang: Drop txt language files
* lang: Remove outdated translation scripts and obsolete docs
* lang: Update build scripts for new infrastructure
* lang: [no] Integrate accents from po/new/no.po
We now support accents natively
* lang: Remove redundant directory po/new/
* lang: Fix encoding of LCD characters in PO files
* lang: [hr] Fix wrapping in MSG_CRASH_DET_ONLY_IN_NORMAL
* lang: Sort and reformat PO files for further massaging
* lang: Switch to developer (dot) comments for PO metadata
* lang: Allow the IGNORE annotation to skip extraction
* lang: Fix missing/broken language metadata in sources
* lang: Add update-pot.sh and regenerate po/Firmware.pot
* lang: Add update-po.sh and refresh all PO files
* lang: Add summary documentation about the new translation workflow
* Add more ignored files
* CI: Add new required dependencies to travis
* lang: lang-build: Improve warning message
"referenced" was really meaning that data is being duplicated.
* lang: Respect the language order as defined in config.sh
This correctly splits normal and community-made entries during language
selection.
* lang: More typos in the documentation
* lang: Check for the maximum size of each language
Each table needs to fit within LANG_SIZE_RESERVED
* lang: Properly align _SEC_LANG to page boundaries
... instead of relying on _SEC_LANG_TABLE to calculate the offset
* lang: Build support for dual-language hex files
Detect the printer type by checking the current variant type.
On printers with no xflash (MK2*), generate one hex file for each
additional language file by patching the built-in secondary language
table during the build process
* lang: Mention lang-patchsec.py
* lang: Use color() instead of tput for clarity
* lang: Allow disabling terminal colors with NO_COLOR/TERM=dumb
* lang: Consistent use of redirection in config.sh
* lang: Stricter variant-type check for xflash support
* lang: Output size stats when building double-language hex files
* lang: Respect NO_COLOR in lang-check.py
* lang: Check for repeated/incorrect annotations
Catch errors such as "c=1 c=2"
* lang: Correct MSG_SLIGHT_SKEW/MSG_SEVERE_SKEW annotations
* lang: [it] Improve MSG_*_SKEW translation
* lang: Use INTLHEX instead of OUTHEX_P/S for configuration
We already have OUTHEX which is the compiled firmware.
Use INTLHEX for the final internationalized firmware, which is less
confusing. Also, assume it being a prefix for all generated hex
files, which reduces the number of variables set.
* lang: Move lang_map to lib.io for further use
* lang: lang-check: Accept a firmware map file to suppress unused string warnings
* lang: Use the map file to reduce useless warnings during fw-build
* lang: lang-check: Also suppress unused empty annotations
* lang: Fix MSG_MOVE_CARRIAGE_TO_THE_TOP_Z annotation
Refresh pot file
* lang: lang-check: Do not warn about same-word translations by default
Do not warn when one-word translations such as "No" result in "No" also
in other languages, since this is common in latin languages.
Allow to re-enable the warning with --warn-same
* lang: lang-build: Handle same-source/translation efficiently
* lang: [it] Explicitly add On/Off/Reset/Wizard to suppress warnings
Instead of displaying a warning, supress the warning and explicitly
translate each entry using english (which is the common/acceptable
word in these cases).
* lang: [it] Suppress more warnings
* lang: lang-check: Add intermediate "suggest" warning category
Warnings in the "suggest" category as shown as [S] as based on pure
speculation from the checking tool, such as the translation being
significantly shorter than the original.
As a result, they can be suppressed with --no-suggest
* lang: Return translation status from lang-check
- 0 if the translation only contains suggestions
- 1 if the translation contains warnings or errors
Check for the exit status in fw-build.sh, but do nothing at the moment
except printing a non-fatal error.
* lang: Remove "trim_trailing_whitespace=false" for po files
PO files got cleaned up/rewritten. We can now ensure they stay
consistent.
* lang: [sv] Re-integrate changes from 70c73cb
* lang: [no] Reintegrate changes from @pkg2000
2022-06-16 13:03:30 +00:00
# Combine compiled firmware with languages
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 3) "
2021-06-23 18:14:30 +00:00
./fw-build.sh || failures 25
2021-02-12 19:12:37 +00:00
echo " $( tput sgr 0) "
# Check if the motherboard is an EINSY and if so only one hex file will generated
MOTHERBOARD = $( grep --max-count= 1 "\bMOTHERBOARD\b" $SCRIPT_PATH /Firmware/variants/$VARIANT .h | sed -e's/ */ /g' | cut -d ' ' -f3)
# If the motherboard is an EINSY just copy one hexfile
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) "
2021-02-13 09:35:34 +00:00
# End of "lang.bin" for MK3 and MK3S copy
New PO-based language translation support (#3471)
* lang: Add a PO language extractor with FW metadata support
Implement a straight-to-po language extractor which supports our custom
language requirements:
- _i/_I/ISTR for text string definitions
- _T for catalog translations (with back-reference support)
- //// EOL comments with:
- MSG_ catalog entry name identifiers
- c=X r=Y annotations for screen dimensioning checks
- Crude support for commented lines
All source locations are correctly referenced in the PO, with the
metadata colleted in the comment for further processing.
Several checks are implemented already during extraction:
- Correct catalog name assignment (no duplicates)
- Metadata checks for each entry
Further checks will be implemented by directly checking the translated PO file.
Requires "polib" and "regex" python modules.
* lang: Adapt lang-check to work directly on PO/POT files
* lang: Allow lang-extract to generate stable (pre-sorted) output directly
* lang: Further extend lang-extract consistency/error checking
- Do not parse inside preprocessor conditionals
- Distinguish between references and definitions
- Warn about missing references and definitions
* lang: lang-extract: warn about incorrect PROGMEM assignments
Check that ISTR is used along with PROGMEM_I1 in an attempt to spot
useless translated catalogs.
* lang: lang-extract: Improved handling of same-line translations
Correctly reference metadata on same-line translations.
* lang: lang-extract: Handle _O as a cat-ref
https://github.com/prusa3d/Prusa-Firmware/pull/3434
* lang: lang-extract: Warn about unused catalog definitions
* lang: lang-extract: Allow propagating translation comments via //
The definition:
code //// definition [// comment]
will check [definition] as before, but blindly accumulate // comment.
The comment is then re-appended back into the PO files for translators
with the form:
definition
comment
comment...
* lang: Fix incorrect display definitions
* lang: lang-extract: Check source encoding/charmap
* lang: Translate the degree symbol
* lang: Unbreak/cleanup DEBUG_SEC_LANG
* lang: Improve meaning of comment
* lang: Split charset conversions into an aux lib for future use
* lang: Implement lang-map.py to extract the translation symbol map
- Extracts the translatable symbol map for further use
- Computes a stable "language signature" from the map itself
- Optionally patches the binary update the symbols
* lang: Check for translation recoding problems
* lang: Implement a transliteration map to post-process translations
TRANS_CHARS is now used to replace unavailable symbols to the source
encoding, only while producing the language catalog.
* lang: Handle/check character replacements in lang-check
Filter the translation through TRANS_CHARS, so that the preview and
length check are performed correctly for expanding replacements such as
'ß' to 'ss'.
* lang: Implement lang-build.py to generate the final language catalog
* Cleanup .gitignore
* lang: Drop txt language files
* lang: Remove outdated translation scripts and obsolete docs
* lang: Update build scripts for new infrastructure
* lang: [no] Integrate accents from po/new/no.po
We now support accents natively
* lang: Remove redundant directory po/new/
* lang: Fix encoding of LCD characters in PO files
* lang: [hr] Fix wrapping in MSG_CRASH_DET_ONLY_IN_NORMAL
* lang: Sort and reformat PO files for further massaging
* lang: Switch to developer (dot) comments for PO metadata
* lang: Allow the IGNORE annotation to skip extraction
* lang: Fix missing/broken language metadata in sources
* lang: Add update-pot.sh and regenerate po/Firmware.pot
* lang: Add update-po.sh and refresh all PO files
* lang: Add summary documentation about the new translation workflow
* Add more ignored files
* CI: Add new required dependencies to travis
* lang: lang-build: Improve warning message
"referenced" was really meaning that data is being duplicated.
* lang: Respect the language order as defined in config.sh
This correctly splits normal and community-made entries during language
selection.
* lang: More typos in the documentation
* lang: Check for the maximum size of each language
Each table needs to fit within LANG_SIZE_RESERVED
* lang: Properly align _SEC_LANG to page boundaries
... instead of relying on _SEC_LANG_TABLE to calculate the offset
* lang: Build support for dual-language hex files
Detect the printer type by checking the current variant type.
On printers with no xflash (MK2*), generate one hex file for each
additional language file by patching the built-in secondary language
table during the build process
* lang: Mention lang-patchsec.py
* lang: Use color() instead of tput for clarity
* lang: Allow disabling terminal colors with NO_COLOR/TERM=dumb
* lang: Consistent use of redirection in config.sh
* lang: Stricter variant-type check for xflash support
* lang: Output size stats when building double-language hex files
* lang: Respect NO_COLOR in lang-check.py
* lang: Check for repeated/incorrect annotations
Catch errors such as "c=1 c=2"
* lang: Correct MSG_SLIGHT_SKEW/MSG_SEVERE_SKEW annotations
* lang: [it] Improve MSG_*_SKEW translation
* lang: Use INTLHEX instead of OUTHEX_P/S for configuration
We already have OUTHEX which is the compiled firmware.
Use INTLHEX for the final internationalized firmware, which is less
confusing. Also, assume it being a prefix for all generated hex
files, which reduces the number of variables set.
* lang: Move lang_map to lib.io for further use
* lang: lang-check: Accept a firmware map file to suppress unused string warnings
* lang: Use the map file to reduce useless warnings during fw-build
* lang: lang-check: Also suppress unused empty annotations
* lang: Fix MSG_MOVE_CARRIAGE_TO_THE_TOP_Z annotation
Refresh pot file
* lang: lang-check: Do not warn about same-word translations by default
Do not warn when one-word translations such as "No" result in "No" also
in other languages, since this is common in latin languages.
Allow to re-enable the warning with --warn-same
* lang: lang-build: Handle same-source/translation efficiently
* lang: [it] Explicitly add On/Off/Reset/Wizard to suppress warnings
Instead of displaying a warning, supress the warning and explicitly
translate each entry using english (which is the common/acceptable
word in these cases).
* lang: [it] Suppress more warnings
* lang: lang-check: Add intermediate "suggest" warning category
Warnings in the "suggest" category as shown as [S] as based on pure
speculation from the checking tool, such as the translation being
significantly shorter than the original.
As a result, they can be suppressed with --no-suggest
* lang: Return translation status from lang-check
- 0 if the translation only contains suggestions
- 1 if the translation contains warnings or errors
Check for the exit status in fw-build.sh, but do nothing at the moment
except printing a non-fatal error.
* lang: Remove "trim_trailing_whitespace=false" for po files
PO files got cleaned up/rewritten. We can now ensure they stay
consistent.
* lang: [sv] Re-integrate changes from 70c73cb
* lang: [no] Reintegrate changes from @pkg2000
2022-06-16 13:03:30 +00:00
cp -f Firmware-intl.hex $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME .hex
2021-06-22 07:20:48 +00:00
cp -f $BUILD_PATH /Firmware.ino.elf $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME .elf
2021-02-12 19:12:37 +00:00
else
2022-02-09 08:41:11 +00:00
#Search for created firmware languages
2022-07-12 06:48:22 +00:00
langs = $( find Firmware-intl-en_*.hex | cut -d "_" -f2 | cut -d "." -f1)
2022-02-09 08:41:11 +00:00
#Copy found firmware_*.hex files
for la in $langs ; do
2022-07-12 06:48:22 +00:00
cp -f Firmware-intl-en_$la .hex $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME -$la .hex
2022-02-09 08:41:11 +00:00
done
2021-06-22 07:20:48 +00:00
cp -f $BUILD_PATH /Firmware.ino.elf $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME .elf
2022-02-09 08:41:11 +00:00
echo " $( tput setaf 2) Zip multi language firmware for MK2.5/miniRAMbo board to PF-build-hex folder $( tput sgr 0) "
2021-02-12 19:12:37 +00:00
if [ $TARGET_OS = = "windows" ] ; then
2021-06-22 07:20:48 +00:00
zip a $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME .zip $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME -??.hex
2022-02-09 08:41:11 +00:00
#rm $SCRIPT_PATH/../$OUTPUT_FOLDER/$OUTPUT_FILENAME-??.hex
2021-02-12 19:12:37 +00:00
elif [ $TARGET_OS = = "linux" ] ; then
2022-07-12 06:48:22 +00:00
zip -j ../../$OUTPUT_FOLDER /$OUTPUT_FILENAME .zip ../../$OUTPUT_FOLDER /$OUTPUT_FILENAME -??.hex
2021-02-12 19:12:37 +00:00
fi
fi
2021-05-03 06:24:02 +00:00
# Cleanup after build
if [ [ -z " $clean_flag " || " $clean_flag " = = "0" ] ] ; then
echo " $( tput setaf 3) "
2021-06-23 18:14:30 +00:00
./fw-clean.sh || failures 25
2021-05-03 06:24:02 +00:00
echo " $( tput sgr 0) "
fi
2021-06-23 18:14:30 +00:00
}
#### End: Create and save Multi Language Prusa Firmware
2021-05-03 06:24:02 +00:00
2022-09-29 14:39:02 +00:00
#### Start: Save EN_FARM language Prusa Firmware
2021-06-23 18:14:30 +00:00
save_en_firmware( )
{
#else
2021-02-12 19:12:37 +00:00
echo " $( tput setaf 2) Copying English only firmware to PF-build-hex folder $( tput sgr 0) "
2022-09-29 14:39:02 +00:00
cp -f $BUILD_PATH /Firmware.ino.hex $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME -EN_FARM.hex || failures 12
2021-06-17 18:59:35 +00:00
echo " $( tput setaf 2) Copying English only elf file to PF-build-hex folder $( tput sgr 0) "
2022-09-29 14:39:02 +00:00
cp -f $BUILD_PATH /Firmware.ino.elf $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME -EN_FARM.elf || failures 12
2021-06-23 18:14:30 +00:00
#fi
}
2022-09-29 14:39:02 +00:00
#### End: Save EN_FARM language Prusa Firmware
2021-06-23 18:14:30 +00:00
#### Start: Cleanup Firmware
cleanup_firmware( )
{
2021-02-12 19:12:37 +00:00
if [ [ -z " $prusa_flag " || " $prusa_flag " = = "0" ] ] ; then
2022-07-12 06:48:22 +00:00
if [ -e " $SCRIPT_PATH /Firmware/Configuration_prusa.h " ] ; then
rm $SCRIPT_PATH /Firmware/Configuration_prusa.h || failures 13
fi
2021-02-12 19:12:37 +00:00
fi
2021-05-03 06:24:02 +00:00
# Delete dupblicates
2021-02-12 19:12:37 +00:00
if find $SCRIPT_PATH /lang/ -name '*RAMBo10a*.txt' -printf 1 -quit | grep -q 1
then
2021-06-23 18:14:30 +00:00
rm $SCRIPT_PATH /lang/*RAMBo10a*.txt || failures 13
2021-02-12 19:12:37 +00:00
fi
2021-05-03 06:24:02 +00:00
# MK2 not supported in this branch
2021-02-12 19:12:37 +00:00
if find $SCRIPT_PATH /lang/ -name '*MK2-RAMBo13a*' -printf 1 -quit | grep -q 1
then
2021-06-23 18:14:30 +00:00
rm $SCRIPT_PATH /lang/*MK2-RAMBo13a*.txt || failures 13
2021-02-12 19:12:37 +00:00
fi
if find $SCRIPT_PATH /lang/ -name 'not_tran.txt' -printf 1 -quit | grep -q 1
then
2021-06-23 18:14:30 +00:00
rm $SCRIPT_PATH /lang/not_tran.txt || failures 13
2021-02-12 19:12:37 +00:00
fi
if find $SCRIPT_PATH /lang/ -name 'not_used.txt' -printf 1 -quit | grep -q 1
then
2021-06-23 18:14:30 +00:00
rm $SCRIPT_PATH /lang/not_used.txt || failures 13
2021-02-12 19:12:37 +00:00
fi
#New fresh PF-Firmware-build
if [ " $new_build_flag " = = "1" ] ; then
2021-06-23 18:14:30 +00:00
rm -r -f $BUILD_PATH /* || failures 13
2021-02-12 19:12:37 +00:00
fi
# Restore files to previous state
2022-07-12 06:48:22 +00:00
sed -i -- "s/^#define FW_DEV_VERSION FW_VERSION_.*/#define FW_DEV_VERSION FW_VERSION_UNKNOWN/g" $SCRIPT_PATH /Firmware/Configuration.h
sed -i -- 's/^#define FW_REPOSITORY.*/#define FW_REPOSITORY "Unknown"/g' $SCRIPT_PATH /Firmware/Configuration.h
2021-02-12 19:12:37 +00:00
if [ ! -z " $BUILD_ORG " ] ; then
sed -i -- " s/^#define FW_COMMIT_NR.*/#define FW_COMMIT_NR $BUILD_ORG /g " $SCRIPT_PATH /Firmware/Configuration.h
fi
echo $MULTI_LANGUAGE_CHECK
#sed -i -- "s/^#define LANG_MODE * /#define LANG_MODE $MULTI_LANGUAGE_CHECK/g" $SCRIPT_PATH/Firmware/config.h
sed -i -- " s/^#define LANG_MODE *1/#define LANG_MODE ${ MULTI_LANGUAGE_CHECK } /g " $SCRIPT_PATH /Firmware/config.h
sed -i -- " s/^#define LANG_MODE *0/#define LANG_MODE ${ MULTI_LANGUAGE_CHECK } /g " $SCRIPT_PATH /Firmware/config.h
if [ $OUTPUT = = "1" ] ; then
2021-06-23 18:14:30 +00:00
sleep 2
fi
#Check for "Configuration.tmp" and delete it
if [ -e " $SCRIPT_PATH /Firmware/Configuration.tmp " ] ; then
rm $SCRIPT_PATH /Firmware/Configuration.tmp
fi
#Check for "config.tmp" and delete it
if [ -e " $SCRIPT_PATH /Firmware/config.tmp " ] ; then
rm $SCRIPT_PATH /Firmware/config.tmp
fi
if [ $OUTPUT = = "1" ] ; then
sleep 2
2021-02-12 19:12:37 +00:00
fi
2021-05-03 18:01:48 +00:00
# Restore build env files to previous state
2022-07-12 06:48:22 +00:00
if [ " $BOARD_MEM_MODIFIED " = = "1" ] ; then
2022-02-24 09:44:37 +00:00
sed -i -- " s/^#define FLASHEND .* $/#define FLASHEND 0x3FFFF/g " $BUILD_ENV_PATH /hardware/tools/avr/avr/include/avr/iom2560.h
echo " $( tput setaf 2) Restored Board Mem $( tput sgr 0) "
fi
2022-07-12 06:48:22 +00:00
if [ " $BOARD_FLASH_MODIFIED " = = "1" ] ; then
2022-02-24 09:44:37 +00:00
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
echo " $( tput setaf 2) Restored Board Flash $( tput sgr 0) "
fi
2021-05-03 18:01:48 +00:00
2021-06-23 18:14:30 +00:00
}
#### End: Prepare code for compiling
#done
2019-02-16 05:05:43 +00:00
2021-06-23 18:14:30 +00:00
#### Start: Finish script
# List hex path and list build files
finish_pf-build( )
{
2019-02-16 05:05:43 +00:00
cd $SCRIPT_PATH
2021-06-23 18:14:30 +00:00
cd ..
2019-02-16 05:05:43 +00:00
echo " $( tput setaf 2) "
echo " "
2021-06-23 18:14:30 +00:00
failures 0
2019-02-16 05:05:43 +00:00
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) "
2021-06-23 18:14:30 +00:00
echo
echo "Files:"
ls -r -h $SCRIPT_PATH /../PF-build-hex/FW$FW -Build$BUILD /*
}
#### End: Finish script
#### End: building
2021-02-13 09:35:34 +00:00
2021-06-23 18:14:30 +00:00
####Start: MK404 Simulator
MK404_SIM( )
{
cd $SCRIPT_PATH
2021-02-13 09:35:34 +00:00
# Check/compile MK404 sim
2021-06-23 18:14:30 +00:00
if [ [ " $output_flag " = = "1" || -z " $output_flag " ] ] ; then
2021-06-24 03:50:20 +00:00
if [ [ -z " $mk404_flag " && " $variant_flag " != "All" ] ] ; then
2021-06-23 18:14:30 +00:00
echo
read -t 10 -n 1 -p " Do you want to start MK404? Y/ $( tput setaf 2) n $( tput sgr 0) " mk404_start
2022-01-30 10:01:19 +00:00
if [ [ " $mk404_start " = = "Y" || " $mk404_start " = = "y" ] ] ; then
2021-06-23 18:14:30 +00:00
echo
read -t 10 -n 1 -p " Do you want to start MK404 with or without MMU2S? $( tput setaf 2) 1 $( tput sgr 0) /2 " mk404_choose1
if [ " $mk404_choose1 " = = "1" ] ; then
mk404_flag = 1
elif [ " $mk404_choose1 " = = "2" ] ; then
mk404_flag = 2
2021-07-17 17:06:58 +00:00
else
mk404_flag = 1 #default
2021-06-23 18:14:30 +00:00
fi
echo
echo "Choose MK404 graphics"
echo "0 = no graphics"
echo "1 = lite"
echo "2 = fancy"
echo "3 = lite with Quad_HR"
echo "4 = fancy lite with Quad_HR"
2021-07-17 17:06:58 +00:00
read -t 10 -n 1 -p " Which one do you want? $( tput setaf 2) 0 $( tput sgr 0) /1/2/3/4 " mk404_choose2
2021-06-23 18:14:30 +00:00
if [ " $mk404_choose2 " = = "1" ] ; then
mk404_graphics_flag = 1
elif [ " $mk404_choose2 " = = "2" ] ; then
mk404_graphics_flag = 2
elif [ " $mk404_choose2 " = = "3" ] ; then
mk404_graphics_flag = 3
elif [ " $mk404_choose2 " = = "4" ] ; then
mk404_graphics_flag = 4
2021-07-17 17:06:58 +00:00
elif [ " $mk404_choose2 " = = "0" ] ; then
mk404_graphics_flag = ""
else
mk404_graphics_flag = "" #default
2021-06-23 18:14:30 +00:00
fi
fi
echo
fi
fi
# For MMU2S
if [ [ " $mk404_flag " = = "2" || " $mk404_flag " = = "MMU2" || " $mk404_flag " = = "MMU2S" ] ] ; then # Check if MMU2 is selected only for MK3/S
mk404_flag = 2
fi
2021-06-24 03:50:20 +00:00
if [ [ ! -z " $mk404_flag " && " $variant_flag " != "All " ] ] ; then
2021-02-12 19:12:37 +00:00
2021-05-05 18:05:35 +00:00
# Run MK404 with 'debugcore' and/or 'bootloader-file'
2021-06-21 07:16:19 +00:00
if [ ! -z " $board_mem_flag " ] ; then
MK404_options = " -x $board_mem_flag "
2021-06-18 11:46:25 +00:00
fi
2021-06-21 07:16:19 +00:00
if [ ! -z " $board_flash_flag " ] ; then
MK404_options = " ${ MK404_options } -y $board_flash_flag "
2021-05-03 18:01:48 +00:00
fi
2021-02-13 23:18:24 +00:00
2021-06-22 07:20:48 +00:00
# Run MK404 with graphics
2021-06-23 18:14:30 +00:00
if [ ! -z " $mk404_graphics_flag " ] ; then
if [ [ " $mk404_graphics_flag " = = "1" || " $mk404_graphics_flag " = = "2" || " $mk404_graphics_flag " = = "3" || " $mk404_graphics_flag " = = "4" ] ] ; then
MK404_options = " ${ MK404_options } -g $mk404_graphics_flag "
2021-05-03 18:01:48 +00:00
else
2021-06-23 18:14:30 +00:00
echo " $( tput setaf 1) Unsupported MK404 graphics option $mk404_graphics_flag $( tput sgr 0) "
2021-03-17 17:33:54 +00:00
fi
2021-02-12 19:12:37 +00:00
fi
2021-02-13 09:35:34 +00:00
# Output some useful data
2021-05-03 12:11:03 +00:00
echo " Printer: $MK404_PRINTER "
2021-03-17 17:33:54 +00:00
echo " Options: $MK404_options "
2021-06-18 11:46:25 +00:00
echo ""
2021-06-23 18:14:30 +00:00
#read -t 5 -p "Press $(tput setaf 2)Enter$(tput sgr 0) to start MK404"
2021-06-18 11:46:25 +00:00
echo ""
2021-02-13 09:35:34 +00:00
# Change to MK404 build folder
2021-06-21 07:16:19 +00:00
#cd ../MK404/master/build
2021-02-13 09:35:34 +00:00
2021-02-12 19:12:37 +00:00
2022-09-29 14:39:02 +00:00
#Decide which hex file to use EN_FARM or Multi language
2021-06-23 18:14:30 +00:00
if [ " $LANGUAGES " = = "ALL" ] ; then
2022-02-09 08:41:11 +00:00
if [ [ " $MK404_PRINTER " = = "MK3" || " $MK404_PRINTER " = = "MK3S" ] ] ; then
MK404_firmware_file = $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME .hex
else
PS3 = "Select a language:"
select lan in ${ langs [@] }
do
MK404_firmware_file = $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME -$lan .hex
break
done
fi
2021-06-23 18:14:30 +00:00
else
2022-09-29 14:39:02 +00:00
MK404_firmware_file = $SCRIPT_PATH /../$OUTPUT_FOLDER /$OUTPUT_FILENAME -EN_FARM.hex
2021-06-23 18:14:30 +00:00
fi
2021-04-30 23:30:03 +00:00
2021-02-13 09:35:34 +00:00
# Start MK404
# default with serial output and terminal to manipulate it via terminal
2021-06-21 07:16:19 +00:00
#echo ""
#echo "./MK404 Prusa_$MK404_PRINTER -s --terminal $MK404_options -f $MK404_firmware_file"
#sleep 5
#./MK404 Prusa_$MK404_PRINTER -s --terminal $MK404_options -f $MK404_firmware_file || exit 62
2021-06-18 11:46:25 +00:00
echo ""
2021-06-21 07:16:19 +00:00
echo " ./MK404-build.sh -m $mk404_flag -p $MK404_PRINTER $MK404_options -f $MK404_firmware_file "
2021-06-23 18:14:30 +00:00
if [ $OUTPUT = = "1" ] ; then
sleep 2
fi
./MK404-build.sh -m $mk404_flag -p $MK404_PRINTER $MK404_options -f $MK404_firmware_file || failures 25
2021-02-12 19:12:37 +00:00
fi
2021-06-23 18:14:30 +00:00
}
#### End: MK404 Simulator
#### Check OS and needed apps
echo "Check OS"
check_OS
check_wget
check_zip
check_python
#### Check for options/flags
echo "Check for options"
#### Prepare build environment
echo "Prepare build env"
get_arguments
set_build_env_variables
output_useful_data
check_create_build_folders
#### Download/set needed apps and dependencies
download_prepare_arduinoIDE
portable_ArduinoIDE
change_ArduinoIDEpreferances
download_prepare_Prusa_build_files
check_ArduinoIDE_User_interaction
#### Start
set_paths
check_branch_changed
for v in ${ VARIANTS [*] }
do
check_script_failed_nr1
check_script_failed_nr2
make_backup1
make_backup2
prepare_code_for_compiling
prepare_hex_folders
list_usefull_data
prepare_variant_for_compiling
compile_en_firmware
if [ $LANGUAGES = = "ALL" ] ; then
create_multi_firmware
else
save_en_firmware
fi
cleanup_firmware
done
finish_pf-build
2021-06-24 05:29:54 +00:00
if [ $TARGET_OS = = "linux" ] ; then
MK404_SIM
2022-01-30 10:01:19 +00:00
fi