* [PATCH 0/8] Devicetree build consolidation @ 2018-08-21 21:55 Rob Herring 2018-08-21 21:55 ` [PATCH 6/8] kbuild: consolidate Devicetree dtb build rules Rob Herring 0 siblings, 1 reply; 5+ messages in thread From: Rob Herring @ 2018-08-21 21:55 UTC (permalink / raw) To: linux-arm-kernel This series addresses a couple of issues I have with building dts files. First, the ability to build all the dts files in the tree. This has been supported on most arches for some time with powerpc being the main exception. The reason powerpc wasn't supported was it needed a change in the location built dtb files are put. Secondly, it's a pain to acquire all the cross-compilers needed to build dtbs for each arch. There's no reason to build with the cross compiler and the host compiler is perfectly fine as we only need the pre-processor. I started addressing just those 2 problems, but kept finding small differences such as target dependencies and dtbs_install support across architectures. Instead of trying to align all these, I've consolidated the build targets moving them out of the arch makefiles. I'd like to take the series via the DT tree. Rob Rob Herring (8): powerpc: build .dtb files in dts directory nios2: build .dtb files in dts directory nios2: use common rules to build built-in dtb nios2: fix building all dtbs c6x: use common built-in dtb support kbuild: consolidate Devicetree dtb build rules powerpc: enable building all dtbs c6x: enable building all dtbs Makefile | 30 ++++++++++++++++++ arch/arc/Makefile | 6 ---- arch/arm/Makefile | 20 +----------- arch/arm64/Makefile | 17 +---------- arch/c6x/Makefile | 2 -- arch/c6x/boot/dts/Makefile | 17 +++++------ arch/c6x/boot/dts/linked_dtb.S | 2 -- arch/c6x/include/asm/sections.h | 1 - arch/c6x/kernel/setup.c | 4 +-- arch/c6x/kernel/vmlinux.lds.S | 10 ------ arch/h8300/Makefile | 11 +------ arch/microblaze/Makefile | 4 +-- arch/mips/Makefile | 15 +-------- arch/nds32/Makefile | 2 +- arch/nios2/Makefile | 11 +------ arch/nios2/boot/Makefile | 22 -------------- arch/nios2/boot/dts/Makefile | 6 ++++ arch/nios2/boot/linked_dtb.S | 19 ------------ arch/powerpc/Makefile | 3 -- arch/powerpc/boot/Makefile | 49 ++++++++++++++---------------- arch/powerpc/boot/dts/Makefile | 6 ++++ arch/powerpc/boot/dts/fsl/Makefile | 4 +++ arch/xtensa/Makefile | 12 +------- scripts/Makefile | 1 - scripts/Makefile.lib | 2 +- 25 files changed, 87 insertions(+), 189 deletions(-) delete mode 100644 arch/c6x/boot/dts/linked_dtb.S create mode 100644 arch/nios2/boot/dts/Makefile delete mode 100644 arch/nios2/boot/linked_dtb.S create mode 100644 arch/powerpc/boot/dts/Makefile create mode 100644 arch/powerpc/boot/dts/fsl/Makefile -- 2.17.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 6/8] kbuild: consolidate Devicetree dtb build rules 2018-08-21 21:55 [PATCH 0/8] Devicetree build consolidation Rob Herring @ 2018-08-21 21:55 ` Rob Herring 2018-08-26 2:05 ` Masahiro Yamada 0 siblings, 1 reply; 5+ messages in thread From: Rob Herring @ 2018-08-21 21:55 UTC (permalink / raw) To: linux-arm-kernel 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. Cc: 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: Will Deacon <will.deacon@arm.com> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Cc: Michal Simek <monstr@monstr.eu> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Paul Burton <paul.burton@mips.com> Cc: James Hogan <jhogan@kernel.org> Cc: Ley Foon Tan <lftan@altera.com> 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 at vger.kernel.org Cc: linux-snps-arc at lists.infradead.org Cc: linux-arm-kernel at lists.infradead.org Cc: uclinux-h8-devel at lists.sourceforge.jp Cc: linux-mips at linux-mips.org Cc: nios2-dev at lists.rocketboards.org Cc: linuxppc-dev at lists.ozlabs.org Cc: linux-xtensa at linux-xtensa.org Signed-off-by: Rob Herring <robh@kernel.org> --- Makefile | 30 ++++++++++++++++++++++++++++++ arch/arc/Makefile | 6 ------ arch/arm/Makefile | 20 +------------------- arch/arm64/Makefile | 17 +---------------- arch/c6x/Makefile | 2 -- arch/h8300/Makefile | 11 +---------- arch/microblaze/Makefile | 4 +--- arch/mips/Makefile | 15 +-------------- arch/nds32/Makefile | 2 +- arch/nios2/Makefile | 7 ------- arch/nios2/boot/Makefile | 4 ---- arch/powerpc/Makefile | 3 --- arch/xtensa/Makefile | 12 +----------- scripts/Makefile | 1 - scripts/Makefile.lib | 2 +- 15 files changed, 38 insertions(+), 98 deletions(-) diff --git a/Makefile b/Makefile index c13f8b85ba60..6d89e673f192 100644 --- a/Makefile +++ b/Makefile @@ -1212,6 +1212,30 @@ kselftest-merge: $(srctree)/tools/testing/selftests/*/config +$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig +# --------------------------------------------------------------------------- +# Devicetree files + +dtstree := $(wildcard arch/$(SRCARCH)/boot/dts) + +ifdef CONFIG_OF_EARLY_FLATTREE + +%.dtb %.dtb.S %.dtb.o: | dtc + $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ + +PHONY += dtbs +dtbs: | dtc + $(Q)$(MAKE) $(build)=$(dtstree) + +dtbs_install: dtbs + $(Q)$(MAKE) $(dtbinst)=$(dtstree) + +all: dtbs + +dtc: + $(Q)$(MAKE) $(build)=scripts/dtc + +endif + # --------------------------------------------------------------------------- # Modules @@ -1425,6 +1449,12 @@ help: @echo ' kselftest-merge - Merge all the config dependencies of kselftest to existing' @echo ' .config.' @echo '' + @$(if $(dtstree), \ + echo 'Devicetree:'; \ + echo '* dtbs - Build device tree blobs for enabled boards'; \ + echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)'; \ + echo '') + @echo 'Userspace tools targets:' @echo ' use "make tools/help"' @echo ' or "cd tools; make help"' diff --git a/arch/arc/Makefile b/arch/arc/Makefile index 6c1b20dd76ad..cbfb7a16b570 100644 --- a/arch/arc/Makefile +++ b/arch/arc/Makefile @@ -132,11 +132,5 @@ boot_targets += uImage uImage.bin uImage.gz $(boot_targets): vmlinux $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ -%.dtb %.dtb.S %.dtb.o: scripts - $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@ - -dtbs: scripts - $(Q)$(MAKE) $(build)=$(boot)/dts - archclean: $(Q)$(MAKE) $(clean)=$(boot) diff --git a/arch/arm/Makefile b/arch/arm/Makefile index e7d703d8fac3..7f02ef8dfdb2 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -308,12 +308,7 @@ else KBUILD_IMAGE := $(boot)/zImage endif -# Build the DT binary blobs if we have OF configured -ifeq ($(CONFIG_USE_OF),y) -KBUILD_DTBS := dtbs -endif - -all: $(notdir $(KBUILD_IMAGE)) $(KBUILD_DTBS) +all: $(notdir $(KBUILD_IMAGE)) archheaders: @@ -340,17 +335,6 @@ $(BOOT_TARGETS): vmlinux $(INSTALL_TARGETS): $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ -%.dtb: | scripts - $(Q)$(MAKE) $(build)=$(boot)/dts MACHINE=$(MACHINE) $(boot)/dts/$@ - -PHONY += dtbs dtbs_install - -dtbs: prepare scripts - $(Q)$(MAKE) $(build)=$(boot)/dts - -dtbs_install: - $(Q)$(MAKE) $(dtbinst)=$(boot)/dts - PHONY += vdso_install vdso_install: ifeq ($(CONFIG_VDSO),y) @@ -372,8 +356,6 @@ define archhelp echo ' uImage - U-Boot wrapped zImage' echo ' bootpImage - Combined zImage and initial RAM disk' echo ' (supply initrd image via make variable INITRD=<path>)' - echo '* dtbs - Build device tree blobs for enabled boards' - echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)' echo ' install - Install uncompressed kernel' echo ' zinstall - Install compressed kernel' echo ' uinstall - Install U-Boot wrapped compressed kernel' diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile index efe61a2e4b5e..5e7320b2212d 100644 --- a/arch/arm64/Makefile +++ b/arch/arm64/Makefile @@ -113,9 +113,8 @@ core-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a # Default target when executing plain make boot := arch/arm64/boot KBUILD_IMAGE := $(boot)/Image.gz -KBUILD_DTBS := dtbs -all: Image.gz $(KBUILD_DTBS) +all: Image.gz Image: vmlinux @@ -127,17 +126,6 @@ Image.%: Image zinstall install: $(Q)$(MAKE) $(build)=$(boot) $@ -%.dtb: scripts - $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@ - -PHONY += dtbs dtbs_install - -dtbs: prepare scripts - $(Q)$(MAKE) $(build)=$(boot)/dts - -dtbs_install: - $(Q)$(MAKE) $(dtbinst)=$(boot)/dts - PHONY += vdso_install vdso_install: $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso $@ @@ -145,7 +133,6 @@ vdso_install: # We use MRPROPER_FILES and CLEAN_FILES now archclean: $(Q)$(MAKE) $(clean)=$(boot) - $(Q)$(MAKE) $(clean)=$(boot)/dts # We need to generate vdso-offsets.h before compiling certain files in kernel/. # In order to do that, we should use the archprepare target, but we can't since @@ -160,8 +147,6 @@ vdso_prepare: prepare0 define archhelp echo '* Image.gz - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)' echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)' - echo '* dtbs - Build device tree blobs for enabled boards' - echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)' echo ' install - Install uncompressed kernel' echo ' zinstall - Install compressed kernel' echo ' Install using (your) ~/bin/installkernel or' diff --git a/arch/c6x/Makefile b/arch/c6x/Makefile index 6ab942e6c534..ea4390021384 100644 --- a/arch/c6x/Makefile +++ b/arch/c6x/Makefile @@ -41,9 +41,7 @@ boot := arch/$(ARCH)/boot DTB:=$(subst dtbImage.,,$(filter dtbImage.%, $(MAKECMDGOALS))) export DTB -ifneq ($(DTB),) core-y += $(boot)/dts/ -endif # With make 3.82 we cannot mix normal and wildcard targets diff --git a/arch/h8300/Makefile b/arch/h8300/Makefile index e1c02ca230cb..b4adab9697c3 100644 --- a/arch/h8300/Makefile +++ b/arch/h8300/Makefile @@ -27,21 +27,12 @@ CROSS_COMPILE := h8300-unknown-linux- endif core-y += arch/$(ARCH)/kernel/ arch/$(ARCH)/mm/ -ifneq '$(CONFIG_H8300_BUILTIN_DTB)' '""' -core-y += arch/h8300/boot/dts/ -endif +core-y += arch/$(ARCH)/boot/dts/ libs-y += arch/$(ARCH)/lib/ boot := arch/h8300/boot -%.dtb %.dtb.S %.dtb.o: | scripts - $(Q)$(MAKE) $(build)=arch/h8300/boot/dts arch/h8300/boot/dts/$@ - -PHONY += dtbs -dtbs: scripts - $(Q)$(MAKE) $(build)=arch/h8300/boot/dts - archmrproper: archclean: diff --git a/arch/microblaze/Makefile b/arch/microblaze/Makefile index d269dd4b8279..3e58b2317d09 100644 --- a/arch/microblaze/Makefile +++ b/arch/microblaze/Makefile @@ -65,9 +65,7 @@ boot := arch/microblaze/boot # Are we making a simpleImage.<boardname> target? If so, crack out the boardname DTB:=$(subst simpleImage.,,$(filter simpleImage.%, $(MAKECMDGOALS))) -ifneq ($(DTB),) - core-y += $(boot)/dts/ -endif +core-y += $(boot)/dts/ # defines filename extension depending memory management type ifeq ($(CONFIG_MMU),) diff --git a/arch/mips/Makefile b/arch/mips/Makefile index 5425df002a6b..8cb5994db05a 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile @@ -407,18 +407,7 @@ endif CLEAN_FILES += vmlinux.32 vmlinux.64 # device-trees -core-$(CONFIG_BUILTIN_DTB) += arch/mips/boot/dts/ - -%.dtb %.dtb.S %.dtb.o: | scripts - $(Q)$(MAKE) $(build)=arch/mips/boot/dts arch/mips/boot/dts/$@ - -PHONY += dtbs -dtbs: scripts - $(Q)$(MAKE) $(build)=arch/mips/boot/dts - -PHONY += dtbs_install -dtbs_install: - $(Q)$(MAKE) $(dtbinst)=arch/mips/boot/dts +core-y += arch/mips/boot/dts/ archprepare: ifdef CONFIG_MIPS32_N32 @@ -461,8 +450,6 @@ define archhelp echo ' uImage.lzma - U-Boot image (lzma)' echo ' uImage.lzo - U-Boot image (lzo)' echo ' uzImage.bin - U-Boot image (self-extracting)' - echo ' dtbs - Device-tree blobs for enabled boards' - echo ' dtbs_install - Install dtbs to $(INSTALL_DTBS_PATH)' echo echo ' These will be default as appropriate for a configured platform.' echo diff --git a/arch/nds32/Makefile b/arch/nds32/Makefile index 031c676821ff..4ec91e48ad4e 100644 --- a/arch/nds32/Makefile +++ b/arch/nds32/Makefile @@ -43,7 +43,7 @@ CHECKFLAGS += -D__NDS32_EB__ endif boot := arch/nds32/boot -core-$(BUILTIN_DTB) += $(boot)/dts/ +core-y += $(boot)/dts/ .PHONY: FORCE diff --git a/arch/nios2/Makefile b/arch/nios2/Makefile index db2e78fe65c7..52c03e60b114 100644 --- a/arch/nios2/Makefile +++ b/arch/nios2/Makefile @@ -56,12 +56,6 @@ all: vmImage archclean: $(Q)$(MAKE) $(clean)=$(nios2-boot) -%.dtb %.dtb.S %.dtb.o: | scripts - $(Q)$(MAKE) $(build)=$(nios2-boot)/dts $(nios2-boot)/dts/$@ - -dtbs: - $(Q)$(MAKE) $(build)=$(nios2-boot)/dts - $(BOOT_TARGETS): vmlinux $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@ @@ -74,5 +68,4 @@ define archhelp echo ' (your) ~/bin/$(INSTALLKERNEL) or' echo ' (distribution) /sbin/$(INSTALLKERNEL) or' echo ' install to $$(INSTALL_PATH)' - echo ' dtbs - Build device tree blobs for enabled boards' endef diff --git a/arch/nios2/boot/Makefile b/arch/nios2/boot/Makefile index 0b48f1bf086d..37dfc7e584bc 100644 --- a/arch/nios2/boot/Makefile +++ b/arch/nios2/boot/Makefile @@ -31,9 +31,5 @@ $(obj)/zImage: $(obj)/compressed/vmlinux FORCE $(obj)/compressed/vmlinux: $(obj)/vmlinux.gz FORCE $(Q)$(MAKE) $(build)=$(obj)/compressed $@ -targets += $(dtb-y) - -$(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y)) - install: sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) System.map "$(INSTALL_PATH)" diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 9bacffa3b72e..b5845146451b 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile @@ -293,9 +293,6 @@ $(BOOT_TARGETS2): vmlinux bootwrapper_install: $(Q)$(MAKE) $(build)=$(boot) $(patsubst %,$(boot)/%,$@) -%.dtb: scripts - $(Q)$(MAKE) $(build)=$(boot)/dts $(patsubst %,$(boot)/dts/%,$@) - # Used to create 'merged defconfigs' # To use it $(call) it with the first argument as the base defconfig # and the second argument as a space separated list of .config files to merge, diff --git a/arch/xtensa/Makefile b/arch/xtensa/Makefile index 3a934b72a272..2c1b20cf75c2 100644 --- a/arch/xtensa/Makefile +++ b/arch/xtensa/Makefile @@ -84,28 +84,18 @@ LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name) head-y := arch/xtensa/kernel/head.o core-y += arch/xtensa/kernel/ arch/xtensa/mm/ core-y += $(buildvar) $(buildplf) +core-y += arch/xtensa/boot/dts/ libs-y += arch/xtensa/lib/ $(LIBGCC) drivers-$(CONFIG_OPROFILE) += arch/xtensa/oprofile/ -ifneq ($(CONFIG_BUILTIN_DTB),"") -core-$(CONFIG_OF) += arch/xtensa/boot/dts/ -endif - boot := arch/xtensa/boot all Image zImage uImage: vmlinux $(Q)$(MAKE) $(build)=$(boot) $@ -%.dtb: - $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@ - -dtbs: scripts - $(Q)$(MAKE) $(build)=$(boot)/dts - define archhelp @echo '* Image - Kernel ELF image with reset vector' @echo '* zImage - Compressed kernel image (arch/xtensa/boot/images/zImage.*)' @echo '* uImage - U-Boot wrapped image' - @echo ' dtbs - Build device tree blobs for enabled boards' endef diff --git a/scripts/Makefile b/scripts/Makefile index 61affa300d25..a716a6b10954 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -39,7 +39,6 @@ build_unifdef: $(obj)/unifdef subdir-$(CONFIG_MODVERSIONS) += genksyms subdir-y += mod subdir-$(CONFIG_SECURITY_SELINUX) += selinux -subdir-$(CONFIG_DTC) += dtc subdir-$(CONFIG_GDB_SCRIPTS) += gdb # Let clean descend into subdirs diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index df0fff252619..9f619f54bc90 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -283,7 +283,7 @@ $(obj)/%.dtb.S: $(obj)/%.dtb FORCE quiet_cmd_dtc = DTC $@ cmd_dtc = mkdir -p $(dir ${dtc-tmp}) ; \ - $(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \ + $(HOSTCC) -E $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \ $(DTC) -O dtb -o $@ -b 0 \ $(addprefix -i,$(dir $<) $(DTC_INCLUDE)) $(DTC_FLAGS) \ -d $(depfile).dtc.tmp $(dtc-tmp) ; \ -- 2.17.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 6/8] kbuild: consolidate Devicetree dtb build rules 2018-08-21 21:55 ` [PATCH 6/8] kbuild: consolidate Devicetree dtb build rules Rob Herring @ 2018-08-26 2:05 ` Masahiro Yamada 2018-08-26 23:56 ` Rob Herring 0 siblings, 1 reply; 5+ messages in thread From: Masahiro Yamada @ 2018-08-26 2:05 UTC (permalink / raw) To: linux-arm-kernel Hi Rob, 2018-08-22 6:55 GMT+09:00 Rob Herring <robh@kernel.org>: > 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. > > Cc: 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: Will Deacon <will.deacon@arm.com> > Cc: Yoshinori Sato <ysato@users.sourceforge.jp> > Cc: Michal Simek <monstr@monstr.eu> > Cc: Ralf Baechle <ralf@linux-mips.org> > Cc: Paul Burton <paul.burton@mips.com> > Cc: James Hogan <jhogan@kernel.org> > Cc: Ley Foon Tan <lftan@altera.com> > 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 at vger.kernel.org > Cc: linux-snps-arc at lists.infradead.org > Cc: linux-arm-kernel at lists.infradead.org > Cc: uclinux-h8-devel at lists.sourceforge.jp > Cc: linux-mips at linux-mips.org > Cc: nios2-dev at lists.rocketboards.org > Cc: linuxppc-dev at lists.ozlabs.org > Cc: linux-xtensa at linux-xtensa.org > Signed-off-by: Rob Herring <robh@kernel.org> > --- > Makefile | 30 ++++++++++++++++++++++++++++++ > arch/arc/Makefile | 6 ------ > arch/arm/Makefile | 20 +------------------- > arch/arm64/Makefile | 17 +---------------- > arch/c6x/Makefile | 2 -- > arch/h8300/Makefile | 11 +---------- > arch/microblaze/Makefile | 4 +--- > arch/mips/Makefile | 15 +-------------- > arch/nds32/Makefile | 2 +- > arch/nios2/Makefile | 7 ------- > arch/nios2/boot/Makefile | 4 ---- > arch/powerpc/Makefile | 3 --- > arch/xtensa/Makefile | 12 +----------- > scripts/Makefile | 1 - > scripts/Makefile.lib | 2 +- > 15 files changed, 38 insertions(+), 98 deletions(-) > > diff --git a/Makefile b/Makefile > index c13f8b85ba60..6d89e673f192 100644 > --- a/Makefile > +++ b/Makefile > @@ -1212,6 +1212,30 @@ kselftest-merge: > $(srctree)/tools/testing/selftests/*/config > +$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig > > +# --------------------------------------------------------------------------- > +# Devicetree files > + > +dtstree := $(wildcard arch/$(SRCARCH)/boot/dts) > + > +ifdef CONFIG_OF_EARLY_FLATTREE > + > +%.dtb %.dtb.S %.dtb.o: | dtc I think the pipe operator is unnecessary because Kbuild will descend to $(dtstree) anyway. > + $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ > + > +PHONY += dtbs > +dtbs: | dtc Ditto. > + $(Q)$(MAKE) $(build)=$(dtstree) > + > +dtbs_install: dtbs > + $(Q)$(MAKE) $(dtbinst)=$(dtstree) > + > +all: dtbs > + > +dtc: > + $(Q)$(MAKE) $(build)=scripts/dtc > + > +endif > + arch/*/boot/dts/ are not only directories that require dtc. $ find drivers/ -name '*.dts' drivers/staging/mt7621-dts/gbpc1.dts drivers/staging/pi433/Documentation/devicetree/pi433-overlay.dts drivers/of/unittest-data/overlay_12.dts drivers/of/unittest-data/overlay.dts drivers/of/unittest-data/overlay_5.dts drivers/of/unittest-data/overlay_bad_symbol.dts drivers/of/unittest-data/overlay_1.dts drivers/of/unittest-data/overlay_bad_phandle.dts drivers/of/unittest-data/overlay_2.dts drivers/of/unittest-data/overlay_15.dts drivers/of/unittest-data/overlay_10.dts drivers/of/unittest-data/testcases.dts drivers/of/unittest-data/overlay_6.dts drivers/of/unittest-data/overlay_13.dts drivers/of/unittest-data/overlay_4.dts drivers/of/unittest-data/overlay_9.dts drivers/of/unittest-data/overlay_3.dts drivers/of/unittest-data/overlay_8.dts drivers/of/unittest-data/overlay_7.dts drivers/of/unittest-data/overlay_11.dts drivers/of/unittest-data/overlay_0.dts drivers/of/unittest-data/overlay_base.dts drivers/gpu/drm/rcar-du/rcar_du_of_lvds_r8a7796.dts drivers/gpu/drm/rcar-du/rcar_du_of_lvds_r8a7795.dts drivers/gpu/drm/rcar-du/rcar_du_of_lvds_r8a7793.dts drivers/gpu/drm/rcar-du/rcar_du_of_lvds_r8a7790.dts drivers/gpu/drm/rcar-du/rcar_du_of_lvds_r8a7791.dts dtc must be built before descending into any directory. $ git clean -f -x $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- defconfig drivers/gpu/drm/rcar-du/ HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o YACC scripts/kconfig/zconf.tab.c LEX scripts/kconfig/zconf.lex.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf *** Default configuration is based on 'multi_v7_defconfig' # # configuration written to .config # scripts/kconfig/conf --syncconfig Kconfig CC kernel/bounds.s CC arch/arm/kernel/asm-offsets.s CALL scripts/checksyscalls.sh <stdin>:1332:2: warning: #warning syscall io_pgetevents not implemented [-Wcpp] CC scripts/mod/empty.o HOSTCC scripts/mod/mk_elfconfig MKELF scripts/mod/elfconfig.h HOSTCC scripts/mod/modpost.o CC scripts/mod/devicetable-offsets.s UPD scripts/mod/devicetable-offsets.h HOSTCC scripts/mod/file2alias.o HOSTCC scripts/mod/sumversion.o HOSTLD scripts/mod/modpost HOSTCC scripts/kallsyms HOSTCC scripts/conmakehash HOSTCC scripts/sortextable HOSTCC scripts/asn1_compiler HOSTCC scripts/extract-cert CC drivers/gpu/drm/rcar-du/rcar_lvds.o AR drivers/gpu/drm/rcar-du/built-in.a CC [M] drivers/gpu/drm/rcar-du/rcar_du_crtc.o CC [M] drivers/gpu/drm/rcar-du/rcar_du_drv.o CC [M] drivers/gpu/drm/rcar-du/rcar_du_encoder.o CC [M] drivers/gpu/drm/rcar-du/rcar_du_group.o CC [M] drivers/gpu/drm/rcar-du/rcar_du_kms.o CC [M] drivers/gpu/drm/rcar-du/rcar_du_plane.o CC [M] drivers/gpu/drm/rcar-du/rcar_du_of.o make[2]: *** No rule to make target 'drivers/gpu/drm/rcar-du/rcar_du_of_lvds_r8a7790.dtb', needed by 'drivers/gpu/drm/rcar-du/rcar_du_of_lvds_r8a7790.dtb.S'. Stop. Makefile:1721: recipe for target 'drivers/gpu/drm/rcar-du/' failed make[1]: *** [drivers/gpu/drm/rcar-du/] Error 2 Makefile:286: recipe for target '__build_one_by_one' failed make: *** [__build_one_by_one] Error 2 > diff --git a/scripts/Makefile b/scripts/Makefile > index 61affa300d25..a716a6b10954 100644 > --- a/scripts/Makefile > +++ b/scripts/Makefile > @@ -39,7 +39,6 @@ build_unifdef: $(obj)/unifdef > subdir-$(CONFIG_MODVERSIONS) += genksyms > subdir-y += mod > subdir-$(CONFIG_SECURITY_SELINUX) += selinux > -subdir-$(CONFIG_DTC) += dtc > subdir-$(CONFIG_GDB_SCRIPTS) += gdb > > # Let clean descend into subdirs You need to 'dtc' here to clean-up scripts/dtc by "make mrproper". subdir- += basic kconfig package gcc-plugins dtc -- Best Regards Masahiro Yamada ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 6/8] kbuild: consolidate Devicetree dtb build rules 2018-08-26 2:05 ` Masahiro Yamada @ 2018-08-26 23:56 ` Rob Herring 2018-09-07 17:07 ` Masahiro Yamada 0 siblings, 1 reply; 5+ messages in thread From: Rob Herring @ 2018-08-26 23:56 UTC (permalink / raw) To: linux-arm-kernel On Sat, Aug 25, 2018 at 9:06 PM Masahiro Yamada <yamada.masahiro@socionext.com> wrote: > > Hi Rob, > > > 2018-08-22 6:55 GMT+09:00 Rob Herring <robh@kernel.org>: > > 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. > > > > Cc: 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: Will Deacon <will.deacon@arm.com> > > Cc: Yoshinori Sato <ysato@users.sourceforge.jp> > > Cc: Michal Simek <monstr@monstr.eu> > > Cc: Ralf Baechle <ralf@linux-mips.org> > > Cc: Paul Burton <paul.burton@mips.com> > > Cc: James Hogan <jhogan@kernel.org> > > Cc: Ley Foon Tan <lftan@altera.com> > > 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 at vger.kernel.org > > Cc: linux-snps-arc at lists.infradead.org > > Cc: linux-arm-kernel at lists.infradead.org > > Cc: uclinux-h8-devel at lists.sourceforge.jp > > Cc: linux-mips at linux-mips.org > > Cc: nios2-dev at lists.rocketboards.org > > Cc: linuxppc-dev at lists.ozlabs.org > > Cc: linux-xtensa at linux-xtensa.org > > Signed-off-by: Rob Herring <robh@kernel.org> > > --- > > Makefile | 30 ++++++++++++++++++++++++++++++ > > arch/arc/Makefile | 6 ------ > > arch/arm/Makefile | 20 +------------------- > > arch/arm64/Makefile | 17 +---------------- > > arch/c6x/Makefile | 2 -- > > arch/h8300/Makefile | 11 +---------- > > arch/microblaze/Makefile | 4 +--- > > arch/mips/Makefile | 15 +-------------- > > arch/nds32/Makefile | 2 +- > > arch/nios2/Makefile | 7 ------- > > arch/nios2/boot/Makefile | 4 ---- > > arch/powerpc/Makefile | 3 --- > > arch/xtensa/Makefile | 12 +----------- > > scripts/Makefile | 1 - > > scripts/Makefile.lib | 2 +- > > 15 files changed, 38 insertions(+), 98 deletions(-) > > > > diff --git a/Makefile b/Makefile > > index c13f8b85ba60..6d89e673f192 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -1212,6 +1212,30 @@ kselftest-merge: > > $(srctree)/tools/testing/selftests/*/config > > +$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig > > > > +# --------------------------------------------------------------------------- > > +# Devicetree files > > + > > +dtstree := $(wildcard arch/$(SRCARCH)/boot/dts) BTW, there's an error here too. It doesn't work right with KBUILD_OUTPUT set and should be: ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) dtstree := arch/$(SRCARCH)/boot/dts endif > > + > > +ifdef CONFIG_OF_EARLY_FLATTREE > > + > > +%.dtb %.dtb.S %.dtb.o: | dtc > > I think the pipe operator is unnecessary > because Kbuild will descend to $(dtstree) anyway. The pipe means 'order-only', right? So it is just a weaker dependency for things which are not input files as dtc is not. The 'dtc' here is just the dtc rule below, not the actual executable. Or am I missing something? > > + $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ > > + > > +PHONY += dtbs > > +dtbs: | dtc > > Ditto. > > > > + $(Q)$(MAKE) $(build)=$(dtstree) > > + > > +dtbs_install: dtbs > > + $(Q)$(MAKE) $(dtbinst)=$(dtstree) > > + > > +all: dtbs > > + > > +dtc: > > + $(Q)$(MAKE) $(build)=scripts/dtc > > + > > +endif > > + > > > arch/*/boot/dts/ are not only directories that > require dtc. Ah yes, of course... > > diff --git a/scripts/Makefile b/scripts/Makefile > > index 61affa300d25..a716a6b10954 100644 > > --- a/scripts/Makefile > > +++ b/scripts/Makefile > > @@ -39,7 +39,6 @@ build_unifdef: $(obj)/unifdef > > subdir-$(CONFIG_MODVERSIONS) += genksyms > > subdir-y += mod > > subdir-$(CONFIG_SECURITY_SELINUX) += selinux > > -subdir-$(CONFIG_DTC) += dtc > > subdir-$(CONFIG_GDB_SCRIPTS) += gdb > > > > # Let clean descend into subdirs Looks like I need to leave this line to fix the above and cleaning. Thanks for the review. Rob ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 6/8] kbuild: consolidate Devicetree dtb build rules 2018-08-26 23:56 ` Rob Herring @ 2018-09-07 17:07 ` Masahiro Yamada 0 siblings, 0 replies; 5+ messages in thread From: Masahiro Yamada @ 2018-09-07 17:07 UTC (permalink / raw) To: linux-arm-kernel 2018-08-27 8:56 GMT+09:00 Rob Herring <robh@kernel.org>: > On Sat, Aug 25, 2018 at 9:06 PM Masahiro Yamada > <yamada.masahiro@socionext.com> wrote: >> >> Hi Rob, >> >> >> 2018-08-22 6:55 GMT+09:00 Rob Herring <robh@kernel.org>: >> > 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. >> > >> > Cc: 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: Will Deacon <will.deacon@arm.com> >> > Cc: Yoshinori Sato <ysato@users.sourceforge.jp> >> > Cc: Michal Simek <monstr@monstr.eu> >> > Cc: Ralf Baechle <ralf@linux-mips.org> >> > Cc: Paul Burton <paul.burton@mips.com> >> > Cc: James Hogan <jhogan@kernel.org> >> > Cc: Ley Foon Tan <lftan@altera.com> >> > 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 at vger.kernel.org >> > Cc: linux-snps-arc at lists.infradead.org >> > Cc: linux-arm-kernel at lists.infradead.org >> > Cc: uclinux-h8-devel at lists.sourceforge.jp >> > Cc: linux-mips at linux-mips.org >> > Cc: nios2-dev at lists.rocketboards.org >> > Cc: linuxppc-dev at lists.ozlabs.org >> > Cc: linux-xtensa at linux-xtensa.org >> > Signed-off-by: Rob Herring <robh@kernel.org> >> > --- >> > Makefile | 30 ++++++++++++++++++++++++++++++ >> > arch/arc/Makefile | 6 ------ >> > arch/arm/Makefile | 20 +------------------- >> > arch/arm64/Makefile | 17 +---------------- >> > arch/c6x/Makefile | 2 -- >> > arch/h8300/Makefile | 11 +---------- >> > arch/microblaze/Makefile | 4 +--- >> > arch/mips/Makefile | 15 +-------------- >> > arch/nds32/Makefile | 2 +- >> > arch/nios2/Makefile | 7 ------- >> > arch/nios2/boot/Makefile | 4 ---- >> > arch/powerpc/Makefile | 3 --- >> > arch/xtensa/Makefile | 12 +----------- >> > scripts/Makefile | 1 - >> > scripts/Makefile.lib | 2 +- >> > 15 files changed, 38 insertions(+), 98 deletions(-) >> > >> > diff --git a/Makefile b/Makefile >> > index c13f8b85ba60..6d89e673f192 100644 >> > --- a/Makefile >> > +++ b/Makefile >> > @@ -1212,6 +1212,30 @@ kselftest-merge: >> > $(srctree)/tools/testing/selftests/*/config >> > +$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig >> > >> > +# --------------------------------------------------------------------------- >> > +# Devicetree files >> > + >> > +dtstree := $(wildcard arch/$(SRCARCH)/boot/dts) > > BTW, there's an error here too. It doesn't work right with > KBUILD_OUTPUT set and should be: > > ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),) > dtstree := arch/$(SRCARCH)/boot/dts > endif > >> > + >> > +ifdef CONFIG_OF_EARLY_FLATTREE >> > + >> > +%.dtb %.dtb.S %.dtb.o: | dtc >> >> I think the pipe operator is unnecessary >> because Kbuild will descend to $(dtstree) anyway. > > The pipe means 'order-only', right? Yes. > So it is just a weaker dependency > for things which are not input files as dtc is not. The 'dtc' here is > just the dtc rule below, not the actual executable. Or am I missing > something? The pipe is used when - we want to make sure the weaker prerequisite exists - but, we do not want to execute the recipe even if the weaker prerequisite is updated In this case, we want to execute the recipe _all_the_time_. We compare the timestamp between %.dtb and %.dts in the sub-directory. We never know the real depenency until the following recipe is run $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@ PHONY += dtbs dtbs: | dtc $(Q)$(MAKE) $(build)=$(dtstree) Here 'dtbs' is a PHONY target. We always want to run the recipe. The pipe operator is not sensible. -- Best Regards Masahiro Yamada ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-09-07 17:07 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-08-21 21:55 [PATCH 0/8] Devicetree build consolidation Rob Herring 2018-08-21 21:55 ` [PATCH 6/8] kbuild: consolidate Devicetree dtb build rules Rob Herring 2018-08-26 2:05 ` Masahiro Yamada 2018-08-26 23:56 ` Rob Herring 2018-09-07 17:07 ` Masahiro Yamada
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).