Thanks for your suggestion, Prof Ripley. The problem was that I was originally specifying PKG_CXXFLAGS and not CXXFLAGS in my Makevars, as you pointed out. Now -O3 is recognized and working.
Thanks, Ian On Fri, Apr 18, 2008 at 1:41 PM, Prof Brian Ripley <[EMAIL PROTECTED]> wrote: > On Fri, 18 Apr 2008, Ian Fiske wrote: > > > > Hi all, > > > > > > I am running R 2.6.2 in Windows XP with Rtools 2.7 and am trying to > compile > > a shared library in Windows with customized level of optimization. > > Specifically, I would like to have "-O3 -funroll-loops" as flags when I > run > > "R CMD SHLIB ***.cc" to speed the program for my simulations. > > > > I have read through the documentation and have tried adding the line > > > > PKG_CXXFLAGS = -O3 -funroll-loops > > > > in my Makevars in my package's src directory. However, this places the > > flags before the -O2 flag, thereby overriding it. > > > > I presume you meant the opposite -- 'it' refers to its immediate antecdent, > 'the -O2 flag', which overrides not is overridden? That is, the flags are > processed from left to right and later settings win. > > > > I have also tried creating a config.site file in R_HOME/etc, but that > seems to be ignored. > > > > What gave you the idea that would be relevant? I don't see it in any of > the manuals. > > > > I found a possible solution at > > http://tolstoy.newcastle.edu.au/R/e2/devel/07/03/2520.html. However, when > I > > use this suggestion, I get errors that R.h cannot be found. > > > > Please note that I do not plan to submit this package to CRAN or to other > > users with the modified flags, but I just need to set them on my machine > to > > speed up simulations for testing, etc. > > > > From the R-admin manual: > > 'Package-specific compilation flags can be overridden or added to using the > personal file $HOME/.R/Makevars.win, or if that does not exist, > $HOME/.R/Makevars. (See the rw-FAQ for the meaning of $HOME.) For the > record, the order of precedence is (last wins) > > * MakeDll and MkRules > * src/Makevars.win if it exists, otherwise src/Makevars > * $HOME/.R/Makevars.win if it exists, otherwise $HOME/.R/Makevars. > * src/Makefile.win if present causes all but the last of the above to > be ignored. > ' > > > So you can set CXXFLAGS in src/Makevars.win and that will override the > system's values. Or you could change the system setting to -O3 in > MakeDll -- it is -O3 for C and Fortran, but -O2 for C++ (which R itself > does not use) because -O3 for C++ used to be problematic (with gcc 3.4.5, > not the current version). > > I think the URL you give is too old -- it probably preceeds the corrected > separation of CPPFLAGS and C[XX]FLAGS. The rule is (from MkRules) > > .cc.o: > $(CXX) $(CPPFLAGS) $($*-CPPFLAGS) $(CXXFLAGS) $($*-CXXFLAGS) -c $< > -o $@ > > and so CPPFLAGS should contain include paths, and CXXFLAGS optimization > levels. > > I've just taken a C++-using package and added > > CXXFLAGS=-O3 -funroll-loops > > to its Makevars. All the headers were found, and that was the optimization > level used. > > > > > I appreciate any suggestions, > > Ian > > > > -- > Brian D. Ripley, [EMAIL PROTECTED] > Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ > University of Oxford, Tel: +44 1865 272861 (self) > 1 South Parks Road, +44 1865 272866 (PA) > Oxford OX1 3TG, UK Fax: +44 1865 272595 > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel