[R-pkg-devel] Creating a Makevars that includes objects from another compiler

Charles Determan cdetermanjr at gmail.com
Fri Jun 5 16:42:14 CEST 2015


Quick context, I have been working on developing a set of packages to make
GPU computing as simple as possible with R.  I have a functional package
that works very nicely with OpenCL based code (gpuR -
https://github.com/cdeterman/gpuR) but I also am building a companion CUDA
backend package (gpuRcuda - https://github.com/cdeterman/gpuRcuda) which is
stripped down to a single function at the moment to work out the compiling
issue described below.

The problem is, CUDA requires me to use the NVCC compiler.  So I cannot
just rely on the magic of Rcpp, I need to create a Makevars file.  I have
done so and I am very close but I cannot get the shared object file to be
created with NVCC.  The individual files compile with NVCC just fine, the
build script just keeps switching back to g++ for the shared object file.

A quick excerpt from my build script

/usr/local/cuda-7.0/bin/nvcc -arch=sm_30 -Xcompiler -fPIC -Xcudafe
--diag_suppress=boolean_controlling_expr_is_constant -I/usr/share/R/include
viennacl_sgemm.cu -c


ccache g++-4.8 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions
-Wl,-z,relro -o gpuRcuda.so RcppExports.o viennacl_cudaMatrix_sgemm.o
-L/usr/lib/R/lib -lR

You can see my current Makevars file here (

I have read in the 'Writing R Extensions' manual that this is possible with
the OBJECTS macro (
however I cannot figure out how to use it properly (and haven't been able
to find an example).  I have looked at the other packages on CRAN that also
use CUDA (such as WideLM which I tried to emulate) but I can't seem to
figure out why R keeps defaulting the shared library creation to g++.
Perhaps my shared object section of my Makevars is incorrect?

Any insights would be sincerely appreciated,

	[[alternative HTML version deleted]]

More information about the R-package-devel mailing list