From zhengda1936 at gmail.com  Sun Oct 16 16:52:40 2016
From: zhengda1936 at gmail.com (Da Zheng)
Date: Sun, 16 Oct 2016 10:52:40 -0400
Subject: [Rd] compile c++ code in an R package without -g
In-Reply-To: <22531.35344.355506.984934@max.nulle.part>
References: <CAFLer81sYXPQ8rkKj3+uXd8gXTfGHkmBUqP=3feCGE2rzvFXcQ@mail.gmail.com>
	<22531.35344.355506.984934@max.nulle.part>
Message-ID: <CAFLer81kpd6_E4Lu=kYTvrYgzMpaHTQP3kg-vDot8B09o_4b1g@mail.gmail.com>

Hello Dirk,

Thank you very much for your reply.

The main reason I want to remove the debug info is that when I use R
CMD check on my package, it gives the following info
* checking installed package size ... NOTE
  installed size is 223.6Mb
  sub-directories of 1Mb or more:
  libs 223.1Mb

CRAN requires an R package to pass all checks and fix all complaints
including NOTEs.
It seems R's default compilation options significantly increase the
library size.
Do you have any suggestions on fixing this NOTE?

Thanks,
Da

On Sun, Oct 16, 2016 at 10:09 AM, Dirk Eddelbuettel <edd at debian.org> wrote:
>
> On 16 October 2016 at 09:46, Da Zheng wrote:
> | I'm writing an R package that is mainly written in C++. By default, R
> | CMD INSTALL creates C/C++ flags as follows:
> | -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat
> | -Werror=format-security -D_FORTIFY_SOURCE=2 -g
>
> That looks like you are running R on a Debian or Ubuntu system as these are
> the compilation defaults we set everywhere, and which my r-base-core package
> has via the same defaults.
>
> That is also where the `-g` comes from.  By default we compile everything
> with debugging, and (these days) strip debug symbols away in a -dbg package.
>
> I.e. if you wanted to use gdb to analyse R you could without recompilation by
> just installing the r-base-core-dbg package.  That is a nice feature.
>
> | However, my package is fairly large. With debug info compiled into the
> | library, the generated .so file is over 200MB. Without debug info,
> | it's about 30MB. I hope by default debug info is disabled.
>
> You cannot, currently.
>
> The values in Makeconf (for us in /etc/R/Makeconf) cannot be edited before `R
> CMD INSTALL` et al use them.  That is a pity, but such is life.  We had prior
> discussions about this here; and at least Simon chimed in once and confirmed.
>
> | However, I don't see any option in R CMD INSTALL that can disable
> | "-g". Could  anyone tell me how to disable it?
>
> You cannot, currently.
>
> There are a few ways out:
>
>   i)  Quick local fix: Edit /etc/R/Makeconf. Obviously not portable.
>
>  ii)  Rebuild R without -g in the configure flags. Ditto.
>
> iii)  Do something in src/Makevars to strip after the build.  May be
>       flagged as non-portable by CRAN but at least it tries.
>
>  iv)  (Lot of work, potentially) Patch the R build system to allow, say,
>       sed filtering of some of the values in Makeconf. Get the patch
>       included.
>
> Hope this helps,  Dirk
>
> --
> http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org



[Rd] compile c++ code in an R package without -g
Da Zheng