Now that we have a dtb-y variable containing all board device trees, let's import some Linux Kbuild code, so barebox can also maintain a list of built device trees in arch/$ARCH/dts/dtbs-list. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- .gitignore | 1 + Makefile | 1 + scripts/Makefile.build | 11 +++++++++++ scripts/Makefile.dtbs | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 scripts/Makefile.dtbs diff --git a/.gitignore b/.gitignore index 5e1b0c2b68ff..0bee67af4881 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,7 @@ *.tab.[ch] binary.0 Module.symvers +dtbs-list *.dtb *.dtb.* *.dtbo diff --git a/Makefile b/Makefile index d5d02f4efe15..5f5f830af5d2 100644 --- a/Makefile +++ b/Makefile @@ -1238,6 +1238,7 @@ clean: archclean $(clean-dirs) \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ -o -name '*lex.c' -o -name '.tab.[ch]' \ + -o -name 'dtbs-list' \ -o -name '*.symtypes' -o -name '*.bbenv.*' -o -name "*.bbenv" \) \ -type f -print | xargs rm -f diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 1c511d38a12b..591da3d750ec 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -56,12 +56,23 @@ ifneq ($(userprogs),) include scripts/Makefile.userprogs endif +ifneq ($(need-dtbslist)$(dtb-y)$(dtb-)$(filter %.dtb %.dtb.o %.dtbo.o,$(targets)),) +include $(srctree)/scripts/Makefile.dtbs +endif + ifndef obj $(warning kbuild: Makefile.build is included improperly) endif # =========================================================================== +# This is a list of build artifacts from the current Makefile and its +# sub-directories. The timestamp should be updated when any of the member files. + +cmd_gen_order = { $(foreach m, $(real-prereqs), \ + $(if $(filter %/$(notdir $@), $m), cat $m, echo $m);) :; } \ + > $@ + ifneq ($(strip $(lib-y) $(lib-m) $(lib-n) $(lib-)),) lib-target := $(obj)/lib.a endif diff --git a/scripts/Makefile.dtbs b/scripts/Makefile.dtbs new file mode 100644 index 000000000000..046361c20a6a --- /dev/null +++ b/scripts/Makefile.dtbs @@ -0,0 +1,32 @@ +# SPDX-License-Identifier: GPL-2.0-only + +# If CONFIG_OF_ALL_DTBS is enabled, all DT blobs are built +dtb-$(CONFIG_OF_ALL_DTBS) += $(dtb-) + +# Composite DTB (i.e. DTB constructed by overlay) +multi-dtb-y := $(call multi-search, $(dtb-y), .dtb, -dtbs) +# Primitive DTB compiled from *.dts +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)) + +dtb-y := $(addprefix $(obj)/, $(dtb-y)) +multi-dtb-y := $(addprefix $(obj)/, $(multi-dtb-y)) +real-dtb-y := $(addprefix $(obj)/, $(real-dtb-y)) + +always-y += $(dtb-y) +targets += $(real-dtb-y) + +# dtbs-list +# --------------------------------------------------------------------------- + +ifdef need-dtbslist +subdir-dtbslist := $(addsuffix /dtbs-list, $(subdir-ym)) +dtb-y += $(subdir-dtbslist) +always-y += $(obj)/dtbs-list +endif + +$(subdir-dtbslist): $(obj)/%/dtbs-list: $(obj)/% ; + +$(obj)/dtbs-list: $(dtb-y) FORCE + $(call if_changed,gen_order) -- 2.39.5