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
Acked-by: Paul Burton
Acked-by: Ley Foon Tan
Cc: Masahiro Yamada
Cc: Michal Marek
Cc: Vineet Gupta
Cc: Russell King
Cc: Catalin Marinas
Cc: Yoshinori Sato
Cc: Michal Simek
Cc: Ralf Baechle
Cc: James Hogan
Cc: Benjamin Herrenschmidt
Cc: Paul Mackerras
Cc: Michael Ellerman
Cc: Chris Zankel
Cc: Max Filippov
Cc: linux-kbu...@vger.kernel.org
Cc: linux-snps-arc@lists.infradead.org
Cc: linux-arm-ker...@lists.infradead.org
Cc: uclinux-h8-de...@lists.sourceforge.jp
Cc: linux-m...@linux-mips.org
Cc: nios2-...@lists.rocketboards.org
Cc: linuxppc-...@lists.ozlabs.org
Cc: linux-xte...@linux-xtensa.org
Signed-off-by: Rob Herring
---
v4:
- Make dtbs and %.dtb rules depend on arch/$ARCH/boot/dts path rather than
CONFIG_OF_EARLY_FLATTREE
- Fix install path missing kernel version for dtbs_install
- Fix "make CONFIG_OF_ALL_DTBS=y" for arches like ARM which selectively
enable CONFIG_OF (and therefore dtc)
Makefile | 37 ++-
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 | 3 +--
scripts/Makefile.lib | 2 +-
scripts/dtc/Makefile | 2 +-
17 files changed, 48 insertions(+), 101 deletions(-)
diff --git a/Makefile b/Makefile
index 6c3da3e10f07..251875470c5b 100644
--- a/Makefile
+++ b/Makefile
@@ -1061,7 +1061,7 @@ include/config/kernel.release: $(srctree)/Makefile FORCE
# Carefully list dependencies so we do not try to build scripts twice
# in parallel
PHONY += scripts
-scripts: scripts_basic asm-generic gcc-plugins $(autoksyms_h)
+scripts: scripts_basic scripts_dtc asm-generic gcc-plugins $(autoksyms_h)
$(Q)$(MAKE) $(build)=$(@)
# Things we need to do before we recursively start building the kernel
@@ -1205,6 +1205,35 @@ 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
+
+ifneq ($(dtstree),)
+
+%.dtb: prepare3 scripts_dtc
+ $(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
+
+PHONY += dtbs dtbs_install
+dtbs: prepare3 scripts_dtc
+ $(Q)$(MAKE) $(build)=$(dtstree)
+
+dtbs_install:
+ $(Q)$(MAKE) $(dtbinst)=$(dtstree)
+
+ifdef CONFIG_OF_EARLY_FLATTREE
+all: dtbs
+endif
+
+endif
+
+PHONY += scripts_dtc
+scripts_dtc: scripts_basic
+ $(Q)$(MAKE) $(build)=scripts/dtc
+
# ---
# Modules
@@ -1414,6 +1443,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 99cce77ab98f..caece8866080 100644
--- a/arch/arc/Makefile
+++ b/arch/arc/Makefile
@@ -124,11 +124,5 @@ boot_targets += uImage uImage.bin uImage.gz
$(boot_targets): vmlinux
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
-%.dtb %.dtb.S %.dtb.o: scripts