From 365a7327967822ab86d7eaa9d1168f6abd241671 Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Tue, 30 Jun 2026 16:50:15 +0800 Subject: [PATCH 1/2] refactor(esp_timer): move test app into esp_timer_tests subdirectory Make room for additional test apps under test_apps/ by moving the existing esp_timer tests into their own esp_timer_tests/ subdirectory. Update build-test-rules and include paths accordingly. --- components/esp_timer/test_apps/.build-test-rules.yml | 9 ++++++++- .../test_apps/{ => esp_timer_tests}/CMakeLists.txt | 0 .../esp_timer/test_apps/{ => esp_timer_tests}/README.md | 0 .../test_apps/{ => esp_timer_tests}/main/CMakeLists.txt | 2 +- .../test_apps/{ => esp_timer_tests}/main/test_app_main.c | 0 .../{ => esp_timer_tests}/main/test_esp_timer.c | 0 .../{ => esp_timer_tests}/main/test_esp_timer_dfs.c | 0 .../{ => esp_timer_tests}/main/test_esp_timer_etm.c | 0 .../main/test_esp_timer_light_sleep.c | 0 .../{ => esp_timer_tests}/main/test_ets_timer.c | 0 .../{ => esp_timer_tests}/pytest_esp_timer_ut.py | 0 .../{ => esp_timer_tests}/sdkconfig.ci.26mhz_esp32c2 | 0 .../{ => esp_timer_tests}/sdkconfig.ci.any_cpu_esp32 | 0 .../{ => esp_timer_tests}/sdkconfig.ci.any_cpu_esp32s3 | 0 .../{ => esp_timer_tests}/sdkconfig.ci.cpu1_esp32 | 0 .../{ => esp_timer_tests}/sdkconfig.ci.cpu1_esp32s3 | 0 .../test_apps/{ => esp_timer_tests}/sdkconfig.ci.default | 0 .../test_apps/{ => esp_timer_tests}/sdkconfig.ci.dfs | 0 .../sdkconfig.ci.flash_auto_suspend | 0 .../sdkconfig.ci.freertos_compliance | 0 .../test_apps/{ => esp_timer_tests}/sdkconfig.ci.general | 0 .../sdkconfig.ci.isr_dispatch_esp32 | 0 .../sdkconfig.ci.isr_dispatch_esp32c3 | 0 .../test_apps/{ => esp_timer_tests}/sdkconfig.ci.psram | 0 .../test_apps/{ => esp_timer_tests}/sdkconfig.ci.release | 0 .../{ => esp_timer_tests}/sdkconfig.ci.single_core | 0 .../test_apps/{ => esp_timer_tests}/sdkconfig.defaults | 0 .../{ => esp_timer_tests}/sdkconfig.defaults.esp32 | 0 .../{ => esp_timer_tests}/sdkconfig.defaults.esp32c2 | 0 .../{ => esp_timer_tests}/sdkconfig.defaults.esp32c3 | 0 .../{ => esp_timer_tests}/sdkconfig.defaults.esp32s2 | 0 .../{ => esp_timer_tests}/sdkconfig.defaults.esp32s3 | 0 .../{ => esp_timer_tests}/sdkconfig.defaults.linux | 0 .../{ => esp_timer_tests}/sdkconfig.defaults.no_linux | 0 examples/get-started/hello_world/main/hello_world_main.c | 2 +- 35 files changed, 10 insertions(+), 3 deletions(-) rename components/esp_timer/test_apps/{ => esp_timer_tests}/CMakeLists.txt (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/README.md (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/main/CMakeLists.txt (91%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/main/test_app_main.c (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/main/test_esp_timer.c (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/main/test_esp_timer_dfs.c (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/main/test_esp_timer_etm.c (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/main/test_esp_timer_light_sleep.c (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/main/test_ets_timer.c (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/pytest_esp_timer_ut.py (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.26mhz_esp32c2 (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.any_cpu_esp32 (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.any_cpu_esp32s3 (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.cpu1_esp32 (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.cpu1_esp32s3 (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.default (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.dfs (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.flash_auto_suspend (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.freertos_compliance (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.general (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.isr_dispatch_esp32 (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.isr_dispatch_esp32c3 (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.psram (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.release (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.ci.single_core (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.defaults (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.defaults.esp32 (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.defaults.esp32c2 (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.defaults.esp32c3 (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.defaults.esp32s2 (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.defaults.esp32s3 (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.defaults.linux (100%) rename components/esp_timer/test_apps/{ => esp_timer_tests}/sdkconfig.defaults.no_linux (100%) diff --git a/components/esp_timer/test_apps/.build-test-rules.yml b/components/esp_timer/test_apps/.build-test-rules.yml index 833b701ccc0..96d50cb85e7 100644 --- a/components/esp_timer/test_apps/.build-test-rules.yml +++ b/components/esp_timer/test_apps/.build-test-rules.yml @@ -1,6 +1,6 @@ # Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps -components/esp_timer/test_apps: +components/esp_timer/test_apps/esp_timer_tests: enable: - if: INCLUDE_DEFAULT == 1 or IDF_TARGET == "linux" reason: run existing default build targets and include Linux @@ -14,3 +14,10 @@ components/esp_timer/test_apps: reason: The test requires the XTAL32K clock to measure the esp_timer timing accuracy - if: CONFIG_NAME == "dfs" and SOC_PM_SUPPORTED != 1 reason: The test requires the PM functionality + +components/esp_timer/test_apps/size_metrics: + enable: + - if: IDF_TARGET in ["esp32", "esp32c6"] + reason: Size metrics tracked on one RISC-V (esp32c6) and one Xtensa (esp32) target + depends_components: + - esp_timer diff --git a/components/esp_timer/test_apps/CMakeLists.txt b/components/esp_timer/test_apps/esp_timer_tests/CMakeLists.txt similarity index 100% rename from components/esp_timer/test_apps/CMakeLists.txt rename to components/esp_timer/test_apps/esp_timer_tests/CMakeLists.txt diff --git a/components/esp_timer/test_apps/README.md b/components/esp_timer/test_apps/esp_timer_tests/README.md similarity index 100% rename from components/esp_timer/test_apps/README.md rename to components/esp_timer/test_apps/esp_timer_tests/README.md diff --git a/components/esp_timer/test_apps/main/CMakeLists.txt b/components/esp_timer/test_apps/esp_timer_tests/main/CMakeLists.txt similarity index 91% rename from components/esp_timer/test_apps/main/CMakeLists.txt rename to components/esp_timer/test_apps/esp_timer_tests/main/CMakeLists.txt index 2d96fdf311d..708981f404e 100644 --- a/components/esp_timer/test_apps/main/CMakeLists.txt +++ b/components/esp_timer/test_apps/esp_timer_tests/main/CMakeLists.txt @@ -27,6 +27,6 @@ else() endif() idf_component_register(SRCS ${srcs} - PRIV_INCLUDE_DIRS "../../private_include" "../include" + PRIV_INCLUDE_DIRS "../../../private_include" "../../include" PRIV_REQUIRES "${priv_requires}" WHOLE_ARCHIVE) diff --git a/components/esp_timer/test_apps/main/test_app_main.c b/components/esp_timer/test_apps/esp_timer_tests/main/test_app_main.c similarity index 100% rename from components/esp_timer/test_apps/main/test_app_main.c rename to components/esp_timer/test_apps/esp_timer_tests/main/test_app_main.c diff --git a/components/esp_timer/test_apps/main/test_esp_timer.c b/components/esp_timer/test_apps/esp_timer_tests/main/test_esp_timer.c similarity index 100% rename from components/esp_timer/test_apps/main/test_esp_timer.c rename to components/esp_timer/test_apps/esp_timer_tests/main/test_esp_timer.c diff --git a/components/esp_timer/test_apps/main/test_esp_timer_dfs.c b/components/esp_timer/test_apps/esp_timer_tests/main/test_esp_timer_dfs.c similarity index 100% rename from components/esp_timer/test_apps/main/test_esp_timer_dfs.c rename to components/esp_timer/test_apps/esp_timer_tests/main/test_esp_timer_dfs.c diff --git a/components/esp_timer/test_apps/main/test_esp_timer_etm.c b/components/esp_timer/test_apps/esp_timer_tests/main/test_esp_timer_etm.c similarity index 100% rename from components/esp_timer/test_apps/main/test_esp_timer_etm.c rename to components/esp_timer/test_apps/esp_timer_tests/main/test_esp_timer_etm.c diff --git a/components/esp_timer/test_apps/main/test_esp_timer_light_sleep.c b/components/esp_timer/test_apps/esp_timer_tests/main/test_esp_timer_light_sleep.c similarity index 100% rename from components/esp_timer/test_apps/main/test_esp_timer_light_sleep.c rename to components/esp_timer/test_apps/esp_timer_tests/main/test_esp_timer_light_sleep.c diff --git a/components/esp_timer/test_apps/main/test_ets_timer.c b/components/esp_timer/test_apps/esp_timer_tests/main/test_ets_timer.c similarity index 100% rename from components/esp_timer/test_apps/main/test_ets_timer.c rename to components/esp_timer/test_apps/esp_timer_tests/main/test_ets_timer.c diff --git a/components/esp_timer/test_apps/pytest_esp_timer_ut.py b/components/esp_timer/test_apps/esp_timer_tests/pytest_esp_timer_ut.py similarity index 100% rename from components/esp_timer/test_apps/pytest_esp_timer_ut.py rename to components/esp_timer/test_apps/esp_timer_tests/pytest_esp_timer_ut.py diff --git a/components/esp_timer/test_apps/sdkconfig.ci.26mhz_esp32c2 b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.26mhz_esp32c2 similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.26mhz_esp32c2 rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.26mhz_esp32c2 diff --git a/components/esp_timer/test_apps/sdkconfig.ci.any_cpu_esp32 b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.any_cpu_esp32 similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.any_cpu_esp32 rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.any_cpu_esp32 diff --git a/components/esp_timer/test_apps/sdkconfig.ci.any_cpu_esp32s3 b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.any_cpu_esp32s3 similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.any_cpu_esp32s3 rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.any_cpu_esp32s3 diff --git a/components/esp_timer/test_apps/sdkconfig.ci.cpu1_esp32 b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.cpu1_esp32 similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.cpu1_esp32 rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.cpu1_esp32 diff --git a/components/esp_timer/test_apps/sdkconfig.ci.cpu1_esp32s3 b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.cpu1_esp32s3 similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.cpu1_esp32s3 rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.cpu1_esp32s3 diff --git a/components/esp_timer/test_apps/sdkconfig.ci.default b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.default similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.default rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.default diff --git a/components/esp_timer/test_apps/sdkconfig.ci.dfs b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.dfs similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.dfs rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.dfs diff --git a/components/esp_timer/test_apps/sdkconfig.ci.flash_auto_suspend b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.flash_auto_suspend similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.flash_auto_suspend rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.flash_auto_suspend diff --git a/components/esp_timer/test_apps/sdkconfig.ci.freertos_compliance b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.freertos_compliance similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.freertos_compliance rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.freertos_compliance diff --git a/components/esp_timer/test_apps/sdkconfig.ci.general b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.general similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.general rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.general diff --git a/components/esp_timer/test_apps/sdkconfig.ci.isr_dispatch_esp32 b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.isr_dispatch_esp32 similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.isr_dispatch_esp32 rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.isr_dispatch_esp32 diff --git a/components/esp_timer/test_apps/sdkconfig.ci.isr_dispatch_esp32c3 b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.isr_dispatch_esp32c3 similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.isr_dispatch_esp32c3 rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.isr_dispatch_esp32c3 diff --git a/components/esp_timer/test_apps/sdkconfig.ci.psram b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.psram similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.psram rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.psram diff --git a/components/esp_timer/test_apps/sdkconfig.ci.release b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.release similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.release rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.release diff --git a/components/esp_timer/test_apps/sdkconfig.ci.single_core b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.single_core similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.ci.single_core rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.ci.single_core diff --git a/components/esp_timer/test_apps/sdkconfig.defaults b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.defaults rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults diff --git a/components/esp_timer/test_apps/sdkconfig.defaults.esp32 b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.esp32 similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.defaults.esp32 rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.esp32 diff --git a/components/esp_timer/test_apps/sdkconfig.defaults.esp32c2 b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.esp32c2 similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.defaults.esp32c2 rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.esp32c2 diff --git a/components/esp_timer/test_apps/sdkconfig.defaults.esp32c3 b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.esp32c3 similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.defaults.esp32c3 rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.esp32c3 diff --git a/components/esp_timer/test_apps/sdkconfig.defaults.esp32s2 b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.esp32s2 similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.defaults.esp32s2 rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.esp32s2 diff --git a/components/esp_timer/test_apps/sdkconfig.defaults.esp32s3 b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.esp32s3 similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.defaults.esp32s3 rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.esp32s3 diff --git a/components/esp_timer/test_apps/sdkconfig.defaults.linux b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.linux similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.defaults.linux rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.linux diff --git a/components/esp_timer/test_apps/sdkconfig.defaults.no_linux b/components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.no_linux similarity index 100% rename from components/esp_timer/test_apps/sdkconfig.defaults.no_linux rename to components/esp_timer/test_apps/esp_timer_tests/sdkconfig.defaults.no_linux diff --git a/examples/get-started/hello_world/main/hello_world_main.c b/examples/get-started/hello_world/main/hello_world_main.c index 7010f3ef61c..f25de955002 100644 --- a/examples/get-started/hello_world/main/hello_world_main.c +++ b/examples/get-started/hello_world/main/hello_world_main.c @@ -17,7 +17,7 @@ void app_main(void) { printf("Hello world!\n"); - /* Print chip information */ + /* Print chip inf ormation */ esp_chip_info_t chip_info; uint32_t flash_size; esp_chip_info(&chip_info); From 19aca52f08156b07959da00142eab28fefdc1972 Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Fri, 27 Feb 2026 10:58:21 +0800 Subject: [PATCH 2/2] feat(size_metrics): add size metrics test apps Add test apps for binary size tracking: - esp_timer size_metrics app with minimal/full sdkconfig variants - minimal_baseline app to establish the platform binary size floor --- .../test_apps/size_metrics/CMakeLists.txt | 12 +++ .../test_apps/size_metrics/README.md | 2 + .../size_metrics/main/CMakeLists.txt | 3 + .../size_metrics/main/Kconfig.projbuild | 18 ++++ .../test_apps/size_metrics/main/main.c | 85 +++++++++++++++++++ .../size_metrics/pytest_size_metrics.py | 12 +++ .../test_apps/size_metrics/sdkconfig.ci.full | 3 + .../size_metrics/sdkconfig.ci.minimal | 3 + .../test_apps/size_metrics/sdkconfig.defaults | 2 + .../hello_world/main/hello_world_main.c | 2 +- .../size_metrics/size_metrics_config.yml | 8 +- .../test_apps/configs/sdkconfig.size_metrics | 8 ++ .../size_metrics/.build-test-rules.yml | 7 ++ .../minimal_baseline/CMakeLists.txt | 12 +++ .../size_metrics/minimal_baseline/README.md | 35 ++++++++ .../minimal_baseline/main/CMakeLists.txt | 2 + .../size_metrics/minimal_baseline/main/main.c | 26 ++++++ .../pytest_minimal_baseline.py | 12 +++ .../minimal_baseline/sdkconfig.defaults | 1 + 19 files changed, 251 insertions(+), 2 deletions(-) create mode 100644 components/esp_timer/test_apps/size_metrics/CMakeLists.txt create mode 100644 components/esp_timer/test_apps/size_metrics/README.md create mode 100644 components/esp_timer/test_apps/size_metrics/main/CMakeLists.txt create mode 100644 components/esp_timer/test_apps/size_metrics/main/Kconfig.projbuild create mode 100644 components/esp_timer/test_apps/size_metrics/main/main.c create mode 100644 components/esp_timer/test_apps/size_metrics/pytest_size_metrics.py create mode 100644 components/esp_timer/test_apps/size_metrics/sdkconfig.ci.full create mode 100644 components/esp_timer/test_apps/size_metrics/sdkconfig.ci.minimal create mode 100644 components/esp_timer/test_apps/size_metrics/sdkconfig.defaults create mode 100644 tools/test_apps/configs/sdkconfig.size_metrics create mode 100644 tools/test_apps/size_metrics/.build-test-rules.yml create mode 100644 tools/test_apps/size_metrics/minimal_baseline/CMakeLists.txt create mode 100644 tools/test_apps/size_metrics/minimal_baseline/README.md create mode 100644 tools/test_apps/size_metrics/minimal_baseline/main/CMakeLists.txt create mode 100644 tools/test_apps/size_metrics/minimal_baseline/main/main.c create mode 100644 tools/test_apps/size_metrics/minimal_baseline/pytest_minimal_baseline.py create mode 100644 tools/test_apps/size_metrics/minimal_baseline/sdkconfig.defaults diff --git a/components/esp_timer/test_apps/size_metrics/CMakeLists.txt b/components/esp_timer/test_apps/size_metrics/CMakeLists.txt new file mode 100644 index 00000000000..03d1c0f2fd1 --- /dev/null +++ b/components/esp_timer/test_apps/size_metrics/CMakeLists.txt @@ -0,0 +1,12 @@ +# Size metrics test app for esp_timer component +cmake_minimum_required(VERSION 3.22) + +list(PREPEND SDKCONFIG_DEFAULTS + "$ENV{IDF_PATH}/tools/test_apps/configs/sdkconfig.size_metrics" + "sdkconfig.defaults") + +# "Trim" the build. Include the minimal set of components, main, and anything it depends on. +set(COMPONENTS main) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(size_metrics) diff --git a/components/esp_timer/test_apps/size_metrics/README.md b/components/esp_timer/test_apps/size_metrics/README.md new file mode 100644 index 00000000000..657193bcfb9 --- /dev/null +++ b/components/esp_timer/test_apps/size_metrics/README.md @@ -0,0 +1,2 @@ +| Supported Targets | ESP32 | ESP32-C6 | +| ----------------- | ----- | -------- | diff --git a/components/esp_timer/test_apps/size_metrics/main/CMakeLists.txt b/components/esp_timer/test_apps/size_metrics/main/CMakeLists.txt new file mode 100644 index 00000000000..f3bf6efd3e3 --- /dev/null +++ b/components/esp_timer/test_apps/size_metrics/main/CMakeLists.txt @@ -0,0 +1,3 @@ +idf_component_register(SRCS "main.c" + PRIV_REQUIRES esp_timer + WHOLE_ARCHIVE) diff --git a/components/esp_timer/test_apps/size_metrics/main/Kconfig.projbuild b/components/esp_timer/test_apps/size_metrics/main/Kconfig.projbuild new file mode 100644 index 00000000000..3d187ebd2fa --- /dev/null +++ b/components/esp_timer/test_apps/size_metrics/main/Kconfig.projbuild @@ -0,0 +1,18 @@ +menu "Size Metrics Test App Configuration" + + choice SIZE_METRICS_FUNCTION_SET + prompt "Function set to compile" + default SIZE_METRICS_FUNCTION_SET_MINIMAL + help + Select which set of functions to compile for size metrics comparison. + Minimal set includes only basic functions, full set includes all features. + + config SIZE_METRICS_FUNCTION_SET_MINIMAL + bool "Minimal function set" + + config SIZE_METRICS_FUNCTION_SET_FULL + bool "Full function set" + + endchoice + +endmenu diff --git a/components/esp_timer/test_apps/size_metrics/main/main.c b/components/esp_timer/test_apps/size_metrics/main/main.c new file mode 100644 index 00000000000..eba132844ac --- /dev/null +++ b/components/esp_timer/test_apps/size_metrics/main/main.c @@ -0,0 +1,85 @@ +/* + * SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ + +#include + +#include "esp_timer.h" +#include "sdkconfig.h" + +#if CONFIG_SIZE_METRICS_FUNCTION_SET_MINIMAL +// Minimal function set - basic timer operations only +static void minimal_timer_callback(void* arg) +{ + // Minimal callback implementation +} + +static void minimal_functions(void) +{ + esp_timer_handle_t timer; + esp_timer_create_args_t timer_args = { + .callback = minimal_timer_callback, + .name = "minimal_timer" + }; + esp_timer_create(&timer_args, &timer); + esp_timer_start_once(timer, 1000); + esp_timer_stop(timer); + esp_timer_delete(timer); +} +#endif // CONFIG_SIZE_METRICS_FUNCTION_SET_MINIMAL + +#if CONFIG_SIZE_METRICS_FUNCTION_SET_FULL +// Full function set - all timer features +static void full_timer_callback(void* arg) +{ + // Full callback implementation with more features +} + +static void full_periodic_timer_callback(void* arg) +{ + // Periodic timer callback +} + +static void full_functions(void) +{ + esp_timer_handle_t oneshot_timer; + esp_timer_handle_t periodic_timer; + + // One-shot timer + esp_timer_create_args_t oneshot_args = { + .callback = full_timer_callback, + .name = "oneshot_timer" + }; + esp_timer_create(&oneshot_args, &oneshot_timer); + esp_timer_start_once(oneshot_timer, 1000); + + // Periodic timer + esp_timer_create_args_t periodic_args = { + .callback = full_periodic_timer_callback, + .name = "periodic_timer" + }; + esp_timer_create(&periodic_args, &periodic_timer); + esp_timer_start_periodic(periodic_timer, 5000); + + // Timer operations + esp_timer_stop(oneshot_timer); + esp_timer_stop(periodic_timer); + esp_timer_delete(oneshot_timer); + esp_timer_delete(periodic_timer); +} +#endif // CONFIG_SIZE_METRICS_FUNCTION_SET_FULL + +void app_main(void) +{ + printf("size_metrics app_main started\n"); + +#if CONFIG_SIZE_METRICS_FUNCTION_SET_MINIMAL + minimal_functions(); +#endif + +#if CONFIG_SIZE_METRICS_FUNCTION_SET_FULL + full_functions(); +#endif +} diff --git a/components/esp_timer/test_apps/size_metrics/pytest_size_metrics.py b/components/esp_timer/test_apps/size_metrics/pytest_size_metrics.py new file mode 100644 index 00000000000..98c446511cb --- /dev/null +++ b/components/esp_timer/test_apps/size_metrics/pytest_size_metrics.py @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Unlicense OR CC0-1.0 +import pytest +from pytest_embedded_idf.dut import IdfDut +from pytest_embedded_idf.utils import idf_parametrize + + +@pytest.mark.generic +@pytest.mark.parametrize('config', ['minimal', 'full'], indirect=True) +@idf_parametrize('target', ['esp32', 'esp32c6'], indirect=['target']) +def test_esp_timer_size_metrics_boots(dut: IdfDut) -> None: + dut.expect_exact('size_metrics app_main started', timeout=30) diff --git a/components/esp_timer/test_apps/size_metrics/sdkconfig.ci.full b/components/esp_timer/test_apps/size_metrics/sdkconfig.ci.full new file mode 100644 index 00000000000..ea941252da9 --- /dev/null +++ b/components/esp_timer/test_apps/size_metrics/sdkconfig.ci.full @@ -0,0 +1,3 @@ +# Full configuration for size metrics +CONFIG_SIZE_METRICS_FUNCTION_SET_MINIMAL=n +CONFIG_SIZE_METRICS_FUNCTION_SET_FULL=y diff --git a/components/esp_timer/test_apps/size_metrics/sdkconfig.ci.minimal b/components/esp_timer/test_apps/size_metrics/sdkconfig.ci.minimal new file mode 100644 index 00000000000..449c71e70f3 --- /dev/null +++ b/components/esp_timer/test_apps/size_metrics/sdkconfig.ci.minimal @@ -0,0 +1,3 @@ +# Minimal configuration for size metrics +CONFIG_SIZE_METRICS_FUNCTION_SET_MINIMAL=y +CONFIG_SIZE_METRICS_FUNCTION_SET_FULL=n diff --git a/components/esp_timer/test_apps/size_metrics/sdkconfig.defaults b/components/esp_timer/test_apps/size_metrics/sdkconfig.defaults new file mode 100644 index 00000000000..d2be5ec9e4b --- /dev/null +++ b/components/esp_timer/test_apps/size_metrics/sdkconfig.defaults @@ -0,0 +1,2 @@ +# App-specific defaults for esp_timer size metrics +CONFIG_ESP_TIMER_PROFILING=n diff --git a/examples/get-started/hello_world/main/hello_world_main.c b/examples/get-started/hello_world/main/hello_world_main.c index f25de955002..7010f3ef61c 100644 --- a/examples/get-started/hello_world/main/hello_world_main.c +++ b/examples/get-started/hello_world/main/hello_world_main.c @@ -17,7 +17,7 @@ void app_main(void) { printf("Hello world!\n"); - /* Print chip inf ormation */ + /* Print chip information */ esp_chip_info_t chip_info; uint32_t flash_size; esp_chip_info(&chip_info); diff --git a/tools/ci/metrics/size_metrics/size_metrics_config.yml b/tools/ci/metrics/size_metrics/size_metrics_config.yml index cc6db3e3a73..efb750f847f 100644 --- a/tools/ci/metrics/size_metrics/size_metrics_config.yml +++ b/tools/ci/metrics/size_metrics/size_metrics_config.yml @@ -49,8 +49,14 @@ # # Entries below define the apps that publish size metrics: -examples/get-started/hello_world: +tools/test_apps/size_metrics/minimal_baseline: libs: all bootloader: true configs: - default + +components/esp_timer/test_apps/size_metrics: + libs: all + configs: + - minimal + - full diff --git a/tools/test_apps/configs/sdkconfig.size_metrics b/tools/test_apps/configs/sdkconfig.size_metrics new file mode 100644 index 00000000000..8d24d491204 --- /dev/null +++ b/tools/test_apps/configs/sdkconfig.size_metrics @@ -0,0 +1,8 @@ +# Shared production-style defaults for apps that publish size metrics +CONFIG_COMPILER_OPTIMIZATION_SIZE=y +CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y +CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT=y +CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT=y +CONFIG_COMPILER_NO_MERGE_CONSTANTS=y +CONFIG_LOG_DEFAULT_LEVEL_WARN=y +CONFIG_BOOTLOADER_LOG_LEVEL_WARN=y diff --git a/tools/test_apps/size_metrics/.build-test-rules.yml b/tools/test_apps/size_metrics/.build-test-rules.yml new file mode 100644 index 00000000000..0887edd64bf --- /dev/null +++ b/tools/test_apps/size_metrics/.build-test-rules.yml @@ -0,0 +1,7 @@ +# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps + +tools/test_apps/size_metrics/minimal_baseline: + disable_test: + - if: IDF_TARGET == "linux" + temporary: true + reason: Not a real hardware target diff --git a/tools/test_apps/size_metrics/minimal_baseline/CMakeLists.txt b/tools/test_apps/size_metrics/minimal_baseline/CMakeLists.txt new file mode 100644 index 00000000000..0ab22000b6c --- /dev/null +++ b/tools/test_apps/size_metrics/minimal_baseline/CMakeLists.txt @@ -0,0 +1,12 @@ +# This is the project CMakeLists.txt file for the minimal_baseline size metrics test app +cmake_minimum_required(VERSION 3.22) + +list(PREPEND SDKCONFIG_DEFAULTS + "$ENV{IDF_PATH}/tools/test_apps/configs/sdkconfig.size_metrics" + "sdkconfig.defaults") + +# "Trim" the build. Include the minimal set of components, main, and anything it depends on. +set(COMPONENTS main) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(minimal_baseline) diff --git a/tools/test_apps/size_metrics/minimal_baseline/README.md b/tools/test_apps/size_metrics/minimal_baseline/README.md new file mode 100644 index 00000000000..01335eb4d60 --- /dev/null +++ b/tools/test_apps/size_metrics/minimal_baseline/README.md @@ -0,0 +1,35 @@ +| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-H21 | ESP32-H4 | ESP32-P4 | ESP32-S2 | ESP32-S3 | ESP32-S31 | +| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | --------- | -------- | -------- | -------- | -------- | --------- | + +# Minimal Baseline Size Metrics App + +This is a **build-only** integration app for size metrics tracking. It exercises the absolute minimum SDK stack: +- `app_main()` entry point +- `esp_system` and its core dependencies + +## Purpose + +Establish a floor measurement for the core ESP-IDF SDK and detect regressions in: +- Toolchain changes (compiler, linker) +- newlib updates +- Linker script changes +- Core system component dependencies + +## Source Frozen + +This app is **source-frozen**. The application code should never change unless forced by SDK API changes (e.g., breaking API changes at major version boundaries). Any size change detected in CI is attributable to SDK changes, not application code evolution. + +## Configuration + +- Built with `-Os` (size optimization) +- Disables WDT, assertions, and other noise-inducing features +- Trimmed build: only includes `main` component and its dependencies +- Targets: ESP32 (Xtensa) and ESP32-C6 (RISC-V) + +## Metrics Tracked + +- Total flash usage +- Total DRAM usage +- Total IRAM usage + +Metrics are collected from the `.map` file using `esp_idf_size` and uploaded via `esp-metrics-cli`. diff --git a/tools/test_apps/size_metrics/minimal_baseline/main/CMakeLists.txt b/tools/test_apps/size_metrics/minimal_baseline/main/CMakeLists.txt new file mode 100644 index 00000000000..eda7fda805b --- /dev/null +++ b/tools/test_apps/size_metrics/minimal_baseline/main/CMakeLists.txt @@ -0,0 +1,2 @@ +idf_component_register(SRCS "main.c" + WHOLE_ARCHIVE) diff --git a/tools/test_apps/size_metrics/minimal_baseline/main/main.c b/tools/test_apps/size_metrics/minimal_baseline/main/main.c new file mode 100644 index 00000000000..a672348d9b2 --- /dev/null +++ b/tools/test_apps/size_metrics/minimal_baseline/main/main.c @@ -0,0 +1,26 @@ +/* + * SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Unlicense OR CC0-1.0 + */ + +#include + +/** + * Minimal baseline integration app for size metrics. + * + * This app exercises only the absolute minimum SDK stack - app_main + esp_system. + * It establishes a floor measurement for the core SDK and catches regressions in: + * - Toolchain changes + * - newlib updates + * - Linker script changes + * - Core esp_system dependencies + * + * This app keeps runtime behavior minimal and source-frozen. + * Any size change is attributable to SDK changes, not application code changes. + */ + +void app_main(void) +{ + printf("minimal_baseline app_main started\n"); +} diff --git a/tools/test_apps/size_metrics/minimal_baseline/pytest_minimal_baseline.py b/tools/test_apps/size_metrics/minimal_baseline/pytest_minimal_baseline.py new file mode 100644 index 00000000000..5862d729c34 --- /dev/null +++ b/tools/test_apps/size_metrics/minimal_baseline/pytest_minimal_baseline.py @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Unlicense OR CC0-1.0 +import pytest +from pytest_embedded_idf.dut import IdfDut +from pytest_embedded_idf.utils import idf_parametrize + + +@pytest.mark.generic +@pytest.mark.parametrize('config', ['default'], indirect=True) +@idf_parametrize('target', ['supported_targets'], indirect=['target']) +def test_minimal_baseline_boots(dut: IdfDut) -> None: + dut.expect_exact('minimal_baseline app_main started', timeout=30) diff --git a/tools/test_apps/size_metrics/minimal_baseline/sdkconfig.defaults b/tools/test_apps/size_metrics/minimal_baseline/sdkconfig.defaults new file mode 100644 index 00000000000..cfb8704462d --- /dev/null +++ b/tools/test_apps/size_metrics/minimal_baseline/sdkconfig.defaults @@ -0,0 +1 @@ +# App-specific defaults for minimal_baseline size metrics