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