steel.org

Steel

Steel

Steel est la couche de configuration declarative du build. Il lit, valide et resout un workspace (packages, profils, toolchains, targets), puis genere un artefact stable (steel.log / steelconfig.mff). Vitte consomme cet artefact pour appliquer les regles de build et executer les etapes de compilation de facon deterministe.

Points forts

Configuration déclarative (exemple)

Un steelconf décrit explicitement le workspace, les profils, les targets et la toolchain. Pas de regles ad-hoc : la structure reste lisible, composable et stable.

!muf 4

[workspace]
  .set name "demo"
  .set root "."
  .set target_dir "target"
  .set profile "debug"
..

[profile debug]
  .set opt 0
  .set debug 1
..

[profile release]
  .set opt 2
  .set debug 0
..

[target x86_64-apple-darwin]
  .set os "macos"
  .set arch "x86_64"
..

[tool gcc]
  .exec "gcc"
..

[tool ar]
  .exec "ar"
..

CLI (raccourci)

Commandes (details dans doc/manifest.md, liste rapide: doc/manifest.md#liste-rapide-commandes, flags: doc/manifest.md#flags-frequents):

Flags frequents

Exemples:

steel run 

Steel Editor (steecleditor)

Steel fournit un editeur terminal integre pour steelconf : steecleditor.

Lancer:

steel editor
steel editor path/to/steelconf

Fonctions principales:

Raccourcis utiles:

SteelLib: import OCaml

Le backend OCaml est exposé via SteelLib. Exemple d’import:

use SteelLib::ocaml::{OcamlArgs, OcamlDriver, OcamlSpec};

Voir aussi

Uniformisation totale (langages + machines)

Steel vise une uniformisation totale du build : meme modele, memes commandes et memes sorties logiques, quel que soit le langage (Vitte, C/C++, C#, Rust, …) et l’environnement (machines anciennes ou recentes, OS/arch heterogenes).

L’objectif est de pouvoir orchestrer des projets mono-langage comme des projets mixtes, sur des environnements modernes comme plus anciens, sans divergence de modele ni de workflow.

Pipeline recommandé

Le pipeline est scinde en deux phases : Configuration puis Construction.

Configurationbuild steel

Architecture

Détection de reconstruction (incrémental)

Au cœur du pipeline, Steel calcule automatiquement ce qui doit être reconstruit.

Configuration gelée et artefacts

Lors de la phase de configuration, steel / Steel peut générer un fichier .mff (configuration gelée) destiné à une compilation globale. Cette configuration est ensuite utilisée pour produire des artefacts binaires Vitte :

Steel build main.muff

Le build génère les sorties dans un répertoire d’artefacts par dossier (par convention ./.steel/ ou ./.muff/ selon la configuration), tant qu’aucune erreur n’est détectée pendant la compilation.

Projets multi-outils

Le buildfile reste générique : Steel est capable d’orchestrer des projets Vitte et des projets mixtes via des tools déclaratifs (par exemple pour C/C++/C#/Rust), tant que les toolchains et les étapes (compile/link/archive/package) sont décrites de manière explicite.

Flux de traitement

┌─────────────────────────────────────────────────────────────┐
│                    PHASE CONFIGURATION                      │
│                      (build steel)                         │
└─────────────────────────────────────────────────────────────┘

1. CHARGEMENT
   ├── steelconf (workspace + packages + profils)
   ├── Toolchains (compilateurs, linkers, outils)
   └── Targets (spécifications de build)

2. VALIDATION
   ├── Syntaxe des fichiers
   ├── Références (packages, targets, profils existants)
   ├── Compatibilités (OS/arch, versions, dépendances)
   └── Contraintes (chemins, permissions, etc.)

3. RÉSOLUTION
   ├── Application des profils et héritage
   ├── Résolution des overrides
   ├── Interpolation des variables
   ├── Calcul des empreintes toolchain (fingerprints)
   └── Résolution des dépendances transitives

4. ÉMISSION
   └── steel.log (configuration gelée et normalisée)

┌─────────────────────────────────────────────────────────────┐
│                    PHASE CONSTRUCTION                       │
│                      (build vitte)                          │
└─────────────────────────────────────────────────────────────┘

Vitte lit steel.log et :
  ├── Construit le DAG des étapes
  ├── Résout les dépendances de fichiers
  ├── Exécute l'ordre topologique
  └── Gère l'incrémental et le cache

Modèle de données

Workspace (conteneur global)

Package (unité compilable)

Profile (ensemble d’options)

Target (objectif de build)

Toolchain (ensemble d’outils)

Responsabilités de chaque couche

Steel (Déclaratif)

Vitte (Exécutif)

steel.log (Contrat)

Rôle de Vitte (orchestration de build)

Vitte orchestre la phase construction à partir de la configuration gelée :

Contrat steelconf

steelconf contient une configuration normalisée et explicite (plus d’implicite côté build). Exemples de champs attendus :

Commandes

Build

steel run[<plan>] [flags] [-- <args>]

Flags de build

Exemples :

steel build steelconf
steel fmt steelconf
steel doctor steelconf
steel graph 
steel ninja
steel cache
steel toolchain
steel editor 
steel editor-setup
steel help
steel version

Validation / émission

Exemples :

check
check --profile debug
resolve --emit ./steel.log

Introspection

Exemples :

print workspace
print targets
graph --format dot
why vittec_driver::vittec

Décompilation (audit de build)

Steel expose une commande de décompilation orientée audit : elle permet de relire un artefact de configuration gelée .mff (ou un buildfile .muff) et de reconstituer une vue complète du projet : architecture, graphe, inputs/outputs, outils utilisés et paramètres.

Exemples :

steel decompile projet.mff
steel decompile src/module/main.muff
steel decompile projet.mff --format json
steel decompile projet.mff --graph dot

Un fichier .mff enregistre la configuration normalisée et la trace de compilation (inputs, globs développés, règles, outils, arguments, empreintes). Il garantit une configuration uniforme sur toutes les machines.

Un buildfile .muff (ou un ensemble de main.muff) peut également être décompilé sur n’importe quelle machine pour retrouver :

Limite : la reconstruction effective des binaires dépend de la disponibilité et de la compatibilité des toolchains (langages compilés, versions, targets). Steel fournit la description complète ; la machine doit disposer des compilateurs/outils compatibles pour reproduire les artefacts.

Maintenance

Exemples :

fmt
clean
cache stats
cache gc
doctor

Divers

Options globales (toutes commandes)

Exemples multi-OS (Linux / macOS / Windows / BSD / Solaris)

Objectif : exécuter les commandes build steel ... de façon identique sur toutes les plateformes. Les étapes ci-dessous installent uniquement les utilitaires de base et supposent que steel et vitte sont disponibles dans le projet (ou dans le PATH).

Linux (Debian/Ubuntu)

sudo apt update
sudo apt install -y git ca-certificates curl

# build
build steel
build steel -all
build steel -debug

Linux (Fedora/RHEL)

sudo dnf install -y git ca-certificates curl

build steel
build steel -release -j 16

Linux (Arch)

sudo pacman -S --needed git ca-certificates curl

build steel -all

macOS (Homebrew)

brew install git

build steel
build steel -watch

Windows (PowerShell)

# Prérequis (au choix)
# winget install --id Git.Git -e
# winget install --id OpenJS.NodeJS.LTS -e   # si ton projet en a besoin

# Exécution
build steel
build steel -all
build steel -why app.exe

Notes Windows :

FreeBSD

sudo pkg install -y git ca_root_nss

build steel
build steel -graph=dot

OpenBSD

doas pkg_add git

build steel

NetBSD

# pkgin (si configuré)
# sudo pkgin install git ca-certificates

build steel

Solaris / illumos (OpenIndiana)

pfexec pkg install developer/versioning/git

build steel
build steel -release

Conseils cross-OS :

Langage MUF (v4.1)

Le format MUF est versionné. La version actuelle est v4.1.

Format du fichier Steel (aperçu)

Exemple MUF v4.1 (blocs + ..) :

!muf 4

[workspace]
  .set name "vitte"
  .set root "."
..

[package hello]
  .set kind "bin"
  .set version "0.1.0"
  .set src_dir "src"
..

[profile debug]
  .set opt 0
  .set debug 1
..

[default]
  .set target "hello"
..

Format steel.log (apercu)

mff 1

[host]
  os "linux"
  arch "x86_64"
..

profile "debug"

[target]
  name "syntax_smoke"
  kind "test"
..

[paths]
  root "/path/to/repo"
  dist "dist"
..

Variables d’environnement

Fichiers

Documentation

Licence

Voir COPYING.

Steel

Steel

Steel est le compilateur de configuration du build Vitte.

L’objectif : un modèle unique, un workflow unique, un artefact unique.


Pourquoi un binaire universel ?

Le build a besoin d’une configuration gelée (plus d’implicites) :

steelconf.mub est cette barrière contractuelle entre :


Pipeline

1) Configurer (freeze)

build steel

2) Construire (build)

build vitte

Commandes

Configuration

build steel [flags]

Flags usuels :

Introspection

steel print <scope>
steel graph [--format <text|dot|json>]
steel why <ref>

Format du fichier steelconf (aperçu)

Le fichier est orienté blocs, lisible, et conçu pour être résolu puis gelé.

!muf 4

[workspace]
  .set name "vitte"
  .set root "."
..

[profile debug]
  .set opt 0
  .set debug 1
..

[profile release]
  .set opt 3
  .set debug 0
..

[toolchain host]
  .set cc "clang"
  .set ar "llvm-ar"
  .set ld "clang"
..

[target host]
  .set profile "release"
  ;; étapes déclaratives (exemple minimal)
  .set step_compile "tool=cc;inputs=src/**/*.c;outputs=build/**/*.o"
  .set step_link "tool=ld;inputs=build/**/*.o;outputs=out/bin/vittec"
..

[default]
  .set target "host"
..

Fichiers


Notes de compatibilité


Licence

Voir COPYING.

Steel

Steel

Steel est la configuration déclarative du build Vitte.


Principe

Le workflow est volontairement en 2 phases :

1) Configurer (freeze)

build steel

2) Construire (build)

build vitte

Layout généré dans target/

Par défaut, Steel crée (ou met à jour) une arborescence standard :

target/
  steel/
    config.mub
    graph.json
    fingerprints.json
  build/
    <triple>/
      <profile>/
        obj/
        gen/
  out/
    <triple>/
      <profile>/
        bin/
        lib/
  cache/
    cas/
    meta/

Notes :


Commandes

Configuration

build steel [flags]

Flags usuels :

Introspection

steel print <scope>
steel graph [--format <text|dot|json>]
steel why <ref>

Format minimal de steelconf (aperçu)

!muf 4

[workspace]
  .set name "vitte"
  .set root "."
  .set target_dir "target"
..

[profile debug]
  .set opt 0
  .set debug 1
..

[profile release]
  .set opt 3
  .set debug 0
..

[toolchain host]
  .set cc "clang"
  .set ar "llvm-ar"
  .set ld "clang"
..

[target host]
  .set profile "release"
  .set step_compile "tool=cc;inputs=src/**/*.c;outputs=target/build/${TRIPLE}/${PROFILE}/obj/**/*.o"
  .set step_link "tool=ld;inputs=target/build/${TRIPLE}/${PROFILE}/obj/**/*.o;outputs=target/out/${TRIPLE}/${PROFILE}/bin/vittec"
..

[default]
  .set target "host"
..

Fichiers


Licence

Voir COPYING.

Steel

Steel

Steel est la couche de configuration déclarative du build Vitte.


Pipeline

1) Configurer (freeze)

build steel

2) Construire (build)

build vitte

Layout par défaut dans target/

target/
  steel/
    config.mub
    graph.json
    fingerprints.json
  build/
    <triple>/
      <profile>/
        obj/
        gen/
  out/
    <triple>/
      <profile>/
        bin/
        lib/
  cache/
    cas/
    meta/

Notes :


Commandes

Configuration

build steel [flags]

Flags usuels :

Introspection

steel print <scope>
steel graph [--format <text|dot|json>]
steel why <ref>

Format minimal de steelconf (aperçu)

!muf 4

[workspace]
  .set name "vitte"
  .set root "."
  .set target_dir "target"
..

[profile debug]
  .set opt 0
  .set debug 1
..

[profile release]
  .set opt 3
  .set debug 0
..

[toolchain host]
  .set cc "clang"
  .set ar "llvm-ar"
  .set ld "clang"
..

[target host]
  .set profile "release"
  .set step_compile "tool=cc;inputs=src/**/*.c;outputs=target/build/${TRIPLE}/${PROFILE}/obj/**/*.o"
  .set step_link "tool=ld;inputs=target/build/${TRIPLE}/${PROFILE}/obj/**/*.o;outputs=target/out/${TRIPLE}/${PROFILE}/bin/vittec"
..

[default]
  .set target "host"
..

Fichiers


Licence

Voir COPYING.