On Fri, 21 Apr 2023 at 18:41, Petr Kubizňák <[email protected]> wrote:
>
> Add DT_FILES variable to allow the user of the class to select specific
> dts files to build. This is useful for packages featuring dts files
> for multiple machines.
>
> Since many machine configs contain a list of dtb files
> (e.g. KERNEL_DEVICETREE), DT_FILES works with both dts and dtb files.
>
> Signed-off-by: Petr Kubizňák <[email protected]>
> ---
> meta/classes-recipe/devicetree.bbclass | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/meta/classes-recipe/devicetree.bbclass
> b/meta/classes-recipe/devicetree.bbclass
> index ed2a92e447..8f348f1370 100644
> --- a/meta/classes-recipe/devicetree.bbclass
> +++ b/meta/classes-recipe/devicetree.bbclass
> @@ -53,8 +53,10 @@ KERNEL_INCLUDE ??= " \
>
> DT_INCLUDE[doc] = "Search paths to be made available to both the device tree
> compiler and preprocessor for inclusion."
> DT_INCLUDE ?= "${DT_FILES_PATH} ${KERNEL_INCLUDE}"
> -DT_FILES_PATH[doc] = "Defaults to source directory, can be used to select
> dts files that are not in source (e.g. generated)."
> +DT_FILES_PATH[doc] = "Path to the directory containing dts files to build.
> Defaults to source directory."
> DT_FILES_PATH ?= "${S}"
> +DT_FILES[doc] = "Space-separated list of dts or dtb files to build. If
> empty, all dts files are built."
Worth noting in the doc string that DT_FILES paths are relative to
DT_FILES_PATH.
> +DT_FILES ?= ""
>
> DT_PADDING_SIZE[doc] = "Size of padding on the device tree blob, used as
> extra space typically for additional properties during boot."
> DT_PADDING_SIZE ??= "0x3000"
> @@ -125,7 +127,10 @@ def devicetree_compile(dtspath, includes, d):
> subprocess.run(dtcargs, check = True, stdout=subprocess.PIPE,
> stderr=subprocess.STDOUT)
>
> python devicetree_do_compile() {
> + import re
> includes = expand_includes("DT_INCLUDE", d)
> + dtfiles = d.getVar("DT_FILES")
If this populates the variable dtfiles with DT_FILES already split it
can fall back to os.listdir if empty, this avoids the need for the "if
filter..." logic within the loop:
dtfiles = d.getVar("DT_FILES").split()
dtfiles = [<renaming for dtb> for dtfiles in dtfiles]
for dts in dtfiles or os.listdir(listpath):
> + filter = [ re.sub("dtbo?", "dts", dtfile) for dtfile in dtfiles.split() ]
This regex is a bit problematic, it will substitute any part of the
filename and not just the extension suffix. E.g. "test-dtbo.dts" ->
"test-dts.dts". The expression might need to be something similar to
"\.dtbo?$".
I am also curious why you need to handle this mapping of .dtb -> .dts.
Do you have an example recipe that is using this class in this way?
Because the ".dtb" in KERNEL_DEVICETREE is specifically because the
KERNEL_DEVICETREE variable is pointing at kernel makefile targets.
Regards,
Nathan
> listpath = d.getVar("DT_FILES_PATH")
> for dts in os.listdir(listpath):
> dtspath = os.path.join(listpath, dts)
> @@ -134,6 +139,9 @@ python devicetree_do_compile() {
> continue # skip non-.dts files and non-overlay files
> except:
> continue # skip if can't determine if overlay
> + if filter:
> + if not(dts in filter):
> + continue # skip if dts not in defined filter
> devicetree_compile(dtspath, includes, d)
> }
>
> --
> 2.30.2
>
>
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#180283):
https://lists.openembedded.org/g/openembedded-core/message/180283
Mute This Topic: https://lists.openembedded.org/mt/98406619/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-