6

I am building a c program in Ubuntu-16.04. As followed in one of the other answer here, I have set the cflag enviornment variable and I am running gcc command as shown below

export CFLAGS="-msse4.1" gcc -o dpdkif_user.o -O2 -g -Wno-format-zero-length -Wno-pointer-sign -Werror -I/home/nikhil/projects/drv-netif-dpdk/rumptools/dest/usr/include -U_FORTIFY_SOURCE -DVIRTIF_BASE=dpdk -I/home/nikhil/projects/drv-netif-dpdk/src/libdpdkif/virtif -I/home/nikhil/projects/dpdk/build/include -c dpdkif_user.c 

Gcc version

cc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 

However, I am still seeing the following error:

/usr/lib/gcc/x86_64-linux-gnu/5/include/tmmintrin.h:185:1: error: inlining failed in call to always_inline ‘_mm_alignr_epi8’: target specific option mismatch _mm_alignr_epi8(__m128i __X, __m128i __Y, const int __N) ^ In file included from /home/nikhil/projects/dpdk/build/include/rte_ether.h:50:0, from dpdkif_user.c:47: /home/nikhil/projects/dpdk/build/include/rte_memcpy.h:641:13: error: called from here _mm_storeu_si128((__m128i *)((uint8_t *)dst + 1 * 16), _mm_alignr_epi8(xmm2, xmm1, offset)); \ ^ /home/nikhil/projects/dpdk/build/include/rte_memcpy.h:681:16: note: in expansion of macro ‘MOVEUNALIGNED_LEFT47_IMM’ case 0x0F: MOVEUNALIGNED_LEFT47_IMM(dst, src, n, 0x0F); break; \ ^ /home/nikhil/projects/dpdk/build/include/rte_memcpy.h:821:2: note: in expansion of macro ‘MOVEUNALIGNED_LEFT47’ 

What am I missing? Any help with this is greatly appreciated.

3
  • 1
    I don't see an MCVE here... Commented Dec 1, 2017 at 6:15
  • The question I've linked above is similar to what I've asked. It is extending the already asked question Commented Dec 1, 2017 at 6:20
  • Actually, the commands you are running makes no sense at all. In the first line you set CFLAGS, in the second line you run gcc but having nothing about CFLAGS or -msse4.1 option in the gcc command line. If you run the command manually, just put -msse4.1 in the gcc command, you don't need to set CFLAGS. (CFLAGS is used for Makefile) Commented Dec 1, 2017 at 6:27

1 Answer 1

10

The inlining failure reason target specific option mismatch means that inlining failed because the program calls an always-inline function with a specific target attribute from another function which does not support this target. This is really something that is not supportable: the compiler cannot both compile a function to use certain micro-architecture features (the always-inline function) and not use them (the function into which is inlined).

In this particular case, the cause seems to be that the DPDK sources use compiler intrinsics, but you do not compile with the necessary subtarget option. You may have set the CFLAGS variable, but it does not seem to have any affect on the compilation (it is not part of the command line you quoted). Furthermore, tmmintrin.h needs -mssse3, not -msse4.1. The DPDK makefiles should take care of all these details.

Sign up to request clarification or add additional context in comments.

1 Comment

Thank Florian Weimer! Add -mssse3 to CFLAGS fixed my problem

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.