2018-08-27 8:56 GMT+09:00 Rob Herring <robh@xxxxxxxxxx>: > On Sat, Aug 25, 2018 at 9:06 PM Masahiro Yamada > <yamada.masahiro@xxxxxxxxxxxxx> wrote: >> >> Hi Rob, >> >> >> 2018-08-22 6:55 GMT+09:00 Rob Herring <robh@xxxxxxxxxx>: >> > 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@xxxxxxxxxxxxx> >> > Cc: Michal Marek <michal.lkml@xxxxxxxxxxx> >> > Cc: Vineet Gupta <vgupta@xxxxxxxxxxxx> >> > Cc: Russell King <linux@xxxxxxxxxxxxxxx> >> > Cc: Catalin Marinas <catalin.marinas@xxxxxxx> >> > Cc: Will Deacon <will.deacon@xxxxxxx> >> > Cc: Yoshinori Sato <ysato@xxxxxxxxxxxxxxxxxxxx> >> > Cc: Michal Simek <monstr@xxxxxxxxx> >> > Cc: Ralf Baechle <ralf@xxxxxxxxxxxxxx> >> > Cc: Paul Burton <paul.burton@xxxxxxxx> >> > Cc: James Hogan <jhogan@xxxxxxxxxx> >> > Cc: Ley Foon Tan <lftan@xxxxxxxxxx> >> > Cc: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> >> > Cc: Paul Mackerras <paulus@xxxxxxxxx> >> > Cc: Michael Ellerman <mpe@xxxxxxxxxxxxxx> >> > Cc: Chris Zankel <chris@xxxxxxxxxx> >> > Cc: Max Filippov <jcmvbkbc@xxxxxxxxx> >> > Cc: linux-kbuild@xxxxxxxxxxxxxxx >> > Cc: linux-snps-arc@xxxxxxxxxxxxxxxxxxx >> > Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx >> > Cc: uclinux-h8-devel@xxxxxxxxxxxxxxxxxxxx >> > Cc: linux-mips@xxxxxxxxxxxxxx >> > Cc: nios2-dev@xxxxxxxxxxxxxxxxxxxxxx >> > Cc: linuxppc-dev@xxxxxxxxxxxxxxxx >> > Cc: linux-xtensa@xxxxxxxxxxxxxxxx >> > Signed-off-by: Rob Herring <robh@xxxxxxxxxx> >> > --- >> > 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