On 2012-05-30 13:20 -0400, Matt Turner wrote: > I'm maintaining some ARM/iwMMXt-optimized code in pixman, > http://cgit.freedesktop.org/pixman/ > > gcc will only emit iwmmxt instructions when -march=iwmmxt{,2} is used, > which is stupid. It also has the side-effect of putting gcc into ARMv5 > mode, even though the CPU I care about is ARMv7. So, we want the rest > of the package built with -march=armv7-a. > > pixman's build system attempts to compile pixman-mmx.c with > -march=iwmmxt by building it as a convenience library, but when you > build pixman with something like > > CFLAGS="-O2 -march=armv7-a -pipe" ./configure > > it winds up putting -O2 -march=armv7-a -pipe *after* -march=iwmmxt, > which disables iwmmxt support. There is probably a way to handle this > -- I just don't know how.
This is, unfortunately for your case, by design: users are *supposed* to be able to override these things by setting CFLAGS. If there's really no way to get GCC to behave the way yo want it to, then there are some hacks that come to mind. Probably the simplest and most reliable approach is to define your own make rule to compile the C file. That way, you can put the compiler flags wherever you want. Unfortunately, you will not get to make use of Automake's automake dependency tracking, but this is (hopefully) of minor importance since you can usually just list everything explicitly as prerequisites. In your case, I think this should just amount to something like this (totally untested): crazy.lo: crazy.c other-prerequisites-here $(LTCOMPILE) $(IWMMXT_CFLAGS) -c crazy.c mostlyclean-local: clean-crazy-lo clean-crazy-lo: $(LIBTOOL) --mode=clean rm -f crazy.lo and then just list crazy.lo in _LDADD or _LIBADD variables as needed. You don't need the convenience library anymore, so delete the Automake bits related to it. Hope that helps, -- Nick Bowler, Elliptic Technologies (http://www.elliptictech.com/)