On Fri, Feb 23, 2024 at 6:23 PM Chen-Yu Tsai <wenst@xxxxxxxxxxxx> wrote: > > It is useful to have a list of all composite *.dtb files, along with > their individual components, generated from the current build. > > With this commit, 'make dtbs' creates arch/*/boot/dts/dtbs-components, > which lists the composite dtb files created in the current build. It > maintains the order of the dtb-y additions in Makefiles although the > order is not important for DTBs. > > This compliments the list of all *.dtb and *.dtbo files in dtbs-list, > which only includes the files directly added to dtb-y. > > For example, consider this case: > > foo-dtbs := foo_base.dtb foo_overlay.dtbo > dtb-y := bar.dtb foo.dtb > > In this example, the new list will include foo.dtb with foo_base.dtb and > foo_overlay.dtbo on the same line, but not bar.dtb. > > Signed-off-by: Chen-Yu Tsai <wenst@xxxxxxxxxxxx> > --- > Hi, > > I hacked up this new thing to list out the individual components of each > composite dtb. I think this information would be useful for FIT image > generation or other toolchains to consume. For example, instead of > including each dtb, a toolchain could realize that some are put together > using others, and if the bootloader supports it, put together commands > to reassemble the end result from the original parts. > > This is based on and complements Masahiro-san's recent dtbs-list work. This is another format of my previous per-dtb "*.dtlst" (but I did not pick up 3/4, 4/4 because I did not know what we need after all). This should be discussed together with how Simon's script will look like. I can understand your Makefile code, but I still do not know how the entire overlay stuff will work in a big picture. > > .gitignore | 1 + > scripts/Makefile.build | 16 ++++++++++++++++ > scripts/Makefile.lib | 8 ++++++-- > 3 files changed, 23 insertions(+), 2 deletions(-) > > diff --git a/.gitignore b/.gitignore > index c59dc60ba62e..bb5b3bbca4ef 100644 > --- a/.gitignore > +++ b/.gitignore > @@ -52,6 +52,7 @@ > *.xz > *.zst > Module.symvers > +dtbs-components > dtbs-list > modules.order > > diff --git a/scripts/Makefile.build b/scripts/Makefile.build > index 4971f54c855e..ba85c2385c9e 100644 > --- a/scripts/Makefile.build > +++ b/scripts/Makefile.build > @@ -72,6 +72,7 @@ endif > subdir-builtin := $(sort $(filter %/built-in.a, $(real-obj-y))) > subdir-modorder := $(sort $(filter %/modules.order, $(obj-m))) > subdir-dtbslist := $(sort $(filter %/dtbs-list, $(dtb-y))) > +subdir-dtbscomp := $(sort $(filter %/dtbs-components, $(multi-dtb-y))) > > targets-for-builtin := $(extra-y) > > @@ -390,6 +391,7 @@ $(obj)/%.asn1.c $(obj)/%.asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler > $(subdir-builtin): $(obj)/%/built-in.a: $(obj)/% ; > $(subdir-modorder): $(obj)/%/modules.order: $(obj)/% ; > $(subdir-dtbslist): $(obj)/%/dtbs-list: $(obj)/% ; > +$(subdir-dtbscomp): $(obj)/%/dtbs-components: $(obj)/% ; > > # > # Rule to compile a set of .o files into one .a file (without symbol table) > @@ -422,6 +424,20 @@ $(obj)/modules.order: $(obj-m) FORCE > $(obj)/dtbs-list: $(dtb-y) FORCE > $(call if_changed,gen_order) > > +# > +# Rule to create dtbs-components > +# > +# This is a list of composite dtb(s), along with each dtb's components, > +# from the current Makefile and its sub-directories. > + > +cmd_gen_dtb_components = { $(foreach m, $(real-prereqs), \ > + $(if $(filter %/$(notdir $@), $m), cat $m, \ > + echo $m: $(addprefix $(obj)/,$($(notdir $(m:%.dtb=%-dtbs))))); \ > + ) :; } > $@ > + > +$(obj)/dtbs-components: $(multi-dtb-y) FORCE > + $(call if_changed,gen_dtb_components) > + > # > # Rule to compile a set of .o files into one .a file (with symbol table) > # > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib > index dbcac396329e..7c2127a84ac2 100644 > --- a/scripts/Makefile.lib > +++ b/scripts/Makefile.lib > @@ -61,7 +61,6 @@ real-search = $(foreach m, $1, $(if $(call suffix-search, $m, $2, $3 -), $(call > multi-obj-y := $(call multi-search, $(obj-y), .o, -objs -y) > multi-obj-m := $(call multi-search, $(obj-m), .o, -objs -y -m) > multi-obj-ym := $(multi-obj-y) $(multi-obj-m) > - > # Replace multi-part objects by their individual parts, > # including built-in.a from subdirectories > real-obj-y := $(call real-search, $(obj-y), .o, -objs -y) > @@ -91,6 +90,11 @@ real-dtb-y := $(call real-search, $(dtb-y), .dtb, -dtbs) > # Base DTB that overlay is applied onto > base-dtb-y := $(filter %.dtb, $(call real-search, $(multi-dtb-y), .dtb, -dtbs)) > > +ifdef need-dtbslist > +multi-dtb-y += $(addsuffix /dtbs-components, $(subdir-ym)) > +always-y += dtbs-components > +endif > + > always-y += $(dtb-y) > > # Add subdir path > @@ -406,7 +410,7 @@ cmd_dtc = $(HOSTCC) -E $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; > quiet_cmd_fdtoverlay = DTOVL $@ > cmd_fdtoverlay = $(objtree)/scripts/dtc/fdtoverlay -o $@ -i $(real-prereqs) > > -$(multi-dtb-y): FORCE > +$(filter-out %/dtbs-components, multi-dtb-y): FORCE > $(call if_changed,fdtoverlay) > $(call multi_depend, $(multi-dtb-y), .dtb, -dtbs) > > -- > 2.44.0.rc0.258.g7320e95886-goog > -- Best Regards Masahiro Yamada