Hello,
at first thanks for this amazing tool, it eases up firmware development so much.
Currently I stumble accross the following issue:
- I write my application code in
./src
- in parallel I need to bring up a library that is in
./MyLib
- I managed to get the build running and I see with
pio run -v
that MyLib goes to .piolibdeps and is compiled nicely to libMyLib.a and linked properly to the appcode forming a valid firmware.elf.
Now, what I want to achieve is that,
- if there is a change in ./MyLib/foo.h (or any other fike), I want to get an update of .piolibdeps/MyLib and build it with the modified code.
- I need a solution without any extra loop like changing version in library.json, erase .piolibdeps, commit and push/pull the change
- I really would appreciate a clean solution without messing up things in PIO or SCONS.
Is there any good practice to achieve this. could help extra_scripts in platformio.ini.
Best Regards, Axel.
1 Like
I continued checking for a solution.
I found this older post Library Development HowTo
I have now the following files:
platformio.ini
[platformio]
description = PIO Example
[common]
includes = -IFooLib
cpu_flags = -Os -g --specs=nosys.specs -flto -ffreestanding -nostdlib -L. -T./flash.lds -Xlinker
defines = -DFW_VERSION=v0.0.1
[env:MyBoard]
platform = atmelsam
board = MyBoard
build_flags = ${common.cpu_flags} ${common.includes} ${common.defines}
#lib_deps = file://./FooLib
lib_extra_dirs = ./FooLib
FooLib\library.json
{
"name": "FooLib",
"keywords": "foo fooFast",
"description": "fullblown FOO implementation without BAR",
"version" : "0.0.1",
"platforms": "atmelsam",
"build": {
"flags" : ["-DLIB_WITH_FOO_A"]
}
}
With just lib_extra_dirs
it use modified files from ./FooLib/src but it ignores the “-D-values” set in library.json
.
If lib_deps = file://./FooLib
is enabled, it copies the sources into .piolibdeps
once but ignores any further updates in FooLib/src
What can I do, that values in FooLib/library.json
are used without lib_deps
?
Thanks for listening, I figured it out
, there are two modes:
developer:
To do the development locally, lib_extra_dirs
and having all compile time switches in platformio.ini
are completely sufficient.
user:
lib_deps
and library.json
belong to published libraries that pulled from a repo, even a local directory. library.json
is written after the implementation is complete/basically working for consumers/users that simply wants to use the library (it is a manifest of the library). Users also use lib_deps
in their platformio.ini
.
To have user
and developper
in one platformio.ini
there can be used probably different [envs]
.
One more finding:
The flag lib_extra_dirs
is a pointer to a top level directory. If the dir. has the structure
+ platformio.ini
+ libraries/
+ FooLib/
+ library.json
+ src/
+ BarLib/
+ library.json
+ src/
then also the build settings in the library.json
files are used.
1 Like
If you don’t like a default name for project libraries storage, you can rename it via Redirecting...