|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
####
|
|
|
|
# Copyright (C) 2017 AlephObjects, Inc.
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# The bash script in this page is free software: you can
|
|
|
|
# redistribute it and/or modify it under the terms of the GNU Affero
|
|
|
|
# General Public License (GNU AGPL) as published by the Free Software
|
|
|
|
# Foundation, either version 3 of the License, or (at your option)
|
|
|
|
# any later version. The code is distributed WITHOUT ANY WARRANTY;
|
|
|
|
# without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
|
|
# FOR A PARTICULAR PURPOSE. See the GNU AGPL for more details.
|
|
|
|
#
|
|
|
|
|
|
|
|
####
|
|
|
|
# The following variables list the models and toolheads to build for:
|
|
|
|
|
|
|
|
MINI_MODELS="Gladiola_Mini Hibiscus_Mini2 Gladiola_MiniLCD Hibiscus_Mini2LCD"
|
|
|
|
MINI_TOOLHEADS="Gladiola_SingleExtruder Albatross_Flexystruder Finch_Aerostruder"
|
|
|
|
|
|
|
|
TAZ_MODELS="Juniper_TAZ5 Oliveoil_TAZ6 Quiver_TAZ7"
|
|
|
|
TAZ_TOOLHEADS="Tilapia_SingleExtruder Kanyu_Flexystruder Opah_Moarstruder Javelin_DualExtruderV2 Longfin_FlexyDually Yellowfin_DualExtruderV3 Angelfish_Aerostruder"
|
|
|
|
|
|
|
|
####
|
|
|
|
# usage
|
|
|
|
#
|
|
|
|
# Prints out a usage summary
|
|
|
|
#
|
|
|
|
usage() {
|
|
|
|
echo
|
|
|
|
echo "Usage: $0 [-s|--short-names] [--no-timestamps] [-c|--config] [printer_model toolhead_name]"
|
|
|
|
echo
|
|
|
|
echo " -s|--short-names Omits LulzBot code names from generated .hex files"
|
|
|
|
echo
|
|
|
|
echo " --no-timestamps Does not embed a timestamp in the .hex file."
|
|
|
|
echo
|
|
|
|
echo " -c|--config Rather than compiling a .hex file, dump out the values"
|
|
|
|
echo " in 'Configuration.h' and 'Configuration_adv.h' that are"
|
|
|
|
echo " to be used for the specified printer and toolhead."
|
|
|
|
echo
|
|
|
|
exit
|
|
|
|
}
|
|
|
|
|
|
|
|
####
|
|
|
|
# build_firmware <printer> <toolhead>
|
|
|
|
#
|
|
|
|
# Compiles firmware for the specified printer and toolhead
|
|
|
|
#
|
|
|
|
build_firmware() {
|
|
|
|
printer=$1
|
|
|
|
toolhead=$2
|
|
|
|
echo
|
|
|
|
echo Building for ${printer} and ${toolhead}
|
|
|
|
echo
|
|
|
|
(cd Marlin; make clean; make $MAKEOPTS AVR_TOOLS_PATH=${AVR_TOOLS_PATH}/ MODEL=${printer} TOOLHEAD=${toolhead}) || exit
|
|
|
|
mv Marlin/applet/*.hex build
|
|
|
|
}
|
|
|
|
|
|
|
|
####
|
|
|
|
# build_config <printer> <toolhead>
|
|
|
|
#
|
|
|
|
# Compiles Configuration.h and Configuration_adv.h for the specified printer and toolhead
|
|
|
|
#
|
|
|
|
build_config() {
|
|
|
|
printer=$1
|
|
|
|
toolhead=$2
|
|
|
|
echo
|
|
|
|
echo Generating config for ${printer} and ${toolhead}
|
|
|
|
echo
|
|
|
|
(cd Marlin; make clean; make $MAKEOPTS AVR_TOOLS_PATH=${AVR_TOOLS_PATH}/ MODEL=${printer} TOOLHEAD=${toolhead} config) || exit
|
|
|
|
}
|
|
|
|
|
|
|
|
####
|
|
|
|
# check_tool <exec_name>
|
|
|
|
#
|
|
|
|
# Checks whether a tool exists in the AVR_TOOLS_PATH
|
|
|
|
#
|
|
|
|
check_tool() {
|
|
|
|
if [ ! -x "$AVR_TOOLS_PATH/$1" ]; then
|
|
|
|
echo Cannot locate $1 in $AVR_TOOLS_PATH.
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
####
|
|
|
|
# locate_avr_tools
|
|
|
|
#
|
|
|
|
# Attempts to locate the avr tools, otherwise prompts
|
|
|
|
# the user for a location.
|
|
|
|
#
|
|
|
|
locate_avr_tools() {
|
|
|
|
AVR_OBJCOPY=`which avr-objcopy`
|
|
|
|
if [ $? -eq 0 ]; then
|
|
|
|
AVR_TOOLS_PATH=`dirname $AVR_OBJCOPY`
|
|
|
|
fi
|
|
|
|
while [ ! -x $AVR_TOOLS_PATH/avr-gcc ]
|
|
|
|
do
|
|
|
|
echo
|
|
|
|
echo avr-gcc tools not found!
|
|
|
|
echo
|
|
|
|
read -p "Type path to avr-gcc tools: " AVR_TOOLS_PATH
|
|
|
|
if [ -z $AVR_TOOLS_PATH ]; then
|
|
|
|
echo Aborting.
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
####
|
|
|
|
# check_avr_tools
|
|
|
|
#
|
|
|
|
# Verify that all the AVR tools we need exist in the located
|
|
|
|
# directory.
|
|
|
|
#
|
|
|
|
check_avr_tools() {
|
|
|
|
echo
|
|
|
|
echo Using $AVR_TOOLS_PATH for avr-gcc tools.
|
|
|
|
echo
|
|
|
|
|
|
|
|
check_tool avr-gcc
|
|
|
|
check_tool avr-objcopy
|
|
|
|
check_tool avr-g++
|
|
|
|
check_tool avr-objdump
|
|
|
|
check_tool avr-ar
|
|
|
|
check_tool avr-size
|
|
|
|
}
|
|
|
|
|
|
|
|
####
|
|
|
|
# build_for_mini
|
|
|
|
#
|
|
|
|
# Build all the toolhead variants for the mini
|
|
|
|
#
|
|
|
|
build_for_mini() {
|
|
|
|
for model in $MINI_MODELS
|
|
|
|
do
|
|
|
|
for toolhead in $MINI_TOOLHEADS
|
|
|
|
do
|
|
|
|
build_firmware ${model} ${toolhead}
|
|
|
|
done
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
####
|
|
|
|
# build_for_taz
|
|
|
|
#
|
|
|
|
# Build all the toolhead variants for the TAZ
|
|
|
|
#
|
|
|
|
build_for_taz() {
|
|
|
|
for model in $TAZ_MODELS
|
|
|
|
do
|
|
|
|
for toolhead in $TAZ_TOOLHEADS
|
|
|
|
do
|
|
|
|
build_firmware ${model} ${toolhead}
|
|
|
|
done
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
####
|
|
|
|
# build_summary
|
|
|
|
#
|
|
|
|
# Print out a summary of hex files that were created
|
|
|
|
#
|
|
|
|
build_summary() {
|
|
|
|
echo
|
|
|
|
echo
|
|
|
|
echo
|
|
|
|
echo Generated files stored in "`pwd`/build":
|
|
|
|
echo
|
|
|
|
ls build
|
|
|
|
echo
|
|
|
|
}
|
|
|
|
|
|
|
|
############################################
|
|
|
|
# MAIN SCRIPT
|
|
|
|
############################################
|
|
|
|
|
|
|
|
while true
|
|
|
|
do
|
|
|
|
case $1 in
|
|
|
|
--no-timestamps)
|
|
|
|
MAKEOPTS="NO_TIMESTAMP=1"
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
--short-names|-s)
|
|
|
|
SHORTNAMES=1
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
--config|-c)
|
|
|
|
GENERATE_CONFIG=1
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
--*)
|
|
|
|
usage
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
break
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
locate_avr_tools
|
|
|
|
check_avr_tools
|
|
|
|
|
|
|
|
rm -rf build
|
|
|
|
mkdir build
|
|
|
|
|
|
|
|
if [ $# -eq 2 ]
|
|
|
|
then
|
|
|
|
if [ $GENERATE_CONFIG ]; then
|
|
|
|
build_config $1 $2
|
|
|
|
else
|
|
|
|
build_firmware $1 $2
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
build_for_mini
|
|
|
|
build_for_taz
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ $SHORTNAMES ]; then
|
|
|
|
rename 's/Marlin_(.+)_(.+)_(.+)_(.+)_(.+)_(.+).hex/Marlin_$2_$4_$5_$6.hex/' build/*
|
|
|
|
fi
|
|
|
|
|
|
|
|
build_summary
|