Aller au contenu principal

Compiler HDDS depuis les sources

Ce guide couvre la compilation de HDDS depuis les sources pour les contributeurs, la personnalisation ou les plateformes sans paquets pré-compilés.

Prérequis​

Toutes les plateformes​

  • Git
  • Rust 1.75+ avec cargo
  • CMake 3.16+ (pour les bindings C/C++)

Linux​

# Ubuntu/Debian
sudo apt install build-essential git cmake pkg-config libssl-dev

# Fedora/RHEL
sudo dnf install gcc gcc-c++ git cmake openssl-devel

# Arch
sudo pacman -S base-devel git cmake openssl

macOS​

xcode-select --install
brew install cmake openssl

Windows​

Cloner le dépôt​

git clone https://git.hdds.io/hdds/hdds.git
cd hdds

Compiler HDDS (Rust)​

Build debug​

cargo build

Build release (optimisé)​

cargo build --release

Avec toutes les features​

cargo build --release --all-features

Lancer les tests​

cargo test

# With verbose output
cargo test -- --nocapture

# Integration tests only
cargo test --test integration

Lancer les benchmarks​

cargo bench

Compiler les SDKs C/C++​

Le plus simple pour compiler le SDK C++ :

make sdk-cxx

Cela lance cargo build --release -p hdds-c (couche FFI C) puis compile libhdds_cxx.a (wrappers RAII C++) via CMake.

Pour compiler aussi tous les samples C++ :

make samples-cpp samples-cpp-qos

Pour un tutorial pas-a-pas pour creer votre propre projet C++ avec HDDS, voir Hello World C++.

Etapes manuelles (sans les targets make)
# 1. Compiler le core Rust + C FFI (standalone, sans ROS 2)
cargo build --release -p hdds-c

# 2. Compiler le SDK C++
cd sdk/cxx
cmake -B build
cmake --build build

# 3. Votre application link les deux librairies :
# hdds_cxx hdds_c pthread dl m

Sorties :

  • target/release/libhdds_c.a -- couche FFI C
  • sdk/cxx/build/libhdds_cxx.a -- wrappers RAII C++
Standalone vs ROS 2

cargo build --release (workspace complet) compile tous les crates dont rmw-hdds, ce qui ajoute des dependances ROS 2 dans libhdds_c. Si vous n'utilisez pas ROS 2, compilez uniquement le crate C :

cargo build --release -p hdds-c
Support ROS 2

Les fonctionnalites ROS 2 sont optionnelles. Par defaut, le SDK compile en mode standalone. Pour activer le support ROS 2, definir HDDS_WITH_ROS2 et s'assurer que les headers ROS 2 sont disponibles.

Compiler les bindings Python​

cd sdk/python

# Create virtual environment
python -m venv .venv
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # Windows

# Install build dependencies
pip install maturin

# Build and install
maturin develop --release

# Or build wheel
maturin build --release
pip install target/wheels/hdds-*.whl

Compiler la documentation​

# Rust docs
cargo doc --no-deps --open

# Full docs with dependencies
cargo doc --open

Structure du projet​

hdds/
|-- Cargo.toml # Racine du workspace
|-- crates/
| |-- hdds/ # Bibliothèque principale
| | |-- src/
| | | |-- lib.rs
| | | |-- participant.rs
| | | |-- topic.rs
| | | |-- writer.rs
| | | |-- reader.rs
| | | |-- ...
| | |-- Cargo.toml
| |-- hdds-async/ # Wrapper async
| |-- hdds-gen/ # Générateur de code
| |-- hdds-types/ # Système de types
| |-- hdds-transport/ # Couche transport
|-- sdk/
| |-- c/ # C FFI
| |-- cxx/ # SDK C++ (wrappers RAII)
| |-- samples/ # Applications d'exemple
|-- examples/ # Applications d'exemple
|-- tests/ # Tests d'intégration
|-- benches/ # Benchmarks

Workflow de développement​

Formater le code​

cargo fmt

# Check only (CI)
cargo fmt -- --check

Lancer Clippy​

cargo clippy --all-targets --all-features -- -D warnings

Lancer toutes les vérifications​

# This is what CI runs
cargo fmt -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-features
cargo doc --no-deps

Cross-compilation​

Linux ARM64 (depuis x86_64)​

# Add target
rustup target add aarch64-unknown-linux-gnu

# Install cross-compiler
sudo apt install gcc-aarch64-linux-gnu

# Build
cargo build --release --target aarch64-unknown-linux-gnu

Avec cross​

# Install cross
cargo install cross

# Build for ARM64
cross build --release --target aarch64-unknown-linux-gnu

# Build for Windows from Linux
cross build --release --target x86_64-pc-windows-gnu

Builds embarqués (no_std)​

Pour les cibles embarquées :

cd crates/hdds-micro

# Build for Cortex-M4
cargo build --release --target thumbv7em-none-eabihf

# Build for ESP32
cargo build --release --target xtensa-esp32-none-elf

Dépannage​

Erreurs de compilation​

"Can't find OpenSSL"

# Linux
sudo apt install libssl-dev

# macOS
brew install openssl
export OPENSSL_DIR=$(brew --prefix openssl)

# Windows: Download from slproweb.com/products/Win32OpenSSL.html

"Linker error on Windows"

Assurez-vous d'avoir installé la charge de travail C++ de Visual Studio et d'utiliser la bonne toolchain MSVC :

rustup default stable-x86_64-pc-windows-msvc

Problèmes de performance​

Pour des performances maximales :

# Enable LTO and native CPU optimizations
RUSTFLAGS="-C target-cpu=native -C lto=fat" cargo build --release

Contribuer​

Voir CONTRIBUTING.md pour :

  • Les conventions de code
  • Le processus de pull request
  • Le signalement de bugs

Prochaines étapes​