Skip to contentSkip to conversation

package/tremor: fix build with Thumb only ARM archs

PATCH New Jörg Krause 3 participants 4 messages Nov 15, 2016

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 package/tremor: fix build with Thumb only ARM archs

Some ARM architectures like ARNv7-M only supports Thumb instructions, but the tremor build configuration enables ARM assembly code unconditionally for all arm triplets by defining _ARM_ASSEM_.

We are overriding this by undefining this macro for ARM architectures not supporting ARM instructions.

Fixes:
http://autobuild.buildroot.net/results/054/054f1c77b0e5d46b2dc53769469c0ed03e6b79ef/
http://autobuild.buildroot.net/results/ba1/ba1760b1428584f70e44dbffb8218ff3ee55e702/
http://autobuild.buildroot.net/results/2a6/2a687853cf0bc832fef29f88de0d85bd495fe87d/
http://autobuild.buildroot.net/results/cb6/cb6c560bf31834aadbe3d13a118b31ea8190159b/

---
 package/tremor/tremor.mk | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
package/tremor/tremor.mk +10 -2
index 97b0ce3..2a791b6 100644
@@ -16,9 +16,17 @@ TREMOR_DEPENDENCIES = libogg
 
 # tremor has ARM assembly code that cannot be compiled in Thumb2 mode,
 # so we must force the traditional ARM mode.
+# However, some ARM architectures like ARNv7-M only supports Thumb
+# instructions, but the tremor build configuration enables ARM assembly
+# code unconditionally for all arm triplets by defining _ARM_ASSEM_.
+# We are overriding this by undefining this macro for the ARM
+# architectures not supporting ARM instructions.
 ifeq ($(BR2_arm),y)
-TREMOR_CONF_ENV = \
-	CFLAGS="$(TARGET_CFLAGS) -marm"
+ifeq ($(BR2_ARM_CPU_HAS_ARM),y)
+TREMOR_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -marm"
+else
+TREMOR_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -U_ARM_ASSEM_"
+endif
 endif
 
 $(eval $(autotools-package))
Signature · 1 line
2.10.2
#1 lore raw

PATCH 1/1 package/tremor: fix build with Thumb only ARM archs

Quoted 7 lines · J?rg Krause

Some ARM architectures like ARNv7-M only supports Thumb instructions, but the tremor build configuration enables ARM assembly code unconditionally for all arm triplets by defining _ARM_ASSEM_.

We are overriding this by undefining this macro for ARM architectures not supporting ARM instructions.

Quoted 7 lines

Fixes:
http://autobuild.buildroot.net/results/054/054f1c77b0e5d46b2dc53769469c0ed03e6b79ef/
http://autobuild.buildroot.net/results/ba1/ba1760b1428584f70e44dbffb8218ff3ee55e702/
http://autobuild.buildroot.net/results/2a6/2a687853cf0bc832fef29f88de0d85bd495fe87d/
http://autobuild.buildroot.net/results/cb6/cb6c560bf31834aadbe3d13a118b31ea8190159b/

However, just to be sure, could you do a test with a toolchain for a cpu that
does have ARM instructions, but is configured with BR2_ARM_INSTRUCTIONS_THUMB?

Regards,
Arnout

Quoted 29 lines
---
 package/tremor/tremor.mk | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
package/tremor/tremor.mk +10 -2
index 97b0ce3..2a791b6 100644
@@ -16,9 +16,17 @@ TREMOR_DEPENDENCIES = libogg
 
 # tremor has ARM assembly code that cannot be compiled in Thumb2 mode,
 # so we must force the traditional ARM mode.
+# However, some ARM architectures like ARNv7-M only supports Thumb
+# instructions, but the tremor build configuration enables ARM assembly
+# code unconditionally for all arm triplets by defining _ARM_ASSEM_.
+# We are overriding this by undefining this macro for the ARM
+# architectures not supporting ARM instructions.
 ifeq ($(BR2_arm),y)
-TREMOR_CONF_ENV = \
-	CFLAGS="$(TARGET_CFLAGS) -marm"
+ifeq ($(BR2_ARM_CPU_HAS_ARM),y)
+TREMOR_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -marm"
+else
+TREMOR_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -U_ARM_ASSEM_"
+endif
 endif
 
 $(eval $(autotools-package))
Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
#2 lore raw

PATCH 1/1 package/tremor: fix build with Thumb only ARM archs

Quoted 21 lines · Arnout Vandecappelle
Quoted 19 lines · J?rg Krause

Some ARM architectures like ARNv7-M only supports Thumb instructions,
but the tremor build configuration enables ARM assembly code unconditionally for all arm triplets by defining _ARM_ASSEM_.

We are overriding this by undefining this macro for ARM architectures
not supporting ARM instructions.

Fixes:
http://autobuild.buildroot.net/results/054/054f1c77b0e5d46b2dc53769
469c0ed03e6b79ef/
http://autobuild.buildroot.net/results/ba1/ba1760b1428584f70e44dbff
b8218ff3ee55e702/
http://autobuild.buildroot.net/results/2a6/2a687853cf0bc832fef29f88
de0d85bd495fe87d/
http://autobuild.buildroot.net/results/cb6/cb6c560bf31834aadbe3d13a
118b31ea8190159b/

Quoted 3 lines
Quoted 1 line

Many thanks for the review!

Quoted 4 lines

?However, just to be sure, could you do a test with a toolchain for a cpu that
does have ARM instructions, but is configured with BR2_ARM_INSTRUCTIONS_THUMB?

Tested successfully with BR2_cortex_a9 and BR2_ARM_CPU_HAS_THUMB2.

Best regards,
J?rg Krause

#3 lore raw

PATCH 1/1 package/tremor: fix build with Thumb only ARM archs

In reply to Jörg Krause

Hello,

Quoted 1 line · J?rg Krause

Some ARM architectures like ARNv7-M only supports Thumb instructions,

ARNv7 -> ARMv7

package/tremor/tremor.mk TREMOR_DEPENDENCIES = libogg · line 29

Quoted 5 lines
package/tremor/tremor.mk +5 -0
+ifeq ($(BR2_ARM_CPU_HAS_ARM),y)
+TREMOR_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -marm"
+else
+TREMOR_CONF_ENV = CFLAGS="$(TARGET_CFLAGS) -U_ARM_ASSEM_"
+endif

I would have preferred a better solution than this, with a patch to configure.in, to add the appropriate autoconf checks to decide whether or not the optimized ARM code should be used or not.

However, consider the fact that the upstream Tremor project seems more or less dead, it means there is very little chance to get our patches merged upstream. So your simple solution is good enough.

Therefore: applied to master. Thanks a lot!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com