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.
Unified · Split
| @@ -1071,7 +1071,7 @@ include/config/kernel.release: $(srctree)/Makefile FORCE · 1070 unmodified lines | ||
| 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 |
| @@ -1215,6 +1215,35 @@ kselftest-merge: · 137 unmodified lines | ||
| 1215 | 1215 | $(srctree)/tools/testing/selftests/*/config |
| 1216 | 1216 | +$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig |
| 1217 | 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 | |
| 1246 | + | |
| 1218 | 1247 | # --------------------------------------------------------------------------- |
| 1219 | 1248 | # Modules |
| 1220 | 1249 | |
| @@ -1424,6 +1453,12 @@ help: · 203 unmodified lines | ||
| 1424 | 1453 | @echo ' kselftest-merge - Merge all the config dependencies of kselftest to existing' |
| 1425 | 1454 | @echo ' .config.' |
| 1426 | 1455 | @echo '' |
| 1456 | + @$(if $(dtstree), \ | |
| 1457 | + echo 'Devicetree:'; \ | |
| 1458 | + echo '* dtbs - Build device tree blobs for enabled boards'; \ | |
| 1459 | + echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)'; \ | |
| 1460 | + echo '') | |
| 1461 | + | |
| 1427 | 1462 | @echo 'Userspace tools targets:' |
| 1428 | 1463 | @echo ' use "make tools/help"' |
| 1429 | 1464 | @echo ' or "cd tools; make help"' |
| @@ -132,11 +132,5 @@ boot_targets += uImage uImage.bin uImage.gz · 131 unmodified lines | ||
| 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) |
| @@ -307,12 +307,7 @@ else · 306 unmodified lines | ||
| 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: |
| @@ -339,17 +334,6 @@ $(BOOT_TARGETS): vmlinux · 20 unmodified lines | ||
| 339 | 334 | $(INSTALL_TARGETS): |
| 340 | 335 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ |
| 341 | 336 | |
| 342 | −%.dtb: | scripts | |
| 343 | − $(Q)$(MAKE) $(build)=$(boot)/dts MACHINE=$(MACHINE) $(boot)/dts/$@ | |
| 344 | − | |
| 345 | −PHONY += dtbs dtbs_install | |
| 346 | − | |
| 347 | −dtbs: prepare scripts | |
| 348 | − $(Q)$(MAKE) $(build)=$(boot)/dts | |
| 349 | − | |
| 350 | −dtbs_install: | |
| 351 | − $(Q)$(MAKE) $(dtbinst)=$(boot)/dts | |
| 352 | − | |
| 353 | 337 | PHONY += vdso_install |
| 354 | 338 | vdso_install: |
| 355 | 339 | ifeq ($(CONFIG_VDSO),y) |
| @@ -371,8 +355,6 @@ define archhelp · 15 unmodified lines | ||
| 371 | 355 | echo ' uImage - U-Boot wrapped zImage' |
| 372 | 356 | echo ' bootpImage - Combined zImage and initial RAM disk' |
| 373 | 357 | echo ' (supply initrd image via make variable INITRD=<path>)' |
| 374 | − echo '* dtbs - Build device tree blobs for enabled boards' | |
| 375 | − echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)' | |
| 376 | 358 | echo ' install - Install uncompressed kernel' |
| 377 | 359 | echo ' zinstall - Install compressed kernel' |
| 378 | 360 | echo ' uinstall - Install U-Boot wrapped compressed kernel' |
| @@ -113,9 +113,8 @@ core-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a · 112 unmodified lines | ||
| 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 |
| @@ -127,17 +126,6 @@ Image.%: Image · 5 unmodified lines | ||
| 127 | 126 | zinstall install: |
| 128 | 127 | $(Q)$(MAKE) $(build)=$(boot) $@ |
| 129 | 128 | |
| 130 | −%.dtb: scripts | |
| 131 | − $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@ | |
| 132 | − | |
| 133 | −PHONY += dtbs dtbs_install | |
| 134 | − | |
| 135 | −dtbs: prepare scripts | |
| 136 | − $(Q)$(MAKE) $(build)=$(boot)/dts | |
| 137 | − | |
| 138 | −dtbs_install: | |
| 139 | − $(Q)$(MAKE) $(dtbinst)=$(boot)/dts | |
| 140 | − | |
| 141 | 129 | PHONY += vdso_install |
| 142 | 130 | vdso_install: |
| 143 | 131 | $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso $@ |
| @@ -145,7 +133,6 @@ vdso_install: · 1 unmodified line | ||
| 145 | 133 | # We use MRPROPER_FILES and CLEAN_FILES now |
| 146 | 134 | archclean: |
| 147 | 135 | $(Q)$(MAKE) $(clean)=$(boot) |
| 148 | − $(Q)$(MAKE) $(clean)=$(boot)/dts | |
| 149 | 136 | |
| 150 | 137 | # We need to generate vdso-offsets.h before compiling certain files in kernel/. |
| 151 | 138 | # In order to do that, we should use the archprepare target, but we can't since |
| @@ -160,8 +147,6 @@ vdso_prepare: prepare0 · 8 unmodified lines | ||
| 160 | 147 | define archhelp |
| 161 | 148 | echo '* Image.gz - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)' |
| 162 | 149 | echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)' |
| 163 | − echo '* dtbs - Build device tree blobs for enabled boards' | |
| 164 | − echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)' | |
| 165 | 150 | echo ' install - Install uncompressed kernel' |
| 166 | 151 | echo ' zinstall - Install compressed kernel' |
| 167 | 152 | echo ' Install using (your) ~/bin/installkernel or' |
| @@ -40,9 +40,7 @@ boot := arch/$(ARCH)/boot · 39 unmodified lines | ||
| 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 | |
| @@ -31,21 +31,12 @@ CROSS_COMPILE := h8300-unknown-linux- · 30 unmodified lines | ||
| 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 | 39 | |
| 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 | − | |
| 49 | 40 | archmrproper: |
| 50 | 41 | |
| 51 | 42 | archclean: |
| @@ -65,9 +65,7 @@ boot := arch/microblaze/boot · 64 unmodified lines | ||
| 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),) |
| @@ -1,6 +1,7 @@ | ||
| 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,6 +12,7 @@ ifneq ($(DTB),system) · 4 unmodified lines | ||
| 11 | 12 | $(obj)/system.dtb: $(obj)/$(DTB).dtb |
| 12 | 13 | $(call if_changed,cp) |
| 13 | 14 | endif |
| 15 | +endif | |
| 14 | 16 | |
| 15 | 17 | quiet_cmd_cp = CP $< $@$2 |
| 16 | 18 | cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false) |
| @@ -407,18 +407,7 @@ endif · 406 unmodified lines | ||
| 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 |
| @@ -461,8 +450,6 @@ define archhelp · 36 unmodified lines | ||
| 461 | 450 | echo ' uImage.lzma - U-Boot image (lzma)' |
| 462 | 451 | echo ' uImage.lzo - U-Boot image (lzo)' |
| 463 | 452 | echo ' uzImage.bin - U-Boot image (self-extracting)' |
| 464 | − echo ' dtbs - Device-tree blobs for enabled boards' | |
| 465 | − echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)' | |
| 466 | 453 | echo |
| 467 | 454 | echo ' These will be default as appropriate for a configured platform.' |
| 468 | 455 | echo |
| @@ -43,7 +43,7 @@ CHECKFLAGS += -D__NDS32_EB__ · 42 unmodified lines | ||
| 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 | |
| @@ -56,12 +56,6 @@ all: vmImage · 55 unmodified lines | ||
| 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 | |
| @@ -74,5 +68,4 @@ define archhelp · 6 unmodified lines | ||
| 74 | 68 | echo ' (your) ~/bin/$(INSTALLKERNEL) or' |
| 75 | 69 | echo ' (distribution) /sbin/$(INSTALLKERNEL) or' |
| 76 | 70 | echo ' install to $$(INSTALL_PATH)' |
| 77 | − echo ' dtbs - Build device tree blobs for enabled boards' | |
| 78 | 71 | endef |
| @@ -31,9 +31,5 @@ $(obj)/zImage: $(obj)/compressed/vmlinux FORCE · 30 unmodified lines | ||
| 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)" |
| @@ -293,9 +293,6 @@ $(BOOT_TARGETS2): vmlinux · 292 unmodified lines | ||
| 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, |
| @@ -84,28 +84,18 @@ LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name) · 83 unmodified lines | ||
| 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 | |
| 91 | −ifneq ($(CONFIG_BUILTIN_DTB),"") | |
| 92 | −core-$(CONFIG_OF) += arch/xtensa/boot/dts/ | |
| 93 | −endif | |
| 94 | − | |
| 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 |
| @@ -39,8 +39,7 @@ build_unifdef: $(obj)/unifdef · 38 unmodified lines | ||
| 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 | |
| @@ -283,7 +283,7 @@ $(obj)/%.dtb.S: $(obj)/%.dtb FORCE · 282 unmodified lines | ||
| 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,7 +1,7 @@ | ||
| 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 \ |