mbox series

[v2,0/9] Devicetree build consolidation

Message ID 20180905235327.5996-1-robh@kernel.org
Headers show
Series Devicetree build consolidation | expand

Message

Rob Herring (Arm) Sept. 5, 2018, 11:53 p.m. UTC
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

v2:
 - Fix $arch/boot/dts path check for out of tree builds
 - Fix dtc dependency for building built-in dtbs
 - Fix microblaze built-in dtb building
 - Add dtbs target for microblaze

Rob Herring (9):
  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
  microblaze: enable building all dtbs

 Makefile                           | 32 +++++++++++++++++++
 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/microblaze/boot/dts/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.lib               |  2 +-
 25 files changed, 93 insertions(+), 188 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

Comments

Paul Burton Sept. 6, 2018, 5:11 p.m. UTC | #1
Hi Rob,

On Wed, Sep 05, 2018 at 06:53:24PM -0500, Rob Herring wrote:
> 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.

> 

>%

> Signed-off-by: Rob Herring <robh@kernel.org>

> ---

> Please ack so I can take the whole series via the DT tree.


For MIPS:

    Acked-by: Paul Burton <paul.burton@mips.com>


Thanks,
    Paul
Tan, Ley Foon Sept. 7, 2018, 2:08 a.m. UTC | #2
On Wed, 2018-09-05 at 18:53 -0500, Rob Herring wrote:
> 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@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>

> ---

> Please ack so I can take the whole series via the DT tree.

> 

For nios2:

Acked-by: Ley Foon Tan <ley.foon.tan@intel.com>



Regards
Ley Foon
Tan, Ley Foon Sept. 7, 2018, 2:21 a.m. UTC | #3
On Wed, 2018-09-05 at 18:53 -0500, Rob Herring wrote:
> Align nios2 with other architectures which build the dtb files in the

> same directory as the dts files. This is also in line with most other

> build targets which are located in the same directory as the source.

> This move will help enable the 'dtbs' target which builds all the

> dtbs

> regardless of kernel config.

> 

> This transition could break some scripts if they expect dtb files in

> the old location.

> 

> Cc: Ley Foon Tan <lftan@altera.com>

> Cc: nios2-dev@lists.rocketboards.org

> Signed-off-by: Rob Herring <robh@kernel.org>

> ---

> Please ack so I can take the whole series via the DT tree.

> 

>  arch/nios2/Makefile          | 4 ++--

>  arch/nios2/boot/Makefile     | 4 ----

>  arch/nios2/boot/dts/Makefile | 1 +

>  3 files changed, 3 insertions(+), 6 deletions(-)

>  create mode 100644 arch/nios2/boot/dts/Makefile

> 

> diff --git a/arch/nios2/Makefile b/arch/nios2/Makefile

> index 8673a79dca9c..50eece1c6adb 100644

> --- a/arch/nios2/Makefile

> +++ b/arch/nios2/Makefile

> @@ -59,10 +59,10 @@ archclean:

>         $(Q)$(MAKE) $(clean)=$(nios2-boot)

> 

>  %.dtb: | scripts

> -       $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@

> +       $(Q)$(MAKE) $(build)=$(nios2-boot)/dts $(nios2-boot)/dts/$@

> 

>  dtbs:

> -       $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@

> +       $(Q)$(MAKE) $(build)=$(nios2-boot)/dts

> 

>  $(BOOT_TARGETS): vmlinux

>         $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@

> diff --git a/arch/nios2/boot/Makefile b/arch/nios2/boot/Makefile

> index 2ba23a679732..007586094dde 100644

> --- a/arch/nios2/boot/Makefile

> +++ b/arch/nios2/boot/Makefile

> @@ -47,10 +47,6 @@ obj-$(CONFIG_NIOS2_DTB_SOURCE_BOOL) +=

> linked_dtb.o

> 

>  targets += $(dtb-y)

> 

> -# Rule to build device tree blobs with make command

> -$(obj)/%.dtb: $(src)/dts/%.dts FORCE

> -       $(call if_changed_dep,dtc)

> -

>  $(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y))

> 

>  install:

> diff --git a/arch/nios2/boot/dts/Makefile

> b/arch/nios2/boot/dts/Makefile

> new file mode 100644

> index 000000000000..f66554cd5c45

> --- /dev/null

> +++ b/arch/nios2/boot/dts/Makefile

> @@ -0,0 +1 @@

> +# SPDX-License-Identifier: GPL-2.0

> --

> 2.17.1

> 

Hi Rob

I have synced your all-dtbs branch from here: https://git.kernel.org/pu
b/scm/linux/kernel/git/robh/linux.git/log/?h=all-dtbs

It shows error when compile kernel image and also when "make
dtbs_install".



make dtbs_install
make[1]: *** No rule to make target
'arch/nios2/boot/dts/arch/nios2/boot/dts/10m50_devboard.dtb', needed by
'arch/nios2/boot/dts/arch/nios2/boot/dts/10m50_devboard.dtb.S'.  Stop.
Makefile:1229: recipe for target 'dtbs' failed
make: *** [dtbs] Error 2

Regards
Ley Foon
Masahiro Yamada Sept. 7, 2018, 10:32 a.m. UTC | #4
2018-09-06 8:53 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@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>

> ---

> Please ack so I can take the whole series via the DT tree.

>

> v2:

>  - Fix $arch/boot/dts path check for out of tree builds

>  - Fix dtc dependency for building built-in dtbs

>  - Fix microblaze built-in dtb building



This breaks parallel building
because two threads could descend into scripts/dtc
at the same time.

'all' depends on both 'scripts' and 'dtc'.

* 'scripts' target -- descends into scripts/, then scripts/dtc
* 'dtc' target     -- descents into scripts/dtc directly





-- 
Best Regards
Masahiro Yamada
Rob Herring (Arm) Sept. 7, 2018, 12:17 p.m. UTC | #5
On Fri, Sep 7, 2018 at 5:33 AM Masahiro Yamada
<yamada.masahiro@socionext.com> wrote:
>

> 2018-09-06 8:53 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@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>

> > ---

> > Please ack so I can take the whole series via the DT tree.

> >

> > v2:

> >  - Fix $arch/boot/dts path check for out of tree builds

> >  - Fix dtc dependency for building built-in dtbs

> >  - Fix microblaze built-in dtb building

>

>

> This breaks parallel building

> because two threads could descend into scripts/dtc

> at the same time.

>

> 'all' depends on both 'scripts' and 'dtc'.

>

> * 'scripts' target -- descends into scripts/, then scripts/dtc

> * 'dtc' target     -- descents into scripts/dtc directly


Any suggestions for how to fix given the problem with depending on
scripts? I suppose I could make scripts depend on dtc instead, but I'd
be back to needing to fix cleaning. Or I could just skip removing the
cross compiler dependency for now.

Rob
Masahiro Yamada Sept. 7, 2018, 4:47 p.m. UTC | #6
Hi Rob,

2018-09-07 21:17 GMT+09:00 Rob Herring <robh@kernel.org>:
> On Fri, Sep 7, 2018 at 5:33 AM Masahiro Yamada

> <yamada.masahiro@socionext.com> wrote:

>>

>> 2018-09-06 8:53 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@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>

>> > ---

>> > Please ack so I can take the whole series via the DT tree.

>> >

>> > v2:

>> >  - Fix $arch/boot/dts path check for out of tree builds

>> >  - Fix dtc dependency for building built-in dtbs

>> >  - Fix microblaze built-in dtb building

>>

>>

>> This breaks parallel building

>> because two threads could descend into scripts/dtc

>> at the same time.

>>

>> 'all' depends on both 'scripts' and 'dtc'.

>>

>> * 'scripts' target -- descends into scripts/, then scripts/dtc

>> * 'dtc' target     -- descents into scripts/dtc directly

>

> Any suggestions for how to fix given the problem with depending on

> scripts? I suppose I could make scripts depend on dtc instead, but I'd

> be back to needing to fix cleaning.


How about making 'prepare' depend on 'dtc'?

Then, remove
subdir-$(CONFIG_DTC)         += dtc
from scripts/Makefile

but, add dtc to subdir-


> Or I could just skip removing the

> cross compiler dependency for now.


I want to build scripts/
without target compiler.

modpost is a special host-program
that depends on $(CC).

I will take a look at it
when I find some time.


-- 
Best Regards
Masahiro Yamada
Rob Herring (Arm) Sept. 7, 2018, 6:09 p.m. UTC | #7
On Thu, Sep 6, 2018 at 9:21 PM Ley Foon Tan <ley.foon.tan@intel.com> wrote:
>

> On Wed, 2018-09-05 at 18:53 -0500, Rob Herring wrote:

> > Align nios2 with other architectures which build the dtb files in the

> > same directory as the dts files. This is also in line with most other

> > build targets which are located in the same directory as the source.

> > This move will help enable the 'dtbs' target which builds all the

> > dtbs

> > regardless of kernel config.

> >

> > This transition could break some scripts if they expect dtb files in

> > the old location.

> >

> > Cc: Ley Foon Tan <lftan@altera.com>

> > Cc: nios2-dev@lists.rocketboards.org

> > Signed-off-by: Rob Herring <robh@kernel.org>

> > ---

> > Please ack so I can take the whole series via the DT tree.

> >

> >  arch/nios2/Makefile          | 4 ++--

> >  arch/nios2/boot/Makefile     | 4 ----

> >  arch/nios2/boot/dts/Makefile | 1 +

> >  3 files changed, 3 insertions(+), 6 deletions(-)

> >  create mode 100644 arch/nios2/boot/dts/Makefile

> >

> > diff --git a/arch/nios2/Makefile b/arch/nios2/Makefile

> > index 8673a79dca9c..50eece1c6adb 100644

> > --- a/arch/nios2/Makefile

> > +++ b/arch/nios2/Makefile

> > @@ -59,10 +59,10 @@ archclean:

> >         $(Q)$(MAKE) $(clean)=$(nios2-boot)

> >

> >  %.dtb: | scripts

> > -       $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@

> > +       $(Q)$(MAKE) $(build)=$(nios2-boot)/dts $(nios2-boot)/dts/$@

> >

> >  dtbs:

> > -       $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@

> > +       $(Q)$(MAKE) $(build)=$(nios2-boot)/dts

> >

> >  $(BOOT_TARGETS): vmlinux

> >         $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@

> > diff --git a/arch/nios2/boot/Makefile b/arch/nios2/boot/Makefile

> > index 2ba23a679732..007586094dde 100644

> > --- a/arch/nios2/boot/Makefile

> > +++ b/arch/nios2/boot/Makefile

> > @@ -47,10 +47,6 @@ obj-$(CONFIG_NIOS2_DTB_SOURCE_BOOL) +=

> > linked_dtb.o

> >

> >  targets += $(dtb-y)

> >

> > -# Rule to build device tree blobs with make command

> > -$(obj)/%.dtb: $(src)/dts/%.dts FORCE

> > -       $(call if_changed_dep,dtc)

> > -

> >  $(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y))

> >

> >  install:

> > diff --git a/arch/nios2/boot/dts/Makefile

> > b/arch/nios2/boot/dts/Makefile

> > new file mode 100644

> > index 000000000000..f66554cd5c45

> > --- /dev/null

> > +++ b/arch/nios2/boot/dts/Makefile

> > @@ -0,0 +1 @@

> > +# SPDX-License-Identifier: GPL-2.0

> > --

> > 2.17.1

> >

> Hi Rob

>

> I have synced your all-dtbs branch from here: https://git.kernel.org/pu

> b/scm/linux/kernel/git/robh/linux.git/log/?h=all-dtbs

>

> It shows error when compile kernel image and also when "make

> dtbs_install".


Can you fetch the branch again and try it. I fixed a few dependency issues.

> make dtbs_install

> make[1]: *** No rule to make target

> 'arch/nios2/boot/dts/arch/nios2/boot/dts/10m50_devboard.dtb', needed by

> 'arch/nios2/boot/dts/arch/nios2/boot/dts/10m50_devboard.dtb.S'.  Stop.


What is the value of CONFIG_NIOS2_DTB_SOURCE? As patch 3 notes, it now
should not have any path.

If that's a problem, I could take the basename to strip the path, but
then sub directories wouldn't work either.

BTW, next up, I want to consolidate the config variables for built-in dtbs.

Rob
Rob Herring (Arm) Sept. 10, 2018, 2:35 p.m. UTC | #8
On Sun, Sep 9, 2018 at 6:28 PM Masahiro Yamada
<yamada.masahiro@socionext.com> wrote:
>

> 2018-09-06 8:53 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@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>

> > ---

> > Please ack so I can take the whole series via the DT tree.

> >

> > v2:

> >  - Fix $arch/boot/dts path check for out of tree builds

> >  - Fix dtc dependency for building built-in dtbs

> >  - Fix microblaze built-in dtb building

> >

> >  Makefile                          | 32 +++++++++++++++++++++++++++++++

> >  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/microblaze/boot/dts/Makefile |  2 ++

> >  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.lib              |  2 +-

> >  15 files changed, 42 insertions(+), 97 deletions(-)

> >

> > diff --git a/Makefile b/Makefile

> > index 2b458801ba74..bc18dbbc16c5 100644

> > --- a/Makefile

> > +++ b/Makefile

> > @@ -1212,6 +1212,32 @@ kselftest-merge:

> >                 $(srctree)/tools/testing/selftests/*/config

> >         +$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig

> >

> > +# ---------------------------------------------------------------------------

> > +# Devicetree files

> > +

> > +ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),)

> > +dtstree := arch/$(SRCARCH)/boot/dts

> > +endif

> > +

> > +ifdef CONFIG_OF_EARLY_FLATTREE

> > +

> > +%.dtb %.dtb.S %.dtb.o: | dtc

> > +       $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@

>

>

> Hmm, I was worried about '%.dtb.o: | dtc'

> but seems working.

>

> Compiling %.S -> %.o requires objtool for x86,

> but x86 does not support DT.


Well, x86 does support DT to some extent. There's 2 platforms and the
DT unittests build and run on x86.

Actually, we can remove "%.dtb.S %.dtb.o" because we don't need those
as top-level build targets. Must have been a copy-n-paste relic from
before having common rules.

>

> If CONFIG_MODVERSIONS=y, scripts/genksyms/genksyms is required,

> %.dtb.S does not contain EXPORT_SYMBOL.


Okay, but that shouldn't affect any of this. We only build *.dtb.S
when doing built-in dtbs.

> BTW, 'dtc' should be a PHONY target.


Right, I found that too.

Rob
Tan, Ley Foon Sept. 12, 2018, 3:18 a.m. UTC | #9
On Fri, 2018-09-07 at 13:09 -0500, Rob Herring wrote:
> On Thu, Sep 6, 2018 at 9:21 PM Ley Foon Tan <ley.foon.tan@intel.com>

> wrote:

> > 

> > 

> > On Wed, 2018-09-05 at 18:53 -0500, Rob Herring wrote:

> > > 

> > > Align nios2 with other architectures which build the dtb files in

> > > the

> > > same directory as the dts files. This is also in line with most

> > > other

> > > build targets which are located in the same directory as the

> > > source.

> > > This move will help enable the 'dtbs' target which builds all the

> > > dtbs

> > > regardless of kernel config.

> > > 

> > > This transition could break some scripts if they expect dtb files

> > > in

> > > the old location.

> > > 

> > > Cc: Ley Foon Tan <lftan@altera.com>

> > > Cc: nios2-dev@lists.rocketboards.org

> > > Signed-off-by: Rob Herring <robh@kernel.org>

> > > ---

> > > Please ack so I can take the whole series via the DT tree.

> > > 

> > >  arch/nios2/Makefile          | 4 ++--

> > >  arch/nios2/boot/Makefile     | 4 ----

> > >  arch/nios2/boot/dts/Makefile | 1 +

> > >  3 files changed, 3 insertions(+), 6 deletions(-)

> > >  create mode 100644 arch/nios2/boot/dts/Makefile

> > > 

> > > diff --git a/arch/nios2/Makefile b/arch/nios2/Makefile

> > > index 8673a79dca9c..50eece1c6adb 100644

> > > --- a/arch/nios2/Makefile

> > > +++ b/arch/nios2/Makefile

> > > @@ -59,10 +59,10 @@ archclean:

> > >         $(Q)$(MAKE) $(clean)=$(nios2-boot)

> > > 

> > >  %.dtb: | scripts

> > > -       $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@

> > > +       $(Q)$(MAKE) $(build)=$(nios2-boot)/dts $(nios2-

> > > boot)/dts/$@

> > > 

> > >  dtbs:

> > > -       $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@

> > > +       $(Q)$(MAKE) $(build)=$(nios2-boot)/dts

> > > 

> > >  $(BOOT_TARGETS): vmlinux

> > >         $(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@

> > > diff --git a/arch/nios2/boot/Makefile b/arch/nios2/boot/Makefile

> > > index 2ba23a679732..007586094dde 100644

> > > --- a/arch/nios2/boot/Makefile

> > > +++ b/arch/nios2/boot/Makefile

> > > @@ -47,10 +47,6 @@ obj-$(CONFIG_NIOS2_DTB_SOURCE_BOOL) +=

> > > linked_dtb.o

> > > 

> > >  targets += $(dtb-y)

> > > 

> > > -# Rule to build device tree blobs with make command

> > > -$(obj)/%.dtb: $(src)/dts/%.dts FORCE

> > > -       $(call if_changed_dep,dtc)

> > > -

> > >  $(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y))

> > > 

> > >  install:

> > > diff --git a/arch/nios2/boot/dts/Makefile

> > > b/arch/nios2/boot/dts/Makefile

> > > new file mode 100644

> > > index 000000000000..f66554cd5c45

> > > --- /dev/null

> > > +++ b/arch/nios2/boot/dts/Makefile

> > > @@ -0,0 +1 @@

> > > +# SPDX-License-Identifier: GPL-2.0

> > > --

> > > 2.17.1

> > > 

> > Hi Rob

> > 

> > I have synced your all-dtbs branch from here: https://git.kernel.or

> > g/pu

> > b/scm/linux/kernel/git/robh/linux.git/log/?h=all-dtbs

> > 

> > It shows error when compile kernel image and also when "make

> > dtbs_install".

> Can you fetch the branch again and try it. I fixed a few dependency

> issues.

> 

> > 

> > make dtbs_install

> > make[1]: *** No rule to make target

> > 'arch/nios2/boot/dts/arch/nios2/boot/dts/10m50_devboard.dtb',

> > needed by

> > 'arch/nios2/boot/dts/arch/nios2/boot/dts/10m50_devboard.dtb.S'.  St

> > op.

> What is the value of CONFIG_NIOS2_DTB_SOURCE? As patch 3 notes, it

> now

> should not have any path.

> 

> If that's a problem, I could take the basename to strip the path, but

> then sub directories wouldn't work either.

> 

> BTW, next up, I want to consolidate the config variables for built-in 

> dtbs.

> 


Hi Rob

CONFIG_NIOS2_DTB_SOURCE has the relative path to dts file,
arch/nios2/boot/dts/arch/nios2/boot/dts/10m50_devboard.dts

Change CONFIG_NIOS2_DTB_SOURCE=10m50_devboard.dtb.S fix the dtb build
issue.


Regards
Ley Foon