diff mbox series

[U-Boot,v2,4/4] pylibfdt: compile pylibfdt only when dtoc/binman is necessary

Message ID 1508215364-14631-5-git-send-email-yamada.masahiro@socionext.com
State Accepted
Delegated to: Tom Rini
Headers show
Series pylibfdt: compile pylibfdt in scripts/dtc/pylibfdt only when necessary | expand

Commit Message

Masahiro Yamada Oct. 17, 2017, 4:42 a.m. UTC
Currently, pylibfdt is always compiled if swig is installed on your
machine.  It is really annoying because most of targets (excepts
x86, sunxi, rockchip) do not use dtoc or binman.

"checkbinman" and "checkdtoc" are wrong.  It is odd that the final
build stage checks if we have built necessary tools.  If your platform
depends on dtoc/binman, you must be able to build pylibfdt.  If swig
is not installed, it should fail immediately.

I added PYLIBFDT, DTOC, BINMAN entries to Kconfig.  They should be
property select:ed by platforms that need them.  Kbuild will descend
into scripts/dtc/pylibfdt/ only when CONFIG_PYLIBFDT is enabled.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---

 Makefile             | 17 ++---------------
 arch/arm/Kconfig     |  1 +
 arch/x86/Kconfig     |  1 +
 dts/Kconfig          | 13 +++++++++++++
 scripts/Makefile.spl | 15 ++-------------
 scripts/dtc/Makefile |  2 +-
 6 files changed, 20 insertions(+), 29 deletions(-)

Comments

Simon Glass Oct. 22, 2017, 2:35 p.m. UTC | #1
Hi Masahiro,

On 17 October 2017 at 06:42, Masahiro Yamada
<yamada.masahiro@socionext.com> wrote:
> Currently, pylibfdt is always compiled if swig is installed on your
> machine.  It is really annoying because most of targets (excepts
> x86, sunxi, rockchip) do not use dtoc or binman.
>
> "checkbinman" and "checkdtoc" are wrong.  It is odd that the final
> build stage checks if we have built necessary tools.  If your platform
> depends on dtoc/binman, you must be able to build pylibfdt.  If swig
> is not installed, it should fail immediately.
>
> I added PYLIBFDT, DTOC, BINMAN entries to Kconfig.  They should be
> property select:ed by platforms that need them.  Kbuild will descend
> into scripts/dtc/pylibfdt/ only when CONFIG_PYLIBFDT is enabled.
>
> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> ---
>
>  Makefile             | 17 ++---------------
>  arch/arm/Kconfig     |  1 +
>  arch/x86/Kconfig     |  1 +
>  dts/Kconfig          | 13 +++++++++++++
>  scripts/Makefile.spl | 15 ++-------------
>  scripts/dtc/Makefile |  2 +-
>  6 files changed, 20 insertions(+), 29 deletions(-)
>

I think this is a reasonable change.

Reviewed-by: Simon Glass <sjg@chromium.org>

Regards,
Simon
Tom Rini Nov. 17, 2017, 3:43 p.m. UTC | #2
On Tue, Oct 17, 2017 at 01:42:44PM +0900, Masahiro Yamada wrote:

> Currently, pylibfdt is always compiled if swig is installed on your
> machine.  It is really annoying because most of targets (excepts
> x86, sunxi, rockchip) do not use dtoc or binman.
> 
> "checkbinman" and "checkdtoc" are wrong.  It is odd that the final
> build stage checks if we have built necessary tools.  If your platform
> depends on dtoc/binman, you must be able to build pylibfdt.  If swig
> is not installed, it should fail immediately.
> 
> I added PYLIBFDT, DTOC, BINMAN entries to Kconfig.  They should be
> property select:ed by platforms that need them.  Kbuild will descend
> into scripts/dtc/pylibfdt/ only when CONFIG_PYLIBFDT is enabled.
> 
> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 40cd61a..8f3fcfe 100644
--- a/Makefile
+++ b/Makefile
@@ -1135,7 +1135,7 @@  cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \
 
 u-boot.rom: u-boot-x86-16bit.bin u-boot.bin \
 		$(if $(CONFIG_SPL_X86_16BIT_INIT),spl/u-boot-spl.bin) \
-		$(if $(CONFIG_HAVE_REFCODE),refcode.bin) checkbinman FORCE
+		$(if $(CONFIG_HAVE_REFCODE),refcode.bin) FORCE
 	$(call if_changed,binman)
 
 OBJCOPYFLAGS_u-boot-x86-16bit.bin := -O binary -j .start16 -j .resetvec
@@ -1144,8 +1144,7 @@  u-boot-x86-16bit.bin: u-boot FORCE
 endif
 
 ifneq ($(CONFIG_ARCH_SUNXI),)
-u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.img u-boot.dtb \
-		checkbinman FORCE
+u-boot-sunxi-with-spl.bin: spl/sunxi-spl.bin u-boot.img u-boot.dtb FORCE
 	$(call if_changed,binman)
 endif
 
@@ -1379,18 +1378,6 @@  $(version_h): include/config/uboot.release FORCE
 $(timestamp_h): $(srctree)/Makefile FORCE
 	$(call filechk,timestamp.h)
 
-checkbinman: tools
-	@if ! ( echo 'import libfdt' | ( PYTHONPATH=scripts/dtc/pylibfdt $(PYTHON) )); then \
-		echo >&2; \
-		echo >&2 '*** binman needs the Python libfdt library.'; \
-		echo >&2 '*** Either install it on your system, or try:'; \
-		echo >&2 '***'; \
-		echo >&2 '*** sudo apt-get install swig libpython-dev'; \
-		echo >&2 '***'; \
-		echo >&2 '*** to have U-Boot build its own version.'; \
-		false; \
-	fi
-
 # ---------------------------------------------------------------------------
 quiet_cmd_cpp_lds = LDS     $@
 cmd_cpp_lds = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) \
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 64e0ee4..d69141a 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -682,6 +682,7 @@  config ARCH_SOCFPGA
 
 config ARCH_SUNXI
 	bool "Support sunxi (Allwinner) SoCs"
+	select BINMAN
 	select CMD_GPIO
 	select CMD_MMC if MMC
 	select CMD_USB if DISTRO_DEFAULTS
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 38a6187..9d12a98 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -152,6 +152,7 @@  config SMM_TSEG_SIZE
 config X86_RESET_VECTOR
 	bool
 	default n
+	select BINMAN
 
 # The following options control where the 16-bit and 32-bit init lies
 # If SPL is enabled then it normally holds this init code, and U-Boot proper
diff --git a/dts/Kconfig b/dts/Kconfig
index daa757d..0cef225 100644
--- a/dts/Kconfig
+++ b/dts/Kconfig
@@ -8,6 +8,17 @@  config SUPPORT_OF_CONTROL
 config DTC
 	bool
 
+config PYLIBFDT
+	bool
+
+config DTOC
+	bool
+	select PYLIBFDT
+
+config BINMAN
+	bool
+	select DTOC
+
 menu "Device Tree Control"
 	depends on SUPPORT_OF_CONTROL
 
@@ -231,6 +242,7 @@  config OF_SPL_REMOVE_PROPS
 config SPL_OF_PLATDATA
 	bool "Generate platform data for use in SPL"
 	depends on SPL_OF_CONTROL
+	select DTOC
 	help
 	  For very constrained SPL environments the overhead of decoding
 	  device tree nodes and converting their contents into platform data
@@ -252,6 +264,7 @@  config SPL_OF_PLATDATA
 config TPL_OF_PLATDATA
 	bool "Generate platform data for use in TPL"
 	depends on TPL_OF_CONTROL
+	select DTOC
 	help
 	  For very constrained SPL environments the overhead of decoding
 	  device tree nodes and converting their contents into platform data
diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl
index 065bb25..ca04476 100644
--- a/scripts/Makefile.spl
+++ b/scripts/Makefile.spl
@@ -276,10 +276,10 @@  PHONY += dts_dir
 dts_dir:
 	$(shell [ -d $(obj)/dts ] || mkdir -p $(obj)/dts)
 
-include/generated/dt-structs-gen.h: $(obj)/$(SPL_BIN).dtb dts_dir checkdtoc
+include/generated/dt-structs-gen.h: $(obj)/$(SPL_BIN).dtb dts_dir FORCE
 	$(call if_changed,dtoch)
 
-$(obj)/dts/dt-platdata.c: $(obj)/$(SPL_BIN).dtb dts_dir checkdtoc
+$(obj)/dts/dt-platdata.c: $(obj)/$(SPL_BIN).dtb dts_dir FORCE
 	$(call if_changed,dtocc)
 
 ifdef CONFIG_SAMSUNG
@@ -380,17 +380,6 @@  ifneq ($(cmd_files),)
   include $(cmd_files)
 endif
 
-checkdtoc: tools
-	@if ! ( echo 'import libfdt' | ( PYTHONPATH=scripts/dtc/pylibfdt $(PYTHON) )); then \
-		echo '*** dtoc needs the Python libfdt library. Either '; \
-		echo '*** install it on your system, or try:'; \
-		echo '***'; \
-		echo '*** sudo apt-get install swig libpython-dev'; \
-		echo '***'; \
-		echo '*** to have U-Boot build its own version.'; \
-		false; \
-	fi
-
 PHONY += FORCE
 FORCE:
 
diff --git a/scripts/dtc/Makefile b/scripts/dtc/Makefile
index f4a16ed..90ef2db 100644
--- a/scripts/dtc/Makefile
+++ b/scripts/dtc/Makefile
@@ -31,4 +31,4 @@  $(obj)/dtc-lexer.lex.o: $(obj)/dtc-parser.tab.h
 clean-files	:= dtc-lexer.lex.c dtc-parser.tab.c dtc-parser.tab.h
 
 # Added for U-Boot
-subdir-y += pylibfdt
+subdir-$(CONFIG_PYLIBFDT) += pylibfdt