[Bioc-devel] use -Wa, -mbig-obj -O3 when building package under Windows
Kasper Daniel Hansen
k@@perd@n|e|h@n@en @end|ng |rom gm@||@com
Fri May 24 16:31:31 CEST 2019
[ This is a crazy bug where you have to increase optimization. ]
I some to add here. I am involved in at least two packages which requires
overriding the optimization switch to downgrade optimization. You have an
additional problem where you need to add additional flags.
The solution in affxparser (see the source) is a custom compiler call where
we place -O0 before the system/package compiler flags. This is not a great
solution as it assumes that the compiler knows about -O notation (which is
true for GCC but not a true assumption everywhere).
In Rgraphviz I have the same problem (but not solved yet because of ...
time). The issue here is that recent GCCs (v8 and higher) cannot be used
with -O3 but needs -O2. I have started to think about a better solution
than affxparser, to be used by the community, but have been a bit stumped.
Preferably I would like to use autoconf macro for detecting GCC, but when
we compile a package we are using the compiler encoded in R (aka $CC). So
somehow I want to run autoconf "detect which compiler is used" but for a
specific compiler. This is probably possible, but I don't know how right
now.
Then, conditional on GCC I plan to do a regex which replaces -O3 with -O2.
This is not perfect either because the different -O3 optimizations can be
supplied as individual flags, and I don't know which flag it is which
breaks GCC. But it is must closer to the right solution. I don't know if
regex/sed'ing is better than overriding by changing the order as in
affxparser, but having the ability to do a conditional in Makevars would be
good. Of course, the autoconf route does not address Windows, but I think
we can assume / count on the fact that the RTools pipeline is used (aka, it
is always GCC).
I would be happy to communicate more on this, to get this sorted out. It
has been a todo list item for me, for a while, and I should really try to
resolve it.
But for a quick fix, look at affxparser.
Best,
Kasper
On Fri, May 24, 2019 at 10:16 AM Ramon Diaz-Uriarte <rdiaz02 using gmail.com>
wrote:
>
> Dear All,
>
> For a package we develop, OncoSimulR
> (https://bioconductor.org/packages/release/bioc/html/OncoSimulR.html), we
> have added new functionality
> (https://github.com/rdiaz02/OncoSimul/tree/freq-dep-fitness) that uses the
> ExprTk library[1] for parsing and evaluation of mathematical
> expressions. This works fine under Linux. But it is known[2] that ExprTk
> can fail when using MinGW with the "too many sections" error.
>
>
> A solution that has been suggested is to use -Wa,-mbig-obj with -O3 [3].
> But I am unable to have R compile the package with -O3; -O3 is never
> placed at the right of the default -O2 no matter what I set in
> Makevars.win[4].
>
>
>
> Any suggestions?
>
> Thanks,
>
>
> R.
>
>
>
> [1] http://www.partow.net/programming/exprtk/index.html
> [2] https://sourceforge.net/p/mingw-w64/discussion/723797/thread/c6b70624/
> .
> [3] https://github.com/MrKepzie/Natron/blob/master/Engine/ExprTk.cpp
> "// exprtk requires -Wa,-mbig-obj on mingw, but there is a bug that
> prevents linking if not using -O3"
>
> See also, for example,
> https://discourse.mc-stan.org/t/too-many-sections/6261
>
> [4]
>
> https://stackoverflow.com/questions/23414448/r-makevars-file-to-overwrite-r-cmds-default-g-options
>
> Our package has
>
> CXX_STD = CXX11
>
>
> And I've tried:
>
>
> ## To the left of -O2
> PKG_CXXFLAGS = -Wa,-mbig-obj -O3
>
> ## To the left of -O2
> PKG_CXXFLAGS += -Wa,-mbig-obj -O3
>
>
> ## Also to the left of -O2
> PKG_CPPFLAGS = -Wa,-mbig-obj -O3
>
> ## Also to the left of -O2
> PKG_CPPFLAGS += -Wa,-mbig-obj -O3
>
> ## Ignored
> PKG_CXX11FLAGS = -Wa,-mbig-obj -O3
> ## Ignored
> PKG_CXX11FLAGS += -Wa,-mbig-obj -O3
>
>
>
>
> --
> Ramon Diaz-Uriarte
> Department of Biochemistry, Lab B-25
> Facultad de Medicina
> Universidad Autónoma de Madrid
> Arzobispo Morcillo, 4
> 28029 Madrid
> Spain
>
> Phone: +34-91-497-2412
>
> Email: rdiaz02 using gmail.com
> ramon.diaz using iib.uam.es
>
> http://ligarto.org/rdiaz
>
> _______________________________________________
> Bioc-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>
--
Best,
Kasper
[[alternative HTML version deleted]]
More information about the Bioc-devel
mailing list