diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6e4c2ecca..6b636e0ce 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -141,15 +141,18 @@ build_esp_idf_tests: .build_examples_template: &build_examples_template <<: *build_template artifacts: + when: always paths: - build_examples/*/*/*/build/*.bin - build_examples/*/*/*/build/*.elf - build_examples/*/*/*/build/*.map - build_examples/*/*/*/build/download.config - build_examples/*/*/*/build/bootloader/*.bin + - $LOG_PATH expire_in: 1 week variables: IDF_CI_BUILD: "1" + LOG_PATH: "$CI_PROJECT_DIR/log_examples" script: # it's not possible to build 100% out-of-tree and have the "artifacts" # mechanism work, but this is the next best thing @@ -157,6 +160,7 @@ build_esp_idf_tests: - mkdir build_examples - cd build_examples # build some of examples + - mkdir -p ${LOG_PATH} - ${IDF_PATH}/tools/ci/build_examples.sh "${CI_JOB_NAME}" build_examples_00: diff --git a/components/bootloader/Makefile.projbuild b/components/bootloader/Makefile.projbuild index db7f4f0a2..7876635cc 100644 --- a/components/bootloader/Makefile.projbuild +++ b/components/bootloader/Makefile.projbuild @@ -121,4 +121,6 @@ endif bootloader-clean: $(SDKCONFIG_MAKEFILE) $(BOOTLOADER_MAKE) app-clean +ifdef CONFIG_SECURE_BOOTLOADER_REFLASHABLE rm -f $(SECURE_BOOTLOADER_KEY) $(BOOTLOADER_DIGEST_BIN) +endif diff --git a/components/partition_table/Makefile.projbuild b/components/partition_table/Makefile.projbuild index ddcd8471b..a7d4f2ecd 100644 --- a/components/partition_table/Makefile.projbuild +++ b/components/partition_table/Makefile.projbuild @@ -21,8 +21,7 @@ ifndef PARTITION_TABLE_CSV_PATH # Path to partition CSV file is relative to project path for custom # partition CSV files, but relative to component dir otherwise. PARTITION_TABLE_ROOT := $(call dequote,$(if $(CONFIG_PARTITION_TABLE_CUSTOM),$(PROJECT_PATH),$(COMPONENT_PATH))) -quote := " -PARTITION_TABLE_CSV_PATH := $(call dequote,$(abspath $(PARTITION_TABLE_ROOT)/$(subst $(quote),,$(CONFIG_PARTITION_TABLE_FILENAME)))) +PARTITION_TABLE_CSV_PATH := $(call dequote,$(abspath $(PARTITION_TABLE_ROOT)/$(call dequote,$(CONFIG_PARTITION_TABLE_FILENAME)))) endif PARTITION_TABLE_CSV_NAME := $(notdir $(PARTITION_TABLE_CSV_PATH)) diff --git a/make/project.mk b/make/project.mk index d2eefad7b..b9a04a3b3 100644 --- a/make/project.mk +++ b/make/project.mk @@ -11,6 +11,8 @@ # .PHONY: build-components menuconfig defconfig all build clean all_binaries check-submodules size size-components size-files list-components + +MAKECMDGOALS ?= all all: all_binaries # see below for recipe of 'all' target # @@ -326,20 +328,19 @@ endif export CFLAGS CPPFLAGS CXXFLAGS +# Set default values that were not previously defined +CC ?= gcc +LD ?= ld +AR ?= ar +OBJCOPY ?= objcopy +SIZE ?= size + # Set host compiler and binutils HOSTCC := $(CC) HOSTLD := $(LD) HOSTAR := $(AR) -ifdef OBJCOPY HOSTOBJCOPY := $(OBJCOPY) -else -HOSTOBJCOPY := objcopy -endif -ifdef SIZE HOSTSIZE := $(SIZE) -else -HOSTSIZE := size -endif export HOSTCC HOSTLD HOSTAR HOSTOBJCOPY SIZE # Set target compiler. Defaults to whatever the user has diff --git a/tools/ci/build_examples.sh b/tools/ci/build_examples.sh index 5da652096..3d31e07d6 100755 --- a/tools/ci/build_examples.sh +++ b/tools/ci/build_examples.sh @@ -43,6 +43,7 @@ die() { } [ -z ${IDF_PATH} ] && die "IDF_PATH is not set" +[ -z ${LOG_PATH} ] && die "LOG_PATH is not set" echo "build_examples running in ${PWD}" @@ -53,11 +54,11 @@ export BATCH_BUILD=1 export V=0 # only build verbose if there's an error shopt -s lastpipe # Workaround for Bash to use variables in loops (http://mywiki.wooledge.org/BashFAQ/024) + RESULT=0 FAILED_EXAMPLES="" - -RESULT_WARNINGS=22 # magic number result code for "warnings found" -LOG_WARNINGS=${PWD}/build_warnings.log +RESULT_ISSUES=22 # magic number result code for issues found +LOG_SUSPECTED=${LOG_PATH}/common_log.txt if [ $# -eq 0 ] then @@ -114,26 +115,18 @@ build_example () { export EXTRA_CXXFLAGS=${EXTRA_CFLAGS} # build non-verbose first - local BUILDLOG=${PWD}/examplebuild.${ID}.log + local BUILDLOG=${LOG_PATH}/ex_${ID}_log.txt ( - make MAKEFLAGS= clean && - make MAKEFLAGS= defconfig && + make clean && + make defconfig && make all && make print_flash_cmd | tail -n 1 > build/download.config ) &> >(tee -a "${BUILDLOG}") || { RESULT=$?; FAILED_EXAMPLES+=" ${EXAMPLE_NAME}" - make MAKEFLAGS= V=1 clean defconfig && make V=1 # verbose output for errors } popd - if grep ": warning:" "${BUILDLOG}" 2>&1 >> "${LOG_WARNINGS}"; then - [ $RESULT -eq 0 ] && RESULT=$RESULT_WARNINGS - FAILED_EXAMPLES+=" ${EXAMPLE_NAME} (warnings)" - fi - - grep -i error "${BUILDLOG}" 2>&1 >> "${LOG_WARNINGS}" || : - - rm -f "${BUILDLOG}" + grep -i "error\|warning" "${BUILDLOG}" 2>&1 >> "${LOG_SUSPECTED}" || : } EXAMPLE_NUM=0 @@ -155,15 +148,17 @@ done # show warnings echo -e "\nFound issues:" -# pattern is: not 'error.o' and not '-Werror' -grep -v "error.o\|\-Werror" -- "${LOG_WARNINGS}" || echo -e "\tNone" -rm -f "${LOG_WARNINGS}" -if [ $RESULT -eq $RESULT_WARNINGS ]; then - echo "Build would have passed, except for warnings." -fi +# Ignore the next messages: +# "error.o" or "-Werror" in compiler's command line +# "reassigning to symbol" or "changes choice state" in sdkconfig +sort -u "${LOG_SUSPECTED}" | \ +grep -v "library/error.o\|\ -Werror\|reassigning to symbol\|changes choice state" \ + && RESULT=$RESULT_ISSUES \ + || echo -e "\tNone" -[ $RESULT -eq 0 ] || echo "Failed examples: $FAILED_EXAMPLES" +[ -z ${FAILED_EXAMPLES} ] || echo -e "\nThere are errors in the next examples: $FAILED_EXAMPLES" +[ $RESULT -eq 0 ] || echo -e "\nFix all warnings and errors above to pass the test!" echo -e "\nReturn code = $RESULT"