* [Buildroot] [PATCH] package/lame: Fix compile on 32bit Intel with gcc-4.9.x
@ 2014-08-16 22:18 Bernd Kuhls
2014-08-17 7:36 ` Thomas Petazzoni
0 siblings, 1 reply; 5+ messages in thread
From: Bernd Kuhls @ 2014-08-16 22:18 UTC (permalink / raw)
To: buildroot
In file included from xmm_quantize_sub.c:37:0:
/home/br/br/output/host/usr/lib/gcc/i586-buildroot-linux-uclibc/4.9.1/include/xmmintrin.h:205:1: error:
inlining failed in call to always_inline '_mm_sqrt_ps': target specific option mismatch
_mm_sqrt_ps (__m128 __A)
To reproduce use this defconfig:
BR2_GCC_VERSION_4_9_X=y
BR2_PACKAGE_LAME=y
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
---
package/lame/lame.mk | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/package/lame/lame.mk b/package/lame/lame.mk
index 938b759..eac4367 100644
--- a/package/lame/lame.mk
+++ b/package/lame/lame.mk
@@ -23,6 +23,16 @@ ifeq ($(BR2_PACKAGE_NCURSES),y)
LAME_DEPENDENCIES += ncurses
endif
+# cross compiling on 32bit Intel is broken with gcc-4.9.x, for details see
+# http://lists.linuxfromscratch.org/pipermail/blfs-dev/2014-April/027259.html
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56145
+ifeq ($(BR2_i386)$(BR2_GCC_VERSION_4_9_X),yy)
+define LAME_COMPILE_FIX
+ $(SED) '/xmmintrin\.h/d' $(@D)/configure
+endef
+LAME_PRE_CONFIGURE_HOOKS += LAME_COMPILE_FIX
+endif
+
ifeq ($(BR2_ENDIAN),"BIG")
define LAME_BIGENDIAN_ARCH
echo "#define WORDS_BIGENDIAN 1" >>$(@D)/config.h
--
1.7.10.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [Buildroot] [PATCH] package/lame: Fix compile on 32bit Intel with gcc-4.9.x
2014-08-16 22:18 [Buildroot] [PATCH] package/lame: Fix compile on 32bit Intel with gcc-4.9.x Bernd Kuhls
@ 2014-08-17 7:36 ` Thomas Petazzoni
2014-08-17 10:53 ` Bernd Kuhls
0 siblings, 1 reply; 5+ messages in thread
From: Thomas Petazzoni @ 2014-08-17 7:36 UTC (permalink / raw)
To: buildroot
Dear Bernd Kuhls,
On Sun, 17 Aug 2014 00:18:14 +0200, Bernd Kuhls wrote:
> +# http://lists.linuxfromscratch.org/pipermail/blfs-dev/2014-April/027259.html
> +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56145
> +ifeq ($(BR2_i386)$(BR2_GCC_VERSION_4_9_X),yy)
> +define LAME_COMPILE_FIX
> + $(SED) '/xmmintrin\.h/d' $(@D)/configure
> +endef
> +LAME_PRE_CONFIGURE_HOOKS += LAME_COMPILE_FIX
> +endif
Unfortunately, this sort of check is not really acceptable, because it
doesn't work with external toolchains: BR2_GCC_VERSION_* symbols are
defined only for internal toolchains.
Best regards,
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Buildroot] [PATCH] package/lame: Fix compile on 32bit Intel with gcc-4.9.x
2014-08-17 7:36 ` Thomas Petazzoni
@ 2014-08-17 10:53 ` Bernd Kuhls
2014-08-17 12:55 ` Thomas Petazzoni
0 siblings, 1 reply; 5+ messages in thread
From: Bernd Kuhls @ 2014-08-17 10:53 UTC (permalink / raw)
To: buildroot
Thomas Petazzoni <thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8
@public.gmane.org> wrote in news:20140817093621.664fad88 at free-
electrons.com:
> Dear Bernd Kuhls,
>
> On Sun, 17 Aug 2014 00:18:14 +0200, Bernd Kuhls wrote:
>
>> +# http://lists.linuxfromscratch.org/pipermail/blfs-dev/2014-
April/027259.html
>> +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56145
>> +ifeq ($(BR2_i386)$(BR2_GCC_VERSION_4_9_X),yy)
>> +define LAME_COMPILE_FIX
>> + $(SED) '/xmmintrin\.h/d' $(@D)/configure
>> +endef
>> +LAME_PRE_CONFIGURE_HOOKS += LAME_COMPILE_FIX
>> +endif
>
> Unfortunately, this sort of check is not really acceptable, because it
> doesn't work with external toolchains: BR2_GCC_VERSION_* symbols are
> defined only for internal toolchains.
Hi Thomas,
I understand, but removing the gcc version check, which would remove
support for xmmintrin.h in all i386 builds, would remove the mmx support
for lame on many builds, where it is not necessary.
Would something like this, extended to all external toolchains, be
acceptable?
--- a/toolchain/toolchain-external/Config.in
+++ b/toolchain/toolchain-external/Config.in
@@ -18,6 +18,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
select BR2_INSTALL_LIBSTDCPP
select BR2_HOSTARCH_NEEDS_IA32_LIBS
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
+ select BR2_GCC_VERSION_4_9_X
help
Linaro toolchain for the ARM architecture. It uses Linaro
GCC 2014.05 (based on gcc 4.9), Linaro GDB 2014.05 (based on
In addition I could add a warning to package/lame/Config.in when gcc-4.9 is
activated to inform users that mmx support is broken.
Regards, Bernd
^ permalink raw reply [flat|nested] 5+ messages in thread* [Buildroot] [PATCH] package/lame: Fix compile on 32bit Intel with gcc-4.9.x
2014-08-17 10:53 ` Bernd Kuhls
@ 2014-08-17 12:55 ` Thomas Petazzoni
2014-08-28 20:58 ` Arnout Vandecappelle
0 siblings, 1 reply; 5+ messages in thread
From: Thomas Petazzoni @ 2014-08-17 12:55 UTC (permalink / raw)
To: buildroot
Dear Bernd Kuhls,
On Sun, 17 Aug 2014 12:53:00 +0200, Bernd Kuhls wrote:
> I understand, but removing the gcc version check, which would remove
> support for xmmintrin.h in all i386 builds, would remove the mmx support
> for lame on many builds, where it is not necessary.
Yes, understood. Maybe instead add some conditional code in lame to
enable the MMX stuff only with known working gcc versions? I think
there are some #define you can test to get the gcc version.
> Would something like this, extended to all external toolchains, be
> acceptable?
>
> --- a/toolchain/toolchain-external/Config.in
> +++ b/toolchain/toolchain-external/Config.in
> @@ -18,6 +18,7 @@ config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
> select BR2_INSTALL_LIBSTDCPP
> select BR2_HOSTARCH_NEEDS_IA32_LIBS
> select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
> + select BR2_GCC_VERSION_4_9_X
> help
> Linaro toolchain for the ARM architecture. It uses Linaro
> GCC 2014.05 (based on gcc 4.9), Linaro GDB 2014.05 (based on
That works only for "known" external toolchains: it won't work with
custom external toolchains.
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Buildroot] [PATCH] package/lame: Fix compile on 32bit Intel with gcc-4.9.x
2014-08-17 12:55 ` Thomas Petazzoni
@ 2014-08-28 20:58 ` Arnout Vandecappelle
0 siblings, 0 replies; 5+ messages in thread
From: Arnout Vandecappelle @ 2014-08-28 20:58 UTC (permalink / raw)
To: buildroot
On 08/17/14 14:55, Thomas Petazzoni wrote:
> Dear Bernd Kuhls,
>
> On Sun, 17 Aug 2014 12:53:00 +0200, Bernd Kuhls wrote:
>
>> I understand, but removing the gcc version check, which would remove
>> support for xmmintrin.h in all i386 builds, would remove the mmx support
>> for lame on many builds, where it is not necessary.
>
> Yes, understood. Maybe instead add some conditional code in lame to
> enable the MMX stuff only with known working gcc versions? I think
> there are some #define you can test to get the gcc version.
Since the work is done in a hook, it can be as simple as:
ifeq ($(BR2_i386),y)
define LAME_COMPILE_FIX
if $(CC) --version | grep -q '4\.9'; then \
$(SED) '/xmmintrin\.h/d' $(@D)/configure; \
fi
endef
endif
However, it should be a post-patch hook, not a pre-configure hook. The
convention is that anything that manipulates the source itself should be done in
the patch (or extract) step.
Regards,
Arnout
[snip]
--
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: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-08-28 20:58 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-16 22:18 [Buildroot] [PATCH] package/lame: Fix compile on 32bit Intel with gcc-4.9.x Bernd Kuhls
2014-08-17 7:36 ` Thomas Petazzoni
2014-08-17 10:53 ` Bernd Kuhls
2014-08-17 12:55 ` Thomas Petazzoni
2014-08-28 20:58 ` Arnout Vandecappelle
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox