Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

kbuild: consolidate Devicetree dtb build rules

There is nothing arch specific about building dtb files other than their
location under /arch/*/boot/dts/. Keeping each arch aligned is a pain.
The dependencies and supported targets are all slightly different.
Also, a cross-compiler for each arch is needed, but really the host
compiler preprocessor is perfectly fine for building dtbs. Move the
build rules to a common location and remove the arch specific ones. This
is done in a single step to avoid warnings about overriding rules.

The build dependencies had been a mixture of 'scripts' and/or 'prepare'.
These pull in several dependencies some of which need a target compiler
(specifically devicetable-offsets.h) and aren't needed to build dtbs.
All that is really needed is dtc, so adjust the dependencies to only be
dtc.

This change enables support 'dtbs_install' on some arches which were
missing the target.

Acked-by: Will Deacon <will.deacon@arm.com>
Acked-by: Paul Burton <paul.burton@mips.com>
Acked-by: Ley Foon Tan <ley.foon.tan@intel.com>
Acked-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Cc: Michal Marek <michal.lkml@markovi.net>
Cc: Vineet Gupta <vgupta@synopsys.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: Michal Simek <monstr@monstr.eu>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: James Hogan <jhogan@kernel.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Chris Zankel <chris@zankel.net>
Cc: Max Filippov <jcmvbkbc@gmail.com>
Cc: linux-kbuild@vger.kernel.org
Cc: linux-snps-arc@lists.infradead.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: uclinux-h8-devel@lists.sourceforge.jp
Cc: linux-mips@linux-mips.org
Cc: nios2-dev@lists.rocketboards.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-xtensa@linux-xtensa.org
Signed-off-by: Rob Herring <robh@kernel.org>

+48 -101
+36 -1
Makefile
··· 1071 1071 # Carefully list dependencies so we do not try to build scripts twice 1072 1072 # in parallel 1073 1073 PHONY += scripts 1074 - scripts: scripts_basic asm-generic gcc-plugins $(autoksyms_h) 1074 + scripts: scripts_basic scripts_dtc asm-generic gcc-plugins $(autoksyms_h) 1075 1075 $(Q)$(MAKE) $(build)=$(@) 1076 1076 1077 1077 # Things we need to do before we recursively start building the kernel ··· 1214 1214 -m $(objtree)/.config \ 1215 1215 $(srctree)/tools/testing/selftests/*/config 1216 1216 +$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig 1217 + 1218 + # --------------------------------------------------------------------------- 1219 + # Devicetree files 1220 + 1221 + ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) 1222 + dtstree := arch/$(SRCARCH)/boot/dts 1223 + endif 1224 + 1225 + ifneq ($(dtstree),) 1226 + 1227 + %.dtb: prepare3 scripts_dtc 1228 + $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ 1229 + 1230 + PHONY += dtbs dtbs_install 1231 + dtbs: prepare3 scripts_dtc 1232 + $(Q)$(MAKE) $(build)=$(dtstree) 1233 + 1234 + dtbs_install: 1235 + $(Q)$(MAKE) $(dtbinst)=$(dtstree) 1236 + 1237 + ifdef CONFIG_OF_EARLY_FLATTREE 1238 + all: dtbs 1239 + endif 1240 + 1241 + endif 1242 + 1243 + PHONY += scripts_dtc 1244 + scripts_dtc: scripts_basic 1245 + $(Q)$(MAKE) $(build)=scripts/dtc 1217 1246 1218 1247 # --------------------------------------------------------------------------- 1219 1248 # Modules ··· 1453 1424 @echo ' kselftest-merge - Merge all the config dependencies of kselftest to existing' 1454 1425 @echo ' .config.' 1455 1426 @echo '' 1427 + @$(if $(dtstree), \ 1428 + echo 'Devicetree:'; \ 1429 + echo '* dtbs - Build device tree blobs for enabled boards'; \ 1430 + echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)'; \ 1431 + echo '') 1432 + 1456 1433 @echo 'Userspace tools targets:' 1457 1434 @echo ' use "make tools/help"' 1458 1435 @echo ' or "cd tools; make help"'
-6
arch/arc/Makefile
··· 132 132 $(boot_targets): vmlinux 133 133 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ 134 134 135 - %.dtb %.dtb.S %.dtb.o: scripts 136 - $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@ 137 - 138 - dtbs: scripts 139 - $(Q)$(MAKE) $(build)=$(boot)/dts 140 - 141 135 archclean: 142 136 $(Q)$(MAKE) $(clean)=$(boot)
+1 -19
arch/arm/Makefile
··· 307 307 KBUILD_IMAGE := $(boot)/zImage 308 308 endif 309 309 310 - # Build the DT binary blobs if we have OF configured 311 - ifeq ($(CONFIG_USE_OF),y) 312 - KBUILD_DTBS := dtbs 313 - endif 314 - 315 - all: $(notdir $(KBUILD_IMAGE)) $(KBUILD_DTBS) 310 + all: $(notdir $(KBUILD_IMAGE)) 316 311 317 312 318 313 archheaders: ··· 334 339 $(INSTALL_TARGETS): 335 340 $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ 336 341 337 - %.dtb: | scripts 338 - $(Q)$(MAKE) $(build)=$(boot)/dts MACHINE=$(MACHINE) $(boot)/dts/$@ 339 - 340 - PHONY += dtbs dtbs_install 341 - 342 - dtbs: prepare scripts 343 - $(Q)$(MAKE) $(build)=$(boot)/dts 344 - 345 - dtbs_install: 346 - $(Q)$(MAKE) $(dtbinst)=$(boot)/dts 347 - 348 342 PHONY += vdso_install 349 343 vdso_install: 350 344 ifeq ($(CONFIG_VDSO),y) ··· 355 371 echo ' uImage - U-Boot wrapped zImage' 356 372 echo ' bootpImage - Combined zImage and initial RAM disk' 357 373 echo ' (supply initrd image via make variable INITRD=<path>)' 358 - echo '* dtbs - Build device tree blobs for enabled boards' 359 - echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)' 360 374 echo ' install - Install uncompressed kernel' 361 375 echo ' zinstall - Install compressed kernel' 362 376 echo ' uinstall - Install U-Boot wrapped compressed kernel'
+1 -16
arch/arm64/Makefile
··· 113 113 # Default target when executing plain make 114 114 boot := arch/arm64/boot 115 115 KBUILD_IMAGE := $(boot)/Image.gz 116 - KBUILD_DTBS := dtbs 117 116 118 - all: Image.gz $(KBUILD_DTBS) 117 + all: Image.gz 119 118 120 119 121 120 Image: vmlinux ··· 126 127 zinstall install: 127 128 $(Q)$(MAKE) $(build)=$(boot) $@ 128 129 129 - %.dtb: scripts 130 - $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@ 131 - 132 - PHONY += dtbs dtbs_install 133 - 134 - dtbs: prepare scripts 135 - $(Q)$(MAKE) $(build)=$(boot)/dts 136 - 137 - dtbs_install: 138 - $(Q)$(MAKE) $(dtbinst)=$(boot)/dts 139 - 140 130 PHONY += vdso_install 141 131 vdso_install: 142 132 $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso $@ ··· 133 145 # We use MRPROPER_FILES and CLEAN_FILES now 134 146 archclean: 135 147 $(Q)$(MAKE) $(clean)=$(boot) 136 - $(Q)$(MAKE) $(clean)=$(boot)/dts 137 148 138 149 # We need to generate vdso-offsets.h before compiling certain files in kernel/. 139 150 # In order to do that, we should use the archprepare target, but we can't since ··· 147 160 define archhelp 148 161 echo '* Image.gz - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)' 149 162 echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)' 150 - echo '* dtbs - Build device tree blobs for enabled boards' 151 - echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)' 152 163 echo ' install - Install uncompressed kernel' 153 164 echo ' zinstall - Install compressed kernel' 154 165 echo ' Install using (your) ~/bin/installkernel or'
-2
arch/c6x/Makefile
··· 40 40 DTB:=$(subst dtbImage.,,$(filter dtbImage.%, $(MAKECMDGOALS))) 41 41 export DTB 42 42 43 - ifneq ($(DTB),) 44 43 core-y += $(boot)/dts/ 45 - endif 46 44 47 45 # With make 3.82 we cannot mix normal and wildcard targets 48 46
+1 -10
arch/h8300/Makefile
··· 31 31 endif 32 32 33 33 core-y += arch/$(ARCH)/kernel/ arch/$(ARCH)/mm/ 34 - ifneq '$(CONFIG_H8300_BUILTIN_DTB)' '""' 35 - core-y += arch/h8300/boot/dts/ 36 - endif 34 + core-y += arch/$(ARCH)/boot/dts/ 37 35 38 36 libs-y += arch/$(ARCH)/lib/ 39 37 40 38 boot := arch/h8300/boot 41 - 42 - %.dtb %.dtb.S %.dtb.o: | scripts 43 - $(Q)$(MAKE) $(build)=arch/h8300/boot/dts arch/h8300/boot/dts/$@ 44 - 45 - PHONY += dtbs 46 - dtbs: scripts 47 - $(Q)$(MAKE) $(build)=arch/h8300/boot/dts 48 39 49 40 archmrproper: 50 41
+1 -3
arch/microblaze/Makefile
··· 65 65 # Are we making a simpleImage.<boardname> target? If so, crack out the boardname 66 66 DTB:=$(subst simpleImage.,,$(filter simpleImage.%, $(MAKECMDGOALS))) 67 67 68 - ifneq ($(DTB),) 69 - core-y += $(boot)/dts/ 70 - endif 68 + core-y += $(boot)/dts/ 71 69 72 70 # defines filename extension depending memory management type 73 71 ifeq ($(CONFIG_MMU),)
+2
arch/microblaze/boot/dts/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 2 # 3 3 4 + ifneq ($(DTB),) 4 5 obj-y += linked_dtb.o 5 6 6 7 # Ensure system.dtb exists ··· 11 10 ifneq ($(DTB),system) 12 11 $(obj)/system.dtb: $(obj)/$(DTB).dtb 13 12 $(call if_changed,cp) 13 + endif 14 14 endif 15 15 16 16 quiet_cmd_cp = CP $< $@$2
+1 -14
arch/mips/Makefile
··· 407 407 CLEAN_FILES += vmlinux.32 vmlinux.64 408 408 409 409 # device-trees 410 - core-$(CONFIG_BUILTIN_DTB) += arch/mips/boot/dts/ 411 - 412 - %.dtb %.dtb.S %.dtb.o: | scripts 413 - $(Q)$(MAKE) $(build)=arch/mips/boot/dts arch/mips/boot/dts/$@ 414 - 415 - PHONY += dtbs 416 - dtbs: scripts 417 - $(Q)$(MAKE) $(build)=arch/mips/boot/dts 418 - 419 - PHONY += dtbs_install 420 - dtbs_install: 421 - $(Q)$(MAKE) $(dtbinst)=arch/mips/boot/dts 410 + core-y += arch/mips/boot/dts/ 422 411 423 412 archprepare: 424 413 ifdef CONFIG_MIPS32_N32 ··· 450 461 echo ' uImage.lzma - U-Boot image (lzma)' 451 462 echo ' uImage.lzo - U-Boot image (lzo)' 452 463 echo ' uzImage.bin - U-Boot image (self-extracting)' 453 - echo ' dtbs - Device-tree blobs for enabled boards' 454 - echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)' 455 464 echo 456 465 echo ' These will be default as appropriate for a configured platform.' 457 466 echo
+1 -1
arch/nds32/Makefile
··· 43 43 endif 44 44 45 45 boot := arch/nds32/boot 46 - core-$(BUILTIN_DTB) += $(boot)/dts/ 46 + core-y += $(boot)/dts/ 47 47 48 48 .PHONY: FORCE 49 49
-7
arch/nios2/Makefile
··· 56 56 archclean: 57 57 $(Q)$(MAKE) $(clean)=$(nios2-boot) 58 58 59 - %.dtb %.dtb.S %.dtb.o: | scripts 60 - $(Q)$(MAKE) $(build)=$(nios2-boot)/dts $(nios2-boot)/dts/$@ 61 - 62 - dtbs: 63 - $(Q)$(MAKE) $(build)=$(nios2-boot)/dts 64 - 65 59 $(BOOT_TARGETS): vmlinux 66 60 $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@ 67 61 ··· 68 74 echo ' (your) ~/bin/$(INSTALLKERNEL) or' 69 75 echo ' (distribution) /sbin/$(INSTALLKERNEL) or' 70 76 echo ' install to $$(INSTALL_PATH)' 71 - echo ' dtbs - Build device tree blobs for enabled boards' 72 77 endef
-4
arch/nios2/boot/Makefile
··· 31 31 $(obj)/compressed/vmlinux: $(obj)/vmlinux.gz FORCE 32 32 $(Q)$(MAKE) $(build)=$(obj)/compressed $@ 33 33 34 - targets += $(dtb-y) 35 - 36 - $(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y)) 37 - 38 34 install: 39 35 sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) System.map "$(INSTALL_PATH)"
-3
arch/powerpc/Makefile
··· 293 293 bootwrapper_install: 294 294 $(Q)$(MAKE) $(build)=$(boot) $(patsubst %,$(boot)/%,$@) 295 295 296 - %.dtb: scripts 297 - $(Q)$(MAKE) $(build)=$(boot)/dts $(patsubst %,$(boot)/dts/%,$@) 298 - 299 296 # Used to create 'merged defconfigs' 300 297 # To use it $(call) it with the first argument as the base defconfig 301 298 # and the second argument as a space separated list of .config files to merge,
+1 -11
arch/xtensa/Makefile
··· 84 84 head-y := arch/xtensa/kernel/head.o 85 85 core-y += arch/xtensa/kernel/ arch/xtensa/mm/ 86 86 core-y += $(buildvar) $(buildplf) 87 + core-y += arch/xtensa/boot/dts/ 87 88 88 89 libs-y += arch/xtensa/lib/ $(LIBGCC) 89 90 drivers-$(CONFIG_OPROFILE) += arch/xtensa/oprofile/ 90 - 91 - ifneq ($(CONFIG_BUILTIN_DTB),"") 92 - core-$(CONFIG_OF) += arch/xtensa/boot/dts/ 93 - endif 94 91 95 92 boot := arch/xtensa/boot 96 93 97 94 all Image zImage uImage: vmlinux 98 95 $(Q)$(MAKE) $(build)=$(boot) $@ 99 96 100 - %.dtb: 101 - $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@ 102 - 103 - dtbs: scripts 104 - $(Q)$(MAKE) $(build)=$(boot)/dts 105 - 106 97 define archhelp 107 98 @echo '* Image - Kernel ELF image with reset vector' 108 99 @echo '* zImage - Compressed kernel image (arch/xtensa/boot/images/zImage.*)' 109 100 @echo '* uImage - U-Boot wrapped image' 110 - @echo ' dtbs - Build device tree blobs for enabled boards' 111 101 endef
+1 -2
scripts/Makefile
··· 39 39 subdir-$(CONFIG_MODVERSIONS) += genksyms 40 40 subdir-y += mod 41 41 subdir-$(CONFIG_SECURITY_SELINUX) += selinux 42 - subdir-$(CONFIG_DTC) += dtc 43 42 subdir-$(CONFIG_GDB_SCRIPTS) += gdb 44 43 45 44 # Let clean descend into subdirs 46 - subdir- += basic kconfig package gcc-plugins 45 + subdir- += basic dtc kconfig package gcc-plugins
+1 -1
scripts/Makefile.lib
··· 283 283 284 284 quiet_cmd_dtc = DTC $@ 285 285 cmd_dtc = mkdir -p $(dir ${dtc-tmp}) ; \ 286 - $(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \ 286 + $(HOSTCC) -E $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \ 287 287 $(DTC) -O dtb -o $@ -b 0 \ 288 288 $(addprefix -i,$(dir $<) $(DTC_INCLUDE)) $(DTC_FLAGS) \ 289 289 -d $(depfile).dtc.tmp $(dtc-tmp) ; \
+1 -1
scripts/dtc/Makefile
··· 1 1 # SPDX-License-Identifier: GPL-2.0 2 2 # scripts/dtc makefile 3 3 4 - hostprogs-y := dtc 4 + hostprogs-$(CONFIG_DTC) := dtc 5 5 always := $(hostprogs-y) 6 6 7 7 dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \