You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

225 lines
4.6 KiB

#!/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