Complete the A-to-Z Lardon3D maintenance and coherence pass. Generalize host resource policy, remove the global CPU12 ceiling, preserve host CPU/RAM reserves, scale Task capabilities through the Resource Governor, and validate deterministic parallel GV execution. Migrate Project DB to v23 with data-driven camera, lens, optical configuration and calibration profiles, including manual lenses without EXIF. Integrate safe optional LARDON SSD swap/scratch control with Governor and F10 drain/safe-to-unplug semantics. Refactor the ncurses TUI into a runtime observatory with durable progress, elapsed time, smoothed ETA, throughput, resource telemetry, Governor state, optics workflow, colors and compact/no-color fallbacks. Reconcile Queue lifetime, persistence, concurrency, comments, tests, README, AGENTS and canonical documentation. GLOBAL_MAINTENANCE_AUDIT=PASS/FROZEN
193 lines
6.7 KiB
Markdown
193 lines
6.7 KiB
Markdown
# Instructions de build
|
|
|
|
## Prérequis
|
|
|
|
- **OS** : Linux (testé sur distributions récentes)
|
|
- **Compilateur** : Clang (recommandé) ou GCC
|
|
- **Système de build** : Meson + Ninja
|
|
- **Dépendances principales** : ncursesw, SQLite, OpenSSL, GIO/GLib, OpenCV,
|
|
LibRaw, libexif, libpng, libdeflate, Ceres ; Vulkan reste optionnel
|
|
- **Langages** : API publiques C17 et implémentation mixte C17/C++17
|
|
|
|
## Bootstrap des outils
|
|
|
|
Les commandes ci-dessous installent seulement le compilateur, Meson/Ninja,
|
|
`pkg-config` et ncurses. Les bibliothèques listées plus haut doivent aussi être
|
|
disponibles dans les versions acceptées par `meson.build`; Meson reste la source
|
|
de vérité et refuse explicitement une dépendance absente ou incompatible.
|
|
|
|
```sh
|
|
# Debian / Ubuntu
|
|
sudo apt install clang meson ninja-build libncursesw5-dev pkg-config
|
|
|
|
# Fedora
|
|
sudo dnf install clang meson ninja-build ncurses-devel pkg-config
|
|
|
|
# Arch
|
|
sudo pacman -S clang meson ninja ncurses pkgconf
|
|
```
|
|
|
|
## Build standard
|
|
|
|
```sh
|
|
# Première configuration
|
|
CC=clang meson setup build
|
|
|
|
# Arbre existant
|
|
meson setup --reconfigure build
|
|
meson compile -C build -j8
|
|
```
|
|
|
|
### Options utiles
|
|
|
|
```sh
|
|
# Build de debug (défaut)
|
|
meson setup build --wipe
|
|
|
|
# Build de release
|
|
meson setup build --wipe --buildtype=release
|
|
|
|
# Build avec optimisations aggressive
|
|
meson setup build --wipe --buildtype=release -Db_lto=true
|
|
```
|
|
|
|
## Validation
|
|
|
|
```sh
|
|
# Tests unitaires
|
|
meson test -C build --print-errorlogs
|
|
|
|
# Vérification du style (whitespace)
|
|
git diff --check
|
|
|
|
# Vérification autonome d'un header C public modifié
|
|
cc -x c -std=c17 -fsyntax-only -Iinclude \
|
|
-include lardon3d/<header>.h /dev/null
|
|
```
|
|
|
|
### Preuve fraîche de maintenance globale — 1er septembre 2026
|
|
|
|
Le [registre canonique](../architecture/global_maintenance_audit.md) conserve
|
|
le détail et les qualifications. Les résultats reproductibles acquis sont :
|
|
|
|
| Configuration fraîche | Compilateurs/options | Build | Suite |
|
|
| --- | --- | ---: | ---: |
|
|
| portable | Clang/Clang++ 22.1.8, C17/C++17, `-Dvulkan_orb=disabled` | 931/931 | 64/64 sériel |
|
|
| Vulkan | Clang/Clang++ 22.1.8, C17/C++17, `-Dvulkan_orb=enabled` | 939/939 | 65/65 sériel |
|
|
| ASan/UBSan portable | Clang/Clang++ 22.1.8, `address,undefined` | graphe complet | 64/64 avec LSan désactivé après attribution externe |
|
|
| TSan portable | GCC/G++ 16.2.1, Vulkan désactivé | cibles concurrentes | 14/14 + 220 répétitions |
|
|
|
|
La suite Vulkan comprend `orb-vulkan-backend` sur la Radeon 780M RADV PHOENIX
|
|
réelle. La cible de feasibility SIFT/RootSIFT, non enregistrée dans la suite,
|
|
a été compilée/exécutée séparément : zéro divergence de décision Lowe mais des
|
|
divergences d'index et de bits de distance, donc aucune promotion en backend
|
|
production. Les probes stricts GCC/Clang C17+C++17 passent 76/76 sur les
|
|
19 headers publics modifiés ou nouveaux, ainsi que le fixture ABI, le lien
|
|
application et `git diff --check`; `scan3d/` reste intact.
|
|
|
|
L'unique revue finale indépendante GPT-5.6 SOL/ULTRA a conclu PASS sans finding
|
|
bloquant. Elle a indépendamment rejoué le build portable, la suite complète
|
|
64/64, une matrice focalisée 15/15, les 76/76 probes de headers, l'ABI, les
|
|
négatifs de seams production, le SHA-256 du manifest GV retenu et le diff-check.
|
|
Le statut canonique est donc `GLOBAL_MAINTENANCE_AUDIT=PASS/FROZEN` ; les
|
|
qualifications sanitizer ci-dessous restent néanmoins partie de la preuve.
|
|
|
|
Une validation post-freeze a ensuite attribué le délai intermittent de
|
|
`test-feature-task` à la capture de la télémétrie hôte réelle par ses Governors
|
|
synthétiques. Le fixture utilise maintenant un `ResourceSnapshot` complet,
|
|
privé, par Governor et compilé pour cette seule cible ; production continue de
|
|
lire la télémétrie réelle et n'exporte aucun seam. Après correction du second
|
|
Governor relevé en revue, Feature passe 100/100, la matrice ordonnée 4/4 et les
|
|
suites finales portable/Vulkan 64/64 et 65/65 ; ASan/UBSan ciblé avec
|
|
`detect_leaks=0` et TSan passent. Le registre canonique conserve la régression
|
|
charge 5 `WAIT`/charge 0 `START` et la qualification exacte. Un timeout `task`
|
|
isolé dans une suite normale mixte après reconstruction large reste
|
|
non reproductible : le ciblé immédiat et sa matrice de revue 100/100 passent,
|
|
sans modification de Task ni de son timeout.
|
|
|
|
La première suite LSan complète est volontairement conservée comme non-PASS :
|
|
57 OK, 6 FAIL et 1 timeout. Cinq échecs partagent exactement la fuite externe
|
|
OpenCL de 3 808 octets/68 allocations ; les deux anomalies de 30 s n'ont aucun
|
|
diagnostic sanitizer. Le délai Feature, absent du suivi initial, a ensuite été
|
|
reproduit et corrigé comme décrit ci-dessus ; le délai Task reste non
|
|
reproductible. La suite entière passe 64/64 avec ASan/UBSan actifs et
|
|
`detect_leaks=0`, tandis qu'un sous-ensemble prouvé sans loader OpenCV/OpenCL
|
|
passe 20/20 avec LSan actif. Il est donc incorrect de résumer cette preuve par
|
|
« LSan 64/64 ».
|
|
|
|
Le log Clang complet a aussi été audité. La conversion publique Sparse SfM
|
|
`uint32_t → int` était matérielle et a été corrigée avec validation ciblée ; les
|
|
autres émissions sont soit des conversions baseline déjà bornées, soit des
|
|
tests/benchmarks, soit des headers OpenCV/Ceres externes. Les emplacements et
|
|
justifications exacts restent centralisés dans le registre afin de ne pas
|
|
dupliquer une seconde liste normative ici.
|
|
|
|
## Build ASan/UBSan (debug mémoire)
|
|
|
|
À exécuter pour tout ticket touchant la mémoire, les durées de vie ou les
|
|
allocations :
|
|
|
|
```sh
|
|
CC=clang meson setup build-asan --wipe \
|
|
-Db_sanitize=address,undefined
|
|
meson compile -C build-asan -j8
|
|
meson test -C build-asan --print-errorlogs
|
|
```
|
|
|
|
## Build TSan (concurrence)
|
|
|
|
À exécuter pour tout ticket touchant la concurrence (pthread, mutex,
|
|
variables de condition, états partagés) :
|
|
|
|
```sh
|
|
CC=clang meson setup build-tsan --wipe \
|
|
-Db_sanitize=thread \
|
|
-Db_lundef=false
|
|
meson compile -C build-tsan -j8
|
|
meson test -C build-tsan --print-errorlogs
|
|
```
|
|
|
|
## Variables d'environnement
|
|
|
|
| Variable | Description |
|
|
|---|---|
|
|
| `CC` | Compilateur C (défaut : gcc) |
|
|
| `CFLAGS` | Drapeaux de compilation supplémentaires |
|
|
| `LDFLAGS` | Drapeaux de liaison supplémentaires |
|
|
|
|
## Structure du build
|
|
|
|
```text
|
|
build/
|
|
├── src/ # objets et binaires
|
|
├── tests/ # binaires de tests
|
|
└── compile_commands.json # pour LSP / clangd
|
|
```
|
|
|
|
## Dépannage
|
|
|
|
### Erreur : ncursesw introuvable
|
|
|
|
```sh
|
|
# Vérifier l'installation
|
|
pkg-config --libs ncursesw
|
|
# Si absent, installer le paquet de développement ncursesw
|
|
```
|
|
|
|
### Erreur : clang introuvable
|
|
|
|
```sh
|
|
# Utiliser gcc en alternative
|
|
meson setup build --wipe
|
|
# ou installer clang
|
|
sudo apt install clang
|
|
```
|
|
|
|
### Build lent
|
|
|
|
```sh
|
|
# Réduire la parallélisation
|
|
meson compile -C build -j4
|
|
# ou utiliser ccache
|
|
CC="ccache clang" meson setup build --wipe
|
|
```
|