Skip to contentSkip to conversation

boot/uboot: fix build for sunxi targets

PATCH Superseded Jörg Krause 2 participants 4 messages Mar 9, 2017 – Mar 21, 2017

lore
Share & tools
lore
#0 lore raw

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)

Cc Peter Korsgaard <[email protected]>
Cc Thomas Petazzoni <[email protected]>

---
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
index 1e22eaa8e..bbf61fca5 100644
@@ -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
#1 lore raw

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
#2 lore raw

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 systems

boot/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_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

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

#3 lore raw

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