From d1bf62b0e74f4c4b8ff170d85bef5a579055550d Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Tue, 28 Jun 2022 14:06:46 +0800 Subject: [PATCH 01/14] ci: fix the bug that would modify constants.SUPPORTED_TARGETS --- tools/ci/python_packages/ttfw_idf/CIScanTests.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/ci/python_packages/ttfw_idf/CIScanTests.py b/tools/ci/python_packages/ttfw_idf/CIScanTests.py index 9abfcd80a6b..dee76427bb8 100644 --- a/tools/ci/python_packages/ttfw_idf/CIScanTests.py +++ b/tools/ci/python_packages/ttfw_idf/CIScanTests.py @@ -35,6 +35,8 @@ BUILD_ALL_LABELS = [ BUILD_PER_JOB = 30 # each build takes 1 mins around +SCAN_TARGETS = SUPPORTED_TARGETS + PREVIEW_TARGETS + def _has_build_all_label(): # type: () -> bool for label in BUILD_ALL_LABELS: @@ -131,10 +133,8 @@ def main(): # type: () -> None if e.errno != errno.EEXIST: raise e - SUPPORTED_TARGETS.extend(PREVIEW_TARGETS) - if (not build_standalone_apps) and (not build_test_case_apps): - for target in SUPPORTED_TARGETS: + for target in SCAN_TARGETS: output_json([], target, args.build_system, args.output_path) SystemExit(0) @@ -167,7 +167,7 @@ def main(): # type: () -> None build_system = args.build_system.lower() build_system_class = BUILD_SYSTEMS[build_system] - for target in SUPPORTED_TARGETS: + for target in SCAN_TARGETS: exclude_apps = deepcopy(default_exclude) if build_test_case_apps: @@ -195,7 +195,7 @@ def main(): # type: () -> None test_case_apps_preserve_default = True if build_system == 'cmake' else False output_files = [] build_items_total_count = 0 - for target in SUPPORTED_TARGETS: + for target in SCAN_TARGETS: # get pytest apps paths pytest_app_paths = set() for path in paths: From f4a1f56c08e37339f5205efef53647158b4958c1 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Wed, 13 Jul 2022 10:30:16 +0800 Subject: [PATCH 02/14] ci: remove unsupported test markers --- examples/system/ota/otatool/pytest_otatool.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/system/ota/otatool/pytest_otatool.py b/examples/system/ota/otatool/pytest_otatool.py index 185ec52af58..555c38312ee 100644 --- a/examples/system/ota/otatool/pytest_otatool.py +++ b/examples/system/ota/otatool/pytest_otatool.py @@ -10,7 +10,10 @@ import pytest from pytest_embedded import Dut -@pytest.mark.supported_targets +@pytest.mark.esp32 +@pytest.mark.esp32s2 +@pytest.mark.esp32c3 +@pytest.mark.esp32s3 @pytest.mark.generic def test_otatool_example(dut: Dut) -> None: # Verify factory firmware From f7a0e0cb5c6aeb3424813cf7920bf07b24b2deb2 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Tue, 14 Jun 2022 16:44:40 +0800 Subject: [PATCH 03/14] ci: raise ImportError when search case failed instead of print the error --- tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py b/tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py index 8674bf57b89..cc0695f4c6c 100644 --- a/tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py +++ b/tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py @@ -5,7 +5,6 @@ import copy import fnmatch import os -import sys import types from typing import List @@ -137,7 +136,6 @@ class Search: test_cases += cls._search_cases_from_file(test_case_file) if cls.missing_import_warnings: - print('\n\n'.join(cls.missing_import_warnings)) - sys.exit(1) + raise ImportError('\n\n'.join(cls.missing_import_warnings)) return test_cases From f540fd42d8f0001ad62000fa0d3c2dc8bffff5a5 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Thu, 16 Jun 2022 11:10:47 +0800 Subject: [PATCH 04/14] chore: update .gitignore files with other build directories --- .gitignore | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index a47a4a688fe..ba5bd800d50 100644 --- a/.gitignore +++ b/.gitignore @@ -22,14 +22,16 @@ GPATH .DS_Store # Components Unit Test Apps files -components/**/build +components/**/build/ +components/**/build_*_*/ components/**/sdkconfig components/**/sdkconfig.old # Example project files +examples/**/build/ +examples/**/build_esp*_*/ examples/**/sdkconfig examples/**/sdkconfig.old -examples/**/build # Doc build artifacts docs/_build/ @@ -43,7 +45,7 @@ docs/_static/NotoSansSC-Regular.otf tools/unit-test-app/sdkconfig tools/unit-test-app/sdkconfig.old tools/unit-test-app/build -tools/unit-test-app/builds +tools/unit-test-app/build_*_*/ tools/unit-test-app/output tools/unit-test-app/test_configs @@ -51,7 +53,8 @@ tools/unit-test-app/test_configs log_ut_cmake # test application build files -tools/test_apps/**/build +tools/test_apps/**/build/ +tools/test_apps/**/build_*_*/ tools/test_apps/**/sdkconfig tools/test_apps/**/sdkconfig.old From 6502ba0b3cb8c29dcb91573188d6e1a932b517a6 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Thu, 23 Jun 2022 10:11:21 +0800 Subject: [PATCH 05/14] ci: add missing pytest marker --- pytest.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/pytest.ini b/pytest.ini index 0f5e9134ddf..999d0082eac 100644 --- a/pytest.ini +++ b/pytest.ini @@ -33,6 +33,7 @@ markers = flash_suspend: support flash suspend feature ip101: connected via wired 10/100M ethernet lan8720: connected via LAN8720 ethernet transceiver + quad_psram: runners with quad psram octal_psram: runners with octal psram usb_host: usb host runners ethernet_ota: ethernet OTA runners From 46bac6427a280bdfda70c064b0b5e6e9e556a582 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Mon, 27 Jun 2022 10:40:38 +0800 Subject: [PATCH 06/14] ci: default python version 3.7.10 --- .gitlab-ci.yml | 1 + .gitlab/ci/build.yml | 4 ---- .gitlab/ci/docs.yml | 5 ----- .gitlab/ci/host-test.yml | 2 -- .gitlab/ci/pre_check.yml | 4 ---- 5 files changed, 1 insertion(+), 15 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2be13a169b4..aa475c9ab2d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -54,6 +54,7 @@ variables: BATCH_BUILD: "1" V: "0" CHECKOUT_REF_SCRIPT: "$CI_PROJECT_DIR/tools/ci/checkout_project_ref.py" + PYTHON_VER: 3.7.10 # Docker images BOT_DOCKER_IMAGE_TAG: ":latest" diff --git a/.gitlab/ci/build.yml b/.gitlab/ci/build.yml index 02dbd0386a2..04c14a62747 100644 --- a/.gitlab/ci/build.yml +++ b/.gitlab/ci/build.yml @@ -20,8 +20,6 @@ needs: - job: fast_template_app artifacts: false - variables: - PYTHON_VER: 3.7.10 artifacts: paths: - "**/build*/size.json" @@ -262,7 +260,6 @@ build_ssc_esp32s3: OUTPUT_PATH: ${CI_PROJECT_DIR}/tools/unit-test-app/output BUILD_SYSTEM: "cmake" TEST_TYPE: "unit_test" - PYTHON_VER: 3.7.10 LDGEN_CHECK_MAPPING: 1 script: - ${IDF_PATH}/tools/ci/find_apps_build_apps.sh @@ -320,7 +317,6 @@ build_esp_idf_tests_cmake_esp32c3: TEST_TYPE: example_test LOG_PATH: ${CI_PROJECT_DIR}/log_${TEST_PREFIX} BUILD_PATH: ${CI_PROJECT_DIR}/build_${TEST_PREFIX} - PYTHON_VER: 3.7.10 LDGEN_CHECK_MAPPING: 1 script: # it's not possible to build 100% out-of-tree and have the "artifacts" diff --git a/.gitlab/ci/docs.yml b/.gitlab/ci/docs.yml index c919556d7cd..9a17a99145e 100644 --- a/.gitlab/ci/docs.yml +++ b/.gitlab/ci/docs.yml @@ -57,8 +57,6 @@ check_docs_lang_sync: .build_docs_template: image: $ESP_IDF_DOC_ENV_IMAGE - variables: - PYTHON_VER: 3.7.10 tags: - build_docs dependencies: [] @@ -73,8 +71,6 @@ check_docs_lang_sync: check_docs_gh_links: image: $ESP_IDF_DOC_ENV_IMAGE - variables: - PYTHON_VER: 3.7.10 extends: - .pre_check_job_template - .doc-rules:build:docs @@ -156,7 +152,6 @@ build_docs_pdf: - .before_script_no_sync_submodule image: $ESP_IDF_DOC_ENV_IMAGE variables: - PYTHON_VER: 3.7.10 DOCS_BUILD_DIR: "${IDF_PATH}/docs/_build/" PYTHONUNBUFFERED: 1 stage: test_deploy diff --git a/.gitlab/ci/host-test.yml b/.gitlab/ci/host-test.yml index 5e842a98660..98f03a9aaae 100644 --- a/.gitlab/ci/host-test.yml +++ b/.gitlab/ci/host-test.yml @@ -2,8 +2,6 @@ extends: .rules:test:host_test stage: host_test image: $ESP_ENV_IMAGE - variables: - PYTHON_VER: 3.7.10 tags: - host_test dependencies: [] diff --git a/.gitlab/ci/pre_check.yml b/.gitlab/ci/pre_check.yml index 7718af3ec33..eb093791db1 100644 --- a/.gitlab/ci/pre_check.yml +++ b/.gitlab/ci/pre_check.yml @@ -51,8 +51,6 @@ check_python_style: extends: - .pre_check_base_template - .rules:patterns:python-files - variables: - PYTHON_VER: 3.7.10 artifacts: when: on_failure paths: @@ -63,8 +61,6 @@ check_python_style: test_check_kconfigs: extends: .pre_check_job_template - variables: - PYTHON_VER: 3.7.10 artifacts: when: on_failure paths: From 51d70ea9eea0d50bcc736b4e8df67107c8e7ec14 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Mon, 27 Jun 2022 15:44:38 +0800 Subject: [PATCH 07/14] style: ignore pylint too-many-instance-attributes error --- .pylintrc | 1 + 1 file changed, 1 insertion(+) diff --git a/.pylintrc b/.pylintrc index 8b57c7b550e..633bee8d5bc 100644 --- a/.pylintrc +++ b/.pylintrc @@ -152,6 +152,7 @@ disable=print-statement, too-many-statements, ungrouped-imports, # since we have isort in pre-commit no-name-in-module, # since we have flake8 to check this + too-many-instance-attributes, # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option From 1129bd75875129fddc3df6aadf376d4c54e406f3 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Tue, 28 Jun 2022 13:52:30 +0800 Subject: [PATCH 08/14] test: increase test gpio time timeout --- components/driver/test_apps/gpio/pytest_gpio.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/driver/test_apps/gpio/pytest_gpio.py b/components/driver/test_apps/gpio/pytest_gpio.py index 3583b10e757..cbc30e3ba59 100644 --- a/components/driver/test_apps/gpio/pytest_gpio.py +++ b/components/driver/test_apps/gpio/pytest_gpio.py @@ -18,4 +18,4 @@ from pytest_embedded import Dut def test_gpio(dut: Dut) -> None: dut.expect_exact('Press ENTER to see the list of tests') dut.write('*') - dut.expect_unity_test_output() + dut.expect_unity_test_output(timeout=300) From c9b73a554e8b2e2c269a0cd02fd84d4c274bc6d6 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Fri, 1 Jul 2022 17:12:58 +0800 Subject: [PATCH 09/14] ttfw: record test script path in case_info --- tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py b/tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py index cc0695f4c6c..88de30eded6 100644 --- a/tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py +++ b/tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py @@ -48,6 +48,7 @@ class Search: for i, test_function in enumerate(test_functions_out): print('\t{}. {} <{}>'.format(i + 1, test_function.case_info['name'], test_function.case_info['target'])) test_function.case_info['app_dir'] = os.path.dirname(file_name) + test_function.case_info['script_path'] = file_name return test_functions_out @classmethod From 97132c40fddd361e7d0077cb8b1a6e35e8448c62 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Wed, 13 Jul 2022 10:35:01 +0800 Subject: [PATCH 10/14] ttfw: mock missing packages while search cases --- tools/ci/mypy_ignore_list.txt | 1 + .../tiny_test_fw/Utility/SearchCases.py | 8 ++-- .../tiny_test_fw/Utility/__init__.py | 38 ++++++++++++++----- 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/tools/ci/mypy_ignore_list.txt b/tools/ci/mypy_ignore_list.txt index 9b2e25921f4..0f29610c4e6 100644 --- a/tools/ci/mypy_ignore_list.txt +++ b/tools/ci/mypy_ignore_list.txt @@ -173,6 +173,7 @@ tools/ci/python_packages/tiny_test_fw/Utility/CaseConfig.py tools/ci/python_packages/tiny_test_fw/Utility/GitlabCIJob.py tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py tools/ci/python_packages/tiny_test_fw/Utility/TestCase.py +tools/ci/python_packages/tiny_test_fw/Utility/__init__.py tools/ci/python_packages/tiny_test_fw/bin/Runner.py tools/ci/python_packages/tiny_test_fw/bin/example.py tools/ci/python_packages/tiny_test_fw/docs/conf.py diff --git a/tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py b/tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py index 88de30eded6..011465852ee 100644 --- a/tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py +++ b/tools/ci/python_packages/tiny_test_fw/Utility/SearchCases.py @@ -28,7 +28,9 @@ class Search: print('Try to get cases from: ' + file_name) test_functions = [] try: - mod = load_source(file_name) + # search case no need to run the functions + # mock missing modules would help us get the test case function objects + mod = load_source(file_name, mock_missing=True) for func in [mod.__getattribute__(x) for x in dir(mod) if isinstance(mod.__getattribute__(x), types.FunctionType)]: try: @@ -38,7 +40,7 @@ class Search: except AttributeError: continue except ImportError as e: - warning_str = 'ImortError: \r\n\tFile:' + file_name + '\r\n\tError:' + str(e) + warning_str = 'ImportError: \r\n\tFile:' + file_name + '\r\n\tError:' + str(e) cls.missing_import_warnings.append(warning_str) test_functions_out = [] @@ -56,7 +58,7 @@ class Search: """ search all test case files recursively of a path """ if not os.path.exists(test_case): - raise OSError('test case path not exist') + raise OSError(f'test case path "{test_case}" not exist') if os.path.isdir(test_case): test_case_files = [] for root, _, file_names in os.walk(test_case): diff --git a/tools/ci/python_packages/tiny_test_fw/Utility/__init__.py b/tools/ci/python_packages/tiny_test_fw/Utility/__init__.py index 113455ef798..6de3f6067c6 100644 --- a/tools/ci/python_packages/tiny_test_fw/Utility/__init__.py +++ b/tools/ci/python_packages/tiny_test_fw/Utility/__init__.py @@ -1,9 +1,14 @@ +# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 + from __future__ import print_function +import logging import os.path import sys import time import traceback +from unittest.mock import MagicMock from .. import Env @@ -63,19 +68,20 @@ def console_log(data, color='white', end='\n'): pass -__LOADED_MODULES = dict() +__LOADED_MODULES = dict() # type: ignore # we should only load one module once. # if we load one module twice, # python will regard the same object loaded in the first time and second time as different objects. # it will lead to strange errors like `isinstance(object, type_of_this_object)` return False -def load_source(path): +def load_source(path, mock_missing=False): """ Dynamic loading python file. Note that this function SHOULD NOT be used to replace ``import``. It should only be used when the package path is only available in runtime. :param path: The path of python file + :param mock_missing: If True, will mock the module if the module is not found. :return: Loaded object """ path = os.path.realpath(path) @@ -84,17 +90,29 @@ def load_source(path): try: return __LOADED_MODULES[path] except KeyError: + folder = os.path.dirname(path) + sys.path.append(folder) + from importlib.machinery import SourceFileLoader try: - dir = os.path.dirname(path) - sys.path.append(dir) - from importlib.machinery import SourceFileLoader ret = SourceFileLoader(load_name, path).load_module() - except ImportError: - # importlib.machinery doesn't exists in Python 2 so we will use imp (deprecated in Python 3) - import imp - ret = imp.load_source(load_name, path) + except ModuleNotFoundError as e: + if not mock_missing: + raise + + # mock the missing third-party libs. Don't use it when real-testing + while True: + sys.modules[e.name] = MagicMock() + logging.warning('Mocking python module %s', e.name) + try: + ret = SourceFileLoader(load_name, path).load_module() + break + except ModuleNotFoundError as f: + e = f # another round + except SyntaxError: + # well, let's ignore it... non of our business + return None finally: - sys.path.remove(dir) + sys.path.remove(folder) __LOADED_MODULES[path] = ret return ret From f04a0cc526cadee66223c9519b35de19db699a5f Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Wed, 13 Jul 2022 11:11:19 +0800 Subject: [PATCH 11/14] fix: bypass Manually-specified variables were not used by the project warning the variable "IDF_TARGET" is only used under a if clause "if(ULP_C0CPU_IS_RISCV)". while building a non-riscv target, there will be a cmake warning: CMake Warning: Manually-specified variables were not used by the project: IDF_TARGET --- components/ulp/cmake/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/ulp/cmake/CMakeLists.txt b/components/ulp/cmake/CMakeLists.txt index 7209f06e1da..d94c0fdada6 100644 --- a/components/ulp/cmake/CMakeLists.txt +++ b/components/ulp/cmake/CMakeLists.txt @@ -68,6 +68,8 @@ add_custom_target(${ULP_APP_NAME}_ld_script DEPENDS ${ULP_LD_SCRIPT} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +# To avoid warning "Manually-specified variables were not used by the project" +set(bypassWarning "${IDF_TARGET}") if(ULP_COCPU_IS_RISCV) #risc-v ulp uses extra files for building: list(APPEND ULP_S_SOURCES From 05d2357062709216e1255a1e21add54299c8ba26 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Wed, 13 Jul 2022 10:34:02 +0800 Subject: [PATCH 12/14] feat: use standalone project idf-build-apps for find/build apps utils --- .gitlab-ci.yml | 23 +- .gitlab/CODEOWNERS | 2 - .gitlab/ci/README.md | 103 ++++ .gitlab/ci/assign-test.yml | 17 +- .gitlab/ci/build.yml | 283 ++++++----- .gitlab/ci/host-test.yml | 7 +- .gitlab/ci/pre_check.yml | 32 -- .gitlab/ci/rules.yml | 82 +-- .gitlab/ci/static-code-analysis.yml | 1 - components/cxx/.build-test-rules.yml | 7 + components/driver/.build-test-rules.yml | 33 ++ components/esp_eth/.build-test-rules.yml | 6 + components/esp_lcd/.build-test-rules.yml | 9 + components/esp_netif/.build-test-rules.yml | 7 + components/esp_psram/.build-test-rules.yml | 6 + components/esp_rom/.build-test-rules.yml | 6 + components/esp_system/.build-test-rules.yml | 7 + components/espcoredump/.build-test-rules.yml | 7 + components/log/.build-test-rules.yml | 6 + components/spi_flash/.build-test-rules.yml | 6 + .../wear_levelling/.build-test-rules.yml | 7 + .../contribute/esp-idf-tests-with-pytest.rst | 6 +- examples/bluetooth/.build-test-rules.yml | 105 ++++ examples/build_system/.build-test-rules.yml | 18 + examples/cxx/.build-test-rules.yml | 41 ++ examples/ethernet/.build-test-rules.yml | 17 + examples/get-started/.build-test-rules.yml | 7 + examples/mesh/.build-test-rules.yml | 7 + examples/network/.build-test-rules.yml | 17 + examples/openthread/.build-test-rules.yml | 17 + examples/peripherals/.build-test-rules.yml | 234 +++++++++ examples/protocols/.build-test-rules.yml | 253 ++++++++++ examples/provisioning/.build-test-rules.yml | 7 + examples/security/.build-test-rules.yml | 11 + examples/storage/.build-test-rules.yml | 155 ++++++ examples/system/.build-test-rules.yml | 221 ++++++++ examples/wifi/.build-test-rules.yml | 25 + examples/zigbee/.build-test-rules.yml | 17 + tools/build_apps.py | 171 ------- tools/ci/build_pytest_apps.py | 159 ------ tools/ci/build_template_app.sh | 62 +-- tools/ci/check_build_test_rules.py | 422 ++++++++++++++++ tools/ci/check_copyright_ignore.txt | 2 - tools/ci/check_executables.py | 11 +- tools/ci/ci_build_apps.py | 240 +++++++++ tools/ci/configure_ci_environment.sh | 6 - tools/ci/exclude_check_tools_files.txt | 1 + tools/ci/executable-list.txt | 5 +- tools/ci/find_apps_build_apps.sh | 175 ------- tools/ci/idf_ci_utils.py | 129 ++++- tools/ci/ignore_build_warnings.txt | 16 + tools/ci/mypy_ignore_list.txt | 2 - .../python_packages/ttfw_idf/CIScanTests.py | 272 ---------- tools/ci/python_packages/ttfw_idf/IDFApp.py | 33 +- .../python_packages/ttfw_idf/IDFAssignTest.py | 23 +- tools/ci/setup_python.sh | 2 +- tools/find_apps.py | 317 ------------ tools/find_build_apps/__init__.py | 20 - tools/find_build_apps/cmake.py | 100 ---- tools/find_build_apps/common.py | 473 ------------------ tools/test_apps/.build-test-rules.yml | 143 ++++++ tools/unit-test-app/tools/UnitTestParser.py | 13 +- 62 files changed, 2547 insertions(+), 2065 deletions(-) create mode 100644 components/cxx/.build-test-rules.yml create mode 100644 components/driver/.build-test-rules.yml create mode 100644 components/esp_eth/.build-test-rules.yml create mode 100644 components/esp_lcd/.build-test-rules.yml create mode 100644 components/esp_netif/.build-test-rules.yml create mode 100644 components/esp_psram/.build-test-rules.yml create mode 100644 components/esp_rom/.build-test-rules.yml create mode 100644 components/esp_system/.build-test-rules.yml create mode 100644 components/espcoredump/.build-test-rules.yml create mode 100644 components/log/.build-test-rules.yml create mode 100644 components/spi_flash/.build-test-rules.yml create mode 100644 components/wear_levelling/.build-test-rules.yml create mode 100644 examples/bluetooth/.build-test-rules.yml create mode 100644 examples/build_system/.build-test-rules.yml create mode 100644 examples/cxx/.build-test-rules.yml create mode 100644 examples/ethernet/.build-test-rules.yml create mode 100644 examples/get-started/.build-test-rules.yml create mode 100644 examples/mesh/.build-test-rules.yml create mode 100644 examples/network/.build-test-rules.yml create mode 100644 examples/openthread/.build-test-rules.yml create mode 100644 examples/peripherals/.build-test-rules.yml create mode 100644 examples/protocols/.build-test-rules.yml create mode 100644 examples/provisioning/.build-test-rules.yml create mode 100644 examples/security/.build-test-rules.yml create mode 100644 examples/storage/.build-test-rules.yml create mode 100644 examples/system/.build-test-rules.yml create mode 100644 examples/wifi/.build-test-rules.yml create mode 100644 examples/zigbee/.build-test-rules.yml delete mode 100755 tools/build_apps.py delete mode 100644 tools/ci/build_pytest_apps.py create mode 100755 tools/ci/check_build_test_rules.py create mode 100644 tools/ci/ci_build_apps.py delete mode 100755 tools/ci/find_apps_build_apps.sh create mode 100644 tools/ci/ignore_build_warnings.txt delete mode 100644 tools/ci/python_packages/ttfw_idf/CIScanTests.py delete mode 100755 tools/find_apps.py delete mode 100644 tools/find_build_apps/__init__.py delete mode 100644 tools/find_build_apps/cmake.py delete mode 100644 tools/find_build_apps/common.py create mode 100644 tools/test_apps/.build-test-rules.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aa475c9ab2d..abad921ba5c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -56,6 +56,9 @@ variables: CHECKOUT_REF_SCRIPT: "$CI_PROJECT_DIR/tools/ci/checkout_project_ref.py" PYTHON_VER: 3.7.10 + CLANG_TIDY_RUNNER_PROJ: 2107 # idf/clang-tidy-runner + IDF_BUILD_APPS_PROJ: 2818 # fuhanxi/idf-build-apps + # Docker images BOT_DOCKER_IMAGE_TAG: ":latest" @@ -213,9 +216,27 @@ before_script: - $IDF_PATH/tools/idf_tools.py install-python-env --features pytest # TODO: remove this, IDFCI-1207 - pip install esptool -c ~/.espressif/${CI_PYTHON_CONSTRAINT_FILE} + - eval "$($IDF_PATH/tools/idf_tools.py export)" # use idf venv instead + +.before_script_build_jobs: + before_script: + - source tools/ci/utils.sh + - is_based_on_commits $REQUIRED_ANCESTOR_COMMITS + - source tools/ci/setup_python.sh + - add_gitlab_ssh_keys + - source tools/ci/configure_ci_environment.sh + - *setup_tools_unless_target_test + - fetch_submodules + - *download_test_python_contraint_file + - $IDF_PATH/tools/idf_tools.py install-python-env --features pytest + # TODO: remove this, IDFCI-1207 + - pip install esptool -c ~/.espressif/${CI_PYTHON_CONSTRAINT_FILE} + - eval "$($IDF_PATH/tools/idf_tools.py export)" # use idf venv instead + # not only need pytest related packages, but also needs ttfw requirements + - internal_pip_install $IDF_BUILD_APPS_PROJ idf_build_apps + - pip install -r tools/ci/python_packages/ttfw_idf/requirements.txt -c ~/.espressif/${CI_PYTHON_CONSTRAINT_FILE} - export EXTRA_CFLAGS=${PEDANTIC_CFLAGS} - export EXTRA_CXXFLAGS=${PEDANTIC_CXXFLAGS} - - eval "$($IDF_PATH/tools/idf_tools.py export)" # use idf venv instead default: retry: diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index 18877588860..68ea16e5507 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -177,13 +177,11 @@ /examples/zigbee/ @esp-idf-codeowners/ieee802154 /tools/ @esp-idf-codeowners/tools -/tools/*_apps.py @esp-idf-codeowners/ci /tools/ble/ @esp-idf-codeowners/app-utilities /tools/catch/ @esp-idf-codeowners/ci /tools/ci/ @esp-idf-codeowners/ci /tools/cmake/ @esp-idf-codeowners/build-config /tools/esp_prov/ @esp-idf-codeowners/app-utilities -/tools/find_build_apps/ @esp-idf-codeowners/ci /tools/idf_size_yaml/ @esp-idf-codeowners/peripherals /tools/kconfig*/ @esp-idf-codeowners/build-config /tools/ldgen/ @esp-idf-codeowners/build-config diff --git a/.gitlab/ci/README.md b/.gitlab/ci/README.md index 8d16af11e69..82301ef95d5 100644 --- a/.gitlab/ci/README.md +++ b/.gitlab/ci/README.md @@ -19,6 +19,13 @@ - [Functions](#functions) - [CI Job Related](#ci-job-related) - [Shell Script Related](#shell-script-related) + - [Manifest File to Control the Build/Test apps](#manifest-file-to-control-the-buildtest-apps) + - [Grammar](#grammar) + - [Operands](#operands) + - [Operators](#operators) + - [Limitation:](#limitation) + - [How does it work?](#how-does-it-work) + - [Example](#example) ## General Workflow @@ -224,3 +231,99 @@ To run these commands in shell script locally, place `source tools/ci/utils.sh` - `info`: log in green color - `run_cmd`: run the command with duration seconds info - `retry_failed`: run the command with duration seconds info, retry when failed + +## Manifest File to Control the Build/Test apps + +`.build-test-rules.yml` file is a manifest file to control if the CI is running the build and test job or not. The Supported Targets table in `README.md` for apps would be auto-generated by `pre-commit` from the app's `.build-test-rules.yml`. + +### Grammar + +#### Operands + +- variables starts with `SOC_`. The value would be parsed from components/soc/[TARGET]/include/soc/soc_caps.h +- `IDF_TARGET` +- `INCLUDE_DEFAULT` (The default value of officially supported targets is 1, otherwise is 0) +- String, must be double-quoted. e.g. `"esp32"`, `"12345"` +- Integer, support decimal and hex. e.g. `1`, `0xAB` +- List with String and Integer inside, the type could be mixed. e.g. `["esp32", 1]` + +#### Operators + +- `==`, `!=`, `>`, `>=`, `<`, `<=` +- `and`, `or` +- `in`, `not in` with list +- parentheses + +#### Limitation: + +- all operators are binary operator. For more than two operands, you may use nested parentheses trick. For example, + - `A == 1 or (B == 2 and C in [1,2,3])` + - `(A == 1 and B == 2) or (C not in ["3", "4", 5])` + +### How does it work? + +By default, we enable build and test jobs for supported targets. + +three rules (disable rules are calculated after the `enable` rule): +- enable: run CI build/test jobs for targets that match any of the specified conditions only +- disable: will not run CI build/test jobs for targets that match any of the specified conditions +- disable_test: will not run CI test jobs for targets that match any of the specified conditions + +Each key is a test folder. Will apply to all folders inside. + +If one sub folder is in a special case, you can overwrite the rules for this folder by adding another entry for this folder itself. Each folder's rules are standalone, and will not inherit its parent's rules. (YAML inheritance is too complicated for reading) + +For example in the following codeblock, only `disable` rule exists in `examples/foo/bar`. It's unaware of its parent's `enable` rule. + +```yaml +examples/foo: + enable: + - if: IDF_TARGET == "esp32" + +examples/foo/bar: + disable: + - if: IDF_TARGET == "esp32s2" +``` + +### Example + +```yaml +examples/foo: + enable: + - if IDF_TARGET in ["esp32", 1, 2, 3] + - if IDF_TARGET not in ["4", "5", 6] + # should be run under all targets! + +examples/bluetooth: + disable: # disable both build and tests jobs + - if: SOC_BT_SUPPORTED != 1 + # reason is optional if there's no `temporary: true` + disable_test: + - if: IDF_TARGET == "esp32" + temporary: true + reason: lack of ci runners # required when `temporary: true` + +examples/foo: + enable: + - if IDF_TARGET in ["esp32", 1, 2, 3] + - if IDF_TARGET not in ["4", "5", 6] + # should be run under all targets! + +examples/bluetooth/test_foo: + # each folder's settings are standalone + disable: + - if: IDF_TARGET == "esp32s2" + temporary: true + reason: no idea + # unlike examples/bluetooth, the apps under this folder would not be build nor test for "no idea" under target esp32s2 + +examples/get-started/hello_world: + enable: + - if: IDF_TARGET == "linux" + reason: this one only supports linux! + +examples/get-started/blink: + enable: + - if: INCLUDE_DEFAULT == 1 or IDF_TARGET == "linux" + reason: This one supports all supported targets and linux +``` diff --git a/.gitlab/ci/assign-test.yml b/.gitlab/ci/assign-test.yml index d3e92d440f3..55cc6ca65c0 100644 --- a/.gitlab/ci/assign-test.yml +++ b/.gitlab/ci/assign-test.yml @@ -7,12 +7,12 @@ SUBMODULES_TO_FETCH: "none" artifacts: paths: - - ${TEST_DIR}/test_configs - - ${BUILD_DIR}/artifact_index.json + - ${TEST_DIR}/test_configs/ + - artifact_index.json when: always expire_in: 1 week script: - - python tools/ci/python_packages/ttfw_idf/IDFAssignTest.py $TEST_TYPE $TEST_DIR -c $CI_TARGET_TEST_CONFIG_FILE -o $TEST_DIR/test_configs + - run_cmd python tools/ci/python_packages/ttfw_idf/IDFAssignTest.py $TEST_TYPE $TEST_DIR -c $CI_TARGET_TEST_CONFIG_FILE -o $TEST_DIR/test_configs assign_example_test: extends: @@ -36,8 +36,7 @@ assign_example_test: optional: true variables: TEST_TYPE: example_test - TEST_DIR: ${CI_PROJECT_DIR}/examples - BUILD_DIR: ${CI_PROJECT_DIR}/build_examples + TEST_DIR: examples assign_custom_test: extends: @@ -61,8 +60,7 @@ assign_custom_test: optional: true variables: TEST_TYPE: custom_test - TEST_DIR: ${CI_PROJECT_DIR}/tools/test_apps - BUILD_DIR: ${CI_PROJECT_DIR}/build_test_apps + TEST_DIR: tools/test_apps assign_unit_test: extends: @@ -81,10 +79,7 @@ assign_unit_test: optional: true variables: TEST_TYPE: unit_test - TEST_DIR: ${CI_PROJECT_DIR}/components/idf_test/unit_test - BUILD_DIR: ${CI_PROJECT_DIR}/tools/unit-test-app/builds - script: - - python tools/ci/python_packages/ttfw_idf/IDFAssignTest.py $TEST_TYPE $TEST_DIR -c $CI_TARGET_TEST_CONFIG_FILE -o $TEST_DIR/test_configs + TEST_DIR: components/idf_test/unit_test assign_integration_test: extends: diff --git a/.gitlab/ci/build.yml b/.gitlab/ci/build.yml index 04c14a62747..0c56fc50247 100644 --- a/.gitlab/ci/build.yml +++ b/.gitlab/ci/build.yml @@ -15,7 +15,7 @@ .build_pytest_template: extends: - .build_template - - .before_script_pytest + - .before_script_build_jobs dependencies: # set dependencies to null to avoid missing artifacts issue needs: - job: fast_template_app @@ -23,139 +23,170 @@ artifacts: paths: - "**/build*/size.json" - - "**/build*/build.log" + - "**/build*/build_log.txt" - "**/build*/*.bin" - "**/build*/*.elf" - "**/build*/*.map" - "**/build*/flasher_args.json" + - "**/build*/flash_project_args" - "**/build*/config/sdkconfig.json" - "**/build*/bootloader/*.bin" - "**/build*/partition_table/*.bin" - $SIZE_INFO_LOCATION when: always expire_in: 3 days + script: + # CI specific options start from "--collect-size-info xxx". could ignore when running locally + - run_cmd python tools/ci/ci_build_apps.py $TEST_DIR -v + -t $IDF_TARGET + --pytest-apps + --collect-size-info $SIZE_INFO_LOCATION + --parallel-count ${CI_NODE_TOTAL:-1} + --parallel-index ${CI_NODE_INDEX:-1} build_pytest_examples_esp32: extends: - .build_pytest_template - .rules:build:example_test-esp32 - parallel: 2 - script: - - run_cmd python tools/ci/build_pytest_apps.py examples --target esp32 --size-info $SIZE_INFO_LOCATION -vv --parallel-count $CI_NODE_TOTAL --parallel-index $CI_NODE_INDEX + parallel: 3 + variables: + IDF_TARGET: esp32 + TEST_DIR: examples build_pytest_examples_esp32s2: extends: - .build_pytest_template - .rules:build:example_test-esp32s2 - parallel: 2 - script: - - run_cmd python tools/ci/build_pytest_apps.py examples --target esp32s2 --size-info $SIZE_INFO_LOCATION -vv --parallel-count $CI_NODE_TOTAL --parallel-index $CI_NODE_INDEX + parallel: 3 + variables: + IDF_TARGET: esp32s2 + TEST_DIR: examples build_pytest_examples_esp32s3: extends: - .build_pytest_template - .rules:build:example_test-esp32s3 - parallel: 2 - script: - - run_cmd python tools/ci/build_pytest_apps.py examples --target esp32s3 --size-info $SIZE_INFO_LOCATION -vv --parallel-count $CI_NODE_TOTAL --parallel-index $CI_NODE_INDEX - -build_pytest_examples_esp32c2: - extends: - - .build_pytest_template - - .rules:build:example_test-esp32c2 - script: - - run_cmd python tools/ci/build_pytest_apps.py examples --target esp32c2 --size-info $SIZE_INFO_LOCATION -vv + parallel: 3 + variables: + IDF_TARGET: esp32s3 + TEST_DIR: examples build_pytest_examples_esp32c3: extends: - .build_pytest_template - .rules:build:example_test-esp32c3 - parallel: 2 - script: - - run_cmd python tools/ci/build_pytest_apps.py examples --target esp32c3 --size-info $SIZE_INFO_LOCATION -vv --parallel-count $CI_NODE_TOTAL --parallel-index $CI_NODE_INDEX + parallel: 3 + variables: + IDF_TARGET: esp32c3 + TEST_DIR: examples + +build_pytest_examples_esp32c2: + extends: + - .build_pytest_template + - .rules:build:example_test-esp32c2 + variables: + IDF_TARGET: esp32c2 + TEST_DIR: examples build_pytest_components_esp32: extends: - .build_pytest_template - .rules:build:component_ut-esp32 - script: - - run_cmd python tools/ci/build_pytest_apps.py components --target esp32 --size-info $SIZE_INFO_LOCATION -vv + parallel: 2 + variables: + IDF_TARGET: esp32 + TEST_DIR: components build_pytest_components_esp32s2: extends: - .build_pytest_template - .rules:build:component_ut-esp32s2 - script: - - run_cmd python tools/ci/build_pytest_apps.py components --target esp32s2 --size-info $SIZE_INFO_LOCATION -vv + variables: + IDF_TARGET: esp32s2 + TEST_DIR: components build_pytest_components_esp32s3: extends: - .build_pytest_template - .rules:build:component_ut-esp32s3 - script: - - run_cmd python tools/ci/build_pytest_apps.py components --target esp32s3 --size-info $SIZE_INFO_LOCATION -vv + variables: + IDF_TARGET: esp32s3 + TEST_DIR: components build_pytest_components_esp32c3: extends: - .build_pytest_template - .rules:build:component_ut-esp32c3 - script: - - run_cmd python tools/ci/build_pytest_apps.py components --target esp32c3 --size-info $SIZE_INFO_LOCATION -vv + variables: + IDF_TARGET: esp32c3 + TEST_DIR: components build_pytest_components_esp32c2: extends: - .build_pytest_template - .rules:build:component_ut-esp32c2 - script: - - run_cmd python tools/ci/build_pytest_apps.py components --target esp32c2 --size-info $SIZE_INFO_LOCATION -vv + variables: + IDF_TARGET: esp32c2 + TEST_DIR: components build_non_test_components_apps: extends: - - .build_template - - .build_test_apps_template + - .build_cmake_template - .rules:build:component_ut - variables: - IDF_TARGET: all - TEST_PREFIX: component_ut - TEST_RELATIVE_DIR: component_ut + script: + - set_component_ut_vars + # CI specific options start from "--collect-size-info xxx". could ignore when running locally + - run_cmd python tools/ci/ci_build_apps.py $COMPONENT_UT_DIRS -v + -t all + --collect-size-info $SIZE_INFO_LOCATION + --collect-app-info list_job_${CI_NODE_INDEX:-1}.json + --parallel-count ${CI_NODE_TOTAL:-1} + --parallel-index ${CI_NODE_INDEX:-1} build_pytest_test_apps_esp32: extends: - .build_pytest_template - .rules:build:custom_test-esp32 - script: - - run_cmd python tools/ci/build_pytest_apps.py tools/test_apps --target esp32 --size-info $SIZE_INFO_LOCATION -vv + variables: + IDF_TARGET: esp32 + TEST_DIR: tools/test_apps build_pytest_test_apps_esp32s2: extends: - .build_pytest_template - .rules:build:custom_test-esp32s2 - script: - - run_cmd python tools/ci/build_pytest_apps.py tools/test_apps --target esp32s2 --size-info $SIZE_INFO_LOCATION -vv + variables: + IDF_TARGET: esp32s2 + TEST_DIR: tools/test_apps build_pytest_test_apps_esp32s3: extends: - .build_pytest_template - .rules:build:custom_test-esp32s3 - script: - - run_cmd python tools/ci/build_pytest_apps.py tools/test_apps --target esp32s3 --size-info $SIZE_INFO_LOCATION -vv - -build_pytest_test_apps_esp32c2: - extends: - - .build_pytest_template - - .rules:build:custom_test-esp32c2 - script: - - run_cmd python tools/ci/build_pytest_apps.py tools/test_apps --target esp32c2 --size-info $SIZE_INFO_LOCATION -vv + variables: + IDF_TARGET: esp32s3 + TEST_DIR: tools/test_apps build_pytest_test_apps_esp32c3: extends: - .build_pytest_template - .rules:build:custom_test-esp32c3 - script: - - run_cmd python tools/ci/build_pytest_apps.py tools/test_apps --target esp32c3 --size-info $SIZE_INFO_LOCATION -vv + variables: + IDF_TARGET: esp32c3 + TEST_DIR: tools/test_apps + +build_pytest_test_apps_esp32c2: + extends: + - .build_pytest_template + - .rules:build:custom_test-esp32c2 + variables: + IDF_TARGET: esp32c2 + TEST_DIR: tools/test_apps .build_template_app_template: - extends: .build_template + extends: + - .build_template + - .before_script_build_jobs variables: LOG_PATH: "${CI_PROJECT_DIR}/log_template_app" BUILD_PATH: "${CI_PROJECT_DIR}/build_template_app" @@ -177,8 +208,6 @@ build_pytest_test_apps_esp32c3: # 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} @@ -238,33 +267,45 @@ build_ssc_esp32s3: TARGET_NAME: "ESP32S3" .build_esp_idf_tests_cmake_template: - extends: .build_template + extends: + - .build_template + - .before_script_build_jobs dependencies: # set dependencies to null to avoid missing artifacts issue needs: - job: fast_template_app artifacts: false - - scan_tests artifacts: paths: - - tools/unit-test-app/output/${IDF_TARGET} - - tools/unit-test-app/builds/*.json - - tools/unit-test-app/builds/${IDF_TARGET}/*/size.json - - components/idf_test/unit_test/*.yml - - $LOG_PATH + - "**/build*/size.json" + - "**/build*/build_log.txt" + - "**/build*/*.bin" + - "**/build*/*.elf" + - "**/build*/*.map" + - "**/build*/flasher_args.json" + - "**/build*/flash_project_args" + - "**/build*/config/sdkconfig.json" + - "**/build*/sdkconfig" + - "**/build*/bootloader/*.bin" + - "**/build*/partition_table/*.bin" + - list_job_*.json - $SIZE_INFO_LOCATION + - components/idf_test/unit_test/*.yml when: always expire_in: 4 days variables: - LOG_PATH: "$CI_PROJECT_DIR/log_ut_cmake" - BUILD_PATH: ${CI_PROJECT_DIR}/tools/unit-test-app/builds - OUTPUT_PATH: ${CI_PROJECT_DIR}/tools/unit-test-app/output - BUILD_SYSTEM: "cmake" - TEST_TYPE: "unit_test" LDGEN_CHECK_MAPPING: 1 script: - - ${IDF_PATH}/tools/ci/find_apps_build_apps.sh - - cd $CI_PROJECT_DIR/tools/unit-test-app - - python tools/UnitTestParser.py ${BUILD_PATH} ${CI_NODE_INDEX:-1} + # CI specific options start from "--collect-size-info xxx". could ignore when running locally + - run_cmd python tools/ci/ci_build_apps.py tools/unit-test-app -v + -t $IDF_TARGET + --config "configs/*=" + --copy-sdkconfig + --collect-size-info $SIZE_INFO_LOCATION + --collect-app-info list_job_${CI_NODE_INDEX:-1}.json + --parallel-count ${CI_NODE_TOTAL:-1} + --parallel-index ${CI_NODE_INDEX:-1} + --preserve-all + - run_cmd python tools/unit-test-app/tools/UnitTestParser.py tools/unit-test-app ${CI_NODE_INDEX:-1} build_esp_idf_tests_cmake_esp32: extends: @@ -303,141 +344,143 @@ build_esp_idf_tests_cmake_esp32c3: variables: IDF_TARGET: esp32c3 -.build_examples_template: - extends: .build_template - dependencies: # set dependencies to null to avoid missing artifacts issue +.build_cmake_template: + extends: + - .build_template + - .before_script_build_jobs + dependencies: # set dependencies to null to avoid missing artifacts issue needs: - job: fast_template_app artifacts: false - - scan_tests variables: - TEST_PREFIX: examples - TEST_RELATIVE_DIR: examples - SCAN_TEST_JSON: ${CI_PROJECT_DIR}/${TEST_RELATIVE_DIR}/test_configs/scan_${IDF_TARGET}_${BUILD_SYSTEM}.json - TEST_TYPE: example_test - LOG_PATH: ${CI_PROJECT_DIR}/log_${TEST_PREFIX} - BUILD_PATH: ${CI_PROJECT_DIR}/build_${TEST_PREFIX} LDGEN_CHECK_MAPPING: 1 - script: - # it's not possible to build 100% out-of-tree and have the "artifacts" - # mechanism work, but this is the next best thing - - ${IDF_PATH}/tools/ci/find_apps_build_apps.sh - -.build_examples_cmake_template: - extends: .build_examples_template artifacts: paths: - - build_${TEST_PREFIX}/list.json - - build_${TEST_PREFIX}/list_job_*.json - - build_${TEST_PREFIX}/*/*/*/sdkconfig - - build_${TEST_PREFIX}/*/*/*/build/size.json - - build_${TEST_PREFIX}/*/*/*/build/*.bin - - build_${TEST_PREFIX}/*/*/*/build/*.elf - - build_${TEST_PREFIX}/*/*/*/build/*.map - - build_${TEST_PREFIX}/*/*/*/build/flasher_args.json - - build_${TEST_PREFIX}/*/*/*/build/bootloader/*.bin - - build_${TEST_PREFIX}/*/*/*/build/partition_table/*.bin - - $LOG_PATH + - "**/build*/size.json" + - "**/build*/build_log.txt" + - "**/build*/*.bin" + - "**/build*/*.elf" + - "**/build*/*.map" + - "**/build*/flasher_args.json" + - "**/build*/flash_project_args" + - "**/build*/config/sdkconfig.json" + - "**/build*/sdkconfig" + - "**/build*/bootloader/*.bin" + - "**/build*/partition_table/*.bin" + - list_job_*.json - $SIZE_INFO_LOCATION when: always expire_in: 4 days - variables: - BUILD_SYSTEM: cmake + script: + # CI specific options start from "--collect-size-info xxx". could ignore when running locally + - run_cmd python tools/ci/ci_build_apps.py $TEST_DIR -v + -t $IDF_TARGET + --copy-sdkconfig + --collect-size-info $SIZE_INFO_LOCATION + --collect-app-info list_job_${CI_NODE_INDEX:-1}.json + --parallel-count ${CI_NODE_TOTAL:-1} + --parallel-index ${CI_NODE_INDEX:-1} + --extra-preserve-dirs + examples/bluetooth/esp_ble_mesh/ble_mesh_console + examples/bluetooth/hci/controller_hci_uart_esp32 + examples/wifi/iperf build_examples_cmake_esp32: extends: - - .build_examples_cmake_template + - .build_cmake_template - .rules:build:example_test-esp32 parallel: 12 variables: IDF_TARGET: esp32 + TEST_DIR: examples build_examples_cmake_esp32s2: extends: - - .build_examples_cmake_template + - .build_cmake_template - .rules:build:example_test-esp32s2 parallel: 8 variables: IDF_TARGET: esp32s2 + TEST_DIR: examples build_examples_cmake_esp32s3: extends: - - .build_examples_cmake_template + - .build_cmake_template - .rules:build:example_test-esp32s3 parallel: 8 variables: IDF_TARGET: esp32s3 + TEST_DIR: examples build_examples_cmake_esp32c2: extends: - - .build_examples_cmake_template + - .build_cmake_template - .rules:build:example_test-esp32c2 parallel: 8 variables: IDF_TARGET: esp32c2 + TEST_DIR: examples build_examples_cmake_esp32c3: extends: - - .build_examples_cmake_template + - .build_cmake_template - .rules:build:example_test-esp32c3 parallel: 8 variables: IDF_TARGET: esp32c3 + TEST_DIR: examples build_examples_cmake_esp32h2: extends: - - .build_examples_cmake_template + - .build_cmake_template - .rules:build:example_test-esp32h2 variables: IDF_TARGET: esp32h2 - -.build_test_apps_template: - extends: .build_examples_cmake_template - variables: - TEST_PREFIX: test_apps - TEST_RELATIVE_DIR: tools/test_apps - TEST_TYPE: custom_test - script: - - ${IDF_PATH}/tools/ci/find_apps_build_apps.sh + TEST_DIR: examples build_test_apps_esp32: extends: - - .build_test_apps_template + - .build_cmake_template - .rules:build:custom_test-esp32 parallel: 2 variables: IDF_TARGET: esp32 + TEST_DIR: tools/test_apps build_test_apps_esp32s2: extends: - - .build_test_apps_template + - .build_cmake_template - .rules:build:custom_test-esp32s2 parallel: 2 variables: IDF_TARGET: esp32s2 + TEST_DIR: tools/test_apps build_test_apps_esp32s3: extends: - - .build_test_apps_template + - .build_cmake_template - .rules:build:custom_test-esp32s3 parallel: 2 variables: IDF_TARGET: esp32s3 + TEST_DIR: tools/test_apps build_test_apps_esp32c3: extends: - - .build_test_apps_template + - .build_cmake_template - .rules:build:custom_test-esp32c3 parallel: 2 variables: IDF_TARGET: esp32c3 + TEST_DIR: tools/test_apps build_test_apps_esp32c2: extends: - - .build_test_apps_template + - .build_cmake_template - .rules:build:custom_test-esp32c2 variables: IDF_TARGET: esp32c2 + TEST_DIR: tools/test_apps .test_build_system_template: stage: host_test diff --git a/.gitlab/ci/host-test.yml b/.gitlab/ci/host-test.yml index 98f03a9aaae..4fc4545aa3d 100644 --- a/.gitlab/ci/host-test.yml +++ b/.gitlab/ci/host-test.yml @@ -436,8 +436,11 @@ test_gen_soc_caps_kconfig: test_pytest_qemu: extends: - .host_test_template - - .before_script_pytest + - .before_script_build_jobs image: $QEMU_IMAGE script: - - run_cmd python tools/ci/build_pytest_apps.py . --target esp32 -m qemu -vv + - run_cmd python tools/ci/ci_build_apps.py . -vv + --target esp32 + --pytest-apps + -m qemu - pytest --target esp32 -m qemu --embedded-services idf,qemu diff --git a/.gitlab/ci/pre_check.yml b/.gitlab/ci/pre_check.yml index eb093791db1..1b8b28a2265 100644 --- a/.gitlab/ci/pre_check.yml +++ b/.gitlab/ci/pre_check.yml @@ -153,38 +153,6 @@ check_esp_system: script: - python components/esp_system/check_system_init_priorities.py -scan_tests: - extends: - - .pre_check_base_template - - .before_script_pytest - - .rules:build:target_test - image: $TARGET_TEST_ENV_IMAGE - tags: - - scan_test # since this job is used for uploading the cache, the runner tags should be unique - artifacts: - paths: - - $EXAMPLE_TEST_OUTPUT_DIR - - $TEST_APPS_OUTPUT_DIR - - $COMPONENT_UT_OUTPUT_DIR - expire_in: 1 week - variables: - EXAMPLE_TEST_DIR: ${CI_PROJECT_DIR}/examples - EXAMPLE_TEST_OUTPUT_DIR: ${CI_PROJECT_DIR}/examples/test_configs - TEST_APPS_TEST_DIR: ${CI_PROJECT_DIR}/tools/test_apps - TEST_APPS_OUTPUT_DIR: ${CI_PROJECT_DIR}/tools/test_apps/test_configs - COMPONENT_UT_OUTPUT_DIR: ${CI_PROJECT_DIR}/component_ut/test_configs - CI_SCAN_TESTS_PY: ${CI_PROJECT_DIR}/tools/ci/python_packages/ttfw_idf/CIScanTests.py - EXTRA_TEST_DIRS: >- - examples/bluetooth/esp_ble_mesh/ble_mesh_console - examples/bluetooth/hci/controller_hci_uart_esp32 - examples/wifi/iperf - EXTRA_EVALUATE_ARGS: '--evaluate-parallel-count --config "sdkconfig.ci=default" --config "sdkconfig.ci.*=" --config "=default"' - script: - - 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 --extra_test_dirs $EXTRA_TEST_DIRS $EXTRA_EVALUATE_ARGS - - run_cmd python $CI_SCAN_TESTS_PY test_apps $TEST_APPS_TEST_DIR -c $CI_TARGET_TEST_CONFIG_FILE -o $TEST_APPS_OUTPUT_DIR $EXTRA_EVALUATE_ARGS - - set_component_ut_vars - - 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 --combine-all-targets --except-targets linux $EXTRA_EVALUATE_ARGS - # For release tag pipelines only, make sure the tag was created with 'git tag -a' so it will update # the version returned by 'git describe' check_version_tag: diff --git a/.gitlab/ci/rules.yml b/.gitlab/ci/rules.yml index 377158ba9eb..f1ea5aeb702 100644 --- a/.gitlab/ci/rules.yml +++ b/.gitlab/ci/rules.yml @@ -41,14 +41,6 @@ - "components/**/*" - "examples/cxx/experimental/experimental_cpp_component/*" -.patterns-build_target_test: &patterns-build_target_test - - "tools/ci/find_apps_build_apps.sh" - - "tools/build_apps.py" - - "tools/find_apps.py" - - "tools/find_build_apps/**/*" - - - "tools/ci/build_pytest_apps.py" - .patterns-build_system: &patterns-build_system - "tools/cmake/**/*" - "tools/kconfig_new/**/*" @@ -56,6 +48,7 @@ - "tools/requirements.json" - "tools/ci/test_build_system*.sh" - "tools/ci/test_build_system*.py" + - "tools/ci/ci_build_apps.py" .patterns-custom_test: &patterns-custom_test - "components/espcoredump/**/*" @@ -64,11 +57,6 @@ - "tools/ci/python_packages/tiny_test_fw/**/*" - "tools/ci/python_packages/ttfw_idf/**/*" - - "tools/ci/find_apps_build_apps.sh" - - "tools/build_apps.py" - - "tools/find_apps.py" - - "tools/find_build_apps/**/*" - - "tools/test_apps/**/*" - "tools/ldgen/**/*" @@ -77,11 +65,6 @@ - "tools/ci/python_packages/tiny_test_fw/**/*" - "tools/ci/python_packages/ttfw_idf/**/*" - - "tools/ci/find_apps_build_apps.sh" - - "tools/build_apps.py" - - "tools/find_apps.py" - - "tools/find_build_apps/**/*" - - "tools/unit-test-app/**/*" - "components/**/*" @@ -91,11 +74,6 @@ - "tools/ci/python_packages/tiny_test_fw/**/*" - "tools/ci/python_packages/ttfw_idf/**/*" - - "tools/ci/find_apps_build_apps.sh" - - "tools/build_apps.py" - - "tools/find_apps.py" - - "tools/find_build_apps/**/*" - - "components/**/*" .patterns-integration_test: &patterns-integration_test @@ -485,8 +463,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-component_ut - <<: *if-dev-push @@ -508,8 +484,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-component_ut @@ -525,8 +499,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test .rules:build:component_ut-esp32c3: rules: @@ -543,8 +515,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-component_ut @@ -563,8 +533,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-component_ut @@ -583,8 +551,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-component_ut @@ -603,8 +569,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-component_ut - <<: *if-dev-push @@ -629,8 +593,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-custom_test @@ -648,8 +610,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-custom_test @@ -664,8 +624,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test .rules:build:custom_test-esp32c3: rules: @@ -680,8 +638,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-custom_test @@ -698,8 +654,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-custom_test @@ -716,8 +670,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-custom_test @@ -734,8 +686,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-custom_test @@ -772,8 +722,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-example_test - <<: *if-dev-push @@ -801,8 +749,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-example_test - <<: *if-dev-push @@ -824,8 +770,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-example_test-related_changes-bt - <<: *if-dev-push @@ -850,8 +794,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-example_test - <<: *if-dev-push @@ -876,8 +818,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-example_test - <<: *if-dev-push @@ -902,8 +842,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-example_test - <<: *if-dev-push @@ -928,8 +866,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-example_test - <<: *if-dev-push @@ -1012,8 +948,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-component_ut - <<: *if-dev-push @@ -1050,8 +984,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-unit_test @@ -1069,8 +1001,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-unit_test @@ -1085,8 +1015,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test .rules:build:unit_test-esp32c3: rules: @@ -1101,8 +1029,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-unit_test @@ -1119,8 +1045,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-unit_test @@ -1137,8 +1061,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-unit_test @@ -1155,8 +1077,6 @@ changes: *patterns-build_components - <<: *if-dev-push changes: *patterns-build_system - - <<: *if-dev-push - changes: *patterns-build_target_test - <<: *if-dev-push changes: *patterns-unit_test diff --git a/.gitlab/ci/static-code-analysis.yml b/.gitlab/ci/static-code-analysis.yml index 2de67d38345..23de4fb9be0 100644 --- a/.gitlab/ci/static-code-analysis.yml +++ b/.gitlab/ci/static-code-analysis.yml @@ -10,7 +10,6 @@ clang_tidy_check: when: always expire_in: 1 day variables: - CLANG_TIDY_RUNNER_PROJ: 2107 # idf/clang-tidy-runner CLANG_TIDY_DIRS_TXT: ${CI_PROJECT_DIR}/tools/ci/clang_tidy_dirs.txt RULES_FILE: ${CI_PROJECT_DIR}/tools/ci/static-analysis-rules.yml OUTPUT_DIR: ${CI_PROJECT_DIR}/clang_tidy_reports diff --git a/components/cxx/.build-test-rules.yml b/components/cxx/.build-test-rules.yml new file mode 100644 index 00000000000..3b8ff55552b --- /dev/null +++ b/components/cxx/.build-test-rules.yml @@ -0,0 +1,7 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +components/cxx/test_apps: + enable: + - if: IDF_TARGET in ["esp32", "esp32c3"] + temporary: true + reason: the other targets are not tested yet diff --git a/components/driver/.build-test-rules.yml b/components/driver/.build-test-rules.yml new file mode 100644 index 00000000000..ce158906c71 --- /dev/null +++ b/components/driver/.build-test-rules.yml @@ -0,0 +1,33 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +components/driver/test_apps/i2s_test_apps: + disable: + - if: SOC_I2S_SUPPORTED != 1 + +components/driver/test_apps/i2s_test_apps/legacy_i2s_adc_dac: + disable: + - if: SOC_I2S_SUPPORTS_ADC_DAC != 1 + +components/driver/test_apps/legacy_pcnt_driver: + disable: + - if: SOC_PCNT_SUPPORTED != 1 + +components/driver/test_apps/legacy_rmt_driver: + disable: + - if: SOC_RMT_SUPPORTED != 1 + +components/driver/test_apps/legacy_rtc_temp_driver: + disable: + - if: SOC_TEMP_SENSOR_SUPPORTED != 1 + +components/driver/test_apps/pulse_cnt: + disable: + - if: SOC_PCNT_SUPPORTED != 1 + +components/driver/test_apps/rmt: + disable: + - if: SOC_RMT_SUPPORTED != 1 + +components/driver/test_apps/temperature_sensor: + disable: + - if: SOC_TEMP_SENSOR_SUPPORTED != 1 diff --git a/components/esp_eth/.build-test-rules.yml b/components/esp_eth/.build-test-rules.yml new file mode 100644 index 00000000000..5493b523c3a --- /dev/null +++ b/components/esp_eth/.build-test-rules.yml @@ -0,0 +1,6 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +components/esp_eth/test_apps: + enable: + - if: IDF_TARGET == "esp32" + reason: only test on esp32 diff --git a/components/esp_lcd/.build-test-rules.yml b/components/esp_lcd/.build-test-rules.yml new file mode 100644 index 00000000000..8df02267ece --- /dev/null +++ b/components/esp_lcd/.build-test-rules.yml @@ -0,0 +1,9 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +components/esp_lcd/test_apps/i80_lcd: + disable: + - if: SOC_LCD_I80_SUPPORTED != 1 + +components/esp_lcd/test_apps/rgb_lcd: + disable: + - if: SOC_LCD_RGB_SUPPORTED != 1 diff --git a/components/esp_netif/.build-test-rules.yml b/components/esp_netif/.build-test-rules.yml new file mode 100644 index 00000000000..15f5140e854 --- /dev/null +++ b/components/esp_netif/.build-test-rules.yml @@ -0,0 +1,7 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +components/esp_netif/test_apps: + disable_test: + - if: IDF_TARGET != "esp32s2" + temporary: true + reason: lack of runners diff --git a/components/esp_psram/.build-test-rules.yml b/components/esp_psram/.build-test-rules.yml new file mode 100644 index 00000000000..80b8ef4fe37 --- /dev/null +++ b/components/esp_psram/.build-test-rules.yml @@ -0,0 +1,6 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +components/esp_psram/test_apps: + enable: + - if: IDF_TARGET in ["esp32", "esp32s2", "esp32s3"] + reason: only test on esp32, esp32s2, and esp32s3 diff --git a/components/esp_rom/.build-test-rules.yml b/components/esp_rom/.build-test-rules.yml new file mode 100644 index 00000000000..1ed5faae8e8 --- /dev/null +++ b/components/esp_rom/.build-test-rules.yml @@ -0,0 +1,6 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +components/esp_rom/host_test/rom_test: + enable: + - if: IDF_TARGET == "linux" + reason: only test on linux diff --git a/components/esp_system/.build-test-rules.yml b/components/esp_system/.build-test-rules.yml new file mode 100644 index 00000000000..723aea0b55e --- /dev/null +++ b/components/esp_system/.build-test-rules.yml @@ -0,0 +1,7 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +components/esp_system/test_apps/rtc_power_modes: + enable: + - if: IDF_TARGET == "esp32s3" + temporary: true + reason: the other targets are not tested yet diff --git a/components/espcoredump/.build-test-rules.yml b/components/espcoredump/.build-test-rules.yml new file mode 100644 index 00000000000..8f546a13dcd --- /dev/null +++ b/components/espcoredump/.build-test-rules.yml @@ -0,0 +1,7 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +components/espcoredump/test_apps: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet diff --git a/components/log/.build-test-rules.yml b/components/log/.build-test-rules.yml new file mode 100644 index 00000000000..4385b9916b6 --- /dev/null +++ b/components/log/.build-test-rules.yml @@ -0,0 +1,6 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +components/log/host_test/log_test: + enable: + - if: IDF_TARGET == "linux" + reason: only test on linux diff --git a/components/spi_flash/.build-test-rules.yml b/components/spi_flash/.build-test-rules.yml new file mode 100644 index 00000000000..9eea188bf6b --- /dev/null +++ b/components/spi_flash/.build-test-rules.yml @@ -0,0 +1,6 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +components/spi_flash/host_test/partition_api_test: + enable: + - if: IDF_TARGET == "linux" + reason: only test on linux diff --git a/components/wear_levelling/.build-test-rules.yml b/components/wear_levelling/.build-test-rules.yml new file mode 100644 index 00000000000..f596e6c08a5 --- /dev/null +++ b/components/wear_levelling/.build-test-rules.yml @@ -0,0 +1,7 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +components/wear_levelling/test_apps: + enable: + - if: IDF_TARGET in ["esp32", "esp32c3"] + temporary: true + reason: the other targets are not tested yet diff --git a/docs/en/contribute/esp-idf-tests-with-pytest.rst b/docs/en/contribute/esp-idf-tests-with-pytest.rst index 74d7c9d2d87..8d2fe06c3ad 100644 --- a/docs/en/contribute/esp-idf-tests-with-pytest.rst +++ b/docs/en/contribute/esp-idf-tests-with-pytest.rst @@ -390,11 +390,11 @@ Build Job Names Build Job Command ^^^^^^^^^^^^^^^^^ -The command used by CI to build all the relevant tests is: ``python $IDF_PATH/tools/ci/build_pytest_apps.py --target -vv`` +The command used by CI to build all the relevant tests is: ``python $IDF_PATH/tools/ci/ci_build_apps.py --target -vv --pytest-apps`` All apps which supported the specified target would be built with all supported sdkconfig files under ``build__``. -For example, If you run ``python $IDF_PATH/tools/ci/build_pytest_apps.py $IDF_PATH/examples/system/console/basic --target esp32``, the folder structure would be like this: +For example, If you run ``python $IDF_PATH/tools/ci/ci_build_apps.py $IDF_PATH/examples/system/console/basic --target esp32 --pytest-apps``, the folder structure would be like this: .. code:: text @@ -442,7 +442,7 @@ For example, if you want to run all the esp32 tests under the ``$IDF_PATH/exampl $ cd $IDF_PATH $ . ./export.sh $ cd examples/system/console/basic - $ python $IDF_PATH/tools/ci/build_pytest_apps.py . --target esp32 -vv + $ python $IDF_PATH/tools/ci/ci_build_apps.py . --target esp32 -vv --pytest-apps $ pytest --target esp32 Tips and Tricks diff --git a/examples/bluetooth/.build-test-rules.yml b/examples/bluetooth/.build-test-rules.yml new file mode 100644 index 00000000000..6c04b6c4eb8 --- /dev/null +++ b/examples/bluetooth/.build-test-rules.yml @@ -0,0 +1,105 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/bluetooth/bluedroid/ble: + enable: + - if: IDF_TARGET in ["esp32", "esp32c2", "esp32c3", "esp32h2", "esp32s3"] + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/bluedroid/ble_50: + enable: + - if: IDF_TARGET in ["esp32c2", "esp32c3", "esp32h2", "esp32s3"] + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/bluedroid/ble_50/multi-adv: + enable: + - if: IDF_TARGET in ["esp32c2", "esp32c3", "esp32s3"] + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/bluedroid/classic_bt: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/bluedroid/coex/a2dp_gatts_coex: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/bluedroid/coex/gattc_gatts_coex: + enable: + - if: IDF_TARGET in ["esp32", "esp32c3"] + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/blufi: + enable: + - if: IDF_TARGET in ["esp32", "esp32c3"] + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/esp_ble_mesh: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/esp_ble_mesh/ble_mesh_console: + enable: + - if: IDF_TARGET in ["esp32", "esp32c3", "esp32s3"] + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/esp_hid_device: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/esp_hid_host: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/hci/ble_adv_scan_combined: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/hci/controller_hci_uart_esp32: + enable: + - if: IDF_TARGET == "esp32" + +examples/bluetooth/hci/controller_hci_uart_esp32c3_and_esp32s3: + enable: + - if: IDF_TARGET in ["esp32c3", "esp32s3"] + +examples/bluetooth/hci/controller_vhci_ble_adv: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/nimble: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + + reason: not tested yet +examples/bluetooth/nimble/ble_spp: + enable: + - if: IDF_TARGET in ["esp32", "esp32c3", "esp32s3"] + temporary: true + reason: the other targets are not tested yet + +examples/bluetooth/nimble/hci: + enable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: the other targets are not tested yet diff --git a/examples/build_system/.build-test-rules.yml b/examples/build_system/.build-test-rules.yml new file mode 100644 index 00000000000..67ee6592c2d --- /dev/null +++ b/examples/build_system/.build-test-rules.yml @@ -0,0 +1,18 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/build_system/cmake/import_lib: + disable_test: + - if: IDF_TARGET in ["esp32c2", "esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/build_system/cmake/linux_host_app: + enable: + - if: IDF_TARGET == "linux" + reason: only test on linux + +examples/build_system/cmake/plugins: + disable_test: + - if: IDF_TARGET not in ["esp32", "esp32c3"] + temporary: true + reason: lack of runners diff --git a/examples/cxx/.build-test-rules.yml b/examples/cxx/.build-test-rules.yml new file mode 100644 index 00000000000..2680c11384f --- /dev/null +++ b/examples/cxx/.build-test-rules.yml @@ -0,0 +1,41 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/cxx/exceptions: + disable_test: + - if: IDF_TARGET not in ["esp32", "esp32c3"] + temporary: true + reason: lack of runners + +examples/cxx/experimental/esp_modem_cxx: + enable: + - if: IDF_TARGET in ["esp32", "esp32s2"] + temporary: true + reason: the other targets are not tested yet + +examples/cxx/experimental/experimental_cpp_component/host_test: + enable: + - if: IDF_TARGET == "linux" + reason: only test on linux + +examples/cxx/experimental/simple_i2c_rw_example: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/cxx/experimental/simple_spi_rw_example: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/cxx/pthread: + disable_test: + - if: IDF_TARGET not in ["esp32", "esp32c3"] + temporary: true + reason: lack of runners +examples/cxx/rtti: + disable_test: + - if: IDF_TARGET not in ["esp32", "esp32c3"] + temporary: true + reason: lack of runners diff --git a/examples/ethernet/.build-test-rules.yml b/examples/ethernet/.build-test-rules.yml new file mode 100644 index 00000000000..81256675589 --- /dev/null +++ b/examples/ethernet/.build-test-rules.yml @@ -0,0 +1,17 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/ethernet: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/ethernet/iperf: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners diff --git a/examples/get-started/.build-test-rules.yml b/examples/get-started/.build-test-rules.yml new file mode 100644 index 00000000000..fa5c4074404 --- /dev/null +++ b/examples/get-started/.build-test-rules.yml @@ -0,0 +1,7 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/get-started/blink: + disable_test: + - if: IDF_TARGET not in ["esp32", "esp32c3"] + temporary: true + reason: lack of runners diff --git a/examples/mesh/.build-test-rules.yml b/examples/mesh/.build-test-rules.yml new file mode 100644 index 00000000000..debb9903e07 --- /dev/null +++ b/examples/mesh/.build-test-rules.yml @@ -0,0 +1,7 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/mesh: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet diff --git a/examples/network/.build-test-rules.yml b/examples/network/.build-test-rules.yml new file mode 100644 index 00000000000..799c35c911f --- /dev/null +++ b/examples/network/.build-test-rules.yml @@ -0,0 +1,17 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/network/network_tests: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/network/simple_sniffer: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: not tested diff --git a/examples/openthread/.build-test-rules.yml b/examples/openthread/.build-test-rules.yml new file mode 100644 index 00000000000..374b79845a8 --- /dev/null +++ b/examples/openthread/.build-test-rules.yml @@ -0,0 +1,17 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/openthread/ot_br: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/openthread/ot_cli: + enable: + - if: IDF_TARGET == "esp32h2" + reason: only test on esp32h2 + +examples/openthread/ot_rcp: + enable: + - if: IDF_TARGET == "esp32h2" + reason: only test on esp32h2 diff --git a/examples/peripherals/.build-test-rules.yml b/examples/peripherals/.build-test-rules.yml new file mode 100644 index 00000000000..44b93d935be --- /dev/null +++ b/examples/peripherals/.build-test-rules.yml @@ -0,0 +1,234 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/peripherals/adc/dma_read: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/peripherals/adc/single_read/adc: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/peripherals/adc/single_read/adc2: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/peripherals/adc/single_read/single_read: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/peripherals/gpio/generic_gpio: + disable_test: + - if: IDF_TARGET != "esp32" + temporary: true + reason: lack of runners + +examples/peripherals/gpio/matrix_keyboard: + enable: + - if: IDF_TARGET == "esp32s2" + +examples/peripherals/i2c/i2c_self_test: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/peripherals/i2c/i2c_simple: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/peripherals/i2c/i2c_tools: + disable_test: + - if: IDF_TARGET != "esp32" + temporary: true + reason: lack of runners + +examples/peripherals/i2s: + disable: + - if: SOC_I2S_SUPPORTED != 1 + +examples/peripherals/i2s/i2s_adc_dac: + disable: + - if: SOC_I2S_SUPPORTS_ADC_DAC != 1 + +examples/peripherals/i2s/i2s_audio_recorder_sdcard: + enable: + - if: IDF_TARGET == "esp32" or IDF_TARGET == "esp32s3" + temporary: true + reason: the other targets are not tested yet + +examples/peripherals/i2s/i2s_basic: + disable: + - if: SOC_I2S_SUPPORTED != 1 + +examples/peripherals/lcd/i80_controller: + disable: + - if: SOC_LCD_I80_SUPPORTED != 1 + +examples/peripherals/lcd/rgb_panel: + disable: + - if: SOC_LCD_RGB_SUPPORTED != 1 + +examples/peripherals/mcpwm: + disable: + - if: SOC_MCPWM_SUPPORTED != 1 + +examples/peripherals/pcnt: + disable: + - if: SOC_PCNT_SUPPORTED != 1 + +examples/peripherals/rmt: + disable: + - if: SOC_RMT_SUPPORTED != 1 + +examples/peripherals/rmt/ir_nec_transceiver: + disable: + - if: SOC_RMT_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/peripherals/rmt/musical_buzzer: + enable: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: the other targets are not tested yet + +examples/peripherals/rmt/stepper_motor: + enable: + - if: IDF_TARGET == "esp32s3" + temporary: true + reason: the other targets are not tested yet + +examples/peripherals/sdio: + disable: + - if: SOC_SDIO_SLAVE_SUPPORTED != 1 + +examples/peripherals/secure_element/atecc608_ecdsa: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/peripherals/sigmadelta: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/peripherals/spi_master/hd_eeprom: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/peripherals/spi_master/lcd: + enable: + - if: IDF_TARGET in ["esp32", "esp32c3", "esp32s2"] + temporary: true + reason: the other targets are not tested yet + +examples/peripherals/spi_slave/receiver: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/peripherals/spi_slave/sender: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/peripherals/spi_slave_hd/append_mode/master: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/peripherals/spi_slave_hd/append_mode/slave: + enable: + - if: IDF_TARGET == "esp32s2" + temporary: true + reason: the other targets are not tested yet + +examples/peripherals/spi_slave_hd/segment_mode/seg_master: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/peripherals/spi_slave_hd/segment_mode/seg_slave: + disable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: not tested yet + +examples/peripherals/temp_sensor: + disable: + - if: SOC_TEMP_SENSOR_SUPPORTED != 1 + +examples/peripherals/touch_sensor: + disable: + - if: SOC_TOUCH_SENSOR_NUM == 0 + +examples/peripherals/touch_sensor/touch_element: + enable: + - if: IDF_TARGET == "esp32s2" + reason: only test on esp32s2 + +examples/peripherals/touch_sensor/touch_sensor_v1: + disable: + - if: SOC_TOUCH_SENSOR_NUM != 10 + +examples/peripherals/touch_sensor/touch_sensor_v2: + disable: + - if: SOC_TOUCH_SENSOR_NUM != 15 + +examples/peripherals/twai: + disable: + - if: SOC_TWAI_SUPPORTED != 1 + +examples/peripherals/twai/twai_alert_and_recovery: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/peripherals/twai/twai_self_test: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/peripherals/uart/uart_echo_rs485: + enable: + - if: INCLUDE_DEFAULT == 1 or IDF_TARGET == "esp32h2" + +examples/peripherals/usb: + disable: + - if: SOC_USB_PERIPH_NUM != 1 + +examples/peripherals/wave_gen: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet diff --git a/examples/protocols/.build-test-rules.yml b/examples/protocols/.build-test-rules.yml new file mode 100644 index 00000000000..74bffb33cc2 --- /dev/null +++ b/examples/protocols/.build-test-rules.yml @@ -0,0 +1,253 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/protocols/asio/asio_chat: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/protocols/asio/async_request: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/protocols/asio/socks4: + enable: + - if: IDF_TARGET == "esp32" or IDF_TARGET == "esp32s2" + temporary: true + reason: the other targets are not tested yet + +examples/protocols/asio/ssl_client_server: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/protocols/asio/tcp_echo_server: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/protocols/asio/udp_echo_server: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/protocols/coap_client: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/protocols/coap_server: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/protocols/http2_request: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/protocols/http_request: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/protocols/http_server: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/protocols/https_mbedtls: + disable_test: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: lack of runners + +examples/protocols/https_server/simple: + disable_test: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: lack of runners + +examples/protocols/https_server/wss_server: + disable_test: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: lack of runners + +examples/protocols/https_x509_bundle: + disable_test: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: lack of runners + +examples/protocols/icmp_echo: + disable_test: + - if: IDF_TARGET != "esp32" + temporary: true + reason: lack of runners + +examples/protocols/l2tap: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/protocols/mdns: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/protocols/modbus: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/protocols/mqtt/ssl: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/protocols/mqtt/ssl_ds: + enable: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + +examples/protocols/mqtt/ssl_mutual_auth: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/protocols/mqtt/ssl_psk: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/protocols/mqtt/tcp: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/protocols/mqtt/ws: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/protocols/mqtt/wss: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/protocols/slip/slip_udp: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/protocols/smtp_client: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/protocols/sntp: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/protocols/sockets/non_blocking: + disable_test: + - if: IDF_TARGET != "esp32" + temporary: true + reason: lack of runners + +examples/protocols/sockets/tcp_client: + disable_test: + - if: IDF_TARGET != "esp32" + temporary: true + reason: lack of runners + +examples/protocols/sockets/tcp_client_multi_net: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/protocols/sockets/tcp_server: + disable_test: + - if: IDF_TARGET != "esp32" + temporary: true + reason: lack of runners + +examples/protocols/sockets/udp_client: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/protocols/sockets/udp_server: + disable_test: + - if: IDF_TARGET != "esp32" + temporary: true + reason: lack of runners diff --git a/examples/provisioning/.build-test-rules.yml b/examples/provisioning/.build-test-rules.yml new file mode 100644 index 00000000000..2c9fd3875b7 --- /dev/null +++ b/examples/provisioning/.build-test-rules.yml @@ -0,0 +1,7 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/provisioning/wifi_prov_mgr: + disable_test: + - if: IDF_TARGET != "esp32" + temporary: true + reason: lack of runners diff --git a/examples/security/.build-test-rules.yml b/examples/security/.build-test-rules.yml new file mode 100644 index 00000000000..de87020fcf0 --- /dev/null +++ b/examples/security/.build-test-rules.yml @@ -0,0 +1,11 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/security/flash_encryption: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners diff --git a/examples/storage/.build-test-rules.yml b/examples/storage/.build-test-rules.yml new file mode 100644 index 00000000000..2bc1265b3d5 --- /dev/null +++ b/examples/storage/.build-test-rules.yml @@ -0,0 +1,155 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/storage/custom_flash_driver: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/storage/ext_flash_fatfs: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/storage/fatfsgen: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/storage/nvs_rw_blob: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/storage/nvs_rw_value: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/storage/nvs_rw_value_cxx: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/storage/partition_api/partition_find: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/storage/partition_api/partition_mmap: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/storage/partition_api/partition_ops: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/storage/parttool: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/storage/sd_card/sdmmc: + disable: + - if: SOC_SDMMC_HOST_SUPPORTED != 1 + disable_test: + - if: IDF_TARGET == "esp32s3" + temporary: true + reason: lack of runners + +examples/storage/sd_card/sdspi: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET == "esp32s3" + temporary: true + reason: lack of runners + +examples/storage/semihost_vfs: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/storage/spiffs: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/storage/spiffsgen: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/storage/wear_levelling: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners diff --git a/examples/system/.build-test-rules.yml b/examples/system/.build-test-rules.yml new file mode 100644 index 00000000000..77122a71d35 --- /dev/null +++ b/examples/system/.build-test-rules.yml @@ -0,0 +1,221 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/system/app_trace_to_host: + enable: + - if: IDF_TARGET in ["esp32", "esp32s2"] + temporary: true + reason: the other targets are not tested yet + disable_test: + - if: IDF_TARGET == "esp32s2" + temporary: true + reason: lack of runners + +examples/system/console/advanced: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/system/console/advanced_usb_cdc: + enable: + - if: IDF_TARGET == "esp32s2" + temporary: true + reason: the other targets are not tested yet + +examples/system/console/basic: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/system/deep_sleep: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/system/efuse: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET == "esp32s3" + temporary: true + reason: lack of runners + +examples/system/esp_event/default_event_loop: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/system/esp_timer: + disable_test: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: lack of runners + +examples/system/flash_suspend: + enable: + - if: IDF_TARGET == "esp32c3" + temporary: true + reason: the other targets are not tested yet + +examples/system/gcov: + enable: + - if: IDF_TARGET in ["esp32", "esp32s2"] + temporary: true + reason: the other targets are not tested yet + disable_test: + - if: IDF_TARGET == "esp32s2" + temporary: true + reason: lack of runners + +examples/system/gdbstub: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/system/heap_task_tracking: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/system/himem: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/system/ipc/ipc_isr: + enable: + - if: IDF_TARGET == "esp32" or IDF_TARGET == "esp32s3" + temporary: true + reason: the other targets are not tested yet + +examples/system/light_sleep: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/system/ota/advanced_https_ota: + disable_test: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: lack of runners + +examples/system/ota/otatool: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/system/ota/pre_encrypted_ota: + disable_test: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: lack of runners + +examples/system/ota/simple_ota_example: + disable_test: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: lack of runners + +examples/system/perfmon: + enable: + - if: IDF_TARGET in ["esp32", "esp32s2", "esp32s3"] + temporary: true + reason: the other targets are not tested yet + +examples/system/select: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: lack of runners + +examples/system/startup_time: + disable_test: + - if: IDF_TARGET == "esp32s3" or IDF_TARGET == "esp32c2" + temporary: true + reason: lack of runners + +examples/system/sysview_tracing: + enable: + - if: IDF_TARGET in ["esp32", "esp32c3", "esp32s2"] + temporary: true + reason: the other targets are not tested yet + disable_test: + - if: IDF_TARGET == "esp32s2" or IDF_TARGET == "esp32c3" + temporary: true + reason: lack of runners + +examples/system/sysview_tracing_heap_log: + enable: + - if: IDF_TARGET in ["esp32", "esp32c3", "esp32s2"] + temporary: true + reason: the other targets are not tested yet + disable_test: + - if: IDF_TARGET == "esp32s2" or IDF_TARGET == "esp32c3" + temporary: true + reason: lack of runners + +examples/system/task_watchdog: + disable_test: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: lack of runners + +examples/system/ulp_fsm/ulp: + disable: + - if: SOC_ULP_SUPPORTED != 1 + +examples/system/ulp_fsm/ulp_adc: + enable: + - if: IDF_TARGET == "esp32" + temporary: true + reason: the other targets are not tested yet + +examples/system/ulp_riscv/adc: + enable: + - if: IDF_TARGET in ["esp32s3"] + temporary: true + reason: the other targets are not tested yet + +examples/system/ulp_riscv/ds18b20_onewire: + enable: + - if: IDF_TARGET == "esp32s2" + temporary: true + reason: the other targets are not tested yet + +examples/system/ulp_riscv/gpio: + enable: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: the other targets are not tested yet + +examples/system/ulp_riscv/gpio_interrupt: + enable: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: the other targets are not tested yet diff --git a/examples/wifi/.build-test-rules.yml b/examples/wifi/.build-test-rules.yml new file mode 100644 index 00000000000..4c1bd20eca7 --- /dev/null +++ b/examples/wifi/.build-test-rules.yml @@ -0,0 +1,25 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/wifi: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/wifi/ftm: + enable: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: the other targets are not tested yet + +examples/wifi/getting_started: + disable_test: + - if: IDF_TARGET != "esp32" + temporary: true + reason: lack of runners + +examples/wifi/iperf: + disable_test: + - if: IDF_TARGET != "esp32" + temporary: true + reason: lack of runners diff --git a/examples/zigbee/.build-test-rules.yml b/examples/zigbee/.build-test-rules.yml new file mode 100644 index 00000000000..17b7a69168e --- /dev/null +++ b/examples/zigbee/.build-test-rules.yml @@ -0,0 +1,17 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +examples/zigbee/esp_zigbee_gateway: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +examples/zigbee/esp_zigbee_rcp: + enable: + - if: IDF_TARGET == "esp32h2" + reason: only test on esp32h2 + +examples/zigbee/light_sample: + enable: + - if: IDF_TARGET == "esp32h2" + reason: only test on esp32h2 diff --git a/tools/build_apps.py b/tools/build_apps.py deleted file mode 100755 index 89a0972e528..00000000000 --- a/tools/build_apps.py +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env python - -# coding=utf-8 -# -# ESP-IDF helper script to build multiple applications. Consumes the input of find_apps.py. -# - -import argparse -import logging -import os.path -import re -import sys -from typing import List, Optional, TextIO - -from find_build_apps import BUILD_SYSTEMS, BuildError, BuildItem, setup_logging -from find_build_apps.common import SIZE_JSON_FN, rmdir - -# This RE will match GCC errors and many other fatal build errors and warnings as well -LOG_ERROR_WARNING = re.compile(r'(error|warning):', re.IGNORECASE) - -# Log this many trailing lines from a failed build log, also -LOG_DEBUG_LINES = 25 - - -def build_apps( - build_items: List[BuildItem], - parallel_count: int = 1, - parallel_index: int = 1, - dry_run: bool = False, - build_verbose: bool = False, - keep_going: bool = False, - output_build_list: Optional[TextIO] = None, - size_info: Optional[TextIO] = None -) -> None: - if not build_items: - logging.warning('Empty build list') - sys.exit(0) - - num_builds = len(build_items) - num_jobs = parallel_count - job_index = parallel_index - 1 # convert to 0-based index - num_builds_per_job = (num_builds + num_jobs - 1) // num_jobs - min_job_index = num_builds_per_job * job_index - if min_job_index >= num_builds: - logging.warning( - f'Nothing to do for job {job_index + 1} (build total: {num_builds}, per job: {num_builds_per_job})') - sys.exit(0) - - max_job_index = min(num_builds_per_job * (job_index + 1) - 1, num_builds - 1) - logging.info('Total {} builds, max. {} builds per job, running builds {}-{}'.format( - num_builds, num_builds_per_job, min_job_index + 1, max_job_index + 1)) - - builds_for_current_job = build_items[min_job_index:max_job_index + 1] - for i, build_item in enumerate(builds_for_current_job): - index = i + min_job_index + 1 - build_item.index = index - build_item.dry_run = dry_run - build_item.verbose = build_verbose - build_item.keep_going = keep_going - logging.debug('\tBuild {}: {}'.format(index, repr(build_item))) - if output_build_list: - output_build_list.write(build_item.to_json_expanded() + '\n') - - failed_builds = [] - for build_item in builds_for_current_job: - logging.info('Running build {}: {}'.format(build_item.index, repr(build_item))) - build_system_class = BUILD_SYSTEMS[build_item.build_system] - try: - build_system_class.build(build_item) - except BuildError as e: - logging.error(str(e)) - if build_item.build_log_path: - log_filename = os.path.basename(build_item.build_log_path) - with open(build_item.build_log_path, 'r') as f: - lines = [line.rstrip() for line in f.readlines() if line.rstrip()] # non-empty lines - logging.debug('Error and warning lines from {}:'.format(log_filename)) - for line in lines: - if LOG_ERROR_WARNING.search(line): - logging.warning('>>> {}'.format(line)) - logging.debug('Last {} lines of {}:'.format(LOG_DEBUG_LINES, log_filename)) - for line in lines[-LOG_DEBUG_LINES:]: - logging.debug('>>> {}'.format(line)) - if keep_going: - failed_builds.append(build_item) - else: - sys.exit(1) - else: - if size_info: - build_item.write_size_info(size_info) - if not build_item.preserve: - logging.info(f'Removing build directory {build_item.build_path}') - # we only remove binaries here, log files are still needed by check_build_warnings.py - rmdir(build_item.build_path, exclude_file_pattern=SIZE_JSON_FN) - - if failed_builds: - logging.error('The following build have failed:') - for build in failed_builds: - logging.error('\t{}'.format(build)) - sys.exit(1) - - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description='ESP-IDF app builder') - parser.add_argument( - '-v', - '--verbose', - action='count', - help='Increase the logging level of the script. Can be specified multiple times.', - ) - parser.add_argument( - '--build-verbose', - action='store_true', - help='Enable verbose output from build system.', - ) - parser.add_argument( - '--log-file', - type=argparse.FileType('w'), - help='Write the script log to the specified file, instead of stderr', - ) - parser.add_argument( - '--parallel-count', - default=1, - type=int, - help="Number of parallel build jobs. Note that this script doesn't start the jobs, " + - 'it needs to be executed multiple times with same value of --parallel-count and ' + - 'different values of --parallel-index.', - ) - parser.add_argument( - '--parallel-index', - default=1, - type=int, - help='Index (1-based) of the job, out of the number specified by --parallel-count.', - ) - parser.add_argument( - '--format', - default='json', - choices=['json'], - help='Format to read the list of builds', - ) - parser.add_argument( - '--dry-run', - action='store_true', - help="Don't actually build, only print the build commands", - ) - parser.add_argument( - '--keep-going', - action='store_true', - help="Don't exit immediately when a build fails.", - ) - parser.add_argument( - '--output-build-list', - type=argparse.FileType('w'), - help='If specified, the list of builds (with all the placeholders expanded) will be written to this file.', - ) - parser.add_argument( - '--size-info', - type=argparse.FileType('a'), - help='If specified, the test case name and size info json will be written to this file' - ) - parser.add_argument( - 'build_list', - type=argparse.FileType('r'), - nargs='?', - default=sys.stdin, - help='Name of the file to read the list of builds from. If not specified, read from stdin.', - ) - args = parser.parse_args() - setup_logging(args) - items = [BuildItem.from_json(line) for line in args.build_list] - build_apps(items, args.parallel_count, args.parallel_index, args.dry_run, args.build_verbose, - args.keep_going, args.output_build_list, args.size_info) diff --git a/tools/ci/build_pytest_apps.py b/tools/ci/build_pytest_apps.py deleted file mode 100644 index 7e57cdb3f0b..00000000000 --- a/tools/ci/build_pytest_apps.py +++ /dev/null @@ -1,159 +0,0 @@ -# SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD -# SPDX-License-Identifier: Apache-2.0 - -""" -This file is used to generate binary files for the given path. -""" - -import argparse -import copy -import logging -import os -import sys -from collections import defaultdict -from typing import List - -from idf_ci_utils import IDF_PATH, PytestCase, get_pytest_cases - -try: - from build_apps import build_apps - from find_apps import find_builds_for_app - from find_build_apps import BuildItem, CMakeBuildSystem, config_rules_from_str, setup_logging -except ImportError: - sys.path.append(os.path.join(IDF_PATH, 'tools')) - - from build_apps import build_apps - from find_apps import find_builds_for_app - from find_build_apps import BuildItem, CMakeBuildSystem, config_rules_from_str, setup_logging - - -def main(args: argparse.Namespace) -> None: - pytest_cases: List[PytestCase] = [] - for path in args.paths: - pytest_cases += get_pytest_cases(path, args.target, args.marker_expr) - - paths = set() - app_configs = defaultdict(set) - for case in pytest_cases: - for app in case.apps: - paths.add(app.path) - app_configs[app.path].add(app.config) - - app_dirs = list(paths) - if not app_dirs: - raise RuntimeError('No apps found') - - logging.info(f'Found {len(app_dirs)} apps') - app_dirs.sort() - - # Find compatible configurations of each app, collect them as BuildItems - build_items: List[BuildItem] = [] - config_rules = config_rules_from_str(args.config or []) - for app_dir in app_dirs: - app_dir = os.path.realpath(app_dir) - if args.target in CMakeBuildSystem.supported_targets(app_dir): - build_items += find_builds_for_app( - app_path=app_dir, - work_dir=app_dir, - build_dir='build_@t_@w', - build_log=f'{app_dir}/build_@t_@w/build.log', - target_arg=args.target, - build_system='cmake', - config_rules=config_rules, - ) - - modified_build_items = [] - # auto clean up the binaries if no flag --preserve-all - for item in build_items: - is_test_related = item.config_name in app_configs[item.app_dir] - if args.test_only and not is_test_related: - logging.info(f'Skipping non-test app: {item}') - continue - - copied_item = copy.deepcopy(item) - if not args.preserve_all and not is_test_related: - copied_item.preserve = False - modified_build_items.append(copied_item) - - logging.info(f'Found {len(modified_build_items)} builds') - modified_build_items.sort(key=lambda x: x.build_path) # type: ignore - - build_apps( - build_items=modified_build_items, - parallel_count=args.parallel_count, - parallel_index=args.parallel_index, - dry_run=False, - build_verbose=args.build_verbose, - keep_going=True, - output_build_list=None, - size_info=args.size_info, - ) - - -if __name__ == '__main__': - parser = argparse.ArgumentParser( - description='Build all the pytest apps under specified paths. Will auto remove those non-test apps binaries' - ) - parser.add_argument( - '-t', '--target', required=True, help='Build apps for given target.' - ) - parser.add_argument( - '-m', - '--marker-expr', - default='not host_test', # host_test apps would be built and tested under the same job - help='only build tests matching given mark expression. For example: -m "host_test and generic".', - ) - parser.add_argument( - '--config', - default=['sdkconfig.ci=default', 'sdkconfig.ci.*=', '=default'], - action='append', - help='Adds configurations (sdkconfig file names) to build. This can either be ' - + 'FILENAME[=NAME] or FILEPATTERN. FILENAME is the name of the sdkconfig file, ' - + 'relative to the project directory, to be used. Optional NAME can be specified, ' - + 'which can be used as a name of this configuration. FILEPATTERN is the name of ' - + 'the sdkconfig file, relative to the project directory, with at most one wildcard. ' - + 'The part captured by the wildcard is used as the name of the configuration.', - ) - parser.add_argument( - 'paths', - nargs='+', - help='One or more app paths. Will use the current path if not specified.', - ) - parser.add_argument( - '--parallel-count', default=1, type=int, help='Number of parallel build jobs.' - ) - parser.add_argument( - '--parallel-index', - default=1, - type=int, - help='Index (1-based) of the job, out of the number specified by --parallel-count.', - ) - parser.add_argument( - '--size-info', - type=argparse.FileType('a'), - help='If specified, the test case name and size info json will be written to this file', - ) - parser.add_argument( - '-v', - '--verbose', - action='count', - help='Increase the logging level of the script. Can be specified multiple times.', - ) - parser.add_argument( - '--build-verbose', - action='store_true', - help='Enable verbose output from build system.', - ) - parser.add_argument( - '--preserve-all', - action='store_true', - help='Preserve the binaries for all apps when specified.', - ) - parser.add_argument( - '--test-only', - action='store_true', - help='Build only test related app when specified.', - ) - arguments = parser.parse_args() - setup_logging(arguments) - main(arguments) diff --git a/tools/ci/build_template_app.sh b/tools/ci/build_template_app.sh index e9660df1adb..b79d94fa284 100755 --- a/tools/ci/build_template_app.sh +++ b/tools/ci/build_template_app.sh @@ -6,9 +6,6 @@ # 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} set -euo pipefail @@ -50,55 +47,36 @@ get_config_str() { 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 -} - -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} - search_cmake esp32s3 ${CONFIG_STR} - search_cmake esp32c3 ${CONFIG_STR} - search_cmake esp32h2 ${CONFIG_STR} - search_cmake esp32c2 ${CONFIG_STR} - - build build_list_1.json - - CONFIG_STR=$(get_config_str sdkconfig.ci3.*=) - search_cmake esp32 ${CONFIG_STR} - search_cmake esp32s2 ${CONFIG_STR} - search_cmake esp32s3 ${CONFIG_STR} - search_cmake esp32c3 ${CONFIG_STR} - search_cmake esp32h2 ${CONFIG_STR} - search_cmake esp32c2 ${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 + python -m idf_build_apps build -vv \ + -p esp-idf-template \ + -t all \ + ${CONFIG_STR} \ + --work-dir ${BUILD_PATH}/cmake \ + --build-dir ${BUILD_DIR} \ + --build-log ${BUILD_LOG_CMAKE} \ + --size-file size.json \ + --collect-size-info size_info.txt \ + --default-build-targets esp32,esp32s2,esp32s3,esp32c2,esp32c3 # add esp32h2 back after IDF-5541 } build_stage1() { CONFIG_STR=$(get_config_str sdkconfig.ci2.*=) - search_cmake esp32 ${CONFIG_STR} - search_cmake esp32s2 ${CONFIG_STR} - search_cmake esp32s3 ${CONFIG_STR} - search_cmake esp32c3 ${CONFIG_STR} - search_cmake esp32h2 ${CONFIG_STR} - search_cmake esp32c2 ${CONFIG_STR} - - build + python -m idf_build_apps build -vv \ + -p esp-idf-template \ + -t all \ + ${CONFIG_STR} \ + --work-dir ${BUILD_PATH}/cmake \ + --build-dir ${BUILD_DIR} \ + --build-log ${BUILD_LOG_CMAKE} \ + --size-file size.json \ + --collect-size-info size_info.txt \ + --default-build-targets esp32,esp32s2,esp32s3,esp32c2,esp32c3,esp32h2 } # Default arguments diff --git a/tools/ci/check_build_test_rules.py b/tools/ci/check_build_test_rules.py new file mode 100755 index 00000000000..97063ba4420 --- /dev/null +++ b/tools/ci/check_build_test_rules.py @@ -0,0 +1,422 @@ +#!/usr/bin/env python + +# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import inspect +import os +import re +import sys +from io import StringIO +from pathlib import Path +from typing import Dict, List, Optional, Tuple + +from idf_ci_utils import IDF_PATH, get_pytest_cases, get_ttfw_cases + +YES = u'\u2713' +NO = u'\u2717' + +# | Supported Target | ... | +# | ---------------- | --- | +SUPPORTED_TARGETS_TABLE_REGEX = re.compile( + r'^\|\s*Supported Targets.+$\n^\|(?:\s*|-).+$\n?', re.MULTILINE +) + +USUAL_TO_FORMAL = { + 'esp32': 'ESP32', + 'esp32s2': 'ESP32-S2', + 'esp32s3': 'ESP32-S3', + 'esp32c3': 'ESP32-C3', + 'esp32h2': 'ESP32-H2', + 'esp32c2': 'ESP32-C2', + 'linux': 'Linux', +} + +FORMAL_TO_USUAL = { + 'ESP32': 'esp32', + 'ESP32-S2': 'esp32s2', + 'ESP32-S3': 'esp32s3', + 'ESP32-C3': 'esp32c3', + 'ESP32-H2': 'esp32h2', + 'ESP32-C2': 'esp32c2', + 'Linux': 'linux', +} + + +def doublequote(s: str) -> str: + if s.startswith('"') and s.endswith('"'): + return s + + return f'"{s}"' + + +def check_readme(paths: List[str]) -> None: + from idf_build_apps import App, find_apps + from idf_build_apps.constants import SUPPORTED_TARGETS + + def get_readme_path(_app: App) -> Optional[str]: + _readme_path = os.path.join(_app.app_dir, 'README.md') + + if not os.path.isfile(_readme_path): + _readme_path = os.path.join(_app.app_dir, '..', 'README.md') + + if not os.path.isfile(_readme_path): + _readme_path = None # type: ignore + + return _readme_path + + def _generate_new_support_table_str(_app: App) -> str: + # extra space here + table_headers = [ + f'{USUAL_TO_FORMAL[target]}' for target in _app.supported_targets + ] + table_headers = ['Supported Targets'] + table_headers + + res = '| ' + ' | '.join(table_headers) + ' |\n' + res += '| ' + ' | '.join(['-' * len(item) for item in table_headers]) + ' |' + + return res + + def _parse_existing_support_table_str(_app: App) -> Tuple[Optional[str], List[str]]: + _readme_path = get_readme_path(_app) + if not _readme_path: + return None, SUPPORTED_TARGETS + + with open(_readme_path) as _fr: + _readme_str = _fr.read() + + support_string = SUPPORTED_TARGETS_TABLE_REGEX.findall(_readme_str) + if not support_string: + return None, SUPPORTED_TARGETS + + # old style + parts = [ + part.strip() + for part in support_string[0].split('\n', 1)[0].split('|') + if part.strip() + ] + return support_string[0].strip(), [FORMAL_TO_USUAL[part] for part in parts[1:]] + + def check_enable_build(_app: App, _old_supported_targets: List[str]) -> bool: + if _app.supported_targets == sorted(_old_supported_targets): + return True + + _readme_path = get_readme_path(_app) + if_clause = f'IDF_TARGET in [{", ".join([doublequote(target) for target in sorted(_old_supported_targets)])}]' + + print( + inspect.cleandoc( + f''' + {_app.app_dir}: + - enable build targets according to the manifest file: {_app.supported_targets} + - enable build targets according to the old Supported Targets table under readme "{_readme_path}": {_old_supported_targets} + + If you want to disable some targets, please use the following snippet: + + # Please combine this with the original one + # + # Notes: + # - please keep in mind to avoid duplicated folders as yaml keys + # - please use parentheses to group conditions, the "or" and "and" operators could only accept two operands + {_app.app_dir}: + enable: + - if: {if_clause} + temporary: true + reason: + + ''' + ) + ) + + return False + + apps = sorted( + find_apps( + paths, + 'all', + recursive=True, + manifest_files=[ + str(p) for p in Path(IDF_PATH).glob('**/.build-test-rules.yml') + ], + ) + ) + exit_code = 0 + + checked_app_dirs = set() + for app in apps: + if app.app_dir not in checked_app_dirs: + checked_app_dirs.add(app.app_dir) + else: + continue + + replace_str, old_supported_targets = _parse_existing_support_table_str(app) + success = check_enable_build(app, old_supported_targets) + if not success: + print(f'check_enable_build failed for app: {app}') + print('-' * 80) + exit_code = 1 + + readme_path = get_readme_path(app) + # no readme, create a new file + if not readme_path: + with open(os.path.join(app.app_dir, 'README.md'), 'w') as fw: + fw.write(_generate_new_support_table_str(app) + '\n') + print(f'Added new README file: {os.path.join(app.app_dir, "README.md")}') + print('-' * 80) + exit_code = 1 + # has old table, but different string + elif replace_str and replace_str != _generate_new_support_table_str(app): + with open(readme_path) as fr: + readme_str = fr.read() + + with open(readme_path, 'w') as fw: + fw.write( + readme_str.replace( + replace_str, _generate_new_support_table_str(app) + ) + ) + print(f'Modified README file: {readme_path}') + print('-' * 80) + exit_code = 1 + # does not have old table + elif not replace_str: + with open(readme_path) as fr: + readme_str = fr.read() + + with open(readme_path, 'w') as fw: + fw.write( + _generate_new_support_table_str(app) + '\n\n' + readme_str + ) # extra new line + + print(f'Modified README file: {readme_path}') + print('-' * 80) + exit_code = 1 + + sys.exit(exit_code) + + +def check_test_scripts(paths: List[str]) -> None: + from idf_build_apps import App, find_apps + + # takes long time, run only in CI + # dict: + # { + # app_dir: { + # 'script_path': 'path/to/script', + # 'targets': ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32h2', 'esp32c2', 'linux'], + # } + # } + def check_enable_test( + _app: App, + _pytest_app_dir_targets_dict: Dict[str, Dict[str, str]], + _ttfw_app_dir_targets_dict: Dict[str, Dict[str, str]], + ) -> bool: + if _app.app_dir in _pytest_app_dir_targets_dict: + test_script_path = _pytest_app_dir_targets_dict[_app.app_dir]['script_path'] + actual_verified_targets = sorted( + set(_pytest_app_dir_targets_dict[_app.app_dir]['targets']) + ) + elif _app.app_dir in _ttfw_app_dir_targets_dict: + test_script_path = _ttfw_app_dir_targets_dict[_app.app_dir]['script_path'] + actual_verified_targets = sorted( + set(_ttfw_app_dir_targets_dict[_app.app_dir]['targets']) + ) + else: + return True # no test case + + if ( + _app.app_dir in _pytest_app_dir_targets_dict + and _app.app_dir in _ttfw_app_dir_targets_dict + ): + print( + f''' + Both pytest and ttfw test cases are found for {_app.app_dir}, + please remove one of them. + pytest script: {_pytest_app_dir_targets_dict[_app.app_dir]['script_path']} + ttfw script: {_ttfw_app_dir_targets_dict[_app.app_dir]['script_path']} + ''' + ) + return False + + actual_extra_tested_targets = set(actual_verified_targets) - set( + _app.verified_targets + ) + if actual_extra_tested_targets: + print( + inspect.cleandoc( + f''' + {_app.app_dir}: + - enable test targets according to the manifest file: {_app.verified_targets} + - enable test targets according to the test scripts: {actual_verified_targets} + + test scripts enabled targets should be a subset of the manifest file declared ones. + Please check the test script: {test_script_path}. + + ''' + ) + ) + return False + + if actual_verified_targets == _app.verified_targets: + return True + + if_clause = f'IDF_TARGET in [{", ".join([doublequote(target) for target in sorted(set(_app.verified_targets) - set(actual_verified_targets))])}]' + + print( + inspect.cleandoc( + f''' + {_app.app_dir}: + - enable test targets according to the manifest file: {_app.verified_targets} + - enable test targets according to the test scripts: {actual_verified_targets} + + the test scripts enabled test targets should be the same with the manifest file enabled ones. Please check + the test script manually: {test_script_path}. + + If you want to enable test targets in the pytest test scripts, please add `@pytest.mark.MISSING_TARGET` + marker above the test case function. + + If you want to enable test targets in the ttfw test scripts, please add/extend the keyword `targets` in + the ttfw decorator, e.g. `@ttfw_idf.idf_example_test(..., target=['esp32', 'MISSING_TARGET'])` + + If you want to disable the test targets in the manifest file, please modify your manifest file with + the following code snippet: + + # Please combine this with the original one + # + # Notes: + # - please keep in mind to avoid duplicated folders as yaml keys + # - please use parentheses to group conditions, the "or" and "and" operators could only accept two operands + {_app.app_dir}: + disable_test: + - if: {if_clause} + temporary: true + reason: + + ''' + ) + ) + return False + + apps = sorted( + find_apps( + paths, + 'all', + recursive=True, + manifest_files=[ + str(p) for p in Path(IDF_PATH).glob('**/.build-test-rules.yml') + ], + ) + ) + exit_code = 0 + + pytest_cases = get_pytest_cases(paths) + ttfw_cases = get_ttfw_cases(paths) + + pytest_app_dir_targets_dict = {} + ttfw_app_dir_targets_dict = {} + for case in pytest_cases: + for pytest_app in case.apps: + app_dir = os.path.relpath(pytest_app.path, IDF_PATH) + if app_dir not in pytest_app_dir_targets_dict: + pytest_app_dir_targets_dict[app_dir] = { + 'script_path': case.path, + 'targets': [pytest_app.target], + } + else: + pytest_app_dir_targets_dict[app_dir]['targets'].append( + pytest_app.target + ) + + for case in ttfw_cases: + app_dir = case.case_info['app_dir'] + if app_dir not in ttfw_app_dir_targets_dict: + ttfw_app_dir_targets_dict[app_dir] = { + 'script_path': case.case_info['script_path'], + 'targets': [case.case_info['target'].lower()], + } + else: + ttfw_app_dir_targets_dict[app_dir]['targets'].append( + case.case_info['target'].lower() + ) + + checked_app_dirs = set() + for app in apps: + if app.app_dir not in checked_app_dirs: + checked_app_dirs.add(app.app_dir) + else: + continue + + success = check_enable_test( + app, pytest_app_dir_targets_dict, ttfw_app_dir_targets_dict + ) + if not success: + print(f'check_enable_test failed for app: {app}') + print('-' * 80) + exit_code = 1 + continue + + sys.exit(exit_code) + + +def sort_yaml(files: List[str]) -> None: + from ruamel.yaml import YAML, CommentedMap + + yaml = YAML() + yaml.indent(mapping=2, sequence=4, offset=2) + yaml.width = 4096 # avoid wrap lines + + exit_code = 0 + for f in files: + with open(f) as fr: + file_s = fr.read() + fr.seek(0) + file_d: CommentedMap = yaml.load(fr) + + sorted_yaml = CommentedMap(dict(sorted(file_d.items()))) + file_d.copy_attributes(sorted_yaml) + + with StringIO() as s: + yaml.dump(sorted_yaml, s) + + string = s.getvalue() + if string != file_s: + with open(f, 'w') as fw: + fw.write(string) + print( + f'Sorted yaml file {f}. Please take a look. sometimes the format is a bit messy' + ) + exit_code = 1 + + sys.exit(exit_code) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='ESP-IDF apps build/test checker') + action = parser.add_subparsers(dest='action') + + _check_readme = action.add_parser('check-readmes') + _check_readme.add_argument('paths', nargs='+', help='check under paths') + + _check_test_scripts = action.add_parser('check-test-scripts') + _check_test_scripts.add_argument('paths', nargs='+', help='check under paths') + + _sort_yaml = action.add_parser('sort-yaml') + _sort_yaml.add_argument('files', nargs='+', help='all specified yaml files') + + arg = parser.parse_args() + + if arg.action == 'sort-yaml': + sort_yaml(arg.files) + else: + check_dirs = set() + for path in arg.paths: + if os.path.isfile(path): + check_dirs.add(os.path.dirname(path)) + else: + check_dirs.add(path) + + if arg.action == 'check-readmes': + check_readme(list(check_dirs)) + elif arg.action == 'check-test-scripts': + check_test_scripts(list(check_dirs)) diff --git a/tools/ci/check_copyright_ignore.txt b/tools/ci/check_copyright_ignore.txt index 10fa64fa8d2..8aee4a1f95b 100644 --- a/tools/ci/check_copyright_ignore.txt +++ b/tools/ci/check_copyright_ignore.txt @@ -2078,10 +2078,8 @@ examples/wifi/wps/main/wps.c tools/ble/lib_ble_client.py tools/ble/lib_gap.py tools/ble/lib_gatt.py -tools/build_apps.py tools/catch/catch.hpp tools/esp_app_trace/test/sysview/blink.c -tools/find_apps.py tools/find_build_apps/__init__.py tools/find_build_apps/cmake.py tools/find_build_apps/common.py diff --git a/tools/ci/check_executables.py b/tools/ci/check_executables.py index 9e1c6cf4eb9..c53481de52c 100755 --- a/tools/ci/check_executables.py +++ b/tools/ci/check_executables.py @@ -5,9 +5,14 @@ import argparse import os -from sys import exit +import sys -from idf_ci_utils import is_executable +try: + from idf_ci_utils import is_executable +except ImportError: + sys.path.append(os.path.join(os.path.dirname(__file__))) + + from idf_ci_utils import is_executable def _strip_each_item(iterable): @@ -65,4 +70,4 @@ def main(): if __name__ == '__main__': - exit(main()) + sys.exit(main()) diff --git a/tools/ci/ci_build_apps.py b/tools/ci/ci_build_apps.py new file mode 100644 index 00000000000..48994ffbd4d --- /dev/null +++ b/tools/ci/ci_build_apps.py @@ -0,0 +1,240 @@ +# SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 + +""" +This file is used in CI generate binary files for different kinds of apps +""" + +import argparse +import os +import sys +from collections import defaultdict +from pathlib import Path +from typing import List, Set + +from idf_build_apps import LOGGER, App, build_apps, find_apps, setup_logging +from idf_ci_utils import IDF_PATH, get_pytest_app_paths, get_pytest_cases, get_ttfw_app_paths + + +def get_pytest_apps( + paths: List[str], + target: str, + config_rules_str: List[str], + marker_expr: str, + preserve_all: bool = False, +) -> List[App]: + pytest_cases = get_pytest_cases(paths, target, marker_expr) + + _paths: Set[str] = set() + app_configs = defaultdict(set) + for case in pytest_cases: + for app in case.apps: + _paths.add(app.path) + app_configs[app.path].add(app.config) + + app_dirs = list(_paths) + if not app_dirs: + raise RuntimeError('No apps found') + + LOGGER.info(f'Found {len(app_dirs)} apps') + app_dirs.sort() + + apps = find_apps( + app_dirs, + target=target, + build_dir='build_@t_@w', + config_rules_str=config_rules_str, + build_log_path='build_log.txt', + size_json_path='size.json', + check_warnings=True, + manifest_files=[ + str(p) for p in Path(IDF_PATH).glob('**/.build-test-rules.yml') + ], + ) + + for app in apps: + is_test_related = app.config_name in app_configs[app.app_dir] + if not preserve_all and not is_test_related: + app.preserve = False + + return apps # type: ignore + + +def get_cmake_apps( + paths: List[str], + target: str, + config_rules_str: List[str], + preserve_all: bool = False, +) -> List[App]: + ttfw_app_dirs = get_ttfw_app_paths(paths, target) + apps = find_apps( + paths, + recursive=True, + target=target, + build_dir='build_@t_@w', + config_rules_str=config_rules_str, + build_log_path='build_log.txt', + size_json_path='size.json', + check_warnings=True, + preserve=False, + manifest_files=[ + str(p) for p in Path(IDF_PATH).glob('**/.build-test-rules.yml') + ], + ) + + apps_for_build = [] + pytest_app_dirs = get_pytest_app_paths(paths, target) + for app in apps: + if preserve_all or app.app_dir in ttfw_app_dirs: # relpath + app.preserve = True + + if os.path.realpath(app.app_dir) in pytest_app_dirs: + LOGGER.debug('Skipping build app with pytest scripts: %s', app) + continue + + apps_for_build.append(app) + + return apps_for_build + + +APPS_BUILD_PER_JOB = 30 + + +def main(args: argparse.Namespace) -> None: + if args.pytest_apps: + LOGGER.info('Only build apps with pytest scripts') + apps = get_pytest_apps( + args.paths, args.target, args.config, args.marker_expr, args.preserve_all + ) + else: + LOGGER.info('build apps. will skip pytest apps with pytest scripts') + apps = get_cmake_apps(args.paths, args.target, args.config, args.preserve_all) + + LOGGER.info('Found %d apps after filtering', len(apps)) + LOGGER.info( + 'Suggest setting the parallel count to %d for this build job', + len(apps) // APPS_BUILD_PER_JOB + 1, + ) + + if args.extra_preserve_dirs: + for app in apps: + if app.preserve: + continue + for extra_preserve_dir in args.extra_preserve_dirs: + if Path(extra_preserve_dir).resolve() in Path(app.app_dir).resolve().parents: + app.preserve = True + + ret_code = build_apps( + apps, + parallel_count=args.parallel_count, + parallel_index=args.parallel_index, + dry_run=False, + build_verbose=args.build_verbose, + keep_going=True, + collect_size_info=args.collect_size_info, + collect_app_info=args.collect_app_info, + ignore_warning_strs=args.ignore_warning_str, + ignore_warning_file=args.ignore_warning_file, + copy_sdkconfig=args.copy_sdkconfig, + ) + + sys.exit(ret_code) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description='Build all the apps for different test types. Will auto remove those non-test apps binaries', + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + parser.add_argument('paths', nargs='+', help='Paths to the apps to build.') + parser.add_argument( + '-t', + '--target', + required=True, + help='Build apps for given target. could pass "all" to get apps for all targets', + ) + parser.add_argument( + '--config', + default=['sdkconfig.ci=default', 'sdkconfig.ci.*=', '=default'], + action='append', + help='Adds configurations (sdkconfig file names) to build. This can either be ' + 'FILENAME[=NAME] or FILEPATTERN. FILENAME is the name of the sdkconfig file, ' + 'relative to the project directory, to be used. Optional NAME can be specified, ' + 'which can be used as a name of this configuration. FILEPATTERN is the name of ' + 'the sdkconfig file, relative to the project directory, with at most one wildcard. ' + 'The part captured by the wildcard is used as the name of the configuration.', + ) + parser.add_argument( + '-v', + '--verbose', + action='count', + help='Increase the LOGGER level of the script. Can be specified multiple times.', + ) + parser.add_argument( + '--build-verbose', + action='store_true', + help='Enable verbose output from build system.', + ) + parser.add_argument( + '--preserve-all', + action='store_true', + help='Preserve the binaries for all apps when specified.', + ) + parser.add_argument( + '--parallel-count', default=1, type=int, help='Number of parallel build jobs.' + ) + parser.add_argument( + '--parallel-index', + default=1, + type=int, + help='Index (1-based) of the job, out of the number specified by --parallel-count.', + ) + parser.add_argument( + '--collect-size-info', + type=argparse.FileType('w'), + help='If specified, the test case name and size info json will be written to this file', + ) + parser.add_argument( + '--collect-app-info', + type=argparse.FileType('w'), + help='If specified, the test case name and app info json will be written to this file', + ) + parser.add_argument( + '--ignore-warning-str', + action='append', + help='Ignore the warning string that match the specified regex in the build output. ' + 'Can be specified multiple times.', + ) + parser.add_argument( + '--ignore-warning-file', + default=os.path.join(IDF_PATH, 'tools', 'ci', 'ignore_build_warnings.txt'), + type=argparse.FileType('r'), + help='Ignore the warning strings in the specified file. Each line should be a regex string.', + ) + parser.add_argument( + '--copy-sdkconfig', + action='store_true', + help='Copy the sdkconfig file to the build directory.', + ) + parser.add_argument( + '--extra-preserve-dirs', nargs='+', + help='also preserve binaries of the apps under the specified dirs' + ) + + parser.add_argument( + '--pytest-apps', + action='store_true', + help='Only build apps with pytest scripts. Will build apps without pytest scripts if this flag is unspecified.', + ) + parser.add_argument( + '-m', + '--marker-expr', + default='not host_test', # host_test apps would be built and tested under the same job + help='only build tests matching given mark expression. For example: -m "host_test and generic". Works only' + 'for pytest', + ) + + arguments = parser.parse_args() + + setup_logging(arguments.verbose) + main(arguments) diff --git a/tools/ci/configure_ci_environment.sh b/tools/ci/configure_ci_environment.sh index d3617bd0574..512f26e5268 100644 --- a/tools/ci/configure_ci_environment.sh +++ b/tools/ci/configure_ci_environment.sh @@ -31,12 +31,6 @@ fi # Set ccache base directory to the project checkout path, to cancel out differences between runners export CCACHE_BASEDIR="${CI_PROJECT_DIR}" -# In tools/ci/find_apps_build_apps.sh, we use --work-dir argument to copy apps to a separate location -# before building them. This results in cache misses, even though the same code is compiled. -# To solve this issue, we can disable 'hash_dir' option of ccache by setting CCACHE_NOHASHDIR env variable. -# Note, this can result in issues with debug information, see: -# https://ccache.dev/manual/4.5.html#_compiling_in_different_directories -# # 'CI_CCACHE_DISABLE_NOHASHDIR' variable can be used at project level to revert to hash_dir=true, in # case we start seeing failures due to false cache hits. if [ "${CI_CCACHE_DISABLE_NOHASHDIR}" != "1" ]; then diff --git a/tools/ci/exclude_check_tools_files.txt b/tools/ci/exclude_check_tools_files.txt index 147970942de..168a8ee00d8 100644 --- a/tools/ci/exclude_check_tools_files.txt +++ b/tools/ci/exclude_check_tools_files.txt @@ -22,6 +22,7 @@ tools/ci/executable-list.txt tools/ci/fix_empty_prototypes.sh tools/ci/get-full-sources.sh tools/ci/idf_ci_utils.py +tools/ci/ignore_build_warnings.txt tools/ci/mirror-submodule-update.sh tools/ci/multirun_with_pyenv.sh tools/ci/mypy_ignore_list.txt diff --git a/tools/ci/executable-list.txt b/tools/ci/executable-list.txt index 4b504073039..4bd96aaa8d0 100644 --- a/tools/ci/executable-list.txt +++ b/tools/ci/executable-list.txt @@ -47,11 +47,10 @@ examples/system/ota/otatool/otatool_example.py examples/system/ota/otatool/otatool_example.sh install.fish install.sh -tools/build_apps.py tools/check_python_dependencies.py tools/ci/build_template_app.sh tools/ci/check_api_violation.sh -tools/ci/check_build_warnings.py +tools/ci/check_build_test_rules.py tools/ci/check_callgraph.py tools/ci/check_codeowners.py tools/ci/check_copyright.py @@ -70,7 +69,6 @@ tools/ci/check_type_comments.py tools/ci/checkout_project_ref.py tools/ci/deploy_docs.py tools/ci/envsubst.py -tools/ci/find_apps_build_apps.sh tools/ci/fix_empty_prototypes.sh tools/ci/get-full-sources.sh tools/ci/get_supported_examples.sh @@ -88,7 +86,6 @@ tools/esp_app_trace/logtrace_proc.py tools/esp_app_trace/sysviewtrace_proc.py tools/esp_app_trace/test/logtrace/test.sh tools/esp_app_trace/test/sysview/test.sh -tools/find_apps.py tools/format.sh tools/gen_esp_err_to_name.py tools/gen_soc_caps_kconfig/gen_soc_caps_kconfig.py diff --git a/tools/ci/find_apps_build_apps.sh b/tools/ci/find_apps_build_apps.sh deleted file mode 100755 index 5e7a9f6dc1a..00000000000 --- a/tools/ci/find_apps_build_apps.sh +++ /dev/null @@ -1,175 +0,0 @@ -#!/usr/bin/env bash -# -# Find apps and build apps for example_test, custom_test, and unit_test -# -# Runs as part of CI process. -# - -# ----------------------------------------------------------------------------- -# Safety settings (see https://gist.github.com/ilg-ul/383869cbb01f61a51c4d). - -if [[ -n ${DEBUG_SHELL} ]]; then - set -x # Activate the expand mode if DEBUG is anything but empty. -fi - -if [ -z ${CI_NODE_TOTAL} ]; then - CI_NODE_TOTAL=1 - echo "Assuming CI_NODE_TOTAL=${CI_NODE_TOTAL}" -fi - -if [ -z ${CI_NODE_INDEX} ]; then - # Gitlab uses a 1-based index - CI_NODE_INDEX=1 - echo "Assuming CI_NODE_INDEX=${CI_NODE_INDEX}" -fi - -set -o errexit # Exit if command failed. -set -o pipefail # Exit if pipe failed. -set -o nounset # Exit if variable not set. - -export PATH="$IDF_PATH/tools/ci:$IDF_PATH/tools:$PATH" - -# ----------------------------------------------------------------------------- - -die() { - echo "${1:-"Unknown Error"}" 1>&2 - exit 1 -} - -[ -d ${BUILD_PATH} ] || mkdir -p ${BUILD_PATH} -[ -d ${LOG_PATH} ] || mkdir -p ${LOG_PATH} -[ -f ${SIZE_INFO_LOCATION} ] && rm ${SIZE_INFO_LOCATION} - -export REALPATH=realpath -if [ "$(uname -s)" = "Darwin" ]; then - export REALPATH=grealpath -fi - -# Convert LOG_PATH and BUILD_PATH to relative, to make the json file less verbose. -BUILD_PATH=$(${REALPATH} --relative-to ${IDF_PATH} ${BUILD_PATH}) -LOG_PATH=$(${REALPATH} --relative-to ${IDF_PATH} ${LOG_PATH}) - -ALL_BUILD_LIST_JSON="${BUILD_PATH}/list.json" -JOB_BUILD_LIST_JSON="${BUILD_PATH}/list_job_${CI_NODE_INDEX}.json" - -# ----------------------------------------------------------------------------- -# common variables, will specify special cases later -WORK_DIR="--work-dir ${BUILD_PATH}/@f/@w/@t" -BUILD_DIR="build" -BUILD_LOG="${LOG_PATH}/@f_@w.txt" -CONFIG="--config sdkconfig.ci=default - --config sdkconfig.ci.*= - --config =default" - -export EXTRA_CFLAGS="${PEDANTIC_CFLAGS}" -export EXTRA_CXXFLAGS="${PEDANTIC_CXXFLAGS}" - -# --config rules above explained: -# 1. If sdkconfig.ci exists, use it build the example with configuration name "default" -# 2. If sdkconfig.ci.* exists, use it to build the "*" configuration -# 3. If none of the above exist, build the default configuration under the name "default" -# --work-dir and --build-log above uses "placeholders" @x: -# - @f: full path to the test with slashes replaced with underscores -# - @w: wildcard used as config name -# - @t: target name -# so the workdir .../@f/@w/@t would expand to e.g. tools_test_apps_system_startup/default/esp32 - -# ----------------------------------------------------------------------------- -# Example tests specific settings -if [ "${TEST_TYPE}" = "example_test" ]; then - export EXTRA_CFLAGS="${PEDANTIC_CFLAGS:-}" - export EXTRA_CXXFLAGS="${PEDANTIC_CXXFLAGS:-}" - - EXTRA_ARGS="--app-list ${SCAN_TEST_JSON}" -# ----------------------------------------------------------------------------- -# Custom tests specific settings -elif [ "${TEST_TYPE}" = "custom_test" ]; then - EXTRA_ARGS="--app-list ${SCAN_TEST_JSON}" -# ----------------------------------------------------------------------------- -# Unit tests specific settings -elif [ "${TEST_TYPE}" = "unit_test" ]; then - ALL_BUILD_LIST_JSON="${BUILD_PATH}/${IDF_TARGET}/list.json" - JOB_BUILD_LIST_JSON="${BUILD_PATH}/${IDF_TARGET}/list_job_${CI_NODE_INDEX}.json" - - mkdir -p ${BUILD_PATH}/${IDF_TARGET} - mkdir -p ${OUTPUT_PATH}/${IDF_TARGET} - - WORK_DIR="" - BUILD_DIR="builds/@t/@w" - BUILD_LOG="${LOG_PATH}/@w.txt" - - APP_FOLDER="tools/unit-test-app" - - EXTRA_ARGS=" - -p ${APP_FOLDER} - --build-system ${BUILD_SYSTEM} - --target ${IDF_TARGET} - --recursive - " - CONFIG="--config configs/*=" -# ----------------------------------------------------------------------------- -else - die "TEST_TYPE should only be one of {example_test, custom_test, unit_test}" -fi - -echo "$TEST_TYPE running for target $IDF_TARGET" -cd ${IDF_PATH} - -# This part of the script produces the same result for all the build jobs. -# -# It may be moved to a separate stage (pre-build) later, then the build jobs -# will receive ${BUILD_LIST_JSON} file as an artifact. -# -# If changing the work-dir or build-dir, remember to update the "artifacts" in -# gitlab-ci configs, and IDFApp.py. - -${IDF_PATH}/tools/find_apps.py \ - -vv \ - --format json \ - ${WORK_DIR} \ - --build-dir ${BUILD_DIR} \ - --build-log ${BUILD_LOG} \ - --output ${ALL_BUILD_LIST_JSON} \ - ${EXTRA_ARGS} \ - ${CONFIG} - -# The part below is where the actual builds happen - -${IDF_PATH}/tools/build_apps.py \ - -vv \ - --format json \ - --keep-going \ - --parallel-count ${CI_NODE_TOTAL} \ - --parallel-index ${CI_NODE_INDEX} \ - --output-build-list ${JOB_BUILD_LIST_JSON} \ - --size-info ${SIZE_INFO_LOCATION} \ - ${ALL_BUILD_LIST_JSON} - -# Check for build warnings -${IDF_PATH}/tools/ci/check_build_warnings.py -vv ${JOB_BUILD_LIST_JSON} - -if [ "${TEST_TYPE}" = "unit_test" ]; then - # Copy build artifacts to output directory - build_names=$( - cd ${BUILD_PATH}/${IDF_TARGET} - find . -maxdepth 1 \! -name . -prune -type d | cut -c 3- - ) - for build_name in $build_names; do - src=${BUILD_PATH}/${IDF_TARGET}/${build_name} - dst=${OUTPUT_PATH}/${IDF_TARGET}/${build_name} - echo "Copying artifacts from ${src} to ${dst}" - - rm -rf ${dst} - mkdir -p ${dst} - cp ${src}/{*.bin,*.elf,*.map,sdkconfig,flasher_args.json,flash_project_args} ${dst}/ - - mkdir -p ${dst}/bootloader - cp ${src}/bootloader/*.bin ${dst}/bootloader/ - - mkdir -p ${dst}/partition_table - cp ${src}/partition_table/*.bin ${dst}/partition_table/ - done - - # Copy app list json files to build path - mv ${BUILD_PATH}/${IDF_TARGET}/*.json ${BUILD_PATH} -fi diff --git a/tools/ci/idf_ci_utils.py b/tools/ci/idf_ci_utils.py index 2b5ae279402..a68227c8f05 100644 --- a/tools/ci/idf_ci_utils.py +++ b/tools/ci/idf_ci_utils.py @@ -4,7 +4,7 @@ # SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 # - +import contextlib import io import logging import os @@ -12,7 +12,14 @@ import subprocess import sys from contextlib import redirect_stdout from dataclasses import dataclass -from typing import TYPE_CHECKING, Any, List, Optional, Set +from typing import TYPE_CHECKING, Any, List, Optional, Set, Union + +try: + from idf_py_actions.constants import PREVIEW_TARGETS, SUPPORTED_TARGETS +except ImportError: + sys.path.append(os.path.join(os.path.dirname(__file__), '..')) + + from idf_py_actions.constants import PREVIEW_TARGETS, SUPPORTED_TARGETS if TYPE_CHECKING: from _pytest.python import Function @@ -125,6 +132,9 @@ def to_list(s: Any) -> List[Any]: return [s] +#################### +# Pytest Utilities # +#################### @dataclass class PytestApp: path: str @@ -195,37 +205,110 @@ class PytestCollectPlugin: def get_pytest_cases( - folder: str, target: str, marker_expr: Optional[str] = None + paths: Union[str, List[str]], target: str = 'all', marker_expr: Optional[str] = None ) -> List[PytestCase]: import pytest from _pytest.config import ExitCode - collector = PytestCollectPlugin(target) - if marker_expr: - marker_expr = f'{target} and ({marker_expr})' + if target == 'all': + targets = SUPPORTED_TARGETS + PREVIEW_TARGETS else: - marker_expr = target # target is also a marker + targets = [target] - with io.StringIO() as buf: - with redirect_stdout(buf): - res = pytest.main( - ['--collect-only', folder, '-q', '-m', marker_expr], plugins=[collector] - ) - if res.value != ExitCode.OK: - if res.value == ExitCode.NO_TESTS_COLLECTED: - print( - f'WARNING: no pytest app found for target {target} under folder {folder}' - ) - else: - print(buf.getvalue()) - raise RuntimeError('pytest collection failed') + cases = [] + for t in targets: + collector = PytestCollectPlugin(t) + if marker_expr: + _marker_expr = f'{t} and ({marker_expr})' + else: + _marker_expr = t # target is also a marker - return collector.cases + for path in to_list(paths): + with io.StringIO() as buf: + with redirect_stdout(buf): + cmd = ['--collect-only', path, '-q', '-m', _marker_expr] + res = pytest.main(cmd, plugins=[collector]) + if res.value != ExitCode.OK: + if res.value == ExitCode.NO_TESTS_COLLECTED: + print( + f'WARNING: no pytest app found for target {t} under path {path}' + ) + else: + print(buf.getvalue()) + raise RuntimeError( + f'pytest collection failed at {path} with command \"{" ".join(cmd)}\"' + ) + + cases.extend(collector.cases) + + return cases def get_pytest_app_paths( - folder: str, target: str, marker_expr: Optional[str] = None + paths: Union[str, List[str]], target: str, marker_expr: Optional[str] = None ) -> Set[str]: - cases = get_pytest_cases(folder, target, marker_expr) + cases = get_pytest_cases(paths, target, marker_expr) return set({app.path for case in cases for app in case.apps}) + + +################## +# TTFW Utilities # +################## +def get_ttfw_cases(paths: Union[str, List[str]]) -> List[Any]: + """ + Get the test cases from ttfw_idf under the given paths + + :param paths: list of paths to search + """ + try: + from ttfw_idf.IDFAssignTest import IDFAssignTest + except ImportError: + sys.path.append(os.path.join(IDF_PATH, 'tools', 'ci', 'python_packages')) + + from ttfw_idf.IDFAssignTest import IDFAssignTest + + # mock CI_JOB_ID if not exists + if not os.environ.get('CI_JOB_ID'): + os.environ['CI_JOB_ID'] = '1' + + cases = [] + for path in to_list(paths): + assign = IDFAssignTest( + path, os.path.join(IDF_PATH, '.gitlab', 'ci', 'target-test.yml') + ) + with contextlib.redirect_stdout(None): # swallow stdout + try: + cases += assign.search_cases() + except ImportError as e: + logging.error(str(e)) + + return cases + + +def get_ttfw_app_paths( + paths: Union[str, List[str]], target: Optional[str] = None +) -> Set[str]: + """ + Get the app paths from ttfw_idf under the given paths + """ + from idf_build_apps import CMakeApp + + cases = get_ttfw_cases(paths) + res: Set[str] = set() + for case in cases: + if not target or target == case.case_info['target'].lower(): + # ttfw has no good way to detect the app path for master-slave tests + # the apps real location may be the sub folder of the test script path + # check if the current folder is an app, if it's not, add all its subfolders if they are apps + # only one level down + _app_dir = case.case_info['app_dir'] + if CMakeApp.is_app(_app_dir): + res.add(_app_dir) + else: + for child in os.listdir(_app_dir): + sub_path = os.path.join(_app_dir, child) + if os.path.isdir(sub_path) and CMakeApp.is_app(sub_path): + res.add(sub_path) + + return res diff --git a/tools/ci/ignore_build_warnings.txt b/tools/ci/ignore_build_warnings.txt new file mode 100644 index 00000000000..fe3f6c1623e --- /dev/null +++ b/tools/ci/ignore_build_warnings.txt @@ -0,0 +1,16 @@ +library/error\.o +/.*error\S*\.o +.*error.*\.c\.obj +.*error.*\.c +.*error.*\.cpp\.obj +.*error.*\.cxx\.obj +.*error.*\.cc\.obj +-Werror +error\.d +/.*error\S*.d +reassigning to symbol +changes choice state +crosstool_version_check\.cmake +CryptographyDeprecationWarning +Warning: \d+/\d+ app partitions are too small for binary +CMake Deprecation Warning at main/lib/tinyxml2/CMakeLists\.txt:11 \(cmake_policy\) diff --git a/tools/ci/mypy_ignore_list.txt b/tools/ci/mypy_ignore_list.txt index 0f29610c4e6..e2f8f4bf298 100644 --- a/tools/ci/mypy_ignore_list.txt +++ b/tools/ci/mypy_ignore_list.txt @@ -201,8 +201,6 @@ tools/esp_prov/transport/transport.py tools/esp_prov/transport/transport_ble.py tools/esp_prov/transport/transport_console.py tools/esp_prov/transport/transport_http.py -tools/find_apps.py -tools/find_build_apps/common.py tools/gen_esp_err_to_name.py tools/gen_soc_caps_kconfig/test/test_gen_soc_caps_kconfig.py tools/kconfig_new/confgen.py diff --git a/tools/ci/python_packages/ttfw_idf/CIScanTests.py b/tools/ci/python_packages/ttfw_idf/CIScanTests.py deleted file mode 100644 index dee76427bb8..00000000000 --- a/tools/ci/python_packages/ttfw_idf/CIScanTests.py +++ /dev/null @@ -1,272 +0,0 @@ -# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD -# SPDX-License-Identifier: Apache-2.0 -import argparse -import errno -import json -import logging -import os -from collections import defaultdict -from copy import deepcopy -from typing import Any - -from ci.idf_ci_utils import get_pytest_app_paths -from find_apps import find_apps, find_builds_for_app -from find_build_apps import BUILD_SYSTEM_CMAKE, BUILD_SYSTEMS, config_rules_from_str -from idf_py_actions.constants import PREVIEW_TARGETS, SUPPORTED_TARGETS -from ttfw_idf.IDFAssignTest import ExampleAssignTest, TestAppsAssignTest - -TEST_LABELS = { - 'example_test': 'BOT_LABEL_EXAMPLE_TEST', - 'test_apps': 'BOT_LABEL_CUSTOM_TEST', - 'component_ut': ['BOT_LABEL_UNIT_TEST', - 'BOT_LABEL_UNIT_TEST_32', - 'BOT_LABEL_UNIT_TEST_S2', - 'BOT_LABEL_UNIT_TEST_C3'], -} - -BUILD_ALL_LABELS = [ - 'BOT_LABEL_BUILD', - 'BOT_LABEL_BUILD_ALL_APPS', - 'BOT_LABEL_REGULAR_TEST', - 'BOT_LABEL_WEEKEND_TEST', - 'NIGHTLY_RUN', - 'BOT_LABEL_NIGHTLY_RUN', -] - -BUILD_PER_JOB = 30 # each build takes 1 mins around - -SCAN_TARGETS = SUPPORTED_TARGETS + PREVIEW_TARGETS - - -def _has_build_all_label(): # type: () -> bool - for label in BUILD_ALL_LABELS: - if os.getenv(label): - return True - return False - - -def _judge_build_or_not(action, build_all): # type: (str, bool) -> tuple[bool, bool] - """ - :return: (build_or_not_for_test_related_apps, build_or_not_for_non_related_apps) - """ - if build_all or _has_build_all_label() or (not os.getenv('BOT_TRIGGER_WITH_LABEL')): - logging.info('Build all apps') - return True, True - - labels = TEST_LABELS[action] - if not isinstance(labels, list): - labels = [labels] # type: ignore - - for label in labels: - if os.getenv(label): - logging.info('Build only test cases apps') - return True, False - logging.info('Skip all') - return False, False - - -def output_json(apps_dict_list, target, build_system, output_dir): # type: (list, str, str, str) -> None - output_path = os.path.join(output_dir, 'scan_{}_{}.json'.format(target.lower(), build_system)) - with open(output_path, 'w') as fw: - fw.writelines([json.dumps(app) + '\n' for app in apps_dict_list]) - - -# we might need artifacts to run test cases locally. -# So we need to save artifacts which have test case not executed by CI. -class _ExampleAssignTest(ExampleAssignTest): - DEFAULT_FILTER = {} # type: dict[str, Any] - - -class _TestAppsAssignTest(TestAppsAssignTest): - DEFAULT_FILTER = {} # type: dict[str, Any] - - -def main(): # type: () -> None - parser = argparse.ArgumentParser(description='Scan the required build tests') - parser.add_argument('test_type', - choices=TEST_LABELS.keys(), - help='Scan test type') - parser.add_argument('paths', nargs='+', - help='One or more app paths') - parser.add_argument('-b', '--build-system', - choices=BUILD_SYSTEMS.keys(), - default=BUILD_SYSTEM_CMAKE) - parser.add_argument('-c', '--ci-config-file', - required=True, - help='gitlab ci config target-test file') - parser.add_argument('-o', '--output-path', - required=True, - help='output path of the scan result') - parser.add_argument('--exclude', nargs='*', - help='Ignore specified directory. Can be used multiple times.') - parser.add_argument('--extra_test_dirs', nargs='*', - help='Additional directories to preserve artifacts for local tests') - parser.add_argument('--preserve_all', action='store_true', - help='add this flag to preserve artifacts for all apps') - parser.add_argument('--build-all', action='store_true', - help='add this flag to build all apps') - parser.add_argument('--combine-all-targets', action='store_true', - help='add this flag to combine all target jsons into one') - parser.add_argument('--except-targets', nargs='+', - help='only useful when "--combine-all-targets". Specified targets would be skipped.') - parser.add_argument( - '--config', - action='append', - help='Only useful when "--evaluate-parallel-count" is flagged.' - 'Adds configurations (sdkconfig file names) to build. This can either be ' + - 'FILENAME[=NAME] or FILEPATTERN. FILENAME is the name of the sdkconfig file, ' + - 'relative to the project directory, to be used. Optional NAME can be specified, ' + - 'which can be used as a name of this configuration. FILEPATTERN is the name of ' + - 'the sdkconfig file, relative to the project directory, with at most one wildcard. ' + - 'The part captured by the wildcard is used as the name of the configuration.', - ) - parser.add_argument('--evaluate-parallel-count', action='store_true', - help='suggest parallel count according to build items') - - args = parser.parse_args() - build_test_case_apps, build_standalone_apps = _judge_build_or_not(args.test_type, args.build_all) - - if not os.path.exists(args.output_path): - try: - os.makedirs(args.output_path) - except OSError as e: - if e.errno != errno.EEXIST: - raise e - - if (not build_standalone_apps) and (not build_test_case_apps): - for target in SCAN_TARGETS: - output_json([], target, args.build_system, args.output_path) - SystemExit(0) - - idf_path = str(os.getenv('IDF_PATH')) - paths = set([os.path.join(idf_path, path) if not os.path.isabs(path) else path for path in args.paths]) - - test_cases = [] - for path in paths: - if args.test_type == 'example_test': - assign = _ExampleAssignTest(path, args.ci_config_file) - elif args.test_type in ['test_apps', 'component_ut']: - assign = _TestAppsAssignTest(path, args.ci_config_file) - else: - raise SystemExit(1) # which is impossible - test_cases.extend(assign.search_cases()) - - ''' - { - : { - 'test_case_apps': [], # which is used in target tests - 'standalone_apps': [], # which is not - }, - ... - } - ''' - scan_info_dict = defaultdict(dict) # type: dict[str, dict] - # store the test cases dir, exclude these folders when scan for standalone apps - default_exclude = args.exclude if args.exclude else [] - - build_system = args.build_system.lower() - build_system_class = BUILD_SYSTEMS[build_system] - - for target in SCAN_TARGETS: - exclude_apps = deepcopy(default_exclude) - - if build_test_case_apps: - scan_info_dict[target]['test_case_apps'] = set() - test_dirs = args.extra_test_dirs if args.extra_test_dirs else [] - for case in test_cases: - if case.case_info['target'].lower() == target.lower(): - test_dirs.append(case.case_info['app_dir']) - for app_dir in test_dirs: - app_dir = os.path.join(idf_path, app_dir) if not os.path.isabs(app_dir) else app_dir - _apps = find_apps(build_system_class, app_dir, True, exclude_apps, target.lower()) - if _apps: - scan_info_dict[target]['test_case_apps'].update(_apps) - exclude_apps.extend(_apps) - else: - scan_info_dict[target]['test_case_apps'] = set() - - if build_standalone_apps: - scan_info_dict[target]['standalone_apps'] = set() - for path in paths: - scan_info_dict[target]['standalone_apps'].update( - find_apps(build_system_class, path, True, exclude_apps, target.lower())) - else: - scan_info_dict[target]['standalone_apps'] = set() - test_case_apps_preserve_default = True if build_system == 'cmake' else False - output_files = [] - build_items_total_count = 0 - for target in SCAN_TARGETS: - # get pytest apps paths - pytest_app_paths = set() - for path in paths: - pytest_app_paths.update(get_pytest_app_paths(path, target)) - - apps = [] - for app_dir in scan_info_dict[target]['test_case_apps']: - if app_dir in pytest_app_paths: - print(f'WARNING: has pytest script: {app_dir}') - continue - apps.append({ - 'app_dir': app_dir, - 'build_system': args.build_system, - 'target': target, - 'preserve': args.preserve_all or test_case_apps_preserve_default - }) - for app_dir in scan_info_dict[target]['standalone_apps']: - if app_dir in pytest_app_paths: - print(f'Skipping pytest app: {app_dir}') - continue - apps.append({ - 'app_dir': app_dir, - 'build_system': args.build_system, - 'target': target, - 'preserve': args.preserve_all - }) - output_path = os.path.join(args.output_path, 'scan_{}_{}.json'.format(target.lower(), build_system)) - with open(output_path, 'w') as fw: - if args.evaluate_parallel_count: - build_items = [] - config_rules = config_rules_from_str(args.config or []) - for app in apps: - build_items += find_builds_for_app( - app['app_dir'], - app['app_dir'], - 'build', - '', - app['target'], - app['build_system'], - config_rules, - app['preserve'], - ) - print('Found {} builds'.format(len(build_items))) - if args.combine_all_targets: - if (args.except_targets and target not in [t.lower() for t in args.except_targets]) \ - or (not args.except_targets): - build_items_total_count += len(build_items) - else: - print(f'suggest set parallel count for target {target} to {len(build_items) // BUILD_PER_JOB + 1}') - fw.writelines([json.dumps(app) + '\n' for app in apps]) - - if args.combine_all_targets: - if (args.except_targets and target not in [t.lower() for t in args.except_targets]) \ - or (not args.except_targets): - output_files.append(output_path) - else: - print(f'skipping combining target {target}') - - if args.combine_all_targets: - scan_all_json = os.path.join(args.output_path, f'scan_all_{build_system}.json') - lines = [] - for file in output_files: - with open(file) as fr: - lines.extend([line for line in fr.readlines() if line.strip()]) - with open(scan_all_json, 'w') as fw: - fw.writelines(lines) - print(f'combined into file: {scan_all_json}') - - if args.evaluate_parallel_count: - print(f'Total build: {build_items_total_count}. Suggest set parallel count for all target to {build_items_total_count // BUILD_PER_JOB + 1}') - - -if __name__ == '__main__': - main() diff --git a/tools/ci/python_packages/ttfw_idf/IDFApp.py b/tools/ci/python_packages/ttfw_idf/IDFApp.py index 6ad2b9ce228..89e4b2d614d 100644 --- a/tools/ci/python_packages/ttfw_idf/IDFApp.py +++ b/tools/ci/python_packages/ttfw_idf/IDFApp.py @@ -157,7 +157,7 @@ class Artifacts(object): self.gitlab_inst.download_artifact(job_id, artifact_files, self.dest_root_path) def _download_sdkconfig_file(self, base_path, job_id): # type: (str, str) -> None - self.gitlab_inst.download_artifact(job_id, [os.path.join(os.path.dirname(base_path), 'sdkconfig')], + self.gitlab_inst.download_artifact(job_id, [os.path.join(base_path, 'sdkconfig')], self.dest_root_path) def download_artifacts(self): # type: () -> Any @@ -185,7 +185,7 @@ class Artifacts(object): self.gitlab_inst.download_artifact(job_id, artifact_files, self.dest_root_path) # download sdkconfig file - self.gitlab_inst.download_artifact(job_id, [os.path.join(os.path.dirname(base_path), 'sdkconfig')], + self.gitlab_inst.download_artifact(job_id, [os.path.join(base_path, 'sdkconfig')], self.dest_root_path) else: base_path = None @@ -448,31 +448,24 @@ class Example(IDFApp): target = 'esp32' super(Example, self).__init__(app_path, config_name, target, case_group, artifacts_cls) - def _get_sdkconfig_paths(self): # type: () -> List[str] - """ - overrides the parent method to provide exact path of sdkconfig for example tests - """ - return [os.path.join(self.binary_path, '..', 'sdkconfig')] - def _try_get_binary_from_local_fs(self): # type: () -> Optional[str] # build folder of example path path = os.path.join(self.idf_path, self.app_path, 'build') if os.path.exists(path): return path + # new style build dir + path = os.path.join(self.idf_path, self.app_path, f'build_{self.target}_{self.config_name}') + if os.path.exists(path): + return path + # Search for CI build folders. - # Path format: $IDF_PATH/build_examples/app_path_with_underscores/config/target - # (see tools/ci/build_examples.sh) - # For example: $IDF_PATH/build_examples/examples_get-started_blink/default/esp32 - app_path_underscored = self.app_path.replace(os.path.sep, '_') - example_path = os.path.join(self.idf_path, self.case_group.LOCAL_BUILD_DIR) - for dirpath in os.listdir(example_path): - if os.path.basename(dirpath) == app_path_underscored: - path = os.path.join(example_path, dirpath, self.config_name, self.target, 'build') - if os.path.exists(path): - return path - else: - return None + # Path format: $IDF_PATH//build__ + build_dir = f'build_{self.target}_{self.config_name}' + example_path = os.path.join(self.idf_path, self.app_path, build_dir) + if os.path.exists(example_path): + return path + return None diff --git a/tools/ci/python_packages/ttfw_idf/IDFAssignTest.py b/tools/ci/python_packages/ttfw_idf/IDFAssignTest.py index c2190df52dd..3b68618c86d 100644 --- a/tools/ci/python_packages/ttfw_idf/IDFAssignTest.py +++ b/tools/ci/python_packages/ttfw_idf/IDFAssignTest.py @@ -4,10 +4,10 @@ Command line tool to assign tests to CI test jobs. """ import argparse -import errno import json import os import re +import sys from copy import deepcopy import yaml @@ -23,21 +23,20 @@ from tiny_test_fw.Utility import CIAssignTest try: from idf_py_actions.constants import PREVIEW_TARGETS, SUPPORTED_TARGETS except ImportError: - SUPPORTED_TARGETS = [] - PREVIEW_TARGETS = [] + sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..')) + + from idf_py_actions.constants import PREVIEW_TARGETS, SUPPORTED_TARGETS IDF_PATH_FROM_ENV = os.getenv('IDF_PATH', '') class IDFCaseGroup(CIAssignTest.Group): - LOCAL_BUILD_DIR = None BUILD_JOB_NAMES = None @classmethod def get_artifact_index_file(cls): - assert cls.LOCAL_BUILD_DIR if IDF_PATH_FROM_ENV: - artifact_index_file = os.path.join(IDF_PATH_FROM_ENV, cls.LOCAL_BUILD_DIR, 'artifact_index.json') + artifact_index_file = os.path.join(IDF_PATH_FROM_ENV, 'artifact_index.json') else: artifact_index_file = 'artifact_index.json' return artifact_index_file @@ -55,7 +54,7 @@ class IDFAssignTest(CIAssignTest.AssignTest): super(IDFAssignTest, self).__init__(test_case_path, ci_config_file, case_group) def format_build_log_path(self, parallel_num): - return '{}/list_job_{}.json'.format(self.case_group.LOCAL_BUILD_DIR, parallel_num) + return 'list_job_{}.json'.format(parallel_num) def create_artifact_index_file(self, project_id=None, pipeline_id=None): if project_id is None: @@ -76,12 +75,6 @@ class IDFAssignTest(CIAssignTest.AssignTest): build_info['ci_job_id'] = job_info['id'] artifact_index_list.append(build_info) artifact_index_file = self.case_group.get_artifact_index_file() - try: - os.makedirs(os.path.dirname(artifact_index_file)) - except OSError as e: - if e.errno != errno.EEXIST: - raise e - with open(artifact_index_file, 'w') as f: json.dump(artifact_index_list, f) @@ -95,19 +88,16 @@ class IDFAssignTest(CIAssignTest.AssignTest): class ExampleGroup(IDFCaseGroup): SORT_KEYS = CI_JOB_MATCH_KEYS = ['env_tag', 'target'] - LOCAL_BUILD_DIR = 'build_examples' # type: ignore EXAMPLE_TARGETS = SUPPORTED_TARGETS + PREVIEW_TARGETS BUILD_JOB_NAMES = ['build_examples_cmake_{}'.format(target) for target in EXAMPLE_TARGETS] # type: ignore class TestAppsGroup(ExampleGroup): - LOCAL_BUILD_DIR = 'build_test_apps' TEST_APP_TARGETS = SUPPORTED_TARGETS + PREVIEW_TARGETS BUILD_JOB_NAMES = ['build_test_apps_{}'.format(target) for target in TEST_APP_TARGETS] # type: ignore class ComponentUTGroup(TestAppsGroup): - LOCAL_BUILD_DIR = 'build_component_ut' UNIT_TEST_TARGETS = SUPPORTED_TARGETS + PREVIEW_TARGETS BUILD_JOB_NAMES = ['build_component_ut_{}'.format(target) for target in UNIT_TEST_TARGETS] # type: ignore @@ -116,7 +106,6 @@ class UnitTestGroup(IDFCaseGroup): SORT_KEYS = ['test environment', 'tags', 'chip_target'] CI_JOB_MATCH_KEYS = ['test environment'] - LOCAL_BUILD_DIR = 'tools/unit-test-app/builds' # type: ignore UNIT_TEST_TARGETS = SUPPORTED_TARGETS + PREVIEW_TARGETS BUILD_JOB_NAMES = ['build_esp_idf_tests_cmake_{}'.format(target) for target in UNIT_TEST_TARGETS] # type: ignore diff --git a/tools/ci/setup_python.sh b/tools/ci/setup_python.sh index bd77ba7a3ca..c85924e0879 100644 --- a/tools/ci/setup_python.sh +++ b/tools/ci/setup_python.sh @@ -47,4 +47,4 @@ else fi # add esp-idf local package path to PYTHONPATH so it can be imported directly -export PYTHONPATH="$IDF_PATH/tools:$IDF_PATH/tools/ci/python_packages:$PYTHONPATH" +export PYTHONPATH="$IDF_PATH/tools:$IDF_PATH/components/partition_table:$IDF_PATH/tools/ci/python_packages:$PYTHONPATH" diff --git a/tools/find_apps.py b/tools/find_apps.py deleted file mode 100755 index 903c1b8c03e..00000000000 --- a/tools/find_apps.py +++ /dev/null @@ -1,317 +0,0 @@ -#!/usr/bin/env python -# coding=utf-8 -# -# ESP-IDF helper script to enumerate the builds of multiple configurations of multiple apps. -# Produces the list of builds. The list can be consumed by build_apps.py, which performs the actual builds. - -import argparse -import glob -import json -import logging -import os -import re -import sys -import typing - -from find_build_apps import (BUILD_SYSTEM_CMAKE, BUILD_SYSTEMS, DEFAULT_TARGET, BuildItem, BuildSystem, ConfigRule, - config_rules_from_str, setup_logging) - - -# Helper functions -def dict_from_sdkconfig(path): - """ - Parse the sdkconfig file at 'path', return name:value pairs as a dict - """ - regex = re.compile(r'^([^#=]+)=(.+)$') - result = {} - with open(path) as f: - for line in f: - m = regex.match(line) - if m: - val = m.group(2) - if val.startswith('"') and val.endswith('"'): - val = val[1:-1] - result[m.group(1)] = val - return result - - -# Main logic: enumerating apps and builds - - -def find_builds_for_app(app_path, work_dir, build_dir, build_log, target_arg, - build_system, config_rules, preserve_artifacts=True): - # type: (str, str, str, str, str, str, typing.List[ConfigRule], bool) -> typing.List[BuildItem] - """ - Find configurations (sdkconfig file fragments) for the given app, return them as BuildItem objects - :param app_path: app directory (can be / usually will be a relative path) - :param work_dir: directory where the app should be copied before building. - May contain env. variables and placeholders. - :param build_dir: directory where the build will be done, relative to the work_dir. May contain placeholders. - :param build_log: path of the build log. May contain placeholders. May be None, in which case the log should go - into stdout/stderr. - :param target_arg: the value of IDF_TARGET passed to the script. Used to filter out configurations with - a different CONFIG_IDF_TARGET value. - :param build_system: name of the build system, index into BUILD_SYSTEMS dictionary - :param config_rules: mapping of sdkconfig file name patterns to configuration names - :param preserve_artifacts: determine if the built binary will be uploaded as artifacts. - :return: list of BuildItems representing build configuration of the app - """ - build_items = [] # type: typing.List[BuildItem] - default_config_name = '' - - for rule in config_rules: - if not rule.file_name: - default_config_name = rule.config_name - continue - - sdkconfig_paths = glob.glob(os.path.join(app_path, rule.file_name)) - sdkconfig_paths = sorted(sdkconfig_paths) - for sdkconfig_path in sdkconfig_paths: - - # Check if the sdkconfig file specifies IDF_TARGET, and if it is matches the --target argument. - sdkconfig_dict = dict_from_sdkconfig(sdkconfig_path) - target_from_config = sdkconfig_dict.get('CONFIG_IDF_TARGET') - if target_from_config is not None and target_from_config != target_arg: - logging.debug('Skipping sdkconfig {} which requires target {}'.format( - sdkconfig_path, target_from_config)) - continue - - # Figure out the config name - config_name = rule.config_name or '' - if '*' in rule.file_name: - # convert glob pattern into a regex - regex_str = r'.*' + rule.file_name.replace('.', r'\.').replace('*', r'(.*)') - groups = re.match(regex_str, sdkconfig_path) - assert groups - config_name = groups.group(1) - - sdkconfig_path = os.path.relpath(sdkconfig_path, app_path) - logging.debug('Adding build: app {}, sdkconfig {}, config name "{}"'.format( - app_path, sdkconfig_path, config_name)) - build_items.append( - BuildItem( - app_path, - work_dir, - build_dir, - build_log, - target_arg, - sdkconfig_path, - config_name, - build_system, - preserve_artifacts, - )) - - if not build_items: - logging.debug('\tAdding build: app {}, default sdkconfig, config name "{}"'.format(app_path, default_config_name)) - return [ - BuildItem( - app_path, - work_dir, - build_dir, - build_log, - target_arg, - None, - default_config_name, - build_system, - preserve_artifacts, - ) - ] - - return build_items - - -def find_apps(build_system_class, path, recursive, exclude_list, target): - # type: (typing.Type[BuildSystem], str, bool, typing.List[str], str) -> typing.List[str] - """ - Find app directories in path (possibly recursively), which contain apps for the given build system, compatible - with the given target. - :param build_system_class: class derived from BuildSystem, representing the build system in use - :param path: path where to look for apps - :param recursive: whether to recursively descend into nested directories if no app is found - :param exclude_list: list of paths to be excluded from the recursive search - :param target: desired value of IDF_TARGET; apps incompatible with the given target are skipped. - :return: list of paths of the apps found - """ - build_system_name = build_system_class.NAME - logging.debug('Looking for {} apps in {}{}'.format(build_system_name, path, ' recursively' if recursive else '')) - - apps_found = [] # type: typing.List[str] - for root, dirs, _ in os.walk(path, topdown=True): - logging.debug('Entering {}'.format(root)) - if root in exclude_list: - logging.debug('Skipping {} (excluded)'.format(root)) - del dirs[:] - continue - - if build_system_class.is_app(root): - logging.debug('Found {} app in {}'.format(build_system_name, root)) - # Don't recurse into app subdirectories - del dirs[:] - - supported_targets = build_system_class.supported_targets(root) - if supported_targets and (target in supported_targets): - apps_found.append(root) - else: - if supported_targets: - logging.debug('Skipping, app only supports targets: ' + ', '.join(supported_targets)) - else: - logging.debug('Skipping, app has no supported targets') - continue - - if not recursive: - if not apps_found: - logging.warning('Path {} specified without --recursive flag, but no {} app found there'.format( - path, build_system_name)) - break # only check the top-most dir if "recursive" is unflagged - - return apps_found - - -def main(): - parser = argparse.ArgumentParser(description='Tool to generate build steps for IDF apps') - parser.add_argument( - '-v', - '--verbose', - action='count', - help='Increase the logging level of the script. Can be specified multiple times.', - ) - parser.add_argument( - '--log-file', - type=argparse.FileType('w'), - help='Write the script log to the specified file, instead of stderr', - ) - parser.add_argument( - '--recursive', - action='store_true', - help='Look for apps in the specified directories recursively.', - ) - parser.add_argument( - '--build-system', - choices=BUILD_SYSTEMS.keys() - ) - parser.add_argument( - '--work-dir', - help='If set, the app is first copied into the specified directory, and then built.' + - 'If not set, the work directory is the directory of the app.', - ) - parser.add_argument( - '--config', - action='append', - help='Adds configurations (sdkconfig file names) to build. This can either be ' + - 'FILENAME[=NAME] or FILEPATTERN. FILENAME is the name of the sdkconfig file, ' + - 'relative to the project directory, to be used. Optional NAME can be specified, ' + - 'which can be used as a name of this configuration. FILEPATTERN is the name of ' + - 'the sdkconfig file, relative to the project directory, with at most one wildcard. ' + - 'The part captured by the wildcard is used as the name of the configuration.', - ) - parser.add_argument( - '--build-dir', - help='If set, specifies the build directory name. Can expand placeholders. Can be either a ' + - 'name relative to the work directory, or an absolute path.', - ) - parser.add_argument( - '--build-log', - help='If specified, the build log will be written to this file. Can expand placeholders.', - ) - parser.add_argument('--target', help='Build apps for given target.') - parser.add_argument( - '--format', - default='json', - choices=['json'], - help='Format to write the list of builds as', - ) - parser.add_argument( - '--exclude', - action='append', - help='Ignore specified directory (if --recursive is given). Can be used multiple times.', - ) - parser.add_argument( - '-o', - '--output', - type=argparse.FileType('w'), - help='Output the list of builds to the specified file', - ) - parser.add_argument( - '--app-list', - default=None, - help='Scan tests results. Restrict the build/artifacts preservation behavior to apps need to be built. ' - 'If the file does not exist, will build all apps and upload all artifacts.' - ) - parser.add_argument( - '-p', '--paths', - nargs='+', - help='One or more app paths.' - ) - args = parser.parse_args() - setup_logging(args) - - # Arguments Validation - if args.app_list: - conflict_args = [args.recursive, args.build_system, args.target, args.exclude, args.paths] - if any(conflict_args): - raise ValueError('Conflict settings. "recursive", "build_system", "target", "exclude", "paths" should not ' - 'be specified with "app_list"') - if not os.path.exists(args.app_list): - raise OSError('File not found {}'.format(args.app_list)) - else: - # If the build target is not set explicitly, get it from the environment or use the default one (esp32) - if not args.target: - env_target = os.environ.get('IDF_TARGET') - if env_target: - logging.info('--target argument not set, using IDF_TARGET={} from the environment'.format(env_target)) - args.target = env_target - else: - logging.info('--target argument not set, using IDF_TARGET={} as the default'.format(DEFAULT_TARGET)) - args.target = DEFAULT_TARGET - if not args.build_system: - logging.info('--build-system argument not set, using {} as the default'.format(BUILD_SYSTEM_CMAKE)) - args.build_system = BUILD_SYSTEM_CMAKE - required_args = [args.build_system, args.target, args.paths] - if not all(required_args): - raise ValueError('If app_list not set, arguments "build_system", "target", "paths" are required.') - - # Prepare the list of app paths, try to read from the scan_tests result. - # If the file exists, then follow the file's app_dir and build/artifacts behavior, won't do find_apps() again. - # If the file not exists, will do find_apps() first, then build all apps and upload all artifacts. - if args.app_list: - apps = [json.loads(line) for line in open(args.app_list)] - else: - app_dirs = [] - build_system_class = BUILD_SYSTEMS[args.build_system] - for path in args.paths: - app_dirs += find_apps(build_system_class, path, args.recursive, args.exclude or [], args.target) - apps = [{'app_dir': app_dir, 'build': True, 'preserve': True} for app_dir in app_dirs] - - if not apps: - logging.warning('No apps found') - SystemExit(0) - - logging.info('Found {} apps'.format(len(apps))) - apps.sort(key=lambda x: x['app_dir']) - - # Find compatible configurations of each app, collect them as BuildItems - build_items = [] # type: typing.List[BuildItem] - config_rules = config_rules_from_str(args.config or []) - for app in apps: - build_items += find_builds_for_app( - app['app_dir'], - args.work_dir, - args.build_dir, - args.build_log, - args.target or app['target'], - args.build_system or app['build_system'], - config_rules, - app['preserve'], - ) - logging.info('Found {} builds'.format(len(build_items))) - - # Write out the BuildItems. Only JSON supported now (will add YAML later). - if args.format != 'json': - raise NotImplementedError() - - out = args.output or sys.stdout - out.writelines([item.to_json() + '\n' for item in build_items]) - - -if __name__ == '__main__': - main() diff --git a/tools/find_build_apps/__init__.py b/tools/find_build_apps/__init__.py deleted file mode 100644 index ca40ec3a063..00000000000 --- a/tools/find_build_apps/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -from .cmake import BUILD_SYSTEM_CMAKE, CMakeBuildSystem -from .common import (DEFAULT_TARGET, BuildError, BuildItem, BuildSystem, ConfigRule, config_rules_from_str, - setup_logging) - -BUILD_SYSTEMS = { - BUILD_SYSTEM_CMAKE: CMakeBuildSystem, -} - -__all__ = [ - 'BuildItem', - 'BuildSystem', - 'BuildError', - 'ConfigRule', - 'config_rules_from_str', - 'setup_logging', - 'DEFAULT_TARGET', - 'CMakeBuildSystem', - 'BUILD_SYSTEM_CMAKE', - 'BUILD_SYSTEMS', -] diff --git a/tools/find_build_apps/cmake.py b/tools/find_build_apps/cmake.py deleted file mode 100644 index 5527dc8648c..00000000000 --- a/tools/find_build_apps/cmake.py +++ /dev/null @@ -1,100 +0,0 @@ -import logging -import os -import shutil -import subprocess -import sys - -from .common import BuildError, BuildItem, BuildSystem - -try: - from typing import Any, Optional -except ImportError: - pass - -BUILD_SYSTEM_CMAKE = 'cmake' -IDF_PY = os.path.join(os.environ['IDF_PATH'], 'tools', 'idf.py') - -# While ESP-IDF component CMakeLists files can be identified by the presence of 'idf_component_register' string, -# there is no equivalent for the project CMakeLists files. This seems to be the best option... -CMAKE_PROJECT_LINE = r'include($ENV{IDF_PATH}/tools/cmake/project.cmake)' - - -class CMakeBuildSystem(BuildSystem): - NAME = BUILD_SYSTEM_CMAKE - - @classmethod - def build(cls, build_item): # type: (BuildItem) -> None - build_path, work_path, extra_cmakecache_items = cls.build_prepare(build_item) - # Prepare the build arguments - args = [ - sys.executable, - IDF_PY, - '-B', - build_path, - '-C', - work_path, - '-DIDF_TARGET=' + build_item.target, - ] - if extra_cmakecache_items: - for key, val in extra_cmakecache_items.items(): - args.append('-D{}={}'.format(key, val)) - if 'TEST_EXCLUDE_COMPONENTS' in extra_cmakecache_items \ - and 'TEST_COMPONENTS' not in extra_cmakecache_items: - args.append('-DTESTS_ALL=1') - if build_item.verbose: - args.append('-v') - if 'CONFIG_APP_BUILD_BOOTLOADER' in extra_cmakecache_items: - # In case if secure_boot is enabled then for bootloader build need to add `bootloader` cmd - args.append('bootloader') - args.append('build') - cmdline = format(' '.join(args)) - logging.info('Running {}'.format(cmdline)) - - if build_item.dry_run: - return - - log_file = None - build_stdout = sys.stdout - build_stderr = sys.stderr - if build_item.build_log_path: - logging.info('Writing build log to {}'.format(build_item.build_log_path)) - log_file = open(build_item.build_log_path, 'w') - build_stdout = log_file - build_stderr = log_file - - try: - os.environ['IDF_TARGET'] = build_item.target - subprocess.check_call(args, stdout=build_stdout, stderr=build_stderr) - except subprocess.CalledProcessError as e: - raise BuildError('Build failed with exit code {}'.format(e.returncode)) - else: - # Also save the sdkconfig file in the build directory - shutil.copyfile( - os.path.join(work_path, 'sdkconfig'), - os.path.join(build_path, 'sdkconfig'), - ) - build_item.size_json_fp = build_item.get_size_json_fp() - finally: - if log_file: - log_file.close() - - @staticmethod - def _read_cmakelists(app_path): # type: (str) -> Optional[str] - cmakelists_path = os.path.join(app_path, 'CMakeLists.txt') - if not os.path.exists(cmakelists_path): - return None - with open(cmakelists_path, 'r') as cmakelists_file: - return cmakelists_file.read() - - @staticmethod - def is_app(path): # type: (str) -> bool - cmakelists_file_content = CMakeBuildSystem._read_cmakelists(path) - if not cmakelists_file_content: - return False - if CMAKE_PROJECT_LINE not in cmakelists_file_content: - return False - return True - - @classmethod - def supported_targets(cls, app_path): # type: (str) -> Any - return cls._supported_targets(app_path) diff --git a/tools/find_build_apps/common.py b/tools/find_build_apps/common.py deleted file mode 100644 index 56e9f6b11b4..00000000000 --- a/tools/find_build_apps/common.py +++ /dev/null @@ -1,473 +0,0 @@ -# coding=utf-8 -import fnmatch -import json -import logging -import os -import re -import shutil -import subprocess -import sys -import typing -from abc import abstractmethod -from collections import namedtuple -from io import open - -DEFAULT_TARGET = 'esp32' - -TARGET_PLACEHOLDER = '@t' -WILDCARD_PLACEHOLDER = '@w' -NAME_PLACEHOLDER = '@n' -FULL_NAME_PLACEHOLDER = '@f' -INDEX_PLACEHOLDER = '@i' - -IDF_SIZE_PY = os.path.join(os.environ['IDF_PATH'], 'tools', 'idf_size.py') -SIZE_JSON_FN = 'size.json' - -SDKCONFIG_LINE_REGEX = re.compile(r"^([^=]+)=\"?([^\"\n]*)\"?\n*$") - -# If these keys are present in sdkconfig.defaults, they will be extracted and passed to CMake -SDKCONFIG_TEST_OPTS = [ - 'EXCLUDE_COMPONENTS', - 'TEST_EXCLUDE_COMPONENTS', - 'TEST_COMPONENTS', -] - -# These keys in sdkconfig.defaults are not propagated to the final sdkconfig file: -SDKCONFIG_IGNORE_OPTS = [ - 'TEST_GROUPS' -] - -# ConfigRule represents one --config argument of find_apps.py. -# file_name is the name of the sdkconfig file fragment, optionally with a single wildcard ('*' character). -# file_name can also be empty to indicate that the default configuration of the app should be used. -# config_name is the name of the corresponding build configuration, or None if the value of wildcard is to be used. -# For example: -# filename='', config_name='default' — represents the default app configuration, and gives it a name 'default' -# filename='sdkconfig.*', config_name=None - represents the set of configurations, names match the wildcard value -ConfigRule = namedtuple('ConfigRule', ['file_name', 'config_name']) - - -def config_rules_from_str(rule_strings): # type: (typing.List[str]) -> typing.List[ConfigRule] - """ - Helper function to convert strings like 'file_name=config_name' into ConfigRule objects - :param rule_strings: list of rules as strings - :return: list of ConfigRules - """ - rules = [] # type: typing.List[ConfigRule] - for rule_str in rule_strings: - items = rule_str.split('=', 2) - rules.append(ConfigRule(items[0], items[1] if len(items) == 2 else None)) - return rules - - -def find_first_match(pattern, path): - for root, _, files in os.walk(path): - res = fnmatch.filter(files, pattern) - if res: - return os.path.join(root, res[0]) - return None - - -def rmdir(path, exclude_file_pattern=None): - if not exclude_file_pattern: - shutil.rmtree(path, ignore_errors=True) - return - - for root, dirs, files in os.walk(path, topdown=False): - for f in files: - if not fnmatch.fnmatch(f, exclude_file_pattern): - os.remove(os.path.join(root, f)) - for d in dirs: - try: - os.rmdir(os.path.join(root, d)) - except OSError: - pass - - -class BuildItem(object): - """ - Instance of this class represents one build of an application. - The parameters which distinguish the build are passed to the constructor. - """ - - def __init__( - self, - app_path, - work_dir, - build_path, - build_log_path, - target, - sdkconfig_path, - config_name, - build_system, - preserve_artifacts, - ): - # These internal variables store the paths with environment variables and placeholders; - # Public properties with similar names use the _expand method to get the actual paths. - self._app_dir = app_path - self._work_dir = work_dir - self._build_dir = build_path - self._build_log_path = build_log_path - - self.sdkconfig_path = sdkconfig_path - self.config_name = config_name - self.target = target - self.build_system = build_system - - self.preserve = preserve_artifacts - - self._app_name = os.path.basename(os.path.normpath(app_path)) - self.size_json_fp = None - - # Some miscellaneous build properties which are set later, at the build stage - self.index = None - self.verbose = False - self.dry_run = False - self.keep_going = False - - self.work_path = self.work_dir or self.app_dir - if not self.build_dir: - self.build_path = os.path.join(self.work_path, 'build') - elif os.path.isabs(self.build_dir): - self.build_path = self.build_dir - else: - self.build_path = os.path.normpath(os.path.join(self.work_path, self.build_dir)) - - @property - def app_dir(self): - """ - :return: directory of the app - """ - return self._expand(self._app_dir) - - @property - def work_dir(self): - """ - :return: directory where the app should be copied to, prior to the build. Can be None, which means that the app - directory should be used. - """ - return self._expand(self._work_dir) - - @property - def build_dir(self): - """ - :return: build directory, either relative to the work directory (if relative path is used) or absolute path. - """ - return self._expand(self._build_dir) - - @property - def build_log_path(self): - """ - :return: path of the build log file - """ - return self._expand(self._build_log_path) - - def __repr__(self): - return '({}) Build app {} for target {}, sdkconfig {} in {}'.format( - self.build_system, - self.app_dir, - self.target, - self.sdkconfig_path or '(default)', - self.build_dir, - ) - - def to_json(self): # type: () -> str - """ - :return: JSON string representing this object - """ - return self._to_json(self._app_dir, self._work_dir, self._build_dir, self._build_log_path) - - def to_json_expanded(self): # type: () -> str - """ - :return: JSON string representing this object, with all placeholders in paths expanded - """ - return self._to_json(self.app_dir, self.work_dir, self.build_dir, self.build_log_path) - - def _to_json(self, app_dir, work_dir, build_dir, build_log_path): # type: (str, str, str, str) -> str - """ - Internal function, called by to_json and to_json_expanded - """ - return json.dumps({ - 'build_system': self.build_system, - 'app_dir': app_dir, - 'work_dir': work_dir, - 'build_dir': build_dir, - 'build_log_path': build_log_path, - 'sdkconfig': self.sdkconfig_path, - 'config': self.config_name, - 'target': self.target, - 'verbose': self.verbose, - 'preserve': self.preserve, - }) - - @staticmethod - def from_json(json_str): # type: (typing.Text) -> BuildItem - """ - :return: Get the BuildItem from a JSON string - """ - d = json.loads(str(json_str)) - result = BuildItem( - app_path=d['app_dir'], - work_dir=d['work_dir'], - build_path=d['build_dir'], - build_log_path=d['build_log_path'], - sdkconfig_path=d['sdkconfig'], - config_name=d['config'], - target=d['target'], - build_system=d['build_system'], - preserve_artifacts=d['preserve'] - ) - result.verbose = d['verbose'] - return result - - def _expand(self, path): # type: (str) -> str - """ - Internal method, expands any of the placeholders in {app,work,build} paths. - """ - if not path: - return path - - if self.index is not None: - path = path.replace(INDEX_PLACEHOLDER, str(self.index)) - path = path.replace(TARGET_PLACEHOLDER, self.target) - path = path.replace(NAME_PLACEHOLDER, self._app_name) - if (FULL_NAME_PLACEHOLDER in path): # to avoid recursion to the call to app_dir in the next line: - path = path.replace(FULL_NAME_PLACEHOLDER, self.app_dir.replace(os.path.sep, '_')) - wildcard_pos = path.find(WILDCARD_PLACEHOLDER) - if wildcard_pos != -1: - if self.config_name: - # if config name is defined, put it in place of the placeholder - path = path.replace(WILDCARD_PLACEHOLDER, self.config_name) - else: - # otherwise, remove the placeholder and one character on the left - # (which is usually an underscore, dash, or other delimiter) - left_of_wildcard = max(0, wildcard_pos - 1) - right_of_wildcard = wildcard_pos + len(WILDCARD_PLACEHOLDER) - path = path[0:left_of_wildcard] + path[right_of_wildcard:] - path = os.path.expandvars(path) - return path - - def get_size_json_fp(self): - if self.size_json_fp and os.path.exists(self.size_json_fp): - return self.size_json_fp - - assert os.path.exists(self.build_path) - assert os.path.exists(self.work_path) - - map_file = find_first_match('*.map', self.build_path) - if not map_file: - logging.info('.map file not found under "{}"'.format(self.build_path)) - return None - - size_json_fp = os.path.join(self.build_path, SIZE_JSON_FN) - idf_size_args = [ - sys.executable, - IDF_SIZE_PY, - '--json', - '-o', size_json_fp, - map_file - ] - subprocess.check_call(idf_size_args) - return size_json_fp - - def write_size_info(self, size_info_fs): - if not self.size_json_fp or (not os.path.exists(self.size_json_fp)): - logging.info(f'No size info found for app {self._app_name}') - return - size_info_dict = { - 'app_name': self._app_name, - 'config_name': self.config_name, - 'target': self.target, - 'path': self.size_json_fp, - } - size_info_fs.write(json.dumps(size_info_dict) + '\n') - - -class BuildSystem: - """ - Class representing a build system. - Derived classes implement the methods below. - Objects of these classes aren't instantiated, instead the class (type object) is used. - """ - NAME = 'undefined' - SUPPORTED_TARGETS_REGEX = re.compile(r'Supported [Tt]argets((?:[ |]+(?:[0-9a-zA-Z\-]+))+)') - - FORMAL_TO_USUAL = { - 'ESP32': 'esp32', - 'ESP32-S2': 'esp32s2', - 'ESP32-S3': 'esp32s3', - 'ESP32-C3': 'esp32c3', - 'ESP32-H2': 'esp32h2', - 'ESP32-C2': 'esp32c2', - 'Linux': 'linux', - } - - # ESP32H2-TODO: IDF-4559 - # Build only apps who has ESP32-H2 in the README.md supported targets table. - DEFAULT_TARGETS = ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c2', 'linux'] - - @classmethod - def build_prepare(cls, build_item): - app_path = build_item.app_dir - work_path = build_item.work_path - build_path = build_item.build_path - - if work_path != app_path: - if os.path.exists(work_path): - logging.debug('Work directory {} exists, removing'.format(work_path)) - if not build_item.dry_run: - shutil.rmtree(work_path) - logging.debug('Copying app from {} to {}'.format(app_path, work_path)) - if not build_item.dry_run: - shutil.copytree(app_path, work_path) - - if os.path.exists(build_path): - logging.debug('Build directory {} exists, removing'.format(build_path)) - if not build_item.dry_run: - shutil.rmtree(build_path) - - if not build_item.dry_run: - os.makedirs(build_path) - - # Prepare the sdkconfig file, from the contents of sdkconfig.defaults (if exists) and the contents of - # build_info.sdkconfig_path, i.e. the config-specific sdkconfig file. - # - # Note: the build system supports taking multiple sdkconfig.defaults files via SDKCONFIG_DEFAULTS - # CMake variable. However here we do this manually to perform environment variable expansion in the - # sdkconfig files. - sdkconfig_defaults_list = ['sdkconfig.defaults', 'sdkconfig.defaults.' + build_item.target] - if build_item.sdkconfig_path: - sdkconfig_defaults_list.append(build_item.sdkconfig_path) - - sdkconfig_file = os.path.join(work_path, 'sdkconfig') - if os.path.exists(sdkconfig_file): - logging.debug('Removing sdkconfig file: {}'.format(sdkconfig_file)) - if not build_item.dry_run: - os.unlink(sdkconfig_file) - - logging.debug('Creating sdkconfig file: {}'.format(sdkconfig_file)) - extra_cmakecache_items = {} - if not build_item.dry_run: - with open(sdkconfig_file, 'w') as f_out: - for sdkconfig_name in sdkconfig_defaults_list: - sdkconfig_path = os.path.join(work_path, sdkconfig_name) - if not sdkconfig_path or not os.path.exists(sdkconfig_path): - continue - logging.debug('Appending {} to sdkconfig'.format(sdkconfig_name)) - with open(sdkconfig_path, 'r') as f_in: - for line in f_in: - if not line.endswith('\n'): - line += '\n' - if cls.NAME == 'cmake': - m = SDKCONFIG_LINE_REGEX.match(line) - key = m.group(1) if m else None - if key in SDKCONFIG_TEST_OPTS: - extra_cmakecache_items[key] = m.group(2) - continue - if key in SDKCONFIG_IGNORE_OPTS: - continue - f_out.write(os.path.expandvars(line)) - else: - for sdkconfig_name in sdkconfig_defaults_list: - sdkconfig_path = os.path.join(app_path, sdkconfig_name) - if not sdkconfig_path: - continue - logging.debug('Considering sdkconfig {}'.format(sdkconfig_path)) - if not os.path.exists(sdkconfig_path): - continue - logging.debug('Appending {} to sdkconfig'.format(sdkconfig_name)) - - # The preparation of build is finished. Implement the build part in sub classes. - if cls.NAME == 'cmake': - return build_path, work_path, extra_cmakecache_items - else: - return build_path, work_path - - @staticmethod - @abstractmethod - def build(build_item): - pass - - @staticmethod - @abstractmethod - def is_app(path): - pass - - @staticmethod - def _read_readme(app_path): - # Markdown supported targets should be: - # e.g. | Supported Targets | ESP32 | - # | ----------------- | ----- | - # reStructuredText supported targets should be: - # e.g. ================= ===== - # Supported Targets ESP32 - # ================= ===== - def get_md_or_rst(app_path): - readme_path = os.path.join(app_path, 'README.md') - if not os.path.exists(readme_path): - readme_path = os.path.join(app_path, 'README.rst') - if not os.path.exists(readme_path): - return None - return readme_path - - readme_path = get_md_or_rst(app_path) - # Handle sub apps situation, e.g. master-slave - if not readme_path: - readme_path = get_md_or_rst(os.path.dirname(app_path)) - if not readme_path: - return None - with open(readme_path, 'r', encoding='utf8') as readme_file: - return readme_file.read() - - @classmethod - def _supported_targets(cls, app_path): - readme_file_content = BuildSystem._read_readme(app_path) - if not readme_file_content: - return cls.DEFAULT_TARGETS # supports all default targets if no readme found - match = re.findall(BuildSystem.SUPPORTED_TARGETS_REGEX, readme_file_content) - if not match: - return cls.DEFAULT_TARGETS # supports all default targets if no such header in readme - if len(match) > 1: - raise NotImplementedError("Can't determine the value of SUPPORTED_TARGETS in {}".format(app_path)) - support_str = match[0].strip() - - targets = [] - for part in support_str.split('|'): - for inner in part.split(' '): - inner = inner.strip() - if not inner: - continue - elif inner in cls.FORMAL_TO_USUAL: - targets.append(cls.FORMAL_TO_USUAL[inner]) - else: - raise NotImplementedError("Can't recognize value of target {} in {}, now we only support '{}'" - .format(inner, app_path, ', '.join(cls.FORMAL_TO_USUAL.keys()))) - return targets - - @classmethod - @abstractmethod - def supported_targets(cls, app_path): - pass - - -class BuildError(RuntimeError): - pass - - -def setup_logging(args): - """ - Configure logging module according to the number of '--verbose'/'-v' arguments and the --log-file argument. - :param args: namespace obtained from argparse - """ - if not args.verbose: - log_level = logging.WARNING - elif args.verbose == 1: - log_level = logging.INFO - else: - log_level = logging.DEBUG - - logging.basicConfig( - format='%(levelname)s: %(message)s', - stream=getattr(args, 'log_file', None) or sys.stderr, - level=log_level, - ) diff --git a/tools/test_apps/.build-test-rules.yml b/tools/test_apps/.build-test-rules.yml new file mode 100644 index 00000000000..b93515d9f3c --- /dev/null +++ b/tools/test_apps/.build-test-rules.yml @@ -0,0 +1,143 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +tools/test_apps/build_system/ldgen_test: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +tools/test_apps/peripherals/usb: + enable: + - if: IDF_TARGET in ["esp32s2", "esp32s3"] + temporary: true + reason: the other targets are not tested yet + +tools/test_apps/phy/phy_multi_init_data_test: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +tools/test_apps/protocols/esp_netif/build_config: + enable: + - if: IDF_TARGET in ["esp32", "esp32s2", "esp32c3"] + temporary: true + reason: the other targets are not tested yet + +tools/test_apps/protocols/mdns: + enable: + - if: IDF_TARGET in ["esp32", "esp32c3", "esp32s2"] + temporary: true + reason: the other targets are not tested yet + disable_test: + - if: IDF_TARGET == "esp32s2" or IDF_TARGET == "esp32c3" + temporary: true + reason: lack of runners + +tools/test_apps/protocols/mqtt/publish_connect_test: + enable: + - if: IDF_TARGET in ["esp32", "esp32c3", "esp32s2"] + temporary: true + reason: the other targets are not tested yet + disable_test: + - if: IDF_TARGET == "esp32s2" or IDF_TARGET == "esp32c3" + temporary: true + reason: lack of runners + +tools/test_apps/security/secure_boot: +# disable: +# - if: SOC_SECURE_BOOT_SUPPORTED != 1 + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +tools/test_apps/system/bootloader_sections: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +tools/test_apps/system/build_test: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +tools/test_apps/system/cxx_no_except: + enable: + - if: IDF_TARGET == "esp32" or IDF_TARGET == "esp32c3" + temporary: true + reason: the other targets are not tested yet + +tools/test_apps/system/eh_frame: + enable: + - if: IDF_TARGET in ["esp32c2", "esp32c3", "esp32h2"] + temporary: true + reason: the other targets are not tested yet + +tools/test_apps/system/flash_psram: + enable: + - if: IDF_TARGET == "esp32s3" + temporary: true + reason: the other targets are not tested yet + +tools/test_apps/system/g0_components: + enable: + - if: INCLUDE_DEFAULT == 1 or IDF_TARGET == "esp32h2" + +tools/test_apps/system/g1_components: + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + +tools/test_apps/system/gdb_loadable_elf: + disable_test: + - if: IDF_TARGET != "esp32" + temporary: true + reason: lack of runners + +tools/test_apps/system/longjmp_test: + enable: + - if: IDF_TARGET in ["esp32", "esp32s2", "esp32s3"] + temporary: true + reason: the other targets are not tested yet + disable_test: + - if: IDF_TARGET == "esp32s3" + temporary: true + reason: lack of runners + +tools/test_apps/system/memprot: + enable: + - if: IDF_TARGET in ["esp32c3", "esp32s2", "esp32s3"] + temporary: true + reason: the other targets are not tested yet + +tools/test_apps/system/monitor_ide_integration: + enable: + - if: IDF_TARGET == "esp32" or IDF_TARGET == "esp32s2" + temporary: true + reason: the other targets are not tested yet + disable_test: + - if: IDF_TARGET == "esp32s2" + temporary: true + reason: lack of runners + +tools/test_apps/system/no_embedded_paths: + enable: + - if: IDF_TARGET in ["esp32", "esp32c3", "esp32s2"] + temporary: true + reason: the other targets are not tested yet + +tools/test_apps/system/panic: + enable: + - if: INCLUDE_DEFAULT == 1 or IDF_TARGET == "esp32h2" + disable: + - if: IDF_TARGET == "esp32c2" + temporary: true + reason: target esp32c2 is not supported yet + disable_test: + - if: IDF_TARGET not in ["esp32", "esp32s2"] + temporary: true + reason: lack of runners diff --git a/tools/unit-test-app/tools/UnitTestParser.py b/tools/unit-test-app/tools/UnitTestParser.py index b73e7eb5292..635402289b7 100644 --- a/tools/unit-test-app/tools/UnitTestParser.py +++ b/tools/unit-test-app/tools/UnitTestParser.py @@ -134,7 +134,7 @@ class Parser(object): * first tag is always group of test cases, it's mandatory * the rest tags should be [type=value]. * if the type have default value, then [type] equal to [type=default_value]. - * if the type don't don't exist, then equal to [type=omitted_value] + * if the type don't exist, then equal to [type=omitted_value] default_value and omitted_value are defined in TagDefinition.yml :param tags_raw: raw tag string :return: tag dict @@ -287,12 +287,15 @@ class Parser(object): """ parse test cases from multiple built unit test apps """ test_cases = [] - output_folder = os.path.join(self.idf_path, self.ut_bin_folder, self.idf_target) configs_folder = os.path.join(self.idf_path, self.UT_CONFIG_FOLDER) - test_configs = [item for item in os.listdir(output_folder) - if os.path.isdir(os.path.join(output_folder, item))] + config_output_prefix = f'build_{self.idf_target}_' + test_configs = [] + for item in os.listdir(self.ut_bin_folder): + if os.path.isdir(os.path.join(self.ut_bin_folder, item)) and item.startswith(config_output_prefix): + test_configs.append(item.split(config_output_prefix)[1]) + for config in test_configs: - config_output_folder = os.path.join(output_folder, config) + config_output_folder = os.path.join(self.ut_bin_folder, f'{config_output_prefix}{config}') if os.path.exists(config_output_folder): test_cases.extend(self.parse_test_cases_for_one_config(configs_folder, config_output_folder, config)) test_cases.sort(key=lambda x: x['config'] + x['summary']) From 54f69d35a331525a3b4b61824c3f5421abecb347 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Mon, 11 Jul 2022 13:43:45 +0800 Subject: [PATCH 13/14] ci: add check job and pre-commit --- .gitlab/ci/pre_check.yml | 7 +++++++ .pre-commit-config.yaml | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/.gitlab/ci/pre_check.yml b/.gitlab/ci/pre_check.yml index 1b8b28a2265..db724d62287 100644 --- a/.gitlab/ci/pre_check.yml +++ b/.gitlab/ci/pre_check.yml @@ -175,3 +175,10 @@ check_commit_msg: - git log -n10 --oneline ${PIPELINE_COMMIT_SHA} # commit start with "WIP: " need to be squashed before merge - 'git log --pretty=%s origin/master..${PIPELINE_COMMIT_SHA} -- | grep -i "^WIP:" && exit 1 || exit 0' + +check_test_scripts_build_test_rules: + extends: + - .pre_check_job_template + - .before_script_build_jobs + script: + - python tools/ci/check_build_test_rules.py check-test-scripts examples/ tools/test_apps components diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d9a476c8d78..39518b8017f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -149,6 +149,20 @@ repos: pass_filenames: false additional_dependencies: - pyparsing + - id: check-all-apps-readmes + name: Check if all apps readme files match given .build-test-rules.yml files. Modify the supported target tables + entry: tools/ci/check_build_test_rules.py check-readmes + language: python + files: 'tools/test_apps/.+|examples/.+|components/.+' + additional_dependencies: + - idf_build_apps + - id: sort-build-test-rules-ymls + name: sort .build-test-rules.yml files + entry: tools/ci/check_build_test_rules.py sort-yaml + language: python + files: '\.build-test-rules\.yml' + additional_dependencies: + - ruamel.yaml - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.0.1 hooks: From c0568611dd3918c30dda9a7cf3e2ce46d74a95ba Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Wed, 13 Jul 2022 10:41:36 +0800 Subject: [PATCH 14/14] docs: changes docs supported targets tables --- components/driver/test_apps/gpio/README.md | 2 ++ components/driver/test_apps/gptimer/README.md | 2 +- components/driver/test_apps/i2s_test_apps/i2s/README.md | 2 +- .../test_apps/i2s_test_apps/legacy_i2s_driver/README.md | 2 +- components/driver/test_apps/legacy_rmt_driver/README.md | 2 +- components/driver/test_apps/legacy_rtc_temp_driver/README.md | 2 +- components/driver/test_apps/legacy_timer_driver/README.md | 2 +- components/driver/test_apps/rmt/README.md | 2 +- components/driver/test_apps/temperature_sensor/README.md | 2 +- components/esp_event/host_test/esp_event_unit_test/README.md | 2 ++ components/esp_lcd/test_apps/i2c_lcd/README.md | 3 +++ components/esp_lcd/test_apps/spi_lcd/README.md | 3 +++ components/esp_netif/test_apps/README.md | 2 +- components/esp_system/test_apps/rtc_8md256/README.md | 2 ++ components/espcoredump/test_apps/README.md | 2 +- components/lwip/test_afl_host/README.md | 3 +++ components/mqtt/host_test/README.md | 3 +++ components/newlib/test_apps/README.md | 2 ++ components/nvs_flash/host_test/nvs_page_test/README.md | 3 +++ examples/bluetooth/bluedroid/ble/ble_ancs/README.md | 2 +- .../bluetooth/bluedroid/ble/ble_compatibility_test/README.md | 2 +- examples/bluetooth/bluedroid/ble/ble_eddystone/README.md | 2 +- .../bluetooth/bluedroid/ble/ble_hid_device_demo/README.md | 2 +- examples/bluetooth/bluedroid/ble/ble_ibeacon/README.md | 2 +- examples/bluetooth/bluedroid/ble/ble_spp_client/README.md | 2 +- examples/bluetooth/bluedroid/ble/ble_spp_server/README.md | 2 +- .../bluedroid/ble/ble_throughput/throughput_client/README.md | 2 +- .../bluedroid/ble/ble_throughput/throughput_server/README.md | 2 +- examples/bluetooth/bluedroid/ble/gatt_client/README.md | 2 +- .../bluetooth/bluedroid/ble/gatt_security_client/README.md | 2 +- .../bluetooth/bluedroid/ble/gatt_security_server/README.md | 2 +- examples/bluetooth/bluedroid/ble/gatt_server/README.md | 2 +- .../bluedroid/ble/gatt_server_service_table/README.md | 2 +- .../bluetooth/bluedroid/ble/gattc_multi_connect/README.md | 2 +- .../bluedroid/ble_50/ble50_security_client/README.md | 2 +- .../bluedroid/ble_50/ble50_security_server/README.md | 2 +- examples/bluetooth/bluedroid/ble_50/multi-adv/README.md | 2 +- examples/bluetooth/bluedroid/ble_50/peroidic_adv/README.md | 2 +- examples/bluetooth/bluedroid/ble_50/peroidic_sync/README.md | 2 +- examples/build_system/cmake/component_manager/README.md | 3 +++ examples/build_system/cmake/import_lib/README.md | 3 +++ examples/build_system/cmake/import_prebuilt/README.md | 3 +++ examples/build_system/cmake/multi_config/README.md | 3 +++ examples/build_system/cmake/plugins/README.md | 3 +++ examples/custom_bootloader/bootloader_hooks/README.md | 3 +++ examples/custom_bootloader/bootloader_override/README.md | 3 +++ examples/cxx/exceptions/README.md | 2 +- examples/cxx/experimental/blink_cxx/README.md | 3 +++ examples/cxx/experimental/esp_event_async_cxx/README.md | 2 +- examples/cxx/experimental/esp_event_cxx/README.md | 2 +- examples/cxx/experimental/esp_mqtt_cxx/ssl/README.md | 2 +- examples/cxx/experimental/esp_mqtt_cxx/tcp/README.md | 2 +- examples/cxx/experimental/esp_timer_cxx/README.md | 2 +- examples/cxx/experimental/simple_i2c_rw_example/README.md | 2 +- examples/cxx/experimental/simple_spi_rw_example/README.md | 2 +- examples/cxx/pthread/README.md | 2 +- examples/cxx/rtti/README.md | 2 +- examples/ethernet/basic/README.md | 2 +- examples/ethernet/enc28j60/README.md | 2 +- examples/ethernet/eth2ap/README.md | 2 +- examples/ethernet/iperf/README.md | 2 +- examples/get-started/blink/README.md | 3 +++ examples/get-started/hello_world/README.md | 3 +++ examples/get-started/sample_project/README.md | 3 +++ examples/mesh/internal_communication/README.md | 2 +- examples/mesh/ip_internal_network/README.md | 2 +- examples/mesh/manual_networking/README.md | 2 +- examples/network/bridge/README.md | 3 +++ examples/network/network_tests/README.md | 2 +- examples/network/simple_sniffer/README.md | 2 +- examples/openthread/ot_br/README.md | 2 +- examples/peripherals/adc/dma_read/README.md | 2 +- examples/peripherals/adc/single_read/single_read/README.md | 2 +- examples/peripherals/gpio/generic_gpio/README.md | 3 +++ examples/peripherals/i2c/i2c_self_test/README.md | 2 +- examples/peripherals/i2c/i2c_simple/README.md | 2 +- examples/peripherals/i2c/i2c_tools/README.md | 2 +- examples/peripherals/i2s/i2s_basic/README.md | 2 +- examples/peripherals/i2s/i2s_es8311/README.md | 2 +- examples/peripherals/lcd/gc9a01/README.md | 2 +- examples/peripherals/lcd/i2c_oled/README.md | 2 +- examples/peripherals/lcd/tjpgd/README.md | 2 +- examples/peripherals/ledc/ledc_basic/README.md | 3 +++ examples/peripherals/ledc/ledc_fade/README.md | 3 +++ examples/peripherals/rmt/dshot_esc/README.md | 2 +- examples/peripherals/rmt/ir_nec_transceiver/README.md | 2 +- examples/peripherals/rmt/led_strip/README.md | 2 +- examples/peripherals/rmt/musical_buzzer/README.md | 2 +- examples/peripherals/sigmadelta/README.md | 2 +- examples/peripherals/spi_master/hd_eeprom/README.md | 2 +- examples/peripherals/spi_master/lcd/README.md | 2 +- examples/peripherals/spi_slave/README.md | 2 +- .../peripherals/spi_slave_hd/append_mode/master/README.md | 2 +- .../spi_slave_hd/segment_mode/seg_master/README.md | 2 +- .../peripherals/spi_slave_hd/segment_mode/seg_slave/README.md | 2 +- examples/peripherals/temp_sensor/README.md | 2 +- examples/peripherals/timer_group/gptimer/README.md | 2 +- examples/peripherals/timer_group/legacy_driver/README.md | 2 +- examples/peripherals/twai/twai_alert_and_recovery/README.md | 2 +- examples/peripherals/twai/twai_network/README.md | 2 +- examples/peripherals/twai/twai_self_test/README.md | 2 +- examples/peripherals/uart/nmea0183_parser/README.md | 3 +++ examples/peripherals/uart/uart_async_rxtxtasks/README.md | 3 +++ examples/peripherals/uart/uart_echo/README.md | 3 +++ examples/peripherals/uart/uart_echo_rs485/README.md | 2 +- examples/peripherals/uart/uart_events/README.md | 3 +++ examples/peripherals/uart/uart_repl/README.md | 3 +++ examples/peripherals/uart/uart_select/README.md | 3 +++ examples/protocols/cbor/README.md | 3 +++ examples/protocols/coap_client/README.md | 2 +- examples/protocols/coap_server/README.md | 2 +- examples/protocols/esp_http_client/README.md | 4 ++-- examples/protocols/esp_local_ctrl/README.md | 3 +++ examples/protocols/http2_request/README.md | 2 +- examples/protocols/http_request/README.md | 2 +- examples/protocols/http_server/advanced_tests/README.md | 2 +- examples/protocols/http_server/captive_portal/README.md | 2 +- examples/protocols/http_server/file_serving/README.md | 2 +- examples/protocols/http_server/persistent_sockets/README.md | 2 +- examples/protocols/http_server/restful_server/README.md | 2 +- examples/protocols/http_server/simple/README.md | 2 +- examples/protocols/http_server/ws_echo_server/README.md | 2 +- examples/protocols/https_mbedtls/README.md | 3 +++ examples/protocols/https_request/README.md | 3 +++ examples/protocols/https_server/simple/README.md | 3 +++ examples/protocols/https_server/wss_server/README.md | 3 +++ examples/protocols/https_x509_bundle/README.md | 3 +++ examples/protocols/icmp_echo/README.md | 2 +- examples/protocols/l2tap/README.md | 2 +- examples/protocols/modbus/serial/mb_master/README.md | 2 +- examples/protocols/modbus/serial/mb_slave/README.md | 2 +- examples/protocols/modbus/tcp/mb_tcp_master/README.md | 2 +- examples/protocols/modbus/tcp/mb_tcp_slave/README.md | 2 +- examples/protocols/mqtt/ssl/README.md | 2 +- examples/protocols/mqtt/ssl_ds/README.md | 4 +++- examples/protocols/mqtt/ssl_mutual_auth/README.md | 2 +- examples/protocols/mqtt/ssl_psk/README.md | 2 +- examples/protocols/mqtt/tcp/README.md | 2 +- examples/protocols/mqtt/ws/README.md | 2 +- examples/protocols/mqtt/wss/README.md | 2 +- examples/protocols/slip/slip_udp/README.md | 2 +- examples/protocols/smtp_client/README.md | 2 +- examples/protocols/sockets/non_blocking/README.md | 2 +- examples/protocols/sockets/tcp_client/README.md | 2 +- examples/protocols/sockets/tcp_client_multi_net/README.md | 2 +- examples/protocols/sockets/tcp_server/README.md | 2 +- examples/protocols/sockets/udp_client/README.md | 2 +- examples/protocols/sockets/udp_multicast/README.md | 2 +- examples/protocols/sockets/udp_server/README.md | 2 +- examples/protocols/static_ip/README.md | 2 +- examples/provisioning/wifi_prov_mgr/README.md | 3 +++ examples/security/flash_encryption/README.md | 2 +- examples/storage/custom_flash_driver/README.md | 2 +- examples/storage/ext_flash_fatfs/README.md | 2 +- examples/storage/fatfsgen/README.md | 2 +- examples/storage/nvs_rw_blob/README.md | 2 +- examples/storage/nvs_rw_value/README.md | 2 +- examples/storage/nvs_rw_value_cxx/README.md | 2 +- examples/storage/partition_api/partition_find/README.md | 2 +- examples/storage/partition_api/partition_mmap/README.md | 2 +- examples/storage/partition_api/partition_ops/README.md | 2 +- examples/storage/parttool/README.md | 2 +- examples/storage/sd_card/sdspi/README.md | 2 +- examples/storage/semihost_vfs/README.md | 2 +- examples/storage/spiffs/README.md | 2 +- examples/storage/spiffsgen/README.md | 2 +- examples/storage/wear_levelling/README.md | 2 +- examples/system/base_mac_address/README.md | 2 +- examples/system/console/advanced/README.md | 2 +- examples/system/console/basic/README.md | 2 +- examples/system/deep_sleep/README.md | 2 +- examples/system/efuse/README.md | 2 +- examples/system/esp_event/default_event_loop/README.md | 2 +- examples/system/esp_event/user_event_loops/README.md | 2 +- examples/system/esp_timer/README.md | 3 +++ examples/system/eventfd/README.md | 2 +- examples/system/freertos/real_time_stats/README.md | 2 +- examples/system/gdbstub/README.md | 2 +- examples/system/heap_task_tracking/README.md | 2 +- examples/system/light_sleep/README.md | 2 +- examples/system/ota/advanced_https_ota/README.md | 3 +++ examples/system/ota/native_ota_example/README.md | 3 +++ examples/system/ota/otatool/README.md | 2 +- examples/system/ota/pre_encrypted_ota/README.md | 3 +++ examples/system/ota/simple_ota_example/README.md | 3 +++ examples/system/pthread/README.md | 2 +- examples/system/select/README.md | 2 +- examples/system/startup_time/README.md | 3 +++ examples/system/sysview_tracing/README.md | 2 +- examples/system/sysview_tracing_heap_log/README.md | 2 +- examples/system/task_watchdog/README.md | 3 +++ examples/system/unit_test/README.md | 3 +++ examples/wifi/espnow/README.md | 2 +- examples/wifi/fast_scan/README.md | 2 +- examples/wifi/ftm/README.md | 2 +- examples/wifi/getting_started/softAP/README.md | 2 +- examples/wifi/getting_started/station/README.md | 2 +- examples/wifi/iperf/README.md | 2 +- examples/wifi/power_save/README.md | 2 +- examples/wifi/roaming/README.md | 2 +- examples/wifi/scan/README.md | 2 +- examples/wifi/smart_config/README.md | 2 +- examples/wifi/wifi_eap_fast/README.md | 2 +- examples/wifi/wifi_easy_connect/dpp-enrollee/README.md | 2 +- examples/wifi/wifi_enterprise/README.md | 2 +- examples/wifi/wps/README.md | 2 +- examples/zigbee/esp_zigbee_gateway/README.md | 2 +- tools/test_apps/build_system/embed_test/README.md | 2 ++ tools/test_apps/build_system/ldalign_test/README.md | 2 ++ tools/test_apps/build_system/ldgen_test/README.md | 2 +- tools/test_apps/build_system/rsource_test/README.md | 2 ++ tools/test_apps/peripherals/i2c_wifi/README.md | 3 +++ tools/test_apps/phy/phy_multi_init_data_test/README.md | 2 +- tools/test_apps/protocols/esp_netif/build_config/README.md | 2 +- tools/test_apps/protocols/mqtt/build_test/README.md | 2 +- tools/test_apps/protocols/mqtt/publish_connect_test/README.md | 2 +- tools/test_apps/security/secure_boot/README.md | 2 +- tools/test_apps/system/bootloader_sections/README.md | 2 +- tools/test_apps/system/build_test/README.md | 2 +- tools/test_apps/system/cxx_build_test/README.md | 3 +++ tools/test_apps/system/eh_frame/README.md | 2 +- tools/test_apps/system/g0_components/README.md | 2 +- tools/test_apps/system/g1_components/README.md | 2 +- tools/test_apps/system/gdb_loadable_elf/README.md | 3 +++ tools/test_apps/system/no_embedded_paths/README.md | 2 +- tools/test_apps/system/panic/README.md | 2 +- tools/test_apps/system/startup/README.md | 2 ++ 227 files changed, 328 insertions(+), 175 deletions(-) create mode 100644 components/driver/test_apps/gpio/README.md create mode 100644 components/esp_event/host_test/esp_event_unit_test/README.md create mode 100644 components/esp_system/test_apps/rtc_8md256/README.md create mode 100644 components/newlib/test_apps/README.md create mode 100644 tools/test_apps/build_system/embed_test/README.md create mode 100644 tools/test_apps/build_system/ldalign_test/README.md create mode 100644 tools/test_apps/build_system/rsource_test/README.md create mode 100644 tools/test_apps/system/startup/README.md diff --git a/components/driver/test_apps/gpio/README.md b/components/driver/test_apps/gpio/README.md new file mode 100644 index 00000000000..b5be4985c57 --- /dev/null +++ b/components/driver/test_apps/gpio/README.md @@ -0,0 +1,2 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/components/driver/test_apps/gptimer/README.md b/components/driver/test_apps/gptimer/README.md index 57433de18a6..b5be4985c57 100644 --- a/components/driver/test_apps/gptimer/README.md +++ b/components/driver/test_apps/gptimer/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/components/driver/test_apps/i2s_test_apps/i2s/README.md b/components/driver/test_apps/i2s_test_apps/i2s/README.md index 36802259d02..55e880bf84c 100644 --- a/components/driver/test_apps/i2s_test_apps/i2s/README.md +++ b/components/driver/test_apps/i2s_test_apps/i2s/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | \ No newline at end of file diff --git a/components/driver/test_apps/i2s_test_apps/legacy_i2s_driver/README.md b/components/driver/test_apps/i2s_test_apps/legacy_i2s_driver/README.md index 36802259d02..55e880bf84c 100644 --- a/components/driver/test_apps/i2s_test_apps/legacy_i2s_driver/README.md +++ b/components/driver/test_apps/i2s_test_apps/legacy_i2s_driver/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | \ No newline at end of file diff --git a/components/driver/test_apps/legacy_rmt_driver/README.md b/components/driver/test_apps/legacy_rmt_driver/README.md index 3f7a0a04f01..497a93ba72e 100644 --- a/components/driver/test_apps/legacy_rmt_driver/README.md +++ b/components/driver/test_apps/legacy_rmt_driver/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | diff --git a/components/driver/test_apps/legacy_rtc_temp_driver/README.md b/components/driver/test_apps/legacy_rtc_temp_driver/README.md index ef937345bad..bff9e386d1d 100644 --- a/components/driver/test_apps/legacy_rtc_temp_driver/README.md +++ b/components/driver/test_apps/legacy_rtc_temp_driver/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | -------- | -------- | -------- | -------- | diff --git a/components/driver/test_apps/legacy_timer_driver/README.md b/components/driver/test_apps/legacy_timer_driver/README.md index 57433de18a6..b5be4985c57 100644 --- a/components/driver/test_apps/legacy_timer_driver/README.md +++ b/components/driver/test_apps/legacy_timer_driver/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/components/driver/test_apps/rmt/README.md b/components/driver/test_apps/rmt/README.md index 3f7a0a04f01..497a93ba72e 100644 --- a/components/driver/test_apps/rmt/README.md +++ b/components/driver/test_apps/rmt/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | diff --git a/components/driver/test_apps/temperature_sensor/README.md b/components/driver/test_apps/temperature_sensor/README.md index ef937345bad..bff9e386d1d 100644 --- a/components/driver/test_apps/temperature_sensor/README.md +++ b/components/driver/test_apps/temperature_sensor/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | -------- | -------- | -------- | -------- | diff --git a/components/esp_event/host_test/esp_event_unit_test/README.md b/components/esp_event/host_test/esp_event_unit_test/README.md new file mode 100644 index 00000000000..37c142df16d --- /dev/null +++ b/components/esp_event/host_test/esp_event_unit_test/README.md @@ -0,0 +1,2 @@ +| Supported Targets | Linux | +| ----------------- | ----- | diff --git a/components/esp_lcd/test_apps/i2c_lcd/README.md b/components/esp_lcd/test_apps/i2c_lcd/README.md index c1bf68ceb4c..863eaede673 100644 --- a/components/esp_lcd/test_apps/i2c_lcd/README.md +++ b/components/esp_lcd/test_apps/i2c_lcd/README.md @@ -1 +1,4 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + This test app is used to test LCDs with I2C interface. diff --git a/components/esp_lcd/test_apps/spi_lcd/README.md b/components/esp_lcd/test_apps/spi_lcd/README.md index b7b10101072..bd4250408ab 100644 --- a/components/esp_lcd/test_apps/spi_lcd/README.md +++ b/components/esp_lcd/test_apps/spi_lcd/README.md @@ -1 +1,4 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + This test app is used to test LCDs with SPI interface. diff --git a/components/esp_netif/test_apps/README.md b/components/esp_netif/test_apps/README.md index 57433de18a6..b5be4985c57 100644 --- a/components/esp_netif/test_apps/README.md +++ b/components/esp_netif/test_apps/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/components/esp_system/test_apps/rtc_8md256/README.md b/components/esp_system/test_apps/rtc_8md256/README.md new file mode 100644 index 00000000000..b5be4985c57 --- /dev/null +++ b/components/esp_system/test_apps/rtc_8md256/README.md @@ -0,0 +1,2 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/components/espcoredump/test_apps/README.md b/components/espcoredump/test_apps/README.md index eea43e0c0f6..2159d40a708 100644 --- a/components/espcoredump/test_apps/README.md +++ b/components/espcoredump/test_apps/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # ESP Core Dump Tests diff --git a/components/lwip/test_afl_host/README.md b/components/lwip/test_afl_host/README.md index e392eef99b7..9d7665ee50a 100644 --- a/components/lwip/test_afl_host/README.md +++ b/components/lwip/test_afl_host/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + ## Introduction This test uses [american fuzzy lop](http://lcamtuf.coredump.cx/afl/) to mangle real dns, dhcp client, dhcp server packets and look for exceptions caused by the parser. diff --git a/components/mqtt/host_test/README.md b/components/mqtt/host_test/README.md index 071cd94c374..a62087a71f4 100644 --- a/components/mqtt/host_test/README.md +++ b/components/mqtt/host_test/README.md @@ -1,3 +1,6 @@ +| Supported Targets | Linux | +| ----------------- | ----- | + # Description This directory contains test code for the mqtt client that runs on host. diff --git a/components/newlib/test_apps/README.md b/components/newlib/test_apps/README.md new file mode 100644 index 00000000000..b5be4985c57 --- /dev/null +++ b/components/newlib/test_apps/README.md @@ -0,0 +1,2 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/components/nvs_flash/host_test/nvs_page_test/README.md b/components/nvs_flash/host_test/nvs_page_test/README.md index 16df59e7647..cf48e50a710 100644 --- a/components/nvs_flash/host_test/nvs_page_test/README.md +++ b/components/nvs_flash/host_test/nvs_page_test/README.md @@ -1,3 +1,6 @@ +| Supported Targets | Linux | +| ----------------- | ----- | + # NVS Page Unit Test This unit test for the `nvs::Page` C++ class uses CMock to abstract its dependency to the `spi_flash` component. Its `CMakeLists.txt` builds mocks instead of the actual `spi_flash` component by setting the component property `USE_MOCK` for `spi_flash`. It also needs some stubs for CRC32 since the ROM component can not be mocked yet. These are retrieved from the `mock` directory inside `nvs_flash`. diff --git a/examples/bluetooth/bluedroid/ble/ble_ancs/README.md b/examples/bluetooth/bluedroid/ble/ble_ancs/README.md index 12fd64b84e9..051cc757076 100644 --- a/examples/bluetooth/bluedroid/ble/ble_ancs/README.md +++ b/examples/bluetooth/bluedroid/ble/ble_ancs/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C2 | ESP32-H2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF BLE ANCS Example diff --git a/examples/bluetooth/bluedroid/ble/ble_compatibility_test/README.md b/examples/bluetooth/bluedroid/ble/ble_compatibility_test/README.md index 0c4b3b4e4a2..b8e1f3354fe 100644 --- a/examples/bluetooth/bluedroid/ble/ble_compatibility_test/README.md +++ b/examples/bluetooth/bluedroid/ble/ble_compatibility_test/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C2 | ESP32-H2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF BLE Compatibility Test Example diff --git a/examples/bluetooth/bluedroid/ble/ble_eddystone/README.md b/examples/bluetooth/bluedroid/ble/ble_eddystone/README.md index b8e61c74d3c..8bcb3a1b024 100644 --- a/examples/bluetooth/bluedroid/ble/ble_eddystone/README.md +++ b/examples/bluetooth/bluedroid/ble/ble_eddystone/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C2 | ESP32-H2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF Eddystone Example diff --git a/examples/bluetooth/bluedroid/ble/ble_hid_device_demo/README.md b/examples/bluetooth/bluedroid/ble/ble_hid_device_demo/README.md index be81359e099..6fe4e83f617 100644 --- a/examples/bluetooth/bluedroid/ble/ble_hid_device_demo/README.md +++ b/examples/bluetooth/bluedroid/ble/ble_hid_device_demo/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C2 | ESP32-H2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF BLE HID Example diff --git a/examples/bluetooth/bluedroid/ble/ble_ibeacon/README.md b/examples/bluetooth/bluedroid/ble/ble_ibeacon/README.md index e937f5538d3..1581ec1e73a 100644 --- a/examples/bluetooth/bluedroid/ble/ble_ibeacon/README.md +++ b/examples/bluetooth/bluedroid/ble/ble_ibeacon/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-H2 | ESP32-C2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF iBeacon demo diff --git a/examples/bluetooth/bluedroid/ble/ble_spp_client/README.md b/examples/bluetooth/bluedroid/ble/ble_spp_client/README.md index bbbec975317..808b7addf9d 100644 --- a/examples/bluetooth/bluedroid/ble/ble_spp_client/README.md +++ b/examples/bluetooth/bluedroid/ble/ble_spp_client/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-H2 | ESP32-C2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF SPP GATT CLIENT demo diff --git a/examples/bluetooth/bluedroid/ble/ble_spp_server/README.md b/examples/bluetooth/bluedroid/ble/ble_spp_server/README.md index 5f047ddce33..aacb0b0834a 100644 --- a/examples/bluetooth/bluedroid/ble/ble_spp_server/README.md +++ b/examples/bluetooth/bluedroid/ble/ble_spp_server/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C2 | ESP32-H2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | ## ESP-IDF GATT SERVER SPP Example diff --git a/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/README.md b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/README.md index e1fe8fd7fa7..6e8bfd5cd63 100644 --- a/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/README.md +++ b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_client/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-H2 | ESP32-C2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF BLE throughput GATT CLIENT Test diff --git a/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/README.md b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/README.md index b6fb0f167bf..bf4dd1c0256 100644 --- a/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/README.md +++ b/examples/bluetooth/bluedroid/ble/ble_throughput/throughput_server/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-H2 | ESP32-C2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF BLE throughput GATT SERVER Test diff --git a/examples/bluetooth/bluedroid/ble/gatt_client/README.md b/examples/bluetooth/bluedroid/ble/gatt_client/README.md index b3196423109..098d32bb036 100644 --- a/examples/bluetooth/bluedroid/ble/gatt_client/README.md +++ b/examples/bluetooth/bluedroid/ble/gatt_client/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-H2 | ESP32-C2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF Gatt Client Example diff --git a/examples/bluetooth/bluedroid/ble/gatt_security_client/README.md b/examples/bluetooth/bluedroid/ble/gatt_security_client/README.md index 88d5324eed4..a65f2466fb0 100644 --- a/examples/bluetooth/bluedroid/ble/gatt_security_client/README.md +++ b/examples/bluetooth/bluedroid/ble/gatt_security_client/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C2 | ESP32-H2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF Gatt Security Client Example diff --git a/examples/bluetooth/bluedroid/ble/gatt_security_server/README.md b/examples/bluetooth/bluedroid/ble/gatt_security_server/README.md index 1c43d63782c..7a33ed10a18 100644 --- a/examples/bluetooth/bluedroid/ble/gatt_security_server/README.md +++ b/examples/bluetooth/bluedroid/ble/gatt_security_server/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C2 | ESP32-H2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF Gatt Security Server Example diff --git a/examples/bluetooth/bluedroid/ble/gatt_server/README.md b/examples/bluetooth/bluedroid/ble/gatt_server/README.md index 5e290418fd2..45ce216b844 100644 --- a/examples/bluetooth/bluedroid/ble/gatt_server/README.md +++ b/examples/bluetooth/bluedroid/ble/gatt_server/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C2 | ESP32-H2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF Gatt Server Example diff --git a/examples/bluetooth/bluedroid/ble/gatt_server_service_table/README.md b/examples/bluetooth/bluedroid/ble/gatt_server_service_table/README.md index 403808b4580..4e0f93e375f 100644 --- a/examples/bluetooth/bluedroid/ble/gatt_server_service_table/README.md +++ b/examples/bluetooth/bluedroid/ble/gatt_server_service_table/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C2 | ESP32-H2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF Gatt Server Service Table Example diff --git a/examples/bluetooth/bluedroid/ble/gattc_multi_connect/README.md b/examples/bluetooth/bluedroid/ble/gattc_multi_connect/README.md index e7a68e4fd2c..4a012b472b1 100644 --- a/examples/bluetooth/bluedroid/ble/gattc_multi_connect/README.md +++ b/examples/bluetooth/bluedroid/ble/gattc_multi_connect/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-C3 | ESP32-C2 | ESP32-H2 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-IDF Gatt Client Multi Connection Example diff --git a/examples/bluetooth/bluedroid/ble_50/ble50_security_client/README.md b/examples/bluetooth/bluedroid/ble_50/ble50_security_client/README.md index 19636a45b10..836015586e0 100644 --- a/examples/bluetooth/bluedroid/ble_50/ble50_security_client/README.md +++ b/examples/bluetooth/bluedroid/ble_50/ble50_security_client/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32-C3 | ESP32-S3 | ESP32-C2 | ESP32-H2 | +| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | -------- | -------- | -------- | -------- | # ESP-IDF Gatt Security Client Example diff --git a/examples/bluetooth/bluedroid/ble_50/ble50_security_server/README.md b/examples/bluetooth/bluedroid/ble_50/ble50_security_server/README.md index e9c8a1ed836..a9a2b55cfb1 100644 --- a/examples/bluetooth/bluedroid/ble_50/ble50_security_server/README.md +++ b/examples/bluetooth/bluedroid/ble_50/ble50_security_server/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32-C3 | ESP32-S3 | ESP32-C2 | ESP32-H2 | +| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | -------- | -------- | -------- | -------- | # ESP-IDF BLE50 Security Server Example diff --git a/examples/bluetooth/bluedroid/ble_50/multi-adv/README.md b/examples/bluetooth/bluedroid/ble_50/multi-adv/README.md index b85c256db57..a8f0ea6d3d9 100644 --- a/examples/bluetooth/bluedroid/ble_50/multi-adv/README.md +++ b/examples/bluetooth/bluedroid/ble_50/multi-adv/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32-C3 | ESP32-S3 | ESP32-C2 | +| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-S3 | | ----------------- | -------- | -------- | -------- | #ESP-IDF Multi Adv Example diff --git a/examples/bluetooth/bluedroid/ble_50/peroidic_adv/README.md b/examples/bluetooth/bluedroid/ble_50/peroidic_adv/README.md index de682f28767..0edf32e3988 100644 --- a/examples/bluetooth/bluedroid/ble_50/peroidic_adv/README.md +++ b/examples/bluetooth/bluedroid/ble_50/peroidic_adv/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32-C3 | ESP32-S3 | ESP32-C2 | ESP32-H2 | +| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | -------- | -------- | -------- | -------- | # ESP_IDF Periodic Adv Example diff --git a/examples/bluetooth/bluedroid/ble_50/peroidic_sync/README.md b/examples/bluetooth/bluedroid/ble_50/peroidic_sync/README.md index af21fa8dc08..2c74efc6ed5 100644 --- a/examples/bluetooth/bluedroid/ble_50/peroidic_sync/README.md +++ b/examples/bluetooth/bluedroid/ble_50/peroidic_sync/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32-C3 | ESP32-S3 | ESP32-C2 | ESP32-H2 | +| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S3 | | ----------------- | -------- | -------- | -------- | -------- | # ESP-IDF Periodic Sync Example diff --git a/examples/build_system/cmake/component_manager/README.md b/examples/build_system/cmake/component_manager/README.md index 182664f5533..028a0e8ffb0 100644 --- a/examples/build_system/cmake/component_manager/README.md +++ b/examples/build_system/cmake/component_manager/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Using the component manager for downloading dependencies This example demonstrates how to use [IDF Component Manager](https://pypi.org/project/idf-component-manager/) for downloading dependencies from [the component registry](https://components.espressif.com). More details and use cases of IDF Component Manager can be found in the programming guide under `API Guides` -> `Tools` -> `IDF Component Manager`. diff --git a/examples/build_system/cmake/import_lib/README.md b/examples/build_system/cmake/import_lib/README.md index 88b3775678a..422813c5996 100644 --- a/examples/build_system/cmake/import_lib/README.md +++ b/examples/build_system/cmake/import_lib/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Import Third-Party CMake Library Example This example demonstrates how to import third-party CMake libraries. diff --git a/examples/build_system/cmake/import_prebuilt/README.md b/examples/build_system/cmake/import_prebuilt/README.md index 0ad1f90395d..6e6748d2c65 100644 --- a/examples/build_system/cmake/import_prebuilt/README.md +++ b/examples/build_system/cmake/import_prebuilt/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Import Prebuilt Library Example This example illustrates how to import a prebuilt static library in the ESP-IDF build system. diff --git a/examples/build_system/cmake/multi_config/README.md b/examples/build_system/cmake/multi_config/README.md index 41959b2a541..01f3e153624 100644 --- a/examples/build_system/cmake/multi_config/README.md +++ b/examples/build_system/cmake/multi_config/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Multiple Build Configurations Example (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/build_system/cmake/plugins/README.md b/examples/build_system/cmake/plugins/README.md index dac0259ee16..d987b99d278 100644 --- a/examples/build_system/cmake/plugins/README.md +++ b/examples/build_system/cmake/plugins/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Link Time Plugins Registration (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/custom_bootloader/bootloader_hooks/README.md b/examples/custom_bootloader/bootloader_hooks/README.md index 4d593d3fd78..06f8dc72b32 100644 --- a/examples/custom_bootloader/bootloader_hooks/README.md +++ b/examples/custom_bootloader/bootloader_hooks/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Bootloader hooks (See the README.md file in the upper level for more information about bootloader examples.) diff --git a/examples/custom_bootloader/bootloader_override/README.md b/examples/custom_bootloader/bootloader_override/README.md index 1b6bbf84d40..22becbc1a6b 100644 --- a/examples/custom_bootloader/bootloader_override/README.md +++ b/examples/custom_bootloader/bootloader_override/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Bootloader override (See the README.md file in the upper level for more information about bootloader examples.) diff --git a/examples/cxx/exceptions/README.md b/examples/cxx/exceptions/README.md index 64adddf49f3..18fd7e3a40f 100644 --- a/examples/cxx/exceptions/README.md +++ b/examples/cxx/exceptions/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # Example: C++ exception handling diff --git a/examples/cxx/experimental/blink_cxx/README.md b/examples/cxx/experimental/blink_cxx/README.md index 8c31d01abe9..0e145f1f524 100644 --- a/examples/cxx/experimental/blink_cxx/README.md +++ b/examples/cxx/experimental/blink_cxx/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Example: Blink C++ example (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/cxx/experimental/esp_event_async_cxx/README.md b/examples/cxx/experimental/esp_event_async_cxx/README.md index 4cec9fd2973..aa2c6077794 100644 --- a/examples/cxx/experimental/esp_event_async_cxx/README.md +++ b/examples/cxx/experimental/esp_event_async_cxx/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP-Event asynchronous example diff --git a/examples/cxx/experimental/esp_event_cxx/README.md b/examples/cxx/experimental/esp_event_cxx/README.md index dac6cd17aa3..c2350565eff 100644 --- a/examples/cxx/experimental/esp_event_cxx/README.md +++ b/examples/cxx/experimental/esp_event_cxx/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP Event synchronous example diff --git a/examples/cxx/experimental/esp_mqtt_cxx/ssl/README.md b/examples/cxx/experimental/esp_mqtt_cxx/ssl/README.md index 57433de18a6..b5be4985c57 100644 --- a/examples/cxx/experimental/esp_mqtt_cxx/ssl/README.md +++ b/examples/cxx/experimental/esp_mqtt_cxx/ssl/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/examples/cxx/experimental/esp_mqtt_cxx/tcp/README.md b/examples/cxx/experimental/esp_mqtt_cxx/tcp/README.md index 57433de18a6..b5be4985c57 100644 --- a/examples/cxx/experimental/esp_mqtt_cxx/tcp/README.md +++ b/examples/cxx/experimental/esp_mqtt_cxx/tcp/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/examples/cxx/experimental/esp_timer_cxx/README.md b/examples/cxx/experimental/esp_timer_cxx/README.md index a2748dde9c1..50cc2ab6f20 100644 --- a/examples/cxx/experimental/esp_timer_cxx/README.md +++ b/examples/cxx/experimental/esp_timer_cxx/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # Example: ESPTimer C++ class diff --git a/examples/cxx/experimental/simple_i2c_rw_example/README.md b/examples/cxx/experimental/simple_i2c_rw_example/README.md index f034c07427e..3f08db27d66 100644 --- a/examples/cxx/experimental/simple_i2c_rw_example/README.md +++ b/examples/cxx/experimental/simple_i2c_rw_example/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Example: C++ I2C sensor read for MPU9250 diff --git a/examples/cxx/experimental/simple_spi_rw_example/README.md b/examples/cxx/experimental/simple_spi_rw_example/README.md index 68a36770879..dfc017bccc9 100644 --- a/examples/cxx/experimental/simple_spi_rw_example/README.md +++ b/examples/cxx/experimental/simple_spi_rw_example/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Example: C++ SPI sensor read for MCU9250 inertial/giroscope sensor diff --git a/examples/cxx/pthread/README.md b/examples/cxx/pthread/README.md index 2a07891a859..9aff432d9ff 100644 --- a/examples/cxx/pthread/README.md +++ b/examples/cxx/pthread/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # C++ pthread Example diff --git a/examples/cxx/rtti/README.md b/examples/cxx/rtti/README.md index f2bcd6d05d8..3d771cd614b 100644 --- a/examples/cxx/rtti/README.md +++ b/examples/cxx/rtti/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # Example: C++ run-time type info (RTTI) diff --git a/examples/ethernet/basic/README.md b/examples/ethernet/basic/README.md index d5d2b6e8f7a..b59744f4341 100644 --- a/examples/ethernet/basic/README.md +++ b/examples/ethernet/basic/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Ethernet Example diff --git a/examples/ethernet/enc28j60/README.md b/examples/ethernet/enc28j60/README.md index e71e7fe5779..e1c4682220a 100644 --- a/examples/ethernet/enc28j60/README.md +++ b/examples/ethernet/enc28j60/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # ENC28J60 Example diff --git a/examples/ethernet/eth2ap/README.md b/examples/ethernet/eth2ap/README.md index 7f24d71def8..36a87603c40 100644 --- a/examples/ethernet/eth2ap/README.md +++ b/examples/ethernet/eth2ap/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # eth2ap Example diff --git a/examples/ethernet/iperf/README.md b/examples/ethernet/iperf/README.md index 4b8f5bf1d80..e211bf4d364 100644 --- a/examples/ethernet/iperf/README.md +++ b/examples/ethernet/iperf/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Ethernet iperf Example diff --git a/examples/get-started/blink/README.md b/examples/get-started/blink/README.md index 6a0d315606a..3c9864fc27f 100644 --- a/examples/get-started/blink/README.md +++ b/examples/get-started/blink/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Blink Example (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/get-started/hello_world/README.md b/examples/get-started/hello_world/README.md index d47aefec113..8d36b453a4b 100644 --- a/examples/get-started/hello_world/README.md +++ b/examples/get-started/hello_world/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Hello World Example Starts a FreeRTOS task to print "Hello World". diff --git a/examples/get-started/sample_project/README.md b/examples/get-started/sample_project/README.md index 455eb909094..84e2c5ed028 100644 --- a/examples/get-started/sample_project/README.md +++ b/examples/get-started/sample_project/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # _Sample project_ (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/mesh/internal_communication/README.md b/examples/mesh/internal_communication/README.md index 8ff57f8d3ba..4e21560bec7 100644 --- a/examples/mesh/internal_communication/README.md +++ b/examples/mesh/internal_communication/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Mesh Internal Communication Example diff --git a/examples/mesh/ip_internal_network/README.md b/examples/mesh/ip_internal_network/README.md index 7da93620d91..34b46ea454c 100644 --- a/examples/mesh/ip_internal_network/README.md +++ b/examples/mesh/ip_internal_network/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Mesh IP Internal Networking example diff --git a/examples/mesh/manual_networking/README.md b/examples/mesh/manual_networking/README.md index 714954db018..bc5c847482f 100644 --- a/examples/mesh/manual_networking/README.md +++ b/examples/mesh/manual_networking/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Mesh Manual Networking Example diff --git a/examples/network/bridge/README.md b/examples/network/bridge/README.md index 26e571e77df..1c3e6ce7f92 100644 --- a/examples/network/bridge/README.md +++ b/examples/network/bridge/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Bridge Example (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/network/network_tests/README.md b/examples/network/network_tests/README.md index 88948856015..3da391bc3bc 100644 --- a/examples/network/network_tests/README.md +++ b/examples/network/network_tests/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Intel net test suite for LwIP network stack diff --git a/examples/network/simple_sniffer/README.md b/examples/network/simple_sniffer/README.md index 6496a8f4234..afd98514af5 100644 --- a/examples/network/simple_sniffer/README.md +++ b/examples/network/simple_sniffer/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Simple Sniffer Example diff --git a/examples/openthread/ot_br/README.md b/examples/openthread/ot_br/README.md index 83d24ee7ebb..afc66c8e71e 100644 --- a/examples/openthread/ot_br/README.md +++ b/examples/openthread/ot_br/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # OpenThread Border Router Example diff --git a/examples/peripherals/adc/dma_read/README.md b/examples/peripherals/adc/dma_read/README.md index f446b232234..f5851bcdf7b 100644 --- a/examples/peripherals/adc/dma_read/README.md +++ b/examples/peripherals/adc/dma_read/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # ADC DMA Example diff --git a/examples/peripherals/adc/single_read/single_read/README.md b/examples/peripherals/adc/single_read/single_read/README.md index 015aecbfe30..388ee4430eb 100644 --- a/examples/peripherals/adc/single_read/single_read/README.md +++ b/examples/peripherals/adc/single_read/single_read/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # ADC Single Read Example diff --git a/examples/peripherals/gpio/generic_gpio/README.md b/examples/peripherals/gpio/generic_gpio/README.md index 51b09590a4b..c901ce5a74c 100644 --- a/examples/peripherals/gpio/generic_gpio/README.md +++ b/examples/peripherals/gpio/generic_gpio/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Example: GPIO (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/peripherals/i2c/i2c_self_test/README.md b/examples/peripherals/i2c/i2c_self_test/README.md index 4be69fb5661..192a9de5044 100644 --- a/examples/peripherals/i2c/i2c_self_test/README.md +++ b/examples/peripherals/i2c/i2c_self_test/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # I2C Self-Test Example diff --git a/examples/peripherals/i2c/i2c_simple/README.md b/examples/peripherals/i2c/i2c_simple/README.md index 5dca645efb9..294edc2eada 100644 --- a/examples/peripherals/i2c/i2c_simple/README.md +++ b/examples/peripherals/i2c/i2c_simple/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # I2C Simple Example diff --git a/examples/peripherals/i2c/i2c_tools/README.md b/examples/peripherals/i2c/i2c_tools/README.md index 945edf700c2..17b8adc1565 100644 --- a/examples/peripherals/i2c/i2c_tools/README.md +++ b/examples/peripherals/i2c/i2c_tools/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # I2C Tools Example diff --git a/examples/peripherals/i2s/i2s_basic/README.md b/examples/peripherals/i2s/i2s_basic/README.md index 04955ab9e4d..598482cabaf 100644 --- a/examples/peripherals/i2s/i2s_basic/README.md +++ b/examples/peripherals/i2s/i2s_basic/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # I2S Example diff --git a/examples/peripherals/i2s/i2s_es8311/README.md b/examples/peripherals/i2s/i2s_es8311/README.md index c0dfffed99d..16c89ee4a92 100644 --- a/examples/peripherals/i2s/i2s_es8311/README.md +++ b/examples/peripherals/i2s/i2s_es8311/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # I2S ES8311 Example diff --git a/examples/peripherals/lcd/gc9a01/README.md b/examples/peripherals/lcd/gc9a01/README.md index 2dc48c39312..65e5836bfdb 100644 --- a/examples/peripherals/lcd/gc9a01/README.md +++ b/examples/peripherals/lcd/gc9a01/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # GC9A01 porting example diff --git a/examples/peripherals/lcd/i2c_oled/README.md b/examples/peripherals/lcd/i2c_oled/README.md index ac62ac6fb01..5f6d27bb9f4 100644 --- a/examples/peripherals/lcd/i2c_oled/README.md +++ b/examples/peripherals/lcd/i2c_oled/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # I2C OLED example diff --git a/examples/peripherals/lcd/tjpgd/README.md b/examples/peripherals/lcd/tjpgd/README.md index 48ded1462d4..df6ab475d5e 100644 --- a/examples/peripherals/lcd/tjpgd/README.md +++ b/examples/peripherals/lcd/tjpgd/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | ## LCD tjpgd example diff --git a/examples/peripherals/ledc/ledc_basic/README.md b/examples/peripherals/ledc/ledc_basic/README.md index 30ebb17443d..2ecdbf046d4 100644 --- a/examples/peripherals/ledc/ledc_basic/README.md +++ b/examples/peripherals/ledc/ledc_basic/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # _LEDC Basic Example_ (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/peripherals/ledc/ledc_fade/README.md b/examples/peripherals/ledc/ledc_fade/README.md index c6ae62f2492..21ad4de73e0 100644 --- a/examples/peripherals/ledc/ledc_fade/README.md +++ b/examples/peripherals/ledc/ledc_fade/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # _LEDC Fade Example_ (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/peripherals/rmt/dshot_esc/README.md b/examples/peripherals/rmt/dshot_esc/README.md index c79399f5d71..468f962e14a 100644 --- a/examples/peripherals/rmt/dshot_esc/README.md +++ b/examples/peripherals/rmt/dshot_esc/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # RMT Infinite Loop Transmit Example -- Dshot ESC (Electronic Speed Controller) diff --git a/examples/peripherals/rmt/ir_nec_transceiver/README.md b/examples/peripherals/rmt/ir_nec_transceiver/README.md index e71daa2c8b9..e9ea4aa76bc 100644 --- a/examples/peripherals/rmt/ir_nec_transceiver/README.md +++ b/examples/peripherals/rmt/ir_nec_transceiver/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # IR NEC Encoding and Decoding Example diff --git a/examples/peripherals/rmt/led_strip/README.md b/examples/peripherals/rmt/led_strip/README.md index eb4044a9996..4d69337a460 100644 --- a/examples/peripherals/rmt/led_strip/README.md +++ b/examples/peripherals/rmt/led_strip/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # RMT Transmit Example -- LED Strip diff --git a/examples/peripherals/rmt/musical_buzzer/README.md b/examples/peripherals/rmt/musical_buzzer/README.md index 82693d6aa8d..0d6d0ad43e9 100644 --- a/examples/peripherals/rmt/musical_buzzer/README.md +++ b/examples/peripherals/rmt/musical_buzzer/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32-S2 | ESP32-C3 | ESP32-S3 | +| Supported Targets | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | -------- | -------- | -------- | # RMT Transmit Loop Count Example -- Musical Buzzer diff --git a/examples/peripherals/sigmadelta/README.md b/examples/peripherals/sigmadelta/README.md index 9734b3960bb..49eb49fd5ea 100644 --- a/examples/peripherals/sigmadelta/README.md +++ b/examples/peripherals/sigmadelta/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Sigma Delta Modulation Example diff --git a/examples/peripherals/spi_master/hd_eeprom/README.md b/examples/peripherals/spi_master/hd_eeprom/README.md index 8b5bbd367ad..f47af1a8142 100644 --- a/examples/peripherals/spi_master/hd_eeprom/README.md +++ b/examples/peripherals/spi_master/hd_eeprom/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | ## SPI master half duplex EEPROM example diff --git a/examples/peripherals/spi_master/lcd/README.md b/examples/peripherals/spi_master/lcd/README.md index d19418d5343..00a7f163fe3 100644 --- a/examples/peripherals/spi_master/lcd/README.md +++ b/examples/peripherals/spi_master/lcd/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | | ----------------- | ----- | -------- | -------- | # SPI Host Driver Example diff --git a/examples/peripherals/spi_slave/README.md b/examples/peripherals/spi_slave/README.md index d7547fe84f7..de6bfe5736c 100644 --- a/examples/peripherals/spi_slave/README.md +++ b/examples/peripherals/spi_slave/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | ## SPI slave example diff --git a/examples/peripherals/spi_slave_hd/append_mode/master/README.md b/examples/peripherals/spi_slave_hd/append_mode/master/README.md index 95779d8ed88..ec8932fec76 100644 --- a/examples/peripherals/spi_slave_hd/append_mode/master/README.md +++ b/examples/peripherals/spi_slave_hd/append_mode/master/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | See README.md in the parent directory diff --git a/examples/peripherals/spi_slave_hd/segment_mode/seg_master/README.md b/examples/peripherals/spi_slave_hd/segment_mode/seg_master/README.md index 95779d8ed88..ec8932fec76 100644 --- a/examples/peripherals/spi_slave_hd/segment_mode/seg_master/README.md +++ b/examples/peripherals/spi_slave_hd/segment_mode/seg_master/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | See README.md in the parent directory diff --git a/examples/peripherals/spi_slave_hd/segment_mode/seg_slave/README.md b/examples/peripherals/spi_slave_hd/segment_mode/seg_slave/README.md index ef937345bad..bff9e386d1d 100644 --- a/examples/peripherals/spi_slave_hd/segment_mode/seg_slave/README.md +++ b/examples/peripherals/spi_slave_hd/segment_mode/seg_slave/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | -------- | -------- | -------- | -------- | diff --git a/examples/peripherals/temp_sensor/README.md b/examples/peripherals/temp_sensor/README.md index c0b03f9c9fe..47678c61c88 100644 --- a/examples/peripherals/temp_sensor/README.md +++ b/examples/peripherals/temp_sensor/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32-S2 | ESP32-C3 | ESP32-S3 | ESP32-C2 | +| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | -------- | -------- | -------- | -------- | # Temperature Sensor Example diff --git a/examples/peripherals/timer_group/gptimer/README.md b/examples/peripherals/timer_group/gptimer/README.md index 2b795224733..ab49ceb79ce 100644 --- a/examples/peripherals/timer_group/gptimer/README.md +++ b/examples/peripherals/timer_group/gptimer/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # Example: General Purpose Timer diff --git a/examples/peripherals/timer_group/legacy_driver/README.md b/examples/peripherals/timer_group/legacy_driver/README.md index 5cd057725a1..0ec4f5852df 100644 --- a/examples/peripherals/timer_group/legacy_driver/README.md +++ b/examples/peripherals/timer_group/legacy_driver/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # Example: General Purpose Timer diff --git a/examples/peripherals/twai/twai_alert_and_recovery/README.md b/examples/peripherals/twai/twai_alert_and_recovery/README.md index a5d7bc673df..9ba4b9d2c96 100644 --- a/examples/peripherals/twai/twai_alert_and_recovery/README.md +++ b/examples/peripherals/twai/twai_alert_and_recovery/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # TWAI Alert and Recovery Example diff --git a/examples/peripherals/twai/twai_network/README.md b/examples/peripherals/twai/twai_network/README.md index 17698069d4f..4640390dcc1 100644 --- a/examples/peripherals/twai/twai_network/README.md +++ b/examples/peripherals/twai/twai_network/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # TWAI Network Example diff --git a/examples/peripherals/twai/twai_self_test/README.md b/examples/peripherals/twai/twai_self_test/README.md index 44caff52cac..bab06eec9a0 100644 --- a/examples/peripherals/twai/twai_self_test/README.md +++ b/examples/peripherals/twai/twai_self_test/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # TWAI Self Test Example diff --git a/examples/peripherals/uart/nmea0183_parser/README.md b/examples/peripherals/uart/nmea0183_parser/README.md index bf3a3c5e808..b28fc6e3642 100644 --- a/examples/peripherals/uart/nmea0183_parser/README.md +++ b/examples/peripherals/uart/nmea0183_parser/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # NMEA Parser Example (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/peripherals/uart/uart_async_rxtxtasks/README.md b/examples/peripherals/uart/uart_async_rxtxtasks/README.md index d0345eae387..36aca7d2840 100644 --- a/examples/peripherals/uart/uart_async_rxtxtasks/README.md +++ b/examples/peripherals/uart/uart_async_rxtxtasks/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # UART Asynchronous Example with Separate Receive and Transfer Tasks (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/peripherals/uart/uart_echo/README.md b/examples/peripherals/uart/uart_echo/README.md index 8e6eaa199f4..80e05bbbff1 100644 --- a/examples/peripherals/uart/uart_echo/README.md +++ b/examples/peripherals/uart/uart_echo/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # UART Echo Example (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/peripherals/uart/uart_echo_rs485/README.md b/examples/peripherals/uart/uart_echo_rs485/README.md index 6ab7b946806..887ca2ede42 100644 --- a/examples/peripherals/uart/uart_echo_rs485/README.md +++ b/examples/peripherals/uart/uart_echo_rs485/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | ESP32-H2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | # UART RS485 Echo Example diff --git a/examples/peripherals/uart/uart_events/README.md b/examples/peripherals/uart/uart_events/README.md index 42c0046ed4e..5d121ff648f 100644 --- a/examples/peripherals/uart/uart_events/README.md +++ b/examples/peripherals/uart/uart_events/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # UART Events Example (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/peripherals/uart/uart_repl/README.md b/examples/peripherals/uart/uart_repl/README.md index 17822a0ff6c..d63635913bb 100644 --- a/examples/peripherals/uart/uart_repl/README.md +++ b/examples/peripherals/uart/uart_repl/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # UART REPL Example (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/peripherals/uart/uart_select/README.md b/examples/peripherals/uart/uart_select/README.md index 748d61a5df2..e3301fe043b 100644 --- a/examples/peripherals/uart/uart_select/README.md +++ b/examples/peripherals/uart/uart_select/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # UART Select Example (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/protocols/cbor/README.md b/examples/protocols/cbor/README.md index 3b6f81a1a25..6873996328f 100644 --- a/examples/protocols/cbor/README.md +++ b/examples/protocols/cbor/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # CBOR Example (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/protocols/coap_client/README.md b/examples/protocols/coap_client/README.md index 6df0f788d82..ab8c9eadc40 100644 --- a/examples/protocols/coap_client/README.md +++ b/examples/protocols/coap_client/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | diff --git a/examples/protocols/coap_server/README.md b/examples/protocols/coap_server/README.md index d12ef08e910..2e82efe0264 100644 --- a/examples/protocols/coap_server/README.md +++ b/examples/protocols/coap_server/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | diff --git a/examples/protocols/esp_http_client/README.md b/examples/protocols/esp_http_client/README.md index 90584a16f2a..ecf41d85983 100644 --- a/examples/protocols/esp_http_client/README.md +++ b/examples/protocols/esp_http_client/README.md @@ -1,5 +1,5 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | -| ----------------- | ----- | -------- | -------- | -------- | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | # ESP HTTP Client Example diff --git a/examples/protocols/esp_local_ctrl/README.md b/examples/protocols/esp_local_ctrl/README.md index d0ca7d48a01..178b377f0c7 100644 --- a/examples/protocols/esp_local_ctrl/README.md +++ b/examples/protocols/esp_local_ctrl/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # ESP Local Control using HTTPS server This example creates a `esp_local_ctrl` service over HTTPS transport, for securely controlling the device over local network. In this case the device name is resolved through `mDNS`, which in this example is `my_esp_ctrl_device.local`. diff --git a/examples/protocols/http2_request/README.md b/examples/protocols/http2_request/README.md index bc0f7b11aac..5eb7e86ed19 100644 --- a/examples/protocols/http2_request/README.md +++ b/examples/protocols/http2_request/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # HTTP/2 Request Example diff --git a/examples/protocols/http_request/README.md b/examples/protocols/http_request/README.md index 7448e2521d3..f09180b25b1 100644 --- a/examples/protocols/http_request/README.md +++ b/examples/protocols/http_request/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # HTTP Request Example diff --git a/examples/protocols/http_server/advanced_tests/README.md b/examples/protocols/http_server/advanced_tests/README.md index ec555d5d1b9..a38fb4fb630 100644 --- a/examples/protocols/http_server/advanced_tests/README.md +++ b/examples/protocols/http_server/advanced_tests/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # HTTP server advanced tests diff --git a/examples/protocols/http_server/captive_portal/README.md b/examples/protocols/http_server/captive_portal/README.md index a7a1536f4a8..644b1b4b058 100644 --- a/examples/protocols/http_server/captive_portal/README.md +++ b/examples/protocols/http_server/captive_portal/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Captive Portal Example diff --git a/examples/protocols/http_server/file_serving/README.md b/examples/protocols/http_server/file_serving/README.md index d38fdea1cc5..8d99cd5ae87 100644 --- a/examples/protocols/http_server/file_serving/README.md +++ b/examples/protocols/http_server/file_serving/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Simple HTTP File Server Example diff --git a/examples/protocols/http_server/persistent_sockets/README.md b/examples/protocols/http_server/persistent_sockets/README.md index c4b0853b303..3305f85be45 100644 --- a/examples/protocols/http_server/persistent_sockets/README.md +++ b/examples/protocols/http_server/persistent_sockets/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # HTTPD Server Persistent Sockets Example diff --git a/examples/protocols/http_server/restful_server/README.md b/examples/protocols/http_server/restful_server/README.md index 95d852adcfc..961171a5df7 100644 --- a/examples/protocols/http_server/restful_server/README.md +++ b/examples/protocols/http_server/restful_server/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # HTTP Restful API Server Example diff --git a/examples/protocols/http_server/simple/README.md b/examples/protocols/http_server/simple/README.md index c64d0336be5..ce91f6c5244 100644 --- a/examples/protocols/http_server/simple/README.md +++ b/examples/protocols/http_server/simple/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Simple HTTPD Server Example diff --git a/examples/protocols/http_server/ws_echo_server/README.md b/examples/protocols/http_server/ws_echo_server/README.md index 1efd44cf2af..7b18fd9ffa9 100644 --- a/examples/protocols/http_server/ws_echo_server/README.md +++ b/examples/protocols/http_server/ws_echo_server/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Websocket echo server diff --git a/examples/protocols/https_mbedtls/README.md b/examples/protocols/https_mbedtls/README.md index 52b636b3266..116475c723a 100644 --- a/examples/protocols/https_mbedtls/README.md +++ b/examples/protocols/https_mbedtls/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # HTTP server with TLS support using mbedTLS (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/protocols/https_request/README.md b/examples/protocols/https_request/README.md index 05fed4de5a3..35e0079e785 100644 --- a/examples/protocols/https_request/README.md +++ b/examples/protocols/https_request/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # HTTPS Request Example Uses APIs from `esp-tls` component to make a very simple HTTPS request over a secure connection, including verifying the server TLS certificate. diff --git a/examples/protocols/https_server/simple/README.md b/examples/protocols/https_server/simple/README.md index fce84c0aacf..23d75fb3cf8 100644 --- a/examples/protocols/https_server/simple/README.md +++ b/examples/protocols/https_server/simple/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # HTTP server with SSL support using OpenSSL This example creates a SSL server that returns a simple HTML page when you visit its root URL. diff --git a/examples/protocols/https_server/wss_server/README.md b/examples/protocols/https_server/wss_server/README.md index 781d8520e7f..711ca632492 100644 --- a/examples/protocols/https_server/wss_server/README.md +++ b/examples/protocols/https_server/wss_server/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # HTTP Websocket server with SSL support This example creates a SSL server and employs a simple Websocket request handler. It demonstrates handling multiple clients from the server including: diff --git a/examples/protocols/https_x509_bundle/README.md b/examples/protocols/https_x509_bundle/README.md index a6fb6b819cd..4f034e69865 100644 --- a/examples/protocols/https_x509_bundle/README.md +++ b/examples/protocols/https_x509_bundle/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # HTTPS x509 Bundle Example This example shows how to use the ESP certificate bundle utility to embed a bundle of x509 certificates and use them to diff --git a/examples/protocols/icmp_echo/README.md b/examples/protocols/icmp_echo/README.md index 1469bbf72bb..3cd3096cd0a 100644 --- a/examples/protocols/icmp_echo/README.md +++ b/examples/protocols/icmp_echo/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # ICMP Echo-Reply (Ping) example diff --git a/examples/protocols/l2tap/README.md b/examples/protocols/l2tap/README.md index 7c2ada42a1f..29eed49db3c 100644 --- a/examples/protocols/l2tap/README.md +++ b/examples/protocols/l2tap/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # ESP-NETIF L2 TAP Interface Example diff --git a/examples/protocols/modbus/serial/mb_master/README.md b/examples/protocols/modbus/serial/mb_master/README.md index 107d72aa17b..cb3903cf047 100644 --- a/examples/protocols/modbus/serial/mb_master/README.md +++ b/examples/protocols/modbus/serial/mb_master/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Modbus Master Example diff --git a/examples/protocols/modbus/serial/mb_slave/README.md b/examples/protocols/modbus/serial/mb_slave/README.md index be327faa3a0..f7f52907b7c 100644 --- a/examples/protocols/modbus/serial/mb_slave/README.md +++ b/examples/protocols/modbus/serial/mb_slave/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Modbus Slave Example diff --git a/examples/protocols/modbus/tcp/mb_tcp_master/README.md b/examples/protocols/modbus/tcp/mb_tcp_master/README.md index 8673580ead3..eb348d4e251 100644 --- a/examples/protocols/modbus/tcp/mb_tcp_master/README.md +++ b/examples/protocols/modbus/tcp/mb_tcp_master/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Modbus TCP Master Example diff --git a/examples/protocols/modbus/tcp/mb_tcp_slave/README.md b/examples/protocols/modbus/tcp/mb_tcp_slave/README.md index a69b916e7c9..b0fe931c763 100644 --- a/examples/protocols/modbus/tcp/mb_tcp_slave/README.md +++ b/examples/protocols/modbus/tcp/mb_tcp_slave/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Modbus Slave Example diff --git a/examples/protocols/mqtt/ssl/README.md b/examples/protocols/mqtt/ssl/README.md index a87f2084c92..eb53cedf922 100644 --- a/examples/protocols/mqtt/ssl/README.md +++ b/examples/protocols/mqtt/ssl/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # ESP-MQTT SSL Sample application diff --git a/examples/protocols/mqtt/ssl_ds/README.md b/examples/protocols/mqtt/ssl_ds/README.md index 31647bc7171..065bcfca2b6 100644 --- a/examples/protocols/mqtt/ssl_ds/README.md +++ b/examples/protocols/mqtt/ssl_ds/README.md @@ -1,4 +1,6 @@ -| Supported Targets | ESP32-S2 | ESP32-C3 | ESP32-S3 | +| Supported Targets | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | -------- | -------- | -------- | + # ESP-MQTT SSL Mutual Authentication with Digital Signature (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/protocols/mqtt/ssl_mutual_auth/README.md b/examples/protocols/mqtt/ssl_mutual_auth/README.md index be0c9b6d1bd..9274aa457c5 100644 --- a/examples/protocols/mqtt/ssl_mutual_auth/README.md +++ b/examples/protocols/mqtt/ssl_mutual_auth/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # ESP-MQTT SSL Sample application (mutual authentication) diff --git a/examples/protocols/mqtt/ssl_psk/README.md b/examples/protocols/mqtt/ssl_psk/README.md index cec38fe1fb8..3029ccdd7fd 100644 --- a/examples/protocols/mqtt/ssl_psk/README.md +++ b/examples/protocols/mqtt/ssl_psk/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # ESP-MQTT SSL example with PSK verification diff --git a/examples/protocols/mqtt/tcp/README.md b/examples/protocols/mqtt/tcp/README.md index be6d70a577f..05890919fd6 100644 --- a/examples/protocols/mqtt/tcp/README.md +++ b/examples/protocols/mqtt/tcp/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # ESP-MQTT sample application diff --git a/examples/protocols/mqtt/ws/README.md b/examples/protocols/mqtt/ws/README.md index c2620b377e0..a5f36c9f7b7 100644 --- a/examples/protocols/mqtt/ws/README.md +++ b/examples/protocols/mqtt/ws/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # ESP-MQTT MQTT over Websocket diff --git a/examples/protocols/mqtt/wss/README.md b/examples/protocols/mqtt/wss/README.md index f836920aaaf..ca2e98e3cdb 100644 --- a/examples/protocols/mqtt/wss/README.md +++ b/examples/protocols/mqtt/wss/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # ESP-MQTT MQTT over WSS Sample application diff --git a/examples/protocols/slip/slip_udp/README.md b/examples/protocols/slip/slip_udp/README.md index 67d21736fa3..e83944da846 100644 --- a/examples/protocols/slip/slip_udp/README.md +++ b/examples/protocols/slip/slip_udp/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # SLIP device client diff --git a/examples/protocols/smtp_client/README.md b/examples/protocols/smtp_client/README.md index c4db206a433..49150f41bbc 100644 --- a/examples/protocols/smtp_client/README.md +++ b/examples/protocols/smtp_client/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # SMTP Client Example diff --git a/examples/protocols/sockets/non_blocking/README.md b/examples/protocols/sockets/non_blocking/README.md index 06d14c47a74..4732336be12 100644 --- a/examples/protocols/sockets/non_blocking/README.md +++ b/examples/protocols/sockets/non_blocking/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/examples/protocols/sockets/tcp_client/README.md b/examples/protocols/sockets/tcp_client/README.md index d3a9c3340f8..0ac216d4a1c 100644 --- a/examples/protocols/sockets/tcp_client/README.md +++ b/examples/protocols/sockets/tcp_client/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/examples/protocols/sockets/tcp_client_multi_net/README.md b/examples/protocols/sockets/tcp_client_multi_net/README.md index 1a9343bb7f3..5e3ec65547a 100644 --- a/examples/protocols/sockets/tcp_client_multi_net/README.md +++ b/examples/protocols/sockets/tcp_client_multi_net/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Multiple Ethernet Example diff --git a/examples/protocols/sockets/tcp_server/README.md b/examples/protocols/sockets/tcp_server/README.md index 7b0e71da6bf..afeefaf1409 100644 --- a/examples/protocols/sockets/tcp_server/README.md +++ b/examples/protocols/sockets/tcp_server/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/examples/protocols/sockets/udp_client/README.md b/examples/protocols/sockets/udp_client/README.md index c1db97b3107..90f0a110d64 100644 --- a/examples/protocols/sockets/udp_client/README.md +++ b/examples/protocols/sockets/udp_client/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | diff --git a/examples/protocols/sockets/udp_multicast/README.md b/examples/protocols/sockets/udp_multicast/README.md index 2d65d7f5e96..81565589b3a 100644 --- a/examples/protocols/sockets/udp_multicast/README.md +++ b/examples/protocols/sockets/udp_multicast/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # UDP Multicast Example diff --git a/examples/protocols/sockets/udp_server/README.md b/examples/protocols/sockets/udp_server/README.md index b461d8c76a3..03c96b884bc 100644 --- a/examples/protocols/sockets/udp_server/README.md +++ b/examples/protocols/sockets/udp_server/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/examples/protocols/static_ip/README.md b/examples/protocols/static_ip/README.md index 8c95367435e..a48624286b5 100644 --- a/examples/protocols/static_ip/README.md +++ b/examples/protocols/static_ip/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # WiFi station example diff --git a/examples/provisioning/wifi_prov_mgr/README.md b/examples/provisioning/wifi_prov_mgr/README.md index 34d6ba1a70b..21abba602ad 100644 --- a/examples/provisioning/wifi_prov_mgr/README.md +++ b/examples/provisioning/wifi_prov_mgr/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Wi-Fi Provisioning Manager Example (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/security/flash_encryption/README.md b/examples/security/flash_encryption/README.md index 587c1233e3a..22daca8157f 100644 --- a/examples/security/flash_encryption/README.md +++ b/examples/security/flash_encryption/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Flash Encryption diff --git a/examples/storage/custom_flash_driver/README.md b/examples/storage/custom_flash_driver/README.md index 14093217560..0a63b34cbe5 100644 --- a/examples/storage/custom_flash_driver/README.md +++ b/examples/storage/custom_flash_driver/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Custom Flash Driver Example diff --git a/examples/storage/ext_flash_fatfs/README.md b/examples/storage/ext_flash_fatfs/README.md index d196b679ae9..6db77cb4208 100644 --- a/examples/storage/ext_flash_fatfs/README.md +++ b/examples/storage/ext_flash_fatfs/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # FAT FS on External Flash example diff --git a/examples/storage/fatfsgen/README.md b/examples/storage/fatfsgen/README.md index d9bcb711a65..2fa31086287 100644 --- a/examples/storage/fatfsgen/README.md +++ b/examples/storage/fatfsgen/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # FATFS partition generation example diff --git a/examples/storage/nvs_rw_blob/README.md b/examples/storage/nvs_rw_blob/README.md index 0c81a612474..a52e9807939 100644 --- a/examples/storage/nvs_rw_blob/README.md +++ b/examples/storage/nvs_rw_blob/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Non-Volatile Storage (NVS) Read and Write Example diff --git a/examples/storage/nvs_rw_value/README.md b/examples/storage/nvs_rw_value/README.md index 5e606a327b5..a52eb2ef198 100644 --- a/examples/storage/nvs_rw_value/README.md +++ b/examples/storage/nvs_rw_value/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Non-Volatile Storage (NVS) Read and Write Example diff --git a/examples/storage/nvs_rw_value_cxx/README.md b/examples/storage/nvs_rw_value_cxx/README.md index b3573e97a38..14c29c096d8 100644 --- a/examples/storage/nvs_rw_value_cxx/README.md +++ b/examples/storage/nvs_rw_value_cxx/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Non-Volatile Storage (NVS) C++ Read and Write Example diff --git a/examples/storage/partition_api/partition_find/README.md b/examples/storage/partition_api/partition_find/README.md index 8efdc97552c..9c18ae14095 100644 --- a/examples/storage/partition_api/partition_find/README.md +++ b/examples/storage/partition_api/partition_find/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Finding Partitions Example diff --git a/examples/storage/partition_api/partition_mmap/README.md b/examples/storage/partition_api/partition_mmap/README.md index e7556b409e8..29fda35ec10 100644 --- a/examples/storage/partition_api/partition_mmap/README.md +++ b/examples/storage/partition_api/partition_mmap/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Partition Memory Map Example diff --git a/examples/storage/partition_api/partition_ops/README.md b/examples/storage/partition_api/partition_ops/README.md index e5763942d3c..ae61c33499e 100644 --- a/examples/storage/partition_api/partition_ops/README.md +++ b/examples/storage/partition_api/partition_ops/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Partition Read, Write, Erase Example diff --git a/examples/storage/parttool/README.md b/examples/storage/parttool/README.md index 157639039e3..44b3600bdbc 100644 --- a/examples/storage/parttool/README.md +++ b/examples/storage/parttool/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Partitions Tool Example diff --git a/examples/storage/sd_card/sdspi/README.md b/examples/storage/sd_card/sdspi/README.md index 71b3b30a817..3246ea9d067 100644 --- a/examples/storage/sd_card/sdspi/README.md +++ b/examples/storage/sd_card/sdspi/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # SD Card example (SDSPI) diff --git a/examples/storage/semihost_vfs/README.md b/examples/storage/semihost_vfs/README.md index cfbaf19c514..843044e0617 100644 --- a/examples/storage/semihost_vfs/README.md +++ b/examples/storage/semihost_vfs/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Semihosting VFS driver example diff --git a/examples/storage/spiffs/README.md b/examples/storage/spiffs/README.md index 00655f0f5a7..3225ccdd2d2 100644 --- a/examples/storage/spiffs/README.md +++ b/examples/storage/spiffs/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # SPIFFS example diff --git a/examples/storage/spiffsgen/README.md b/examples/storage/spiffsgen/README.md index 08f5b24d08a..792d732ea7c 100644 --- a/examples/storage/spiffsgen/README.md +++ b/examples/storage/spiffsgen/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # SPIFFS Image Generation on Build Example diff --git a/examples/storage/wear_levelling/README.md b/examples/storage/wear_levelling/README.md index aeb4a6b1e24..7686f336f91 100644 --- a/examples/storage/wear_levelling/README.md +++ b/examples/storage/wear_levelling/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Wear levelling example diff --git a/examples/system/base_mac_address/README.md b/examples/system/base_mac_address/README.md index 1982d2d070b..81ead953300 100644 --- a/examples/system/base_mac_address/README.md +++ b/examples/system/base_mac_address/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C2 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # Base MAC Address diff --git a/examples/system/console/advanced/README.md b/examples/system/console/advanced/README.md index a88bc9bef4d..fd214e444ae 100644 --- a/examples/system/console/advanced/README.md +++ b/examples/system/console/advanced/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Console Example diff --git a/examples/system/console/basic/README.md b/examples/system/console/basic/README.md index 2bcef7e700e..020c2625521 100644 --- a/examples/system/console/basic/README.md +++ b/examples/system/console/basic/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Basic Console Example (`esp_console_repl`) diff --git a/examples/system/deep_sleep/README.md b/examples/system/deep_sleep/README.md index 04109c63489..5b82a00d787 100644 --- a/examples/system/deep_sleep/README.md +++ b/examples/system/deep_sleep/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Deep Sleep Example diff --git a/examples/system/efuse/README.md b/examples/system/efuse/README.md index c37d1d1ff2a..14e9e36e3d9 100644 --- a/examples/system/efuse/README.md +++ b/examples/system/efuse/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # eFuse Example diff --git a/examples/system/esp_event/default_event_loop/README.md b/examples/system/esp_event/default_event_loop/README.md index 27f43e5bd08..7891375321e 100644 --- a/examples/system/esp_event/default_event_loop/README.md +++ b/examples/system/esp_event/default_event_loop/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Default Event Loop Example diff --git a/examples/system/esp_event/user_event_loops/README.md b/examples/system/esp_event/user_event_loops/README.md index 9580b779e27..d75e5ed51b1 100644 --- a/examples/system/esp_event/user_event_loops/README.md +++ b/examples/system/esp_event/user_event_loops/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C2 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # User Event Loops Example diff --git a/examples/system/esp_timer/README.md b/examples/system/esp_timer/README.md index c514c546d0b..6a6a075bf6f 100644 --- a/examples/system/esp_timer/README.md +++ b/examples/system/esp_timer/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # High Resolution Timer Example (`esp_timer`) (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/system/eventfd/README.md b/examples/system/eventfd/README.md index 1b6071cabe2..f650299e429 100644 --- a/examples/system/eventfd/README.md +++ b/examples/system/eventfd/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C2 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # eventfd example diff --git a/examples/system/freertos/real_time_stats/README.md b/examples/system/freertos/real_time_stats/README.md index f07d6eeedf9..f9567e4adb7 100644 --- a/examples/system/freertos/real_time_stats/README.md +++ b/examples/system/freertos/real_time_stats/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C2 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # FreeRTOS Real Time Stats Example diff --git a/examples/system/gdbstub/README.md b/examples/system/gdbstub/README.md index ef06c8e71c2..504c5260271 100644 --- a/examples/system/gdbstub/README.md +++ b/examples/system/gdbstub/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # GDBstub example diff --git a/examples/system/heap_task_tracking/README.md b/examples/system/heap_task_tracking/README.md index 7afeff1488e..63eeceacff3 100644 --- a/examples/system/heap_task_tracking/README.md +++ b/examples/system/heap_task_tracking/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Heap Task Tracking Example diff --git a/examples/system/light_sleep/README.md b/examples/system/light_sleep/README.md index 2d1cbd9d9d0..1a24c4ebceb 100644 --- a/examples/system/light_sleep/README.md +++ b/examples/system/light_sleep/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Light Sleep Example diff --git a/examples/system/ota/advanced_https_ota/README.md b/examples/system/ota/advanced_https_ota/README.md index 749016e895b..3d932372337 100644 --- a/examples/system/ota/advanced_https_ota/README.md +++ b/examples/system/ota/advanced_https_ota/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Advanced HTTPS OTA example This example is based on `esp_https_ota` component's APIs. diff --git a/examples/system/ota/native_ota_example/README.md b/examples/system/ota/native_ota_example/README.md index be57ce55ec9..6b39fa84a13 100644 --- a/examples/system/ota/native_ota_example/README.md +++ b/examples/system/ota/native_ota_example/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Native OTA example This example is based on `app_update` component's APIs. diff --git a/examples/system/ota/otatool/README.md b/examples/system/ota/otatool/README.md index 461c6f4ae1b..6b6a047e10f 100644 --- a/examples/system/ota/otatool/README.md +++ b/examples/system/ota/otatool/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # OTA Tool Example diff --git a/examples/system/ota/pre_encrypted_ota/README.md b/examples/system/ota/pre_encrypted_ota/README.md index 66bd2c848be..1953bd4df0a 100644 --- a/examples/system/ota/pre_encrypted_ota/README.md +++ b/examples/system/ota/pre_encrypted_ota/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Encrypted Binary OTA This example demonstrates OTA updates with pre-encrypted binary using `esp_encrypted_img` component's APIs and tool. diff --git a/examples/system/ota/simple_ota_example/README.md b/examples/system/ota/simple_ota_example/README.md index 31a340974d0..1f48e18cc08 100644 --- a/examples/system/ota/simple_ota_example/README.md +++ b/examples/system/ota/simple_ota_example/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Simple OTA example This example is based on `esp_https_ota` component's APIs. diff --git a/examples/system/pthread/README.md b/examples/system/pthread/README.md index c60b9120b16..32814892494 100644 --- a/examples/system/pthread/README.md +++ b/examples/system/pthread/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C2 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # Pthread Example diff --git a/examples/system/select/README.md b/examples/system/select/README.md index 952c571c63d..d78f91a5c21 100644 --- a/examples/system/select/README.md +++ b/examples/system/select/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Synchronous I/O multiplexing example diff --git a/examples/system/startup_time/README.md b/examples/system/startup_time/README.md index 3a64a419122..cdbbd5b083c 100644 --- a/examples/system/startup_time/README.md +++ b/examples/system/startup_time/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Startup Time Example (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/system/sysview_tracing/README.md b/examples/system/sysview_tracing/README.md index 93ab9efa4fc..fff1141ebcd 100644 --- a/examples/system/sysview_tracing/README.md +++ b/examples/system/sysview_tracing/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | | ----------------- | ----- | -------- | -------- | # Example: Application Level Tracing - SystemView Tracing (sysview_tracing) diff --git a/examples/system/sysview_tracing_heap_log/README.md b/examples/system/sysview_tracing_heap_log/README.md index 9514af9a13b..63b8cb17c5d 100644 --- a/examples/system/sysview_tracing_heap_log/README.md +++ b/examples/system/sysview_tracing_heap_log/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | | ----------------- | ----- | -------- | -------- | # SystemView Heap and Log Tracing Example diff --git a/examples/system/task_watchdog/README.md b/examples/system/task_watchdog/README.md index 4340a9ea296..7c4a9d631e7 100644 --- a/examples/system/task_watchdog/README.md +++ b/examples/system/task_watchdog/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Task Watchdog Example The following example demonstrates how to use the following features of the task watchdog timer (TWDT): diff --git a/examples/system/unit_test/README.md b/examples/system/unit_test/README.md index fbba3cf4261..d9ae7ee9714 100644 --- a/examples/system/unit_test/README.md +++ b/examples/system/unit_test/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Unit Testing (See the README.md file in the upper level 'examples' directory for more information about examples.) diff --git a/examples/wifi/espnow/README.md b/examples/wifi/espnow/README.md index 765cd5d76c8..09c6b52978f 100644 --- a/examples/wifi/espnow/README.md +++ b/examples/wifi/espnow/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # ESPNOW Example diff --git a/examples/wifi/fast_scan/README.md b/examples/wifi/fast_scan/README.md index 40a64d6579f..98b19992e3d 100644 --- a/examples/wifi/fast_scan/README.md +++ b/examples/wifi/fast_scan/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Wi-Fi Fast Scan Example diff --git a/examples/wifi/ftm/README.md b/examples/wifi/ftm/README.md index 557ef68c742..a39ae9a329b 100644 --- a/examples/wifi/ftm/README.md +++ b/examples/wifi/ftm/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32-S2 | ESP32-C3 | ESP32-S3 | +| Supported Targets | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | -------- | -------- | -------- | # FTM Example diff --git a/examples/wifi/getting_started/softAP/README.md b/examples/wifi/getting_started/softAP/README.md index f356d2dc53d..5d8fdda3b44 100644 --- a/examples/wifi/getting_started/softAP/README.md +++ b/examples/wifi/getting_started/softAP/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # Wi-Fi SoftAP Example diff --git a/examples/wifi/getting_started/station/README.md b/examples/wifi/getting_started/station/README.md index 4a1989076b5..93a26aadad2 100644 --- a/examples/wifi/getting_started/station/README.md +++ b/examples/wifi/getting_started/station/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # Wi-Fi Station Example diff --git a/examples/wifi/iperf/README.md b/examples/wifi/iperf/README.md index 2283fce4f51..1e261c51789 100644 --- a/examples/wifi/iperf/README.md +++ b/examples/wifi/iperf/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # Iperf Example diff --git a/examples/wifi/power_save/README.md b/examples/wifi/power_save/README.md index a9595666dd2..79ba938d265 100644 --- a/examples/wifi/power_save/README.md +++ b/examples/wifi/power_save/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Wifi Power Save Example diff --git a/examples/wifi/roaming/README.md b/examples/wifi/roaming/README.md index a27c3f905df..075e81cc23d 100644 --- a/examples/wifi/roaming/README.md +++ b/examples/wifi/roaming/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Roaming Example diff --git a/examples/wifi/scan/README.md b/examples/wifi/scan/README.md index 402505cde67..5a9649e68be 100644 --- a/examples/wifi/scan/README.md +++ b/examples/wifi/scan/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Wi-Fi Scan Example diff --git a/examples/wifi/smart_config/README.md b/examples/wifi/smart_config/README.md index e9b8abb0d79..eada22ef7c0 100644 --- a/examples/wifi/smart_config/README.md +++ b/examples/wifi/smart_config/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # smartconfig Example diff --git a/examples/wifi/wifi_eap_fast/README.md b/examples/wifi/wifi_eap_fast/README.md index ff150d2a29f..54c4f047b63 100644 --- a/examples/wifi/wifi_eap_fast/README.md +++ b/examples/wifi/wifi_eap_fast/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # WPA2 Enterprise Example diff --git a/examples/wifi/wifi_easy_connect/dpp-enrollee/README.md b/examples/wifi/wifi_easy_connect/dpp-enrollee/README.md index 89815d3bcf9..c9f1a9a14b3 100644 --- a/examples/wifi/wifi_easy_connect/dpp-enrollee/README.md +++ b/examples/wifi/wifi_easy_connect/dpp-enrollee/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Device Provisioning Protocol (Enrollee) Example diff --git a/examples/wifi/wifi_enterprise/README.md b/examples/wifi/wifi_enterprise/README.md index 0b207471e48..034abc97785 100644 --- a/examples/wifi/wifi_enterprise/README.md +++ b/examples/wifi/wifi_enterprise/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # WPA2 Enterprise Example diff --git a/examples/wifi/wps/README.md b/examples/wifi/wps/README.md index 2c9f63dbd55..6b73fa62f32 100644 --- a/examples/wifi/wps/README.md +++ b/examples/wifi/wps/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Wi-Fi WPS Example diff --git a/examples/zigbee/esp_zigbee_gateway/README.md b/examples/zigbee/esp_zigbee_gateway/README.md index 80c63ea7e0b..4f9b6c7e33e 100644 --- a/examples/zigbee/esp_zigbee_gateway/README.md +++ b/examples/zigbee/esp_zigbee_gateway/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Gateway Example diff --git a/tools/test_apps/build_system/embed_test/README.md b/tools/test_apps/build_system/embed_test/README.md new file mode 100644 index 00000000000..b5be4985c57 --- /dev/null +++ b/tools/test_apps/build_system/embed_test/README.md @@ -0,0 +1,2 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/tools/test_apps/build_system/ldalign_test/README.md b/tools/test_apps/build_system/ldalign_test/README.md new file mode 100644 index 00000000000..b5be4985c57 --- /dev/null +++ b/tools/test_apps/build_system/ldalign_test/README.md @@ -0,0 +1,2 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/tools/test_apps/build_system/ldgen_test/README.md b/tools/test_apps/build_system/ldgen_test/README.md index 50b62a6ecb6..7364d8cf601 100644 --- a/tools/test_apps/build_system/ldgen_test/README.md +++ b/tools/test_apps/build_system/ldgen_test/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | Runs a build test to check ldgen places libraries, objects and symbols diff --git a/tools/test_apps/build_system/rsource_test/README.md b/tools/test_apps/build_system/rsource_test/README.md new file mode 100644 index 00000000000..b5be4985c57 --- /dev/null +++ b/tools/test_apps/build_system/rsource_test/README.md @@ -0,0 +1,2 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | diff --git a/tools/test_apps/peripherals/i2c_wifi/README.md b/tools/test_apps/peripherals/i2c_wifi/README.md index 4f7bb069edf..6707b6585e0 100644 --- a/tools/test_apps/peripherals/i2c_wifi/README.md +++ b/tools/test_apps/peripherals/i2c_wifi/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # I2C-WIFI Test ## Overview diff --git a/tools/test_apps/phy/phy_multi_init_data_test/README.md b/tools/test_apps/phy/phy_multi_init_data_test/README.md index 3f7a0a04f01..497a93ba72e 100644 --- a/tools/test_apps/phy/phy_multi_init_data_test/README.md +++ b/tools/test_apps/phy/phy_multi_init_data_test/README.md @@ -1,2 +1,2 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | diff --git a/tools/test_apps/protocols/esp_netif/build_config/README.md b/tools/test_apps/protocols/esp_netif/build_config/README.md index 6b63b76f1d1..ee39c76ebe8 100644 --- a/tools/test_apps/protocols/esp_netif/build_config/README.md +++ b/tools/test_apps/protocols/esp_netif/build_config/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | | ----------------- | ----- | -------- | -------- | # Build only test for C++/C configuration diff --git a/tools/test_apps/protocols/mqtt/build_test/README.md b/tools/test_apps/protocols/mqtt/build_test/README.md index 0f6c3a99bdb..29d32516b6d 100644 --- a/tools/test_apps/protocols/mqtt/build_test/README.md +++ b/tools/test_apps/protocols/mqtt/build_test/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # Build only test for C++ diff --git a/tools/test_apps/protocols/mqtt/publish_connect_test/README.md b/tools/test_apps/protocols/mqtt/publish_connect_test/README.md index 3ed0ff0bd58..ec2cd41e2da 100644 --- a/tools/test_apps/protocols/mqtt/publish_connect_test/README.md +++ b/tools/test_apps/protocols/mqtt/publish_connect_test/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | | ----------------- | ----- | -------- | -------- | # ESP-MQTT advanced publish and connect test project diff --git a/tools/test_apps/security/secure_boot/README.md b/tools/test_apps/security/secure_boot/README.md index 3d30576a4c0..471e04adb17 100644 --- a/tools/test_apps/security/secure_boot/README.md +++ b/tools/test_apps/security/secure_boot/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 | ESP32-S3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | # Secure Boot diff --git a/tools/test_apps/system/bootloader_sections/README.md b/tools/test_apps/system/bootloader_sections/README.md index 1c60310b1d2..afb57b98257 100644 --- a/tools/test_apps/system/bootloader_sections/README.md +++ b/tools/test_apps/system/bootloader_sections/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | We have no rtc memory on ESP32-C2. diff --git a/tools/test_apps/system/build_test/README.md b/tools/test_apps/system/build_test/README.md index dd1b94d9707..efbe0bd2f73 100644 --- a/tools/test_apps/system/build_test/README.md +++ b/tools/test_apps/system/build_test/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | Efuse on ESP32-C2 not supported diff --git a/tools/test_apps/system/cxx_build_test/README.md b/tools/test_apps/system/cxx_build_test/README.md index 85d7875f108..3a725bb03dd 100644 --- a/tools/test_apps/system/cxx_build_test/README.md +++ b/tools/test_apps/system/cxx_build_test/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # C++ build test This build-only app can be used to check if certain headers, macros or features can be successfully compiled in a C++ source file. diff --git a/tools/test_apps/system/eh_frame/README.md b/tools/test_apps/system/eh_frame/README.md index c274fdc56a2..f6d8233c04d 100644 --- a/tools/test_apps/system/eh_frame/README.md +++ b/tools/test_apps/system/eh_frame/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32-C3 | ESP32-H2 | ESP32-C2 | +| Supported Targets | ESP32-C2 | ESP32-C3 | ESP32-H2 | | ----------------- | -------- | -------- | -------- | # Building and running diff --git a/tools/test_apps/system/g0_components/README.md b/tools/test_apps/system/g0_components/README.md index 99b92d32ae6..420e59a67a1 100644 --- a/tools/test_apps/system/g0_components/README.md +++ b/tools/test_apps/system/g0_components/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-C2 | ESP32-H2 | +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-H2 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | # "G0"-components-only app diff --git a/tools/test_apps/system/g1_components/README.md b/tools/test_apps/system/g1_components/README.md index f0f0da863bc..47db72b2a32 100644 --- a/tools/test_apps/system/g1_components/README.md +++ b/tools/test_apps/system/g1_components/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | ESP32-C2 Not support this test currently, because some of components have not been supported. IDF-4135 diff --git a/tools/test_apps/system/gdb_loadable_elf/README.md b/tools/test_apps/system/gdb_loadable_elf/README.md index 211a50c2f57..d8666b6c011 100644 --- a/tools/test_apps/system/gdb_loadable_elf/README.md +++ b/tools/test_apps/system/gdb_loadable_elf/README.md @@ -1,3 +1,6 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | + # Loadable ELF test application This project tests if the application can be loaded with GDB. diff --git a/tools/test_apps/system/no_embedded_paths/README.md b/tools/test_apps/system/no_embedded_paths/README.md index ca67f65409d..eb1ac06f4f8 100644 --- a/tools/test_apps/system/no_embedded_paths/README.md +++ b/tools/test_apps/system/no_embedded_paths/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-S2 | | ----------------- | ----- | -------- | -------- | # No Embedded Paths diff --git a/tools/test_apps/system/panic/README.md b/tools/test_apps/system/panic/README.md index b39f640dc57..f7a3616dceb 100644 --- a/tools/test_apps/system/panic/README.md +++ b/tools/test_apps/system/panic/README.md @@ -1,4 +1,4 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-S3 | ESP32-C3 | ESP32-H2 | +| Supported Targets | ESP32 | ESP32-C3 | ESP32-H2 | ESP32-S2 | ESP32-S3 | | ----------------- | ----- | -------- | -------- | -------- | -------- | # Building diff --git a/tools/test_apps/system/startup/README.md b/tools/test_apps/system/startup/README.md new file mode 100644 index 00000000000..b5be4985c57 --- /dev/null +++ b/tools/test_apps/system/startup/README.md @@ -0,0 +1,2 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-S2 | ESP32-S3 | +| ----------------- | ----- | -------- | -------- | -------- | -------- |