[Rd] problem customizing CXXFLAGS in Windows
Ian Fiske
ianfiske at gmail.com
Fri Apr 18 20:24:03 CEST 2008
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
<ripley at stats.ox.ac.uk> 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, ripley at stats.ox.ac.uk
> 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
>
More information about the R-devel
mailing list