libR-sys
Low-level R library bindings
Installation
The recommended way to build this library is to use precomputed bindings, which are available for Linux, macOS, and Windows (32- and 64-bit).
Alternatively, the library can be built from source, in which case it invokes bindgen crate, which has extra platform-specific dependencies (including msys2 for Windows).
Using precomputed bindings (recommended)
Two components are required to build the library:
- R: It needs to be installed and available in the search path.
- rust: It is recommended to install
rustusingrustup; search path should includerustbinaries.
Once R and rust are configured, the library can be easily built:
-
macOS/Linux
cargo build -
Windows
cargo build --target x86_64-pc-windows-gnu # 64-bit cargo build --target i686-pc-windows-gnu # 32-bitWhen building for
Windows, the default host should bestable-msvcand specialrusttargets should be added for compatibility withR:rustup default stable-msvc rustup target add x86_64-pc-windows-gnu # 64-bit rustup target add i686-pc-windows-gnu # 32-bitstable-msvctoolchain requires VS Build Tools. They are usually available on the systems with an installation of Visual Studio. Build tools can be obtained using an online installer (see also these examples) or usingchocolatey. Required workflow components are:- Microsoft.VisualStudio.Component.VC.CoreBuildTools
- Microsoft.VisualStudio.Component.VC.Tools.x86.x64
- Microsoft.VisualStudio.Component.Windows10SDK.19041 (the latest version of the SDK available at the moment of writing this readme)
If there is an installation of VS (or Build Tools) on the system, launch
Visual Studio Installerand ensure that either three required workflows are installed as individual components, or the wholeDesktop Development with C++workflow pack is installed.If neither VS Build Tools nor Visual Studio itself are installed, all the necessary workflows can be easily obtained with the help of
chocolatey:choco install visualstudio2019buildtools -y choco install visualstudio2019-workload-vctools -y -f --package-parameters "--no-includeRecommended --add Microsoft.VisualStudio.Component.VC.CoreBuildTools --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --add Microsoft.VisualStudio.Component.Windows10SDK.19041"
To test the build, run cargo test.
-
macOS/Linux
-
Windows
On Windows, both
RandRtoolsshould be available onPATHfor tests to succeed. Ensure thatR_HOMEpoints toRhome, e.g.C:\Program Files\R\R-4.1.0. Forx64, append the following to thePATH(usingPowerShellsyntax):$env:PATH += ";$env:R_HOME\bin\x64;$env:RTOOLS40_HOME\mingw64\bin"then test with
cargo test --target x86_64-pc-windows-gnuFor
x86,$env:PATH += ";$env:R_HOME\bin\i386;$env:RTOOLS40_HOME\mingw32\bin"and then test with
cargo test --target i686-pc-windows-gnuRtools can be downloaded from here. Alternatively,
Rtoolscan be installed usingchocolateychoco install rtools -yVerify that the environment variable
RTOOLS40_HOMEis set up to point to theRtoolsroot.
Building bindings from source (advanced)
The bindings can be generated using bindgen, special rust crate.
bindgen usage is enabled via use-bindgen feature flag.
bindgen requires libclang, which should be installed first.
This library relies on LIBCLANG_PATH environment variable to determine path to the appropriate version of libclang.
The output folder for bindings can be configured using LIBRSYS_BINDINGS_OUTPUT_PATH environment variable.
-
Linux
Set
LIBCLANG_PATHto thelibdirectory of yourllvminstallation, e.g.,LIBCLANG_PATH=/usr/lib/llvm-3.9/lib. Build & test usingcargo build --features use-bindgen cargo test --features use-bindgen -
macOS
Install
llvm-configvia homebrew with:Add it to your search path via:
If you want to compile
libR-sysfrom within RStudio, you may also have to add the following line to your.Renvironfile:PATH=/usr/local/opt/llvm/bin:Build & test using
cargo build --features use-bindgen cargo test --features use-bindgen -
Windows
Binding generation on Windows happens with the help of
MSYS2. Make sure the environment variableMSYS_ROOTpoints toMSYS2root, e.g.,C:\tools\msys64.Install
MSYS2. Here is an example usingchocolatey:choco install msys2 -ySet up
MSYS_ROOTenvironment variable. Installclangandmingw-toolchains (assumingPowerShellsyntax)&"$env:MSYS_ROOT\usr\bin\bash" -l -c "pacman -S --noconfirm mingw-w64-x86_64-clang mingw-w64-x86_64-toolchain" # 64-bit &"$env:MSYS_ROOT\usr\bin\bash" -l -c "pacman -S --noconfirm mingw32/mingw-w64-i686-clang mingw-w64-i686-toolchain" # 32-bitFor
x64, append the following to thePATH(usingPowerShellsyntax):$env:PATH += ";$env:R_HOME\bin\x64;$env:MSYS_ROOT\mingw64\bin"then build & test with
cargo build --target x86_64-pc-windows-gnu --features use-bindgen cargo test --target x86_64-pc-windows-gnu --features use-bindgenFor
x86,$env:PATH += ";$env:R_HOME\bin\i386;$env:MSYS_ROOT\mingw64\bin$env:MSYS_ROOT\mingw32\bin"and then build & test with
cargo build --target i686-pc-windows-gnu --features use-bindgen cargo test --target i686-pc-windows-gnu --features use-bindgenAdd 32-bit
Rusttoolchain and configure target:rustup toolchain install stable-i686-pc-windows-msvc rustup target add i686-pc-windows-gnu --toolchain stable-i686-pc-windows-msvcConfigure environment variables:
$env:PATH += ";$env:R_HOME\bin\i386;$env:MSYS_ROOT\mingw32\bin"Build & test using specific toolchain
cargo +stable-i686-pc-windows-msvc build --target i686-pc-windows-gnu --features use-bindgen cargo +stable-i686-pc-windows-msvc test --target i686-pc-windows-gnu --features use-bindgen
Conditional compilation depending on R installation
libR-sys crate provides these environmental variables that you can use in build.rs:
DEP_R_R_VERSION_MAJOR: The major part of the R version (e.g.4in version4.1.0)DEP_R_R_VERSION_MINOR: The minor part of the R version (e.g.1in version4.1.0)DEP_R_R_VERSION_PATCH: The patch part of the R version (e.g.0in version4.1.0)DEP_R_R_VERSION_DEVEL:trueif the R is a development version, otherwisefalseDEP_R_R_VERSION_STRING: The full version string (e.g.R version 4.1.0 (2021-05-18))DEP_R_R_HOME: The R home directory
Example build.rs
use env;