From e89fc00e5b2e76849da926fb766b06022448304a Mon Sep 17 00:00:00 2001 From: Roland Dobai Date: Mon, 1 Nov 2021 17:23:32 +0100 Subject: [PATCH] CI: Don't build with "make" because the support is removed in v5.0 --- .gitlab/CODEOWNERS | 2 - .gitlab/ci/build.yml | 27 - .gitlab/ci/pre_check.yml | 13 - .gitlab/ci/rules.yml | 1 - tools/ci/build_template_app.sh | 15 - tools/ci/check_copyright_ignore.txt | 1 - ...check_examples_cmake_make-cmake_ignore.txt | 11 - .../check_examples_cmake_make-make_ignore.txt | 6 - tools/ci/check_examples_cmake_make.py | 123 ---- tools/ci/check_ut_cmake_make.sh | 19 - tools/ci/executable-list.txt | 3 - tools/ci/mypy_ignore_list.txt | 1 - tools/ci/test_build_system.sh | 574 ------------------ 13 files changed, 796 deletions(-) delete mode 100644 tools/ci/check_examples_cmake_make-cmake_ignore.txt delete mode 100644 tools/ci/check_examples_cmake_make-make_ignore.txt delete mode 100644 tools/ci/check_examples_cmake_make.py delete mode 100755 tools/ci/check_ut_cmake_make.sh delete mode 100755 tools/ci/test_build_system.sh diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index db74b18203..e9ffd6755c 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -206,6 +206,4 @@ requirements.txt @esp-idf-codeowners/tools # ignore lists /tools/ci/check_copyright_ignore.txt @esp-idf-codeowners/all-maintainers /tools/ci/check_copyright_permanent_ignore.txt @esp-idf-codeowners/all-maintainers -/tools/ci/check_examples_cmake_make-cmake_ignore.txt @esp-idf-codeowners/tools -/tools/ci/check_examples_cmake_make-make_ignore.txt @esp-idf-codeowners/tools /tools/ci/mypy_ignore_list.txt @esp-idf-codeowners/tools diff --git a/.gitlab/ci/build.yml b/.gitlab/ci/build.yml index 911afa92b5..10f13679bc 100644 --- a/.gitlab/ci/build.yml +++ b/.gitlab/ci/build.yml @@ -13,7 +13,6 @@ LOG_PATH: "${CI_PROJECT_DIR}/log_template_app" BUILD_PATH: "${CI_PROJECT_DIR}/build_template_app" 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: @@ -169,27 +168,6 @@ build_esp_idf_tests_cmake_esp32c3: # mechanism work, but this is the next best thing - ${IDF_PATH}/tools/ci/find_apps_build_apps.sh -build_examples_make: - extends: - - .build_examples_template - - .rules:build:example_test-esp32 - stage: host_test - # This is a workaround for a rarely encountered issue with building examples in CI. - # Probably related to building of Kconfig in 'make clean' stage - retry: 1 - parallel: 8 - artifacts: - paths: - - $LOG_PATH - - build_${TEST_PREFIX}/*/*/*/build/size.json - - $SIZE_INFO_LOCATION - when: always - expire_in: 4 days - variables: - BUILD_SYSTEM: make - IDF_TARGET: esp32 # currently we only support esp32 - -# same as above, but for CMake .build_examples_cmake_template: extends: .build_examples_template artifacts: @@ -333,11 +311,6 @@ build_component_ut_esp32c3: - cd test_build_system - ${IDF_PATH}/tools/ci/${SHELL_TEST_SCRIPT} -test_build_system: - extends: .test_build_system_template - variables: - SHELL_TEST_SCRIPT: test_build_system.sh - test_build_system_cmake: extends: .test_build_system_template variables: diff --git a/.gitlab/ci/pre_check.yml b/.gitlab/ci/pre_check.yml index 9cbbd30724..295370246f 100644 --- a/.gitlab/ci/pre_check.yml +++ b/.gitlab/ci/pre_check.yml @@ -41,11 +41,6 @@ check_version: - export IDF_PATH=$PWD - tools/ci/check_idf_version.sh -check_examples_cmake_make: - extends: .pre_check_job_template - script: - - python ${IDF_PATH}/tools/ci/check_examples_cmake_make.py - check_rom_api_header: extends: .pre_check_job_template script: @@ -159,7 +154,6 @@ scan_tests: CI_SCAN_TESTS_PY: ${CI_PROJECT_DIR}/tools/ci/python_packages/ttfw_idf/CIScanTests.py script: - set_component_ut_vars - - run_cmd python $CI_SCAN_TESTS_PY example_test $EXAMPLE_TEST_DIR -b make --exclude examples/build_system/idf_as_lib -c $CI_TARGET_TEST_CONFIG_FILE -o $EXAMPLE_TEST_OUTPUT_DIR - run_cmd python $CI_SCAN_TESTS_PY example_test $EXAMPLE_TEST_DIR -b cmake --exclude examples/build_system/idf_as_lib -c $CI_TARGET_TEST_CONFIG_FILE -o $EXAMPLE_TEST_OUTPUT_DIR - run_cmd python $CI_SCAN_TESTS_PY test_apps $TEST_APPS_TEST_DIR -c $CI_TARGET_TEST_CONFIG_FILE -o $TEST_APPS_OUTPUT_DIR - run_cmd python $CI_SCAN_TESTS_PY component_ut $COMPONENT_UT_DIRS --exclude $COMPONENT_UT_EXCLUDES -c $CI_TARGET_TEST_CONFIG_FILE -o $COMPONENT_UT_OUTPUT_DIR @@ -173,13 +167,6 @@ check_version_tag: script: - (git cat-file -t $CI_COMMIT_REF_NAME | grep tag) || (echo "ESP-IDF versions must be annotated tags." && exit 1) -check_ut_cmake_make: - extends: .pre_check_job_template - tags: - - build - script: - - tools/ci/check_ut_cmake_make.sh - check_artifacts_expire_time: extends: .pre_check_job_template script: diff --git a/.gitlab/ci/rules.yml b/.gitlab/ci/rules.yml index bbdc7a17a3..c5a12c66e3 100644 --- a/.gitlab/ci/rules.yml +++ b/.gitlab/ci/rules.yml @@ -96,7 +96,6 @@ - "components/**/*" - "tools/ci/test_autocomplete.py" - - "tools/ci/test_build_system.sh" - "tools/ci/test_build_system_cmake.sh" - "tools/ci/test_check_kconfigs.py" - "tools/ci/test_configure_ci_environment.sh" diff --git a/tools/ci/build_template_app.sh b/tools/ci/build_template_app.sh index 8a10f92d77..720dec0e58 100755 --- a/tools/ci/build_template_app.sh +++ b/tools/ci/build_template_app.sh @@ -9,7 +9,6 @@ # # 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 @@ -58,15 +57,6 @@ search_cmake() { 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 @@ -80,13 +70,9 @@ build_stage2() { search_cmake esp32c3 ${CONFIG_STR} search_cmake esp32h2 ${CONFIG_STR} - CONFIG_STR=$(get_config_str sdkconfig.ci.*= sdkconfig.ci2.*=) - search_make esp32 ${CONFIG_STR} - build build_list_1.json CONFIG_STR=$(get_config_str sdkconfig.ci3.*=) - search_make esp32 ${CONFIG_STR} search_cmake esp32 ${CONFIG_STR} search_cmake esp32s2 ${CONFIG_STR} search_cmake esp32s3 ${CONFIG_STR} @@ -123,7 +109,6 @@ do fi done -mkdir -p ${BUILD_PATH}/make mkdir -p ${BUILD_PATH}/cmake mkdir -p ${LOG_PATH} rm -f scan.json diff --git a/tools/ci/check_copyright_ignore.txt b/tools/ci/check_copyright_ignore.txt index 11d2c95d4d..bf81be27ae 100644 --- a/tools/ci/check_copyright_ignore.txt +++ b/tools/ci/check_copyright_ignore.txt @@ -3607,7 +3607,6 @@ tools/ci/check_artifacts_expire_time.py tools/ci/check_build_warnings.py tools/ci/check_callgraph.py tools/ci/check_deprecated_kconfigs.py -tools/ci/check_examples_cmake_make.py tools/ci/check_executables.py tools/ci/check_kconfigs.py tools/ci/check_public_headers.py diff --git a/tools/ci/check_examples_cmake_make-cmake_ignore.txt b/tools/ci/check_examples_cmake_make-cmake_ignore.txt deleted file mode 100644 index 7bb9940a83..0000000000 --- a/tools/ci/check_examples_cmake_make-cmake_ignore.txt +++ /dev/null @@ -1,11 +0,0 @@ -components/ -common_components/ -cxx/experimental/experimental_cpp_component/ -cxx/experimental/esp_modem_cxx -main/ -build_system/cmake/ -mb_example_common/ -examples/cxx/experimental/blink_cxx -examples/peripherals/lcd/lvgl -examples/peripherals/i2s/i2s_es8311 -examples/cxx/experimental/simple_spi_rw_example diff --git a/tools/ci/check_examples_cmake_make-make_ignore.txt b/tools/ci/check_examples_cmake_make-make_ignore.txt deleted file mode 100644 index fa9fe6f9de..0000000000 --- a/tools/ci/check_examples_cmake_make-make_ignore.txt +++ /dev/null @@ -1,6 +0,0 @@ -build_system/cmake -temp_ -examples/bluetooth/bluedroid/ble_50/ -examples/cxx/experimental/blink_cxx -examples/cxx/experimental/esp_modem_cxx/ -examples/cxx/experimental/simple_spi_rw_example diff --git a/tools/ci/check_examples_cmake_make.py b/tools/ci/check_examples_cmake_make.py deleted file mode 100644 index d142b161af..0000000000 --- a/tools/ci/check_examples_cmake_make.py +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env python - -import json -import os -import pprint -import subprocess -import sys - -# ============================================================================= -# Service funcs -# ============================================================================= - - -def _build_path(path, *paths): - return str(os.path.normpath(os.path.join(path, *paths)).replace('\\', '/')) - - -def _unify_paths(path_list): - return [_build_path(p) for p in path_list] - - -def _exclude_by_pat_list(path_list, ignore_list): - print('- Applying ignore list') - path_list_res = list(path_list) - for ign in ignore_list: - if len(ign.strip()): - for p in path_list: - if p.find(ign) != -1: - try: - path_list_res.remove(p) - except ValueError: - pass - return path_list_res - - -def _file2linelist(path): - with open(path) as f: - lines = [line.rstrip() for line in f] - return [str(line) for line in lines] - - -# ============================================================================= -# Test funcs -# ============================================================================= - - -def get_idf_path(path, *paths): - IDF_PATH = os.getenv('IDF_PATH') - return _build_path(IDF_PATH, path, *paths) - - -def _get_apps(target, build_system): - print('- Getting paths of apps') - args = [sys.executable, - get_idf_path('tools/find_apps.py'), - '-p', - get_idf_path('examples'), - '--recursive', - '--target', target, - '--build-system', build_system] - output = subprocess.check_output(args).decode('utf-8') - o_list = output.split('\n') - json_list = [] - for j in o_list: - if j: - json_list.append(json.loads(j)) - app_paths = [] - for j in json_list: - app_paths.append(j['app_dir']) - return _unify_paths(app_paths) - - -def get_apps(target, build_system, ignorelist): - apps = _get_apps(target, build_system) - if len(ignorelist): - return _exclude_by_pat_list(apps, ignorelist) - else: - return apps - - -def get_cmake_ignore_list(): - print('- Getting CMake ignore list') - return _file2linelist( - get_idf_path('tools', 'ci', - 'check_examples_cmake_make-cmake_ignore.txt')) - - -def get_make_ignore_list(): - print('- Getting Make ignore list') - return _file2linelist( - get_idf_path('tools', 'ci', - 'check_examples_cmake_make-make_ignore.txt')) - - -def diff(first, second): - print('- Comparing...') - first = set(first) - second = set(second) - res = list(first - second) + list(second - first) - return res - - -def main(): - cmake_ignore = get_cmake_ignore_list() - make_ignore = get_make_ignore_list() - cmakes = get_apps('esp32', 'cmake', cmake_ignore) - makes = get_apps('esp32', 'make', make_ignore) - - res = diff(cmakes, makes) - - if len(res): - pp = pprint.PrettyPrinter(indent=4) - print( - '[ ERROR ] Some projects are not containing Make and Cmake project files:' - ) - pp.pprint(res) - raise ValueError('Test is not passed') - else: - print('[ DONE ]') - - -if __name__ == '__main__': - main() diff --git a/tools/ci/check_ut_cmake_make.sh b/tools/ci/check_ut_cmake_make.sh deleted file mode 100755 index 6f9c754716..0000000000 --- a/tools/ci/check_ut_cmake_make.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -# While we support GNU Make & CMake together, check that unit tests support both -CMAKE_UT_PATHS=$( find ${IDF_PATH}/components/ -type f -name CMakeLists.txt | grep "/test/" | grep -v "mbedtls/programs") -MAKE_UT_PATHS=$( find ${IDF_PATH}/components/ -type f -name component.mk | grep "/test/" ) - -CMAKE_UT_PATHS="$(/usr/bin/dirname $CMAKE_UT_PATHS | sort -n)" -MAKE_UT_PATHS="$(/usr/bin/dirname $MAKE_UT_PATHS | sort -n)" - -MISMATCH=$(comm -3 <(echo "$MAKE_UT_PATHS") <(echo "$CMAKE_UT_PATHS")) - -if [ -n "$MISMATCH" ]; then - echo "Some unit tests are not in both CMake and GNU Make:" - echo "$MISMATCH" - exit 1 -fi - -echo "Unit tests match" -exit 0 diff --git a/tools/ci/executable-list.txt b/tools/ci/executable-list.txt index c7bec63629..711fc388aa 100644 --- a/tools/ci/executable-list.txt +++ b/tools/ci/executable-list.txt @@ -41,7 +41,6 @@ tools/ci/check_callgraph.py tools/ci/check_codeowners.py tools/ci/check_copyright.py tools/ci/check_deprecated_kconfigs.py -tools/ci/check_examples_cmake_make.py tools/ci/check_examples_rom_header.sh tools/ci/check_executables.py tools/ci/check_idf_version.sh @@ -51,7 +50,6 @@ tools/ci/check_rules_yml.py tools/ci/check_soc_struct_headers.py tools/ci/check_tools_files_patterns.py tools/ci/check_type_comments.py -tools/ci/check_ut_cmake_make.sh tools/ci/checkout_project_ref.py tools/ci/deploy_docs.py tools/ci/envsubst.py @@ -63,7 +61,6 @@ tools/ci/mirror-submodule-update.sh tools/ci/multirun_with_pyenv.sh tools/ci/push_to_github.sh tools/ci/test_autocomplete.py -tools/ci/test_build_system.sh tools/ci/test_build_system_cmake.sh tools/ci/test_check_kconfigs.py tools/ci/test_configure_ci_environment.sh diff --git a/tools/ci/mypy_ignore_list.txt b/tools/ci/mypy_ignore_list.txt index 2b0fb4ea29..c42d28925d 100644 --- a/tools/ci/mypy_ignore_list.txt +++ b/tools/ci/mypy_ignore_list.txt @@ -155,7 +155,6 @@ tools/ci/check_artifacts_expire_time.py tools/ci/check_callgraph.py tools/ci/check_codeowners.py tools/ci/check_deprecated_kconfigs.py -tools/ci/check_examples_cmake_make.py tools/ci/check_executables.py tools/ci/check_kconfigs.py tools/ci/check_public_headers.py diff --git a/tools/ci/test_build_system.sh b/tools/ci/test_build_system.sh deleted file mode 100755 index 031ff6c9d1..0000000000 --- a/tools/ci/test_build_system.sh +++ /dev/null @@ -1,574 +0,0 @@ -#!/usr/bin/env bash -# -# Test the build system for basic consistency -# -# A bash script that tests some likely make failure scenarios in a row -# -# Assumes PWD is an out-of-tree build directory, and will create a -# subdirectory inside it to run build tests in. -# -# Environment variables: -# IDF_PATH - must be set -# ESP_IDF_TEMPLATE_GIT - Can override git clone source for template app. Otherwise github. -# NOCLEANUP - Set to '1' if you want the script to leave its temporary directory when done, for post-mortem. -# -# -# Internals: -# * The tests run in sequence & the system keeps track of all failures to print at the end. -# * BUILD directory is set to default BUILD_DIR_BASE -# * The "print_status" function both prints a status line to the log and keeps track of which test is running. -# * Calling the "failure" function prints a failure message to the log and also adds to the list of failures to print at the end. -# * The function "assert_built" tests for a file relative to the BUILD directory. -# * The function "take_build_snapshot" can be paired with the functions "assert_rebuilt" and "assert_not_rebuilt" to compare file timestamps and verify if they were rebuilt or not since the snapshot was taken. -# -# To add a new test case, add it to the end of the run_tests function. Note that not all test cases do comprehensive cleanup -# (although very invasive ones like appending CRLFs to all files take a copy of the esp-idf tree), however the clean_build_dir -# function can be used to force-delete all files from the build output directory. - -# Set up some variables -# -# override ESP_IDF_TEMPLATE_GIT to point to a local dir if you're testing and want fast iterations -[ -z ${ESP_IDF_TEMPLATE_GIT} ] && ESP_IDF_TEMPLATE_GIT=https://github.com/espressif/esp-idf-template.git - -# uncomment next line to produce a lot more debug output -#export V=1 - -function run_tests() -{ - FAILURES= - STATUS="Starting" - print_status "Checking prerequisites" - [ -z ${IDF_PATH} ] && echo "IDF_PATH is not set. Need path to esp-idf installation." && exit 2 - - print_status "Cloning template from ${ESP_IDF_TEMPLATE_GIT}..." - git clone ${ESP_IDF_TEMPLATE_GIT} template - cd template - if [ -z $CHECKOUT_REF_SCRIPT ]; then - git checkout ${CI_BUILD_REF_NAME} || echo "Using esp-idf-template default branch..." - else - $CHECKOUT_REF_SCRIPT esp-idf-template . - fi - - print_status "Updating template config..." - make defconfig || exit $? - - print_status "Try to clean fresh directory..." - MAKEFLAGS= make clean || exit $? - - BOOTLOADER_BINS="bootloader/bootloader.elf bootloader/bootloader.bin" - APP_BINS="app-template.elf app-template.bin" - PHY_INIT_BIN="phy_init_data.bin" - - print_status "Initial clean build" - # if make fails here, everything fails - make || exit $? - # check all the expected build artifacts from the clean build - assert_built ${APP_BINS} ${BOOTLOADER_BINS} partitions_singleapp.bin - [ -f ${BUILD}/partition*.bin ] || failure "A partition table should have been built" - - print_status "Updating component source file rebuilds component" - # touch a file & do a build - take_build_snapshot - touch ${IDF_PATH}/components/esp_system/port/cpu_start.c - make || failure "Failed to partial build" - assert_rebuilt ${APP_BINS} esp_system/libesp_system.a esp_system/port/cpu_start.o - assert_not_rebuilt lwip/liblwip.a freertos/libfreertos.a ${BOOTLOADER_BINS} partitions_singleapp.bin - - print_status "Bootloader source file rebuilds bootloader" - take_build_snapshot - touch ${IDF_PATH}/components/bootloader/subproject/main/bootloader_start.c - make bootloader || failure "Failed to partial build bootloader" - assert_rebuilt ${BOOTLOADER_BINS} bootloader/main/bootloader_start.o - assert_not_rebuilt ${APP_BINS} partitions_singleapp.bin - - print_status "Partition CSV file rebuilds partitions" - take_build_snapshot - touch ${IDF_PATH}/components/partition_table/partitions_singleapp.csv - make partition_table || failure "Failed to build partition table" - assert_rebuilt partitions_singleapp.bin - assert_not_rebuilt app-template.bin app-template.elf ${BOOTLOADER_BINS} - - print_status "Partial build doesn't compile anything by default" - take_build_snapshot - # verify no build files are refreshed by a partial make - ALL_BUILD_FILES=$(find ${BUILD} -type f | sed "s@${BUILD}/@@") - make || failure "Partial build failed" - assert_not_rebuilt ${ALL_BUILD_FILES} - - print_status "Cleaning should remove all files from build" - make clean || failure "Failed to make clean" - ALL_BUILD_FILES=$(find ${BUILD} -type f) - if [ -n "${ALL_BUILD_FILES}" ]; then - failure "Files weren't cleaned: ${ALL_BUILD_FILES}" - fi - - print_status "Bootloader build shouldn't leave build output anywhere else" - clean_build_dir - make bootloader - # find wizardry: find any file not named sdkconfig.h that - # isn't in the "bootloader" or "config" directories - find ${BUILD} -type d \( -name bootloader -o -name config \) -prune , -type f ! -name sdkconfig.h || failure "Bootloader built files outside the bootloader or config directories" - - print_status "Moving BUILD_DIR_BASE out of tree" - clean_build_dir - OUTOFTREE_BUILD=${TESTDIR}/alt_build - make BUILD_DIR_BASE=${OUTOFTREE_BUILD} || failure "Failed to build with BUILD_DIR_BASE overriden" - NEW_BUILD_FILES=$(find ${OUTOFREE_BUILD} -type f) - if [ -z "${NEW_BUILD_FILES}" ]; then - failure "No files found in new build directory!" - fi - DEFAULT_BUILD_FILES=$(find ${BUILD} -mindepth 1) - if [ -n "${DEFAULT_BUILD_FILES}" ]; then - failure "Some files were incorrectly put into the default build directory: ${DEFAULT_BUILD_FILES}" - fi - - print_status "BUILD_DIR_BASE inside default build directory" - clean_build_dir - make BUILD_DIR_BASE=build/subdirectory || failure "Failed to build with BUILD_DIR_BASE as subdir" - NEW_BUILD_FILES=$(find ${BUILD}/subdirectory -type f) - if [ -z "${NEW_BUILD_FILES}" ]; then - failure "No files found in new build directory!" - fi - - print_status "Parallel builds should work OK" - clean_build_dir - (make -j5 2>&1 | tee ${TESTDIR}/parallel_build.log) || failure "Failed to build in parallel" - if grep -q "warning: jobserver unavailable" ${TESTDIR}/parallel_build.log; then - failure "Parallel build prints 'warning: jobserver unavailable' errors" - fi - - print_status "Can still clean build if all text files are CRLFs" - make clean || failure "Unexpected failure to make clean" - find . -path .git -prune -exec unix2dos {} \; # CRLFify template dir - # make a copy of esp-idf and CRLFify it - CRLF_ESPIDF=${TESTDIR}/esp-idf-crlf - mkdir -p ${CRLF_ESPIDF} - cp -r ${IDF_PATH}/* ${CRLF_ESPIDF} - # don't CRLFify executable files, as Linux will fail to execute them - find ${CRLF_ESPIDF} -name .git -prune -name build -prune -type f ! -perm 755 -exec unix2dos {} \; - make IDF_PATH=${CRLF_ESPIDF} || failure "Failed to build with CRLFs in source" - # do the same checks we do for the clean build - assert_built ${APP_BINS} ${BOOTLOADER_BINS} partitions_singleapp.bin - [ -f ${BUILD}/partition*.bin ] || failure "A partition table should have been built in CRLF mode" - - print_status "Touching rom ld file should re-link app and bootloader" - make - take_build_snapshot - touch ${IDF_PATH}/components/esp_rom/esp32/ld/esp32.rom.ld - make - assert_rebuilt ${APP_BINS} ${BOOTLOADER_BINS} - - print_status "Touching app-only template ld file should only re-link app" - take_build_snapshot - touch ${IDF_PATH}/components/esp_system/ld/esp32/sections.ld.in - make - assert_rebuilt ${APP_BINS} - assert_not_rebuilt ${BOOTLOADER_BINS} - - print_status "Touching a linker fragment file should trigger re-link of app" # only app linker script is generated by tool for now - take_build_snapshot - touch ${IDF_PATH}/components/esp_common/common.lf - make - assert_rebuilt ${APP_BINS} - assert_not_rebuilt ${BOOTLOADER_BINS} - - print_status "sdkconfig update triggers full recompile" - make - take_build_snapshot - touch sdkconfig - make - # check the component_project_vars.mk file was rebuilt - assert_rebuilt esp32/component_project_vars.mk - # pick one each of .c, .cpp, .S that #includes sdkconfig.h - # and therefore should rebuild - assert_rebuilt newlib/newlib_init.o - assert_rebuilt nvs_flash/src/nvs_api.o - assert_rebuilt freertos/FreeRTOS-Kernel/portable/xtensa/xtensa_vectors.o - - print_status "Updating project Makefile triggers full recompile" - make - take_build_snapshot - touch Makefile - make - # similar to previous test - assert_rebuilt newlib/newlib_init.o - assert_rebuilt nvs_flash/src/nvs_api.o - assert_rebuilt freertos/FreeRTOS-Kernel/portable/xtensa/xtensa_vectors.o - - print_status "print_flash_cmd target should produce one line of output" - make - test $(make print_flash_cmd V=0 | wc -l | tr -d ' ') -eq 1 - - print_status "Can include/exclude object files" - echo "#error This file should not compile" > main/excluded_file.c - echo "int required_global;" > main/included_file.c - echo "COMPONENT_OBJEXCLUDE := excluded_file.o" >> main/component.mk - echo "COMPONENT_OBJINCLUDE := included_file.o" >> main/component.mk - echo "COMPONENT_ADD_LDFLAGS := -l\$(COMPONENT_NAME) -u required_global" >> main/component.mk - make - git checkout main/component.mk - rm main/{included,excluded}_file.c - - print_status "Can include/exclude object files outside of component tree" - mkdir -p extra_source_dir - echo "#error This file should not compile" > extra_source_dir/excluded_file.c - echo "int required_global;" > extra_source_dir/included_file.c - echo "COMPONENT_SRCDIRS := . ../extra_source_dir" >> main/component.mk - echo "COMPONENT_OBJEXCLUDE := ../extra_source_dir/excluded_file.o" >> main/component.mk - echo "COMPONENT_OBJINCLUDE := ../extra_source_dir/included_file.o" >> main/component.mk - echo "COMPONENT_ADD_LDFLAGS := -l\$(COMPONENT_NAME) -u required_global" >> main/component.mk - make - git checkout main/component.mk - rm -rf extra_source_dir - - print_status "Can build without git installed on system" - clean_build_dir - # Make provision for getting IDF version - echo "IDF_VER_0123456789_0123456789_0123456789" > ${IDF_PATH}/version.txt - echo "project-version-w.z" > ${TESTDIR}/template/version.txt - # Hide .gitmodules so that submodule check is avoided - [ -f ${IDF_PATH}/.gitmodules ] && mv ${IDF_PATH}/.gitmodules ${IDF_PATH}/.gitmodules_backup - # Overload `git` command - echo -e '#!/bin/bash\ntouch ${IDF_PATH}/git_invoked' > git - chmod +x git - OLD_PATH=$PATH - export PATH="$PWD:$PATH" - make - [ -f ${IDF_PATH}/git_invoked ] && rm ${IDF_PATH}/git_invoked && failure "git should not have been invoked in this case" - rm -f ${IDF_PATH}/version.txt git - rm -f ${TESTDIR}/template/version.txt - [ -f ${IDF_PATH}/.gitmodules_backup ] && mv ${IDF_PATH}/.gitmodules_backup ${IDF_PATH}/.gitmodules - export PATH=$OLD_PATH - - print_status "Rebuild when app version was changed" - take_build_snapshot - # App version - echo "project-version-1.0" > ${TESTDIR}/template/version.txt - make - assert_rebuilt ${APP_BINS} - print_status "Change app version" - take_build_snapshot - echo "project-version-2.0(012345678901234567890123456789)" > ${TESTDIR}/template/version.txt - make - assert_rebuilt ${APP_BINS} - assert_not_rebuilt ${BOOTLOADER_BINS} esp_system/libesp_system.a - - print_status "Re-building does not change app.bin" - take_build_snapshot - make - assert_not_rebuilt ${APP_BINS} ${BOOTLOADER_BINS} esp_system/libesp_system.a - rm -f ${TESTDIR}/template/version.txt - - print_status "Get the version of app from git describe. Project is not inside IDF and do not have a tag only a hash commit." - make >> log.log || failure "Failed to build" - version="App \"app-template\" version: " - version+=$(git describe --always --tags --dirty) - grep "${version}" log.log || failure "Project version should have a hash commit" - - print_status "Get the version of app from Kconfig option" - make clean > /dev/null - rm -f sdkconfig.defaults - rm -f sdkconfig - echo "project_version_from_txt" > ${TESTDIR}/template/version.txt - echo "CONFIG_APP_PROJECT_VER_FROM_CONFIG=y" >> sdkconfig.defaults - echo 'CONFIG_APP_PROJECT_VER="project_version_from_Kconfig"' >> sdkconfig.defaults - make defconfig > /dev/null - make >> log.log || failure "Failed to build" - version="App \"app-template\" version: " - version+="project_version_from_Kconfig" - grep "${version}" log.log || failure "Project version should be from Kconfig" - rm -f sdkconfig.defaults - rm -f sdkconfig - rm -f ${TESTDIR}/template/version.txt - - print_status "Build fails if partitions don't fit in flash" - sed -i.bak "s/CONFIG_ESPTOOLPY_FLASHSIZE.\+//" sdkconfig # remove all flashsize config - echo "CONFIG_ESPTOOLPY_FLASHSIZE_1MB=y" >> sdkconfig # introduce undersize flash - make defconfig || failure "Failed to reconfigure with smaller flash" - ( make 2>&1 | grep "does not fit in configured flash size 1MB" ) || failure "Build didn't fail with expected flash size failure message" - mv sdkconfig.bak sdkconfig - - print_status "Flash size is correctly set in the bootloader image header" - # Build with the default 2MB setting - rm sdkconfig - make defconfig && make bootloader || failure "Failed to build bootloader" - bin_header_match build/bootloader/bootloader.bin "0210" - # Change to 4MB - echo "CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y" > sdkconfig - make defconfig && make bootloader || failure "Failed to build bootloader" - bin_header_match build/bootloader/bootloader.bin "0220" - # Change to QIO, bootloader should still be DIO (will change to QIO in 2nd stage bootloader) - echo "CONFIG_FLASHMODE_QIO=y" > sdkconfig - make defconfig && make bootloader || failure "Failed to build bootloader" - bin_header_match build/bootloader/bootloader.bin "0210" - # Change to 80 MHz - echo "CONFIG_ESPTOOLPY_FLASHFREQ_80M=y" > sdkconfig - make defconfig && make bootloader || failure "Failed to build bootloader" - bin_header_match build/bootloader/bootloader.bin "021f" - rm sdkconfig - - print_status "sdkconfig should have contents of all files: sdkconfig, sdkconfig.defaults, sdkconfig.defaults.IDF_TARGET" - make clean > /dev/null; - rm -f sdkconfig.defaults; - rm -f sdkconfig; - echo "CONFIG_PARTITION_TABLE_OFFSET=0x10000" >> sdkconfig.defaults; - echo "CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y" >> sdkconfig.defaults.esp32; - echo "CONFIG_PARTITION_TABLE_TWO_OTA=y" >> sdkconfig; - make defconfig > /dev/null; - grep "CONFIG_PARTITION_TABLE_OFFSET=0x10000" sdkconfig || failure "The define from sdkconfig.defaults should be into sdkconfig" - grep "CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y" sdkconfig || failure "The define from sdkconfig.defaults.esp32 should be into sdkconfig" - grep "CONFIG_PARTITION_TABLE_TWO_OTA=y" sdkconfig || failure "The define from sdkconfig should be into sdkconfig" - rm sdkconfig sdkconfig.defaults sdkconfig.defaults.esp32 - make defconfig - - print_status "can build with phy_init_data" - make clean > /dev/null - rm -f sdkconfig.defaults - rm -f sdkconfig - echo "CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION=y" >> sdkconfig.defaults - make defconfig > /dev/null - make || failure "Failed to build with PHY_INIT_DATA" - assert_built ${APP_BINS} ${BOOTLOADER_BINS} ${PHY_INIT_BIN} - rm sdkconfig - rm sdkconfig.defaults - make defconfig - - print_status "UF2 build works" - rm -f -r build sdkconfig - make defconfig - make uf2 - assert_built ${APP_BINS} "uf2.bin" - make uf2-app - assert_built "uf2-app.bin" - rm -f -r build sdkconfig - - print_status "Empty directory not treated as a component" - mkdir -p components/esp32 - make || failure "Failed to build with empty esp32 directory in components" - rm -rf components - - print_status "If a component directory is added to COMPONENT_DIRS, its subdirectories are not added" - mkdir -p main/test - touch main/test/component.mk - echo "#error This should not be built" > main/test/test.c - make || failure "COMPONENT_DIRS has added component subdirectory to the build" - rm -rf main/test - - print_status "If a component directory is added to COMPONENT_DIRS, its sibling directories are not added" - mkdir -p mycomponents/mycomponent - touch mycomponents/mycomponent/component.mk - # first test by adding single component directory to EXTRA_COMPONENT_DIRS - mkdir -p mycomponents/esp32 - touch mycomponents/esp32/component.mk - make EXTRA_COMPONENT_DIRS=$PWD/mycomponents/mycomponent || failure "EXTRA_COMPONENT_DIRS has added a sibling directory" - rm -rf mycomponents/esp32 - # now the same thing, but add a components directory - mkdir -p esp32 - touch esp32/component.mk - make EXTRA_COMPONENT_DIRS=$PWD/mycomponents || failure "EXTRA_COMPONENT_DIRS has added a sibling directory" - rm -rf esp32 - rm -rf mycomponents - - print_status "Handling deprecated Kconfig options" - make clean > /dev/null; - rm -f sdkconfig.defaults; - rm -f sdkconfig; - echo "" > ${IDF_PATH}/sdkconfig.rename; - make defconfig > /dev/null; - echo "CONFIG_TEST_OLD_OPTION=y" >> sdkconfig; - echo "CONFIG_TEST_OLD_OPTION CONFIG_TEST_NEW_OPTION" >> ${IDF_PATH}/sdkconfig.rename; - echo -e "\n\ -menu \"test\"\n\ - config TEST_NEW_OPTION\n\ - bool \"test\"\n\ - default \"n\"\n\ - help\n\ - TEST_NEW_OPTION description\n\ -endmenu\n" >> ${IDF_PATH}/Kconfig; - make defconfig > /dev/null; - grep "CONFIG_TEST_OLD_OPTION=y" sdkconfig || failure "CONFIG_TEST_OLD_OPTION should be in sdkconfig for backward compatibility" - grep "CONFIG_TEST_NEW_OPTION=y" sdkconfig || failure "CONFIG_TEST_NEW_OPTION should be now in sdkconfig" - grep "#define CONFIG_TEST_NEW_OPTION 1" build/include/sdkconfig.h || failure "sdkconfig.h should contain the new macro" - grep "#define CONFIG_TEST_OLD_OPTION CONFIG_TEST_NEW_OPTION" build/include/sdkconfig.h || failure "sdkconfig.h should contain the compatibility macro" - grep "CONFIG_TEST_OLD_OPTION=y" build/include/config/auto.conf || failure "CONFIG_TEST_OLD_OPTION should be in auto.conf for backward compatibility" - grep "CONFIG_TEST_NEW_OPTION=y" build/include/config/auto.conf || failure "CONFIG_TEST_NEW_OPTION should be now in auto.conf" - rm -f sdkconfig sdkconfig.defaults - pushd ${IDF_PATH} - git checkout -- sdkconfig.rename Kconfig - popd - - print_status "Handling deprecated Kconfig options in sdkconfig.defaults" - make clean; - rm -f sdkconfig; - echo "CONFIG_TEST_OLD_OPTION=7" > sdkconfig.defaults; - echo "CONFIG_TEST_OLD_OPTION CONFIG_TEST_NEW_OPTION" > ${IDF_PATH}/sdkconfig.rename; - echo -e "\n\ -menu \"test\"\n\ - config TEST_NEW_OPTION\n\ - int \"TEST_NEW_OPTION\"\n\ - range 0 10\n\ - default 5\n\ - help\n\ - TEST_NEW_OPTION description\n\ -endmenu\n" >> ${IDF_PATH}/Kconfig; - make defconfig > /dev/null; - grep "CONFIG_TEST_OLD_OPTION=7" sdkconfig || failure "CONFIG_TEST_OLD_OPTION=7 should be in sdkconfig for backward compatibility" - grep "CONFIG_TEST_NEW_OPTION=7" sdkconfig || failure "CONFIG_TEST_NEW_OPTION=7 should be in sdkconfig" - rm -f sdkconfig.defaults; - pushd ${IDF_PATH} - git checkout -- sdkconfig.rename Kconfig - popd - - print_status "Project components prioritized over EXTRA_COMPONENT_DIRS" - clean_build_dir - mkdir -p extra_dir/my_component - echo "COMPONENT_CONFIG_ONLY := 1" > extra_dir/my_component/component.mk - cp Makefile Makefile.bak # set EXTRA_COMPONENT_DIRS to point to the other directory - sed -i "s%PROJECT_NAME := app-template%PROJECT_NAME := app-template\nEXTRA_COMPONENT_DIRS := extra_dir%" Makefile - (make list-components | grep "$PWD/extra_dir/my_component") || failure "Unable to find component specified in EXTRA_COMPONENT_DIRS" - mkdir -p components/my_component - echo "COMPONENT_CONFIG_ONLY := 1" > components/my_component/component.mk - (make list-components | grep "$PWD/components/my_component") || failure "Project components should be prioritized over EXTRA_COMPONENT_DIRS" - mv Makefile.bak Makefile # revert previous modifications - rm -rf extra_dir components - - print_status "COMPONENT_OWNBUILDTARGET, COMPONENT_OWNCLEANTARGET can work" - take_build_snapshot - mkdir -p components/test_component - cat > components/test_component/component.mk <