Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Audit — bibliothèques requises pour une toolchain clang/LLVM C/C++ sur Air

Statut : note d’objectif. Ce document recense ce qu’Air devra fournir pour qu’un clang air (et la toolchain LLVM associée) puisse compiler et linker des programmes C et C++. C’est un objectif post-phase-3, pas un travail en cours : il sert à savoir « ce qu’on a dans le viseur ». Rien ici n’est encore un ADR ni un contrat.

Cadre

  • Le pal de la std Rust d’Air repose sur la couche 1 (Rust pur), pas sur une libc. Passer par une libc (même la nôtre) = unsafe + FFI au fondement, ce qu’Air refuse (l’unsafe est confiné, audité, à la couche 0). Cf. décision d’architecture (mémoire projet « pal Rust sur couche 1 + clang air »).
  • Les développeurs C et C++ sont servis séparément, via un clang air : libc / libm / libstdc++→libc++ air, au-dessus de la couche 1 (clientes, jamais dedans), à parité avec la std-pal Rust.
  • Saveur retenue : tout-LLVM (décision 2026-06-28) → libc++ / libc++abi / libunwind (et non libstdc++ / libsupc++).

Étage bas — natif Air (Rust sur couche 1, exporté en ABI C)

ComposantRôleNote
libc airstdlib C (malloc/stdio/string/…) + headers systèmeRust sur couche 1, ABI C. Motif « une brique, deux faces » (f() fidèle-POSIX + air_f() qui restitue le Result).
objets crtdémarrage C : Scrt1.o / crti.o / crtn.o (glue _startmain, init/fini)Équivalent C d’air-rt.
libm airmath (sin/pow/…)Rust, ou portage musl (cf. audit musl en cours).
ld airdynamic loaderSeulement si dynamique ; différable (static-only au début).

Runtimes LLVM (C/C++/asm, bâtis contre libc air → reposent sur couche 1 par transitivité)

ComposantRôleObligatoire ?
compiler-rt builtinséquivalent libgcc : __divti3, soft-float, int 128 bits…Oui
compiler-rt profile (__llvm_profile_*)couverture / PGOOptionnel
compiler-rt sanitizers (asan/ubsan/tsan/msan)-fsanitize=Optionnel
libunwind (LLVM)déroulage de pile ; requis pour exceptions C++ + backtracesOui (C++)
libc++abiABI C++ bas niveau (__cxa_*, exceptions, RTTI) ; dépend de libunwindOui (C++)
libc++stdlib C++ + headers ; dépend de libc++abiOui (C++)

Ordre de build : libc air + crt + libm → compiler-rt builtins + libunwind → libc++abi → libc++.

Pour bâtir les binaires de la toolchain (qui tourneront sur Air)

  • Un C++ de bootstrap + libc / libm / libc++.
  • zlib / zstd (compression objets & debug info).
  • Optionnels : libxml2, ncurses/terminfo (diagnostics colorés), libffi, libedit (REPL / lldb).
  • Outils de build hôte (pas des libs runtime) : CMake, Ninja, Python.

Headers

  • clang fournit ses resource headers (stddef.h, stdarg.h, stdbool.h, intrinsics…).
  • libc air fournit les headers système (stdio.h, stdlib.h, unistd.h, …).

Synthèse de la pile (C/C++)

couche 0 (interne, volatile)
  └─ couche 1 (contrat gelé : briques Rust + export ABI C)
       └─ libc air / libm air / crt air / ld air        (natif Air, Rust)
            └─ compiler-rt builtins · libunwind          (runtimes LLVM)
                 └─ libc++abi → libc++                   (C++ LLVM)
                      └─ clang air compile/linke C et C++