I am playing around with yocto for a personal project. I have a layer called meta-nightcore
which has several files writen in different languages: bash, Python, C, C++ and several recipes.
Is it possible to exclude the meta-nightcore
when calling bitbake <image_name>
when a user defined variable NIGHTCORE_ENABLED
? This variable is set via shell command before calling source oe-init-build-env
.
If you have different ideas, can you also share?
Thanks anh Best Regards, Duy Tran
Yes, you can pass your environment variable into the build environment and then use it to conditionally add the extra layer(s).
You'll need to modify your bblayers.conf
to store a default value for NIGHTCORE_ENABLED
and to add the extra layer(s) to BBLAYERS
if it is set to 1
:
NIGHTCORE_ENABLED ?= "0" # overridden by env if specified in BB_ENV_EXTRAWHITE
NIGHTCORE_LAYERS ?= "/path/to/poky/meta-nightcore"
BBLAYERS ?= " \
/path/to/poky/meta \
/path/to/poky/meta-poky \
/path/to/poky/meta-yocto-bsp \
${@bb.utils.contains('NIGHTCORE_ENABLED', '1', '${NIGHTCORE_LAYERS}', '', d)} \
"
Then, you need to tell Bitbake to allow your environment variable to be captured into the Bitbake datastore by adding it to BB_ENV_EXTRAWHITE
:
export NIGHTCORE_ENABLED=1
export BB_ENV_EXTRAWHITE="${BB_ENV_EXTRAWHITE} NIGHTCORE_ENABLED"
You can then run bitbake <image_name>
.
Because bblayers.conf
is usually generated when source oe-init-build-env
is run for the first time, you may wish to use TEMPLATECONF
to create a bblayers.conf.sample
file that already includes this extra logic.
There's some related answers here too:
Is it possible to pass in command line variables to a bitbake build?