@@ -118,53 +118,75 @@ build_example () {
118118 local EXAMPLE_DIR=$( dirname " ${MAKE_FILE} " )
119119 local EXAMPLE_NAME=$( basename " ${EXAMPLE_DIR} " )
120120
121- local EXAMPLE_BUILD_DIR= " ${ID} _ ${EXAMPLE_NAME} "
121+ local EXAMPLE_BUILD_DIRS=()
122122
123- if [[ -f " example_builds/${EXAMPLE_BUILD_DIR} /build/ci_build_success" ]]; then
124- echo " Project ${EXAMPLE_BUILD_DIR} has been built and skip building ..."
123+ # count number of CI sdkconfig files
124+ SDKCONFIG_CI_FILES=$( find ${EXAMPLE_DIR} / -type f -name sdkconfig.ci.* | sort )
125+ if [[ -z ${SDKCONFIG_CI_FILES} ]]; then
126+ EXAMPLE_BUILD_DIRS[0]=" ${ID} _${EXAMPLE_NAME} "
125127 else
126- echo " Building ${EXAMPLE_BUILD_DIR} ..."
127- mkdir -p " example_builds/${EXAMPLE_BUILD_DIR} "
128- cp -r " ${EXAMPLE_DIR} /" * " example_builds/${EXAMPLE_BUILD_DIR} /"
129- pushd " example_builds/${EXAMPLE_BUILD_DIR} "
130- # be stricter in the CI build than the default IDF settings
131- export EXTRA_CFLAGS=" -Werror -Werror=deprecated-declarations"
132- export EXTRA_CXXFLAGS=${EXTRA_CFLAGS}
133-
134- # sdkconfig files are normally not checked into git, but may be present when
135- # a developer runs this script locally
136- rm -f sdkconfig
137-
138- # If sdkconfig.ci file is present, append it to sdkconfig.defaults,
139- # replacing environment variables
140- if [[ -f " $SDKCONFIG_DEFAULTS_CI " ]]; then
141- cat $SDKCONFIG_DEFAULTS_CI | $IDF_PATH /tools/ci/envsubst.py >> sdkconfig.defaults
142- fi
143-
144- # build non-verbose first
145- local BUILDLOG=${LOG_PATH} /ex_${EXAMPLE_BUILD_DIR} _log.txt
146- touch ${BUILDLOG}
147-
148- local FLASH_ARGS=build/download.config
149-
150- make clean >> ${BUILDLOG} 2>&1 &&
151- make defconfig >> ${BUILDLOG} 2>&1 &&
152- make all -j4 >> ${BUILDLOG} 2>&1 &&
153- make ota >> ${BUILDLOG} 2>&1 &&
154- make print_flash_cmd > ${FLASH_ARGS} .full 2>> ${BUILDLOG} &&
155- touch build/ci_build_success ||
156- {
157- RESULT=$? ; FAILED_EXAMPLES+=" ${EXAMPLE_NAME} " ;
158- }
159-
160- tail -n 1 ${FLASH_ARGS} .full > ${FLASH_ARGS} || :
161- test -s ${FLASH_ARGS} || die " Error: ${FLASH_ARGS} file is empty"
162-
163- cat ${BUILDLOG}
164- popd
165-
166- grep -i " error\|warning" " ${BUILDLOG} " 2>&1 >> " ${LOG_SUSPECTED} " || :
128+ COUNT=0
129+ for CI_FILE in ${SDKCONFIG_CI_FILES}
130+ do
131+ EXAMPLE_BUILD_DIRS[COUNT]=" ${ID} _${EXAMPLE_NAME} _${CI_FILE##* .} "
132+ COUNT=$(( $COUNT + 1 ))
133+ done
167134 fi
135+
136+ for EXAMPLE_BUILD_DIR in ${EXAMPLE_BUILD_DIRS[*]}
137+ do
138+ if [[ -f " example_builds/${EXAMPLE_BUILD_DIR} /build/ci_build_success" ]]; then
139+ echo " Project ${EXAMPLE_BUILD_DIR} has been built and skip building ..."
140+ else
141+ echo " Building ${EXAMPLE_BUILD_DIR} ..."
142+ mkdir -p " example_builds/${EXAMPLE_BUILD_DIR} "
143+ cp -r " ${EXAMPLE_DIR} /" * " example_builds/${EXAMPLE_BUILD_DIR} /"
144+
145+ if [[ -n ${SDKCONFIG_CI_FILES} ]]; then
146+ cp " example_builds/${EXAMPLE_BUILD_DIR} /sdkconfig.ci.${EXAMPLE_BUILD_DIR##* _} " " example_builds/${EXAMPLE_BUILD_DIR} /sdkconfig.ci"
147+ rm example_builds/${EXAMPLE_BUILD_DIR} /sdkconfig.ci.*
148+ fi
149+
150+ pushd " example_builds/${EXAMPLE_BUILD_DIR} "
151+ # be stricter in the CI build than the default IDF settings
152+ export EXTRA_CFLAGS=" -Werror -Werror=deprecated-declarations"
153+ export EXTRA_CXXFLAGS=${EXTRA_CFLAGS}
154+
155+ # sdkconfig files are normally not checked into git, but may be present when
156+ # a developer runs this script locally
157+ rm -f sdkconfig
158+
159+ # If sdkconfig.ci file is present, append it to sdkconfig.defaults,
160+ # replacing environment variables
161+ if [[ -f " $SDKCONFIG_DEFAULTS_CI " ]]; then
162+ cat $SDKCONFIG_DEFAULTS_CI | $IDF_PATH /tools/ci/envsubst.py >> sdkconfig.defaults
163+ fi
164+
165+ # build non-verbose first
166+ local BUILDLOG=${LOG_PATH} /ex_${EXAMPLE_BUILD_DIR} _log.txt
167+ touch ${BUILDLOG}
168+
169+ local FLASH_ARGS=build/download.config
170+
171+ make clean >> ${BUILDLOG} 2>&1 &&
172+ make defconfig >> ${BUILDLOG} 2>&1 &&
173+ make all -j4 >> ${BUILDLOG} 2>&1 &&
174+ make ota >> ${BUILDLOG} 2>&1 &&
175+ make print_flash_cmd > ${FLASH_ARGS} .full 2>> ${BUILDLOG} &&
176+ touch build/ci_build_success ||
177+ {
178+ RESULT=$? ; FAILED_EXAMPLES+=" ${EXAMPLE_NAME} " ;
179+ }
180+
181+ tail -n 1 ${FLASH_ARGS} .full > ${FLASH_ARGS} || :
182+ test -s ${FLASH_ARGS} || die " Error: ${FLASH_ARGS} file is empty"
183+
184+ cat ${BUILDLOG}
185+ popd
186+
187+ grep -i " error\|warning" " ${BUILDLOG} " 2>&1 >> " ${LOG_SUSPECTED} " || :
188+ fi
189+ done
168190}
169191
170192EXAMPLE_NUM=0
0 commit comments