Re: [PATCH RFC] kbuild: create a list of all built DTB files

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Feb 25, 2024 at 4:21 PM Masahiro Yamada <masahiroy@xxxxxxxxxx> wrote:
>
> 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.

How would you like to proceed? I can through together some changes on top
of Simon's patches as an initial proposal if that helps?

I can use your format if you prefer.


ChenYu

> >
> >  .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





[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux