Difference between SRC_URI and FILESEXTRAPATHS_prepend in bitbake
Why do we need to give path of files in SRC_URI
even though we are including the files path in FILESEXTRAPATHS_prepend
variable? For example:
SUMMARY = "Simple Hello application"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI = "file://Hello_1.c \
file://Hello_2.c \
"
do_compile() {
oe_runmake
}
do_install() {
install -d ${D}${bindir}
install -m 0755 Hello ${D}${bindir}
}
In the "files" folder I have two files: hello1.c
and hello2.c
. When I remove SRC_URI
it outputs the following error,
ERROR: Hello-1.0-r0 do_compile: oe_runmake failed
But if I remove
FILESEXTRAPATHS_prepend
it is working fine.
What is the purpose of the variable FILESEXTRAPATHS_prepend
?
Why error occurs when I remove SRC_URI
even though I'm including my files path in FILESEXTRAPATHS_prepend
?
Simple way let assume meta-layer/recipes-core/example
- In above path created
hello
andhello.bb
- Here
hello
is a directory having your source and other data andhello.bb is recipe
.
Now
SRC_URI : The SRC_URI
variable always checks the data in hello dir
only.
FILESEXTRAPATHS_prepend := "${THISDIR}:" : if you add this line in your recipe, then the SRC_URI
variable checks the data in present directory
where the hello.bb
file present.
In your case
FILESEXTRAPATHS_prepend := "${THISDIR}/
files
:"
The SRC_URI
variable checks the data in files
dir where the hello.bb
is present.
Note
: Most of the time people will use this FILESEXTRAPATHS variable in .bbappend
files to apply patches and other files to the recipe.
For every
.bb
file, theSRC_URI
variable is used to specify which files to fetch the source from - either from an online repository or a local one, and theFILESEXTRAPATHS
specifies where these files are looked for, and depends on your source path.
BitBake uses the
SRC_URI
variable to point to source files regardless of their location. Each recipe must have aSRC_URI
variable that points to the source.
SRC_URI = file://
Fetches files, which are usually files shipped with the Metadata, from the local machine. The path is relative to the FILESPATH variable. Thus, the build system searches, in order, from the following directories, which are assumed to be a subdirectories of the directory in which the recipe file (.bb) or append file (.bbappend) resides:
FILESPATH
: The default set of directories the OpenEmbedded build system uses when searching for patches and files. During the build process, BitBake searches each directory in FILESPATH in the specified order when looking for files and patches specified by each file:// URI in a recipe.The default value for the FILESPATH variable is defined in the base.bbclass class found in meta/classes in the Source Directory:
FILESPATH = "${@base_set_filespath(["${FILE_DIRNAME}/${BP}", \ "${FILE_DIRNAME}/${BPN}", "${FILE_DIRNAME}/files"], d)}"
Do not hand-edit the
FILESPATH
variable; The default directories BitBake uses when it processes recipes are initially defined by the FILESPATH variable. You can extend FILESPATH variable by using FILESEXTRAPATHS.> Best practices dictate that you accomplish this by using FILESEXTRAPATHS from within a .bbappend file
FILESEXTRAPATHS
: Extends the search path the OpenEmbedded build system uses when looking for files and patches as it processes recipes and append files. The default directories BitBake uses when it processes recipes are initially defined by the FILESPATH variable.If you want the build system to pick up files specified through a SRC_URI statement from your append file, you need to be sure to extend the FILESPATH variable by also using the FILESEXTRAPATHS variable from within your append file.
http://www.yoctoproject.org/docs/2.1/ref-manual/ref-manual.html#var-FILESPATH
Back to your error, since each recipe MUST have a SRC_URI; it will not work if you delete it;
Since your recipe is not an .bbappend
, adding FILESEXTRAPATHS
is not appropriate and not necessary.