Bootloader, TEE and ULP are separate CMake runs. idf.py --ccache
sets CCACHE_ENABLE only on the parent cache, so those subprojects
compiled without ccache. The ULP v1 child does not use the IDF
project() macro, so it applies the launcher itself. The flag is
passed only to components/ulp/subproject, which is the CMakeLists
that reads it.
The Kconfig options for the program running on the ULP coprocessor now live
with the components that build it, not with the ULP coprocessor driver on
the HP core. The driver sources them, so applications resolve them as
before.
A ULP program is built against ulp_riscv, lp_core or ulp_fsm, each stating its
own sources, dependencies and memory layout. Sources shared with the driver
stay in components/ulp.