From edd at debian.org  Sun Oct 16 16:09:20 2016
From: edd at debian.org (Dirk Eddelbuettel)
Date: Sun, 16 Oct 2016 09:09:20 -0500
Subject: [Rd] compile c++ code in an R package without -g
In-Reply-To: <CAFLer81sYXPQ8rkKj3+uXd8gXTfGHkmBUqP=3feCGE2rzvFXcQ@mail.gmail.com>
References: <CAFLer81sYXPQ8rkKj3+uXd8gXTfGHkmBUqP=3feCGE2rzvFXcQ@mail.gmail.com>
Message-ID: <22531.35344.355506.984934@max.nulle.part>


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
Dirk Eddelbuettel