EddyRivasLab / easel

Sequence analysis library used by Eddy/Rivas lab code
Other
46 stars 26 forks source link

Errors when compiling: ‘_mm_max_epi8’: target specific option mismatch #28

Closed bioinformatist closed 5 years ago

bioinformatist commented 5 years ago

Hi, My HMM is installed by ArchLinux's package manager aurman, and I wanna to use easel binaries such as esl-reformat now. When I followed installation instructions in this repo, I got this error:

     GEN esl_sse_utest
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.1/include/x86intrin.h:43,
                 from ./esl_sse.c:40:
./esl_sse.h: In function ‘esl_sse_hmax_epi8’:
/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.1/include/smmintrin.h:282:1: error: inlining failed in call to always_inline ‘_mm_max_epi8’: target specific option mismatch
 _mm_max_epi8 (__m128i __X, __m128i __Y)
 ^~~~~~~~~~~~
In file included from ./esl_sse.c:43:
./esl_sse.h:66:8: note: called from here
   a  = _mm_max_epi8(a, _mm_srli_epi16     (a, 8));
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/8.2.1/include/x86intrin.h:43,
                 from ./esl_sse.c:40:
/usr/lib/gcc/x86_64-pc-linux-gnu/8.2.1/include/smmintrin.h:282:1: error: inlining failed in call to always_inline ‘_mm_max_epi8’: target specific option mismatch
... (omitted)

Could you tell me if it's caused by any dependencies?

cryptogenomicon commented 5 years ago

You'll have to give me enough information to make the problem reproducible here, if I'm going to have a chance of figuring it out.

bioinformatist commented 5 years ago

Hi Eddy, Thanks for such a really quick reply! Well, actually I'm not a full newbie to programming, and I'm working on the Manjaro Linux (Arch Linux) and aurman is the package manager (as dnf or yum for Fedora/CentOS and apt for Ubuntu). People build HMM packages on AUR (the software repository of Arch Linux) so I can install it with a simple command. However, HMM in this way comes with no easel binaries, so I need to compile them by myself.

I DO follow the instructions in README, first git clone the latest source code at master branch, then run autoconf (this will call configure.ac, right?) followed by ./configure and make. No error message till this step. But when I try run make check, I get errors as previously described.

By the way, my gcc version is 8.2.1 20181127 and 4.2.1 for make. Could it be caused by wrong version of gcc?

Thank you in advance.

npcarter commented 5 years ago

Hello. This sort of bug often occurs because the compiler isn't being passed the correct flags. To help us figure out exactly what is going on, could you please do the following:

1) Send us the output when you run the ./configure script so that we can see what it's trying to do on your system.

2) After you run ./configure, there should be a file named "Makefile" in your easel directory. Please send us that file.

3) In that Makefile, near the beginning, there should be a line that says "#define V = 1". Please change that to "define V=1" (i.e., remove the # character that makes the line a comment), then run "make clean" to remove all the previously compiled files. After that, run "make" again, and send us all of the output that generates.

That'll be a lot of text, but it's what we need in order to be able to see what's going wrong on your end.

bioinformatist commented 5 years ago

@npcarter Dear Carter,

I redirect the STDOUT of ./configure and rename it as configure.log.

configure.log

And I notice that there's a config.log file also created by ./configure:

config.log

Below is the Makefile:

Makefile.zip

Then I uncomment the #define V = 1 to turn on the verbose mode. It stops by syntax error.

Makefile:15: extraneous text after 'define' directive
Makefile:15: *** missing 'endef', unterminated 'define'.  Stop.

Anyway, it seems I can use make V=1 for verbose output. So I run make clean and make V=1 > make.log for verbose log file here:

make.log

Thank you :smile:

cryptogenomicon commented 5 years ago

Thanks. I've just pushed a fix for this to the master branch.

Other ways to work around the problem include:

    ./configure SSE_CFLAGS=-msse4.1
    make
    make check

or:

    ./configure --disable-sse4 --disable-avx --disable-avx512
    make
    make check

or to use the latest release of HMMER (3.2.1), which includes all the Easel tools.