Prerequisites
Start with the RAPIDS install guide for your
Linux distribution. It owns NVIDIA driver, CUDA toolkit, GPU support,
host-compiler, CMake, and Ninja compatibility. The upstream dependency
manifests are cuDF,
cuVS, and
cuGraph.
The exact native sources in this checkout are the authority for this build;
their dependencies.yaml and CMakeLists.txt files take precedence if they
differ from those upstream references.
This page covers only what connects that upstream environment to DataFusion Algeon. Linux is the only supported platform.
Native build environment
The recursive checkout builds its pinned libcudf, libcuvs, and
libcugraph sources locally. Before continuing, use the RAPIDS guidance to
install a compatible NVIDIA driver, CUDA toolkit, host compiler, CMake, and
Ninja. nvcc must be available from the CUDA installation you intend to use.
Install the checkout-specific host tools:
sudo apt-get install -y build-essential git clang mold
The root .cargo/config.toml
selects clang and mold for normal source builds.
The build shell on the next
page sets CC, CXX, and CUDAHOSTCXX; the native build scripts and CMake
read those variables. The example uses /usr/bin/gcc-14 and
/usr/bin/g++-14, so confirm both paths exist before starting, or decide now
which RAPIDS-compatible host compiler you will substitute in that block:
ls /usr/bin/gcc-14 /usr/bin/g++-14
Pin the toolchain in Cargo [env]
The build shell exports these machine-specific toolchain variables into the
current shell only. Write them once into a Cargo [env] table outside the
checkout so every shell, and scripts/check_all.sh, build with the same
toolchain whether or not the build shell block was run: use
<parent-of-checkout>/.cargo/config.toml to cover every checkout and worktree
that scripts/dev/new_worktree.sh
creates as siblings, or ~/.cargo/config.toml to apply it to all of this
user's Cargo projects:
[env]
CC = "/usr/bin/gcc-14"
CXX = "/usr/bin/g++-14"
CUDACXX = "/usr/local/cuda/bin/nvcc"
CUDAHOSTCXX = "/usr/bin/g++-14"
CUDA_HOME = "/usr/local/cuda"
CUDA_PATH = "/usr/local/cuda"
CUDAToolkit_ROOT = "/usr/local/cuda"
CMAKE_CUDA_ARCHITECTURES = "NATIVE"
Match these values to the build shell block; do not set force, since a shell
that legitimately overrides one of these (for example, to select a different
CUDA architecture list) must still win.
Native binaries target the build GPU by default. When they must run on a different GPU, choose the architecture list before the first native build as described in Building from Source.
Rust toolchain and test runner
Install Rust with the official Rustup instructions. The
workspace declares its MSRV in Cargo.toml (currently Rust 1.95); nightly is
needed only for formatting. scripts/check_all.sh requires these exact
versions of the test runner and feature checker and exits before any work if
they differ:
rustup toolchain install nightly
cargo install --locked --version 0.9.144 cargo-nextest
cargo install --locked --version 0.6.45 cargo-hack
Enable nextest's run store once per machine, in its own user config (not this
repository's), so -R latest reruns and cargo nextest replay have runs to
work from:
# ~/.config/nextest/config.toml
[experimental]
record = true
[record]
enabled = true
Retention defaults to 30 days, 100 runs, or 1 GB, whichever comes first.
Optional fixture dependency
Some components/cudf Parquet fixture tests use Python with PyArrow. It is
not needed to build or link the native libraries or Rust workspace. Install
PyArrow from its official installation guide
only when running that component's full fixture suite.
Continue with Building from Source.