pylibfdt: compile pylibfdt only when dtoc/binman is necessary
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Tue, 17 Oct 2017 04:42:44 +0000 (13:42 +0900)
committerTom Rini <trini@konsulko.com>
Fri, 17 Nov 2017 12:43:32 +0000 (07:43 -0500)
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>
Makefile
arch/arm/Kconfig
arch/x86/Kconfig
dts/Kconfig
scripts/Makefile.spl
scripts/dtc/Makefile

index f94813d86b797b45c5a42073caa22e1c3ef2bebd..b5f81e3627b48957c78a8418683c27f77d7a67be 100644 (file)
--- 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) \
index 1304417bbf0f710984275d19170b0fab1ad06f60..2607fedaed6f3ce59f91839893c77b7eab814136 100644 (file)
@@ -675,6 +675,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
index 98c56ad7dc7441fd6d5a83b7d88d5cf104c0f2c5..5c23b2cb57f1dd46e6c2a76c5c5deb53a3a56aed 100644 (file)
@@ -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
index daa757dd56631601faa437467ef26662e3ac97a9..0cef225ba9e645f08ff15a9169797e824b38125d 100644 (file)
@@ -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
index 065bb259d529b0b23e27de449887f3c034de17ee..ca044767a02c9bba033a3ab04d7d7795a698af3a 100644 (file)
@@ -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:
 
index f4a16ed2a5f37db52cd01d60fa7056163fce0233..90ef2db85c5f39b04847095adc61dc945a0f13a0 100644 (file)
@@ -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