Menu

#443 Compilation failure on i386 (xmmintr.h)

Compatibility
closed-fixed
None
5
2016-01-29
2014-06-08
nitro.tm
No

During compilation on i386 architecture with GCC 4.9.0 I get the attached errors. It's related to xmmintr.h (sse) and maybe due to a false detection of cpu capabilities (intel atom).

To reproduce on my system (both lame 3.98.4 and 3.99.5):

./configure
make

1 Attachments

Discussion

  • nitro.tm

    nitro.tm - 2014-06-08

    cpuinfo

     
  • nitro.tm

    nitro.tm - 2014-06-08

    configure output

     
  • Sebastian Ramacher

    I think the configure script needs to check if gcc needs -msse to compile anything using SSE intrinsincs. Checking for the usability of xmmintrins.h doesn't seem to be enough. Passing -msse for the build of xmm_quantize_sub.c then fixes issue.

     
  • Fabian Greffrath

    Hi Roger,

    1) Your patch applies against ./configure which is an auto-generated file that gets overridden the next time autoconf is run.
    2) All that the code that your patch removes does is check for presence of the xmmintrin.h header. If this header is available, it will build the functions in the libmp3lame/vector/xmm_quantize_sub.c file ("the internal vector lib"). Given that the prototypes in xmmintrin.h are there, this should even work on an Intel Atom if "-msse" is passed on the command line.

    If this still does not compile for you with the patch provided by Sebastian Ramacher, please post the build log somewhere.

    Thank you,

    Fabian

     
    • M Manfred

      M Manfred - 2015-12-12

      The patch provided by Sebastian Ramacher that adds -msse on i386 is correct (it builds and runs) except that for some reason the change in Makefile.am does not get propagated to the actual Makefile. Modifying the Makefile does the job.

       
  • Alexander Leidinger

    • status: open --> closed-fixed
    • assigned_to: Alexander Leidinger
     
  • Alexander Leidinger

    For lame 3.100 a fix was committed which tests the header in a different way. Always adding -msse is not valid. If you want SSE then you need to specify it in CFLAGS (-msse). The fix is to not only enalbe the header exists, but when it compiles correctly.

     

Log in to post a comment.