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