Summary
Since (at least) v0.5.5/v0.5.6, idf_component.yml correctly declares:
nicolaielectronics/esp-hosted-tanmatsu:
rules:
- if: target == esp32p4
version: ">=2.12.3"
so the component manager does fetch esp-hosted-tanmatsu into managed_components/ for an esp32p4 build. But lora.c unconditionally includes it for that target:
#if defined(CONFIG_IDF_TARGET_ESP32P4)
#include "esp_hosted.h"
#endif
while CMakeLists.txt never lists it as a requirement:
idf_component_register(
SRCS
lora.c
INCLUDE_DIRS
"include"
REQUIRES
sx126x
)
REQUIRES/PRIV_REQUIRES is what actually grants a component the include path of a dependency in the ESP-IDF build system - just being resolved into managed_components/ isn't enough. Result, building any project that consumes tanmatsu-lora as a plain managed component (not already separately requiring esp-hosted-tanmatsu elsewhere in its own tree) on esp32p4:
managed_components/nicolaielectronics__tanmatsu-lora/lora.c:15:10: fatal error: esp_hosted.h: No such file or directory
15 | #include "esp_hosted.h"
| ^~~~~~~~~~~~~~
BUG: component_requirements.py: cannot match original component filename for source component nicolaielectronics__tanmatsu-lora
Reproduced 2026-07-20 building CJvanSoest/meshcore against tanmatsu-lora ^0.5.5 (clean managed_components/dependencies.lock, ESP-IDF v5.5.1, idf.py build -DIDF_TARGET=esp32p4). Presumably tanmatsu-radio/tanmatsu-launcher don't hit this because they already require esp-hosted-tanmatsu elsewhere in their own component graph, which happens to satisfy the include path project-wide via their own main component.
Suggested fix
Add esp-hosted-tanmatsu to REQUIRES (gated on CONFIG_IDF_TARGET_ESP32P4, matching the source-level guard), e.g.:
if(CONFIG_IDF_TARGET_ESP32P4)
set(lora_extra_requires "esp-hosted-tanmatsu")
endif()
idf_component_register(
SRCS lora.c
INCLUDE_DIRS "include"
REQUIRES sx126x ${lora_extra_requires}
)
Related to #6 (also filed today) but a distinct root cause - that one is a GET_CONFIG wire-compat gap, this one is a build-time packaging bug that blocks compilation outright for any project not independently depending on esp-hosted-tanmatsu.
Summary
Since (at least) v0.5.5/v0.5.6,
idf_component.ymlcorrectly declares:so the component manager does fetch
esp-hosted-tanmatsuintomanaged_components/for an esp32p4 build. Butlora.cunconditionally includes it for that target:while
CMakeLists.txtnever lists it as a requirement:REQUIRES/PRIV_REQUIRESis what actually grants a component the include path of a dependency in the ESP-IDF build system - just being resolved intomanaged_components/isn't enough. Result, building any project that consumestanmatsu-loraas a plain managed component (not already separately requiringesp-hosted-tanmatsuelsewhere in its own tree) on esp32p4:Reproduced 2026-07-20 building
CJvanSoest/meshcoreagainsttanmatsu-lora ^0.5.5(cleanmanaged_components/dependencies.lock, ESP-IDF v5.5.1,idf.py build -DIDF_TARGET=esp32p4). Presumablytanmatsu-radio/tanmatsu-launcherdon't hit this because they already requireesp-hosted-tanmatsuelsewhere in their own component graph, which happens to satisfy the include path project-wide via their own main component.Suggested fix
Add
esp-hosted-tanmatsutoREQUIRES(gated onCONFIG_IDF_TARGET_ESP32P4, matching the source-level guard), e.g.:Related to #6 (also filed today) but a distinct root cause - that one is a GET_CONFIG wire-compat gap, this one is a build-time packaging bug that blocks compilation outright for any project not independently depending on esp-hosted-tanmatsu.