build
Build FalkorDB (Rust code plus its native GraphBLAS/RediSearch dependencies), and run formatting/lint checks. Use when asked to build or compile the project, set up native dependencies for the first t
SKILL.md.claude/skills/build/SKILL.md
GitHubBuild
FalkorDB-rs is a Redis module: the Rust crates link against two native C
libraries (GraphBLAS and RediSearch) that must be compiled and installed
before cargo build will succeed.
1. First-time native dependency setup
Only needed once per machine/container (skip if cargo build already works).
On macOS, point the build at Homebrew clang first: the system clang has no OpenMP, and GraphBLAS would build single-threaded without saying so.
export CC=$(brew --prefix llvm)/bin/clang
export CXX=$(brew --prefix llvm)/bin/clang++
git submodule update --init --recursive # populates deps/{GraphBLAS,LAGraph,RediSearch}
cargo build # graph/build.rs builds them via native-deps
cargo build builds whatever is missing, so this is usually all you need. To
build them ahead of time, or to see what is happening:
cargo run --manifest-path native-deps/Cargo.toml
Results are cached at
${XDG_CACHE_HOME:-$HOME/.cache}/falkordb/native-deps/<dep>/<key>/
($FALKORDB_DEPS_CACHE overrides the root), keyed on the submodule revision,
the GB_control patch, the vendored PreJIT kernels, the recipe sources,
$CC/$CXX --version, the target triple and the OpenMP/sanitizer flavour.
If a build fails, native-deps/src/recipes/<dep>.rs documents the exact cmake
flags (-DGRAPHBLAS_COMPACT=OFF, -DCMAKE_POSITION_INDEPENDENT_CODE=ON, static
build). To build one dep only, name it, e.g. ... -- graphblas; add
FALKORDB_NATIVE_DEPS_FORCE=1 to rebuild it even on a cache hit. A cache miss
is diffable: each entry's
.stamp records the full key manifest after a --- manifest --- marker.
2. Build
cargo build # debug build -> target/debug/libfalkordb.{so,dylib}
cargo build --release # release build -> target/release/libfalkordb.{so,dylib}
3. Format & lint
cargo fmt --all -- --check
CXX=clang++ cargo clippy --all-targets
CXX=clang++is required for clippy (and any build invoking the GraphBLAS FFI bindings undergraph/src/graph/graphblas/, whose bindgen output isgraphblas/mod.rs) — without it, clippy fails trying to compile the C shims.- Format check uses the project's
rustfmt.toml(vertical function-parameter layout). Runcargo fmt --all(no--check) to auto-fix. - Run format + build + clippy together, in that order, for a full check — fail fast on formatting before spending time on a full compile.
- For a stricter, opt-in clippy pass (pedantic/nursery/cargo lints, plus an
auto-fix mode) see the
lintskill.
Notes
- CI (
.github/workflows/rust-pr.yml) runs the samecargo fmt --all --checkandCXX=clang++ cargo clippy --all-targets(pinned to a specificclang++version in CI containers; any reasonably recent localclang++works). - Cross-platform release artifacts (Linux
.so, macOS.dylib) and multi-arch Docker image publishing are handled entirely in CI — these need GH-hosted secrets/registries and are not meant to be reproduced locally.
If any step fails, report the errors clearly and help fix them.