esp-idf/make/build_examples.sh
Angus Gratton f29768c404 Build system: Add new BATCH_BUILD flag to disable interactive parts of the build
Mostly useful for Eclipse (where accidentally running interactive
config hangs the build), but also good for CI and other automated
build systems.
2017-02-22 11:59:37 +11:00

63 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
#
# Build all examples from the examples directory, out of tree to
# ensure they can run when copied to a new directory.
#
# Runs as part of CI process.
#
# Assumes CWD is an out-of-tree build directory, and will copy examples to individual subdirectories, one by one.
#
[ -z ${IDF_PATH} ] && echo "IDF_PATH is not set" && exit 1
export BATCH_BUILD=1
export V=0 # only build verbose if there's an error
EXAMPLE_NUM=1
RESULT=0
FAILED_EXAMPLES=""
RESULT_WARNINGS=22 # magic number result code for "warnings found"
# traverse categories
for category in ${IDF_PATH}/examples/*; do
# traverse examples within each category
for example in ${category}/*; do
[ -f ${example}/Makefile ] || continue
echo "Building ${example} as ${EXAMPLE_NUM}..."
mkdir -p example_builds/${EXAMPLE_NUM}
cp -r ${example} example_builds/${EXAMPLE_NUM}
pushd example_builds/${EXAMPLE_NUM}/`basename ${example}`
# be stricter in the CI build than the default IDF settings
export EXTRA_CFLAGS="-Werror -Werror=deprecated-declarations"
export EXTRA_CXXFLAGS=${EXTRA_CFLAGS}
# build non-verbose first
BUILDLOG=$(mktemp -t examplebuild.XXXX.log)
(
set -o pipefail # so result of make all isn't lost when piping to tee
set -e
make clean defconfig
make $* all 2>&1 | tee $BUILDLOG
) || { RESULT=$?; FAILED_EXAMPLES+=" ${example}"; make V=1; } # verbose output for errors
popd
EXAMPLE_NUM=$(( $EXAMPLE_NUM + 1 ))
if grep -q ": warning:" $BUILDLOG; then
[ $RESULT -eq 0 ] && RESULT=$RESULT_WARNINGS
FAILED_EXAMPLES+=" ${example} (warnings)"
fi
rm -f $BUILDLOG
done
done
if [ $RESULT -eq $RESULT_WARNINGS ]; then
echo "Build would have passed, except for warnings."
fi
[ $RESULT -eq 0 ] || echo "Failed examples: $FAILED_EXAMPLES"
exit $RESULT