On Wed, May 30, 2012 at 3:45 PM, Nick Bowler <nbow...@elliptictech.com> wrote: > 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/) >
I wanted to follow up and say that your suggestion worked. See http://cgit.freedesktop.org/pixman/commit/?id=31a6563ec5167d6b15fdb8c158a71ab4f97015ab I basically copied the generated rules into Makefile.am and modified the CFLAG ordering. Hacky, but it'll work until gcc is fixed. Thanks Nick! Matt