I have a library with a few sample programs (esp32, Arduino, but that probably doesn’t matter).
I have an extra_script.py
that creates a version-file from git information and it adds some defines to env["BUILD_FLAGS"]
and a few other modifications.
If I run this script for my samples (by specifying extra_scripts = pre:extra_script.py
in my platformio.ini
) it works perfectly fine.
But if I run the script through my library.json
build.extraScript
parameter it does not work.
The script does run: the version file is created, and the script prints logging messages that I get. But the changes to env
are somehow not honoured.
Any suggestions on what I could be doing wrong?
Thank you @maxgerhardt , that was indeed the issue: I was using Import("env")
but I should use DefaultEnvironment()
in this case. I had overlooked the relevant sentence in the documentation:
If you use library.json and extraScript, the Import("env")
refers to the library’s isolated environment from which a script was called (not to the global environemnt). Please use env = DefaultEnvironment()
instead to access the global environemnt.
Hmm. Modifying DefaultEnvironment()
does’t seem to work.
One problem is that any changes I make to BUILD_FLAGS
(for example appending -DMY_VERSION=42
) aren’t actually picked up by the builds.
But moreover for some boards I seem to break the build process in a more serious way by modifying the DefaultEnvironment()
. Building for the nodemcuv2
board for example it will not create the local.eagle.app.v6.common.ld
script if I make any changes. Running with pio ci -v
indeed shows that the step is skipped…
Shouldn’t that be in in DefaultEnvironment().Append(CPPDEFINES=[("MY_VERSION", 42)])
?
@maxgerhardt indeed. I was modifying BUILD_FLAGS
, which works for running your extra-script through platformio.ini
but doesn’t work if it is run through library.json
.
By changing this to modifying CPPFLAGS
and ensuring I modify both env
and DefaultEnvironment()
it now works everywhere.