This may be somewhat related to PIO library doesn't see header files in project's include folder and Including "global" Header File to private Libraries, but with a subtle difference.
My project needs to build for many platforms & frameworks, and has almost all its code placed in separate libs, which live in
lib/bar/, etc. The approach I found to work very nicely, is to have only the
main app in
src/, and to furthermore have separate versions, e.g.
src/stm32cube-main.cpp. I then adjust the env for each build using
src_filter = +<native-*>, etc. Each main is different, and pulls in just the right libs it needs. So far, so (very) good.
The puzzle is that some of these libs are hardware-specific drivers. A systick module for example, for which the implementation can be very different across platforms and frameworks. I can solve this with lots of
#define settings in each driver, but would very much prefer to have an
arch.h platform-specific header, so that the driver can just include
arch.h, take advantage of some of the wrapper code in there, and figure out how to do the remaining super-platform-specific stuff via define’s.
But code in
lib/*/ does not see files in
src/, and rightly so, I think.
The question is, how can I add a path which the libraries do see, which has that specific
arch.h header etc. It might seem that
-I arch/stm32cube/ could do the trick, but if I use that approach, and set it in
build_flags, then it becomes hard to use
build_flags for other build-specific settings. As I understand it, PIO does not support a make-like
build_flags += ... mechanism.
Am I missing the point and looking in the wrong direction for a solution?