Introduces a comprehensive documentation set covering theoretical foundations, CLI usage, installation, and system architecture. Adds MkDocs configuration and Makefile targets to generate, serve with live reload, and clean the documentation site. Includes citation styles and bibliography files for academic references.
85 lines
2.2 KiB
Markdown
85 lines
2.2 KiB
Markdown
# Installation
|
|
|
|
## Prerequisites
|
|
|
|
### Rust toolchain
|
|
|
|
`obikmer` requires **Rust 1.85 or later** (edition 2024). Install or update via [rustup](https://rustup.rs):
|
|
|
|
```bash
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
|
rustup update stable
|
|
```
|
|
|
|
### C build environment (required for hwloc)
|
|
|
|
`obikmer` embeds [hwloc](https://www.open-mpi.org/projects/hwloc/) (Hardware Locality) for NUMA-aware thread placement on multi-socket machines. hwloc is built from source at compile time, which requires a standard C build environment.
|
|
|
|
#### Linux (Debian/Ubuntu)
|
|
|
|
```bash
|
|
apt install build-essential automake libtool autoconf pkg-config
|
|
```
|
|
|
|
#### Linux (RHEL/Rocky/AlmaLinux)
|
|
|
|
```bash
|
|
dnf install gcc make automake libtool autoconf pkgconfig
|
|
```
|
|
|
|
#### HPC clusters
|
|
|
|
Most HPC clusters provide these tools via the module system:
|
|
|
|
```bash
|
|
module load gcc automake libtool autoconf
|
|
```
|
|
|
|
If in doubt, check that `autoreconf --version` and `libtool --version` return successfully.
|
|
|
|
#### macOS
|
|
|
|
```bash
|
|
brew install automake libtool autoconf pkg-config
|
|
```
|
|
|
|
## Building
|
|
|
|
```bash
|
|
git clone <repository-url>
|
|
cd obikmer/src
|
|
cargo build --release
|
|
```
|
|
|
|
The compiled binary is at `target/release/obikmer`.
|
|
|
|
### Building on HPC clusters (network filesystems)
|
|
|
|
HPC home directories are typically on a network filesystem (Lustre, NFS) optimized for large sequential reads, not for the many small file operations Cargo generates during compilation. Building directly on such a filesystem can be extremely slow.
|
|
|
|
Redirect the build directory to a local scratch disk:
|
|
|
|
```bash
|
|
CARGO_TARGET_DIR=/scratch/$USER/cargo-target cargo build --release
|
|
```
|
|
|
|
Adapt the path to the scratch space available on your cluster (`/var/tmp`, `/tmp`, `/scratch/local`, etc.). Once built, copy the binary to a permanent location:
|
|
|
|
```bash
|
|
cp /scratch/$USER/cargo-target/release/obikmer ~/bin/
|
|
```
|
|
|
|
## NUMA support
|
|
|
|
NUMA-aware thread placement is active automatically on multi-socket Linux machines, detected at runtime via hwloc. No build flag is required — it falls back gracefully to a single-pool strategy on:
|
|
|
|
- macOS (Apple Silicon, unified memory)
|
|
- single-socket Linux machines
|
|
- any system where hwloc reports only one NUMA node
|
|
|
|
## Verifying the installation
|
|
|
|
```bash
|
|
obikmer --help
|
|
```
|