79ec2ad886
posibility to continue in case of missing texts (IGNORE_MISSING_TEXT)
117 lines
3.2 KiB
Bash
117 lines
3.2 KiB
Bash
#!/bin/sh
|
|
# postbuild.sh - multi-language support high-level script
|
|
# for generating binary with secondary language
|
|
#
|
|
# Input files:
|
|
# $OUTDIR/Firmware.ino.elf
|
|
# $OUTDIR/sketch/*.o (all object files)
|
|
#
|
|
# Output files:
|
|
# text.sym
|
|
# $PROGMEM.sym (progmem1.sym)
|
|
# $PROGMEM.lss (...)
|
|
# $PROGMEM.hex
|
|
# $PROGMEM.chr
|
|
# $PROGMEM.var
|
|
# $PROGMEM.txt
|
|
# textaddr.txt
|
|
#
|
|
# Output folder and elf file:
|
|
OUTDIR="../../output"
|
|
OUTELF="$OUTDIR/Firmware.ino.elf"
|
|
#
|
|
# AVR gcc tools used:
|
|
OBJCOPY=C:/arduino-1.6.8/hardware/tools/avr/bin/avr-objcopy.exe
|
|
#
|
|
# Selected language:
|
|
LANG=$1
|
|
#if [ -z "$LANG" ]; then LANG='cz'; fi
|
|
#
|
|
# Params:
|
|
IGNORE_MISSING_TEXT=0
|
|
|
|
function finish
|
|
{
|
|
echo
|
|
if [ "$1" == "0" ]; then
|
|
echo "postbuild.sh finished with success" >&2
|
|
else
|
|
echo "postbuild.sh finished with errors!" >&2
|
|
fi
|
|
case "$-" in
|
|
*i*) echo "press enter key"; read ;;
|
|
esac
|
|
exit $1
|
|
}
|
|
|
|
echo "postbuild.sh started" >&2
|
|
|
|
#check input files
|
|
echo " checking files:" >&2
|
|
if [ ! -e $OUTDIR ]; then echo " folder '$OUTDIR' not found!" >&2; finish 1; fi
|
|
echo " folder OK" >&2
|
|
if [ ! -e $OUTELF ]; then echo " elf file '$OUTELF' not found!" >&2; finish 1; fi
|
|
echo " elf OK" >&2
|
|
if ! ls $OUTDIR/sketch/*.o >/dev/null 2>&1; then echo " no object files in '$OUTDIR/sketch/'!" >&2; finish 1; fi
|
|
echo " objects OK" >&2
|
|
|
|
#run progmem.sh - examine content of progmem1
|
|
echo -n " running progmem.sh..." >&2
|
|
./progmem.sh 1 2>progmem.out
|
|
if [ $? -ne 0 ]; then echo "NG! - check progmem.out file" >&2; finish 1; fi
|
|
echo "OK" >&2
|
|
|
|
#run textaddr.sh - map progmem addreses to text identifiers
|
|
echo -n " running textaddr.sh..." >&2
|
|
./textaddr.sh 2>textaddr.out
|
|
if [ $? -ne 0 ]; then echo "NG! - check progmem.out file" >&2; finish 1; fi
|
|
echo "OK" >&2
|
|
|
|
#check for messages declared in progmem1, but not found in lang_en.txt
|
|
echo -n " checking textaddr.txt..." >&2
|
|
if cat textaddr.txt | grep "^ADDR NF" >/dev/null; then
|
|
echo "NG! - some texts not found in lang_en.txt!"
|
|
if [ $(("0$IGNORE_MISSING_TEXT")) -eq 0 ]; then
|
|
finish 1
|
|
else
|
|
echo " missing text ignored!" >&2
|
|
fi
|
|
else
|
|
echo "OK" >&2
|
|
fi
|
|
|
|
#update progmem1 id entries in binary file
|
|
echo -n " extracting binary..." >&2
|
|
$OBJCOPY -I ihex -O binary $OUTDIR/Firmware.ino.hex ./firmware.bin
|
|
echo "OK" >&2
|
|
|
|
#update binary file
|
|
echo " updating binary:" >&2
|
|
|
|
#update progmem1 id entries in binary file
|
|
echo -n " primary language ids..." >&2
|
|
cat textaddr.txt | grep "^ADDR OK" | cut -f3- -d' ' | sed "s/^0000/0x/" |\
|
|
awk '{ id = $2 - 1; hi = int(id / 256); lo = int(id - 256 * hi); printf("%d \\\\x%02x\\\\x%02x\n", strtonum($1), lo, hi); }' |\
|
|
while read addr data; do
|
|
echo -n -e $data | dd of=./firmware.bin bs=1 count=2 seek=$addr conv=notrunc oflag=nonblock 2>/dev/null
|
|
done
|
|
echo "OK" >&2
|
|
|
|
#update _SEC_LANG in binary file if language is selected
|
|
echo -n " secondary language data..." >&2
|
|
if [ ! -z "$LANG" ]; then
|
|
./update_lang.sh $LANG 2>./update_lang.out
|
|
if [ $? -ne 0 ]; then echo "NG! - check update_lang.out file" >&2; finish 1; fi
|
|
echo "OK" >&2
|
|
finish 0
|
|
else
|
|
echo "skipped" >&2
|
|
fi
|
|
|
|
#convert bin to hex
|
|
echo -n " converting to hex..." >&2
|
|
$OBJCOPY -I binary -O ihex ./firmware.bin ./firmware.hex
|
|
echo "OK" >&2
|
|
|
|
finish 0
|