boot/uboot: fix build for sunxi targets
PATCH v3 1/1 boot/uboot: fix build for sunxi targets
Since version 2017.01 U-Boot needs to run the binman tool on the host machine for building the 'u-boot-sunxi-with-spl.bin' target. The binman tool is written in Python 2 and therefore needs a Python 2 interpreter. The python scripts sets the shebang to: #!/usr/bin/env python. For modern Linux distributions python is set to the Python 3 interpreter. In this case, building U-Boot for a sunxi-based target fails:
```
BINMAN u-boot-sunxi-with-spl.bin
File "./tools/binman/binman", line 49
print result
^
SyntaxError: Missing parentheses in call to 'print'
make[1]: *** [Makefile:1090: u-boot-sunxi-with-spl.bin] Error 1
```Add a post patch hook to force the shebang to python2 in case the binman file exists.
Reported upstream:
https://lists.denx.de/pipermail/u-boot/2017-March/283164.html
Tested for U-Boot versions:
* 2016.07 (no binman tool, custom version)
* 2017.01 (binman tool, latest version)
* 2017.03-rc3 (binman tool, custom version)
---
v3:
* use a post patch hook to support custom U-Boot versions (suggested by Thomas)
v2:
* add patch to fix shebang instead of adding a host dependency for python (suggested by Peter Korsgaard)
--- boot/uboot/uboot.mk | 12 ++++++++++++ 1 file changed, 12 insertions(+)
boot/uboot/uboot.mk +12 -0
@@ -36,6 +36,18 @@ BR_NO_CHECK_HASH_FOR += $(UBOOT_SOURCE) endif endif +# The binman tool was introduced in version 2017.01. The tool is a set +# python scripts and requires a python2 interpreter. Force the shebang +# python2 to ensure the correct interpreter is used on host systems +# where python defaults to the python3 interpreter. +define UBOOT_TRY_SED_SHEBANG_BINMAN + if test -f $(@D)/tools/binman/binman; then \ + sed -i '1s_^\(#!/usr/bin/env \).*_\1python2_' \ + $(@D)/tools/binman/binman; \ + fi +endef +UBOOT_POST_PATCH_HOOKS += UBOOT_TRY_SED_SHEBANG_BINMAN + ifeq ($(BR2_TARGET_UBOOT_FORMAT_BIN),y) UBOOT_BINS += u-boot.bin endif
Signature · 1 line
2.12.0
PATCH v3 1/1 boot/uboot: fix build for sunxi targets
Hello,
boot/uboot/uboot.mk BR_NO_CHECK_HASH_FOR += $(UBOOT_SOURCE) · line 49
Quoted 11 lines · J?rg Krause
boot/uboot/uboot.mk +11
-0+# The binman tool was introduced in version 2017.01. The tool is a set +# python scripts and requires a python2 interpreter. Force the shebang +# python2 to ensure the correct interpreter is used on host systems +# where python defaults to the python3 interpreter. +define UBOOT_TRY_SED_SHEBANG_BINMAN + if test -f $(@D)/tools/binman/binman; then \ + sed -i '1s_^\(#!/usr/bin/env \).*_\1python2_' \ + $(@D)/tools/binman/binman; \ + fi +endef +UBOOT_POST_PATCH_HOOKS += UBOOT_TRY_SED_SHEBANG_BINMAN
Thanks for this. However, now that the issue has been fixed upstream, I'm not sure I'm willing to make our uboot.mk more complicated to fix a problem that:
1. Only occurs with sunxi targets and a few x86 platforms
2. Only occurs with 2017.01 exactly. binman didn't exist before, and
2017.03 was fixed in time.
So I'm tempted to put the burden on people using 2017.01 on those few platforms to carry the small patch (or upgrade to 2017.03).
What do you think?
Thanks,
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com
PATCH v3 1/1 boot/uboot: fix build for sunxi targets
Hi Thomas,
Quoted 26 lines · Thomas Petazzoni
Hello,
Quoted 6 lines · J?rg Krause
+# The binman tool was introduced in version 2017.01. The tool is a set
+# python scripts and requires a python2 interpreter. Force the shebang
+# python2 to ensure the correct interpreter is used on host systemsboot/uboot/uboot.mk BR_NO_CHECK_HASH_FOR += $(UBOOT_SOURCE) · line 49
Quoted 8 lines
boot/uboot/uboot.mk +8
-0+# where python defaults to the python3 interpreter.? +define UBOOT_TRY_SED_SHEBANG_BINMAN + if test -f $(@D)/tools/binman/binman; then \ + sed -i '1s_^\(#!/usr/bin/env \).*_\1python2_' \ + $(@D)/tools/binman/binman; \ + fi +endef +UBOOT_POST_PATCH_HOOKS += UBOOT_TRY_SED_SHEBANG_BINMANThanks for this. However, now that the issue has been fixed upstream, I'm not sure I'm willing to make our uboot.mk more complicated to fix a
problem that:?1. Only occurs with sunxi targets and a few x86 platforms
Quoted 7 lines
?2. Only occurs with 2017.01 exactly. binman didn't exist before, and ????2017.03 was fixed in time.
So I'm tempted to put the burden on people using 2017.01 on those few platforms to carry the small patch (or upgrade to 2017.03).
What do you think?
I'm fine with dumping this patch. I'll mark it as superseded.
J?rg
PATCH v3 1/1 boot/uboot: fix build for sunxi targets
Hello,
Quoted 1 line · J?rg Krause
I'm fine with dumping this patch. I'll mark it as superseded.
Thanks!
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com