On 20 Mar 2007, at 21:32, Kasper Daniel Hansen wrote: > > On Mar 20, 2007, at 7:58 PM, Ernest Turro wrote: > >> Why is it that R places CFLAGS after PKG_CFLAGS and not before when >> compiling a package (e.g. through R CMD build pkg)? This can be >> problematic if, for instance, you want to use -O3, but -O2 is in >> R_HOME/etc/Makeconf. If -O2 (in CFLAGS) appears after -O3 (in >> PKG_CFLAGS), you are left with what you didn't want: -O2. >> >> In R-exts, it says that "Flags which are set in file etc/Makeconf can >> be overridden by the environment variable MAKEFLAGS (at least for >> systems using GNU make), as in (Bourne shell syntax)" but this >> doesn't work if I set either MAKEFLAGS or CFLAGS/CXXFLAGS in my >> configure.ac script or package Makevars. > > In you example above you want to force the user to use a higher > optimization flag. But (s)he may have very valid reasons for not > doing so - and are you really sure that you are comfortable setting > -O3 on _all_ platforms? Also -O. is GCC specific so it does not > work for all compilers.
My configure script checks for GCC before setting -O3 (and -ffast-math). > > If a user really wants a super fast R (s)he will (should) compile > it with -O3. I'm compiling a MCMC simulation package. It is very intensive and so - O3 should definitely be the default level on systems with GCC. > > Having said that, I think it is problematic that one cannot > _downgrade_ the optimization. I am maintaining a package including > an external library (outside of my control) which does not work > with -O2 on some platforms, due to alignment problems. > >> Does anyone have any ideas on how to reliably override the default >> CFLAGS/CXXFLAGS given in Makeconf? > > I was given the following code some while ago by Simon Urbanek: > > all: $(SHLIB) > > MYCXXFLAGS=-O0 > > %.o: %.cpp > $(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) $(MYCXXFLAGS) -c $< - > o $@ > > (this is for C++, I imagine the syntax is straightforward for C). > Put it in src/Makevars. Thanks very much. That does indeed allow me to place my flags _after_ the flags from R_HOME/etc/Makeconf. It would be nice, though, if the PKG_CXXFLAGS/PKG_CFLAGS were automatically placed _after_ CXXFLAGS/ CFLAGS by R... I vaguely recall the Windows version placing them in that order. Cheers, Ernest > > But as I said above, I think it is a bad idea to raise the > optimization level for all users. > > Kasper > >> Many thanks, >> >> Ernest >> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel