Enable -werror & wrap malloc

Preventing accidental use of dynamic memory
This commit is contained in:
Ben V. Brown
2020-05-30 11:39:58 +10:00
parent 341d7b1d5a
commit e422fe28ae
2 changed files with 49 additions and 62 deletions

View File

@@ -66,7 +66,6 @@ LDSCRIPT=LinkerScript.ld
# ------------------------------------------------------------------------------
COMPILER=gcc
# arm-none is the general ARM compiler,
# arm-atollic is the atollic customised compilers if you have them setup
COMPILER_PREFIX=arm-none
# programs ---------------------------------------------------------------------
CC=$(COMPILER_PREFIX)-eabi-gcc
@@ -84,6 +83,8 @@ SREC_INFO=srec_info
# linker flags -----------------------------------------------------------------
LINKER_FLAGS=-Wl,--gc-sections \
-Wl,--wrap=malloc \
-Wl,--wrap=free \
-o$(OUT_HEXFILE).elf \
-Wl,-Map=$(OUT_HEXFILE).map \
-mcpu=cortex-m3 \
@@ -128,7 +129,8 @@ CHECKOPTIONS= -Wall \
-Winline \
-Wshadow \
-Wno-unused-parameter \
-Wdouble-promotion
-Wdouble-promotion \
-Werror
CHECKOPTIONS_C= -Wbad-function-cast

View File

@@ -9,9 +9,8 @@ BUILD_LANGUAGES=()
AVAILABLE_MODELS=("TS100" "TS80")
BUILD_MODELS=()
usage ()
{
echo "Usage : $(basename "$0") [-l <LANG_CODE>] [-m <TS100|TS80>] [-h]
usage() {
echo "Usage : $(basename "$0") [-l <LANG_CODE>] [-m <TS100|TS80>] [-h]
Parameters :
-l LANG_CODE : Force a specific language (E.g. : EN, FR, NL_BE, ...)
@@ -19,59 +18,53 @@ Parameters :
-h : Show this help message
INFO : By default, without parameters, the build is for all platforms and all languages" 1>&2
exit 1
exit 1
}
checkLastCommand ()
{
if [ $? -eq 0 ]
then
checkLastCommand() {
if [ $? -eq 0 ]; then
echo " [Success]"
echo "*********************************************"
else
forceExit
fi
fi
}
forceExit ()
{
forceExit() {
echo " [Error]"
echo "*********************************************"
echo " -- Stop on error --"
exit 1
}
isInArray ()
{
isInArray() {
local value="$1" # Save first argument in a variable
shift # Shift all arguments to the left (original $1 gets lost)
local array=("$@") # Rebuild the array with rest of arguments
for item in "${array[@]}"
do
for item in "${array[@]}"; do
[[ $value == "$item" ]] && return 0
done
return 1
}
while getopts h:l:m: option
do
while getopts h:l:m: option; do
case "${option}" in
h)
usage
;;
l)
LANGUAGEREQ=${OPTARG}
;;
m)
MODEL=${OPTARG}
;;
*)
usage
;;
h)
usage
;;
l)
LANGUAGEREQ=${OPTARG}
;;
m)
MODEL=${OPTARG}
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
shift $((OPTIND - 1))
echo "*********************************************"
echo " Builder for the"
@@ -82,27 +75,24 @@ echo " "
echo "*********************************************"
# Calculate available languages
for f in "$TRANSLATION_DIR"/translation_*.json
do
AVAILABLE_LANGUAGES+=(`echo $f | tr "[:lower:]" "[:upper:]" | sed "s/[^_]*_//" | sed "s/\.JSON//g"`)
done
for f in "$TRANSLATION_DIR"/translation_*.json; do
AVAILABLE_LANGUAGES+=($(echo $f | tr "[:lower:]" "[:upper:]" | sed "s/[^_]*_//" | sed "s/\.JSON//g"))
done
# Checking requested language
echo "Available languages :"
echo " ${AVAILABLE_LANGUAGES[*]}"
echo "Requested languages :"
if [ -n "$LANGUAGEREQ" ]
then
if isInArray "$LANGUAGEREQ" "${AVAILABLE_LANGUAGES[@]}"
then
echo " $LANGUAGEREQ"
if [ -n "$LANGUAGEREQ" ]; then
if isInArray "$LANGUAGEREQ" "${AVAILABLE_LANGUAGES[@]}"; then
echo " $LANGUAGEREQ"
BUILD_LANGUAGES+=("$LANGUAGEREQ")
else
echo " $LANGUAGEREQ doesn't exist"
echo " $LANGUAGEREQ doesn't exist"
forceExit
fi
else
echo " [ALL LANGUAGES]"
echo " [ALL LANGUAGES]"
BUILD_LANGUAGES+=("${AVAILABLE_LANGUAGES[@]}")
fi
echo "*********************************************"
@@ -111,26 +101,23 @@ echo "*********************************************"
echo "Available models :"
echo " ${AVAILABLE_MODELS[*]}"
echo "Requested models :"
if [ -n "$MODEL" ]
then
if isInArray "$MODEL" "${AVAILABLE_MODELS[@]}"
then
echo " $MODEL"
if [ -n "$MODEL" ]; then
if isInArray "$MODEL" "${AVAILABLE_MODELS[@]}"; then
echo " $MODEL"
BUILD_MODELS+=("$MODEL")
else
echo " $MODEL doesn't exist"
echo " $MODEL doesn't exist"
forceExit
fi
else
echo " [ALL MODELS]"
echo " [ALL MODELS]"
BUILD_MODELS+=("${AVAILABLE_MODELS[@]}")
fi
echo "*********************************************"
if [ ${#BUILD_LANGUAGES[@]} -gt 0 ] && [ ${#BUILD_MODELS[@]} -gt 0 ]
then
if [ ${#BUILD_LANGUAGES[@]} -gt 0 ] && [ ${#BUILD_MODELS[@]} -gt 0 ]; then
echo "Generating Translation.cpp"
python3 "$TRANSLATION_DIR/$TRANSLATION_SCRIPT" "$TRANSLATION_DIR"
python3 "$TRANSLATION_DIR/$TRANSLATION_SCRIPT" "$TRANSLATION_DIR"
checkLastCommand
echo "Cleaning previous builds"
@@ -139,20 +126,18 @@ then
make clean >/dev/null
checkLastCommand
for model in "${BUILD_MODELS[@]}"
do
for lang in "${BUILD_LANGUAGES[@]}"
do
for model in "${BUILD_MODELS[@]}"; do
for lang in "${BUILD_LANGUAGES[@]}"; do
echo "Building firmware for $model in $lang"
make -j lang="$lang" model="$model" >/dev/null
checkLastCommand
echo "Cleanup Temp files 1 for $model in $lang"
rm -rf Objects/Core >/dev/null
checkLastCommand
echo "Cleanup Temp files 2 for $model in $lang"
rm -rf Objects/Src >/dev/null
echo "Cleanup Temp files for $model in $lang"
rm -rf Objects/Core/ >/dev/null
checkLastCommand
done
echo "Cleanup model change"
rm -rf Objects/ >/dev/null
checkLastCommand
done
else
echo "Nothing to build. (no model or language specified)"