I tried to use the rocksdb inside R package. I used the following src/Makevars
:
CXX_STD = CXX11
PKG_CPPFLAGS = -I./rocksdb/include/
PKG_LIBS = rocksdb/librocksdb.a -lbz2 -lz -lzstd -llz4 -lsnappy
$(SHLIB): rocksdb/librocksdb.a
rocksdb/librocksdb.a: rocksdb/Makefile
CFLAGS="$(CFLAGS) $(CPICFLAGS)" AR="$(AR)" RANLIB="$(RANLIB)" LDFLAGS="$(LDFLAGS)" \
$(MAKE) -d --jobs=3 --directory=rocksdb static_lib
clean:
$(MAKE) --directory=rocksdb clean
Package installation failed with many errors (see build log below).
You could reproduce this case using Docker container:
Necessary commands:
docker run --rm -ti rocker/r-ver:latest bash
Execute in container:
apt-get update
# install system deps
apt-get install -y libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev
apt-get install -y git-core
# install R deps
install2.r Rcpp checkmate R6 tinytest
cd /tmp
git clone https://gitlab.com/artemklevtsov/rocksdb
cd rocksdb/
git submodule init
git submodule update
R CMD INSTALL .
But I can successfully run make
directly in the rocksdb source directory:
cd src/rocksdb/
make static_lib
How can I fix src/Makevars
to build rocksdb
during R package installation?
Links:
To solve the problem we should reset MAKEFLAGS
variable. So the right way to do it:
rocksdb/librocksdb.a: rocksdb/Makefile
CFLAGS="$(CCFLAGS) $(CPICFLAGS)" MAKEFLAGS="" \
$(MAKE) -C rocksdb DISABLE_WARNING_AS_ERROR=1 static_lib
MAKEFLAGS
content:
MAKEFLAGS= -- OBJECTS=RcppExports.o\ backup.o\ checkpoint.o\ db.o\ del.o\ exists.o\ get.o\ keys.o\ list.o\ options.o\ property.o\ put.o\ size.o\ sst.o\ utils.o\ version.o\ wrap.o SHLIB=rocksdb.so SHLIB_LD=$$(SHLIB_CXX11LD) SHLIB_LDFLAGS=$$(SHLIB_CXX11LDFLAGS) CXXPICFLAGS=$$(CXX11PICFLAGS) CXXFLAGS=$$(CXX11FLAGS) CXX=$$(CXX11)\ $$(CXX11STD)