mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
ci: build s2 template app in pre_build of pre_check stage
This will fail pipeline earlier if template project of S2 cannot pass the build. The other builds for the template app, which is not CMake or default optimization level are put into the build_template_app of build stage.
This commit is contained in:
parent
7acda7b8eb
commit
ad6609a561
@ -142,6 +142,48 @@ before_script:
|
||||
- export PYTHONPATH="$IDF_PATH/tools:$IDF_PATH/tools/ci/python_packages:$PYTHONPATH"
|
||||
- *fetch_submodules
|
||||
|
||||
.build_template_app_template:
|
||||
stage: build
|
||||
image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
|
||||
tags:
|
||||
- build
|
||||
variables:
|
||||
BATCH_BUILD: "1"
|
||||
LOG_PATH: "${CI_PROJECT_DIR}/log_template_app"
|
||||
BUILD_PATH: "${CI_PROJECT_DIR}/build_template_app"
|
||||
SIZE_INFO_LOCATION: "$CI_PROJECT_DIR/size_info.txt"
|
||||
BUILD_DIR: "@t/@w"
|
||||
BUILD_LOG_MAKE: "${LOG_PATH}/make_@t_@w.txt"
|
||||
BUILD_LOG_CMAKE: "${LOG_PATH}/cmake_@t_@w.txt"
|
||||
BUILD_COMMAND_ARGS: ""
|
||||
artifacts:
|
||||
when: always
|
||||
paths:
|
||||
- log_template_app/*
|
||||
- size_info.txt
|
||||
- build_template_app/**/size.json
|
||||
only:
|
||||
variables:
|
||||
- $BOT_TRIGGER_WITH_LABEL == null
|
||||
- $BOT_LABEL_BUILD
|
||||
- $BOT_LABEL_REGULAR_TEST
|
||||
script:
|
||||
# Set the variable for 'esp-idf-template' testing
|
||||
- ESP_IDF_TEMPLATE_GIT=${ESP_IDF_TEMPLATE_GIT:-"https://github.com/espressif/esp-idf-template.git"}
|
||||
- ./tools/ci/retry_failed.sh git clone ${ESP_IDF_TEMPLATE_GIT}
|
||||
# Try to use the same branch name for esp-idf-template that we're
|
||||
# using on esp-idf. If it doesn't exist then just stick to the default branch
|
||||
- python $CHECKOUT_REF_SCRIPT esp-idf-template esp-idf-template
|
||||
- export PATH="$IDF_PATH/tools:$PATH"
|
||||
- export EXTRA_CFLAGS=${PEDANTIC_CFLAGS}
|
||||
- export EXTRA_CXXFLAGS=${PEDANTIC_CXXFLAGS}
|
||||
# Only do the default cmake build for each target, remaining part are done in the build_template_app job
|
||||
- tools/ci/build_template_app.sh ${BUILD_COMMAND_ARGS}
|
||||
# Check if there are any stray printf/ets_printf references in WiFi libs
|
||||
- cd components/esp_wifi/lib
|
||||
- for dir in esp32 esp32s2; do test $(xtensa-esp32-elf-nm $dir/*.a | grep -w printf | wc -l) -eq 0; done;
|
||||
- for dir in esp32 esp32s2; do test $(xtensa-esp32-elf-nm $dir/*.a | grep -w ets_printf | wc -l) -eq 0; done;
|
||||
|
||||
include:
|
||||
- '/tools/ci/config/pre_check.yml'
|
||||
- '/tools/ci/config/build.yml'
|
||||
|
127
tools/ci/build_template_app.sh
Executable file
127
tools/ci/build_template_app.sh
Executable file
@ -0,0 +1,127 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Usage: build_template_app.sh [-p]
|
||||
# -p: optional, if specified, do a fast build for every chip target with cmake and only the default
|
||||
# config. Otherwise permutations of (chip target, build system, configs) which were not built in
|
||||
# the fast build will be built.
|
||||
#
|
||||
# Needs to be called under IDF root folder
|
||||
#
|
||||
# This script will call find_apps.py with the following arguments:
|
||||
# - CMake build arguments: --work-dir {BUILD_PATH}/cmake --build-dir ${BUILD_DIR} --build-log ${BUILD_LOG_CMAKE}
|
||||
# - Make build arguments: --work-dir {BUILD_PATH}/make/${BUILD_DIR} --build-dir build --build-log ${BUILD_LOG_MAKE}
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
gen_configs() {
|
||||
# CONFIG_COMPILER_OPTIMIZATION_NONE with flag -O0
|
||||
echo "CONFIG_COMPILER_OPTIMIZATION_NONE=y" > esp-idf-template/sdkconfig.ci.O0
|
||||
echo "CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE=y" >> esp-idf-template/sdkconfig.ci.O0
|
||||
# CONFIG_COMPILER_OPTIMIZATION_SIZE with flag -Os
|
||||
echo "CONFIG_COMPILER_OPTIMIZATION_SIZE=y" > esp-idf-template/sdkconfig.ci.Os
|
||||
echo "CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y" >> esp-idf-template/sdkconfig.ci.Os
|
||||
# CONFIG_COMPILER_OPTIMIZATION_PERF with flag -O2
|
||||
echo "CONFIG_COMPILER_OPTIMIZATION_PERF=y" > esp-idf-template/sdkconfig.ci.O2
|
||||
echo "CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF=y" >> esp-idf-template/sdkconfig.ci.O2
|
||||
|
||||
# Only built in make, because CMake already build this config in pre_build job
|
||||
# CONFIG_COMPILER_OPTIMIZATION_DEFAULT with flag -Og
|
||||
echo "CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y" > esp-idf-template/sdkconfig.ci2.Og
|
||||
echo "CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG=y" >> esp-idf-template/sdkconfig.ci2.Og
|
||||
|
||||
# Needs to be built with specific extra flags
|
||||
# Same as O2, but also disable assertions.
|
||||
cp esp-idf-template/sdkconfig.ci.O2 esp-idf-template/sdkconfig.ci3.no_assert
|
||||
echo "CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y" >> esp-idf-template/sdkconfig.ci3.no_assert
|
||||
}
|
||||
|
||||
get_config_str() {
|
||||
CONFIG_STR=
|
||||
until [ $# -eq 0 ]
|
||||
do
|
||||
CONFIG_STR+=" --config $1"
|
||||
shift
|
||||
done
|
||||
echo ${CONFIG_STR}
|
||||
}
|
||||
|
||||
search_cmake() {
|
||||
TARGET=$1
|
||||
shift
|
||||
CONFIG_STR=$*
|
||||
tools/find_apps.py -vv --format json --work-dir ${BUILD_PATH}/cmake --build-dir ${BUILD_DIR} --build-log ${BUILD_LOG_CMAKE} -p esp-idf-template --build-system cmake ${CONFIG_STR} --target ${TARGET} --output scan_temp.json
|
||||
cat scan_temp.json >> scan.json
|
||||
rm scan_temp.json
|
||||
}
|
||||
|
||||
search_make() {
|
||||
TARGET=$1
|
||||
shift
|
||||
CONFIG_STR=$*
|
||||
tools/find_apps.py -vv --format json --work-dir ${BUILD_PATH}/make/${BUILD_DIR} --build-dir build --build-log ${BUILD_LOG_MAKE} -p esp-idf-template --build-system make ${CONFIG_STR} --target ${TARGET} --output scan_temp.json
|
||||
cat scan_temp.json >> scan.json
|
||||
rm scan_temp.json
|
||||
}
|
||||
|
||||
build() {
|
||||
tools/build_apps.py -vv --format json --keep-going --parallel-count 1 --parallel-index 1 --size-info ${SIZE_INFO_LOCATION} scan.json
|
||||
rm scan.json
|
||||
}
|
||||
|
||||
build_stage2() {
|
||||
CONFIG_STR=$(get_config_str sdkconfig.ci.*=)
|
||||
search_cmake esp32 ${CONFIG_STR}
|
||||
search_cmake esp32s2 ${CONFIG_STR}
|
||||
|
||||
CONFIG_STR=$(get_config_str sdkconfig.ci.*= sdkconfig.ci2.*=)
|
||||
search_make esp32 ${CONFIG_STR}
|
||||
search_make esp32s2 ${CONFIG_STR}
|
||||
|
||||
build build_list_1.json
|
||||
|
||||
CONFIG_STR=$(get_config_str sdkconfig.ci3.*=)
|
||||
search_cmake esp32 ${CONFIG_STR}
|
||||
search_make esp32 ${CONFIG_STR}
|
||||
search_cmake esp32s2 ${CONFIG_STR}
|
||||
search_make esp32s2 ${CONFIG_STR}
|
||||
|
||||
# Override EXTRA_CFLAGS and EXTRA_CXXFLAGS in the environment
|
||||
export EXTRA_CFLAGS=${PEDANTIC_CFLAGS/-Werror=unused-variable -Werror=unused-but-set-variable -Werror=unused-function/}
|
||||
export EXTRA_CXXFLAGS=${PEDANTIC_CXXFLAGS/-Werror=unused-variable -Werror=unused-but-set-variable -Werror=unused-function/}
|
||||
build
|
||||
}
|
||||
|
||||
build_stage1() {
|
||||
CONFIG_STR=$(get_config_str sdkconfig.ci2.*=)
|
||||
search_cmake esp32 ${CONFIG_STR}
|
||||
search_cmake esp32s2 ${CONFIG_STR}
|
||||
|
||||
build
|
||||
}
|
||||
|
||||
# Default arguments
|
||||
# STAGE:
|
||||
# 1 (-p): fast build, 2 (default): regular build
|
||||
STAGE=2
|
||||
|
||||
# Parse arguments: -p for STAGE
|
||||
for arg in $*
|
||||
do
|
||||
if [ ${arg} = "-p" ]; then
|
||||
STAGE=1
|
||||
fi
|
||||
done
|
||||
|
||||
mkdir -p ${BUILD_PATH}/make
|
||||
mkdir -p ${BUILD_PATH}/cmake
|
||||
mkdir -p ${LOG_PATH}
|
||||
rm -f scan.json
|
||||
|
||||
gen_configs
|
||||
|
||||
if [ ${STAGE} = 1 ]
|
||||
then
|
||||
build_stage1
|
||||
else
|
||||
build_stage2
|
||||
fi
|
@ -404,3 +404,7 @@ build_installer:
|
||||
script:
|
||||
- cd tools/windows/tool_setup/
|
||||
- ./build_installer.sh
|
||||
|
||||
# This job builds template app with permutations of targets and optimization levels
|
||||
build_template_app:
|
||||
extends: .build_template_app_template
|
||||
|
@ -107,74 +107,12 @@ check_wifi_lib_md5:
|
||||
- IDF_TARGET=esp32 $IDF_PATH/components/esp_wifi/test_md5/test_md5.sh
|
||||
- IDF_TARGET=esp32s2 $IDF_PATH/components/esp_wifi/test_md5/test_md5.sh
|
||||
|
||||
.build_with_make_and_cmake: &build_with_make_and_cmake |
|
||||
echo -e "section_end:"`date +%s`":build_script\r\e[0Ksection_start:"`date +%s`":build_make\r\e[0KBuild with Make"
|
||||
make defconfig
|
||||
make all
|
||||
make clean
|
||||
echo -e "section_end:"`date +%s`":build_make\r\e[0Ksection_start:"`date +%s`":build_cmake\r\e[0KBuild with CMake"
|
||||
rm -rf build sdkconfig
|
||||
idf.py build
|
||||
echo -e "section_end:"`date +%s`":build_cmake\r\e[0Ksection_start:"`date +%s`":build_script\r\e[0K"
|
||||
|
||||
build_template_app:
|
||||
# Build at least one project for each target at earliest stage to reduce build cost for obvious failing commits
|
||||
fast_template_app:
|
||||
extends: .build_template_app_template
|
||||
stage: pre_check
|
||||
image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
|
||||
tags:
|
||||
- build
|
||||
variables:
|
||||
BATCH_BUILD: "1"
|
||||
only:
|
||||
variables:
|
||||
- $BOT_TRIGGER_WITH_LABEL == null
|
||||
- $BOT_LABEL_BUILD
|
||||
- $BOT_LABEL_REGULAR_TEST
|
||||
script:
|
||||
# Set the variable for 'esp-idf-template' testing
|
||||
- ESP_IDF_TEMPLATE_GIT=${ESP_IDF_TEMPLATE_GIT:-"https://github.com/espressif/esp-idf-template.git"}
|
||||
- ./tools/ci/retry_failed.sh git clone ${ESP_IDF_TEMPLATE_GIT}
|
||||
# Try to use the same branch name for esp-idf-template that we're
|
||||
# using on esp-idf. If it doesn't exist then just stick to the default branch
|
||||
- python $CHECKOUT_REF_SCRIPT esp-idf-template esp-idf-template
|
||||
- cd esp-idf-template
|
||||
- export PATH="$IDF_PATH/tools:$PATH"
|
||||
- export EXTRA_CFLAGS=${PEDANTIC_CFLAGS}
|
||||
- export EXTRA_CXXFLAGS=${PEDANTIC_CXXFLAGS}
|
||||
|
||||
# CONFIG_COMPILER_OPTIMIZATION_DEFAULT with flag -Og
|
||||
- echo "CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y" > sdkconfig.defaults
|
||||
- echo "CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG=y" >> sdkconfig.defaults
|
||||
- *build_with_make_and_cmake
|
||||
|
||||
# CONFIG_COMPILER_OPTIMIZATION_NONE with flag -O0
|
||||
- echo "CONFIG_COMPILER_OPTIMIZATION_NONE=y" > sdkconfig.defaults
|
||||
- echo "CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE=y" >> sdkconfig.defaults
|
||||
- *build_with_make_and_cmake
|
||||
|
||||
# CONFIG_COMPILER_OPTIMIZATION_SIZE with flag -Os
|
||||
- echo "CONFIG_COMPILER_OPTIMIZATION_SIZE=y" > sdkconfig.defaults
|
||||
- echo "CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y" >> sdkconfig.defaults
|
||||
- *build_with_make_and_cmake
|
||||
|
||||
# CONFIG_COMPILER_OPTIMIZATION_PERF with flag -O2
|
||||
- echo "CONFIG_COMPILER_OPTIMIZATION_PERF=y" > sdkconfig.defaults
|
||||
- echo "CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF=y" >> sdkconfig.defaults
|
||||
- *build_with_make_and_cmake
|
||||
|
||||
# Same as above, but also disable assertions.
|
||||
- echo "CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y" >> sdkconfig.defaults
|
||||
# Don't error out on -Wunused, when assertions are disabled
|
||||
- export EXTRA_CFLAGS=${PEDANTIC_CFLAGS/-Werror=unused-variable -Werror=unused-but-set-variable -Werror=unused-function/}
|
||||
- export EXTRA_CXXFLAGS=${PEDANTIC_CXXFLAGS/-Werror=unused-variable -Werror=unused-but-set-variable -Werror=unused-function/}
|
||||
- *build_with_make_and_cmake
|
||||
- export EXTRA_CFLAGS=${PEDANTIC_CFLAGS}
|
||||
- export EXTRA_CXXFLAGS=${PEDANTIC_CXXFLAGS}
|
||||
|
||||
# Check if there are any stray printf/ets_printf references in WiFi libs
|
||||
- pushd ../components/esp_wifi/lib
|
||||
- for dir in esp32 esp32s2; do test $(xtensa-esp32-elf-nm $dir/*.a | grep -w printf | wc -l) -eq 0; done;
|
||||
- for dir in esp32 esp32s2; do test $(xtensa-esp32-elf-nm $dir/*.a | grep -w ets_printf | wc -l) -eq 0; done;
|
||||
- popd
|
||||
BUILD_COMMAND_ARGS: "-p"
|
||||
|
||||
check_public_headers:
|
||||
stage: pre_check
|
||||
|
@ -35,6 +35,7 @@ tools/build_apps.py
|
||||
tools/check_kconfigs.py
|
||||
tools/check_python_dependencies.py
|
||||
tools/ci/apply_bot_filter.py
|
||||
tools/ci/build_template_app.sh
|
||||
tools/ci/check-executable.sh
|
||||
tools/ci/check-line-endings.sh
|
||||
tools/ci/check_build_warnings.py
|
||||
|
@ -147,7 +147,8 @@ class BuildItem(object):
|
||||
return self._expand(self._build_log_path)
|
||||
|
||||
def __repr__(self):
|
||||
return "Build app {} for target {}, sdkconfig {} in {}".format(
|
||||
return "({}) Build app {} for target {}, sdkconfig {} in {}".format(
|
||||
self.build_system,
|
||||
self.app_dir,
|
||||
self.target,
|
||||
self.sdkconfig_path or "(default)",
|
||||
|
Loading…
x
Reference in New Issue
Block a user